zoukankan      html  css  js  c++  java
  • object detection[content]


    近些年,随着DL的不断兴起,计算机视觉中的对象检测领域也随着CNN的广泛使用而大放异彩,其中Girshick等人的《R-CNN》是第一篇基于CNN进行对象检测的文献。本文欲通过自己的理解来记录这几大模型的发展。(自己挖坑,自己待填)

    0. overfeat


    0.1. MultiBox


    1. R-CNN

    R-CNN是第一篇将CNN用在目标检测领域中的,是开山之作,不过其中的原理结构也较为简单,如下图:

    图1.1 R-CNN结构

    步骤

    • 通过selective search方法在一张图片上获取很多的候选区域框(在真实目标上框出了大致粗糙的结果框,可是有三个问题:1 - 多;2-一些框置信度不够;3 - 框的边界不够精细);
    • 用CNN对每个框提取特征;
    • 用SVM做对象分类;
    • 用回归器修正候选框位置。

    特点:作者基于之前dl在图像分类上的准确度,想通过cnn提取图片的特征来实现特征提取这步操作


    2. SPPnet


    图2.1 传统CNN和SPP
    如上图所示,因为常用的CNN网络都需要事先crop和warp,这样造成的问题就是要么图像内目标没包含完整、要么就是图像必须一定的拉伸导致几何失真。
    所以作者在最后一层卷积层和全连接层之间加了一个SPP池化。因为传统的CNN是需要全连接层的,对于前面的卷积层来说,图片输入多大,对应的输出也会有对应变化,可是仍然能够很好的处理。而全连接层却需要固定维度的输入;所以传统的CNN可以将前面的卷积层看成是特征提取器,然后将提取到的特征通过传统的神经网络(也就是全连接层)做分类预测。

    具体的SPP操作如下图:

    图2.2 SPP操作

    如上图所示,在最后一层卷积层和第一层全连接层之间加一层空间金字塔池化层。上图中256表示之前特征图的通道数(也就是之前的特征图是一个M*N*D的张量,而每个特征图size为M*N,一共D个通道)。这里采取了3种不同的池化方式,第一个是固定每个特征图输出一个16维的向量;第二个固定输出一个4维的向量;第三个是个全局池化,即每个特征图固定输出一个值。

    步骤如下

    • 照常输入图片;
    • 在最后一层卷积层的输出部分获取当前特征图的size;
    • 通过对全连接层的输入的维度固定,反推当前的SPP层每个特征图上需要的池化窗口大小和滑动步长大小;
    • 对当前特征图进行SPP池化

    3. fast R-CNN

    特点: 引入了ROI池化:所谓ROI就是基于当前图片中感兴趣区域,是CV中的常见术语,而池化是DL常见术语。ROI池化就是基于当前特征图的感兴趣区域(选定的部分区域)进行池化操作。

    图3.1 fast-rcnn网络结构图

    • 因为RCNN是分阶段处理的,所以训练还是测试都是比较繁琐的;
        所以,在fast RCNN中,除了最开始的对象候选框还是采用了SS的方法,后续的都是基于cnn的方式,从而能够实现end-to-end。
    • rcnn相对来说,慢是因为每个候选框上都需要过一次cnn;
        所以,fast rcnn就想,能不能在一个图片上过一次,然后在后面的feature map上直接提取每个候选框对应的区域(即一个ROI区域对应一个由SS方法提到的候选框);
    • 可是得到的每个ROI都是不固定的size,如何能统一成一致的大小,从而完成后续的层训练;
        所以,提出了ROI-pooling的方法,从SPP-net得到的灵感,直接将每个得到的ROI区域划分成固定size的网格,每个格子中进行max-pooling,从而输出统一的数据向量
    • 那么这时候怎么反向BP这些不同size的ROI呢;
        所以,我们以ROI-pooling层作为分界线,后面是正常的基于整个图片提取特征的过程;到了ROI-pooling层,向前分隔成2个并列的全连接层;a)用来做当前ROI的分类,是一个softmax层结果;b)用来对当前ROI进行坐标精确微调,是一个基于全连接层的作者自定义的目标函数;

    而从后往前当残差传到ROI层的时候,将当前残差对应回完整的那个feature map,其中如果某个神经元参与了不同的ROI区域,那么该神经元的残差是接收其涉及的ROI残差的和,如下图所示:

    图3.2 ROI池化层前向传播,该图来自这里

    图3.3 ROI池化层后向传播,该图来自这里
    在图3.3中,先将不同的ROI映射回原来完整的feature map,然后重叠区域的残差是2个ROI传到这里的残差之和,其中绿点是因为采用的max-pooling,然后恰好这两个ROI池化时候网格的块中结果都是这个神经元。
    几个有干货,而不是简单的翻译的博客:博客1博客2


    4. faster R-CNN

    从上面几个网络的发展来看,有种顺风顺水的感觉,就是当前暴露了哪个问题,那么就解决那个问题,接下来暴露下一个问题,那么就接着解决暴露的问题。通过fast-rcnn之后,发现下一个要解决的问题就是SS方法提取的太耗时了,所以faster RCNN就着重解决区域提取方法,即让cnn网络自己提出所谓的图片ROI区域。这里叫做区域候选网络(region proposal network,RPN)。

    而且faster rcnn,个人人为是目标检测的一个高潮,因为后续的ssd,yolo,rfcn都是基于这个网络进行对比的,而faster rcnn的准确度是最高的,所以后续的几个网络都是在其他方面有所优势,比如照顾小目标,比如实时性等等。

    看这里,faster rcnn


    5. YOLO

    这里我们来说YOLO架构:
    yolo相较于之前几个模型就比较暴力,直接将最后的feature map硬编码成7*7的网格,每个神经元就是一个如faster rcnn中RPN的划框,先验的将faster rcnn的RPN的工作硬编码到网络中。假设每个神经元就是原图中对象的中心,通过直接对目标函数进行改进,很好的将原来RPN的工作和fast rcnn的工作融合到目标函数中去了,这样做的好处是快,在预测的时候也不需要经过RPN去先得到所谓的对象候选框,直接一次过整个网络就行了;当然,也存在最后目标预测准确度下降的问题,因为从模型的设计上就可以看出,如果每个神经元只预测一个对象,那么就存在丢失目标的可能,而且作者通过实验也发现,对小目标的识别不如faster rcnn。

    YOLOv1YOLOv2


    6. SSD

    ssd(点我)


    7. RFCN

    rfcn(点我)


    8. FPN


    9. PVANET

    参考文献
    0. [overfeat] Sermanet P, Eigen D, Zhang X, et al. Overfeat: Integrated recognition, localization and detection using convolutional networks[J]. arXiv preprint arXiv:1312.6229, 2013.

    1. [r-cnn] R. Girshick, J. Donahue, T. Darrell, and J. Malik. Rich feature hierarchies for accurate object detection and semantic segmentation. In Proceedings of the IEEE conference on computer vision and pattern recognition, pages 580–587,2014
    2. [spp] He K, Zhang X, Ren S, et al. Spatial pyramid pooling in deep convolutional networks for visual recognition[C]//European Conference on Computer Vision. Springer, Cham, 2014: 346-361.
    3. [fast r-cnn] Girshick R. Fast r-cnn[C]//Proceedings of the IEEE international conference on computer vision. 2015: 1440-1448.
    4. [faster r-cnn] Ren S, He K, Girshick R, et al. Faster R-CNN: Towards real-time object detection with region proposal networks[C]//Advances in neural information processing systems. 2015: 91-99.
    5. [yolo] J. Redmon, S. Divvala, R. Girshick, and A. Farhadi. You only look once: Unified, real-time object detection. arXiv preprint arXiv:1506.02640, 2015
    6. [yolo 9000] J. Redmon and A. Farhadi. Yolo9000: Better, faster, stronger. arXiv preprint arXiv:1612.08242, 2016
    7. [ssd] Liu W, Anguelov D, Erhan D, et al. Ssd: Single shot multibox detector[C]//European conference on computer vision. Springer, Cham, 2016: 21-37.
    8. [fpn] Lin T Y, Dollár P, Girshick R, et al. Feature pyramid networks for object detection[J]. arXiv preprint arXiv:1612.03144, 2016.
    9. [rfcn] Dai J, Li Y, He K, et al. R-fcn: Object detection via region-based fully convolutional networks[C]//Advances in neural information processing systems. 2016: 379-387.
    10. [模型比较] Huang J, Rathod V, Sun C, et al. Speed/accuracy trade-offs for modern convolutional object detectors[J]. arXiv preprint arXiv:1611.10012, 2016.
    11. [pvanet] Kim K H, Hong S, Roh B, et al. PVANET: Deep but Lightweight Neural Networks for Real-time Object Detection[J]. arXiv preprint arXiv:1608.08021, 2016.
    12. [multibox] Erhan D, Szegedy C, Toshev A, et al. Scalable object detection using deep neural networks[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2014: 2147-2154.
    13. [SqueezeDet] Wu B, Iandola F, Jin P H, et al. SqueezeDet: Unified, small, low power fully convolutional neural networks for real-time object detection for autonomous driving[J]. arXiv preprint arXiv:1612.01051, 2016.
  • 相关阅读:
    主席树套树状数组——带修区间第k大zoj2112
    卢卡斯定理——应用hdu4349
    没这5个证 付完钱房子也不是你的!
    Java transient关键字使用小记
    线性结构与非线性结构
    java事件处理机制(自定义事件)
    反射setAccessible()方法
    排序
    [JIRA] 最新Linux安装版本jira6.3.6安装破解以及数据导入的详细步骤
    深入研究java.lang.ThreadLocal类
  • 原文地址:https://www.cnblogs.com/shouhuxianjian/p/7409942.html
Copyright © 2011-2022 走看看