DAMO-YOLO:兼顾速度与精度的高效目标检测框架

一、目标检测简介

目标检测的定义是在图像/空间中定位出感兴趣物体的位置和大小。

通常情况下,我们输入图像、视频或点云数据,然后输出物体的类别和检测框的坐标。下面的图片是一个图像目标检测的示例。目标检测在许多应用场景中都非常常见,比如在自动驾驶中进行车辆和行人检测,以及在码头管理中进行船只检测。这些都是目标检测的直接应用。目标检测也是许多计算机视觉应用的基础任务,比如工厂中的入侵检测和人脸识别,这些任务都需要基于行人检测和人脸检测来完成。可以看出,目标检测在日常生活中有许多重要的应用,也在计算机视觉领域中扮演着重要的角色,因此这是一个竞争激烈的领域

DAMO-YOLO:兼顾速度与精度的高效目标检测框架

根据我们在实际使用过程中的经验积累,目前存在许多具有不同特色的目标检测框架。然而,我们发现这些框架在实际应用中仍然存在以下几个问题:

① 模型尺度变化不够灵活,难以适应不同的算力场景。如 YOLO 系列的检测框架,一般只提供 3-5 个模型的计算量,从十几到一百多 Flops 数量级,难以覆盖不同的算力场景。

多尺度检测能力较弱,尤其是对小物体的检测性能较差,这限制了模型的应用场景。例如在无人机检测场景中,它们的效果通常不太理想

③ 速度/精度曲线不够理想,速度和精度难以同时兼容。

针对上述情况,我们设计并开源了 DAMO-YOLO。DAMO-YOLO 主要着眼于工业落地。相比于其他的目标检测框架具有三个明显的技术优势:

① 整合了自研 NAS 技术,可低成本自定义模型,让用户充分发挥芯片算力。

通过结合Efficient RepGFPN和HeavyNeck模型设计范式,可以显著提升模型的多尺度检测能力,拓宽模型的应用范围

③ 提出了全尺度通用的蒸馏技术,能够对小模型、中模型、大模型无痛地提升精度。

DAMO-YOLO:兼顾速度与精度的高效目标检测框架

下面我们将从 3 个技术优势的价值进一步分析 DAMO-YOLO。

二、DAMO-YOLO 技术价值

DAMO-YOLO 实现低成本模型定制化,是基于自研的 MAE-NAS 算法。可以根据延迟或者 FLOPS 预算来低成本的定制化模型。它无需模型训练,也无需真实数据参与,即可给出模型的评估打分,模型搜索成本低。以 FLOPS 为目标,可以充分利用芯片算力。以时延作为预算进行搜索,则非常适用于各种对时延要求严格的场景。我们还提供了支持不同硬件延迟场景的数据库构建方案,方便大家完成使用延迟作为目标进行搜索

由下图展示了如何用时延进行模型搜索。首先针对目标芯片或目标设备采样,得到所有可能用到的算子的时延,根据该时延数据对模型进行延迟预测。如果预测的模型量级符合预设的目标,模型会进入到后续模型更新和计算分数。最后经过迭代更新,得到符合时延约束的最优模型。

DAMO-YOLO:兼顾速度与精度的高效目标检测框架

接下来介绍如何增强模型的多尺度检测能力。DAMO-YOLO 结合提出 Efficient RepGFPN,以及创新性的 HeavyNeck,显著提升了多尺度的检测能力。Efficient RepGFPN 能够高效地完成多尺度特征融合。HeavyNeck 范式,指的是将模型的 FLOPS 大量地分配到特征融合层。如模型 FLOPS 配比表。以 DAMO-YOLO-S 为例,neck 的计算量占到了将近整个模型的一半,这和其他的模型把计算量主要放在 backbone 有显著的差异。

DAMO-YOLO:兼顾速度与精度的高效目标检测框架

最后介绍蒸馏模型。蒸馏指将大模型的知识转移到小模型上,在不带来推理负担的情况下,提升小模型的性能。模型蒸馏是一个提高检测模型效率的利器,但是学术界和工业界探索大多局限于大模型,缺乏对小模型的蒸馏方案。DAMO-YOLO 则提供了一套对全尺度模型都通用的蒸馏。此方案不仅能够实现全尺度模型的显著提点,并且鲁棒性高,而且使用动态权重无需调参,一键式脚本即可完成蒸馏。另外此方案对异构蒸馏也是鲁棒的,这对于前文中提到的低成本自定义模型来说意义重大。在 NAS 模型中并不能保证搜索得到的小模型和大模型的结构相似度。如果有一个异构鲁棒的蒸馏就可以保证充分发挥 NAS 和蒸馏的优势。下图中给出了我们在蒸馏上的性能,可以看到无论在 T 模型、S 模型还是 M 模型上,蒸馏后都有稳定提升。

DAMO-YOLO:兼顾速度与精度的高效目标检测框架

三、DAMO-YOLO 应用价值

根据以上技术价值,我们可以转化出多少应用价值呢?接下来将会对DAMO-YOLO与其他当前最先进的检测框架进行比较

DAMO-YOLO 与当前 SOTA 相比,同精度下模型提速 20%-40%,计算量减少15%-50%,参数减少 6%-50%,全尺度涨点明显,适用范围广。此外,在小物体和大物体上都有明显的提升。

通过比较以上数据,可以看出DAMO-YOLO具有快速的速度和低的Flops,适用范围广泛。此外,它还可以根据算力自定义模型,提高芯片利用效率

相关模型已经上线 ModelScope,通过三到五行代码的配置就可以进行推理和训练,大家可以体验使用,使用过程中有任何问题或者意见欢迎到评论区留言。

DAMO-YOLO:兼顾速度与精度的高效目标检测框架

下面将围绕DAMO-YOLO的三个技术优势,介绍其背后的原理,以帮助大家更好地理解和使用DAMO-YOLO

四、DAMO-YOLO 原理简介

首先介绍低成本模型定制化能力的关键技术 MAE-NAS。它的基本思想是把一个深度网络看作是一个有连续状态空间的信息系统,并找到能够最大化信息系统的熵。

网络建模思路如下:将网络 F 的拓扑结构抽象为图 G=(V,E),其中顶点 V 表示特征,边 E 表示各种算子。在此基础上,可以用 h(v) 和 h(e) 来分别表示顶点和边中的值,就可以产生这样的一个集合 S,定义了网络的连续状态空间,而集合 S 的熵可以代表网络或者信息系统 F 的总信息量。其中顶点的信息量衡量了网络的表达能力,而边中的信息量也是边的熵,衡量了网络的复杂度。对于 DAMO-YOLO 目标检测任务来说,我们主要关注的是网络的表达能力能够最大化。在实际的应用中只关注网络特征的熵。根据高斯分布微分熵,以及高斯熵上界定理,我们使用特征图的方差来近似网络特征熵的上界。

在实际操作中,我们首先用标准的高斯分布对网络 backbone 的权重进行初始化,同时用一个标准的高斯噪声图片作为输入。在高斯噪声送入网络前向传递后,可以得到若干个特征。然后计算每个尺度特征的单尺度熵,即方差,随后通过加权得到多尺度熵。在加权过程中,用先验系数来平衡不同尺度特征表达能力,此参数一般会被设置为[0,0,1,1,6]。为什么会设置这样,原因如下:因为在检测模型中,一般特征都是分五个stage,即五种不同的分辨率,从 1/2 到 1/32。为了保持高效的特征利用,我们只利用后面 3 个 stage。所以其实前两个 stage 不参与到模型的 prediction 中,所以是 0 和 0。另外三个我们经过广泛的实验,发现 1,1,6 是一个较好的模型配比。

DAMO-YOLO:兼顾速度与精度的高效目标检测框架

基于上述核心原理,我们可以用网络的多尺度熵作为性能代理,以净化算法作为基本框架进行网络结构搜索,这就构成了完整的 MAE-NAS。NAS 有非常多的优势。首先它支持多种推理 budget 的限制,可以用 FLOPS,参数量,latency 还有网络层数进行一个模型搜索。其次,它还支持非常多的细粒度网络结构的变异。因为这里用进化算法去进行网络搜索,所以如果支持的网络结构的变异体越多,搜索时自定义化程度和灵活程度都会更高。另外,为了方便用户自定义搜索过程,我们提供了官方的教程。最后,也是最重要的一点,MAE-NAS 是 zero-short,即它的搜索不需要任何实际的数据参与,不需要任何的实际模型训练。它在 CPU 上进行几十分钟的搜索,就可以产出在当前的限制条件下的一个最优网络结果。

在 DAMO-YOLO 中,我们使用 MAE-NAS 以不同时延作为搜索目标搜索 T/S/M 模型的骨干网络;对搜索出的骨干网络基础结构进行包装,小模型使用 ResStyle,大模型使用 CSPStyle。

从下表中可以看出 CSP-Darknet 是一个使用 CSP 结构的人工设计的网络,在 YOLO v 5 /V6 中也取得了一些广泛的应用。我们使用 MAE-NAS 产生一个基础结构,再用 CSP 包装之后,发现模型在速度和精度上都有明显的提升。另外在小模型上大家可以看到 MAE-ResNet 形式,精度会更高。在大模型上使用 CPS 结构会有一个比较明显的优势,可以达到 48.7。

DAMO-YOLO:兼顾速度与精度的高效目标检测框架

如何使用 MAE-NAS 进行骨干网络的搜索?让我们来介绍一下我们的 TinyNAS 工具箱,它已经在 ModelScope 上线了,通过网页可视化配置,您可以轻松获得所需的模型。同时,MAE-NAS 也已在 GitHub 上开源,有兴趣的同学可以基于开源代码,以获得更大的自由度来搜索所需的模型

DAMO-YOLO:兼顾速度与精度的高效目标检测框架

接下来介绍 DAMO-YOLO 如何提升多尺度检测能力,它是依赖于网络的不同尺度特征的融合。在以往的检测网络中,不同尺度的特征,深度差异较大。比如大分辨率特征用来检测小物体,但是它的特征深度又较浅,这个时候会影响小物体检测性能。

我们在 ICLR2022 提出的一个工作——GFPN,以相同的优先级同时处理高层语义信息和低层空间信息,对多尺度特征的融合互补非常友好。在 GFPN 的设计中,我们首先引入一个 skip layer,目的是为了使得 GFPN 能够设计得更深。我们使用了一个 log2n-link 来进行特征复用,减少冗余。

Queen fusion的目的是为了增加不同尺度特征和不同深度特征之间的交互融合。在Queen fusion中,每个节点不仅接收来自其斜上方和斜下方的不同尺度特征,还接收来自同一特征深度上的不同尺度特征,从而大大增加了特征融合时的信息量,促进了多尺度信息在同一深度上的融合

DAMO-YOLO:兼顾速度与精度的高效目标检测框架

尽管GFPN具有特征复用和独特的连接设计,从而提高了模型的精度,但由于我们的skip layer和Queen fusion在多尺度特征节点上进行了融合运算,并进行了上采样和下采样运算,这大大增加了推理的时间,难以满足工业界的实施要求。因此,实际上GFPN是一种FLOPS高效但延迟低效的结构。针对GFPN的一些缺陷,我们进行了分析,将原因归结如下:

针对这些问题,我们进行了相应的优化,提出了 Efficient RepGFPN。

DAMO-YOLO:兼顾速度与精度的高效目标检测框架

在进行优化时,可以主要分为两类,一类是对拓扑结构进行优化,另一类是对融合方式进行优化

拓扑结构优化方面,Efficient RepGFPN 在不同尺度特征下使用不同的通道数,从而在轻量级计算量的约束下,能够灵活地控制高层特征和低层特征的表达能力。在 FLOPS 和延迟近似的情况下,灵活的配置能够得到最好的精度和速度效率。另外,我们还对 queen fusion 中的一个连接进行了效率分析,发现上采样算子负担极大,但是精度提升较小,远远低于下采样算子的收益。于是我们移除了 queen fusion 中的上采样连接。表格中可以看到,斜下的勾其实是上采样,往斜上的勾是下采样,可以对照左侧的图去看,小分辨率逐渐往下变大分辨率,向右下的连接表示的是把小分辨率特征上采样连接到大分辨率上,融合到大分辨率特征上面。最后的结论就是,下采样算子的收益更高,上采样算子收益非常低,所以我们移除了 Queen feature 中的上采样连接,来提高整个 GFPN 的效率。

DAMO-YOLO:兼顾速度与精度的高效目标检测框架

在融合方式方面,我们也进行了一些优化。首先固定融合节点的数目,这样每个模型里面只做两次融合,而不会像之前一样通过不断地堆叠融合来打造一个更深的 GFPN,这样避免了串行链路的不断增长导致的并行效率降低。另外我们专门设计了 fusion block 来进行特征融合。fusion block 中我们引入重参数化机制和多层聚合连接等技术,进一步提升融合效果。

DAMO-YOLO:兼顾速度与精度的高效目标检测框架

除了颈部之外,检测头也是检测模型的一个重要组成部分。它以颈部输出的特征作为输入,负责输出回归和分类的结果。我们设计了实验来验证Efficient RepGFPN和检测头之间的权衡,发现在严格控制模型延迟的情况下,Efficient RepGFPN的深度越深越好。因此,在网络设计中,我们主要将计算量分配给Efficient RepGFPN,而检测头部分只保留一层用于分类和回归任务的线性投影。我们将只有一层分类和回归一层非线性映射层的检测头称为ZeroHead。而将计算量主要分配给颈部的设计模式称为HeavyNeck范式

最终 DAMO-YOLO 的模型结构如下图所示

DAMO-YOLO:兼顾速度与精度的高效目标检测框架

以上就是模型设计中的一些思考。最后来介绍一下蒸馏方案。

DAMO-YOLO 中取 Efficient RepGFPN 的输出特征进行蒸馏。student 特征会先经过alignmodule,把它的通道数向 teacher 对齐。为了去除模型本身的偏置,student 和 teacher 的特征会经过无偏的 BN 进行归一化,再进行蒸馏 loss 计算。在蒸馏时,我们观察到过大的 loss 会阻碍 student 本身分类分支的收敛。于是我们选择使用一个随着训练不断衰减的动态权重。从实验结果中看,动态均蒸馏权重对于 T/S/M 模型都是鲁棒的。

DAMO-YOLO的蒸馏链条是L蒸馏M,M蒸馏S。值得一提的是,当M蒸馏S时,M使用CSP包装,而S使用Res包装,从结构上来说,M和S是异构的。然而,使用DAMO-YOLO的蒸馏方案,M蒸馏S后也能获得1.2个点的提升,表明我们的蒸馏方案对异构也是鲁棒的。综上所述,DAMO-YOLO的蒸馏方案调参自由,支持全系列模型,并且对异构具有鲁棒性

DAMO-YOLO:兼顾速度与精度的高效目标检测框架

最后我们对DAMO-YOLO进行总结。DAMO-YOLO结合了MAE-NAS技术,可以以低成本进行模型自定义,并充分发挥芯片算力。同时,结合Efficient RepGFPN和HeavyNeck范式,提升了多尺度检测能力,使得模型的应用范围更广泛。此外,通过全尺度蒸馏方案,还可以进一步提高模型的效率

DAMO-YOLO:兼顾速度与精度的高效目标检测框架

DAMO-YOLO 模型已在 ModelScope 上线,并在 github 开源,欢迎大家试用。

五、DAMO-YOLO发展计划

DAMO-YOLO 刚发布不久,还有很多地方需要改进和优化。我们计划在短期内完善部署工具和支持 ModelScope。此外,我们还将基于团队内的竞赛冠军方案提供更多应用示例,例如无人机小目标检测和旋转目标检测。我们还计划推出更多的范例模型,包括面向端上的 Nano 模型和云上的 Large 模型。最后,希望大家持续关注并积极提供反馈

DAMO-YOLO:兼顾速度与精度的高效目标检测框架