https://antkillerfarm.github.io/

SSD

SSD是Wei Liu于2016年提出的算法。

论文:

《SSD: Single Shot MultiBox Detector》

代码:

https://github.com/weiliu89/caffe

Wei Liu,南京大学本科(2009)+北卡罗莱娜大学博士(在读)。
个人主页:
http://www.cs.unc.edu/~wliu/

网络结构

YOLO有一些缺陷:每个网格只预测一个物体,容易造成漏检;对于物体的尺度相对比较敏感,对于尺度变化较大的物体泛化能力较差。

针对YOLO中的这些不足,SSD在这两方面都有所改进,同时兼顾了mAP和实时性的要求。其思路就是Faster R-CNN+YOLO,利用YOLO的思路和Faster R-CNN的anchor box的思想。

上图是SSD的网络结构图。其特点为:

1.采用VGG16的基础网络结构,使用前面的前5层。

2.使用Dilated convolution将fc6和fc7层转化成两个卷积层。

3.再额外增加了3个卷积层,和一个average pool层。不同层次的feature map分别用于default box的偏移以及不同类别得分的预测。

4.通过NMS得到最终的检测结果。

这些增加的卷积层的feature map的大小变化比较大,允许能够检测出不同尺度下的物体:在低层的feature map,感受野比较小,高层的感受野比较大,在不同的feature map进行卷积,可以达到多尺度的目的。

上图是从另一个角度观察SSD,可以看出SSD可检出8372个default box。这里沿用Faster R-CNN的Anchor方法生成default box。

和YOLO一样,卷积层的每个点都是一个vector,含义也和YOLO类似,只是分类的时候,多了一个背景的类别,所以就成了20+1类。

在YOLO中,由于每个格子只有1个default box,所以对于一个格子中包含两个物体的情况是无能为力的。SSD的Anchor方法略微改善了这方面的性能,但对于超过Anchor数量的情况,仍然无能为力。因此,这两者对于小目标的检测,没有RCNN系列算法的效果好。

训练策略

监督学习训练的关键点:如何把标注信息(ground true box,ground true category)映射到(default box上)?

正负样本

与ground truth box的IOU大于0.5的default box,被定为该ground truth box的正样本,其它的default box则为负样本。

而一般的MultiBox算法中,只有IOU最大的default box才是正样本。

显然,在SSD中,一个ground truth box可能对应多个default box。

例如上图,有两个default box与猫匹配,一个default box与狗匹配。

Hard Negative Mining

Hard Negative Mining是机器学习领域的一个常用技巧。

对于正负样本数量不均衡的数据集(这里假设负样本数量远大于正样本数量),通常的做法有:

1.增加正样本的数量。这个过程通常叫做数据增强(Data Augmentation)。例如对图片进行旋转、位移得到新的正样本。

2.减少负样本的数量。这里实际上是一个筛选有价值的负样本的过程。Hard Negative Mining就属于这类方法,它认为负样本的分数越高,越有价值。

具体到图像分类任务就是:那些不包含该物体但分值却很高的样本。通俗的讲,就是那些容易被混淆的负样本。

3.修改正负判定门限,以匹配正负样本比例。例如,提高IOU门限。

4.异常点检测。

在SSD中,用于预测的feature map上的每个点都对应有6个不同的default box,绝大部分的default box都是负样本,导致了正负样本不平衡。

在训练过程中,采用了Hard Negative Mining的策略(根据confidence loss对所有的box进行排序,使正负例的比例保持在1:3)来平衡正负样本的比率。

参考:

https://mp.weixin.qq.com/s/D0JaJaHeNX4kljSTxTsAAw

一文概览卷积神经网络中的类别不均衡问题

Caffe实现的细节问题

上图是SSD末端的caffe结构图。我们注意到在flatten之前有个permute的操作。这个实际上还是和caffe blob的格式有关。

只有flatten的效果:[B, CxHxW]

permute+flatten的效果:[B, HxWxC]

C在最后,意味着同一个点的不同通道的信息挨着放在一起,从而保证了信息的局部空间性保持不变。

显然,这里如果是TensorFlow的tensor结构的话,permute就没有存在的必要了。

参考

http://www.jianshu.com/p/ebebfcd274e6

Caffe-SSD训练自己的数据集教程

https://zhuanlan.zhihu.com/p/24954433

SSD

http://blog.csdn.net/zy1034092330/article/details/72862030

SSD详解

http://blog.csdn.net/jesse_mx/article/details/74011886

SSD模型fine-tune和网络架构

http://blog.csdn.net/u010167269/article/details/52563573

SSD论文阅读

http://blog.csdn.net/zijin0802034/article/details/53288773

另一个SSD论文阅读

http://www.lai18.com/content/24600342.html

还是一个SSD论文阅读

https://www.zhihu.com/question/49455386

为什么SSD(Single Shot MultiBox Detector)对小目标的检测效果不好?

YOLOv2

面对SSD的攻势,pjreddie不甘示弱,于2016年12月提出了YOLOv2(又名YOLO9000)。YOLOv2对YOLO做了较多改进,实际上更像是SSD的升级版。

论文:

《YOLO9000: Better, Faster, Stronger》

实际上,论文的内容也正如标题所言,主要分为Better, Faster, Stronger三个部分。

Better

batch normalization

YOLOv2网络通过在每一个卷积层后添加batch normalization,极大的改善了收敛速度同时减少了对其它regularization方法的依赖(舍弃了dropout优化后依然没有过拟合),使得mAP获得了2%的提升。

High Resolution Classifier

所有state-of-the-art的检测方法基本上都会使用ImageNet预训练过的模型(classifier)来提取特征,例如AlexNet输入图片会被resize到不足256x256,这导致分辨率不够高,给检测带来困难。所以YOLO(v1)先以分辨率224x224训练分类网络,然后需要增加分辨率到448x448,这样做不仅切换为检测算法也改变了分辨率。所以作者想能不能在预训练的时候就把分辨率提高了,训练的时候只是由分类算法切换为检测算法。

YOLOv2首先修改预训练分类网络的分辨率为448x448,在ImageNet数据集上训练10轮(10 epochs)。这个过程让网络有足够的时间调整filter去适应高分辨率的输入。然后fine tune为检测网络。mAP获得了4%的提升。

Convolutional With Anchor Boxes

借鉴SSD的经验,使用Anchor方法替代全连接+reshape。

相应的,YOLOv2对于输出向量的编码方式进行了改进,如下图所示:

其主要思路是:将对类别的预测放到anchor box中。

同时,由于分辨率的提高,cell的数量由7x7改为13x13。这样一来就有13x13x9=1521个boxes了。因此,YOLOv2比YOLO在检测小物体方面有一定的优势。

Dimension Clusters

使用anchor时,作者发现Faster-RCNN中anchor boxes的个数和宽高维度往往是手动精选的先验框(hand-picked priors),设想能否一开始就选择了更好的、更有代表性的先验boxes维度,那么网络就应该更容易学到准确的预测位置。

解决办法就是统计学习中的K-means聚类方法,通过对数据集中的ground true box做聚类,找到ground true box的统计规律。以聚类个数k为anchor boxs个数,以k个聚类中心box的宽高维度为anchor box的维度。

作者做了对比实验,5种boxes的Avg IOU(61.0)就和Faster R-CNN的9种Avg IOU(60.9)相当。 说明K-means方法的生成的boxes更具有代表性,使得检测任务更好学习。

Direct location prediction

使用anchor boxes的另一个问题是模型不稳定,尤其是在早期迭代的时候。大部分的不稳定现象出现在预测box的(x,y)坐标时。

究其原因在于,虽然RPN会预测坐标的修正值(Δx,Δy)(Δx,Δy)(\Delta x, \Delta y),然而却未对Δx,ΔyΔx,Δy\Delta x, \Delta y的取值范围做限定。因此,可能会出现anchor检测很远的目标box的情况,效率比较低。

正确做法应该是每一个anchor只负责检测周围正负一个单位以内的目标box。

Fine-Grained Features

修改后的网络最终在13x13的特征图上进行预测,虽然这足以胜任大尺度物体的检测,但如果用上细粒度特征的话可能对小尺度的物体检测有帮助。

Faser R-CNN和SSD都在不同层次的特征图上产生区域建议以获得多尺度的适应性。

YOLOv2使用了一种不同的方法,简单添加一个passthrough layer,把浅层特征图(分辨率为26x26)连接到深层特征图。

具体操作如下:

1.叠加相邻空间位置的特征到不同通道,将26x26x512的特征图叠加成13x13x2048的特征图。

2.将浅层特征图(13x13x2048)和深层特征图(13x13x1024)合并为一个(13x13x3072)tensor。

Multi-Scale Training

为了让YOLOv2对不同尺寸图片具有鲁棒性,在训练的时候就要考虑这一点。

每经过10批训练(10 batches)就会随机选择新的图片尺寸。网络使用的降采样参数为32,于是使用32的倍数{320,352,…,608},最小的尺寸为320 * 320,最大的尺寸为608 * 608。 调整网络到相应维度然后继续进行训练。

Faster

Darknet-19

YOLOv2使用了一个新的分类网络作为特征提取部分,参考了前人的先进经验,比如类似于VGG,作者使用了较多的3x3卷积核,在每一次池化操作后把通道数翻倍。

借鉴了network in network的思想,网络使用了全局平均池化(global average pooling),把1x1的卷积核置于3x3的卷积核之间,用来压缩特征。也用了batch normalization(前面介绍过)稳定模型训练。

最终得出的基础模型就是Darknet-19,其包含19个卷积层、5个最大值池化层(maxpooling layers )。如下图:

Darknet-19的运算量为55.8亿次浮点数运算。VGG-16为306.9亿次,而YOLO为85.2亿次。

Stronger

联合训练

作者提出了一种在分类数据集和检测数据集上联合训练的机制:

1.使用检测数据集的图片去学习检测相关的信息,例如bounding box坐标预测,是否包含物体以及属于各个物体的概率。

2.使用仅有类别标签的分类数据集图片去扩展可以检测的种类。

这种方法有一些难点需要解决。检测数据集只有常见物体和抽象标签(不具体),例如 “狗”,“船”。分类数据集拥有广而深的标签范围(例如ImageNet就有一百多类狗的品种,包括 “Norfolk terrier”, “Yorkshire terrier”, and “Bedlington terrier”等. )。必须按照某种一致的方式来整合两类标签。

大多数分类的方法采用softmax层,考虑所有可能的种类计算最终的概率分布。但是softmax假设类别之间互不包含,但是整合之后的数据是类别是有包含关系的,例如 “Norfolk terrier” 和 “dog”。所以整合数据集没法使用这种方式(softmax 模型),

作者最后采用一种不要求互不包含的多标签模型(multi-label model)来整合数据集。

深度学习(十七)——SSD, YOLOv2相关推荐

  1. 推荐系统遇上深度学习(十七)--探秘阿里之MLR算法浅析及实现

    阿里近几年公开的推荐领域算法可真不少,既有传统领域的探索如MLR算法,还有深度学习领域的探索如entire -space multi-task model,Deep Interest Network等 ...

  2. 深度学习之 SSD(Single Shot MultiBox Detector)

    目标检测近年来已经取得了很重要的进展,主流的算法主要分为两个类型: (1)two-stage方法,如R-CNN系算法,其主要思路是先通过启发式方法(selective search)或者CNN网络(R ...

  3. 【深度学习】SSD网络原理

    SSD网络backbone由VGG16网络的全部卷积层,即到conv5为止,去掉之后的全连接层.如下图: 然后是 conv6:3x3x1024; conv7:1x1x1024; conv8:1x1x2 ...

  4. 深度学习之SSD总结

    SSD是一种直接预测目标类别和bounding box的多目标检测算法.它使用低层feature map检测小目标,使用高层feature map检测大目标. 一.SSD的优势与劣势 1.优势 (1) ...

  5. 推荐系统遇上深度学习,9篇阿里推荐论文汇总!

    作者 | 石晓文 转载自小小挖掘机(ID: wAIsjwj) 业界常用的推荐系统主要分为两个阶段,召回阶段和精排阶段,当然有时候在最后还会接一些打散或者探索的规则,这点咱们就不考虑了. 前面九篇文章中 ...

  6. 深度学习(十八)——YOLOv2(2), 语义分割

    YOLOv2 Stronger(续) Hierarchical classification(层次式分类) ImageNet的标签参考WordNet(一种结构化概念及概念之间关系的语言数据库).例如: ...

  7. 深度学习入门(三十七)计算性能——硬件(TBC)

    深度学习入门(三十七)计算性能--硬件(CPU.GPU) 前言 计算性能--硬件(CPU.GPU) 课件 电脑 提升CPU利用率① 提升CPU利用率② CPU VS GPU 提升GPU利用率 CPU/ ...

  8. 深度学习论文阅读目标检测篇(五)中文版:YOLOv2《 YOLO9000: Better, Faster, Stronger》

    深度学习论文阅读目标检测篇(五)中文版:YOLOv2< YOLO9000: Better, Faster, Stronger> 摘要 1.引言 2. 更好 3. 更快 4. 更强 5. 结 ...

  9. 深度学习论文阅读目标检测篇(五)中英对照版:YOLOv2《 YOLO9000: Better, Faster, Stronger》

    深度学习论文阅读目标检测篇(五)中文版:YOLOv2< YOLO9000: Better, Faster, Stronger> Abstract 摘要 1. Introduction 1. ...

  10. 深度学习目标检测模型全面综述:Faster R-CNN、R-FCN和SSD

    为什么80%的码农都做不了架构师?>>>    Faster R-CNN.R-FCN 和 SSD 是三种目前最优且应用最广泛的目标检测模型,其他流行的模型通常与这三者类似.本文介绍了 ...

最新文章

  1. java员工实体模型_Java持久性、db实体与其他模型之间的通信
  2. java jlist 图标_java – 将图像添加到JList项目
  3. 给 c# 程序员的十个重要提示
  4. Java基础篇:循环语句之while语句
  5. mysql实现类似oracle中rownum的效果
  6. Foobar音乐播放器——最佳音乐播放器 - imsoft.cnblogs
  7. PCWorld评10大科技产品:IBM超级计算机上榜
  8. smartupload java_java组件smartupload实现上传文件功能
  9. 分享 27 个面向开发人员的最佳 Vue.js 开发工具
  10. 手游修改平台服务器代码,怎么把手游代码放在云服务器
  11. 手机ping软件测试网速,网速测试 - wifi测网速,网络ping test
  12. Win10镜像安装net3.5
  13. 商城尺码选择效果 jquery
  14. Redis 服务器常用配置参数
  15. Python_oldboy_自动化运维之路_面向对象2(十)
  16. 如何修改阿里云服务器的控制台root密码
  17. 倍福 TwinCAT背景知识
  18. python字符串是啥_python字符串表示什么?
  19. JS 通过日期判断当前日期所在周的周一到周日的日期
  20. Tensorflow2.1入门 第六章:循环神经网络

热门文章

  1. 个人的web开发心得(八)----------非常适合入门新手,都是常识
  2. Angular变化检测机制:改善的脏检查
  3. document.body.scrollTop的值为零问题
  4. java mysql 行锁_Java如何实现对Mysql数据库的行锁?
  5. vue 绑定图片相对路径
  6. Navicat连接成功忘记密码-查看密码
  7. 计算laws的matlab代码
  8. 2018.12.30|区块链技术头条
  9. 学爬虫,需要掌握哪些Python基础?
  10. Redis 未授权访问缺陷可轻易导致系统被黑