ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

R-CNN 论文学习笔记

2022-01-16 12:02:32  阅读:185  来源: 互联网

标签:SVM 边界 特征向量 论文 笔记 227 区域 CNN


R-CNN 论文详解(学习笔记)


R-CNN 模块设计

R-CNN 目标检测系统包含以下模块。

  • Selective Search:生成区域建议 region proposals。
  • CNN(AlexNet):从每个区域提取固定长度的特征向量。
  • 一系列 class-specific 线性 SVM:对于每一类别,给出 CNN 提取的特征向量的得分。
  • Bounding Box Regression 边界框回归:提高定位精度。

模型分析

  1. 对输入图片应用 selective search 算法

    提取了大约 2000 个区域建议。所有实验均在 selective search 的 fast mode 下进行。

  2. 缩放转换每个区域建议的图像

    因为 CNN 要求输入为固定大小(227*227 pixels),因此需要对第一步得到的区域建议图片(A)进行缩放转换。

    评估了两种转换方式:

    • 各向异性缩放

      不管图片的长宽比,直接拉伸扭曲成 227*227 pixels,如图(D)。

    • 各向同性放缩

      • 将图片边界框扩展成正方形,裁剪后放缩到 227*227 pixels。若边界框延伸至图片外,则用图片均值填充,如图(B)。
      • 将图片裁剪出来,用图片均值填充背景形成正方形,然后放缩到 227*227 pixels,如图(C)。

    每种转换方式中,也考虑了加入原图周围语义背景()。在变换后的坐标系中, p p p 定义为围绕区域建议图片的边界尺寸。 如图中,1,3行是 p = 0 p=0 p=0 pixels,2,4行是 p = 16 p=16 p=16 pixels。

    最终选定的方式为:带有 context padding 操作( p = 16 p=16 p=16 pixels )的各向异性缩放表现最好。(高 3-5mAP points)

  3. 卷积神经网络提取特征

    作者最早应用的是 AlexNet(后来采用了 VGGNet 有了更好的表现)。对第二步扭曲放缩后的图像应用卷积神经网络进行特征提取,得到长度为 4096 的特征向量。(这里的 CNN 去掉了最后的 softmax 层。)

  4. 应用SVMs进行分类

    应用一系列 class-specific 的线性 SVM 对特征向量进行分类,给出该区域建议图片每一类的得分。

    当原始图像的所有区域建议都经过上述步骤,得到对应分数后,应用贪婪非极大值抑制(greedy non-maximum suppression,NMS)去除冗余的候选边界框。

  5. 边界框回归

    应用 SVMs 进行分类后,使用对应类别的边界框回归预测该区域建议的边界框偏移值,提高定位精度。


数据处理过程

输入图像为 3*227*227 的张量,经过 Selective Search 提取出 ~2000 个区域建议,针对每个区域建议,由 CNN 得到长度为 4096 的特征向量(saved to disk)。

于是,对于一张输入图片,假设有 2000 个候选区域,则有由 2000 个特征向量组成的 2000*4096 的“特征矩阵”,最后需要对这些特征向量使用二分类线性 SVM 进行分类。

假设一共有 20 类物体需要检测,那么共有 20 个 SVM 分别负责每一类的分类(每个 SVM 输出特征向量对应该类的得分),每个 SVM 对所有的 2000 个特征向量都判断一次,最终得到 2000*20 的得分(score)矩阵:每一行代表一个候选区域建议,每一列代表对应该类的得分。

然后分别对 2000*20 矩阵的每一列(每一类别)进行贪婪非极大值抑制(NMS),过滤去除冗余的重叠区域建议边界框,留下该列(该类别)中得分最高、且较少重叠的区域建议。


训练过程

  1. CNN 微调(迁移学习)

    • 网络架构:采用在 ImageNet 上训练过的 AlexNet 作为预训练卷积神经网络,有 5 层卷积层,2 层全连接层,将该网络最后的 1000-way 分类输出层替换成随机初始化的 21-way 分类输出层(VOC 数据集:20 类物体 + 背景类)。
    • 数据集:将从 Selective Search 生成的区域建议图像,通过放缩变换成 227*227 尺寸的图片送入 CNN。
    样本描述
    正例和某个 ground-truth 边界框的交并比重叠最大的区域建议 region proposal ,若该重叠 IoU >= 0.5,则将此区域建议作为这个 ground-truth 类别的正样本。
    负例某个区域建议 region proposal 和所有 ground-truth 边界框的交并比重叠最大都 IoU < 0.5 的,作为这个 ground-truth 类别的正样本。
    • 训练设置
      • 优化算法:随机梯度下降 SGD
      • 批量大小:每一轮 SGD 迭代,都在数据集上均匀抽样 32 个正例(覆盖所有类别) + 96 个负例(背景),构建 128 大小的 mini-batch。因为比起背景负例,正例实在是太少了(占比远小于 1:3),所以更偏向于正例采样(1:3),来防止训练的模型偏向预测为负例(Hard Negative Mining method)。
      • 学习率:从 0.001 (初始预训练学习率的 1/10)开始训练,能够实现网络的微调,同时不会对初始状态有太大改变和影响。
  2. SVM 分类器

    • 针对每一个类别,分别训练一个线性 SVM 分类器,对于 VOC 数据集,总共需要训练 20 个 SVM。
    • 数据集:紧包物体的区域是正例,与物体无关的背景是负例,那么如何标记一个只有部分覆盖目标物体的区域是正例还是负例?为解决该问题,设定一个 IoU overlap threshold 交并重叠阈值,某区域和 ground-truth 的 IoU 低于此阈值的就是负例。通过在验证集上的网格搜索{0,0.1,…,0.5},选取 overlap threshold 为 0.3 最佳。(要小心选取 threshold,将其设为 0.5 时, mAP 下降了 5 个点。类似的,设成 0 下降了 4 个点。)
    • Hard Negative Mining method 难负例挖掘 12:难负例挖掘很快收敛,一轮 epoch 之后 mAP 就停止上升了。
  1. 边界框回归器训练

原理与问题

Bounding-Box Regression | 边界框回归

目的

红色框为 Selective Search 提取的Region Proposal,即便红色的框被分类器识别为飞机,但由于红色的框定位不准(IoU<0.5),那么这张图相当于没有正确的检测出飞机。于是需要对红框进行调整,使之与 ground truth 更接近,提高定位精度。

原理

所要实现的算法:

输入是 N N N 对训练组合 { ( P i , G i ) } i = 1 , ⋯   , N \{(P^i,G^i)\}_{i=1,\cdots,N} {(Pi,Gi)}i=1,⋯,N​,其中 P i = ( P x i , P y i , P w i , P h i ) P^i=(P^i_x,P^i_y,P^i_w,P^i_h) Pi=(Pxi​,Pyi​,Pwi​,Phi​) 表示区域建议 P i P^i Pi 边界框的中心像素坐标、宽度、高度。除非特殊强调,省略上标 i i i。

G G G 代表 ground-truth 边界框,以相同的方式定义: 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 框,即 f ( P ) = G ^ ≈ G f(P)= \hat{G}\approx G f(P)=G^≈G.

使用四个函数来参数化该变换, 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)。前两个是对 P P P 边界框中心的尺度不变的转换,作用是位置平移,而后两个是对 P P P 边界框宽度和高度 log-space 的转换,作用是尺度缩放。

  1. 先做平移 ( Δ x , Δ y ) (\Delta x, \Delta y) (Δx,Δy), Δ x = P w d x ( P ) \Delta x = P_w d_x(P) Δx=Pw​dx​(P), Δ y = P h d y ( P ) \Delta y = P_h d_y(P) Δy=Ph​dy​(P) :
    G ^ x = P w d x ( P ) + P x G ^ y = P h d y ( P ) + P y \hat{G}_x = P_w d_x(P)+P_x\\ \hat{G}_y = P_h d_y(P)+P_y\\ G^x​=Pw​dx​(P)+Px​G^y​=Ph​dy​(P)+Py​
  2. 再做尺度缩放 ( S w , S h ) (S_w, S_h) (Sw​,Sh​), S w = e x p ( d w ( P ) ) S_w = \mathrm{exp}(d_w(P)) Sw​=exp(dw​(P)), S h = e x p ( d h ( P ) ) S_h = \mathrm{exp}(d_h(P)) Sh​=exp(dh​(P)):
    G ^ w = P w e x p ( d w ( P ) ) G ^ h = P h e x p ( d h ( P ) ) \hat{G}_w = P_w \mathrm{exp}(d_w(P))\\ \hat{G}_h = P_h \mathrm{exp}(d_h(P))\\ G^w​=Pw​exp(dw​(P))G^h​=Ph​exp(dh​(P))

学习到这些函数后,我们可以通过上述变换,将一个输入的提议 P P P 框,转换为预测的 ground-truth box G ^ \hat{G} G^ 框。

只有当输入的 region proposal 与 ground truth 偏离较小时(RCNN设置是 IOU>0.6 ),可以认为这种变换是一种线性变换,那么我们就可以使用线性回归来建模对窗口进行微调;当 region proposal 与 ground truth 偏离较大时,该问题变为了复杂的非线性问题,无法用线性回归建模。

于是,每个 d ⋆ ( P ) d_\star(P) d⋆​(P)都是区域建议 P P P 的 pool_53 输出特征向量 ϕ 5 ( P ) \phi_5(P) ϕ5​(P) 的线性函数。( ⋆ \star ⋆ 表示 x , y , w , h x, y, w, h x,y,w,h,即每个变换对应一个函数。)

注:这里隐含假定了 ϕ 5 ( P ) \phi_5(P) ϕ5​(P) 依赖于图像数据,个人理解, ϕ 5 ( P ) \phi_5(P) ϕ5​(P) 是该区域建议的 pool_5 的特征图,只与图像本身有关,与 ( P x , P y , P w , P h ) (P_x,P_y,P_w,P_h) (Px​,Py​,Pw​,Ph​) 的值是无关的。

注意,这里边界框回归的输入并非 P = ( P x , P y , P w , P h ) P=(P_x,P_y,P_w,P_h) P=(Px​,Py​,Pw​,Ph​),而是区域建议图片对应的 pool_5 输出特征向量。

因此我们有 d ⋆ ( P ) = w ⋆ T ϕ 5 ( P ) d_\star(P)=\boldsymbol{\mathrm{w}}^\mathrm{T}_\star\phi_5(P) d⋆​(P)=w⋆T​ϕ5​(P),这里 w ⋆ \boldsymbol{\mathrm{w}_\star} w⋆​ 是一个可学习的模型参数向量。通过正则最小二乘目标(岭回归)优化学习 w ⋆ \boldsymbol{\mathrm{w}_\star} w⋆​ :

w ⋆ = arg ⁡ min ⁡ w ^ ⋆ ∑ i N ( t ⋆ i − w ^ ⋆ T ϕ 5 ( P i ) ) 2 + λ ∥ w ^ ⋆ ∥ 2 \mathbf{w}_{\star}=\underset{\hat{\mathbf{w}} \star}{\arg \min } \sum_{i}^{N}\left(t_{\star}^{i}-\hat{\mathbf{w}}_{\star}^{\mathrm{T}} \phi_{5}\left(P^{i}\right)\right)^{2}+\lambda\left\|\hat{\mathbf{w}}_{\star}\right\|^{2} w⋆​=w^⋆argmin​i∑N​(t⋆i​−w^⋆T​ϕ5​(Pi))2+λ∥w^⋆​∥2

训练该回归时,对于训练组合 ( P , G ) (P, G) (P,G) 的回归目标为平移变换和尺度缩放 ( t x , t y , t w , t h ) (t_x,t_y,t_w,t_h) (tx​,ty​,tw​,th​)。

t x = ( G x − P x ) / P w t y = ( G y − P y ) / P h t w = l o g ( G w / P w ) t h = l o g ( G h / P h ) t_x = (G_x-P_x)/P_w\\ t_y = (G_y-P_y)/P_h\\ t_w = \mathrm{log}(G_w/P_w)\\ t_h = \mathrm{log}(G_h/P_h)\\ tx​=(Gx​−Px​)/Pw​ty​=(Gy​−Py​)/Ph​tw​=log(Gw​/Pw​)th​=log(Gh​/Ph​)

对每一类的目标都训练一个 bouding-box 回归器,最后学习到一系列 class-specific 的 边界框回归器 (VOC 数据集下就是 20 个回归器)。

实现边界框回归时,有两个微妙的问题。

  • 正则化很重要,这里,基于验证集设置 λ = 1000 \lambda=1000 λ=1000。
  • 当选择使用哪个训练对 ( P , G ) (P,G) (P,G) 时一定要小心,要挑选靠近 ground-truth box 的区域建议,当一个 P P P 与 G G G 有最大的 IoU 重叠且该 IoU 大于某一个阈值时 (文中设为 0.6),我们才指定这个 P P P “靠近” G G G (近似该回归问题为线性回归),而未指定的区域建议都被丢弃。

相关问题:相对坐标、对数变换、近似线性变换可参考这篇博客

测试时,只对每个区域建议框使用一次边界框回归,因为发现反复预测并不能改善结果。

为什么采用 SVM 进行分类,而不是简单应用网络最后一层 fc_8 的 softmax 回归分类器?

经过实验尝试,发现在 VOC2007 数据集上,简单应用网络最后一层的 softmax 回归进行分类,mAP 从 54.2降到 50.9。R-CNN 作者认为,精度下降是因为几个因素,包括微调网络时使用的正例并不强调精确位置,而且 softmax 分类器是被随机采样的负例训练的,而在训练 SVM 时用的则是 hard negatives 的子集。而该结果显示,如果微调后不另外训练 SVM 是有可能保持相同精度水平的,猜测可能需要在微调时加入更多调整来消除性能差距,如果真的可以,这将大大简化和加快 R-CNN 的训练。


  1. Object detection with discriminatively trained part based models ↩︎

  2. Example-based learning for viewbased human face detection. ↩︎

  3. pool_5 是 AlexNet 最后一个卷积层之后的最大池化层 max-pool layer,pool_5 输出的特征图是 6*6*256=9216 维的 ↩︎

标签:SVM,边界,特征向量,论文,笔记,227,区域,CNN
来源: https://blog.csdn.net/qq_43728353/article/details/122521215

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有