原论文:Auto-FPN: Automatic Network Architecture Adaptation for Object Detection
Beyond Classification
之前的AutoML都是应用在图像分类或者语言模型上,AutoFPN成功地将这技术应用到了目标检测任务上。
传统two-stage目标检测网络结构在介绍AutoFPN之前,首先大致介绍一下two-stage目标检测网络的结构组成。
AutoFPN的创新点在后面两个网络中,如下图示,主要是针对backbone的特征先做自动fusion操作(Auto-fusion),另外就是对head网络使用NAS技术搜索得到一个网络用于分类和回归(Auto-head)。
Auto-fusion其实是基于之前的一些工作的改进,如下图示:
Auto-fusion搜索方法设计考虑的有如下两个方面:
下面结合上图介绍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其实简单理解就是和DARTS一样搜索得到一个CNN结构,示意图如下
不过有如下几个方面作了修改,有必要提一下:
AutoFPN还加入了资源约束,这样既可以避免生成的模型过大,也能够加速搜索和训练过程。很直观的一种想法是将forward时间作为约束条件,但是测得的forward时间相对于模型参数并不是可微的,所以考虑如下三个方面来对资源约束建模:
公示表示如下:
\[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搜索结果,可以看到identity和conv_5*5在两个结构中用的最多。
按照文中的说法是分别Auto-fusion和Auto-head是分别进行搜索的,所以最后的AutoFPN是将二者最好的结果进行组合得到的。可以看到在不同的数据集上搜索得到的网络结构更小,而且结果也能更好。
不过我看这结果有几个疑问,就是结果的提升到底算不算显著呢?结构的提升有多少其实是炼丹炼出来而不是搜网络结构搜出来的呢?ε=(´ο`*)))唉
最后文中还给出了不同搜索策略的结果对比,可以看到基于梯度下降的效果还是很不错的。
作者很良心给出了5个训练技巧: