R-CNN(Regions with CNN features)学习笔记

24 篇文章 2 订阅
19 篇文章 1 订阅

R-CNN(Regions with CNN features)学习笔记

原论文:《Rich feature hierarchies for accurate object detection and semantic segmentation
代码地址:(matlab)https://github.com/rbgirshick/rcnn

一、模型的使用步骤

在这里插入图片描述

  1. 对一张图片生成多个候选区域
  2. 用CNN对每个候选区域进行特征提取
  3. 用线性SVM分类器对特征进行分类打分
  4. 使用边界框回归获取目标检测到的窗口。

二、模型结构

1. 对一张图片生成多个候选区域

使用选择性搜索算法(Selective Search)生成2000个候选区域。

2. 用CNN对每个候选区域进行特征提取

使用AlexNet提取每个候选区域的特征向量。

3. 用线性SVM分类器对特征进行分类

对每个类别用对应的线性SVM进行打分,然后对所有打分后的区域使用NMS算法(非极大值抑制,Non-Maximum Suppression)进行筛选,这些被筛掉的候选框与高分候选框的重叠比较大(IoU值过大)。

4. 边界框回归

进行边界框回归的原因是:候选框 P P P可能与实际框 G G G差距过大。所以要将候选框 P P P进行 矫正 得到 G ^ \hat{G} G^,使 G ^ \hat{G} G^实际框 G G G P P P 更加接近。
算法描述

  • 输入
  1. 特征提取器(AlexNet)从候选区域 P P P提取到的特征(the p o o l 5 pool_5 pool5 feature): Φ 5 ( P ) \Phi_5(P) Φ5(P);
  2. 候选-实际框的配对构成的集合: { ( P i , G i ) } i = 1 , . . . , N \{(\pmb{P}^i,\pmb{G}^i)\}_{i=1,...,N} {(PPPi,GGGi)}i=1,...,N

其中, P i = ( P x i , P y i , P w i , P h i ) \pmb{P}^i=(P^i_x,P^i_y,P^i_w,P^i_h) PPPi=(Pxi,Pyi,Pwi,Phi) G i = ( G x i , G y i , G w i , G h i ) \pmb{G}^i=(G^i_x,G^i_y,G^i_w,G^i_h) GGGi=(Gxi,Gyi,Gwi,Ghi) x , y , w , h x,y,w,h x,y,w,h分别是区域 P P P G G G的中心坐标、宽高。

  • 目标
    通过训练,得到一个从 P P P G ^ \hat{G} G^的变换, G ^ \hat{G} G^ G G G的近似,而 G ^ \hat{G} G^就是我们想要的目标检测的结果框。
  • 方法介绍
    已知:定义 t = ( t x , t y , t w , t h ) t=(t_x,t_y,t_w,t_h) t=(tx,ty,tw,th) P P P G G G 之间的距离:
    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 ) \begin{aligned} t_x&=(G_x - P_x)/P_w \\ t_y&=(G_y - P_y)/P_h \\ t_w&=log(G_w/P_w) \\ t_h&=log(G_h/P_h) \\ \end{aligned} txtytwth=(GxPx)/Pw=(GyPy)/Ph=log(Gw/Pw)=log(Gh/Ph)
    方式:通过训练得到 t t t 的近似值 d d d,使模型能够根据 d d d 的值将 P P P 调整为 G G G 的近似值 G ^ \hat{G} G^(其中 d d d 视为 P P P 的函数),这样得到的 G ^ \hat{G} G^ 比直接使用 P P P 效果更好:
    G ^ x = P w d x ( P ) + P x G ^ y = P h d y ( P ) + P y G ^ w = P w e d w ( P ) G ^ h = P h e d h ( P ) \begin{aligned} \hat{G}_x &= P_w d_x(P) + P_x \\ \hat{G}_y &= P_h d_y(P) + P_y \\ \hat{G}_w &= P_w e^{d_w(P)} \\ \hat{G}_h &= P_h e^{d_h(P)} \\ \end{aligned} G^xG^yG^wG^h=Pwdx(P)+Px=Phdy(P)+Py=Pwedw(P)=Phedh(P)
    为了达到这个目的,将 d ∗ ( P ) d_*(P) d(P) 视为 Φ 5 ( P ) \Phi_5(P) Φ5(P) 的线性函数: d ∗ ( P ) = w ∗ T Φ 5 ( P ) d_*(P)=w^T_*\Phi_5(P) d(P)=wTΦ5(P),并使用如下的损失函数(MSE)
    w ∗ = a r g m i n w ^ ∗ ∑ i N ( t ∗ i − w ^ ∗ T Φ 5 ( P i ) ) 2 + λ ∣ ∣ w ^ ∗ ∣ ∣ 2 w_*= \underset{\hat{w}_*}{argmin} \sum^N_i(t^i_*-\hat{w}^T_*\Phi_5(P^i))^2+\lambda||\hat{w}_*||^2 w=w^argminiN(tiw^TΦ5(Pi))2+λw^2

这里,通过训练来优化 w ^ ∗ T \hat{w}^T_* w^T 即可。
这样的效果是:得到 w ^ ∗ T \hat{w}^T_* w^T 后,就可以得到 d ∗ ( P ) = w ∗ T Φ 5 ( P ) d_*(P)=w^T_*\Phi_5(P) d(P)=wTΦ5(P),再结合之前得到的 P ∗ P_* P,进而得到 G ^ ∗ \hat{G}_* G^,它正是我们想要得到的比 P ∗ P_* P 更好的区域。
此外,原论文中,有两点要注意:1. λ = 1000 \lambda=1000 λ=1000;2. 在将 P P P G G G进行配对时,对某一个 G G G,仅考虑与其具有最大IoU的P

三、训练

分为两步:预训练与微调。详情可参考《R-CNN论文详解(论文翻译)

四、其他

原论文对模型学到的图像特征进行了可视化分析对模型进行消融研究错误原因的分析边界框回归计算语义分割等研究。这部分内容可以参考上面提到的对论文的翻译的博客。


参考材料:
  1. R-CNN论文详解(论文翻译)(翻译的很详细)
  2. RCNN的理解(候选区域的缩放方式及其他有关R-CNN的概念)
  3. 目标检测之 IoU(有代码)
  4. Selective Search 论文学习笔记

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值