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

人工智能 算法
本文将分享速度与精度兼容的高效目标检测框架 DAMO-YOLO。

一、目标检测简介

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

一般情况下,输入图像、视频或者点云,输出物体的类别和检测框坐标。左下方这张图片就是一个对图像进行目标检测的示例。目标检测应用场景非常多,比如自动驾驶场景中车辆行人检测,码头管理中常用泊船检测。这两者都是对目标检测的直接应用。目标检测同时还是很多 CV 应用的基础任务,比如工厂用到的侵入检测,和人脸识别,这些都需要行人检测和人脸检测作为基础才能够完成检测任务。可以看出目标检测在日常中有很多重要的应用,在 CV 落地中的地位也十分重要,因此这是一个竞争十分激烈的领域。

图片

当前已经有很多各有特色的目标检测框架。根据我们在实际使用过程中的经验积累,我们发现当前检测框架在实际应用时仍然有以下几个痛点:

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

② 多尺度检测能力弱,特别是小物体检测性能较差,这使得模型应用场景十分受限。比如在无人机检测场景,它们的效果往往都不太理想。

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

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

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

② 结合 Efficient RepGFPN 以及 HeavyNeck 模型设计范式,能够很大程度上提高模型的多尺度检测能力,扩大模型应用范围。

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

图片

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

二、DAMO-YOLO 技术价值

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

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

图片

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

图片

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

图片

三、DAMO-YOLO 应用价值

基于上述技术价值,可以转化出多少应用价值呢?下面将介绍 DAMO-YOLO 与当前其它 SOTA 检测框架的对比。

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

从以上数据对比可以看出,DAMO-YOLO 速度快、Flops 低,适用范围广;并且可以针对算力自定义模型,提高芯片利用效率。

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

图片

接下来围绕 DAMO-YOLO 的 3 点技术优势,介绍它背后的原理,帮助大家更好地理解和使用 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 是一个较好的模型配比。

图片

基于上述核心原理,我们可以用网络的多尺度熵作为性能代理,以净化算法作为基本框架进行网络结构搜索,这就构成了完整的 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。

图片

如何使用 MAE-NAS 进行 backbone 的搜索?这里介绍一下我们的 TinyNAS 工具箱,它已经在 ModelScope上线了,通过网页可视化配置就可以轻松得到想要的模型。同时, MAE-NAS 也已经在 github上开源,有兴趣的同学可以以开源代码为基础,更大自由度的搜索想要的模型。

图片

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

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

Queen fusion 是为了增加不同尺度特征和不同深度特征的交互融合。Queen fusion 中每一个节点除了接收它斜上方和斜下方的不同尺度特征,还接收同一特征深度上的不同尺度特征,极大的增加了特征融合时的信息量,促进了多尺度信息在同一深度上的融合。

图片

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

① 首先,不同尺度特征其实是共享通道数的,它存在很多的特征冗余,网络配置也不够灵活。

② 第二,在 Queen feature 中有上采样和下采样连接,上采样和下采样算子耗时提升显著。

③ 第三,在节点堆叠的时候,同特征深度上的串行连接降低了 GPU 的并行效率, 并且每次堆叠带来的串行路径的增长非常显著。

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

图片

在优化时,主要分为两类,一类是拓扑结构的优化,另一类是融合方式的优化。

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

图片

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

图片

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

最终 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 的蒸馏方案调参 free ,支持全系列模型,并且异构鲁棒。

图片

后我们再对 DAMO-YOLO 进行一下总结。DAMO-YOLO 结合 MAE-NAS 技术,能够进行低成本的模型自定义,充分发挥芯片算力;结合 Efficient RepGFPN 以及 HeavyNeck 范式,提升了多尺度检测能力,模型应用范围广泛;借助全尺度蒸馏方案,可以进一步提升模型效率。

图片

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

五、DAMO-YOLO发展计划

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

图片

责任编辑:姜华 来源: DataFunTalk
相关推荐

2023-10-07 08:12:05

DAMO-YOLO算法

2024-07-02 10:04:09

2024-06-13 11:53:40

2024-08-15 09:50:44

2024-07-03 10:46:10

2023-11-13 22:17:54

YOLO-NAS目标检测

2024-06-19 09:54:58

2024-10-09 17:02:34

2024-06-26 10:16:41

2024-08-20 09:30:00

2024-06-21 10:40:00

计算机视觉

2024-07-30 09:50:00

深度学习目标检测

2017-10-02 16:13:47

深度学习目标检测计算机视觉

2013-11-07 09:47:16

2024-07-30 09:14:13

模型数据

2022-07-20 10:21:11

C语言代码内存

2020-11-24 17:25:19

模型人工智能深度学习

2024-07-11 12:30:00

2024-06-25 09:31:02

2024-07-30 12:30:00

点赞
收藏

51CTO技术栈公众号