当前位置: 首页 > news >正文

Single Shot MultiBox Detector(SSD)

文章目录

  • 摘要
  • Abstract
  • 1. 引言
  • 2. 框架
    • 2.1 网络结构
    • 2.2 损失函数
    • 2.3 训练细节
  • 3. 创新点和不足
    • 3.1 创新点
    • 3.2 不足
  • 参考
  • 总结

摘要

  与Faster R-CNN相比,SSD是一个真正的单阶段多目标检测模型,同时也是一个全卷积网络,不仅检测准确率高,而且检测速度快。SSD显著的优点是使用卷积从不同尺寸的特征图上预测不同尺度、横纵比锚点区域的类别概率分布和偏移量,如此SSD能利用低层特征图较小的感受野和高层特征图较大的感受野来分别检测小物体和大物体。此外,SSD也消除了对候选区域的缩放。尽管SSD有这些优点,但是它也有一个显著的问题——相较于大物体,小物体的检测正确率低。SSD提出了一个解决办法,把图片缩放成 512 × 512 512\times512 512×512再进行检测,如此能提升小物体的检测准确率,但是仍有改进的空间。

Abstract

  Compared to Faster R-CNN, SSD is a true single-stage multi-object detection model and also a fully convolutional network, which not only achieves high detection accuracy but also fast detection speed. A significant advantage of SSD is its use of convolution to predict the class probability distribution and offset of anchor boxes with different scales and aspect ratios from feature maps of different sizes. This allows SSD to detect small objects using the smaller receptive fields of lower-level feature maps and large objects using the larger receptive fields of higher-level feature maps. Moreover, SSD eliminates the need for scaling candidate regions. Despite these advantages, SSD has a significant issue—its detection accuracy for small objects is lower than for large objects. SSD proposed a solution by resizing images to 512 × 512 512 \times 512 512×512 for detection, which improves the detection accuracy for small objects, but there is still room for improvement.

1. 引言

  以前,先进的目标检测系统都是下面方法的变种:假设边界框、重采样每个框中的像素或特征和应用高质量的分类器。自从选择性搜索和Faster R-CNN在目标检测数据集上取得领先的效果以来,这个管道一直盛行于目标检测。尽管检测正确率很高,但是这些方法的计算量对于嵌入式系统来说还是太大了。即使在高端硬件上,这些方法对于实时检测来说还是太慢了。为了解决上述的问题,研究人员提出了第一个基于单个神经网络模型的物体检测器——SSD。它不需要对边界框内的像素或特征进行重采样,而且达到了和以前方法一样的检测准确率。

2. 框架

2.1 网络结构

  下图是SSD300的结构。
在这里插入图片描述
  

编号类型输入尺寸(H,W,C)卷积核/池化核输出尺寸(H,W,C)激活函数
输入层- 300 × 300 × 3 300\times300\times3 300×300×3- 300 × 300 × 3 300\times300\times3 300×300×3-
C1卷积层 300 × 300 × 3 300\times300\times3 300×300×364个 3 × 3 3\times3 3×3卷积核,步长和填充都为1 300 × 300 × 64 300\times300\times64 300×300×64ReLU
C2卷积层 300 × 300 × 64 300\times300\times64 300×300×6464个 3 × 3 3\times3 3×3卷积核,步长和填充都为1 300 × 300 × 64 300\times300\times64 300×300×64ReLU
S3池化层 300 × 300 × 64 300\times300\times64 300×300×64 2 × 2 2\times2 2×2最大池化核,步长为2 150 × 150 × 64 150\times150\times64 150×150×64-
C4卷积层 150 × 150 × 64 150\times150\times64 150×150×64128个 3 × 3 3\times3 3×3卷积核,步长和填充都为1 150 × 150 × 128 150\times150\times128 150×150×128ReLU
C5卷积层 150 × 150 × 128 150\times150\times128 150×150×128128个 3 × 3 3\times3 3×3卷积核,步长和填充都为1 150 × 150 × 128 150\times150\times128 150×150×128ReLU
S6池化层 150 × 150 × 128 150\times150\times128 150×150×128 2 × 2 2\times2 2×2最大池化核,步长为2 75 × 75 × 128 75\times75\times128 75×75×128-
C7卷积层 75 × 75 × 128 75\times75\times128 75×75×128256个 3 × 3 3\times3 3×3卷积核,步长和填充都为1 75 × 75 × 256 75\times75\times256 75×75×256ReLU
C8卷积层 75 × 75 × 256 75\times75\times256 75×75×256256个 3 × 3 3\times3 3×3卷积核,步长和填充都为1 75 × 75 × 256 75\times75\times256 75×75×256ReLU
C9卷积层 75 × 75 × 256 75\times75\times256 75×75×256256个 3 × 3 3\times3 3×3卷积核,步长和填充都为1 75 × 75 × 256 75\times75\times256 75×75×256ReLU
S10池化层 75 × 75 × 256 75\times75\times256 75×75×256 2 × 2 2\times2 2×2最大池化核,步长为2,设置向上取整 38 × 38 × 256 38\times38\times256 38×38×256-
C11卷积层 38 × 38 × 256 38\times38\times256 38×38×256512个 3 × 3 3\times3 3×3卷积核,步长和填充都为1 38 × 38 × 512 38\times38\times512 38×38×512ReLU
C12卷积层 38 × 38 × 512 38\times38\times512 38×38×512512个 3 × 3 3\times3 3×3卷积核,步长和填充都为1 38 × 38 × 512 38\times38\times512 38×38×512ReLU
C13卷积层 38 × 38 × 512 38\times38\times512 38×38×512512个 3 × 3 3\times3 3×3卷积核,步长和填充都为1 38 × 38 × 512 38\times38\times512 38×38×512ReLU
S14池化层 38 × 38 × 512 38\times38\times512 38×38×512 2 × 2 2\times2 2×2最大池化核,步长为2 19 × 19 × 512 19\times19\times512 19×19×512-
C15卷积层 19 × 19 × 512 19\times19\times512 19×19×512512个 3 × 3 3\times3 3×3卷积核,步长和填充都为1 19 × 19 × 512 19\times19\times512 19×19×512ReLU
C16卷积层 19 × 19 × 512 19\times19\times512 19×19×512512个 3 × 3 3\times3 3×3卷积核,步长和填充都为1 19 × 19 × 512 19\times19\times512 19×19×512ReLU
C17卷积层 19 × 19 × 512 19\times19\times512 19×19×512512个 3 × 3 3\times3 3×3卷积核,步长和填充都为1 19 × 19 × 512 19\times19\times512 19×19×512ReLU
S18池化层 19 × 19 × 512 19\times19\times512 19×19×512 3 × 3 3\times3 3×3最大池化,步长为1,填充为1 19 × 19 × 512 19\times19\times512 19×19×512-
C19卷积层 19 × 19 × 512 19\times19\times512 19×19×5121024个 3 × 3 3\times3 3×3卷积核,步长和填充都为1 19 × 19 × 1024 19\times19\times1024 19×19×1024ReLU
C20卷积层 19 × 19 × 1024 19\times19\times1024 19×19×10241024个 1 × 1 1\times1 1×1卷积核,步长为1 19 × 19 × 1024 19\times19\times1024 19×19×1024ReLU
C21卷积层 19 × 19 × 1024 19\times19\times1024 19×19×1024256个 1 × 1 1\times1 1×1卷积核,步长为1 19 × 19 × 256 19\times19\times256 19×19×256ReLU
C22卷积层 19 × 19 × 256 19\times19\times256 19×19×256512个 3 × 3 3\times3 3×3卷积核,步长为2,填充为1 10 × 10 × 512 10\times10\times512 10×10×512ReLU
C23卷积层 10 × 10 × 512 10\times10\times512 10×10×512128个 1 × 1 1\times1 1×1卷积核,步长为1 10 × 10 × 128 10\times10\times128 10×10×128ReLU
C24卷积层 10 × 10 × 128 10\times10\times128 10×10×128256个 3 × 3 3\times3 3×3卷积核,步长为2,填充为1 5 × 5 × 256 5\times5\times256 5×5×256ReLU
C25卷积层 5 × 5 × 256 5\times5\times256 5×5×256128个 1 × 1 1\times1 1×1卷积核,步长为1 5 × 5 × 128 5\times5\times128 5×5×128ReLU
C26卷积层 5 × 5 × 128 5\times5\times128 5×5×128256个 3 × 3 3\times3 3×3卷积核,步长为1 3 × 3 × 256 3\times3\times256 3×3×256ReLU
C27卷积层 3 × 3 × 256 3\times3\times256 3×3×256128个 1 × 1 1\times1 1×1卷积核,步长为1 3 × 3 × 128 3\times3\times128 3×3×128ReLU
C28卷积层 3 × 3 × 128 3\times3\times128 3×3×128256个 3 × 3 3\times3 3×3卷积核,步长为1 1 × 1 × 256 1\times1\times256 1×1×256ReLU

  SSD在C13、C20、C22、C24、C26、C28应用卷积层来获取锚点区域的类别概率分布和偏移量。C20、C22、C24、C26、C28比C13多经历了两次池化,从而导致C13特征图中元素值的范围与其他层不同,因此C13在用卷积层计算类别概率分布和偏移量之前需要进行 L 2 L_2 L2正则化:在每个颜色通道上计算 L 2 L_2 L2范数,然后每个颜色通道上的元素除以该通道上的 L 2 L^2 L2范数,最后乘以一个初始值为20、可学习的缩放系数。
  假设数据集中目标类别的个数为 c c c,C13在上述的 L 2 L_2 L2正则化后再应用一个卷积核大小为 3 × 3 3\times3 3×3、过滤器个数为 4 × ( c + 4 ) 4\times(c+4) 4×(c+4)的卷积层来获取概率分布和偏移量;C20、C22和C24分别应用一个卷积核大小为 3 × 3 3\times3 3×3、过滤器个数为 6 × ( c + 4 ) 6\times(c+4) 6×(c+4)的卷积层来获取概率分布和偏移量;C26应用一个卷积核大小为 3 × 3 3\times3 3×3、过滤器个数为 4 × ( c + 4 ) 4\times(c+4) 4×(c+4)的卷积层来获取概率分布和偏移量;C28应用一个卷积核大小为 1 × 1 1\times1 1×1、过滤器个数为 4 × ( c + 4 ) 4\times(c+4) 4×(c+4)的卷积层来获取概率分布和偏移量。
  SSD中用来计算概率分布和偏移量的特征图拥有不同的尺寸,因此SSD设计了锚点区域的尺度,使其与特征图的实际尺寸无关。假设用来计算概率分布和偏移量的特征图有 m = 6 m=6 m=6个,每个特征图上锚点区域的尺度计算公式为:
s k = s m i n + s m a x − s m i n m − 1 ( k − 1 ) , k ∈ [ 1 , m ] . s_k=s_{min}+\frac{s_{max}-s_{min}}{m-1}(k-1), k\in [1, m]. sk=smin+m1smaxsmin(k1),k[1,m].
其中 s m i n = 0.2 s_{min}=0.2 smin=0.2 s m a x = 0.9 s_{max}=0.9 smax=0.9。SSD使用了5种不同的横纵比 a r ∈ { 1 , 2 , 3 , 1 2 , 1 3 } a_r\in\{1, 2, 3, \frac{1}{2}, \frac{1}{3}\} ar{1,2,3,21,31},锚点区域的宽度和高度的计算公式为:
w k a = s k a r , h k a = s k a r . w_k^a=s_k\sqrt{a_r}, h_k^a=\frac{s_k}{\sqrt{a_r}}. wka=skar ,hka=ar sk.
此外,当横纵比为1时,额外增加了一种尺度 s k ′ = s k s k + 1 s_k'=\sqrt{s_ks_{k+1}} sk=sksk+1 。锚点区域的中心位置的公式为:
x = i + 0.5 ∣ f k ∣ , y = j + 0.5 ∣ f k ∣ . x=\frac{i+0.5}{|f_k|}, y=\frac{j+0.5}{|f_k|}. x=fki+0.5,y=fkj+0.5.
其中 ∣ f k ∣ |f_k| fk是第 k k k个特征图的边长, i , j ∈ [ 0 , ∣ f k ∣ ] i,j\in[0, |f_k|] i,j[0,fk]

2.2 损失函数

  锚点区域的四元组为锚点区域中心坐标、宽和高。如果锚点区域与真实区域的IOU大于0.5,则锚点区域为该真实区域的正例,否则为负例。假设 x i j p = { 1 , 0 } x_{ij}^p=\{1, 0\} xijp={1,0}为第 i i i个锚点区域与第 j j j个类别为 p p p的真实区域的匹配程度,则SSD的损失函数为:
L ( x , c , l , g ) = 1 N ( L c o n f ( x , c ) + α L l o c ( x , l , g ) ) . L(x, c, l, g)=\frac{1}{N}(L_{conf}(x, c)+\alpha L_{loc}(x, l, g)). L(x,c,l,g)=N1(Lconf(x,c)+αLloc(x,l,g)).
其中 N N N是匹配的锚点区域的个数(如果 N = 0 N=0 N=0,则损失为0)。
  定位损失为 L l o c ( x , l , g ) = ∑ i ∈ P o s N ∑ m ∈ { c x , c y , w , h } x i j k s m o o t h L 1 ( l i m − g ^ j m ) L_{loc}(x, l, g)=\displaystyle\sum_{i\in Pos}^N \sum_{m\in\{cx, cy, w, h\}}x_{ij}^k smooth_{L_1}(l_i^m-\hat{g}_j^m) Lloc(x,l,g)=iPosNm{cx,cy,w,h}xijksmoothL1(limg^jm),其中 g ^ j c x = g j c x − d i c x d i w \hat{g}_j^{cx}=\displaystyle\frac{g_j^{cx}-d_i^{cx}}{d_i^w} g^jcx=diwgjcxdicx g ^ j c y = g j c y − d i c y d i h \hat{g}_j^{cy}=\displaystyle\frac{g_j^{cy}-d_i^{cy}}{d_i^h} g^jcy=dihgjcydicy g ^ j w = l o g ( g j w d i w ) \hat{g}_j^w=log(\displaystyle\frac{g_j^w}{d_i^w}) g^jw=log(diwgjw) g ^ j h = l o g ( g j h d i h ) \hat{g}_j^h=log(\displaystyle\frac{g_j^h}{d_i^h}) g^jh=log(dihgjh)。置信损失为 L c o n f ( x , c ) = − ∑ i ∈ P o s N x i j p l o g ( c ^ i p ) − ∑ i ∈ N e g l o g ( c ^ i 0 ) L_{conf}(x, c)=\displaystyle-\sum_{i\in Pos}^N x_{ij}^plog(\hat{c}_i^p)-\sum_{i\in Neg}log(\hat{c}_i^0) Lconf(x,c)=iPosNxijplog(c^ip)iNeglog(c^i0),其中 c ^ i p = e c i p ∑ p e c i p \hat{c}_i^p=\displaystyle\frac{e^{c_i^p}}{\displaystyle\sum_{p}e^{c_i^p}} c^ip=pecipecip

2.3 训练细节

  在训练过程中,先根据上面提及的置信损失对所有类别是背景的锚点区域进行从高到低的排序,然后从中挑选损失最高的锚点区域,使得负例与正例的样本个数之比为 3 : 1 3:1 3:1。每次训练一轮后重复执行上述操作。
  数据增强的操作:1. 使用完整的训练图片;2. 使用与所有物体的最小IOU为0.1、0.3、0.5、0.7或0.9的区域;3. 随机使用一个区域。上面提到的第2种和第3种区域的尺度为原训练图像的0.1倍到1倍,并且横纵比为 1 : 2 1:2 1:2 2 : 1 2:1 2:1。所有采样后的图片都被重新缩放到固定尺寸,接着以0.5的概率进行水平翻转,最后在图像的对比度、亮度、颜色进行处理。

3. 创新点和不足

3.1 创新点

  与基于R-CNN的目标检测模型相比,SSD是一个单阶段检测所有物体类别的模型,也消除了对候选区域的缩放。SSD最显著的优点是使用卷积从不同尺寸的特征图上预测不同尺度、横纵比锚点区域的类别概率分布和偏移量,如此SSD能利用低层特征图较小的感受野和高层特征图较大的感受野来分别检测小物体和大物体。此外,SSD也是一个全卷积网络,能在运行速度快的同时保证极高的检测准确率。

3.2 不足

  SSD在检测小物体时的准确率小于检测大物体时的准确率。尽管SSD提出了一个解决办法——把图片的输入尺寸缩放成 512 × 512 512\times512 512×512,但是在小物体检测上仍然具有改进的空间。

参考

Wei Liu, Dragomir Anguelov, Dumitru Erhan, and et al. SSD: Single Shot MultiBox Detector.

总结

  SSD以VGG16的卷积部分为基础网络,修改了VGG16卷积部分中最后一层池化层,并在后面添加了几层卷积层,最后在不同特征图上进行卷积来获取锚点区域的类别概率分布和偏移量。SD最显著的优点是使用卷积从不同尺寸的特征图上预测不同尺度、横纵比锚点区域的类别概率分布和偏移量,如此SSD能利用低层特征图较小的感受野和高层特征图较大的感受野来分别检测小物体和大物体。此外,SSD也是一个全卷积网络,能在运行速度快的同时保证极高的检测准确率。

http://www.lryc.cn/news/515476.html

相关文章:

  • kafka生产者专题(原理+拦截器+序列化+分区+数据可靠+数据去重+事务)
  • 【React+TypeScript+DeepSeek】穿越时空对话机
  • 公共数据授权运营系统建设手册(附下载)
  • 基于HTML和CSS的旅游小程序
  • maven之插件调试
  • SQL Sever 数据库损坏,只有.mdf文件,如何恢复?
  • 【AWS SDK PHP】This operation requests `sigv4a` auth schemes 问题处理
  • primevue的<Menu>组件
  • 利用Deeplearning4j进行 图像识别
  • 练习题:37
  • Unity热更文件比较工具类
  • 【hustoj注意事项】函数返回值问题
  • 实现一个通用的树形结构构建工具
  • 数势科技:解锁数据分析 Agent 的智能密码(14/30)
  • 机器学习之过采样和下采样调整不均衡样本的逻辑回归模型
  • 解决 ssh connect to host github.com port 22 Connection timed out
  • mybatis/mybatis-plus中mysql报错
  • 在ros2 jazzy和gazebo harmonic下的建图导航(cartographer和navigation)实现(基本)
  • 《Rust权威指南》学习笔记(五)
  • GitHub的简单操作
  • 「Mac畅玩鸿蒙与硬件54」UI互动应用篇31 - 滑动解锁屏幕功能
  • SMMU软件指南之系统架构考虑
  • 使用高云小蜜蜂GW1N-2实现MIPI到LVDS(DVP)转换案例分享
  • 「C++笔记」unordered_map:哈希化的无序映射函数(键值对)
  • Linux 安装jdk
  • asp.net core 发布到iis后,一直500.19,IIS设置没问题,安装了sdk,文件夹权限都有,还是报错
  • 【Go】运行自己的第一个Go程序
  • qt qss文件的使用
  • 【管道——二分+区间合并】
  • 宽带、光猫、路由器、WiFi、光纤之间的关系