目标检测系列——开山之作RCNN原理详解

 

🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题

🍊往期回顾:ubuntu使用指南 ​   阿里云对象存储oss+picgo+typora实现步骤及无法上传图片解决方案

🍊近期目标:拥有10000粉丝
🍊支持小苏:点赞👍🏼、收藏⭐、留言📩

RCNN原理

写在前面

   RCNN是目标检测领域的开山之作,作者是Ross Girshick ,我们称之为RGB大神🥗🥗🥗 可以在google学术中看看这位大牛都写了哪些文章,看看这引用次数,只能惊呼🐂🍺!!!
在这里插入图片描述

   接下来将详细介绍介绍RCNN的原理,先来看看论文中这张经典的图片。这张图片展示了RCNN的实现过程,其主要有四步,下面分别对每步进行讲解。

image-20220616214629372

 
 

候选区域生成

   候选区域生成在RCNN中采用的是selective search 【简称SS算法】,这个算法的原理大致是通过颜色、大小、形状等一些特征对图像进行聚类,算法的结果是在一张图片中生成一系列的候选框,RCNN中让每张图像都生成2000个候选框。这些候选框有着大量的重叠部分,因此我们后面需要将这些重叠的候选框去除,得到相对准确的候选框。【注:这里不对SS算法做详细的讲解,感兴趣的可以自己查阅了解🍍🍍🍍】下图展示了SS算法得到的大致结果,可见一个目标会有多个候选框生成。【注:RCNN中SS算法每幅图像生成的候选框个数为2000🥝🥝🥝】

image-20220616214600021

 
 

神经网络提取特征

   上一步我们由SS算法从一张图片中得到了2000个候选框,接下来需要对这些候选框进行特征提取,即分别将2000个候选框区域喂入ALexNet网络进行训练,提取特征。【注:有关ALexNet的网络结构我前文有介绍,不清楚的点击了解详情🌱🌱🌱】为方便大家阅读,我把ALexNet的网络结构也贴出供大家参考,如下图所示:

   需要注意的是,在RCNN中,我们不需要最后的softmax层,只需要经过最后两次全连接层,利用其提取到的特征即可。此外由于全连接层的存在,需要对输出图片的尺寸进行限制,即需要图片分辨率为227*227。论文中所采用的方法为无论候选区域的大小或纵横比如何,先将其周围扩展16个邻近像素,然后将所有像素强制缩放至227*227尺寸。【注:可见此方案会使原图像发生畸变,如人物变矮变胖等】相关缩放方案如下图所示:

image-20220616222633371

图片来源B站同济子豪兄

 
 

SVM分类器分类

   上一步我们已经通过ALexNet网络提取到特征,每一个候选框区域都会生成4096维的特征向量,如下图所示:

image-20220617094808987

图片来源B站霹雳吧啦Wz
 

   上图展示的是一个候选框提取到的特征,我们采用SS算法会从一幅图片中生成2000个候选框,将所有候选框输入网络,就会得到2000*4096维的特征矩阵。将2000*4096维的特征矩阵与20个SVM组成的权值矩阵4096*20相乘,会得到2000*20维的概率矩阵,其中每一行代表一个候选框属于各个目标类别的概率。【注意:若采用的是VOC数据集,那么类别是应该有21类,包括一个背景类】

image-20220617100136537

图片来源B站霹雳吧啦Wz

 

   为让大家更容易理解,对于上图的结构①做更详细的解释,如下图所示:

image-20220617100242991

   从上图可以看出,2000*20维矩阵的每一列表示2000个候选框分别对某一类的预测概率,如第一列则表示2000个候选框分别对狗的预测概率。我们对每一列即每一类进行非极大值抑制(NMS)用于剔除重叠候选框,得到该列中得分最高的的建议框。具体NMS过程如下:

image-20220617101827955

图片来源B站霹雳吧啦Wz

 

   关于这一部分开始可能会有点迷惑,为什么要删除IOU大的目标呢?我之前也产生过这个疑问,其实这还是我们对这个流程不是很清楚。首先我们会在某一列中找出得分最高的目标,然后会计算其它目标和这个得分最高目标的IOU【注意不是计算与Ground Truth的IOU】,这个IOU大表示什么含义呢?这个值越大表示这两个候选框重叠的部分越多,则表示这两个候选框很可能表示的是同一个物体,那么删除得分低的候选框就很容易理解了。下图展示了相关过程:

image-20220617102646414

图片来源B站霹雳吧啦Wz

 
 

回归器修正候选框位置

   上一步骤中我们剔除了许多候选框,接下来我们需要对剩余的候选框进一步筛选,即分别用20个回归器对上述20个类别中剩余的候选框进行回归操作,最终得到每个类别修正后的得分最高的bounding box。

   那么我们怎么由候选框得到最后的预测框呢?我们依旧会由ALexNet输出的特征向量来得到回归器的预测结果,其结果为 ( 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 i ∧ {\mathop {\rm{G_i}}\limits^ \wedge} Gi的表达式如下所示:

image-20220617104327448

图片来源B站同济子豪兄
 

   我们由上式反解出 ( 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)) 的表达式,现用 ( t x , t y , t w , t h ) (t_x,t_y,t_w,t_h) (tx,ty,tw,th) 表示,因为标注框参数和候选框参数都是给定的,因此 ( t x , t y , t w , t h ) (t_x,t_y,t_w,t_h) (tx,ty,tw,th) 也是可直接计算得到的,为真实值。

image-20220617105213156

图片来源B站同济子豪兄
 

   接下来就用 ( 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))值去拟合 ( t x , t y , t w , t h ) (t_x,t_y,t_w,t_h) (tx,ty,tw,th)值,使损失函数最小,损失函数如下:


 

小结

   RCNN的原理部分就介绍到这里了,希望可以对大家有所帮助。🍀🍀🍀后续会持续更新fast_RCNN和Faster_RCNN的内容以及相关代码讲解,一起加油吧!!!

 

参考链接

RCNN理论合集🍁🍁🍁

RCNN论文精读🍁🍁🍁

 
 
如若文章对你有所帮助,那就🛴🛴🛴

咻咻咻咻~~duang~~点个赞呗

 

对人工智能感兴趣的可以扫码加入C站人工智能官方社群,欢迎各位小伙伴加入交流学习,一起进步!!

  • 40
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秃头小苏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值