Rich feature hierarchies for accurate object detection and semantic segmentation
早期,使用窗口扫描进行物体识别,计算量大。 RCNN去掉窗口扫描,用聚类方式,对图像进行分割分组,得到多个侯选框的层次组。
RCNN中有CNN重复计算,Fast RCNN则去掉重复计算,并微调选框位置。
Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
提取候选框运行在CPU上,耗时2s,效率低下。
Faster RCNN使用CNN来预测候选框。
anchor box的设置应比较好的覆盖到不同大小区域,如下图:
一张1000×600的图片,大概可以得到20k个anchor box(60×40×9)。
R-FCN: Object Detection via Region-based Fully Convolutional Networks
论文翻译详见:[译] 基于R-FCN的物体检测 (zhwhong)
RCNN系列(RCNN、Fast RCNN、Faster RCNN)中,网络由两个子CNN构成。在图片分类中,只需一个CNN,效率非常高。所以物体检测是不是也可以只用一个CNN?
图片分类需要兼容形变,而物体检测需要利用形变,如何平衡?
R-FCN利用在CNN的最后进行位置相关的特征pooling来解决以上两个问题。
经普通CNN后,做有 k^2(C+1) 个 channel 的卷积,生成位置相关的特征(position-sensitive score maps)。
C 表示分类数,加 1 表示背景,k 表示后续要pooling 的大小,所以生成 k^2 倍的channel,以应对后面的空间pooling。
普通CNN后,还有一个RPN(Region Proposal Network),生成候选框。
假设一个候选框大小为 w×h,将它投影在位置相关的特征上,并采用average-pooling的方式生成一个 k×k×k^2(C+1) 的块(与Fast RCNN一样),再采用空间相关的pooling(k×k平面上每一个点取channel上对应的部分数据),生成 k×k×(C+1)的块,最后再做average-pooling生成 C+1 的块,最后做softmax生成分类概率。
类似的,RPN也可以采用空间pooling的结构,生成一个channel为 4k^2的特征层。
空间pooling的具体操作可以参考下面。
训练与SSD相似,训练时拿来做lost计算的点取一个常数,如128。 除去正点,剩下的所有使用概率最高的负点。
You Only Look Once: Unified, Real-Time Object Detection
Faster RCNN需要对20k个anchor box进行判断是否是物体,然后再进行物体识别,分成了两步。 YOLO则把物体框的选择与识别进行了结合,一步输出,即变成”You Only Look Once”。
模型如下:
Conficence定义如下:
在原论文中,S = 7,B = 2,C = 20,所以输出的单元数为7×7×30。
代价函数:
其中 λ_coord=5
,λ_noobj=0.5
。
一般,w与 h 不是在 0,1上的均匀分布,偏小,所以开方。
注: 开方的解释是我自己的估计,可能不对。
SSD: Single Shot MultiBox Detector
YOLO在 7×7 的框架下识别物体,遇到大量小物体时,难以处理。
SSD则在不同层级的feature map下进行识别,能够覆盖更多范围。
假设在 m 层 feature map 上进行识别,则第 k 层的基本比例为
比如 s_min=0.2,s_max=0.95,表示整张图片识别物体所占比最小 0.2,最大 0.95。
在基本比例上,再取多个长宽比,令 a={1, 2, 3, 1/2, 1/3},长宽分别为
Match策略上,取ground truth与以上生成的格子重叠率大于0.5的。
位置采用Smooth L1 Regression,分类采用Softmax。
代价函数为:
undefined
undefined
x 表示类别输出,c 表示目标分类,l 表示位置输出,g 表示目标位置, α是比例常数,可取1。
训练过程中负点远多于正点,所以只取负点中,概率最大的几个,数量与正点成 3:1 。
以上方法,同一物体可能有多个预测值。
可用NMS(Non-maximum suppression,非极大值抑制)来去重。
如上图所示,一共有6个识别为人的框,每一个框有一个置信率。
现在需要消除多余的:
两个矩形的重叠率计算方式如下:
系列论文中,位置都用 (x,y,w,h)来表示,没有用左上角、右下角 (x,y,x,y) 来表示。
初衷是当 (w,h)正确时,(x,y) 一点错,会导致整个框就不准了。
在初步的实际实验中,(x,y,x,y) 效果要差一些。
背后的逻辑,物体位置用 (x,y,w,h) 来学习比较容易。
(x,y) 只需要位置相关的加权就能计算出来;
(w,h) 就更简单了,直接特征值相加即可。
(注:感谢您的阅读,希望本文对您有所帮助。如果觉得不错欢迎分享转载,但请先点击 这里 获取授权。本文由 版权印 提供保护,禁止任何形式的未授权违规转载,谢谢!)