深度学习之目标检测网络学习总结(from RCNN to YOLO V3)(下)文末附论文链接

深度学习之目标检测网络学习总结(from RCNN to YOLO V3)(下)文末附论文链接

本部分介绍SSD,DSSD,Focal Loss,由于知乎篇幅受限,没法写那么长,上一篇见

方宇:深度学习之目标检测网络学习总结(from RCNN to YOLO V3)(上)zhuanlan.zhihu.com图标


4.SSD

SSD是ECCV2016年的一篇文章,这篇文章也是one stage方法的,当时这篇文章精度比YOLO更高,但是速度比两阶段的都要快,所以这篇文章引起了极大的关注。作者在SSD里面指定了不同的长宽比,面积(在YOLO里面是没有的,YOLOV2里面通过聚类产生了一些框的尺寸)同时作者做了多尺度的预测(其实也就是对不同大小的特征图做检测),其实这些思路在之前都已经介绍过了。

SSD300用的是VGG作为基础架构,在降采样的时候,每一层特征图都会做预测。SSD的设计创新点如下:

1.用多尺度的特征图来检测,这样做可以对小目标物体有一定的改善,在每个尺度都会做出预测。

2.去掉了全连接层,直接用3*3的卷积去对特征图山的每一个点产生k个预测框,每个框会有4个坐标输出(这里输出的是预先设定的bounding box与真实的bounding box的偏移量)以及21个类别输出,这样每个点有k*(21+4)个输出,所以卷积的滤波器数目p=k*(21+4)。

3.设置先验边框。由不同的scale 和 ratio 生成,k 个 default boxes,特征图的每个点都会产生k个。现在假定输入为w*h,给定n个不同的大小s,可以获得ws*hs大小的框,m个不同的比例,可以获得 w\sqrt{r}*h/\sqrt{r} 大小的框。不同层的感知野不一样,所以对于不同层上的尺寸选择也不一样,作者在论文中给出了一个选择公式:

这里的 s_{min}=0.2,s_{max}=0.9,m=5, 这里m表示特征图的个数,但是由于conv4_3是单独设置的,所以取5。那么我们可以计算出每一层的尺度分别为0.2,0.37,0.54,0.71,0.88,再分别乘以300,就可以得到每一层的具体预测尺寸为:30(conv4_3),60,111,162,213,264。作者在论文中每个尺度设定了一些比例,分别是{1,2,3,1/2,1/3}作者在这里额外增加了一个框的尺寸s_k^'=√(s_k s_(k+1) ),但是最后一层没有下一层了,所以最后一层在这个尺度上的设置为315。每个box的中心选择这里是在每个点的坐标上偏移了0.5, (i+\frac{0.5}{|f_k |} ,(j+\frac{0.5}{|f_k |} ) ,其中 f_k 表示k个特征图的大小 i,j∈[0,f_k) .每个点会生成6个box,在多个层上面做预测,这样看出SSD其实是一个密集采样的算法。

4.匹配策略:这里和faster RCNN类似。每个ground truth先与其IOU值最大的框匹配,然后只要预测框与一个ground truth的IOU值大于0.5,都进行匹配。

5.损失函数:对于多任务而言,损失函数永远是一个不可忽视的问题,两个任务,所以还是分成两个部分,分类损失函数和定位损失函数。

这里和Faster RCNN的损失函数设置一样的,softmax损失和L1平滑损失。

6负难例挖掘:先将每一个物体位置上对应 predictions(default boxes)是背景的 boxes 进行排序,按照 boxes 的 confidence的大小。 选择最高的几个,保证最后正负比例在 1:3。(参考:小白将:目标检测|SSD原理与实现

5.DSSD

这是对SSD的一个改进,SSD的作者也是本文的作者之一。这篇文章主要是为了解决多尺度融合的问题,原先的SSD,只是在不同的特征图上面进行了预测,但是没有充分考虑到上下文的信息,FPN里面也提到过。这篇论文主要有两个贡献:1.使用了ResNet替代了VGG,提升了特征的提取能力,同时引入预测模块,提升了准确度;2.引入转置卷积,将上下信息融合到一起,提升了精度。

作者将首先将VGG直接替换为ResNet,发现精度反而还下降了一点点,从77.5降到了76.4。这表面如果只是简单更换网络是不能提升精度的,作者根据论文《A unified multiscale deep convolutional neural network for fast object detection》中提到的改善任务的每个子网络,有助于提升精度,于是作者在每个预测之间,加了一个残差模块。

上图是作者提出的几种预测模块,每个模块的测试结果如下所示:

为了更好的融合上下文信息,作者这里采取了转置卷积操作来获得一个与之前特征图对应的高分辨率的特征图,形成了编码-解码的网络结构。转置卷积这个不是本文提出来的而是在分割网络里面用的,最早是在ZFNet里面提出来的,要想理解转置卷积的过程,需要了解卷积在底层是如何实现的。因为在底层实现的时候,通常会把卷积转化成SGEMM进行加速,这就需要对输入图片进行滑动窗展开。(注意:caffe里面不是这样实现的,caffe的实现不是将整张图转换为一个向量)

对于矩阵运算y=Cx,首先将图片展开为向量的形式,这样就有输入图片的大小为16*1,为了加速运算,这里会将卷积核根据滑动窗进行展开,对于输出的特征图(0,0)上面的点,只是原图位置中(0,0),(0,1),(0,2),(1,0),(1,1,),(1,2),(2,0),(2,1),(2,2)9个点的加权和,那么对应矩阵的第一行,应该只有对应位置有值,其余位置都是0,于是卷积的矩阵可以写成如下形式:

对于梯度反向传播公式,则有:

现在将Loss对y的导看做是输入,Loss对x的导看做输出,那么 C^T 就是输入梯度与输出梯度之间的权值。我们假定一个16*1的经过4*16的矩阵,得到4*1,同理,将4*1的矩阵,经过一个4*16转置之后,可以获得16*1。

附:Caffe内部的实现机制如下(参考:余俊:FCN学习:Semantic Segmentation

对于矩阵运算操作:A*B=C

在caffe内部的操作如下:

这就是im2col过程,这里的feature matrix对应于上图中的矩阵B的转置,k即是卷积核的尺寸,C为输入的维度,矩阵B中的K=C x k x k,当然N就等于H' x W'了,H',W'对应于输出的高和宽,显然H'=(H-k+2*pad)/stride+1,W'=(W-k+2*pad)/stride+1(这里向下取整),接下来我们看看A矩阵:

A矩阵对应于filter matrix,Cout是输出的维度,亦即卷积核的个数,K= C x k x k.

所以在caffe中,先调用im2col将filters和input转换为对应filter matrix(A)和feature matrix(B'),然后再用filter matrix乘以feature matrix的转置,就得到了C矩阵,亦即输出矩阵,再将C矩阵通过col2im转换为对应的feature
map,这就是caffe中完整的卷积的前向传播过程。

通过转置卷积获得了一个与之对应的高分辨率特征图,然后将两者合并起来。

蓝色的是特征图,红色的是经过转置卷积获得的尺度相同的更高级特征图,具体的办法如下图所示:

作者在论文中也提到,在最后融合的时候,试过加法和乘法,乘法会好一些,大概0.2,但是预测速度会有所降低。

6.RetinaNet(Focal Loss

这也是何凯明提出来的,这篇论文主要是提出了 Focal
Loss函数,用来消除样本比例不均衡问题。作者分析了,当前精度表现好的网络都是two-stage的,而one-stage的网络主要优势在于其速度会非常快。为什么one-stage不如two-stage的精度高呢?作者通过实验发现主要是因为two-stage的网络通过生成候选区域,消除了大量的背景,而one-stage的网络却要在大量的背景当中找到少量的目标信息,这样负例过多,导致梯度回传的时候,可能会淹没掉正例信息,这导致了模型优化的方向,有时候可能不是我们预期的方向。

OHEM是通常采用的一种方法,它通过对loss排序,选出loss最大的样本来进行训练,这样就能保证训练的区域都是比较难分的区域,但是它又把易于区分的样本给忽视掉了。

本文提出的Focal
Loss就是为了解决one
stage的精度问题。这个损失函数是在交叉熵损失函数的基础上进行的改进,它降低了容易分类样本的权重,让整个优化方向更加的专注于难分类的样本。

标准的交叉熵损失函数如下:

这里将p写成以下格式:

果引入一个α,那么这个α就可以对不同的样本产生的loss的权重进行控制:

这样就解决了背景权重过大的问题,但是它并没有区分难分的样本和容易分的样本之间的差异,于是,作者引入了一个γ参数,作为对难分和易分样本之间差异的衡量:


从这个函数就可以看出对于好分的样本,loss较小,对于难分的样本,loss较大

最后两α和γ一结合就得到了本文提出的新损失函数focal loss:

从函数表达形式可以看出:如果p_t很小, 1-p_t≈1 也就是与原来标准的交叉熵损失函数没有什么大的变化,若p_t较大,整体就趋于0,对loss贡献就比较小(也就是容易分类的共享比较小)。最后作者在这篇论文里面用了一个基于ResNet的FPN的网络结构来验证了分类这个损失函数的有效性,这里α=0.25和γ=2效果比较好。


上述涉及论文连接,感兴趣的同学请自行下载
.链接: pan.baidu.com/s/1GTWY5L 密码: jti6

编辑于 2018-05-09

文章被以下专栏收录