前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深度学习——目标检测(3)YOLO1SSD

深度学习——目标检测(3)YOLO1SSD

作者头像
DC童生
发布2018-07-24 15:20:00
6340
发布2018-07-24 15:20:00
举报
文章被收录于专栏:机器学习原理机器学习原理

前言:RCNN系列一般都是分为两个步骤,下面介绍one-stage方法,SSD和yolo算法 目标检测近年来已经取得了很重要的进展,主流的算法主要分为两个类型: (1)two-stage方法,如R-CNN系算法,其主要思路是先通过启发式方法(selective search)或者CNN网络(RPN)产生一系列稀疏的候选框,然后对这些候选框进行分类与回归,two-stage方法的优势是准确度高; (2)one-stage方法,如Yolo和SSD,其主要思路是均匀地在图片的不同位置进行密集抽样,抽样时可以采用不同尺度和长宽比,然后利用CNN提取特征后直接进行分类与回归,整个过程只需要一步,所以其优势是速度快,但是均匀的密集采样的一个重要缺点是训练比较困难,这主要是因为正样本与负样本(背景)极其不均衡(参见Focal Loss),导致模型准确度稍低。 各种方法速度如下:

YOLO1

论文核心思想如下图:

1.将一副图像分成S*S个网格,如果某个物体的中心落在这个网格中,则这个网格负责预测这个物体。 2.每个网格要预测B个bounding box,并且附带预测一个confidence值,YOLO1中B值为2。 也就是说,每个box要预测五个值,坐标四个加confidence。 3.这个confidence代表了,所预测的box含有object的置信度和预测的准确度

object在网络中则pr(object)为1;第二项为预测的bounding box和ground turth之间的IOU值。

  • 什么是IOU

4.与此同时每个网格还要预测类别,记为C类 输出SS(5*B+C)的大小。

  • 结构图
  • 目标函数
  • 缺点 由于是对图像进行评分,当整个物体落在一个网格上时候,对于小物体没法预测出来

SSD

粗略介绍一下YOLO1,SSD是在YOLO的基础上来的,下面重点介绍一下SSD

SSD算法属于one-stage方法,SSD算法在准确度和速度(除了SSD512)上都比Yolo要好很多。对于Faster R-CNN,其先通过CNN得到候选框,然后再进行分类与回归,而Yolo与SSD可以一步到位完成检测。相比Yolo,SSD采用CNN来直接进行检测,而不是像Yolo那样在全连接层之后做检测。 其实采用卷积直接做检测只是SSD相比Yolo的其中一个不同点,另外还有两个重要的改变, 一是SSD提取了不同尺度的特征图来做检测,大尺度特征图(较靠前的特征图)可以用来检测小物体,而小尺度特征图(较靠后的特征图)用来检测大物体; 二是SSD采用了不同尺度和长宽比的先验框(Prior boxes, Default boxes,在Faster R-CNN中叫做锚,Anchors)。Yolo算法缺点是难以检测小目标,而且定位不准,但是这几点重要改进使得SSD在一定程度上克服这些缺点。

  • 设计理念:SSD和Yolo一样都是采用一个CNN网络来进行检测,但是却采用了多尺度的特征图,其基本架构如图3所示。下面将SSD核心设计理念总结为以下三点:

1)采用多尺度特征图用于检测 所谓多尺度采用大小不同的特征图,CNN网络一般前面的特征图比较大,后面会逐渐采用stride=2的卷积或者pool来降低特征图大小,这正如图3所示,一个比较大的特征图和一个比较小的特征图,它们都用来做检测。这样做的好处是比较大的特征图来用来检测相对较小的目标,而小的特征图负责检测大目标,如图4所示,8x8的特征图可以划分更多的单元,但是其每个单元的先验框尺度比较小。

2)采用卷积进行检测 与Yolo最后采用全连接层不同,SSD直接采用卷积对不同的特征图来进行提取检测结果。对于形状为 m* n * p 的特征图,只需要采用 3* 3 * p 这样比较小的卷积核得到检测值。 (3)设置先验框 在Yolo中,每个单元预测多个边界框,但是其都是相对这个单元本身(正方块),但是真实目标的形状是多变的,Yolo需要在训练过程中自适应目标的形状。而SSD借鉴了Faster R-CNN中anchor的理念,每个单元设置尺度或者长宽比不同的先验框,预测的边界框(bounding boxes)是以这些先验框为基准的,在一定程度上减少训练难度。一般情况下,每个单元会设置多个先验框,其尺度和长宽比存在差异,如图所示,可以看到每个单元使用了4个不同的先验框,图片中猫和狗分别采用最适合它们形状的先验框来进行训练,后面会详细讲解训练过程中的先验框匹配原则。

  • 网络解构

SD采用VGG16作为基础模型,然后在VGG16的基础上新增了卷积层来获得更多的特征图以用于检测。SSD的网络结构如图5所示。上面是SSD模型,下面是Yolo模型,可以明显看到SSD利用了多尺度的特征图做检测。模型的输入图片大小是 300 * 300。 SSD采用VGG16做基础模型,首先VGG16是在ILSVRC CLS-LOC数据集预训练。将VGG16的全连接层fc6和fc7转换成 3 * 3 卷积层 conv6和 1 * 1 卷积层conv7,同时将池化层pool5由原来的变成(猜想是不想reduce特征图大小),为了配合这种变化,采用了一种膨胀卷积神经网络,其实就是conv6采用扩展卷积或带孔卷积(Dilation Conv),其在不增加参数与模型复杂度的条件下指数级扩大卷积的视野,其使用扩张率(dilation rate)参数,来表示扩张的大小,如下图6所示,(a)是普通的 3 * 3卷积,其视野就是 3 * 3 ,(b)是扩张率为1,此时视野变成 7 * 7 ,(c)扩张率为3时,视野扩大为 15 * 15 ,但是视野的特征更稀疏了。Conv6采用 3 * 3大小但dilation rate=6的扩展卷积。 然后移除dropout层和fc8层,并新增一系列卷积层,在检测数据集上做finetuing。 从上图中来计算框的数量 得到了特征图之后,需要对特征图进行卷积得到检测结果,图7给出了一个 5 * 5 大小的特征图的检测过程。其中Priorbox是得到先验框,前面已经介绍了生成规则。检测值包含两个部分:类别置信度和边界框位置,各采用一次 3 * 3 卷积来进行完成。令 n_k 为该特征图所采用的先验框数目,那么类别置信度需要的卷积核数量为 n_k * c ,而边界框位置需要的卷积核数量为 n_k * 4 。由于每个先验框都会预测一个边界框,所以SSD300一共可以预测 38 * 38 * 4+19 * 19 * 6+10 * 10 * 6+5 * 5 * 6+3 * 3 * 4+1 * 1 * 4=8732 个边界框,这是一个相当庞大的数字,所以说SSD本质上是密集采样。

  • 样本比 尽管一个ground truth可以与多个先验框匹配,但是ground truth相对先验框还是太少了,所以负样本相对正样本会很多。为了保证正负样本尽量平衡,SSD采用了hard negative mining,就是对负样本进行抽样,抽样时按照置信度误差(预测背景的置信度越小,误差越大)进行降序排列,选取误差的较大的top-k作为训练的负样本,以保证正负样本比例接近1:3。
  • 损失函数 训练样本确定了,然后就是损失函数了。损失函数定义为位置误差(locatization loss, loc)与置信度误差(confidence loss, conf)的加权和:
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.06.21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • YOLO1
  • SSD
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档