物体识别算法-RCN, Fast-RCNN, Faster-RCNN和YOLO
Tim Chen(motion$) Lv5

简介

  • 计算机视觉是一个交叉学科,(自从CNN发展以来)它已经取得了极大的进步并且无人驾驶汽车已经占据了舞台中心。另一个计算机视觉的组成部分是物体检测。物体识别在姿态预估,车辆识别和无人监控等地方都提升了应用。物体检测算法和分类算法的不同是,我们尝试在图片中利用bounding box来定位出我们感兴趣的物体。另外,你可能在一张图片上不止画出一个bouding box, 你可能会画出多个bouding box来表示我们预先不知道的我们所感兴趣的不同物体。
    cat
    duck
  • 解决物体检测问题,为什么不能直接建立一个标准的CNN+FC的网络结构呢?主要的原因是输出层的长度是可变的,而不是固定的,因为我们感兴趣的物体出现的次数也是可变的。一个最naive的方法来解决这个问题就是我们从图片上划出大小不同的区域,然后利用CNN来进行分类。而这个方法的难点是物体出现的区域是大小不同的,有着不同的长宽比。所以,你需要选择巨量的区域框,而这是一个指数增长的计算量。所以,像RCNN和YOLO这些算法就被提出用来找到这些区域框,并且是要快速的找到。

RCNN

  • 为了绕过要选择巨量的区域框的问题,Ross Girshick et al ,提出了一个方法,我们利用selective serach这个算法从一张图片上提取出2k个区域框,我们称之为区域候选框。然后,我们就直接对这2k个区域候选框进行分类,而不是像之前的巨量的区域框了。selective serach算法步骤如下:
    1
    2
    3
    4
    Selective search:
    1. Generate initial sub-segmentation, we generate many candidate regions
    2. Use greedy algorithm to recursively combine similar regions into larger ones
    3. Use the generated regions to produce the final candidate region proposals
    rcnn
  • 想了解更多的selective serach算法,请参考以下链接 。得到的2k个区域候选框会被压缩成一个正方形,然后喂给了CNN网络,它的输出是一个4096维的特征向量。CNN就是一个特征提取器,输出层包含了图片的特征,然后这个特征层就会喂给了SVM用以分类。另外,为了预测候选框上是否存在物体,算法同样预测了4个groud truth的偏移量,一增加bouding box的精度。譬如,给定一个区域候选框,算法可能预测了人的存在,但是那个人的头一半是在候选框之外,所以这个偏移量是用来调整bouding box的。
    rcnn-2

RCNN的问题

  • 每张图片要训练2k次网络是一个非常耗时的操作
  • 测试的时候每张图片需要花费47秒
  • selective serach算法是一个固定的算法,所以,这个算法是没有学习的过程的。这样就容易产生一些差的区域候选框

Fast RCNN

fast rcnn

  • RCNN相同的作者提出了解决RCNN本身存在的问题的算法, 我们称之为Faster RCNN。这个算法和RCNN有比较多的相同之处,不同的是Faster RCNN不是喂区域候选框给CNN网络,而是直接喂原图片,然后生成一个卷积feature map。从这个卷积feature map中,我们生产候选框,然后压缩成正方形,再利用ROI pooling 处理成固定大小的feature map,然后喂给了全连接层。输出的ROI特征向量,我们利用softmax层来预测候选框中的物体类别和bounding box的偏移量。
  • Fast RCNN比RCNN快的原因是你不需要每次都喂2k个候选框给CNN网络,进行2k次CNN的操作。而是一张图只进行一次CNN网络的操作,然后得到feature map。
    fast rcnn cmp
  • 由以上对比图,我们可知fast-rcnn在训练和测试阶段都比rcnn提升了非常多的时间。当你看到fast rcnn的测试时间, 区域候选框的提取成为了fast rcnn的bottlenecks。这就是我们在faster rcnn中需要解决的问题。

Faster RCNN

faster rcnn

  • RCNNFast RCNN都使用了selective search算法来找出候选框。而selective search是一个非常耗时的过程,这严重影响了算法的性能。所以, Shaoqing Ren et al ,提出了一个物体检测算法,它剔除了selective search算法,而是让网络自己学习找多区域候选框。
  • Fast RCNN相似,图片直接喂给CNN网络进行特征提取,得到feature map。然后我们不用selective search来提前候选框,而是利用另一个CNN网络来预测区域候选框。预测的区域候选框之后再通过ROI pooling层,得到输出的特征层,最后在这个特征层上做区域候选框的预测和bounding box的偏移量预测。
    RCNN Test Time
  • 由以上图可见到,Faster RCNN比RCNN和Fast RCNN在测试速度方面都提升了非常多。所以,它甚至是可以用到实时的物体检测了。

YOLO-你只需看一次

via GIPHY

- **RCNN系列**的检测算法都是利用区域来定位图片中的物体。CNN网络并没有看到完整的图片。但是,图片的某些部分是非常有可能存在物体的。YOLO和**RCNN系列**算法有很大的不同。在YOLO当中,单个CNN网络预测了bouding boxes和这些boxes中的物体的类别。 ![yolo](/img/media-od-rcnn-yolo/yolo.png "yolo") - **YOLO**算法直接把一张图片分成**SxS**的网格,在每个网格中我们取m个bounding boxes。对每个bounding box,网络输出了类别概率和bounding box的偏移量。bounding boxes满足类别概率大于设定阈值的被用来定位图片中的物体。 - YOLO是比其他检测方法快一个数量级的(达到45/fps)。YOLO的限制是对小物体的识别比较难。譬如,它很男检测到一群鸟。这是由于算法的空间限制。 ### 总结 - 计算机视觉会议每年都收到大量新的新颖的想法,我觉得我们会一步步的利用AI迈向了更好的检测表现。会越来越好。我希望这些你们能够清晰的读懂了这些概念。谢谢!

via GIPHY

 评论