![](https://img-blog.csdnimg.cn/20190815174019565.jpeg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNzE3OTc0NA==,size_16,color_FFFFFF,t_70)
目录
- 2.4 R-CNN
- 2.4.1 采样
- 2.4.2 R-CNN 架构
- 2.4.3 R-CNN 设计细节
- 2.4.3.1 IoU 概念
- 2.4.3.2 图片缩放策略
- 2.4.3.3 预训练微调模式
- 2.4.3.4 NMS 算法
- 2.4.3.5 边界框回归
- 参考资料
2.4 R-CNN
R-CNN 由 Ross Girshick(rbg) 提出,Ross Girshick是 Facebook 人工智能研究(FAIR)的研究科学家,致力于计算机视觉和机器学习。2012年,他在 Pedro Felzenszwalb 的指导下获得了芝加哥大学计算机科学博士学位。在加入 FAIR 之前,Ross 是微软研究院、Redmond 的研究员,也是加州大学伯克利分校的博士后。他因开发 R-CNN 系列目标检测方法而闻名。2017年,罗斯还因 “Mask R-CNN” 获得了 ICCV 的 Marr 奖。
尽管在同时期,OverFeat 利用一个集成的 CNN 框架可以解决图像分类、定位、检测三个任务,然而 R-CNN 前后历经 5 次版本优化,在精度上也是远超 OverFeat,后作者在 R-CNN 的基础上先后提出 Fast R-CNN、Faster R-CNN、Mask R-CNN 等家族架构。在某种意义上讲,R-CNN 可以作为现代 CNN 用于目标检测的鼻祖。
2.4.1 采样
为了检测某个对象在图像中的位置,一直最直观最暴力的方式是采用一个小矩形从图像左上角开始自左向右、自上而下的滑动扫描每一个可能的位置,这个小矩形我们就成为采样窗口,由于对象在图像中的位置、形态各异,因此可以设置多个大小、长宽比例各不相同的小矩形进行采样,如下图所示:
【图 1】
对于采样窗口采集到的子图,我们通常将其输入到 CNN 网络中提取图像特征,并在网络顶层加入分类网络层以及窗口回归网络层,如同前文介绍的 OverFeat 顶层设计。
然而滑动窗口方式可以理解为一种暴力手段,计算量巨大,且效率较低,大部分时候,窗口内的对象都只是某个对象的一部分,这对于图像分类任务或许可以接受,例如对于“狗”如果窗口内只包含“狗头”部分,对于分类器的影响较小,但对于目标定位任务而言则有很大的挑战。
另一种方法是我们在前文介绍的选择搜索算法,它是在 EGBIS 的基础上,考虑到图像的颜色、纹理等多个层面的多元化采样策略。我们在 R-CNN 网络架构中使用的也正是该方法。
2.4.2 R-CNN 架构
R-CNN 架构图如下所示:
【图 2】
如图 2 所示,R-CNN 的整个网络架构分为 4 步:
- 输入图像经过选择搜索方法,给出约 2000 个候选区域
- 由于候选区域的采样大小形状各不相同,而一般 CNN 网络架构的输入是固定尺寸大小的,因此需要对采样图片进行缩放
- 对缩放后的图像经过 CNN 网络架构提取图片特征
- 在网络顶层设计分层类(SVM)和回归层用于图片分类任务和目标定位任务
整个过程可以利用下面的伪代码表示:
ROIs = region_proposal(image) # 利用 选择搜索 方法提取约 2K 个候选区域
for ROI in ROIs # 对于每一个候选区域
patch = get_patch(image, ROI) # 裁剪该候选区域并将其缩放到指定的尺寸
results = detector(patch) # 利用 CNN 网络进行特征提取以及目标检测
2.4.3 R-CNN 设计细节
2.4.3.1 IoU 概念
我们在训练阶段使用选择搜索算法给出候选区域,这里提供的候选区域根据与标注的对象位置的
I
o
U
IoU
IoU,判定候选框的正负样本标签,根据设定的阈值大小标记候选区域的正负标签,实验证明阈值为 0.3 效果最佳。
【图 3】
如上图,假设 U U U 是整个图片, B B B 为对象的标注区域位置, A A A 为选择搜素给出的候选区域, I o U IoU IoU 评估的是 A A A 与 B B B 的重叠度,即 I o U ( A , B ) = A ∩ B A ∪ B IoU(A, B) = \frac{A\cap B}{A \cup B} IoU(A,B)=A∪BA∩B。
2.4.3.2 图片缩放策略
在选择搜索算法给出的候选区域后,我们需要对候选区域进行缩放以适应 CNN 网络的输入,在这里,CNN 网络架构采用的是 AlexNet 网络,该网络的输入尺寸为 227 × 227 227\times 227 227×227 ,因此所有的候选区域也必须缩放到这个尺寸上。
图片的缩放共给出 3 种不同的缩放策略:
- 先将候选区域扩大到包含候选区域的最小正方形区域,扩大采集范围后裁剪,再缩放到 227 × 227 227\times 227 227×227。(扩大采集范围 --> 裁剪 --> 缩放),如图 4 (B)
- 先裁剪,对裁剪后的图像进行背景填充到正方形区域,再缩放到 227 × 227 227 \times 227 227×227。(裁剪 --> 背景填充 --> 缩放),如图 4 (C)
- 直接缩放(图像被拉伸或压缩变形)到 227 × 227 227\times 227 227×227,如图 4 (D)
其中前两种方式不对候选区域的图像做拉伸、扭曲等变形,被称为同性变性,第三种方式被称为异性变形,另外,上面三种方式在给定的候选区域中,可以先向下填补 16 个像素行数,而后再进行上述操作,如图 4 的每一列第 2、4 行。实验证明,利用向下填充 16 个像素的直接缩放方式效果最好。实际上利用选择搜索算法给出的候选区域本身就已经具备一定的目标检测能力,因此同性变性会扩大更大的候选区域,使得噪音区域增大,因此效果相对较差,另外向下扩充 16 个像素可能与选择搜索算法的边界定位误差有关。
【图 4】
2.4.3.3 预训练微调模式
在该网络架构中,作者采用了预训练-微调两阶段的迁移学习模式,这种方式目前基本成为深度学习领域的标配,无论是 CV 领域还是 NLP 领域基本都是如此。其核心思想是,在 A 任务上预先训练网络架构,待任务完成后,该网络参数已被训练优化,然后将其应用到 B 任务中,继续训练网络参数。我们知道,在现代 CNN 深度网络架构中,其网络参数是非常庞大的,如果从头训练往往需要消耗大量的时间及硬件设备,且往往受限于 B 任务的训练集大小而无法充分训练。在前面的文章中,我们介绍过,CNN 网络的卷及池化部分可作为通用特征提取器,因此如果把 A 任务训练后的参数值直接作为 B 任务的初始化网络参数值,稍加训练,B 任务就可以取得相当不错的结果,且对训练数据集的需求也大大降低。在 R-CNN 中,我们采用的是 AlexNet 网络,将其原网络的原顶层 1000 类别的输出层替换为 21 个类别(20 个目标检测类别+1 个背景类)。关于预训练微调模式,我们后面会有专门章节介绍。
另外,网络最终的分类器采用的是 SVM 算法,针对 21 个类别分别设定 21 个不同的 SVM 分类器,之所以不采用原 CNN 网络输出层的 softmax 结果,是因为采用 softmax 性能会下降,这种性能下降可能来自几个因素的组合,例如微调阶段对正样本的定义没有强调精确的目标位置,并且 softmax 分类器是在随机抽样的负样本上训练的,而不是用于训练 SVM 的“更严格的负样本”子集。
2.4.3.4 NMS 算法
最后,边界框回归模块,采用的是非极大值抑制(NMS)算法,对于同一个目标,往往会存在多个不同的候选区域,该算法的核心思想是将多个候选区域按照分类置信度排序,并选择具有最大置信度的候选区域,并移除与该候选区域具有较大
I
o
U
IoU
IoU 的其他区域,从剩余候选区域再次选择具有最大置信度的候选区域,重复上述步骤则可以得到最终的少数几个候选区域。具体算法流程图 5 红色框部分所示:
【图 5】
NMS 对密集的多个物体定位会存在严重的信息损失,密集对象的候选框在空间上存在较大的重叠,而 NMS 算法只会选择其中的一个候选框,为了缓解这种苛刻的要求,一种改进方式称之为 Soft-NMS,如上图绿色框部分,这部分内容可作为扩展内容阅读相关参考资料。
2.4.3.5 边界框回归
边界框回归的目的是使得经过 NMS 算法过滤后给出的目标位置能够进行微调,使之与标注的正确目标位置能够更加接近,由于边界框的位置在空间上是连续值,因此很自然的引用回归算法进行调整。
对于回归算法,我们的输入是 { ( P i , G i ) } , i = 1 , … , N \{(P^i, G^i)\},i=1,\dots, N {(Pi,Gi)},i=1,…,N,其中, N N N 为类别数,即每一种类别单独处理, P i P^i Pi 为第 i i i 个类别的候选框, G i G^i Gi 为第 i i i 类别的真实位置。
一个边界框可以通过其中心点位置以及边界框的宽度、高度表示,即 G = ( G x , G y , G w , G h ) G=(G_x, G_y, G_w, G_h) G=(Gx,Gy,Gw,Gh),我们的学习目标是找到一个从候选边界框 P P P 到真实边界框 G G G 的转换映射关系。为了参数化这种转换,我们定义 4 种不同的变换函数, d x ( P ) , d y ( P ) , d w ( P ) , d h ( P ) d_x(P),d_y(P),d_w(P),d_h(P) dx(P),dy(P),dw(P),dh(P),前两者是基于中心位置的变化,即位移变化,后两者是基于宽度、高度的变化,即拉伸、缩放等变化。即变化后的边界框 G ^ \hat{G} G^ 为:
G ^ x = P w d x ( P ) + P x (1) \hat{G}_x = P_wd_x(P)+P_x \tag{1} G^x=Pwdx(P)+Px(1)
G ^ y = P h d y ( P ) + P y (2) \hat{G}_y = P_hd_y(P)+P_y \tag{2} G^y=Phdy(P)+Py(2)
G ^ w = P w exp ( d w ( P ) ) (3) \hat{G}_w = P_w\exp(d_w(P)) \tag{3} G^w=Pwexp(dw(P))(3)
G ^ h = P h exp ( d h ( P ) ) (4) \hat{G}_h=P_h\exp(d_h(P)) \tag{4} G^h=Phexp(dh(P))(4)
其中 d ∗ ( P ) d_*(P) d∗(P) (这里的 “*” 表示 x , y , w , h x,y,w,h x,y,w,h 中的一种)是应用于 AlexNet 网络第 5 池化层(表示为 ϕ 5 ( P ) \phi_5(P) ϕ5(P))输出特征的一个线性函数,即 d ∗ ( P ) = w ∗ T ϕ 5 ( P ) d_*(P)=w_*^{\text{T}}\phi_5(P) d∗(P)=w∗Tϕ5(P)。而参数 w ∗ w_* w∗ 就是我们要学习的参数,我们可以利用最小二乘法解决,即
w ∗ = arg min w ^ ∗ ∑ i N ( t ∗ i − w ^ ∗ T ϕ 5 ( P i ) ) 2 + λ ∥ w ^ ∗ ∥ 2 w_*=\arg\min_{\hat{w}_*}\sum^N_i(t^i_*-\hat{w}_*^{\text{T}}\phi_5(P^i))^2+\lambda \Vert\hat{w}_*\Vert^2 w∗=argw^∗mini∑N(t∗i−w^∗Tϕ5(Pi))2+λ∥w^∗∥2
其中,
t x = ( G x − P x ) / P w t_x = (G_x-P_x)/P_w tx=(Gx−Px)/Pw
t y = ( G y − P y ) / P h t_y = (G_y-P_y)/P_h ty=(Gy−Py)/Ph
t w = log ( G w / P w ) t_w = \log(G_w / P_w) tw=log(Gw/Pw)
t h = log ( G h / P h ) t_h = \log(G_h/P_h) th=log(Gh/Ph)
在公式 (1)、(2) 中关于 $x, y $ 坐标的变化之所以需要乘上 P w P_w Pw 或 P h P_h Ph ,是因为 CNN 网络的尺度不变性特征会导致同一目标在不同尺度下得到的 ϕ 5 \phi_5 ϕ5 是一致的,如果不考虑边界框的宽度或高度信息,会使得在不同尺度空间下的位移一致,这明显是不正确的。另外,在经过 NMS 算法过滤后,其目标候选框仍然会存在很多,甚至由于 SVM 算法识别误差,一些候选框可能与真实的边界框相差甚远,这样对于回归微调是毫无意义的。因此,为了挑选 ( P , G ) (P,G) (P,G) 训练对,我们只选择与真实边界框 I o U > 0.6 IoU>0.6 IoU>0.6 的候选框。只有 IoU 较大时,我们才可以将这种变换视为一种线性变换,因为
t w = log ( G w / P w ) = log ( G w + P w − P w P w ) = log ( 1 + G w − P w P w ) t_w = \log (G_w / P_w) = \log(\frac{G_w + P_w - P_w}{P_w}) = \log(1 + \frac{G_w-P_w}{P_w}) tw=log(Gw/Pw)=log(PwGw+Pw−Pw)=log(1+PwGw−Pw),
lim x = 0 log ( 1 + x ) = x \lim_{x=0}\log(1+x) = x x=0limlog(1+x)=x
因此,当 G w G_w Gw 与 P w P_w Pw 相差很小时,可以近似理解为一种线性变换,即可以使用线性回归算法求解。
参考资料
1、Rich feature hierarchies for accurate object detection and semantic segmentation
2、What do we learn from region based object detectors (Faster R-CNN, R-FCN, FPN)?
3、Soft-NMS – Improving Object Detection With One Line of Code