今天我讲得这篇论文是Learning Deeply Supervised Object Detectorsfrom Scratch,是今年ICCV的一篇文章,它的作者之一是今年CVPRbest paper DenseNet的作者。这篇文章主要就是用DenseNet+SSD的结构来做目标检测,它可以不用预训练的模型,直接用目标检测的数据进行训练,同时可以达到经过预训练一样的效果。
Motivation:
图像分类的模型作为预训练模型,它的结构都是固定的,参数又很多,想要轻微调整网络结构的话也很麻烦,灵活性太差,而且计算的开销也会很大。
第二个是存在learning bias的问题,因为分类和检测的loss 和最后的分类不一样,所以在寻找局部最优时候可能会有偏差。
第三是存在Domain不匹配的问题。把分类网络迁移到其他比较特殊的数据上,比如深度图和医学图像,它的domain和一般图像分类模型的差太大,fine –tuning的结果会很不好。
所以作者就提出了两个问题,能不能不用预训练,如果可以的话,该怎么样设计这个网络结构,针对此,这篇文章设计了这个目标检测的模型,据他们所知,还没有做过相关的工作。
……
第二个原则
在网络的主干部分,用的是DenseNet的结构,
DenseNet将整个网络用不同的Block分开,先经过一个卷积层,每个Block之间用AveragePooling进行下采样,Block之内就是它的精华部分,每一个卷积层的输入都与前面的层有关,这个公式可以看到第l层的输入,是0到l-1层结果拼接起,这样就可以充分运用到每一层的信息,而且每个block里的卷积层的channel很小,在DSOD里,作者只用了48个,这样网络参数就很少。
这张就是DenseNet的网络结构,总共有4个DenseBlock,每个Block之间有个Transition层,把feature map 的大小减半,在这篇文章里,它把后两个Block之间的transition layer做了改变,不对featuremap进行下采样,因为在DenseNet里面只用了4个Block,而如果想要增加block数量的话,再经过下采样就会导致最终feature map的分辨率太低,所以DSOD里就去掉了后几个block之间的pooling 层
第三个原则是用到了 Stem Block,作者借鉴了Inception结构,原来DenseNet第一个卷积层是一个7*7的卷积加一个3*3的max pooling,在这里变成了3个3*3的卷积,加一个2*2的max pooling,主要是为了降低一开始输入图像信息的丢失。
第四个原则是Dense Prediction Structure。这篇文章的主要思想就是Deep supervised,前面提到它只在非区域的检测算法上有收敛,所以这里predition模块借鉴了SSD 算法,对SSD的结构做了一些变动,将最后prediction里的各个层进行dense connection的过程,这张图片是两者的对比图,左边可以看到SSD里它不同尺度的feature map是直接输入到最后的全连接层的,右边是作者提出的Dense Connection的结构,就是让每个feature map学一半留一半,看下画圈这里是一个拼接的步骤,左边的输入是上一层经过卷积后得到的一个新的feature map,上边的这个输入是直接把上一层进行下采样,这样保证两个size一样以后直接串联起来,输入到最后全连接层,这里下采样的部分先经过2*2的max pooling,让两个feature map的大小一样,然后再用1*1的卷积把channel减半,以后的每个层都用了这个操作,这样每一层就直接用到了上一层的信息,并且减少了参数量,作者实验以后发现用了Dense Connection的结构以后结果也更好。
实验部分,作者把自己提出的每个原则都做了实验,transition without pooling 是用不用这一层,这里的theta是在transition层进行1*1卷积时是否用它的channel压缩,打钩的话是不压缩,bottleneck是指在每个block里有多个卷积层,在每个卷积层前面都加了一个1*1的卷积层,用来降低输入的featuremap的数量,数量越大的话效果越好。