Faster R-CNN 模型学习笔记

R-CNN 系列模型是目标检测里的经典模型,同时也是 Caffe 的经典模型,所以为了学习 Caffe 和目标检测算法的知识,通过观看论文、网上的资料以及试着用自己的数据训练一个 Faster R-CNN 后,对于 Faster R-CNN 有了初步的了解,在此把论文内容和自己的理解整理并写下来。


一、R-CNN 的历史

R-CNN 是一个经典的目标检测模型,发展到现在已经成为了一个系列,从一开始的 R-CNN 模型,到 Fast R-CNN 模型,一直到 Faster R-CNN 模型,代表了目标检测的前沿水平。
R-CNN 模型出现较早,一开始使用了 Selective Search 算法来生成区域建议候选框,在当时是一个创新,但是现在看起来,无论是从速度还是准确率上看,都不算是很好的。在随后推出的 Fast R-CNN 中,参考了 SPPnet 的特点,大幅提高了模型的训练速度和检测速度。而在 Faster R-CNN 中,采用共享的卷积网组成 RPN(Region Proposal Network),使用 RPN 可以直接预测出建议候选框,平均每张图片 300 个,大部分计算在 GPU 中完成,且卷积网络和 Fast R-CNN 共享,大幅提升了目标检测的速度。

二、区域建议网络 —— Region Proposal Network

在 Faster R-CNN 中引入了一个新的网络 —— 区域建议网络(Region Proposal Network,RPN), RPN 是一个全卷积网络,可以在每个位置同时预测物体边界和 objectness scores 。RPN 通过端到端的训练来生成高质量的区域建议,然后被 Fast R-CNN 用来做检测。通过一种简单的交替优化方法, RPN 和 Fast R-CNN 可以共享卷积特征。在 VGG-16 模型上,能够达到 5 FPS 的帧率(使用GPU),在 PASCAL VOC 2007 和 2012 上分别取得了 73.2% 和70.4% 的 mAP 。

(一)Region Proposal Network

为了生成区域建议,在最后的共享卷积层所输出的特征映射(feature map)上滑动一个小网络。这个网络被全连接到输入卷积特征映射的一个 n × n (在论文中 n = 3 ) 的空间窗口上,每个滑动窗口被映射到一个更低维向量(在 ZF 上为256维,在 VGG 上为512维)。这个向量被喂进两个同级的全连接层 —— a box-regression layer ( r e g ) and a box-classification layer ( c l s ) .注意输入图片的有效感受野很大(ZF 上为171像素,VGG 上为228像素)。Figure 3 在其中一个位置上说明了一个迷你网络。要注意的是,因为这个迷你网络以滑动窗口的方式运作,全连接层在所有空间位置上共享。这种结果由一个后接两个同级的 1 × 1 的卷积层的 n × n 的卷积层自然地实现。ReLUs 应用在 n × n 的卷积层的输出。
这里写图片描述

(二)具有平移不变性(Translation-Invariant)的 Anchors

在每个滑动窗口的位置,同时预测 k 个区域建议,所以 r e g 层有 4 k 个输出代表了 k 个 boxes 的坐标。 c l s 层输出 2 k 个得分(scores)来估计每个建议选框的为 目标/非目标 的概率。 k 个建议选框被 k 个对应的 boxes 参数化,这些 boxes 就称为 anchors 。每一个 anchor 都在上述滑动窗口的中心,对应着一种尺度和一种宽高比(aspect ratio),在每个滑动位置上都有3个尺度和3个宽高比的 anchors,总共就有9个。

(三)给 anchors 分配正负标签

在训练 RPN 时,给每个 anchor 分配一个二元标签(是否为目标)。
给两种 anchor 分配正标签:
1.与 ground-truth box 重叠有最高的 IoU(Intersection-over-Union) 的 anchor。
2.与任何一个 ground-truth box 重叠都有高于0.7的 IoU 的 anchor。
一个 ground-truth box 可能会分配正标签给多个anchor。
-给与所有的 ground-truth boxes 的 IoU 都小于0.3的 anchor 分配负标签。
即不为正也不为负的 anchor 对于训练没有贡献。

(四)学习区域建议时的损失函数

根据上面的定义,我们根据 Fast R-CNN 的多任务损失(multi-task loss)来最小化目标函数。对于一张图片,其损失函数(loss function)定义如下:

L ( { p i } , { t i } ) = 1 N c l s i L c l s ( p i , p i ) + λ 1 N r e g i p i L r e g ( t i , t i )

在这里, i 是一个 mini-batch 上一个 anchor 的索引, p i 是第 i 个 anchor 为目标的预测可能性。如果 anchor 为正 ,ground-truth 标签 p i 为1,否则为0。 t i 是一个代表预测的 bounding box 的4个参数化坐标向量, t i 是一个代表与正 anchor 对应的 ground-truth box 的4个参数化坐标向量。分类损失 L c l s 是有两个分类(目标或非目标)的对数损失。至于回归损失,使用 L r e g ( t i , t i ) = R ( t i t i ) ,其中 R 鲁棒损失函数(robust loss function) p i L r e g 这一项表示了回归损失只有在正 anchor ( p i = 1 )有作用。
对于回归损失,采用下列的4个坐标参数化:
t x = ( x x a ) / w a ,    t y = ( y y a ) / h a ,    t w = l o g ( w / w a ) ,    t h = l o g ( h / h a ) ,
t x = ( x x a ) / w a ,    t y = ( y y a ) / h a ,    t w = l o g ( w / w a ) ,    t h = l o g ( h / h a ) ,
x , y , w h 分别代表 box 中心坐标,宽和高。 x , x a x 分别代表预测的 box,anchor box 和 ground-truth box( y , w , h 也一样)

三、4步训练Faster R-CNN

1.像上述训练 RPN。这个网络使用一个 ImageNet 的预先训练模型初始化并为区域建议任务进行端到端的微调(fine-tune)
2.通过 Fast R-CNN 使用第一步的 RPN 生成的建议框来训练一个单独的检测网络。这个检测网络也是由 ImageNet 的预先训练模型初始化的。在这一步,两个网络没有共享卷积层
3.使用检测网络来初始化 RPN 训练,但是固定共享卷积层,且只微调在 RPN 独有的层。现在,两个网络共享卷积层。
4.最后让共享卷积层保持固定,微调 Fast R-CNN 的全连接层。这样,两个网络共享相同的卷积层,形成了一个统一的网络。


参考:
R.Girshick,J.Donahue,T.Darrell,J.Malik. Rich feature hierarchies for accurate object detection and semantic segmentation Tech report
R.Shaoqing,H.Kaiming,R.Girshick,Jian Sun. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
[深度学习——Caffe之经典模型详解与实战,乐毅,王斌 编著]

猜你喜欢

转载自blog.csdn.net/weixin_39679367/article/details/80372987