物体检测算法R-CNN,SPPnet,Fast R-CNN,Faster R-CNN学习记录

R-CNN网络流程图

在这里插入图片描述
1、使用传统的CNN训练来训练数据集,也就是通过滑动窗口方法来得到图片的各候选区域(每张图1-2k),并将其保存下来,这就导致了需要大量的存储空间;
2、根据图片特征生成各候选区域,对每个区域都进行归一化操作,然后再用预训练CNN加上一些微调来提取特征;
3、最后使用SVM(避免过度拟合问题)对其进行分类,分类是否属于物体,边界回归(边界回归是为了得到更加准确的边界),为了做分割。

缺点:
1、需要使用很多存储空间来存图片的候选区域;
2、使用的归一化操作可能会丢失一些图片数据;
3、每个生成的候选区域都要在网络中计算,并且它们之间存在很多的重叠,导致了许多不必要的计算;
4、只是把目标检测当成一个分类问题,没有预测对象的边界。

优点:
1、将图片检测的滑动窗口(region proposal)应用于目标检测中,并得到很好的效果,为后来很多的深度学习目标跟踪方法奠定了基础,比如SSPnet, Fast R-CNN,Faster R-CNN等;
2、图片分类的数据很多,但是目标检测的标注数据很少,本文使用迁移学习的方式,通过微调预训练好的图片分类的CNN,来实现目标检测。

SPP-Net

SPP-net是对RCNN的优化,测试速度提高了24-102倍,其流程图如下:
在这里插入图片描述

1、如上图,第一行是RCNN的方法,下一行是本文的方法,SPP-net先是取消了RCNN的crop/warp图像归一化过程,解决图像变形导致的一些信息损失;
2、由于RCNN需要对一张图片的所有proposal都做卷积操作,十分耗费时间,SPP-net对一整张照片进行卷积,提取整体特征,然后再使用一个可伸缩的池化层(SpatialPyramid Pooling)将图片的各个proposal与整张图片的特征结合起来,得到每个proposal的特征,然后再利用全连接层得到最后的分类结果。
添加了可伸缩池化层

优点:

  1. 使用一次卷积计算就能计算出整张图的特征,节省了时间;
  2. 不用进行crop/warp操作,保留图片原始信息。

缺点:

  1. 还是需要保存预先得到的proposal,十分浪费存储空间;
  2. 而且该网络的各部分是分离的,CNN提取特征,SVM分类器都是分开训练的,造成很多参数需要转存;
  3. SPP-Net在无法同时Tuning在SPP-Layer两边的卷积层和全连接层,很大程度上限制了深度CNN的准确度。

Fast R-CNN

网络流程图
在这里插入图片描述
在这里插入图片描述
从上图可以看到,这篇文章的输入有两个部分,一个是原始的图片,一个是通过SS算法得到的Region Proposal。算法流程如下:
1、用CNN提取输入图片的特征;
2、利用ROI pooling layer 将特征图和Proposal结合起来,做法是:先将每个Proposal分成H×W个窗口,然后根据窗口的位置,计算出特征图上这个窗口所在位置的max值,作为该窗口的这个子窗口的值;
3、使用全连接层将ROI pooling layer的输出连接起来,这篇文章在这里使用了SVD压缩矩阵,使用两个全连接层实现,可以至少加快30% 的检测时间;
4、最后他们使用两个网络,一个是softmax:计算检测出来的类别,一个是bounding box回归:检测出来的bounding box。

损失函数:
本文使用multi-task loss,将softmax(cls)和bbox(loc)回归结合起来,并且在后续实验中证明,两个一起更新是有用的,loss函数如下:
在这里插入图片描述
这篇文章通过实验证明single-scale的训练效果比multi-scale的效果好,并且训练数据集会饱和,并不是越多越好。

优点:
1、得到比RCNN,SPPNet更好的检测效果并且时间复杂度也小;
2、这个网络是single stage的,意味着各种参数可以一次性训练,一次就能更新网络所有层的参数,这样中间的一些特征就不需要再存储,节约了空间;
3、提出了multi-task的损失函数,对检测的精确度有一定的提升。

缺点:
这篇文章在做优化的时候,忽略了生成Proposal的时间,这块也需要很多时间去执行。

Faster R-CNN

faster r-cnn解决了fast r-cnn中的ROI的生成耗时并且与r-cnn脱节的问题。这篇文章提出了自己的proposal生成网络RPN(region proposal networks),并将其与Fast-RCNN用ROI pooling layer结合起来,并一起做梯度下降,一起更新,通过本文的大量实验证明这个算法精确度高并且时间复杂度低的。

这是Faster R-CNN的网络结构图
在这里插入图片描述
RPN网络:
1、提出对于每个滑动窗口都使用anchor来表示proposal,也就是一个窗口将会生成k个proposal,每个anchor的定义为以窗口中心为中心,根据固定的像素总量,不同的横纵比来生成不同的anchor,如下图所示。这里cls和reg是类似于Fast R-CNN,cls是这个anchor是不是包括了一个对象,reg表示网络出来生成的预测结果框与ground-truth的差距多大,具体参考Fast R-CNN。解释一下为什么使用不同尺寸的anchor,因为图片中物体的横纵比大小我们是未知的,使用不同的anchor可以使得生成的proposal更加接近ground-truth。
在这里插入图片描述
2、
2、这篇文章中使用二值化标记每个anchor,当anchor和ground-truth的IoU大于70%或者该anchor于某个ground-truth的IoU是所有anchor中最大时,将其标记为1。当重叠小于30%时标记为0,对既不是正的也不是负的标签直接抛弃。并且抛弃处于图像边界的anchor。损失函数如下:
在这里插入图片描述
3、RPN的输出是一连串的矩形框,表示多个proposal,它是一个全卷积的网络,最后一层是一个卷积层,通过这个卷积层与Fast-RCNN共享参数。

RPN+Fast-RCNN
这篇文章把proposal的生成和R-CNN放在一起训练,使用共享特征让两个网络交替训练,一共分为4步:
1、使用ImageNet预先训练好的参数和微调的后的模型初始化RPN网络;
2、使用初始化的RPN网络中生成的一系列proposal训练Fast R-CNN网络,这时两个网络还没有共享卷积层;
3、使用Fast-RCNN的输出结果去训练RPN网络,但是只调整RPN的自己的层,而保持共享的卷积层不变;
4、然后再保持共享的卷积层不变,使用RPN的输出去更新Fast R-CNN的层;
5、重复以上3,4直至收敛。

优点:
1、提出了一个RPN网络,这个网络可以精确高效地生成region proposal,从而提高整个目标检测的精确度;
2、通过一个卷积层将RPN网络参数同Fast R-CNN共享,实现了端到端的训练,并且能时间复杂度低,能做到将近实时的检测。

缺点:
1、在时间上还可以优化,具体可以关注YOLO算法,YOLO算法我还没看过,这里就不赘述。

参考博客:https://blog.csdn.net/xyfengbo/article/details/70227173
https://www.cnblogs.com/skyfsm/p/6806246.html
https://blog.csdn.net/amor_tila/article/details/78809791

论文:R-CNN:https://arxiv.org/abs/1311.2524
SPPnet:https://arxiv.org/abs/1406.4729
Fast R-CNN:https://arxiv.org/abs/1504.08083
FasterR-CNN:https://arxiv.org/abs/1506.01497

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值