R-CNN

RCNN的革新在于:

1. 使用region proposals 以及 边界框回归 提升定位精度 。边界框回归就是一种充分利用CNN强大的特征提取能力的范例。

2. 使用CNN提升分类效果。


R-CNN

R-CNN的步骤是相当繁琐的,首先是训练过程,训练过程分为四步: 1. 在分类的数据集预训练,2. 微调, 3. 训练SVM, 4. 训练边界框回归。

由于预训练最后的分类是1000类,VOC 2012是21类,因此进行fine-tuning。这里的2,3步骤容易让人感到困惑,明明在第二步微调的时候设置为21类的输出,经过softmax不就能得到分类结果了吗?为什么偏要增加一个训练步骤,使用额外的SVM作为分类器?这是训练样本的质量问题,在训练卷积网络时通常需要较多的数据,因此在训练CNN时 region proposals与groundtruth的IOU大于等于0.5的都被认为正样本,其余的为负样本。这是一种比较宽松的策略,但对分类的精准度会产生阻碍,于是重新定义了正负样本,正样本为groundtruth, region proposals与groundtruth的IOU小于0.3的为负样本。由于SVM适用较少样本的学习,于是就有了CNN+SVM的构造,也就是说CNN只作为特征提取器,SVM作为分类器,SVM的输入是CNN f7的特征,在训练SVM时,CNN是固定的权重。

CNN

其实到这里目标检测的任务已经实现了,第四步训练边界框回归只是为了提升定位精度,边界回归本质上就是根据region proposal的CNN特征对其边框位置进行调整,具体的原理可以看这篇文章。注意是对每个类别分别训练一个边界框回归器,文中所选取的CNN特征是pool5处的特征 (6x6x256),训练的样本只选择那些跟ground truth的IOU超过某个阈值(论文为0.6)且IOU最大的proposal。

测试过程:测试过程比训练过程多了non-maximun suppression(非极大值抑制,NMS)去剔除冗余的框

一张图片经过region proposals ,CNN,SVM得到2000 x 20维度的打分(2000个proposals,每个proposal进行20个分类,训练时为21是因为添加了背景类别),NMS原理是这样:对于2000*20中的某一列得分,找到分数最高的一个region proposal,然后只要该列中其他region proposal和分数最高的IOU超过某一个阈值,则剔除该region proposal。这一轮剔除完后,再从剩下的region proposal找到分数最高的,然后计算别的region proposal和该分数最高的IOU是否超过阈值,超过的继续剔除,直到没有剩下region proposal。对每一列都这样操作,这样最终每一列(即每个类别)都可以得到一些region proposals。[1]

最后 这些region proposals在pool5处的特征经过对应类别的线性回归(class-specific bounding-box regressor )得到修正后的bounding box。

最后再总结一下:

RCNN首先通过selective search 得到大约2K region proposals,然后用CNN提取特征结合SVM对每个proposal进行分类, 再使用NMS剔除冗余的框,对剩下的框用线性回归进行修正得到最终结果。

疏漏错误之处,烦请多多指正!:D

[1]原文链接:https://blog.csdn.net/u014380165/article/details/72851035

[2] https://zhuanlan.zhihu.com/p/23006190

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容