faster rcnn resnet_RCNN, Fast R-CNN 与 Faster RCNN理解及改进方法
RCNN
这个网络也是目标检测的鼻祖了。其原理非常简单,主要通过提取多个Region Proposal(候选区域)来判断位置,作者认为以往的对每个滑动窗口进行检测算法是一种浪费资源的方式。在RCNN中,不再对所有的滑动窗口跑算法,而是只选择一些窗口,在少数窗口上运行CNN。
流程是:
Fast R-CNN
前面聊的这个RCNN吧,有几点问题:
这种情况下,二代目fast R-CNN出现了,它的流程是:
Fast R-CNN组合了classification和regression, 做成single Network,实现了端到端的训练,实际上它相对RCNN最大的改进是抛弃了多个SVM分类器和bounding box回归器的做法,一起输出bbox和label, 很大程度上提升了原始RCNN的速度。
这里出现了一个新的概念,ROI Polling,很重要,是考点,解释一下:
ROI Pooling(Region of Interest)
它的输入是特征图,输出则是大小固定的channel x H x W的vector。ROI Pooling是将一个个大小不同的region proposals,映射成大小固定的(W x H)的矩形框。它的作用是根据region proposals的位置坐标在特征图中将相应区域池化为固定尺寸的特征图,以便进行后续的分类和输出回归框操作。它可以加速处理速度。这个ROI Pooling在下面的Faster RCNN也会出现,它的作用是类似的,就是将region proposals池化成同样大小的vector,便于传入后续分类网络。
ROI Pooling有两个输入,一个是图片进入CNN后的特征图,另一个是区域的边框。ROI 的输出是一个region_nums x channels x W x H的向量。
说到这里耶解释一下ROI Pooling的进阶版本ROI Align。
ROI Pooling在池化的时候需要对浮点数边界int化,这样会存在一定的偏差。在特征图比原始图片尺寸小的情况下,一点点的精度损失映射到原始图片上就存在很大的像素点差别。而ROI Align就是取消了取整的操作,使用双线性内插的方法获得坐标未浮点数的像素点上的图像数值。
Faster RCNN
在Fast RCNN的基础上,Faster RCNN在性能上又有了进步。Faster RCNN将特征抽取(feature extraction),proposal提取,bounding box regression,classification都整合在了一个网络中,使得综合性能有较大提高,在检测速度方面尤为明显。对比起它哥哥Fast-RCNN, 其实最重要的一点就是使用RPN(下面会详细解说)来代替原来使用分割算法生成候选框的方式,极大的提升了检测框生成速度。总地来说,Faster RCNN对Fast RCNN的改进点在于获得region proposals的速度要快很多。
具体来说,它的网络结构长这样:
具体一点的图长这样:
Region Proposal Network(RPN)
Faster-RCNN的巨大优势主要在于第二步Region Proposal Networks(RPN)的设计。传统的Selective Search方法生成检测框都很耗时。而使用RPN生成就会快很多,我们来看看RPN的原理叭
RPN的作用是用来提取候选框的,类似于前面介绍的RCNN的第一步Selective Search。它的网络结构基于神经网络,但是输出的是包含二元softmax和bbox回归的多任务模型。RPN网络的输入是前面CNN output的feature maps。我们在feature map上做一个大小为3x3的滑窗操作, 得到一个channel是256维的特征图,尺寸与input的特征图相同,维度是256*H*W。对这个256维的向量,我们分别做两次1x1卷积操作,一个得到2k score, 一个得到4k coordinates。这个2k score只区分是不是目标,输出候选区域属于前景(物体)和背景的分数,这里注意,这里的分类只区分是否包含目标,至于所包含目标的类别,是Faster-RCNN最后的分类网络干的事情。4k coordinates指的是对原图坐标的偏移。
那么这个k又是什么东西呀?这里有一个anchor的概念,也是RPN的核心之一。论文预先设定好生成9个anchors。我们前面说到对于feature map, 我们有一个3*3的滑窗操作。对于每次滑窗所划到的3x3的区域,就以该区域中心点为坐标,生成9个anchor。anchor它的本质是,将相同尺寸的输入,得到不同尺寸的输出。它们的中心相同,但是有不同的长宽比和尺度。这9个anchor, 中心坐标一样,但是大小各不相同,如下图:
而上文提到的k就是anchors的数量,所以2k个分数就是9个anchors的共18个分数,36个坐标。对于每个anchor, 计算anchor与ground-truth bounding boxes的IoU,大于0.7则判定为有目标,小于0.3则判定为背景,介于0.3-0.7,则设为0,不参与训练
这么说完可能还是有点模糊,我们来看看RPN的代价函数:
代价函数有两部分,对应着RPN的两条路线,即是否包含目标和bbox的坐标与anchor坐标的回归误差。注意回归误差这一项中,L与p相称,也就是说,如果anchor不包含目标,那么box输出位置是不算误差的,对于
,只计算 判定为有目标的anchor。总的来说 ,就是交叉熵,分类的损失; ,计算每个anchor分配的四个坐标和ground truth的坐标的偏移量,用的是L1范数。看一下pytorch的官方实现你就懂了:self插嘴一句,我们现在在做目标检测基本是用YOLO了,贼快,Faster RCNN虽然已经Faster了还是YOLO快!当然region proposals的概念很值得了解,YOLO的缺点是在检测小目标时难以得到精确的定位。
Faster R_CNN改进方法
Faster R-CNN从2015年被提出,后来也出现了不少改进方法,下面列举一些方向,有兴趣可以再去深入研究:
- 提取特征网络的改进:使用ResNet代替原来的VGG提取特征,效果显著
- RPN升级版本:FPN
- ROI升级:PS_RPI
- R-FCN
- Mask R-CNN
- DeepText
- 训练过程中的hard-example finetune,可参见:视觉分类任务中处理不平衡问题的loss比较 - Daniel2333的博客 - CSDN博客
- A-Fast-RCNN, 这篇文章引入了GAN, 在某些数据集上精度增加
参考文献
晓雷:RCNN- 将CNN引入目标检测的开山之作
最帅的大厨:RCNN-> SPP net -> Fast RCNN -> Faster RCNN
Fast R-CNN论文详解 - WoPawn的博客 - CSDN博客
CNN目标检测(一):Faster RCNN详解
RPN 解析 - lanran2的博客 - CSDN博客
目标检测 - Faster R-CNN 中 RPN 原理
RPN 解析 - lanran2的博客 - CSDN博客
目标检测 - Faster R-CNN 中 RPN 原理
Faster-RCNN算法精读 - hunterlew的专栏 - CSDN博客
详解 ROI Align 的基本原理和实现细节
Faster R-CNN 深入理解 && 改进方法汇总
总结
以上是生活随笔为你收集整理的faster rcnn resnet_RCNN, Fast R-CNN 与 Faster RCNN理解及改进方法的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: unsigned long long 溢
- 下一篇: 遵义大数据中心项目工程概况_中策大数据: