论文学习笔记(八)DSOD: Learning Deeply Supervised Object Detectors from Scratch

『写在前面』

无需借助预训练模型即可达到较高精度的目标检测模型。

论文出处:ICCV 2017

作者机构:Zhiqiang Shen等,复旦大学等

原文链接:https://arxiv.org/pdf/1708.01241

相关repo:https://github.com/szq0214/DSOD


目录

摘要

1 介绍

 2 相关工作

3 DSOD

3.1 模型结构

DSOD结构

DSOD中各个组件的设计原理


摘要

提出一种可以从头开始训练的深度监督目标检测模型DSOD。同时,给出了一系列用于设计可以从头开始训练的目标检测模型的思路,其中最重要的是deep supervision,它通过dense layer-wise connections实现。

1 介绍

在图像分类领域,使用预训练模型进行微调已经成为一种广泛使用的方法。如今,大多目标检测模型也都基于预训练模型做finetune。但作者认为,这样做并不是最好的,原因有如下几个:

  1. 限制了结构设计的空间。为了能够使用ImageNet上面的预训练权重,往往不能对模型结构进行大幅度修改;
  2. 学习偏差。由损失函数设计和类别信息不匹配导致的。
  3. 信息域不匹配。ImageNet上的预训练模型都是基于RGB图像训练的,比如想用在深度图像、医学图像等上面就不太适合。

 2 相关工作

当前state-of-the-art方法主要分为两大类:

  • 基于推荐区域的方法,也称two-stage类方法,代表作为各种RCNN。优点是精度高,缺点是速度慢。
  • 无推荐区域方法,也称one-stage类方法,代表作YOLO和SSD等。优点是速度快,缺点是精度没那么高。

SSD在三个方面对YOLO进行了改进:

  1. 使用小核卷积做最后的预测;
  2. 使用金字塔特征(不同scale)来进行预测;
  3. 使用不同长宽比的默认框来调整待预测目标的形状,更容易训练。

3 DSOD

3.1 模型结构

DSOD结构

DSOD整体由两部分组成:

  1. 用于提取特征的骨干网络,是DenseNet的改进型,由以下部分组成:
    1. 1个stem block
    2. 4个dense block
    3. 2层transition layer
    4. 2层transition w/o pooling layer
  2. 用于从多尺度feature map中进行预测的前端网络,提出一种新的dense结构用于融合多尺度信息(相比原版SSD的一个改进)

完整的DSOD网络架构如下表所示:

DSOD中各个组件的设计原理

Proposal Free

作者发现,只有proposal-free的方法能够不借助预训练模型(从头开始训练)就达到一个比较高的精度。认为ROI Pooling阻碍了梯度信息回传,因为从区域级到整个feature map,level不够平滑。但对于ROI Pooling之前的层,使用预训练权重进行初始化是有利的,所以RCNN类方法不适合从头开始训练。因此,作者选择了SSD作为原型。

Deep Supervision

为了利于训练,很多模型会在模型不同深度处添加监督。一种显式解决方案是添加旁路输出层,比如GoogLeNet中就使用了综合损失函数来对早期层直接监督。另一种是DenseNet中提出的dense layer-wise connection,虽然只在模型最后使用了一个单独的损失函数,但由于其中直接或间接包含了前面层的输出信息,所以也起到了监督的作用。

在DenseNet中提出的原版dense block中,每个transition layer都包含一个池化层用于进行特征下采样。如果想保持输出比例不变,则dense block的数量就需要固定(DenseNet中是4个),所以增加模型深度的唯一方法就是在block中加层。本文中作者提出了Transition w/o pooling layer,去掉了原版中的池化层,这样分辨率不会变小,也就可以堆叠更多的block了。

dense block:block中每一层都与block中其前面任意一层相连。

Stem Block

受Inception-v3&v4的启发,设计了一个stem block用于模型最初阶段的特征提取,以替换掉DenseNet中最开始的7*7卷积层,可以有效降低信息损失。 

Dense Prediction Structure

核心所在,Learning half and reusing half,一半靠学习,一半靠复用,结构如下图所示:

在SSD中,除了scale-1以外,其余每个scale都是由上一个scale经过一个bottleneck模块(一个1*1卷积用于减少通道数,接一个3*3 stride=2的卷积提取特征和下采样)平滑过渡下来的。在最终得到的prediction feature map中, 每个scale所占比例不一样,信息不对称。如上图左半部分所示,作者称其为Plain Connection。

而在DSOD中,限制了每个scale必须输出相同通道数的feature map,并且每个scale的输入中一半信息来自于前一个scale经过bottleneck得到,另一半信息则由其前面所有scale“共同”给出。这样虽然每个scale没有与其之前的scale直接相连,但都融合了前面层的信息,体现了DenseNet中提出的dense layer-wise connection的思想。

Learning half and reusing half 理解

Part-1(Learning half):先通过1*1*256卷积压缩通道数(与SSD中一样),再通过3*3*256, stride=2卷积缩小feature map尺寸,此处与原版SSD中不同,通道数减了一半,SSD中是512,这样少一半就可以和剩下的一半拼了。

Part-2(Reusing half):创建了一条支路,scale-1作为最初的输入,然后不断地迭代,每一次都将上一层的输出先过1个2*2的池化层缩小尺寸,然后再过一个1*1*256的卷积层压缩通道数,最后将输出与Part-1的输出合并。

猜你喜欢

转载自blog.csdn.net/sinat_37532065/article/details/86651247
今日推荐