文章目录
1 R-CNN
1.1 介绍
- R-CNN,即region proposals(候选区域) + CNN,是将CNN引入目标检测的开山之作。
1.2 大致步骤
- 如图所示(来自原论文https://arxiv.org/abs/1311.2524),先提取region proposal,预定义个数大约为2000,然后将图片上对应proposal的区域裁剪下来,并处理为统一尺寸(因为后面使用了全连接层(FC),在固定全连接层大小时,也就固定了它的输入的向量维度,所以需要统一尺寸),并输入CNN来提取特征,形成大量feature map,最后使用SVM分类和做Bounding-box regression。
1.3 特点
- 论文中提到它有两个关键点:一是特征提取方面,使用高容量的CNN,实现自底向上地生成region proposal;二是训练策略方面,先在大数据集上预训练网络参数,然后再进行领域微调(类似迁移学习的思想)。
- 优点:对比同期的也是使用CNN来提取特征的OverFeat模型,R-CNN大幅提高了再VOC 2012上的mAP,算是真正将CNN应用到了目标检测领域。
- 但是它的缺点是:速度慢;提取proposal的时候,计算机进行了大量的重复计算(图片上的每个proposal都要单独进入后续网络进行计算);在分类时还在使用SVM,分类效果较差,如果类别较多,则需要较多的SVM,训练过程繁琐,并且后面的分类和回归网络与前面的特征提取网络脱离。
1.4 知识补充
1)过去使用传统方法提取特征(如HOG,SIFT等),这里改用了CNN,因为CNN具有权值共享的特性,相当于把计算均摊到了所有的类,并且经过CNN提取特征后,feature map的尺寸比起原图像下降了不少,提高了计算效率,因此就节省了计算的内存和时间消耗。
2)分类时,使用了hard negative mining(难负例挖掘),具体不用太深究,大致意思就是在每轮训练过程中将网络错误分类的样本记录下来,然后继续训练,直到网络分类器性能无法提升为止。
3)边框回归里是在训练四个参数,其中两个参数控制目标框中心点的位置,另外两个参数控制目标框的尺寸。在下一部分还会进一步介绍。
2 Fast R-CNN
2.1 介绍
- Fast R-CNN,即Fast Region-based Convolutional Network method,是为了在R-CNN的基础上进一步提高检测精度,同时加快检测的速度。
- R-CNN速度慢的问题,在SPP-net里得到了解决。因为CNN要想提高准确率,可以通过加深网络,提取更多的特征,但是R-CNN的结构使得在提取特征时多了太多重复计算,而SPP-net发现了这一点,并做出了改进,但是它也存在一些缺点,导致反传时无法更新网络参数,最终导致检测精度不高,而Fast R-CNN则解决了这些问题,兼顾了这两个模型的优点。
2.2 大致步骤
- 网络结构如图所示(来自原论文https://arxiv.org/abs/1504.08083),步骤为:将整张图片输入CNN,进行特征提取,再在feature map上生成ROI,接着通过ROI pooing层改变特征图的尺寸,最后经过FC层后,分作两个兄弟分支,即将Bounding-box regression和分类都加入到特征提取网络的末尾,将整个网络变成了单阶段的multi-task。
2.3 特点
- 论文中提到了几个关键部分:
- 1)如何在提升精度的同时,加快计算速度?之前SPP-net无法通过反传更新网络参数是因为在SGD(随机梯度下降)更新参数的过程中,由于取样策略的不当,导致计算效率低,消耗计算资源多,所以这里对采样策略做出了改进:简单来说,在SGD中,对于一个mini-batch,原先的策略是在一批图片中选择单一的ROI,来进行计算,改成在单张图片中选择一批ROI。因为同一张图片的ROI可以在前向传播和反向传播过程中共享计算内存,所以提高了效率。而且,在网络结构方面,Fast R-CNN使用了流线型的计算方法,即将模型变成多任务模型,在训练CNN的同时,一并训练了分类和边框回归。由于网络要实现多任务,所以loss的计算方法也要随之改变。(在2.4节进行讨论)
- 2)分类从SVM改成使用softmax,因为SVM严格进行二分类,没法考虑到类别有所交叉的情况,而softmax则考虑了目标属于全部类别的可能性。
- 3)在ROI的采样策略方面,论文中使用的是先选择25%的与ground truth的IOU在0.5以上的ROI,然后剩下的部分则是选择IOU在0.1-0.5区间中最大的一些ROI。
- 4)在网络训练过程中,为了实现尺度不变性,原先有一种方法是暴力法,即将所有的训练和检测图片都简单地处理为统一的尺寸。这里使用了图像金字塔的方法,预先设置一些尺寸,然后在训练过程中采样图片时,随机选择一种尺寸进行训练,这其实也是一种数据增强的方法。
- 最后,论文做了实验验证,这些理论是否真的有起作用,比如通过控制变量来对比mAP的变化情况。验证了:1)多阶段训练和多任务训练;2)尺度不变性的实现方法:暴力法和图像金字塔;3)是否需要更多数据:如果数据更多,模型精度还能提升,这符合一个好模型的性质;4)对比SVM和softmax:softmax更胜一筹;5)是否proposal设置得越多越好:并不是,太多的proposal还可能导致精度下降。
- 缺点:Selective Search(选择性搜索)算法选择候选框的速度没有改善,这成了网络的瓶颈。
2.4 知识补充
1)边界框回归
- 就是要找到一种映射,使得预测出来的框接近真实框,包含了平移(两个参数)+缩放(两个参数)两部分。但是有两个问题:为什么设计的tx,ty为什么要除以宽高?为什么tw,th会有log形式?
- 答:第一个问题是为了尺度不变性。如果仅仅寻找△x或△y,图片中不同目标大小不等,则不好训练。如果再除以此时的目标框的宽高,就能达成在尺度上相等,方便训练;第二个问题因为尺度缩放系数必须大于0,所以就使用了exp函数,那么反过来学习的时候就是log了。
2)多任务损失
- 多任务loss(multi-task loss)由两部分组成,第一部分是用来表示类别预测的,取自每个类别预测概率的负对数。第二部分是边框回归的loss,为smoothL1。并且两部分损失用一个系数λ来调节权重,避免倾向。
- 问题:为什么要取负对数?smooth-L1比起之前改进了什么?
答:1)在实践中,最大化对数似然函数更为方便,因为对数函数是其参数的单调递增函数(monotonically increasing),对数值方面,概率的连乘很有可能导致下溢,而取对数后就能转为连加。而概率大于0,小于1,取对数后是负数,所以加个负号让它为正。2)L1 loss对异常值(极端值)的敏感性比R-CNN中使用的L2 loss弱,鲁棒性更好。
3 Faster R-CNN
3.1 介绍
- Faster R-CNN = RPN + Fast R-CNN,由于这三个模型都是anchor-base,而此前模型的瓶颈就在于anchor的预设上,所以Faster R-CNN针对这一瓶颈提出了RPN(Region Proposal Network)。
3.2 大致步骤
网络结构如图所示(来自原论文https://arxiv.org/abs/1506.01497),大致步骤为:先将图片输入主干特征提取网络(如ResNet),得到feature map,然后将特征图输入RPN,首先再用一层3*3的卷积提取特征,然后进入两个分支,一个分支用来学习anchor的四个参数,另一个分支用来学习anchor内是前景和背景分别的概率,两分支合并就能得到proposals,然后再与前面的feature map一同输入ROI pooing,最后进行分类和回归。其实重点就在于RPN。
3.3 特点
- RPN中的两个分支的通道数分别为2k和4k,其中的k代表k个anchor,论文中k=9,有3种长宽比和3种尺度,来进行组合。
- RPN中学习anchor内是分别属于前景和背景的概率是二分类,也是通过softmax来学习的。
- RPN中使用3*3卷积来实现滑动窗口。
4 总结
- 以上介绍了目标检测中two-stage的模型,R-CNN系列的三篇论文,顾名思义,主要就跟CNN有关,改进的目标就是围绕精度和速度考虑,考虑如何能让鱼和熊掌兼得。改进的方向就在于网络结构和训练方法上。
- 下次阅读one-stage的代表,YOLO系列论文。