目标检测的主流算法分为两种类型:
- two-stage:RCNN系列。通过Selective Search或者RPN产生稀疏的候选框,然后对这些候选框进行分类和回归。
-
one-stage:YOLO和SSD。不做候选区域的选择,而是均匀地在图像不同位置进行密集采样,直接对所有可能的区域进行分类与回归,整个过程只需要一步。
一、SSD特点
1.使用不同尺寸的特征图用于检测
大的特征图检测小目标,小的特征图用来检测大目标。
2.使用不同尺寸的Anchor框
每个单元设置尺寸或者长宽比不同的先验框,用来检测不同形状的物体,预测的边界框是以这些先验框为基准的,在一定程度上减小了训练难度。
3.用卷积层进行预测
SSD网络模型是全卷积网络,没有全连接层,直接使用卷积层做预测。
1)卷积层做预测:使用图像特征提取卷积层的输出(VGG16去掉最后一层全连接层),预测anchor框包含的物理类别、框的位置及大小
2)使用不同卷积层的输出预测不同尺寸的物体
4.端到端的训练
二、SSD网络结构
SSD网络模型是全卷积网络:没有全连接层,使用卷积层做预测。
- 卷积层输出的通道个数 == 每个位置anchor框的个数*(4个位置信息+所有类别个数)
- 卷积层不同通道输出的值 == 每个位置不同宽高比的预测值(包含4个位置信息+所有类别的概率)
SSD网络结构(1).png
SSD网络结构(2).PNG
三、SSD网络结构
1.SSD网络结构详解
SSD网络结构.png
- SSD是一个没有全连接层的网络
- 在VGG-16网络模型的基础上,将VGG-16的第一个卷积层FC6和第二个卷积层FC7,替换为卷积层conv6和conv7
- 去掉最后一个用于分类的全连接层FC8
- 加上了4组卷积层:conv8、conv9、conv10、conv11
2.SSD卷积层做预测
普通神经网络结构是在最后一层使用全连接层做预测,而SSD网络是使用多个卷积网络直接做预测。
SSD预测.PNG
四、SSD网络原理
1.卷积如何做预测?
通过设置卷积核的个数(即通道数),得到预测值的信息。每个卷积核都代表一个待预测的信息,比如位置信息x、y或者属于某一个类别的概率值p。
- 预测目标所属类别
卷积层做预测.PNG
- 预测目标边界框
卷积层预测多个值.PNG
预测值的数量为:
- 每一个位置需要预测(4+类别总数)个值
- 每个位置又有k个anchor框,需要预测k*(4+类别总数)个值
- 每个特征图又有m*n个像素,所以需要预测m*n*k*(4+类别总数)个值
五、SSD损失函数
SSD损失函数.png
N:与真实边界框配对的anchor的数量
x:如果一个anchor与真实边界框配对,值为1,否则为0
c:真实物体的预测值
l:预测的边界框中心位置和长、宽
g:真实边界框中心位置和长、宽
1.定位损失函数
-
边框位置的预测使用相对值
因为绝对值的范围比较大,边框的长宽可能是几十个像素,而神经网络的输入需要归一化后的值,效果才会好,所以边框的预测是使用(0~1)之间的相对值。
边框预测.png
-
Smooth L1损失函数
结合了L1的优势:随着x的值增大,梯度的增长是恒定的
结合了L2的优势:当x特别小的时候,梯度迅速减小,减少震荡
Smooth损失函数.png
2.分类损失函数
分类损失函数.png
六、anchor的框选择
1.anchor大小计算公式
假设最后选择m个特征图做预测,那么每一个特征图对应的anchor大小按照如下公式进行选择:
- anchor大小计算案例:
anchor大小计算.PNG
备注:
○ k=1时,anchor尺寸 = 原图*0.1
○ k=m时,anchor尺寸 = 原图*0.95
○ 即,anchor框的尺寸与特征图的大小有关,越靠后的特征图尺寸越小,anchor框占特征图的比例越大。这也就解释了,为什么前面大的特征图适合检测小物体,后面小的特征图适合检测大物体。
2. anchor框比例选择
anchor框的比例.png
3.anchor中心位置计算公式
anchor的中心位置.PNG
七、生成负样本
生成负样本.png
八、空洞卷积
空洞卷积.png