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); k\in[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_r\in{1,2,3,\frac{1}{2},\frac{1}{3}}\]
  3. 基于缩放因子和长宽比例,计算当前预定义框的宽和高:
    宽: \((w_k^a = s_k\sqrt a_r)\) ;
    高:\((h_k^a= s_k\sqrt a_r )\)
    其中对长宽比为1的多加一个缩放因子:\({s'}_k=\sqrt{(s_ks_k+1)}\)

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

object detection[SSD]的更多相关文章

  1. object detection api调参详解(兼SSD算法参数详解)

    一.引言 使用谷歌提供的object detection api图像识别框架,我们可以很方便地重新训练一个预训练模型,用于自己的具体业务.以我所使用的ssd_mobilenet_v1预训练模型为例,训 ...

  2. 基于ssd的手势识别模型(object detection api方式)

    [Tensorflow]Object Detection API-训练自己的手势识别模型 1. 安装tensorflow以及下载object detection api 1.安装tensorflow: ...

  3. TensorFlow Object Detection API中的Faster R-CNN /SSD模型参数调整

    关于TensorFlow Object Detection API配置,可以参考之前的文章https://becominghuman.ai/tensorflow-object-detection-ap ...

  4. deep learning on object detection

    回归工作一周,忙的头晕,看了两三篇文章,主要在写各种文档和走各种办事流程了-- 这次来写写object detection最近看的三篇文章吧.都不是最近的文章,但是是今年的文章,我也想借此让自己赶快熟 ...

  5. TensorFlow Object Detection API(Windows下测试)

    "Speed/accuracy trade-offs for modern convolutional object detectors." Huang J, Rathod V, ...

  6. Object Detection︱RCNN、faster-RCNN框架的浅读与延伸内容笔记

    一.RCNN,fast-RCNN.faster-RCNN进化史 本节由CDA深度学习课堂,唐宇迪老师教课,非常感谢唐老师课程中的论文解读,很有帮助. . 1.Selective search 如何寻找 ...

  7. 谷歌开源的TensorFlow Object Detection API视频物体识别系统实现教程

    视频中的物体识别 摘要 物体识别(Object Recognition)在计算机视觉领域里指的是在一张图像或一组视频序列中找到给定的物体.本文主要是利用谷歌开源TensorFlow Object De ...

  8. Tensorflow object detection API 搭建属于自己的物体识别模型

    一.下载Tensorflow object detection API工程源码 网址:https://github.com/tensorflow/models,可通过Git下载,打开Git Bash, ...

  9. object detection[content]

    近些年,随着DL的不断兴起,计算机视觉中的对象检测领域也随着CNN的广泛使用而大放异彩,其中Girshick等人的<R-CNN>是第一篇基于CNN进行对象检测的文献.本文欲通过自己的理解来 ...

随机推荐

  1. js的深层克隆和浅层克隆代码和理解

    <script> //判断是不是原始值 //判断是数组还是对象 //建立相应的数组或对象 var obj={ name:'辣鸡', sex:'male', card:['laobi','f ...

  2. 添加用户到sudoers

    ** is not in the sudoersfile.  This incident will bereported.” (用户不在sudoers文件中……) 处理这个问题很简单,但应该先理解其原 ...

  3. 2019年Web前端最新导航(常见前端框架、前端大牛)

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 前言 本文列出了很多与前端有关的常见网站.博客.工具等,整体来看比较权威.有些东西已经 ...

  4. 剑指Offer 答题截图

  5. Hive中笔记 :三种去重方法,distinct,group by与ROW_Number()窗口函数

    一.distinct,group by与ROW_Number()窗口函数使用方法 1. Distinct用法:对select 后面所有字段去重,并不能只对一列去重. (1)当distinct应用到多个 ...

  6. c/c++ vector,map,set,智能指针,综合运用的小例子

    标准库,智能指针,综合运用的小例子 功能说明:查询单词在文件中出现的次数,如果在同一行出现多次,只算一次. 比如查询单词:你好 输出的结果: 你好 出现了:2次 (行号 2)xxxxxxx 你好 (行 ...

  7. Windows下强制删除文件或文件夹(解除文件占用/Unlock)

    前言 在windows下,有时候会碰到一些文件无法删除,尽量使用“管理员取得所有权” ,但文件或文件夹依然无法删除,这一点非常苦恼. 本文记录几款可以解锁文件占用的软件. ProcessHacker ...

  8. Linux 小知识翻译 - 「LDAP」

    这次聊聊「LDAP」. LDAP是「Lightweight Directory Access Protocol」的所有,从名字上可以看出是协议的一种. LDAP是访问数据库(层次型数据库)的组件.管理 ...

  9. 我的BRF+自学教程(一):公式(formula)

    Business Rule Framework Plus(业务规则框架,以下简称BRFplus或BRF+)是一个强大的工具, 它允许用户以直观的方式对规则建模,并在不同的应用程序中重用这些规则.通过它 ...

  10. 17.基于scrapy-redis两种形式的分布式爬虫

    redis分布式部署 1.scrapy框架是否可以自己实现分布式? - 不可以.原因有二. 其一:因为多台机器上部署的scrapy会各自拥有各自的调度器,这样就使得多台机器无法分配start_urls ...