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

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

传统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其实是基于之前的一些工作的改进,如下图示:

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

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结构的表示方式。

对于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这篇论文):

\[
\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}
\]

下图给出了Auto-fusion某一层的示意图,可以看到因为要使得不同尺度的特征图能做融合操作,首先都会用conv 1*1的操作,而后再计算不同operation的权重。

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

Auto-head

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

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

  • 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在两个结构中用的最多。

不同大小模型的结果对比

按照文中的说法是分别Auto-fusion和Auto-head是分别进行搜索的,所以最后的AutoFPN是将二者最好的结果进行组合得到的。可以看到在不同的数据集上搜索得到的网络结构更小,而且结果也能更好。

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

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.

MARSGGBO♥原创







2019-12-3

论文笔记系列-AutoFPN的更多相关文章

  1. 论文笔记系列-Neural Network Search :A Survey

    论文笔记系列-Neural Network Search :A Survey 论文 笔记 NAS automl survey review reinforcement learning Bayesia ...

  2. 论文笔记系列-Auto-DeepLab:Hierarchical Neural Architecture Search for Semantic Image Segmentation

    Pytorch实现代码:https://github.com/MenghaoGuo/AutoDeeplab 创新点 cell-level and network-level search 以往的NAS ...

  3. 【论文笔记系列】AutoML:A Survey of State-of-the-art (下)

    [论文笔记系列]AutoML:A Survey of State-of-the-art (上) 上一篇文章介绍了Data preparation,Feature Engineering,Model S ...

  4. 论文笔记系列-Neural Architecture Search With Reinforcement Learning

    摘要 神经网络在多个领域都取得了不错的成绩,但是神经网络的合理设计却是比较困难的.在本篇论文中,作者使用 递归网络去省城神经网络的模型描述,并且使用 增强学习训练RNN,以使得生成得到的模型在验证集上 ...

  5. 论文笔记系列-iCaRL: Incremental Classifier and Representation Learning

    导言 传统的神经网络都是基于固定的数据集进行训练学习的,一旦有新的,不同分布的数据进来,一般而言需要重新训练整个网络,这样费时费力,而且在实际应用场景中也不适用,所以增量学习应运而生. 增量学习主要旨 ...

  6. 【转载】论文笔记系列-Tree-CNN: A Deep Convolutional Neural Network for Lifelong Learning

    一. 引出主题¶ 深度学习领域一直存在一个比较严重的问题——“灾难性遗忘”,即一旦使用新的数据集去训练已有的模型,该模型将会失去对原数据集识别的能力.为解决这一问题,本文提出了树卷积神经网络,通过先将 ...

  7. 论文笔记系列-Multi-Fidelity Automatic Hyper-Parameter Tuning via Transfer Series Expansion

    论文: Multi-Fidelity Automatic Hyper-Parameter Tuning via Transfer Series Expansion 我们都知道实现AutoML的基本思路 ...

  8. 论文笔记系列-Simple And Efficient Architecture Search For Neural Networks

    摘要 本文提出了一种新方法,可以基于简单的爬山过程自动搜索性能良好的CNN架构,该算法运算符应用网络态射,然后通过余弦退火进行短期优化运行. 令人惊讶的是,这种简单的方法产生了有竞争力的结果,尽管只需 ...

  9. 【论文笔记系列】AutoML:A Survey of State-of-the-art (上)

    之前已经发过一篇文章来介绍我写的AutoML综述,最近把文章内容做了更新,所以这篇稍微细致地介绍一下.由于篇幅有限,下面介绍的方法中涉及到的细节感兴趣的可以移步到论文中查看. 论文地址:https:/ ...

随机推荐

  1. 6. Vue - 声明周期

    一.官方vue生命周期流程图 二.vue声明周期介绍 beforeCreate执行时:data和el均未初始化,值为undefined created执行时:Vue 实例观察的数据对象data已经配置 ...

  2. 2018年蓝桥杯A组C/C++决赛题解

    2018年第九届蓝桥杯A组C/C++决赛题解 点击查看视频题解 点击查看2018年蓝桥杯A组C/C++决赛题目(不含答案) 1:三角形面积 画个图,求三角形面积,可以用外接长方形 - 其他多余区域面积 ...

  3. python27期JavaScript:

    JavaScript:(简称“JS”) 是一种轻量级的编程语言(ECMAscript5或6)是一种解释性脚本语言(代码不进行预编译)主要用来向HTML页面添加交互行为JavaScript 是互联网上最 ...

  4. linux 下安装 python ngix 项目发布流程

    1.安装python #1.安装python3.7所需要的依赖包yum -y groupinstall "Development tools"yum -y install zlib ...

  5. NOIP201310华容道

    题目描述 Description 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少需要多少时 ...

  6. 如何运用C语言求(判断)素数。

    int i,n; scanf("%d",&n); i=2;   //这一步是亮点!! while(i<n) { if(n%i==0) break; i++; } if ...

  7. 【2019.7.26 NOIP模拟赛 T3】化学反应(reaction)(线段树优化建图+Tarjan缩点+拓扑排序)

    题意转化 考虑我们对于每一对激活关系建一条有向边,则对于每一个点,其答案就是其所能到达的点数. 于是,这个问题就被我们搬到了图上,成了一个图论题. 优化建图 考虑我们每次需要将一个区间向一个区间连边. ...

  8. Pandownload倒下了,还有它,又一款百度云下载神器,速度可达10M/s

    最近很多小伙伴反馈 Pandownload 不好使了 对此我表示 脑壳疼 不过经过一番折腾 还是找到了一个不错的替代品 它就是 baidupcs-web 下载解压后就这么一个可执行文件 干净的不可思议 ...

  9. JWT签名与验签

    签名Token生产 using System; using System.Collections.Generic; using System.IdentityModel.Tokens.Jwt; usi ...

  10. 【Java并发专题之三】Java线程互斥、协作原理

    (I)Java线程互斥原理之synchronized原理 从JDK5引入CAS原子操作,但没有对synchronized关键字做优化,而是增加了J.U.C.concurrent,concurrent包 ...