NAS在目标检测中的应用:6篇相关论文对比解读
加入极市专业CV交流群,与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度 等名校名企视觉开发者互动交流!
同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流。关注 极市平台 公众号 ,回复 加群,立刻申请入群~
NAS除了应用在classification问题上,还有很多在detection上的研究。
对于detector,不管是anchor和anchor free的检测方法,主要有以下4个components:
Backbone:常见的backbone网络有ResNet,ResNeXt等,轻量级的有mobilenet、shufflenet、efficientnet等等,通常需要在ImageNet上进行预训练,但近来一些paper指出,如果训练时间足够长,那么可以不需要使用ImageNet上的预训练模型。 Neck:也就是FPN等等结构,是为了利用不同 level 的feature,然后进行一些fusion,以取得更好的结果。 RPN:RPN仅仅存在two-stage的检测器中。因为结构简单,很少进行search。 Head:进行最终的anchor的分类和修正。
大部分NAS for detection的Motivation很直接,就是对一个或多个component进行search。例如:
DeNAS和SpineNet是为检测任务搜索一个Backbone; NAS-FPN搜索的是Neck; Auto-FPN分别搜索了Neck和Head; Hit-Detector则同时搜索检测网络的backbone、neck和head。
这样,Detection+NAS就转化为component的优化。
1、DetNAS: Backbone Search for Object Detection
paper:https://arxiv.org/abs/1903.10979
code:https://github.com/megvii-model/DetNAS
大多数目标检测器方法直接Backbone是图像分类设计的网络,但因为图像分类仅关注的是图中主要物体是什么,而目标检测不仅关注每个目标的类别,还有位置。受到One shot NAS的启发,DetNAS通过将权重训练和结构搜索解耦来进行检测器Backbone的搜索。
具体训练分为三步:
1)在ImageNet上预训练Supernet,
2)在检测数据集上微调Supernet,
3)在训练好的Supernet上使用进化算法进行搜索。
2、NAS-FPN: learning scalable feature pyramid architecture for object detection
paper:https://arxiv.org/abs/1904.07392
NAS-FPN讨论了检测网络的neck如何自动地进行特征分层连接,从而取得精度和速度的权衡。
首先,FPN在NAS-FPN中看做是由许多的“Merging Cells”组成的,如下图:
merging cell的机制是:从现有的feature layers中任意选取两个feature map,并选择输出的分辨率,然后选择此次的Binary Op,将选择的两个feature map融合并按照上一步选择的分辨率生成新的feature map。
然后,NAS-FPN也采用了以RNN作为控制器的强化学习搜索方法,与一般NAS搜索方法相似,为了加快搜索速度,采用了代理的方式。
3、Auto-FPN: Automatic Network Architecture Adaptation for Object Detection Beyond Classification
paper:https://openaccess.thecvf.com/content_ICCV_2019/papers/Xu_Auto-FPN_Automatic_Network_Architecture_Adaptation_for_Object_Detection_Beyond_Classification_ICCV_2019_paper.pdf
如下图示,AutoFPN的创新点在Neck和Head网络中,Neck是针对backbone的特征先做Auto-fusion操作,而Auto-head使用NAS技术搜索得到一个网络用于分类和回归。
搜索方法:Auto-fusion和Auto-head都采用了Differentiable NAS的搜索方式,没有什么特殊的地方。DNAS的介绍可以参考:
Differentiable NAS Research Clues,https://zhuanlan.zhihu.com/p/145560220
Resource Constraint : AutoFPN加入了【模型大小、FLOPs、memory access cost (MAC)】三个方面的资源约束,这样既可以避免生成的模型过大。
4、NAS-FCOS
paper:https://arxiv.org/abs/1906.04423
NAS-FCOS和Auto-FPN相似,搜索的是neck和head部分,不同的是采用RL的方法进行搜索,搜索空间也略有点不同。
5、SpineNet: A Novel Architecture for Object Detection Discovered with Neural Architecture Search
paper:https://arxiv.org/abs/1912.05027
SpineNet提出了一种叫做尺度重排(scale-permuted )的元结构模型,也就是说:
中间feature maps的空间分辨率应该能够随时增加或减少,以便模型能够随着深度的增加而保留空间信息。 其次,特征图之间的联系应该能够跨特征尺度,以促进多尺度特征融合。
显然SpineNet是对backbone的搜索,搜出来的SpineNet也可以应用于分类网络,从实验数据来看效果没这么惊艳。
6、Hit-Detector: Hierarchical Trinity Architecture Search for Object Detection.
paper:https://arxiv.org/pdf/2003.11818.pdf
code:ggjy/HitDet.pytorch
Hit-Detector是第一个同时搜索检测网络的backbone、neck和head的方法。采用的是**Differentiable NAS的搜索方式。**结构如下所示:
Search space是一些可选择expasion rate、kernel size、group的Inverted Residual block等candidate,如下:
Screening Sub Search Space : 为了减少计算负担,采用对每个操作的候选操作进行分层筛选。每个candidate都是与分数有关,高分candidate保留,其他分数较低的被删除。 End-to-end Search in Hit-Detector: 就是对backbone、Neck和head的sub搜索空间使用Differentiable NAS方法进行搜索。 优化目标:
其中,α,β,γ分别代表了backbone, neck, and head的网络结构。C(α) 表示 backbone的FLOPs。λ 是平衡准确性和算力的系统。
最后,一张图比较这几种方法,可以看到EfficientNet-D0在非常小资源的情况下,取得了32.4的mAP,效果真的很好。Detection+NAS拟合的能力确实强悍。
if you like this article:
please upvote
# Thanks :)
推荐阅读