Pytorch 目标检测 Tutorial



SSD

  1. 基本卷积(Base Convolutions)
    由图像分类的架构衍生,用于提供low-level 特征图

  2. 辅助卷积(Auxiliary convolutions)
    在基本网络的top上增加的一部分网络,用于提供higher-level的特征图

  3. 预测卷积(Prediction convolutions)
    用于在这些特征图中locate并identify 对象(objects)

一、Base Convolutions

使用VGG-16架构作为他们的base网络,它的原始形式很简单
VGG16
我们要在这个预训练的网络上做一些改动来应用在我们目标检测的任务上,该网络的一些参数:

  • 输入图像大小为300*300
  • 第3个池化层之后是38*38大小的。在特征图维度减半的过程中,如果特征图维度是奇数,使用ceiling函数而不是floor。在第二个池化层之后特征图变为75*75,因此第三个池化层输出为38*38的特征图。
  • 第5个池化层我们把原来"kernel=2*2,stride=2"变为"kernel=3*3,stride=1"。这样特征图的尺寸就不会再减半了。
  • 我们不需要全连接,因此去掉fc8,但是吧fc6和fc7变为卷积层conv6和conv7。
    (全连接等价于kernel=1*1的卷积)

在具有 I 个输入通道的大小为 H、W 的图像上,输出大小为 N 的全连接层相当于内核大小等于图像大小 H、W 和 N 输出通道的卷积层。
前提是全连接网络的参数N,HWI与卷积层的参数N,H,W,I相同。
fcconv1
fcconv2

fcconv3
fcconv4
fc6->conv6:输入为7*7*512,输出为4096,全连接的参数为4096,7*7*512.其等价的卷积为:输入通道为512,一个77的核,4096个输出通道,卷积参数为4096,7,7,512。
fc7->conv7:输入7为4096,输出也为4096个参数,全连接的参数为4096,4096.其等价的卷积为:输入通道为1*1*4096,一个1
1的核,4096个输出通道,卷积参数为4096,1,1,4096。

我们可以看到,conv6 有 4096 个过滤器,每个过滤器的维度为 7、7、512,而 conv7 有 4096 个过滤器,每个过滤器的维度为 1、1、4096。
这些过滤器数量众多、规模庞大,而且计算成本高昂。 为了解决这个问题,作者选择通过对转换后的卷积层的参数进行二次采样来减少每个滤波器的数量和大小。

conv6 将使用 1024 个滤波器,每个滤波器的尺寸为 3, 3, 512。因此,参数从 4096, 7, 7, 512 到 1024, 3, 3, 512 进行二次采样。
conv7 将使用 1024 个滤波器,每个滤波器的维度为 1, 1, 1024。因此,参数从 4096, 1, 1, 4096 到 1024, 1, 1, 1024 进行二次采样。

由于 conv6 的内核通过仅保留每第 3 个值而从 7, 7 抽取为 3, 3,因此内核中现在存在漏洞。因此,我们需要使内核****dilated or atrous
修改后的网络为
在这里插入图片描述

二、Auxiliary Convlutions

在这里插入图片描述
我们引入四个卷积块,每个卷积块有两层。虽然尺寸减小是通过基础网络中的池化实现的,但在这里,每第二层的步长为 2,从而实现了尺寸减小。
在我们继续预测卷积之前,我们必须首先了解我们正在预测什么。当然,它是物体和它们的位置,但以什么形式呢?
##Priors
Priors是预先计算的固定框,它们共同代表了整个可能和近似框预测。

  • 它们将应用于各种low-level 和high-level 特征图
    即来自 conv4_3、conv7、conv8_2、conv9_2、conv10_2 和 conv11_2 的数据。这些与之前图中所示的特征图相同。
  • 如果Priors的scale为 s,则其面积等于边长为 s 的正方形的面积。
    最大的特征图 conv4_3 的先验尺度为 0.1,即图像尺寸的 10%,而其余特征图的先验尺度从 0.2 线性增加到 0.9。 正如您所看到的,较大的特征图具有较小尺度的先验,因此非常适合检测较小的物体。
  • 在特征图上的每个位置,都会有各种长宽比(aspect ratios)的Priors。
    所有特征图的Priors比例为 1:1、2:1、1:2。 conv7、conv8_2 和 conv9_2 的中间特征图也将具有比率为 3:1、1:3 的Priors。 此外,所有特征图都会有一个额外的Priors,其长宽比为 1:1,其比例为当前特征图scale和后续特征图scale的几何平均值。
    具体如下:
    在这里插入图片描述
    SSD300有8732个Priors
    我们根据先验的scale和aspect ratios来定义先验。
    w ⋅ h = s 2 w \cdot h = s^2 wh=s2
    w h = a \frac{w}{h} = a hw=a
    解方程可以求得w和h
    w = s ⋅ a w = s \cdot {\sqrt{a}} w=sa
    h = s a h = \frac{s}{\sqrt{a}} h=a s
    conv9_2的先验框如下图所示:
    在这里插入图片描述
    在这里插入图片描述

考虑到每个先验都经过调整以获得更精确的预测,这四个偏移量(g_c_x、g_c_y、g_w、g_h)是我们对边界框坐标进行回归的形式。在这里插入图片描述

三、Prediction convlutions

在前面,我们为不同尺度和粒度的六个特征图指定并定义了Priors,即。来自 conv4_3、conv7、conv8_2、conv9_2、conv10_2 和 conv11_2 的数据。
然后,对于每个特征图上每个位置的每个先验,我们想要预测 –

  1. bounding box的偏移(g_c_x, g_c_y, g_w, g_h)
  2. bounding box的一组 n_classes scores,其中 n_classes 表示对象类型的总数(包括background class)。

为了以最简单的方式做到这一点,我们需要为每个特征图使用两个卷积层 -
1.localization prediction卷积层: kernel=3*3 ,在每个位置(即填充和步幅为 1)进行评估,对于该位置处的每个prior存在 4 个filters,先验的 4 个filters计算从该prior预测的边界框的四个编码偏移量(g_c_x、g_c_y、g_w、g_h)。
3. class prediction卷积层,kernel=3*3 ,在每个位置(即填充和步长为 1)进行评估,并针对该位置处的每个prior使用 n_classes 个filters。prior的 n_classes filters 计算该prior的一组 n_classes scores。

在这里插入图片描述

以conv9_2为例,我们看一下卷积的输出:
在这里插入图片描述
在Location Predictions里面选择一个点并展开,如下图所示:
在这里插入图片描述
Location Predictions的每个位置处的通道值表示相对于该位置处的Priors的偏移offsets编码.
在这里插入图片描述

在这里插入图片描述
我们之前计算过,我们的模型总共定义了 8732 个Priors。因此,将有 8732 个encoded-offset形式的预测框和 8732 组class scores
这是预测阶段的最终输出。

四、Multibox loss

我们的总损失必须是两种类型预测损失bounding box localizations 和 class scores的总和。

  1. 计算8732个Priors与N个ground truth 的交并比, 得到一个Tensor,大小为(8732,N)
  2. 如果交并比小于0.5,则认为这个prior不包括object, 将其称为negative match, 大多数的priors应该都是negative的。
  3. 如果交并比大于0.5,则认为这个prior包含object,我们就将其称为positive match。
  4. 我们把8732个priors和ground truth进行了match, 事实上,是将8732个prediction match了ground truth
    把上面的过程举个例子就是下面的表格:
    match
    现在,每一个 Prior 都有一个 match ,同时,每个 prediction 都有了一个 positive 或 negative 的 match。positive match 的 Prior 对应的 ground truth 的坐标作为 targets for localization,negative match没有target 坐标。positive match 的 Prior 对应 ground truth 类别作为 targets for class prediction,negative match 的targets for class prediction 为background。

1. Localization loss

negative matches 没有ground truth 坐标,这很好理解,我们给没有object的空白区域画框是没有意义的。 localization loss 用来表示我们positively matched 的预测框和ground truth 的坐标有多相似。
我们预测的定位框输出是偏移的形式:(g_c_x, g_c_y, g_w, g_h),因此在计算损失loss之前我们要相应的对ground truth 进行编码.
采用 Smooth L1 损失函数:
localiztion loss

2. Cofidence loss

我们只用这些模型最难预测出这里没有object的 negative predicions,数量为N_hn, 通常是positive prediction数量的固定倍数。这里选择N_hn=3N_p。

cofidence loss

3. Total loss

L = L c o n f + α ⋅ L l o c L = L_{conf}+\alpha \cdot L_{loc} L=Lconf+αLloc
通常 α \alpha α是一个可学习的参数,SSD中直接令 α = 1 \alpha = 1 α=1

五、Processing predictions

  1. 我们要把8732个预测boxes从偏移的形式 (g_c_x, g_c_y, g_w, g_h) 转换成 真正的坐标(c_x,c_y, w, h)
  2. 对于每一个不是background的预测
    • 提取8732个boxes的类别预测分数scores
    • 消除没有达到阈值要求的boxes
    • 剩下的就是某一类物体的候选框
  1. 对于冗余候选框,采用Non-Maximum Suppression (NMS) 进行选择。
    • 根据可能性的大小将每个类别的候选人排列起来。
    • 绘制给定类别中所有候选者之间的交并比(相似度),我们可以评估每一对,如果发现明显重叠,则仅保留更有可能的候选者(score 最高的那个)。如果交并比大于0.5,则选择score最高的那个,其余的都消除掉。如下图所示;
      -重复此操作,直到遍历完整个候选序列。
      NMS
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值