目标检测评测指标
mAp(Mean Average Precision)
true prediction:
IoU>threshold
I
o
U
>
t
h
r
e
s
h
o
l
d
&
ypred=y
y
p
r
e
d
=
y
而且,多个类似的预测,只取一个,其他认为是false。即对一张图的同一个物体,假设有5个预测的IoU > threshold, 且
ypred=ygroudtruth
y
p
r
e
d
=
y
g
r
o
u
d
t
r
u
t
h
,我们则认为有1个true + 4个false
Recall: TPTP+FN T P T P + F N
理解R-CNN
- 输入:图像
- 输出:图像中每个物体的边界框(四个坐标?两个)和边框内物体的类别
R-CNN是最早的结合CNN的目标检测框架之一,当时在PASCAL, ILSVR上的评测效果达到最高。其主要思想就是判断哪些区域可能存在物体,再判断这些区域包含了那个物体。步骤如图:
- 生成2k个可能包含物体的边框
- warp图片至统一大小,训练CNN(fine-runing),然后用CNN提取fixed-size的特征
- 用Linear SVM对所有特征进行分类
- 回归模型生成边框
一些需要明确的问题:
1. 如何生成边框? Selective search《Efficient 》
2. 对2k个区域,我们截取图片并resize至227x227大小(AlexNet的输入图片大小)。然后使用在大数据集(ImageNet 或VOC2007)下pre-trained的模型,进行fine-tuning,然后提取得到4096(6x6x256)维的特征。
问:怎么构建数据集用于fine-tune CNN呢?
X:每个propsal区域的图像 fixed size(227x227)
Y:每个propsal区域,我们选和它overlap最大,且IoU>0.5的GT区域的标签作为label,这些被我们成为positive example。其他proposal都被标记为背景,是negtive examples。它们组成的数据集将被用于fine-tune CNNs
3. 存储所有上一阶段的特征,训练linear svm分类器。
问:怎么构建数据集用于训练SVM呢?
X:CNN features。
Y: 对每个类,只取GT的bbx作为positive example,取IoU<0.3的为negtive example,剩下的舍弃。
问:为什么不直接用fine-tuned CNN的最后一层softmax?
实验证明再次使用SVM效果更好。原因可能是fine_tuning的时候样本数量太少,我们通过‘jittered’增加30倍。fine-tuned的时候使用不是严格的GT,训练SVM的时候是。
4. 如何最后确定边框(class-specific bounding-box regression)
- 用 P=(px,py,pw,ph) P = ( p x , p y , p w , p h ) 表示一个bbx,前两个是p的坐标,后两个是bbx的宽和高。用 G=(Gx,Gy,Gw,Gh) G = ( G x , G y , G w , G h ) 表示真实值的bbx信息。我们希望学习一个 P→G P → G 的线性映射,或者说回归。
我们只选有效的P用于训练bbx。有效的定义:
- 与GT的IoU>threshold = 0.6 - 如果对一个GT有多个overlap的pred,取IoU最大的一个 - 其他的不选