一、背景
2014年的RCNN, SPP-Net,Ross Girshick在基础上于15年推出Fast RCNN,大幅提升了目标检测的速度,同样使用最大规模的网络,Fast RCNN和RCNN相比,训练时间从84小时减少为9.5小时,测试时间从47秒减少为0.32秒。在PASCAL VOC 2007上的准确率相差无几,约在66%-67%之间。
二、网络结构
以下是RCNN 与 Fast-RCNN 比较
整体预测流程:
1、输入整张图像;
2、通过深度网络中的卷积层(VGG、Alexnet、Resnet等中的卷积层)对图像进行特征提取,得到图片的特征图;
3、利用选择性搜索算法得到图像的感兴趣区域(通常取2000个);
4、对得到的感兴趣区域进行ROI pooling(感兴趣区域池化):即通过坐标投影的方法,在特征图上得到输入图像中的感兴趣区域对应的特征区域,并对该区域进行最大值池化,这样就得到了感兴趣区域的特征,并且统一了特征大小
对ROI pooling层的输出(及感兴趣区域对应的特征图最大值池化后的特征)作为每个感兴趣区域的特征向量;
5、将感兴趣区域的特征向量与全连接层相连,并定义了多任务损失函数,分别与softmax分类器和boxbounding回归器相连,分别得到当前感兴趣区域的类别及坐标包围框;
6、对所有得到的包围框进行非极大值抑制(NMS),得到最终的检测结果。
三、特性
ROI池化
借鉴与SPP-Net,ROI池化相当于简化版,去掉了金字塔结构,如图:
考虑一个88大小的feature map,一个ROI,以及输出大小为22.
输入的固定大小的feature map
region proposal 投影之后位置(左上角,右下角坐标):(0,3),(7,8)
将其划分为(22)个sections(因为输出大小为22)
对每个section做max pooling,最后得到
多损失函数融合
多损失融合(分类损失和回归损失融合),分类采用log loss(即对真实分类的概率取负log,分类输出K+1维),回归的loss和R-CNN基本一样。
总的损失函数如下:
分类损失函数如下:
回归损失函数如下:
其中有:
利用SVD 改进全连接层(分类是softmax,回归是smoothL1)
由于卷积层计算针对的是一整张图片,而全连接层需要对每一个region proposal都作用一次,所以全连接层的计算占网络计算的将近一半(如下图)。作者采用SVD来简化全连接层计算。