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进行对象检测的文献.本文欲通过自己的理解来 ...
随机推荐
- bitnami_redmine3.3.0-1 问题及备份恢复
1. 服务不见了处理方法: 安装Bitnami Redmine之后,会生成5个与之相关的进程,分别是 redmineApache redmineMySQL redmineSubversion redm ...
- LVS + nginx实现高性能精准负载均衡
- MySQL 性能优化-数据库死锁监控
MySQL性能优化-数据库死锁监控 by:授客 QQ:1033553122 1)表锁定 通过检查 table_locks_waited 和 table_locks_immediate 状态变量来分析表 ...
- iOS开发GCD(3)-数据安全
/* 多个线程可能访问同一块资源,造成数据错乱和数据安全问题 为代码添加同步锁(互斥锁) */ -(void)synchronized{ @synchronized(self){ //需要锁住的代码, ...
- socket和http的区别
1.HTTP连接 HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用 ...
- java8中Lambda表达式和Stream API
一.Lambda表达式 1.语法格式 Lambda是匿名函数,可以传递代码.使用“->”操作符,改操作符将lambda分成两部分: 左侧:指定了 Lambda 表达式需要的所有参数 右侧:指定了 ...
- 章节七、1-ArrayList
一.集合是一个容器,前面讲的数值也是一个容器, 它们的区别是: 1.数组既可以存储基本数据类型,又可以存储引用数据类型,而集合只能存储引用数据类型,也就是对象. 2.基本数据类型存储的是值,引用数据类 ...
- android默认开启adb调试方法分析
用adb调试android时,每次接入usb线,都会提示一个确认打开usb调试功能的窗口,有时候,我们需要默认打开usb调试功能.或者无需弹出对话框,直接默认开启.这个我们需要分析adb的流程了. a ...
- 这几天上海移动网络可以直接打开 Google Play 了
这几天上海移动网络可以直接打开 Google Play (谷歌应用商店)了. 速度还不错.基本无延迟. 想当初,为了防止国内应用市场里的木马或恶意软件,想从 Google Play 应用市场下载,折腾 ...
- 读JP摩根的《加密货币展望》阅读笔记
加密货币不可能死掉, 非常容易以各种形式生存下去早期加密货币的半数以上交易额是地下钱庄交易. 现在已经被投资和投机交易取代.加密货币不可能取代政府发行的货币,其影响到了美元人民币的主权利益加密货币面临 ...