首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >目标检测系列之三(SSD)

目标检测系列之三(SSD)

作者头像
Minerva
修改2020-05-31 13:10:00
6840
修改2020-05-31 13:10:00
举报

目标检测系列之三(SSD)

论文题目是《Single Shot MultiBox Detector》 论文地址:ttps://arxiv.org/abs/1512.02325 SSD是一阶段One Stage方法,SSD算法提取了不同尺度的特征图,既可以检测大目标也可以检测小目标,采用不同大小和长宽比的检测框anchors。 算法步骤: 1) 将图像输入预训练好的分类网络(基于VGG16-Atrous)得到不同大小的特征映射 2) 分别提取Conv4_3、Conv7、Conv8_2、Conv9_2、Conv10_2、Conv11_2层的特征映射feature map,在每个特征映射的每个点构造6个不同大小尺度的bounding box,进行检测和分类来生成一些列bounding box 3) 采用NMS处理不同特征映射的bounding box,删掉部分重叠或者不正确的bounding box,得到最终的检测框。

内容目录

1 Backbone2 Prior box先验框3 损失函数

1 Backbone

SSD基于VGG16(在前面的文章介绍过,深度学习系列(二)卷积神经网络模型(从LeNet-5到Inception V4)的卷积神经网络,并对其进行改动 1) 将VGG16网络的fc6改为3x3卷积,fc7改为1x1卷积,池化层pool5由原来的步长为2的2x2改为步长为1的3x3 2) 引入空洞卷积,将conv6改为空洞卷积层(在前面的文章介绍过,深度学习系列(一)常见的卷积类型),dilation=6,不改变特征图大小但获得更大的感受野 3) 在网络后面增加8个卷积层

SSD还用到了数据增强方法,如水平翻转(randomly horizontal flip)、颜色扭曲(color distortion)、随机扩张(random expansion)、随机patch采样(randomly sample patch)

2 Prior box先验框

SSD借鉴了Faster R-CNN中的anchor概念,给每个feature map的每个点设置尺度和长宽比不同的先验框,真实目标的形状是多变的,在训练过程中需要选择更合适的先验框来学习。

SSD为每个检测层都预定义了不同大小的先验框(Prior boxes), Conv4_3、Conv10_2和Conv11_2分别有4种先验框,而Conv7、Conv8_2和Conv9_2分别有6种先验框,即对应于特征图上的每个像素,都会生成K(prior box种类)个prior box。 网络6个检测层总共预测的边界框数目为8732(38 * 38 * 4 + 19 * 19 * 6 + 10 * 10 * 6 + 5 * 5 * 6 + 3 * 3 * 4 + 1 * 1 * 4)。 边界框包含两个部分,一部分是每个类别的置信度,如果有k类的话,SSD会输出k+1个置信度值,第一个置信度值代表边界框是否包含目标,置信度最高的类别就是该边界框的所属类别。另一部分是边界框的位置信息(x,y,w,h)代表边界框的中心坐标和宽高信息,注意这里在实际预测时是边界框相对于先验框的偏移量(offset),如果先验框位置用

表示,其对应边界框用

表示,那么边界框的预测值l其实是b相对于d的转换值:

先验框的匹配过程 在前面会生成大量的先验框,在网络训练过程中需要给每个先验框寻找所对应的真实框,这里需要对先验框进行匹配。 对于每个真实框计算与其IOU最大的先验框,对于剩余的先验框,保留与其IOU大于给定阈值(比如0.5)的一部分,这样每个真实框会匹配很多先验框,但每个先验框只能匹配一个真实框,这样仍然会产生类别不均衡问题,背景先验框的数量远大于目标先验框,因此论文中还使用了Hard negative mining的策略,按照先验框的类别置信度误差从高到低排序,只选择前top_k个先验框作为训练的背景先验框(背景先验框的采样),最终正负样本的比例约1:3。

3 损失函数

SSD的损失函数为多任务损失函数,将分类损失和回归定位损失整合在一起

这里的N为匹配的先验框数目,alpha为权重平衡项,用来平衡分类和定位损失。定位损失和Faster R-CNN一样采用Smooth L1损失:

这里l为预测坐标,d为先验框,g为真实框。分类损失采用多分类交叉熵损失:

参考: https://blog.csdn.net/xiaohu2022/article/details/79833786 https://segmentfault.com/a/1190000021845972

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python编程和深度学习 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 内容目录
  • 1 Backbone
  • 2 Prior box先验框
  • 3 损失函数
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档