《Double-Head RCNN: Rethinking Classification and Localization for Object Detection》论文详解

原文链接《Double-Head RCNN: Rethinking Classification and Localization for Object Detection》

这篇文章灵感来源于18年COCO 物体检测冠军也就是旷视的团队,他们发现在做实例分割任务时使用卷积来得到BoundingBox比使用全连接得到结果要好。文章认为全连接对于空间位置是敏感的,而卷积对于物体信息的提取效果更好,所以在物体检测任务中只使用全连接或者只使用卷积得到的效果还不够好。本文就是研究使用卷积和全连接一起使用来做物体检测提高效果的研究。

一、网络结构

网络的backbone可以使用常用的网络,比如VGG、resnet,再加上FPN的结构,根据一个ROIPooling输出 7 × 7 × 256 7\times7\times256 7×7×256大小的feature map,一般的做法是将这个featuremap接上一个全连接分支,在全连接后面接上一个分支输出预测的BoundingBox位置信息,一个分支输出对应位置的类别信息。如下图所示
《Double-Head RCNN: Rethinking Classification and Localization for Object Detection》论文详解_第1张图片

或者是在得到 7 × 7 × 256 7\times7\times256 7×7×256大小的feature map后,接上几个卷积操作,再接上一个全连接,再在后面接上一个分支输出预测的BoundingBox位置信息,一个分支输出对应位置的类别信息。如下图所示
《Double-Head RCNN: Rethinking Classification and Localization for Object Detection》论文详解_第2张图片

本文的做法是将两个全连接分支中回归位置的分支改为卷积来输出,类别估计还是使用全连接来输出,如下图所示,所以称为doublehead结构。
《Double-Head RCNN: Rethinking Classification and Localization for Object Detection》论文详解_第3张图片

对于doublehead,这里要多说一句的是,卷积不是简单的使用卷积核来操作,而是采用resnet里面的block结构来做的,具体结构如下几种组成。
《Double-Head RCNN: Rethinking Classification and Localization for Object Detection》论文详解_第4张图片
上图中
(a)是将输出的256通道增加到1024通道
(b)就是正常resnet block操作了
(c)称为non-local block,这个结构由文章Non-local Neural Networks提出,目的是想通过non-local结构引入更多的非局部信息

二、损失函数

这里的损失函数与平时的一个head的计算是类似的,只是多一个分支而已,损失函数如下所示,是doublehead的损失函数加上rpn的损失函数:
L = ω f c L f c + ω c o n v L c o n v + L r p n L= \omega^{fc}L^{fc}+\omega^{conv}L^{conv}+L^{rpn} L=ωfcLfc+ωconvLconv+Lrpn
上式中, ω f c \omega^{fc} ωfc ω c o n v \omega^{conv} ωconv分别是doublehead中全连接和卷积的loss权重, L f c L^{fc} Lfc L c o n v L^{conv} Lconv L r p n L^{rpn} Lrpn分别是doublehead中fc-head,conv-head,rpn的loss函数。具体采用哪种损失函数,这里同FPN,回归采用smooth-l1,分类采用cross entropy loss。

到这里基本就是doublehead的主要原理了,下面还有一些扩展思考

三、扩展的doublehead

3.1 扩展的doublehead结构

文章发现上面的原始doublehead中的每个分支都是关注自己的任务,比如卷积只关注回归操作,全连接关注分类操作,而不同的head不只关注自己的任务对检测器的性能还会有所提升。不只关注自己任务(Unfocused Task Supervision)的意思是,fc-head也会接受回归任务的监督信息,conv-head则会接受分类任务的监督信息。如下图所示。
《Double-Head RCNN: Rethinking Classification and Localization for Object Detection》论文详解_第5张图片

3.2 扩展doublehead中的损失函数

在训练过程中,fc-head不仅要受到本身擅长的分类信息监督还要受到回归信息的监督,同理conv-head也要受到两个信息的监督,先拿fc-head来说,损失函数如下所示:
L f c = λ f c L c l s f c + ( 1 − λ f c ) L r e g f c L^{fc} = \lambda^{fc}L^{fc}_{cls}+(1-\lambda^{fc})L^{fc}_{reg} Lfc=λfcLclsfc+(1λfc)Lregfc
上式中 L c l s f c L^{fc}_{cls} Lclsfc L r e g f c L^{fc}_{reg} Lregfc就是fc-head做分类和回归任务的损失函数, λ f c \lambda^{fc} λfc则是用来平衡两类任务的超参数。

下面再说conv-head,它的损失函数计算同fc-head:
L c o n v = ( 1 − λ c o n v ) L c l s c o n v + λ c o n v L r e g c o n v L^{conv} = (1-\lambda^{conv})L^{conv}_{cls}+\lambda^{conv}L^{conv}_{reg} Lconv=(1λconv)Lclsconv+λconvLregconv
上式中 L c l s c o n v L^{conv}_{cls} Lclsconv L r e g c o n v L^{conv}_{reg} Lregconv就是conv-head做分类和回归任务的损失函数, λ c o n v \lambda^{conv} λconv则是用来平衡两类任务的超参数,这里更上面有点不同的是 λ c o n v \lambda^{conv} λconv乘的是回归参数。

可以看出当 λ f c = 1 \lambda^{fc}=1 λfc=1 λ c o n v = 1 \lambda^{conv}=1 λconv=1时得到的就是原始的doublehead的损失函数,文章采用的是 λ f c = 0.7 \lambda^{fc}=0.7 λfc=0.7 λ c o n v = 0.8 \lambda^{conv}=0.8 λconv=0.8

3.3 扩展doublehead中的推断

看上面的结构图可以看出,分类结果是两个head融合的结果,而回归还是只采用卷积得到的结果。对于分类的融合方式如下式所示:
s = s f c + s c o n v ( 1 − s f c ) = s c o n v + s f c ( 1 − s c o n v ) s = s^{fc} + s^{conv}(1-s^{fc}) = s^{conv} + s^{fc}(1-s^{conv}) s=sfc+sconv(1sfc)=sconv+sfc(1sconv)
上式中 s f c s^{fc} sfc s c o n v s^{conv} sconv分别是fc-head和conv-head的分类结果。

原理基本就这些,想知道实验结果和doublehead中采用几层resnet block和non-local block连接,可以查看原文的实验部分。

你可能感兴趣的:(机器学习,机器学习)