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)\)
其中计算预定义候选框的长宽如下步骤:
- 按公式:
\[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就介于两者之间了 - 设定长宽比:
\[a_r\in{1,2,3,\frac{1}{2},\frac{1}{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]的更多相关文章
- object detection api调参详解(兼SSD算法参数详解)
一.引言 使用谷歌提供的object detection api图像识别框架,我们可以很方便地重新训练一个预训练模型,用于自己的具体业务.以我所使用的ssd_mobilenet_v1预训练模型为例,训 ...
- 基于ssd的手势识别模型(object detection api方式)
[Tensorflow]Object Detection API-训练自己的手势识别模型 1. 安装tensorflow以及下载object detection api 1.安装tensorflow: ...
- TensorFlow Object Detection API中的Faster R-CNN /SSD模型参数调整
关于TensorFlow Object Detection API配置,可以参考之前的文章https://becominghuman.ai/tensorflow-object-detection-ap ...
- deep learning on object detection
回归工作一周,忙的头晕,看了两三篇文章,主要在写各种文档和走各种办事流程了-- 这次来写写object detection最近看的三篇文章吧.都不是最近的文章,但是是今年的文章,我也想借此让自己赶快熟 ...
- TensorFlow Object Detection API(Windows下测试)
"Speed/accuracy trade-offs for modern convolutional object detectors." Huang J, Rathod V, ...
- Object Detection︱RCNN、faster-RCNN框架的浅读与延伸内容笔记
一.RCNN,fast-RCNN.faster-RCNN进化史 本节由CDA深度学习课堂,唐宇迪老师教课,非常感谢唐老师课程中的论文解读,很有帮助. . 1.Selective search 如何寻找 ...
- 谷歌开源的TensorFlow Object Detection API视频物体识别系统实现教程
视频中的物体识别 摘要 物体识别(Object Recognition)在计算机视觉领域里指的是在一张图像或一组视频序列中找到给定的物体.本文主要是利用谷歌开源TensorFlow Object De ...
- Tensorflow object detection API 搭建属于自己的物体识别模型
一.下载Tensorflow object detection API工程源码 网址:https://github.com/tensorflow/models,可通过Git下载,打开Git Bash, ...
- object detection[content]
近些年,随着DL的不断兴起,计算机视觉中的对象检测领域也随着CNN的广泛使用而大放异彩,其中Girshick等人的<R-CNN>是第一篇基于CNN进行对象检测的文献.本文欲通过自己的理解来 ...
随机推荐
- iOS ----------字符串处理
//一.NSString/*----------------创建字符串的方法----------------*/ //1.创建常量字符串.NSString *astring = @"This ...
- 兼容性问题:backgroud-size支持IE8浏览器的方法
在工作中碰到一个问题:background-size是css3的新属性,当在IE8及其以下浏览器中不起作用,导致背景图片不能自适应元素的大小? 先看一个小demo: <!DOCTYPE html ...
- C程序
/* 不适用C库函数,只是用 C 语言实现函数 void* memcpy( void *dst, const void *src, size_t len ) memmove 函数的功能是拷贝 src ...
- Flutter Plugin开发流程
这篇文章主要介绍了Flutter Plugin开发流程,包括如何利用Android Studio开发以及发布等. 本文主要给大家介绍如何开发Flutter Plugin中Android的部分.有关Fl ...
- js实现复选框的全选、全不选和反选
js实现复选框的全选.全不选和反选 主要是用遍历的方法查找元素,然后通过改变checked的属性来选择,为true则是选中状态,为false则是未选状态 实现代码 <!DOCTYPE html& ...
- Linux进程启动过程分析do_execve(可执行程序的加载和运行)---Linux进程的管理与调度(十一)
execve系统调用 execve系统调用 我们前面提到了, fork, vfork等复制出来的进程是父进程的一个副本, 那么如何我们想加载新的程序, 可以通过execve来加载和启动新的程序. x8 ...
- python爬虫之小说网站--下载小说(正则表达式)
python爬虫之小说网站--下载小说(正则表达式) 思路: 1.找到要下载的小说首页,打开网页源代码进行分析(例:https://www.kanunu8.com/files/old/2011/244 ...
- Kali 2.0 下 Metasploit 初始化配置
在kali 2.0中,命令行中直接输入msfconsole 提示不能连接到数据库 ,是由于postgresql 未启动.因此,需要开启postgresql,并且进行postgresql 的初始化配置. ...
- ACE侧边栏刷新自动展开之前的选择
在body下面加上 <script type="text/javascript"> $(document).ready(function(){ var url = do ...
- 基于python的Selenium使用小结
之前介绍过基于Unittest和TestNG自动化测试框架,然而基于Web端的测试的基础框架是需要Selenium做主要支撑的,这里边给大家介绍下Web测试核心之基于Python的Selenium 一 ...