Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
faster rcnn详解_神经网络算法原理,希望能够帮助你!!!。
论文题目:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
论文链接:论文链接
论文代码:Matlab版本点击此处,Python版本点击此处
作为一个目标检测领域的baseline算法,Faster-rcnn值得你去仔细理解里面的细节,如果你能深入的了解这些,我相信你会受益匪浅。
那么,我们还是按照总分总的顺序给大家剖析它吧。(看图吧)
图1 Faster-rcnn架构图(理解版)
图2 Faster-rcnn架构图(精简版)
图3 Faster-rcnn架构图(细节版)
一、目标检测的总体框架
图4 目标检测框架图
观察图4,你可以发现目标检测的框架中包含4个关键模块,包括region proposal(生成ROI)、feature extraction(特征提取网络)、classification(ROI分类)、regression(ROI回归)。而faster-rcnn利用一个神经网络将这4个模块结合起来,训练了一个端到端的网络。通过观察图1、图2、图3,我们可以得到如下的结论:Faster-rcnn主要包括4个关键模块,特征提取网络、生成ROI、ROI分类、ROI回归。
1. 特征提取网络:它用来从大量的图片中提取出一些不同目标的重要特征,通常由conv+relu+pool层构成,常用一些预训练好的网络(VGG、Inception、Resnet等),获得的结果叫做特征图;
2. 生成ROI:在获得的特征图的每一个点上做多个候选ROI(这里是9),然后利用分类器将这些ROI区分为背景和前景,同时利用回归器对这些ROI的位置进行初步的调整;
3. ROI分类:在RPN阶段,用来区分前景(于真实目标重叠并且其重叠区域大于0.5)和背景(不与任何目标重叠或者其重叠区域小于0.1);在Fast-rcnn阶段,用于区分不同种类的目标(猫、狗、人等);
4. ROI回归:在RPN阶段,进行初步调整;在Fast-rcnn阶段进行精确调整;
总之,其整体流程如下所示:
二、Faster-rcnn中的核心问题
1. 提出了“RPN”网络,在提高精度的同时提高了速度;
2. RPN网络和Fast-rcnn网络的特征共享与训练;
3. 使用了ROI Pooling技术 ;
4. 使用了NMS技术;
三、细节详解
1. 锚点
即特征图上的最小单位点,比如原始图像的大小是256x256,特征提取网络中含有4个pool层,然后最终获得的特征图的大小为 256/16 x 256/16,即获得一个16x16的特征图,该图中的最小单位即是锚点,由于特征图和原始图像之间存在比例关系,在特征图上面密集的点对应到原始图像上面是有16个像素的间隔,如下图所示:
图5 原始图像中对应的锚点
2. 候选的ROI
针对每一个锚点,然后根据不同的尺度(128、256、512pixel)和不同的长宽比(1:1、0.5:1、1:0.5)产生9个BB,如下图所示,对于16x16的特征图,最终产生16x16x9个候选的ROI。
图6 左侧:锚点、中心:特征图空间单一锚点在原图中的表达,右侧:所有锚点在原图中的表达
3. RPN网络 -- 用来对特征图上面产生的多个ROI进行区分和初步定位
图7 RPN映射过程
RPN(如图3所示) 是用完全卷积的方式高效实现的,用基础网络返回的卷积特征图作为输入。首先,我们使用一个有 512个通道和 3x3 卷积核大小的卷积层,然后我们有两个使用 1x1 卷积核的并行卷积层,其通道数量取决于每个点的锚点数量。
对于分类层,我们对每个锚点输出两个预测值:它是背景(不是目标)的分数,和它是前景(实际的目标)的分数。
对于回归或边框调整层,我们输出四个预测值:Δx、Δy、Δw、Δh我们将会把这些值用到锚点中来得到最终的建议。
4. ROI Pooling
ROI Pooling的作用是通过最大池化操作将特征图上面的ROI固定为特定大小的特征图(7x7),以便进行后续的分类和包围框回归操作。
存在的问题
由于预选ROI的位置通常是有模型回归得到的,一般来说是浮点数,而赤化后的特征图要求尺度固定,因此ROI Pooling这个操作存在两次数据量化的过程。1)将候选框边界量化为整数点坐标值;2)将量化后的边界区域平均分割成kxk个单元,对每个单元的边界进行量化。事实上,经过上面的两次量化操作,此时的ROI已经和最开始的ROI之间存在一定的偏差,这个偏差会影响检测的精确度。
图8 ROI Pooling解释
下面我们用直观的例子具体分析一下区域不匹配问题,如图所示,这是一个Faster-rcnn检测框架。输入一张800x800的图片,图片中有一个665x665的BB中框这一只狗。图片经过特征提取网络之后,整个图片的特征图变为800/32 * 800/32,即25x25,但是665/32=20.87,带有小数,ROI Pooling直接将它量化为20。在这里引入了一次偏差。由于最终的特征映射的大小为7x7,即需要将20x20的区域映射成7x7,矩形区域的边长为2.86,又一次将其量化为2。这里再次引入了一次量化误差。经过这两次的量化,候选ROI已经出现了严重的偏差(如图中绿色部分所示)。更重要的是,在特征图上差0.1个像素,对应到原图上就是3.2个像素。
5. ROI Pooling后的检测网络
图9 检测网络
如上图所示,在获得7x7x512的特征映射之后,通过Flatten操作将其展开为一维向量,然后经过两个全连接层对其进行分类和回归。一个有 N+1 个单元的全连接层,其中 N 是类的总数,另外一个是背景类。一个有 4N 个单元的全连接层。我们希望有一个回归预测,因此对 N 个类别中的每一个可能的类别,我们都需要 Δx、Δy、Δw、Δh。
6. NMS(非极大值抑制)
由于锚点经常重叠,因此建议最终也会在同一个目标上重叠。为了解决重复建议的问题,我们使用一个简单的算法,称为非极大抑制(NMS)。NMS 获取按照分数排序的建议列表并对已排序的列表进行迭代,丢弃那些 IoU 值大于某个预定义阈值的建议,并提出一个具有更高分数的建议。总之,抑制的过程是一个迭代-遍历-消除的过程。如下图所示:
图10
图11
图12
6. 损失函数计算
对于每个锚点,首先在后面接上一个二分类softmax,有2个score 输出用来表示这是一个前景还是一个背景的概率 (),然后再接上一个bounding box的regressor 输出代表这个锚点的4个坐标位置(),因此RPN的总体Loss函数可以定义为 :
其中Lcls表示分类loss,这里使用两类别(前景还是背景)的log loss;Lreg表示回归loss,这里使用的是Smooth-L1;
i表示第i个锚点,当锚点是正beiji样本时 =1 ,是负样本则为0 。 表示 一个与正样本锚点相关的ground true box坐标 (每个正样本锚点 只可能对应一个ground true box: 一个正样本锚点 与某个grand true BB对应,那么该锚点与ground true box 的IOU要么是所有anchor中最大,要么大于0.7) 。
x,y,w,h分别表示box的中心坐标、宽和高; 分别表示 predicted box, anchor box, and ground truth box ,如下图所示; 表示predict box相对于anchor box的偏移量; 表示ground true box相对于anchor box的偏移量,学习的目标就是让前者接近后者的值。
图13 predicted box, anchor box, and ground truth box
7. 正负样本的划分
8. Faster-rcnn训练策略
图14 Faster-rcnn训练策略
即进行交替训练,迭代2次的原因是作者发现多次的迭代并没有显著的改善性能。
四、总结
Faster-rcnn是一个目标检测的baseline方法,值得你去仔细的研究,很建议你去实践一下,这样你可以更加清楚的了解到它的细节信息。
最后,给大家介绍一个很好用的网络可视化工具,专门用来可视化.prototxt文件,你可以将.prototxt文件中的内容复制到该链接点击打开链接,然后按下Shift+Enter,就可以看到漂亮的网络结构啦。如下所示:
图14 caffe可视化工具
参考文献:
[1] Faster R-CNN: Down the rabbit hole of modern object detection,链接地址
[2] CNN目标检测(一):Faster RCNN详解,链接地址
[3] Faster R-CNN,链接地址
[4] 详解 ROI Align 的基本原理和实现细节,链接地址
[5] NMS——非极大值抑制,链接地址
注意事项:
[1] 该博客是本人原创博客,如果您对该博客感兴趣,想要转载该博客,请与我联系(邮箱:@.com),我会在第一时间回复大家,谢谢大家。
[2] 由于个人能力有限,该博客可能存在很多的问题,希望大家能够提出改进意见。
[3] 如果您在阅读本博客时遇到不理解的地方,希望可以联系我,我会及时的回复您,和您交流想法和意见,谢谢。
[4] 本人业余时间承接各种本科毕设设计和各种小项目,包括图像处理(数据挖掘、机器学习、深度学习等)、matlab仿真、python算法及仿真等,有需要的请加:详聊!!!
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章