Fast RCNN算法
在RCNN之后的SPPNet虽然解决了重复卷积以及固定输入尺寸的问题,但是依然存在其他的问题,而Fast RCNN则具有更快、更强的性能,不仅训练的步骤可以是西安端到端,而且Backbone也是基于VGG16来及进行设计的,在训练速度上比RCNN快了将近9倍,在前向推理的速度上快了213倍,并在VOC2012数据集上达到了68.4%的检测率。
相比于RCNN主要有以下3点改进:
1、共享卷积
将整幅图送入到卷积神经网络中进行特征提取,然后使用Selective Search算法在特征图上进行区域的输出,大大的减少了卷积的计算时间;
2、RoI Pooling层
利用特征池化(RoI Pooling)方法进行特征尺度变换,这种方法可以使用任意大小的图像输入,使得训练更加的灵活、准确;
3、多任务训练
将分类任务与边界框回归任务都放进网络进行训练,并且为了避免SVM分类器所带来的单独训练与速度慢的缺点,Fast RCNN使用了SoftMax函数进行了分类。
算法具体步骤:
1、首先,图像经过选择性搜索(Selective Search 简称SS)算法提取出约2000个候选区域框,这2000个候选区域框基本上包括了图像中可能出现的目标物体。
2、将图像输入已经训练好的CNN网络中,直到最后一层卷积层,在基于原始输入图像中找到约2000个候选框的位置,然后映射到RoI Pooling层。
3、将每一个映射后的RoI划分为固定大小的网格,并且对每个小网格的所有值取得最大值(即Max Pooling操作),得到固定大小的特征图。
4、将RoI Pooling层得到的特征图作为后续FC层的输入,最后一层输出n个分类信息和4个Bounding Box修正偏移量。将Bounding Box按照位置偏移量进行修正,再根据NMS算法对所有的Bounding Box进行筛选,即可得到对该图像的最终Bounding Box预测值和每个Bounding Box对应的分类概率。
RoI Pooling层
假设卷积得到的特征图如下图所示:
先进行格子的划分,由于每个小格子的尺度不同,因此作者设计为每个小格子里去区域的最大值为感兴趣区域,如上图8*8的特征图中的黑色框内的四个小格,虽然不同,但是最终的结果是统一的,上图黑色框内的RoI Pooling结果:
多任务损失函数
其中,为目标分类u的对数损失,为每一个RoI在K+1个分类中的离散概率分布
1、分类损失
计算K+1个类的分类损失函数(K个目标类别,1个背景类别):
2、回归损失
为目标分类u的边界回归函数:
式中,,目标分类u的边界预测值为。
这里的L1 Loss作者在论文中也进行了分析,L1 Loss比L2 Loss更具抗噪性,对数值波动不敏感,能够更好的找到目标分类的边界值。
优缺点
优点:
1、更高的检测精度;
2、基于多任务损失函数使得训练更加灵活简单;
3、采用了ROI Pooling层,方便实现卷积模型的端到端的训练。
缺点:
候选框获取依然使用的是SS算法,该方法占时间比较大,没有真正意义上的实现端到端,同时无法满足实时性的要求。