摘要及引言
SPP-NET大幅度提高了RCNN的训练速度,但是仍然一些问题,本文从以下问题出发提出了Fast R-CNN,进一步提高了速度和精度。
- SPP-NET和RCNN的训练都是多阶段的过程:首先训练CNN网络用以提取特征,然后训练SVM用作检测器,然后训练bounding-box回归精细化目标具体位置。
- 训练耗时且耗费大量空间:对于SVM以及bounding-box回归的回归训练首先需要先将提取到的CNN特征写入磁盘。对于深层的网络,通常需要数百G的空间。
- 目标检测在测试阶段极为耗时,VGG16需要47s每张(GPU)。
本文的主要贡献如下:
- 比R-CNN以及SPPnet 更高的检测质量(mAP较高)。
- 通过使用多任务loss使得训练是个单阶段过程。
- 训练可以更新所有的网络层(spp-net仅能更新全连接层)。
特征存储不需要额外的空间。
网络结构
Fast R-CNN输入为一张图像以及诸多的region proposals(RoI)。首先通过CNN提取到整幅图像的feature map 然后对于每一个RoI根据映射提取到自己的feature vector。然后输入到全连接层,输出为两个分支,一个为softmax层输出,输出的是K+1个类别的概率(包含一个背景类)。另一个输出是对于每类生成一个求精后的bounding box。ROI pooling 层
ROI pooling 是SPP仅使用一个pyramid level 的一种特例,是将任意大小的feature map分割成H*W的栅格,然后对于每个栅格进行max pooling。这样无论feature map的尺寸怎么样,都能够生成固定大小的feature vector。初始化预训练网络
对于一个给定的深层神经网络需要经过三个步骤更改成Fast R-CNN结构。首先是将最后一个pooling层更换为ROI pooling,其中的H*W需要按照网络的全连接层的输入要求进行更改(例如VGG16的H=W=7)。然后将网络的全连接层和softmax层替换为两层,一层为全连接层加上softmax层输出K个类的概率。另一层为类别相关的bounding box回归。多任务loss
Fast RCNN不仅需要对于region proposal的类别进行预测,还需要根据region生成的bounding box与真实值之间的差距学习到他们直接的映射以便于进行bounding box的精细化回归。因此Fast RCNN的目标函数是个多任务函数,需要综合考虑分类的准确度以及定位的准确度,文中提出的目标函数为:
其中, 为softmax 产生的K+1类别的概率。u为真实类别,L(cls)使用的是log loss为分类的目标函数。 λ为调节分类与定位之间的权重,本位设置为1。[u>=1]为indicator function。u<1是为0(背景),反之为1(前景)。因为背景没有bounding box。L(loc)为定位的目标函数。
Mini-batch 采样
SPPnet之所以不能够调节SPP层之前的卷积层的权重,是因为在一个batch中,region proposal是随机来自于各个图片的,每一个region proposal的感受野都很大通常是整个图片,因此如果对之前的所有层都进行bp会很没有效率。本文提出分层采样的思想,每个SGD mini-batch处理N=2张随机图片,然后mini-batch size R=128。从每张图片获取64个ROIS。和之前SPPnet做法一致,这128个ROIS中,25%为正样本(和标记bounding box的IoU重叠大于0.5),75%为负样本(重叠为[0.1,0.5))。之所以选择负样本需要大于0.1的阈值是因为使用启发式的hard example mining。由于我们在处理的时候,来自于同一幅图片的所有region proposal共享计算和内存。因此速度很快而且不需要额外的内存空间。ROI池化层的反向传播
每一个region proposal都是从原图的feature map中进行提取特征向量,因此feature map中每一个位置都可能被很多的region使用,也就是一个输入多个输出,文中采用的是综合的方法求总的bp。
SGD 超参数
全连接层以及回归层使用的都是0-mean 高斯分布,偏差为0.01和0.001。相应的,偏置层初始化为0,所有层的权重学习率为1,偏置学习率为2.全局学习率为0.001。momentum为0.9,权重衰减为0.0005。尺度不变性
文中使用的方法是图像金字塔:训练时使用多尺度,然后在测试时,对于每一个region proposal 选择一个尺度使得region大小接近于224*224。SVD加速
由于对于每一个region proposal都需要通过全连接层的计算,耗时较多,文中提出使用SVD(奇异值分解)来加速全连接层的计算,能提高训练速度30%左右,而且精度下降很少。
结论和总结
Fast R-CNN在SPPnet基础上再刷新了目标检测的state-of-art。而且速度也有多倍的提升,同时将多阶段训练统一为一个网络的但阶段训练,可谓是一大突破。但是仍然存在一些问题,region proposal耗时较为严重,而且与现有的网络严重割裂。
这部分将在Faster R-CNN中进行改进。