看了论文,有几处疑惑,参考很多文章,发现大多写的差不多,现就曾经困扰的地方记录一下笔记。

  1. 明确几个概念:通过feature map cell(anchor)生成的矩形框称之为default box(ssd中为8732个);将这些default box与真实的目标框(ground truth)进行IOU匹配后得到的大于IOU阈值的矩形框称之为prior box;

    通过prior box结合难例挖掘生成网络的正样本和负样本(1:3),正样本中有多个prior box对应同一个gt,而挖掘出的负样本通常为:不包含某一类(正样本)和背景类的其他类所组成的样本,这样设计的目的是为了使负样本能在分类的时候对正样本产生足够的干扰,提升算法预测的准确率。
    目标检测SSD算法笔记

    在网络预测的时候,每一个prior box 都会输出(classNumber+1+4)个变量,其中classnumber为数据总的类别数,1是背景类(ssd算法将背景作为单独的一类),4是框的位置参数(x, y, w, h)。

    prior box(正样本)会参与回归与分类的所有训练,而正样本、负样本(正样本+负样本都是default box的子集)会参与分类的训练

    总结一下:default box的作用有:1. 预测的时候生成prior box,进而生成正负样本,提速训练;2. 在测试的时候所有的default box都将进行计算,对每一个box中计算出的类别参数(20类有20个值)若某一个值大于类别阈值则判定为该类进而进行框的位置纠正,若所有类的值均没有大于阈值,则抛弃该box;

    prior box的作用有:1.用于回归训练(由于prior box一般远小于default box的数量,复杂度大大降低);2.用于产生正负样本,正负样本用于分类训练。当然这两个训练是同时进行的,这样讲只是为了便于理解。

  2. 关于编码和解码:
    编码的作用:网络在计算loss的时候并不是直接拿预测的box的坐标同gt的坐标进行比对,而是拟合预测框与prior box的差值尽量和prior box与gt的差值一样小,通过这样的改变避免了位置的抽象不好计算的缺点,所以网络输出的是位置框的相对偏移量,编码就是将位置参数(x, y, w, h)修改为预测框相对于cell的偏移量(x’+offset, y’+offset, w’+offset, h’+offset)。
    解码的作用刚好相反,将偏移量转换为可以可视化的框。

  3. 关于卷积核(记录一下)
    对于6个特征层,采用3x3的卷积核进行卷积采样,其中,卷积核的通道数必须等于输入特征层的通道数,例如conv4_3特征是38x38x512,对这一层进行卷积采用的卷积核大小为3x3x512,对于分类来说,需要21(类别数)个这样的卷积核也就是3x3x512x21,这里的参数数量是(3x3x512+1)x21,+1为bias,对于回归来说,需要4个这样的卷积核,即:3x3x512x4.

    通常来说卷积核的通道数kxkxc,在灰度图下,这里的c确实是通道数,但是对于RGB图,我们表示卷积核的大小kxkxc,这里的c其实是卷积核的个数,其默认的通道数为3,也就是:kxkx3xc才是卷积核真正的大小
    卷积核只在相同的通道内权值共享,所以对于3通道图片,有3c个卷积核;如果上一层是38x38x192,那么卷积核的个数是192c;
    也许是通过卷积后输出的特征层有c个,也就是下一层图像的通道数是c,所以这里用c表示卷积的通道吧。