欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SSD架构,你不来看看么?

程序员文章站 2022-05-30 13:22:58
...

前言总结

SSD骨架网络结构

  • VGG16部分作为特征提取

SSD特征提取网络结构

  • SD300 也叫 VGG16Extractor300
  • 提取了6个特征张量

锚点框Anchor Boxes和选框预测

Anchor Box 为了实现特征图上的一个点能预测多个物体!

  • Anchor Box的基础大小有7个
  • 选框可有两个正方形,高宽2:1,1:2, 3:1 1:3 ⇒ 最多六个,最少4个

SSD骨架网络结构

  • 结构采用VGG16的conv4和conv5

图引用自 《深入浅出PyTorch 从模型到源码》
SSD架构,你不来看看么?

SSD特征提取网络结构

  1. 和VGG输入大小不一样,这次是300×300300\times300输入,VGG16是224×224224\times224输入
  2. 最后的输出特征空间大小为1×11\times1,有256张,也就是256×1×1256\times1\times1

图引用自 《深入浅出PyTorch 从模型到源码》
SSD架构,你不来看看么?

  1. VGG16Extractor300
    提取了六个特征层
conv4_3
conv7
conv8_2
conv9_2
conv10_2
conv11_2

SSD架构,你不来看看么?

锚点框Anchor Boxes和选框预测

  • 六张特征图
  • 七个Anchor Box 基础尺寸
    • 30, 60, 111, 162, 213, 265, 315
  • 特征相对于原图的步长
    • 8, 16, 32, 64, 100, 300

如何根据特征图中的点计算原图中的坐标?

假设$(i,j)$为整数,也就是格子图中的左上角坐标, 那么原图中为
(stride×(i+0.5),stride×(j+0.5))(stride\times(i+0.5),stride\times(j+0.5))

那知道了原图中对应的中心点坐标,如何知道对应原输入图像中的宽高呢?

????

如此计算,也解释了为什么有7个基础尺寸!就是为了一个大正方形!
SSD架构,你不来看看么?

我们求到了输入原始图像中,真实框的大小和坐标(x,y,w,h), 然后和神经网络预测的框直接求误差?

不是的!我们要求误差!!但是是一个变换!!!

图引用自 《深入浅出PyTorch 从模型到源码》
SSD架构,你不来看看么?

其中 (x,y,w,h)(x',y',w',h')是神经网络预测的框

物体选框和锚点框的匹配

我们知道,COCO数据集的标签框是x1,y1,w,h(x_1,y_1,w,h) 即左上角左边和宽高。
因此第一步:

  • 坐标转换成两种:
    • 第一种坐标:(xc,yc,w,h)(x_c,y_c,w,h)即中心坐标化
    • 第二种坐标:(x1,y1,x2,y2)(x_1,y_1,x_2,y_2)即左上角和右下角坐标

匹配物体框和锚点框:

一个锚点框能且只能匹配一个目标框(IOU最大者)
一个目标框却可以匹配多个锚点框,然后计算(gx,gy,gw,gh)(g_x, g_y, g_w, g_h), 并分配标签。

损失函数

F.smooth_l1_loss
避免异常值影响
Huber Estimator
它其实就是k=1情况下的Huber Estimator!!