论文阅读:Hit-Detector: Hierarchical Trinity Architecture Search for Object Detection

简介:

Hit-Detector是第一个可以同时搜索检测网络的backbone、neck和head的NAS,在低算力、低参数量的情况下得到高mAP。

论文链接
代码链接

前言:

NAS在图像识别任务中已经有了重大突破,Hit-Detector则是将NAS应用在更为复杂的目标检测任务。在Hit-Detector之前,已经有研究人员尝试将NAS应用在目标检测任务,但是目前大部分的NAS for Object Detection仅仅关注于搜索检测网络的Backbone(eg:DetNAS)或者特征融合方式(eg:NAS-FPN),而检测网络的其他component仍然由人工设计,作者认为这种NAS+人工设计的方式会限制检测网络的性能。作者竟然发现了之前NAS的缺陷,Hit-Detector自然就是解决这个缺陷的,它不但可以同时搜索检测网络的backbone、neck和head,而且还可以知道backbone、neck和head分别喜欢用哪些操作来组成自己(刺不刺激,backbone、neck和head喜欢啥你都要观察,它们不要隐私的嘛)。Hit-Detector的实验结果也很惊艳,coco数据集,只需要用27M的参数量,不使用任何tricks(without bells and whistles)就可以得到41.4的mAP。

文章概括:

我们知道,搜索空间和搜索策略的设计对NAS的搜索结果有着直接的影响。本文设计一种分级的方法,能够在一个较大的搜索空间中提取最为合适的子搜索空间。
搜索步骤:
1、 给定一个大的搜索空间,包括所有的候选操作,然后通过组稀疏正则化(group sparsity regularization)分别为backbone、neck和head选取合适的子搜索空间;
2、 分别在backbone、neck和head的子搜索空间中搜索各自的结构;

主要贡献:
1、 第一个可以端到端同时搜索检测网络的backbone、neck和head的NAS;
2、 可以观察backbone、neck和head各自喜欢什么操作,并且设计一种分级的方法在不同的子搜索空间中搜索不同的结构;
3、 搜索出的检测网络性能强悍,复杂度低;

Hit-Detector结构图:
在这里插入图片描述

Hit-Detector原理:

Hit-Detector克服了之前的NAS(eg:NAS-FPN,DetNAS等)的缺陷,那么先简单介绍一下之前的NAS是如何搜索网络结构的,目标函数定义如(1)式:
在这里插入图片描述
A是一个有向无环图(DAG),A仅仅代表着backbone或者neck的搜索空间,A的每个节点表示网络的特征,A的边表示节点与节点之间使用的是什么操作(卷积、池化等),a是A的一个子图(我们搜索到的最终的网络结构其实就是A的某个子图),w(a)表示当前搜索到的网络结构a的训练参数。有了这些介绍就很好理解(1)式了,它的目的就是找到能够让验证集loss最小的那个a,a可以表示我们想要搜索的backbone或者neck的网路结构。

那么Hit-Detector是如何克服之前NAS的缺陷的呢?简单来说,其实就是把(1)式中的搜索目标从1个变成了3个,如(3)式:
在这里插入图片描述
其中a,b,r分别表示我们想要搜索到的backbone、neck和head的网络结构。
上文说到,Hit-Detector的搜索过程分为两步,接下来看Hit-Detector具体的实现过程。
第一步:分别为backbone、neck和head选取子搜索空间。子搜索空间是从一个大搜索空间中得到的,大搜索空间中包含N个不同的操作(卷积、池化、block等,本文N=32),大搜索空间中的block结构如Figure2所示:
在这里插入图片描述
由于过大的搜索空间对NAS的搜索时间和内存要求过高,因此本文在大搜索空间中,分别为backbone、neck和head选取子搜索空间,以便减少搜索时间和内存损耗。以backbone为例,假设backbone共有L层,a(l, i)表示第l层的第i个操作得到的分数,我们把a叫做结构化参数(结构化参数的定义和使用与darts系列的NAS很像,只不过将darts的结构化参数从一位扩展到了二维)。在网络刚开始搜索时,结构化参数a的维度为LN(L表示层数,N表示搜索空间大小),随着网络的不断搜索、训练,不同层的不同操作会得到不同的分数a,将同一层、不同操作的分数进行排序,将分数低的操作从搜索空间中删除(子搜索空间中不再使用分数低的操作)。不断重复这个过程,直到结构化参数的维度降为LNb。
为了能够更加容易的将分数低的操作从搜索空间中删除(让同一层、不同操作的得分有更明显的差别),文章将结构化参数a进行了稀疏正则化,如(4)式所示:
在这里插入图片描述
其中u是个trade-off的超参。
第二步,端到端的搜索网络结构。这个步骤很简单,个人认为是与darts完全一致的,以搜索backbone为例,第l层的输出如(5)式:
在这里插入图片描述
其中a表示结构化参数,Ob表示backbone的搜索空间,o表示当前NAS选择的操作。Neck和head与backbone的做法相同(就是把a分别替换成b和r,再结合(3)式,就得到Hit-Detector的目标函数啦)。由于结构化参数的存在,所以整个网络都是可微的,因此可以对网络进行端到端的搜索。
担心有些朋友不了解darts,我就再啰嗦一下结构化参数a和网络结构的关系。举个例子,搜索空间包含conv11,conv33,conv55三种操作,backbone的第l层则可以在三种操作中选择一个操作作为当前层,那么怎么选择呢,就是通过a来选择。a是由NAS学习得到的,可以把a当做是选择各个操作的概率,比如conv11的a=90%,conv33的a=8%,conv55的a=2%,那么当前层就会选择conv1*1,网络的每一层都可以通过a来选择,因此由a就可以得到整个网络结构了,所以Hit-Detector搜索网络的过程其实就是NAS学习结构化参数a的过程。
最后,本文为了防止搜索时间过长,搜索出的网络算力过大,对目标函数做了进一步优化,优化方法与proxylessnas的做法相似,给目标函数添加一个和算力有关的正则项(proxylessnas的正则项与latency有关),如(6)式:
在这里插入图片描述在这里插入图片描述
其中lamata是用来平衡网络精度和算力的超参,C(a)表示backbone的算力统计。(6)式就是Hit-Detector最终的目标函数。

实验结果:

由Table2可以看到,Hit-Detector在较低参数量、较低算力的情况下,可以得到较好的mAP。
在这里插入图片描述
由Table3可以看到,在相同的测试分辨率下,Hit-Detector依然可以得到较好的mAP。
在这里插入图片描述

其他:

本文还做了多组模型简化测试,例如:Influence of different operations,Column-sparse regularization,Importance of screening sub search space,Importance of trinity architecture searching以及Extension to one-stage detector,就不再一一介绍了。

若文中有不足之处,还请各位大佬指正!
原创码字不易,若转载,请注明出处!
欢迎各位关注我的公众号,一个专注于NAS的公众号,我会持续跟进学术界NAS领域的最新进展,每周更新一篇新Paper,公众号刚刚起步,希望各位多多支持!

在这里插入图片描述

发布了2 篇原创文章 · 获赞 18 · 访问量 835

猜你喜欢

转载自blog.csdn.net/weixin_43383972/article/details/105646189