DetNAS算法笔记(论文+代码)

DetNAS: Backbone Search for Object Detection

论文链接:DetNAS论文
论文代码:DetNAS代码

本文主要对DetNAS算法进行学习,重点关注NAS方法在优化目标检测骨干网络的整体过程。
本文是中科院和旷视一起合作完成的。这其实一些方法也是旷视在别的论文中提出的。
全文整体的重点分为了三部分,且每一部分的过程在代码中是顺序运行,先一,后二,再三,且稍微复杂点,这里直接总结,以便于整体理解。

第一部分:Supernet pre-training(ImageNet)
先构建一个超网(超网的搜索空间是旷视自家的ShuffleNetv2 block为基础),此超网包含非常多子网。利用这个超网对分类数据集进行预训练(ImageNet),训练方式采用path-wise(相当于每次只更新一条路径,也就是一个子网的权重,这样随机和不公平的选择性更新,可看作一种正则化且在有效计算资源下训练非常高效)。超网在ImageNet的训练完成,得到了超网分类问题上的权重。

第二部分:Supernet fine-tuning(部分COCO)
超级网络微调也是path-wise的,但配备了检测头、检测数据集指标和COCO数据集。相当于在第一部分训练的超网backbone的基础上,+FPN+Head。这里需要注意,因此采用了分布式训练,因此使用了Synchronized Batch Normalization(先汇总再广播)。微调完成,在之前的基础上,又更新了超网权重。

第三部分:Search on supernet with EA.
通过进化算法(本文使用遗传算法)在训练好的超网上进行最后的架构搜索。通过遗传算法,随机初始化种群(相当于随机初始化了子网),种群中的个体相当于子网,个体需要满足一定约束条件,本文约束为FLOPs不能大于某个值。通过在COCO上评估每个子网,进而通过遗传算法进行适应度值评价和更新(选择,交叉,变异),最后根据最优适应度值(可以理解为COCO-map),得到最优子网(最优backbone)
最优的骨干网络同样要结合head在检测问题重新训练,以跟人工网络进行比较。

个人觉得重要但同时有点模糊的点:预训练和微调都是为了得到权重?永远记得权重的重要性。
进化算法的弊端,除了经典粒子群和遗传算法,其他通过动物,化学,物理世界的创造的EA暂时不考虑,这真的不是一种伪暴力搜索吗(以后有新想法,收回这个话)。

看完整体和代码,感觉这张图确实清晰展现了整体过程(但实现的挺麻烦的),不过就是图形摘要要的效果(-。-)。
在这里插入图片描述

摘要

目标检测网络一般由backbone,neck和prediction组成。目标检测网络的backbone一般配备用于图像分类的backbone,但是两种任务明显是不同的,目标检测明显更复杂一点,因此这里采用的图像分类的backbone就可能是次优的。因此本文提出了使用神经结构搜索(NAS)来设计更好的目标检测骨干的DetNAS

一般的检测任务需要在ImageNet上进行预训练(加快收敛速度,提高模型泛化能力,减少过拟合风险),而NAS系统需要目标检测任务的准确性作为监督信号(NAS搜出的网络还是要在检测任务上通过准确性来评价)。

基于包含搜索空间中所有可能网络的one-shot单次超级网络技术,提出了一种用于目标检测的骨干搜索框架。

我们在典型的检测器训练计划下训练超级网络:ImageNet预训练和检测微调。
然后,以检测任务为指导,在训练好的超级网络上进行架构搜索。这个框架使得主干网上的NAS非常高效。
在实验中,证明了DetNAS在各种检测器上的有效性,例如一级retanet和两级FPN。
我们的经验发现,与在ImageNet分类上搜索的网络相比,在目标检测上搜索的网络具有一致的优势。由此产生的体系结构比在COCO上手工制作的网络具有更优越的性能,并且FLOPs复杂性要低得多。

引言 Introduction

骨干网络在目标检测器上起到非常重要的作用,目标检测器的性能高度依赖于骨干提取的特征。通过加深骨干网络,可以获得更好的检测性能(ResNet-50 [8] backbone with stronger networks, e.g., ResNet-101 or ResNet-152)。正如摘要提到的,许多目标检测器的骨干网络是从来自分类网络,但分类重点在类别,而检测任务还包含位置信息。

NAS技术的发展,在分类问题上甚至超过了人工设计的网络,而简单的将NAS技术应用在骨干网络上是不行的,因为一般的检测器训练计划需要在ImageNet上对骨干网络进行预训练,这会给NAS搜索骨干网络带来两个难题:
(1)难以优化:NAS系统需要目标任务的准确性作为奖励信号,预训练的准确性不符合这一要求。可以这样理解,NAS是以一个特定的目标检测任务的准确性来进行搜索的,而预训练只是为了提前训练好一个丰富的权重(在大型数据集)。
(2)低效率:为了获得宝贵的性能,在搜索过程中,每个候选架构必须首先进行预训练(例如在ImageNet上),然后在检测数据集上进行微调,这是非常昂贵的。1000个候选框架,每个都在大型数据集上训练,然后检测数据集上微调,这根本玩不起。

同时发现在一个特定检测任务上从头训练也不是很好,需要更多迭代,而且在小数据集上容易发生崩溃

最近的研究中,NAS-FPN提出,主要用来搜索网络中的FPN结构,这样就可以采用预训练好的骨干网络。但是在搜索最优骨干网络仍然是难点。

因此,本文通过解耦权重训练和架构搜索来解决这个问题。将任务解耦成两个阶段,预训练步骤才能经济地结合起来。该框架避免了预训练带来的低效率问题,使骨干搜索具有可行性。

DetNAS的框架包括三个步骤:
(1)在ImgageNet上预训练one-shot超网 (pre-training the one-shot supernet on ImageNet)
(2)在检测数据集上对one-shot超网进行微调;
(3)使用进化算法(EA)对训练好的超级网络进行架构搜索。

本文最终网络称之为DetNASNet,更大的版本为DetNASNet(3.8),并在COCO数据集上分别比(ResNet-50(100) with FPN)高出2.9%和2%。

主要贡献:
1.提出了DetNAS框架,第一次应用于目标检测的骨干搜索。
2.引入了一个强大的搜索空间,它帮助搜索网络在有限的FLOPs复杂度下获得令人鼓舞的精度。
3.DetNASNet and DetNASNet (3.8)在COCO和VOC数据集上的性能超越了人工设计的网络。

2 Related Work

2.1 Object Detection

简单介绍了目标检测现状,关于FPN和检测头的head研究多,引入本文NAS方法来寻找骨干网络。

2.2 Neural Architecture Search

简单介绍了NAS方法,进化算法,强化学习,权重共享(ENAS和DARTS)。

NAS的应用范围:分类,语义分割,目标检测(暂时无在骨干网络搜索)。
之所以没有在目标检测上进行,是因为需要ImageNet上进行昂贵的预训练,同时考虑在小数据集上从头训练会崩溃
本文致力于解决这个问题。

3 Detection Backbone Search

3.1 Motivation

首先,一个NAS的过程可以描述为如下图过程(同DARTS算法):

即在训练集上求解最优权重w,在最优权重w的基础上,求解最优架构a。
在这里插入图片描述
但对于目标检测问题,由于需要预训练微调,公式(2)需要进行更正。
在这里插入图片描述
也就是先在分类训练集预训练一个权重,然后再在检测数据集上微调,再去找最优架构a。wp是预训练权重。w ← wp(a)∗ 也就是在预训练权重的基础上,进而去找到检测的最优w。但是预训练权重wp(a)∗ 无法直接应用于公式(1),因为公式(1)需要的是最优权重,但wp(a)∗ 对于w(a)∗是很重要的。所以,在目标检测任务上使用NAS方法是无法跳过预训练这个步骤的。但是预训练这个非常耗时,因此是不能在每个候选架构,先预训练,然后再搜索,这个不可行。

one-shot方法中,搜索空间被编码在一个超级网络中,包含了所有的候选架构,并且在公共节点上,权重是共享的。通过这种方式,公式(1)和公式(2)更正为公式(4):
在这里插入图片描述
所有单独网络的权重w(α)都继承自超网WA。因此,在目标检测问题上问题再次转化:
在这里插入图片描述
这里作者没有过多交代其中的含义,这里对整体做一个解读。

其实,整体过程公式(5),(6),(7)就是开始总结的三个步骤:分类预训练,检测微调,检测架构搜索。只不过这里的整体结构都换成了超网的权重。

3.2 NAS整体过程 Our NAS Pipeline

DetNAS整体包含三个步骤:

步骤一:基于ImageNet的超网预训练。
在ImageNet网络上预训练后微调是一种常规操作。一些one-shot方法,如DARTS将离散放宽为连续(为了使用梯度下降),在本文采取了一种path-wise方法,保证预训练的网络性能能够在一定程度上反应候选网络。在每次迭代中,只采样一条路径进行前馈和后向传播。没有梯度或权重更新作用于超级网络图中的其他路径或节点。

步骤二:在检测数据集上的超网微调。
超级网络微调也是path-wise方法,但配备了检测头、指标和数据集。在微调过程中,**batch normalization(BN)的参数固定为预训练批统计量。与图像分类不同,目标检测器是用高分辨率图像训练的,为此,在超级网络训练期间用同步批归一化(SyncBN)**取代了传统的BN。

步骤三:在训练的超网上进行架构搜索。
在训练好的超级网络上进行架构搜索。通过进化控制算法从超网中找到最优路径。这一步中必要的细节也是关于BN的。在搜索过程中,对不同的子网络进行逐路采样。问题是,一条路径上的批统计信息应该独立于其他路径。因此,我们需要在每次评估之前重新计算每个单个路径(子网络)的批量统计信息。这个细节在DetNAS中是不可缺少的。我们提取训练集的一个小子集(500张图像)来重新计算要评估的单个路径的批量统计。这一步是为BN积累合理的运行均值和运行方差值。它不涉及梯度反向传播。

还是放这张图清楚点。
在这里插入图片描述

3.3 搜索空间设计 Search Space Desi

  • 13
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值