R-CNN
非常好的解读(二)目标检测算法之R-CNN - 胖白白 - 博客园 (cnblogs.com)
整体流程
- 利用selective search将原图分为2000个proposal region
- 对2000个proposal region的大小进行调整,调整为227 x 277,以作为CNN的输入
- 利用CNN对2000个proposal region进行特征提取
- 利用SVM对提取的特征进行分类
- 修正检测框的位置
分步介绍
-
找出图片中可能存在目标的侯选区域region proposal(利用Selective Search方法)
-
**选择性搜索(Selective Search,SS)**中,首先将每个像素作为一组。然后,计算每一组的纹理,并将两个最接近的组结合起来。但是为了避免单个区域吞噬其他区域,我们首先对较小的组进行分组。我们继续合并区域,直到所有区域都结合在一起
-
SelectiveSearch在一张图片上提取出来约2000个侯选区域,需要注意的是这些候选区域的长宽不固定。 而使用CNN提取候选区域的特征向量,需要接受固定长度的输入,所以需要对候选区域做一些尺寸上的修改
-
-
为了适应AlexNet网络的输入图像的大小227×227,进行图片(region proposal)大小调整
-
通过CNN对候选区域提取特征向量,2000个region proposal的CNN特征组合成2000×4096(227x227)维矩阵
-
使用的是AlexNet
-
AlexNet原本是为做图像分类任务,RCNN是为做目标检测任务,故替换掉了AlexNet的最后一层的全连接(4096*1000)。
-
5个卷积层,2个全连接层
-
-
将2000×4096维特征与20个SVM组成的权值矩阵4096×20相乘(SVM是二分类器,如有20个分类,则有20个SVM),获得2000×20维矩阵
- 每个分类器都判断2000个候选区是否是某类别
-
分别对2000×20维矩阵中每一列即每一类进行非极大值抑制(NMS:non-maximum suppression),剔除部分重叠建议框,得到该列即该类中得分最高的一些建议框
- 对于所有的2000个候选区域得分进行概率筛选,将score小于一定阈值的选定框删除
- 然后对剩余的候选框,每个类别进行IoU(交并比)>= 0.5 筛选
- 根据score进行排序,把score最大的bounding box作为选定的框,计算其余bounding box与当前最大score的box的IoU,去除IoU大于设定的阈值的bounding box。
-
修正bounding box,对bounding box做回归微调
- 通过非最大抑制筛选出来的候选框不一定就非常准确
-
修正过程(线性回归)
- 给定 A = ( A x , A y , A w , A h ) A = (A_x , A_y , A_w , A_h) A=(Ax,Ay,Aw,Ah) 和 G T = ( G x , G y , G w , G h ) GT = (G_x , G_y , G_w , G_h) GT=(Gx,Gy,Gw,Gh)
- 寻找 F ( A x , A y , A w , A h ) = ( G x ′ , G y ′ , G w ′ , G h ′ ) F(A_x , A_y , A_w , A_h) = (G^{'}_x , G^{'}_y , G^{'}_w , G^{'}_h) F(Ax,Ay,Aw,Ah)=(Gx′,Gy′,Gw′,Gh′)
- ( G x ′ , G y ′ , G w ′ , G h ′ ) − > ( G x , G y , G w , G h ) (G^{'}_x , G^{'}_y , G^{'}_w , G^{'}_h) -> (G_x , G_y , G_w , G_h) (Gx′,Gy′,Gw′,Gh′)−>(Gx,Gy,Gw,Gh)
这里我们经过NMS预测得到的bounding box是A框,再经过边框回归,进行修正,得到G’,减少了原A与真实边框G的误差