Fast R-CNN学习总结
Fast R-CNN是R-CNN的改良版,同时也吸取了SPP-net中的方法。在此做一下总结。
论文中讲到在训练阶段,训练一个深度目标检测网络(VGG16),训练速度要比R-CNN快9倍左右,比SPP-net快3倍左右。在测试阶段,处理一张图片需要0.3s。在PASCAL VOC 2012数据库上的mAP也达到了66%,比R-CNN高两个百分点。
提出背景
这个方法提出的背景是,R-CNN和SPP-net在目标检测方面还有一些不足。不足表现在一下几点:
1、训练分为多个阶段,首先要微调ConvNet,用来提取特征,然后处理proposal,计算得到的ConvNet特征,使用线性SVM进行分类,最后用bounding box进行回归;
2、训练时间和空间开销大。每一张图像上有大量proposal,还要对每个proposal提取特征,并存到磁盘中;
3、测试阶段速度太慢。要对每张图片上的大量proposal提取特征,然后根据提取的特征进行检测。
创新点
Fast R-CNN的创新点在于:
1、相较于R-CNN和SPP-net,检测结果精确度更高;
2、训练只有一个阶段,将多任务的loss结合在一起;
3、在训练时,可更新所有的层;
4、不需要在硬盘中存储特征。
Fast R-CNN的框架
1、我们还是需要使用selective search算法在图像中提取2k个左右的候选框;
2、然后将图像和候选框(即RoIs)信息输入网络中,并在最后的卷积层上对每个RoI求映射关系,并使用RoI pooling layer来将对应的特征统一到相同的大小;
3、最终网络有两个输出,也对应两个loss,一个使用softmax进行分类,另一个进行bounding box回归。
其中的RoI pooling layer是借鉴了SPP-net的方法,只是只有一级“金字塔”,将特征划分为H×W的网格,对每个网格进行max-pooling,提取特征。论文中H=W=7。
Fast R-CNN的训练
我们要对网络进行修改,使用RoI pooling layer替换最后的pooling层(即全连接层之前的pooling层),使用 两个姊妹层替代最后的全连接层和softmax层。两个姊妹层,其中一个是全连接+softmax,用作分类任务;另一个是用于bounding box回归的任务。
在训练阶段,每一个mini-batch中首先加入N张完整图片,而后加入从N张图片中选取的R个候选框。这R个候选框可以复用N张图片前5个阶段的网络特征。实际选择N=2, R=128。N张完整的图像以50%的概率进行水平翻转,R个候选框的构成如下:
类别 | 比例 | 方式 |
---|---|---|
前景 | 25% | 与某个真值重叠在[0.5,1]的候选框 |
背景 | 75% | 与真值重叠的最大值在[0.1,0.5)的候选框 |
多任务loss
每个RoI都对应着一个ground-truth class 和一个ground-truth bounding box regression target 。
表示K+1个类别各自对应的概率,p由softmax层计算得到。我们将分类任务的loss定义为:
ground-truth bounding box regression target ,bounding box任务的预测结果,对应正确的类别。因为我们进行bounding box回归时,不考虑背景,所以时,bounding box回归没有对应的loss,而当时,对应的loss为:
其中
所以,最终的loss为:
RoI pooling层的反向传播
是RoI pooling层输入中的一个节点(可以理解为一个像素),是对应第r个RoI的第j个输出(也可以理解为一个像素),那么RoI pooling层所做的操作为
,其中,是池化得到的小网格区域,由于不同的RoI会可能会包含同样的像素,所以一个可能对应多个,最终loss关于 的偏导数为: