论文笔记系列-AutoFPN

原论文:Auto-FPN: Automatic Network Architecture Adaptation for Object Detection Beyond Classificationhtml

以前的AutoML都是应用在图像分类或者语言模型上,AutoFPN成功地将这技术应用到了目标检测任务上。node

传统two-stage目标检测网络结构

在介绍AutoFPN以前,首先大体介绍一下two-stage目标检测网络的结构组成。算法

  • backbone:即用来提取图像特征的网络结构,经常使用ResNet或VGG来提取特征
  • RPN(region proposal networks): 这个网络的做用是在backbone提取获得的特征的基础上进一步预测出若干个区域,好比faster-rcnn可能会生成2000个proposals,这些proposals中可能存在错误的或者存在些许误差的,因此还须要进一步由后面的网络处理
  • RCNN (region CNN) head: 简单理解就是针对生成的proposal区域作进一步的分类和位置回归。

AutoFPN

AutoFPN的创新点在后面两个网络中,以下图示,主要是针对backbone的特征先作自动fusion操做(Auto-fusion),另外就是对head网络使用NAS技术搜索获得一个网络用于分类和回归(Auto-head)。网络

Auto-fusion

Auto-fusion实际上是基于以前的一些工做的改进,以下图示:ide

  • 最开始SSD会对不一样尺度的特征图作预测
  • 以后FPN提出了自上而下的链接方式,将不一样尺度的特征图信息进行结合
  • PANet经过直接将最底层的特征与最高层的特征图进行链接,进一步加强特征图之间的联系
  • Auto-fusion则是经过搜索网络结构来让算法自动找到不一样层之间最合适的链接方式。

image.png

Auto-fusion搜索方法设计考虑的有以下两个方面:性能

  • 搜索空间覆盖全部的链接方式
  • 由于在TridenNet中使用dilated conv获得了不错的效果,因此不一样大小的dilated conv加入到了搜索空间中去。搜索空间以下:
    • no connection (none)
    • skip connection (identity)
    • 3×3 dilated conv with rate 2
    • 5×5 dilated conv with rate 2
    • 3×3 dilated conv with rate 3
    • 5×5 dilated conv with rate 3
    • 3×3 depthwise-separable conv
    • 5×5 depthwise-separable conv

下面结合上图介绍Auto-fusion结构的表示方式。url

对于backbone提取的4个特征图咱们用${P^0_1,P^0_2,P^0_3,P^0_4}$表示,$P^0_4$表示第0层的第4个特征图,其高宽都比原图的小4倍。那么若是Auto-fusion结构一共有$L$层,则第$l$层的特征图可表示为$P^l_1,P^l_2,P^l_3,P^l_4$。第$l-1$层的$i$节点到第$l$层的$j$节点的operation可表示为(这里若是不明白先了解一下DARTS这篇论文):spa

$$ \begin{array}{c}{\hat{O}{i \rightarrow j}\left(P{j}^{l-1}\right)=\sum_{O^{k} \in \mathcal{O}{N}} \alpha{i \rightarrow j}^{k l} O_{i \rightarrow j}^{k l}\left(P_{j}^{l-1}\right)} \ {\text { where } \sum_{k=1}^{\left|O_{N}\right|} \alpha_{i \rightarrow j}^{k l}=1, \text { and } \alpha_{i \rightarrow j}^{k l} \geq 0}\end{array} $$.net

下图给出了Auto-fusion某一层的示意图,能够看到由于要使得不一样尺度的特征图能作融合操做,首先都会用conv 1*1的操做,然后再计算不一样operation的权重。设计

image.png

Auto-fusion对于one-stage和two-stage目标检测网络都适用。

Auto-head

Auto-head其实简单理解就是和DARTS同样搜索获得一个CNN结构,示意图以下

image.png

不过有以下几个方面做了修改,有必要提一下:

  • Auto-head由$M$个cell组成,每一个cell由7个nodes组成。每一个cell有两个inputs,分别是前一个和前前一个cell的outputs。
  • 在DARTS中,最后有两类cell,分别是normal cell和reduction cell。而在Auto-head中每一个cell的结构能够不同,也就是说Auto-head能够由$M$个不一样的cell组成
  • Auto-head中没有使用reduction cell,由于到了这一步特征图大小已经很小了(如7*7)
  • 同上,涉及到卷积的操做也不用dilated conv了,可是为了更好地提取特征,在每一个operation后面还会加上3*3和5*5的卷积操做

Resource constraint

AutoFPN还加入了资源约束,这样既能够避免生成的模型过大,也可以加速搜索和训练过程。很直观的一种想法是将forward时间做为约束条件,可是测得的forward时间相对于模型参数并非可微的,因此考虑以下三个方面来对资源约束建模:

  • 模型大小
  • FLOPs
  • memory access cost (MAC)

公示表示以下:

$$ C(\alpha, \beta)=\sum_{i, j, k, l} \alpha_{i \rightarrow j}^{k l} C\left(O_{i \rightarrow j}^{k l}\right)+\sum_{i, j, k} \beta_{i \rightarrow i}^{k} C\left(O_{i \rightarrow j}^{k}\right) $$

那么总的loss表达式以下:

$$ \mathcal{L}(w, \alpha, \beta)=\mathcal{L}_{m o d e l}(w, \alpha, \beta)+\lambda C(\alpha, \beta) $$

其中$\alpha$表示模型参数,即咱们常说的卷积核参数或者全链接层参数等,$\beta$表示模型结构参数,即记录了不一样operation的权重。值得一提的是$\lambda$这个参数,由于经过修改这个参数的大小,咱们可以控制模型的相对大小,例如若是咱们令$\lambda$比较大,那么最终获得的网络大小就会相对小一些,反之则大一些。在论文中,给出了三个等级的效果,具体结果看下一节。

实验结果

Auto-fusion和Auto-head搜索结果

下图给出了Auto-fusion和Auto-head搜索结果,能够看到identity和conv_5*5在两个结构中用的最多。

image.png

不一样大小模型的结果对比

按照文中的说法是分别Auto-fusion和Auto-head是分别进行搜索的,因此最后的AutoFPN是将两者最好的结果进行组合获得的。能够看到在不一样的数据集上搜索获得的网络结构更小,并且结果也能更好。

不过我看这结果有几个疑问,就是结果的提高到底算不算显著呢?结构的提高有多少实际上是炼丹炼出来而不是搜网络结构搜出来的呢?ε=(´ο`*)))唉

image.png

image.png

NAS baseline比较结果

最后文中还给出了不一样搜索策略的结果对比,能够看到基于梯度降低的效果仍是很不错的。

训练tricks大放送

做者很良心给出了5个训练技巧:

  1. 先训练初始化结构一段时间,而后再开始搜索网络结构:Starting optimizing architecture parameters in the middle of training can improve the results by 1%;
  2. 在搜索阶段固定backbone参数:Freezing the backbone parameters during searching not only accelerates the training but also improves the performance;
  3. 搜错阶段不要用BN:Searching with BN will decrease the performance by 1.7%;
  4. 在搜索head结构时,最好使用训练好的neck结构:During searching for the head, loading the pretrained neck will boost the performance by 2.9%;
  5. 大模型对neck部分性能有些许提高,可是对head好像并无:Without resource constraints, our method becomes larger with only a small im- provement in neck but no improvement in head.

<footer style="color:white;;background-color:rgb(24,24,24);padding:10px;border-radius:10px;"><br> <h3 style="text-align:center;color:tomato;font-size:16px;" id="autoid-2-0-0"><br> <b>MARSGGBO</b><b style="color:white;"><span style="font-size:25px;">♥</span>原创</b><br> <br><br> <br><br> <b style="color:white;"><br> 2019-12-3<p></p> </b><p><b style="color:white;"></b><br> </p></h3><br> </footer>

相关文章
相关标签/搜索