一些介绍:
amodal box (非模态box?)
标记隐含的物体大小
只检测一个目标的流程
同时计算分类分数和Box坐标、使用Multitask Loss。Multitask Loss现在是一种非常常见的方法。
滑动窗口检测多个目标
开销巨大(右下是所有可能的滑动窗口数量*位置=All possilbe boxes)
解决方案:区域选择:使用proposal method预先搜索图片上目标的“可能区域”(或者叫ROI)(不是滑动窗口的box),之后可以在“可能区域”上做图像分类+检测(RCNN)
- proposal method是一些启发式方法可以寻找“可能区域”,可能用到了图像梯度、角点检测等技术
- 启发式方法相对较快(CPU几秒)
RCNN Region-Base CNN
基于Region,就是在启发式方法搜得的部分区域中(ROI)进行分类,并且还会做一个变换–在一个ROI中检测出的框子可以偏离原ROI的中心坐标、修改框子大小。
下面px,py为中心位置,ph,pw为高和宽
注意到送入卷积神经网络时,ROI要warp成224*224。下面的Transformation式子bx=px+pwtx,这种变换某种程度上可以让他们学到“warp invariant”,也就是逆warp。
注意:
对比Box:交并比IOU
IOU=重叠区域/并区域
IOU>0.5不错,>0.7很好,>0.9接近完美,对于部分目标而言,>0.9表示框子之间的间隔只有几个像素
Non-Max Suppression (NMS)
目标检测的时候图像上可能出现不同目标的多个框子重叠。NMS可以将其区分开来。
常用NMS算法流程:
-
取当前最大概率框子A,将A对其他所有框子求IOU,
-
IOU>0.7的框子都认为和A是同一个目标、删去
-
重复这个过程
(2019)还处理不好的例子:
mAP计算
p
p
t
里对这个内容讲解非常好、演示了算法流程,直接去看
\color{green} \mathrm{ppt}里对这个内容讲解非常好、演示了算法流程,直接去看
ppt里对这个内容讲解非常好、演示了算法流程,直接去看
AP值是AP曲线下的面积,最大为1(因为精确度和Recall最大为1)
如果AP要到1,则需要
- 所有检测对象与ground-truth box(GT box)的IOU>thresh
- 所有“正确检测概率”统统大于“错误检测概率”(对应于图上就是左边全绿框、右边全红框)
- 所有ground-truth box(GT box)被覆盖(就是标记的所有框子对应的对象要被检测到,判定检测到就是IOU)
- 只满足第一条可能出现有一条狗没有被检测到,这一条就覆盖了这种情况(当然这个说法有点“问题”,因为这是在反解释算法)
mAP就是在所有类上的AP取平均值
如果thresh固定等与0.5,暗含我们不关心实际上检测的有多精确(框子有多贴合),这样不是一个好的metric
所以实践中我们会检测不同thresh的mAP值,在论文中的写法就是mAP@thresh=0.xx
COCOmAP就是对不同thresh的mAP求平均
原来的RCNN速度太慢,因为要在proposal method搜索出的很多个(eg. 2000)ROI上做检测。改进方法是交换warp和卷积的顺序:
Fast RCNN
先整个卷积,然后在特征图上用proposal method搜索,再使用小CNN进行检测
Backbone指的是主干网络,ConvNet,用一个较好的图像分类网络即可
结构上对比AlexNet:
问题:How to crop features?
解决方案:
首先,这个crop区域是从原图上“切”的,不是从feature map上切的;只不过我们在原图上找到区域后要对应到卷积之后的区域。
步骤:
- 绿框是启发式方法搜到的ROI,他可以对应于卷积之后的部分grid但是不一定能对齐,故通过“snap”方法强制让ROI对齐到卷积之后的grid。
- 然后使用max-pool将其强制降采样为指定size(这里是2x2)
- 这样对于不同的ROI大小输入,计算出的Region Feature的格式都是固定的
问题很显然,Slight misalignment,有轻微的不对齐、直觉上也挺奇怪
解决办法:线性插值(不太重要)
点值=周围四个点加权求和,权是曼哈顿距离
然后用加权之后的值降采样成指定shape
Faster RCNN
将启发式搜索ROI的过程更换为一个卷积神经网络(region proposal network,RPN)来处理
这样就需要额外训练RPN
卷积之后的一个grid对应于一个指定大小的Anchor box,这个gird经过RPN可以预测他对应的Anchor是否存在一个目标(object)、是一个二分类问题。
当然一开始固定的Anchor可能不匹配目标,所以之后加了一个transform(将Anchor转为Proposal),提供了偏移和缩放框子形态的能力。
4*20*15,这里的4应该指的是4个参数(宽高中心位置)
但实际上一个框子可能能力达不到;所以对于每一个点我们会预测出K个Anchor
综合一下,对于Faster RCNN就有4个loss值需要计算:
RPN二分类(是否有目标)、RPN回归(Anchor->Proposal)、结果分类、结果回归
Faster RCNN是一种典型的两阶段目标检测网络,问题是,我们到底需不需要两个阶段?
一种单阶段网络:RPN直接预测出C+1类(多的一类是是否为Object),然后transform之后给出框子形态