zoukankan      html  css  js  c++  java
  • paper 111:图像分类物体目标检测 from RCNN to YOLO

    参考列表

    Selective Search for Object Recognition 
    Selective Search for Object Recognition(菜菜鸟小Q的专栏) 
    Selective Search for Object Recognition(Surge) 
    Selective Search for Object Recognition(原始论文) 
    Efficient Graph-Based Image Segmentation(快速图像分割) 
    Homepage of Koen van de Sande

    非极大值抑制(Non-maximum suppression)在物体检测领域的应用 
    Efficient Non Maximum Suppression 笔记(不完整版)

    如何评价rcnn、fast-rcnn和faster-rcnn这一系列方法? 
    RCNN的安装与简单使用

    Ross B. Girshick(RCNN系列开创者) 
    rbg’s home page

    RCNN 
    Rich feature hierarchies for accurate object detection and semantic segmentation 
    https://github.com/rbgirshick/rcnn

    Fast RCNN 
    Fast R-CNN 
    https://github.com/rbgirshick/fast-rcnn

    Faster RCNN 
    Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 
    https://github.com/rbgirshick/py-faster-rcnn 
    https://github.com/ShaoqingRen/faster_rcnn

    You Only Look Once 
    You Only Look Once: Unified, Real-Time Object Detection 
    YOLO Object Detection(视频)

    RCNN

    最早的物体识别,是通过窗口扫描的方式进行,并且需要对图片进行几个级别的缩放来重复进行。 
    这种方式非常暴力,计算量大。 
    RCNN主要解决的是去掉窗口扫描,用聚类方式,对图像进行分割分组,得到多个侯选框的层次组。 
    分割分组方法有很多,RCNN用到的是Selective Search。

    以下就是RCNN的结构。

    • 从原始图片,通过Selective Search提取出区域候选框,有2000个左右
    • 把所有侯选框缩放成固定大小
    • 然后通过CNN网络,提取特征
    • 再添加两个全链接层,然后再用SVM分类,回归来微调选框位置与大小

    Fast RCNN

    RCNN有两千个左右的候选框,都要进行CNN操作。但候选框有大量重叠,造成重复计算。 
    Fast RCNN就是解决这个问题的。

    • 利用CNN(卷积神经网络),得到整个原始图片的特征层
    • 在原始图片上通过Selective Search等方法,提取出域候选框
    • 把候选框投影到最后的特征层,并进行Max-Pooling采样,得到固定大小的特征矩形
    • 然后再通过两个全连接层,分别用softmax分类,regressor进行选框位置与大小微调

    Faster RCNN

    在上面的 RCNN 与 Fast RCNN中,相对于在GPU上计算的CNN,在CPU上运行的提取候选框效率低下,一张图片大概需要2秒。 
    Faster RCNN则直接利用CNN来计算候选框,方式如下:

    • 原始图片经过CNN,得到最后的卷积特征
    • 利用3×3的矩形进行扫描,得到256维的向量(相当于再添加了一个卷积层,卷积核为3×3,输出特征数为256)
    • 3×3的特征层映射到最初图片,是一块比较大的固定区域,在此固定区域上进行长宽变形,比如分别3个缩放级别,则一共有9个不同的矩形区域,称做anchor box。9就是上图中的k值。
    • 对上图中的k个anchor box进行是否是物体判断预测,和矩形框位置与大小微调
    • 选出物体框后,再利用同Fast RCNN同样的方式,对物体类别进行判断
    • 选框与分类使用同样的CNN网络

    一张1000×600的图片,大概可以得到20k个anchor box(60×40×9)。 
    anchor box的设置应比较好的覆盖从大到小的区域,如下图:

    注 
    这里有一点疑惑,3×3的卷积核对应的原始图是块固定区域(感受野),并没有包含区域外的信息,如何做到预测更大区域的物体位置? 
    或者类似于人的感知,比如只看到部分人像,推测整个人像的大小?看到老虎的头,预测整个老虎的位置与大小?

    You Only Look Once

    Faster RCNN需要对20k个anchor box进行判断是否是物体,然后再进行物体识别,分成了两步。 
    YOLO(You Only Look Once)则把物体框的选择与识别进行了结合,一步输出,即变成”You Only Look Once”。 
    所以识别速度非常快,达到每秒45帧,而在快速版YOLO(Fast YOLO,卷积层更少)中,可以达到每秒155帧。 
    网络的整体结构如下图:

    • 把原始图片缩放成448×448大小
    • 运行单个卷积网络
    • 得到物体的位置与类别

    模型如下:

    • 把缩放成统一大小的图片分割成S×S的单元格
    • 每一个单元格负责输出B个矩形框,每一个框带四个位置信息(x, y, w, h),与一个该框是物体的概率,用Pr(Object)或者C(Confidence)表示
    • 每一个单元格再负责输出C个类别的概率,用Pr(ClassObject)表示
    • 最终输出层应有S×S×(B5+C)个单元

    相关说明:

    • 如果一个物体的中心落入一个单元格,则该单元格上的B个矩形框的位置信息都为该物体的位置信息,
    • C个概率中对应该物体类别值为1,其它为0。
    • x, y表示中心相对于单元格左上角的位置偏移,单元格左上角为(0, 0),右下角为(1, 1)
    • w, h表示矩形框的宽与高,都是相对于整个图片的相对值,全副图片大小为(1, 1),长宽都一半就是(0.5, 0.5)

    最终输出时,是物体的概率乘以类别概率,才是整体识别到是一个物体的概率:

    Pr(class)=Pr(ClassObject)Pr(Object)

    在论文You Only Look Once: Unified, Real-Time Object Detection中,S = 7,B = 2,C = 20。 
    所以输出的单元数为7×7×30

    具体的网络结构如下:

    从上图的结构可以看到,倒数第二层是一个全连接层,所以最终的单元输出整合了全局信息,更好地预测图像区域。

    训练

    整个网络最后一层为线性激活,其它层都为Leaky Rectified Linear激活方式:

    ϕ(x)={x,0.1x,if x > 0otherwise

    因为一张图片中,大部分单元格中都没有落入物体中心,所以引入两个参数λcoord=5λnoobj=0.5。 
    整个网络的代价函数变成:

    J=λcoordi=0S2j=0B1objij(xix^i)2+(yiy^i)2+λcoordi=0S2j=0B1objij(wi−−√w^i−−√)2+(hi−−√h^i−−√)2+i=0S2j=0B1objij(CiC^i)2+λnoobji=0S2j=0B1noobjij(CiC^i)2+i=0S21objijcclasses(pi(c)p^i(c))2

    因为物体有大有小,如果用差平方来做代价,则造成对大物体位置更好的优化,才发现小物体位置更差的优化,所以上面改成用开方后再做差平方。 
    我认为用以下方式可能更好:

    (wiw^iw^i)2+(hih^ih^i)2

    什么时候跑了实验,有了结果再来确认。

    YOLO的局限性

    • 最终有一个全连接层,所以各单元格能够利用全局信息,但是造成初始图片只能缩放成固定大小
    • 初始图片有缩放,则可能对不同缩放比的物体覆盖不全,造成无法识别极端缩放比的物体
    • 每一个单元格只选择一个物体框来用,并只预测一个类别,所以当多个物体中心落入一个单元格时,YOLO无能为力,表现成不能识别到小物体

    NMS

    通过上面的RCNN, Fast RCNN, Faster RCNN 或 YOLO 方法,图片中的同一个物体,可能识别出来多个选框。 
    这时需要进行选优,去掉重复的框。 
    非极大值抑制(Non-maximum suppression,NMS)就是拿来干这个的。

    如上图所示,一共有6个识别为人的框,每一个框有一个置信率。 
    现在需要消除多余的:

    • 按置信率排序: 0.95, 0.9, 0.9, 0.8, 0.7, 0.7
    • 取最大0.95的框为一个物体框
    • 剩余5个框中,去掉与0.95框重叠率大于0.6(可以另行设置),则保留0.9, 0.8, 0.7三个框
    • 重复上面的步骤,直到没有框了,0.9为一个框
    • 选出来的为: 0.95, 0.9

    两个矩形的重叠率计算方式如下:

    如图,矩形的左上角坐标为x1, y1, 右下角坐标为x2, y2,两个矩形的面积分别为A, B。

    • 取两个矩形左上角坐标的最大值x1_max, y1_max
    • 取两个矩形右下角坐标的最小值x2_min, y2_min
    • 重叠区域的宽w为max(0, x2_min - x1_max),高h为max(0, y2_min - y1_max)
    • 重叠率为 w×hA+Bw×h

    如下的两个矩形,重叠率为0:

  • 相关阅读:
    17. Letter Combinations of a Phone Number
    16. 3Sum Closest
    15. 3Sum
    14. Longest Common Prefix
    13. Roman to Integer
    12. Integer to Roman
    11. Container With Most Water
    10. Regular Expression Matching
    9. Palindrome Number
    8. String to Integer (atoi)
  • 原文地址:https://www.cnblogs.com/molakejin/p/5812958.html
Copyright © 2011-2022 走看看