【深度视觉】第十二章:目标检测、实例分割

十四、目标检测

目标检测就是模型不仅要告诉我图像里面有什么目标,还得告诉我目标的位置:

所以目标检测第一是要得到图像中的一个区域,第二是要对这个区域进行分类。

(一)单目标检测:单目标(分类+定位)

单目标检测就不需要选择区域了,因为整张图就一个目标,所以就拿整张图进行分类好了,所以单目标检测任务就相当于一个分类的子任务和一个定位的子任务:

就是两个输出,和googlenet一样,googlenet最早版也是带有2个辅助分类器,不清楚的参考【深度视觉】第九章:复现SOTA 模型:GoogLeNet-CSDN博客 相当于是一个多任务网络:第一个输出是1000个分类,第二个输出是目标的边界盒坐标。第一个输出是分类任务,第二个输出是回归任务。第一个输出的损失是多分类交叉熵损失,第二个输出的损失是L2损失。两个输出损失加起来就是总损失,总损失反向传播训练网络即可。

补充:以后我们要是学人的检测,就是先定义一些人的关键的,然后检测图片中有没有人(分类任务),如果有,那么这个人的关键点坐标是什么(就是再回归你定义的那些关键点的坐标),就可以采取这种方式检测。

(二)多目标检测:多目标


此时单目标检测的架构就不适用了,因为我们连回归几个坐标都不知道。

1、思路1:滑窗思想

现在手机里的人脸检测,就是这样穷举图片中的所有区域进行判断是不是人脸,但是它用的判别器不是CNN是Adaboost,因为Adaboost快呀,但CNN就不行了,计算量太大了,效率就跟不上了。

2、思路2:区域建议 Selective Search
Selective Search在CPU上近需几秒就可以产生2000个候选区域。代表算法就是R-CNN、Fast R-CNN、Faster R-CNN:

上图2处进行缩放是因为要放到卷积网络跑特征,而卷积网络的输入是固定的。所以上图3处RCNN原作者用的是自己搭建卷积网络,后面人们一般都用resnet来搭建,renet最后是一个FC,输出1000个类别,然后再把这1000个类别,一是放入SVM来进行分类,二是继续FC回归出Bbox四个坐标。所以上图3处的卷积网络仅仅就是一个特征提取器的角色了。

注意: 而从卷积层出来的这1000个维度的特征向量再进行FC输出4个坐标的回归操作,这四个坐标的损失是"这四个坐标圈住在原图蓝绿色区域中的子区域" 与 "这个蓝绿区域中的标答坐标"之间的L2损失。注意这里是一个大坑,这里你如何表示Bbox?如何后续对候选区域进行修正?等事项的考虑就显得非常重要,很多人对此也做了很多巧妙地思路和操作,不同思路和操作效果有很大的不同,所以这里需要再查资料琢磨是怎么回事。RCNN当时把这块做到了当时的最高水平,把图像检测的性能一下子提供了十几二十个百分点,所以RCNN告诉我们卷积网络用在图像检测上性能是非常优秀的。

但是rcnn的缺点同样是计算效率低下!每张原图要随机选2000个区域进行卷积提取特征,也是存在着重叠区域反复计算的问题。所以针对这个弊端,Fast RCNN出现了。

fast rcnn和rcnn的最大区别就是:rcnn是先选候选区;fast rcnn是先卷积,卷积完毕后,再在特征图上选候选区,然后再进行分类和坐标盒偏差回归。 同时,fast rcnn还把最后SVM也去掉了,直接用linear+softmax获取类别,一切都为了快嘛。

但是Fast rnn这样做就会出现一个问题:在上图的C处,你裁剪和缩放完毕后,整个网络的梯度被打断了啊,裁剪和缩放是没法回传梯度的!你的网络就没法训练呀!对此fast rcnn的作者提出了ROL Pool 区域裁剪:

就是候选区还是在原图,然后把原图的候选区映射到,最后输出的特征图上差不多的相应位置(为什么是差不多呢?原图3x640x480,特征图512x20x15,怎么可能一一对应映射呢?!所以肯定是相对位置差不多的位置),然后再把映射的特征图区域粗略分成2x2,然后对每个子区域进行最大池化,这样最后就都被处理成了512x2x2的大小了,就都可以送入FC,该分类的分类,该回归边界盒的回归边界盒。原论文中是处理成512x7x7,道理都是一样的。

可见,上上图的C处,虽然写的是裁剪+缩放,其实做的是ROL Pooling。因为暴力裁剪和缩放,整个网络的梯度就被中断了,但ROL Pooling也就相当于我们普通卷积网络中的max pooling,是可以梯度回传的,因为max函数是有导数的。

但是ROL Pooling也有缺点,就是有轻微对不齐问题。就是我原图中的一个区域,映射到特征图上的区域,出现了对不齐。比如上图,原图中的区域是绿框的区域,但是映射到512x20x15的特征图上就是篮筐区域,但是你想啊,我原图可是640x480尺寸的,你卷积卷完后,把我的640x480尺寸卷成了个20x15这么小的一个尺寸,那篮筐中一个点可能都要对应我原图中一个块吧。也就是说篮筐框住的特征可能就仅仅是原图绿框中像素的80%部分,就是对不齐问题。那你拿一个都不是绿框像素卷积出来的特征,你去分类或者回归bounding box,不是很搞笑嘛。所以针对这个对不齐问题,后人又对其改进,就诞生了ROL Align区域裁剪法:

ROL Align的做法是:原图的绿色框区域要精准对应到上图右边的特征图像上,就是上图的灰框区域,然后在灰框区域均匀取一些点,这些点的值就用双线性插值法算得,然后再把灰框分成2x2,再做最大池化,再送入FC。而双线性插值法是可导的。这样就避免了不对齐问题。

  • 下面是RCNN和Fast RCNN的训练和测试的速度上的对比:

从上图可以看出,不管是训练阶段还是测试阶段,fast rcnn都比rcnn快很多很多!但是,从上图右图看,fast rcnn的(2.3-0.32)约等于2秒的时间,fast rcnn都是在干“随机产生候选区域”这件事情!所以针对这个问题Faster R-CNN诞生了!

Faster R-CNN让cnn自己去做区域建议!如下图所示,就是加入了RPN层:

那么Faster R-CNN怎么做RPN呢?如下图所示,Faster R-CNN在特征图上(512x20x15上),用卷积层(比如3x3卷积核,通道用256的Conv)+FC即可。其中FC分两部分,就是两个FC输出,一个输出二分类(是目标还是不是目标);一个做边界盒回归。
其中边界盒回归时,要指定几个超参数,就是指定这个边界盒的几种长宽类型,然后取可信度最高的300个区域。这300个区域就是模型就自己选择的区域了,然后就是ROI-分类+Bbox。后面和Fast R-CNN都一样了。

所以,Faster R-CNN是四种损失联合训练的:PRN分类损失(目标/非目标)、PRN边界框坐标回归损失、候选区域分类损失、最终边界框坐标回归损失。而且这个网络在反向梯度回传的时候,ROI pooling层的梯度是只能回传到feature map,是回传不到region proposal network上的!这种情况和GAN是不是类似呀! 所以Faster R-CNN是个两阶段训练模型,第一个阶段先训练主干网和区域建议,第二阶段再训练目标类别和回归边界框。

下图是R-CNN家族的速度情况:


可见,Faster R-CNN用RPN把Selective Search给干掉了,RPN比Selective Search快得多呀,速度一下子提了上去,一秒钟可以处理5帧,可以勉强处理视频了。当然后人对aster R-CNN也进行了很多改进方法,这里就不说了。

思路3、一阶段目标检测:YOLO/SSD/RetinaNet
上面的rcnn麻烦的地方还是在区域建议上,而且有了区域建议,整个网络的梯度还是部分回传的,所以还得两阶段训练,那我能不能一次训练呢?于是,YOLO诞生了。

YOLO:YOLO就直接把原图分成7x7个不重叠的49个区域,然后每个区域用卷积网络提取特征,然后对每个区域的特征回归一个类别个数+3个边界盒。其中3个边界盒的3是个超参数,你可以设定其他个数;并且边界盒向量是5,就是最后再加一个置信度值。就类似faster rcc的下面部分:

而SSD就是上图CNN部分,提取特征的部分,SSD是把CNN中各个层的特征都去回归回归,因为有的目标是小目标,小目标前层的卷积层才能检测的到,大目标后面的卷积层能检测到,所以SSN把各个层的特征图都给它回归回归。而每层回归的时候都用anchor定位,让它们可以融合起来,就大小目标都不放过了。

(三)影响目标检测精度的因素:

十五、实例分割:Mask R-CNN

Mask R-CNN是在Faster rcnn的基础上改进而来的,其中mask prediction就是下图的最右边,又上采样成28x28:

可以回归边界盒,就也可以回归一些人体的关键点,那就是姿态检测了。

最近更新

  1. TCP协议是安全的吗?

    2024-04-13 11:24:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-13 11:24:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-13 11:24:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-13 11:24:01       20 阅读

热门阅读

  1. 俄罗斯游戏市场分析与海外营销策略洞察

    2024-04-13 11:24:01       17 阅读
  2. 数据仓库的—数据仓库的体系架构

    2024-04-13 11:24:01       45 阅读
  3. Android 8.1 设备删除蓝牙功能

    2024-04-13 11:24:01       50 阅读
  4. FineBI概述

    2024-04-13 11:24:01       21 阅读