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


    0. 背景

    经过了rcnn,spp,fast rcnn, faster rcnn,yolo,这里又到了ssd模型。
    faster rcnn的贡献是将候选框区域提取的部分也集成到CNN中去,并且与对象的分类和候选框区域微调共享同一个基CNN,而其中还是存在需要做4步训练的方法(作者虽然后续也实现了近似联合训练的方法);

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

    而SSD模型是在yolo后提出的,其本身兼顾了多尺度的feature map的结合,颇有点faster rcnn 论文中提到的图像金字塔的味道在里面,而且不需要单独的一个部分来提供对象候选框,本身就如yolo一样是一个单一的网络模型,相比于faster rcnn更容易训练,而且,ssd相比faster rcnn,整体准确度有所提升,并且速度也比yolo一代要快。

    SSD模型通过将CNN后部分多个不同尺度的feature map都拿来预测,从而很好的解决小目标在最后哪个feature map上会消失不见的问题;而且如yolo就是一个单一网络,所以整体的训练和预测上耗时也相较之前的模型要低。不过我们还是从中发现了SSD如faster rcnn中一样,会事先假定一些尺寸和长宽比大小的框,就如RPN中一样。

    个人觉得SSD就是采用了:

    • 1 - yolo的单一模型思想;
    • 2 - faster rcnn 预先假定的固定尺寸的候选框,然后训练阶段去微调;
    • 3 - 并如其他模型一样通过多个feature map上获取信息解决小目标识别问题。

    1. 模型


    图1.1 不同尺度下feature map

    如图1.1所示,最左边的就是真实图片和给定的groundtruth框;而中间的8*8就是某一层的feature map,从中可以看出和原图的狗和猫都有所对应,然而因为当前层的feature map映射回输入层的感受野上,猫部分是够了的,而狗部分不够,也就是最多框住了狗的一半;再看最右边的4*4的feature map,这一层每个神经元映射回输入层的感受野相比8*8的更大,所以狗部分检测成功了。而如果从当前层映射回原图的感受野,猫应该会完整的框住,不过同时也会框住其他对象,不利于基于预先定义的框的微调(因为得把预定义框移动好多)。所以从这里就可以看出从不同尺度的feature map上获取对象的好处了。


    图1.2 SSD与yolo模型结构

    如图1.2的SSD部分所示,输入层是300*300大小,然后通过vgg16接入,其中的conv6,conv7这两层本事vgg的全连接层,这里替换成了卷积层。后面的conv8_2,conv9_2,conv10_2,conv11_2也都是新增加的层。
    并且将前面的VGG16的conv4_3,conv7也作为框选择的feature map

    2. 预定义候选框

    如论文3.1介绍的,在conv4_2,conv10_2,conv11_2这三个feature map上,每个位置选取4个不同尺寸的候选框,而在其他几个位置上选取6个;所以如下计算:
    (38*38*4+19*19*6+10*10*6+5*5*6+3*3*4+1*1*4=8732)
    也就是从这些feature map上一共可以预先设定这么多个候选框

    其中每个feature map的一个神经元都对应着输入层的一个感受野,如yolo那样最后的7*7的feature map上就有49个神经元,每个神经元对应输入层一个感受野区域。而如果基于这几个感受野需要做预定义框的变形,那么越往后的缩放只能相对变小,不然因子太大,直接对应输入层的感受野区域就完全包含了整个图片了。

    在SSD中每个预定义框的默认中心为((frac{i+0.5}{|f_k|},frac{j+0.5}{|f_k|})),其中(|f_k|)为第k个所需要提取的feature map的尺寸,如我们一共会在6个feature map上设定候选框,第一个是(38*38),那么(|f_k|=38),而分子的(i,j)就是当前神经元的位置,其中的0.5是因为神经元的跨越是以1为单位的(即第一个神经元是((0,0)),第二个是((0,1))),所以第一个神经元所表示的候选框的设定中心为((0.5,0.5))

    其中计算预定义候选框的长宽如下步骤:

    1. 按公式:

    [s_k = s_{min} +frac{s_{max} - s_{min}}{m -1}(k - 1); kin[1,m] ]

    计算当前feature map的预定义框的缩放因子,其中以图1.2结构为例,(m=6),而其中的(s_{min}=0.2),(s_{max}=0.9)是人为预先定义的,表示最低feature map的尺度是0.2,最高的是0.9,从而其他中间的feature map就介于两者之间了
    2. 设定长宽比:

    [a_rin{1,2,3,frac{1}{2},frac{1}{3}} ]

    1. 基于缩放因子和长宽比例,计算当前预定义框的宽和高:
      宽: ((w_k^a = s_ksqrt a_r)) ;
      高:((h_k^a= s_ksqrt a_r ))
      其中对长宽比为1的多加一个缩放因子:({s'}_k=sqrt{(s_ks_k+1)})

    如上所述,在每个feature map上一共会有6种类型的候选框,对于其中某些feature map,丢弃缩放因子为(frac{1}{3},3)这两种情况

  • 相关阅读:
    百度mp3地址解密码
    VB 在EXE后附加信息
    截屏函数
    Base64和StrToByte
    The Android ION memory allocator, DMABUF is mentioned as well
    DDC EDID 介绍
    Memory management for graphic processors TTM的由来
    科普 写display driver的必看 How video card works [2D的四种主要操作]
    GEM vs TTM
    DMABUF 背景介绍文章 Sharing buffers between devices
  • 原文地址:https://www.cnblogs.com/shouhuxianjian/p/7707869.html
Copyright © 2011-2022 走看看