作者 | Random  编辑 | 3D视觉开发者社区

DAMO-YOLO 是阿里新推出来的目标检测框架,兼顾模型速度与精度,其效果超越了目前的一众 YOLO 系列方法,且推理速度更快。DAMO-YOLO 还提供高效的训练策略和便捷易用的部署工具,能帮助开发者快速解决工业落地中的实际问题。

https://github.com/tinyvision/damo-yolo (上图源自官网)

本文提出了一种快速而精确的目标检测方案DAMO-YOLO,它取得了比其他YOLO系列方案更优的性能。DAMO-YOLO在YOLO的基础上引入了一些新技术:

  • NAS搜索高效骨干:采用MAE-NAS在低延迟高性能约束下进行骨干网络搜索,得到了带有SPP与Focus模块的类ResNet/CSP架构;

  • RepGFPN+轻量头:在这方面,延续了"Large Neck, Small Head"理念,引入了GFPN、ELAN以及重参数进行优化升级;

  • AlignedOTA:它用于解决标签分类过程中的恶不对齐问题;

  • 蒸馏增强:用于进一步提升检测器的性能。

基于上述新技术,作者构建了不同尺寸的模型以满足不同场景需求:DAMO-YOLO-Tiny/Small/Medium。在T4 GPU上,它们分别取得了43.06/46.8/50.0的mAP指标,同时推理速度分别为2.78/3.83/5.62。该方案与其他YOLO方案(YOLOv5, YOLOv6, YOLOv7, YOLOX, PP-YOLOE)的性能对比可参考上图。

本文方案

上图为DAMO-YOLO整体架构示意图,它由MAE-NAS搜索骨干、GiraffeNeck样式的Neck、GFL样式的ZeroHead以及AlignedOTA标签分配策略构成,此外还采用了蒸馏技术进一步提升模型性能。

MAE-NAS骨干

在骨干网络方面,作者采用MAE-NAS技术在不同计算负载约束下进行搜索。作者采用新的搜索模块k1kx(类似DarkNet53所采用的模块)构建搜索空间,直接采用延迟作为评估准则。在搜索完成后,作者对所得模型添加了SPP、Focus以及CSP等模块

上表给出了CSP-DarkNet与所提方案搜索得到的模型性能对比,上述指标验证了MAE-NAS骨干的有效性。注:MAE-ResNet表示仅引入了SPP与Focus,MAE-CSP意味着还引入了CSP模块。考虑到性能与速度均衡问题,Tiny与Small版方案骨干采用的是MAE-ResNet,Medium版方案骨干采用的是MAE-CSP

Efficient RepGFPN

FPN旨在与骨干网路输出的多分辨率特征进行信息聚合,它是目标检测非常重要且有效的部件。传统的FPN引入了一个top-down路径融合多尺度特征;PAFPN则在FPN基础上引入了额外的bottom-up路径进行信息聚合;BiFPN则移除了仅有一个输入边的节点,并在同级节点之间添加了跳过连接。GiraffeDet所提GFPN提供了另一种对高层与底层信息高效交互的方案。关于GiraffeDet的介绍可参考:小目标到大目标一网打尽!阿里提出首个轻骨干重Neck的轻量级目标检测器GiraffeDet。

直接采用GFPN对YOLO系列方案中的PAFPN进行替换后可以取得更高的性能,但其延迟也变得更高。通过分析,主要原因可以归因到以下几个维度:

  • 不同尺度的特征具有相同的维度;

  • queen融合操作无法满足实时检测模型的需求;

  • 基于卷积的跨尺度融合不够高效。

基于GFPN,作者提出了Efficient-RepGFPN,改进方向包含以下几点:

  • 由于不同尺度特征FLOPs的大差异,很难在有效计算复杂度下控制不同特征图具有相同的维度。因此,作者对不同尺度特征设置不同的维度。相关结果可参考下表,通过更细粒度的控制通道数可以取得更高的精度

  • GFPN通过queen进行特征交互,但同时引入了额外的上采样与下采样操作。从下图表示3可以看到:额外上采样操作会导致0.75ms推理延迟,而性能提升仅为0.3mAP。话说,这里的箭头是"左灯右行"吗???因此,作者移除了queen融合过程中的上采样操作。

  • 在特征融合模块中,作者首先采用CSPNet替换原始的 3x3 卷积,取得了4.2mAP指标提升;进一步引入重参数机制与ELAN。在不会导致额外巨大计算负担前提下,模型性能大幅提升(可参考上图表4)。

ZeroHead与AlignOTA

"解耦头"已在近来优异检测方案中得到广泛应用,尽管这些方案具有更高AP,但延迟也大幅提升。为平衡延迟与性能,作者进行了一系列实验以评估Neck与Head的重要性,结果见下表。可以看到:"Large Neck + Small Head"可以取得更优性能

有鉴于此,作者丢弃了"解耦头"方案,反而仅保留一个任务投影层,即一个线性层进行分类,一个线性层进行回归。由于该检测头并无其他可训练层,故作者将所得检测头称之为ZeroHead。

在后续的损失中,参考GFocal,作者采用QFL进行分类监督,采用DFL与GIOU进行回归监督。DAMO-YOLO的损失函数定义如下:

除了Head与Loss外,标签分类也是检测器训练过程中一个非常重要的成分。相比静态方案,动态标签分配可以根据预测与GT之间的分配损失进行标签分类,其中代表方案有OTA与TOOD。尽管分类与回归不对齐问题已得到广泛研究,但标签分配中的不对齐却鲜少被提到。为解决该问题,作者定义了如下方案:

Distillation Enhancement

知识蒸馏是一种有效的涨点方案,但在YOLO系列方案中有时难以取得显著改善(超参难以优化,特征包含太多噪声)。在DAMO-YOLO中,作者首次让蒸馏在所有尺寸模型上再次伟大

上表对比了不同蒸馏方案的性能对比,很明显CWD与所提模型更切合。作者采用的蒸馏包含两个阶段:

  • strong mosaic域,采用老师模型对学生模型进行蒸馏(约284epoch);

  • no mosaic域,学生模型进行微调(约16epoch)。

本文实验

上表给出了不同YOLO方案的性能对比(加*表示使用了蒸馏技术),可以看到:在精度/速度方面,DAMO-YOLO超越了其他所有 YOLO系列方案

快速体验

大家可以5行代码完成体验DAMO-YOLO(当然,你需要先安装modelscope)。

from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
object_detect = pipeline(Tasks.image_object_detection,model='damo/cv_tinynas_object-detection_damoyolo')
img_path ='https://modelscope.oss-cn-beijing.aliyuncs.com/test/images/image_detection.jpg'
result = object_detect(img_path)

版权声明:本文为奥比中光3D视觉开发者社区特约作者授权原创发布,未经授权不得转载,本文仅做学术分享,版权归原作者所有,若涉及侵权内容请联系删文。

3D视觉开发者社区是由奥比中光给所有开发者打造的分享与交流平台,旨在将3D视觉技术开放给开发者。平台为开发者提供3D视觉领域免费课程、奥比中光独家资源与专业技术支持。

加入【3D视觉开发者社区】学习行业前沿知识,赋能开发者技能提升!
加入【3D视觉AI开放平台】体验AI算法能力,助力开发者视觉算法落地!

DAMO-YOLO | 超越所有YOLO,5行代码即可体验相关推荐

  1. Matlab:连续按键、移动鼠标、鼠标点击、鼠标连点、输入字符,10行代码即可。

    Matlab也可以实现按键J灵的一些基本功能,比如:连续按键.移动鼠标.鼠标点击.鼠标连点和输入字符!其中, "连续按键":指间隔一定的时间(如:0.1s)按一下某个按键(如:键盘 ...

  2. 免费开源的高精度OCR文本提取,支持 100 多种语言、自动文本定位和脚本检测,几行代码即可实现离线使用(附源码)

    免费开源的高精度OCR文本提取,支持 100 多种语言.自动文本定位和脚本检测,几行代码即可实现离线使用(附源码). 要从图像.照片中提取文本吗?是否刚刚拍了讲义的照片并想将其转换为文本?那么您将需要 ...

  3. python爬虫——三步爬得电影天堂电影下载链接,30多行代码即可搞定:

    python爬虫--三步爬得电影天堂电影下载链接,30多行代码即可搞定: 本次我们选择的爬虫对象是:https://www.dy2018.com/index.html 具体的三个步骤:1.定位到202 ...

  4. 【高代码文件格式API】道宁为您提供文件格式API集——Aspose,只需几行代码即可创建转换和操作100多种文件格式

    Aspose系列产品是 高代码文件格式API 使您的应用程序能够处理 适用于所有主要平台的 Word.Excel.PDF.PowerPoint.Outlook 和100多种其他文件格式 Aspose提 ...

  5. Python到底有多强大?只需 15 行代码即可进行人脸检测

    无论你是最近开始探索OpenCV还是已经使用它很长一段时间,在任何一种情况下,您都一定遇到过"人脸检测"这个词.随着机器变得越来越智能,它们模仿人类行为的能力似乎也在增加,而人脸检 ...

  6. 利用Python只需3行代码即可生成验证码

    现在验证码的种类真的是越来越多,短信验证码.语音验证码.图片验证码.滑块验证码 ... 我们在 PC 的网页端或者手机上的 app 进行登录或者注册时,应该总会遇见图片验证码,比如下面这类: 很多人学 ...

  7. Vue-3D-Model:几行代码即可构造出炫酷三维场景

    一个用来展示三维模型的Vue组件,用最简单的方式在网页中展示三维模型,解决模型视角控制.鼠标事件等一系列问题. 项目地址:https://github.com/hujiulong/vue-3d-mod ...

  8. Wechaty Plugin|实现一个微信机器人几行代码即可

    写在前面 晚到几个月的帖子,这几个月有些忙,没顾上,关于为什么要开发微信机器人.技术选型.Token申请.一期简单的开发可以看我4个月之前发布的文章 Wechaty|NodeJS基于iPad协议手撸一 ...

  9. Python爬虫:想听榜单歌曲?使用BeautifulSoup库只需要14行代码即可搞定

    目录 BeautifulSoup库 安装BeautifulSoup库 BeautifulSoup库简介 选择解释器 基础用法 节点选择器 获取节点名称属性内容 获取所有子节点 获取所有子孙节点 父节点 ...

最新文章

  1. python local global_python global与nonlocal关键字
  2. SSL为Windows server 2008 IIS7进行加密连接
  3. linux:exec族函数, exec族函数配合fork使用,system 函数,popen 函数
  4. android+使用bmob冲突,bmob开发android遇到的问题
  5. 2016年程序员如何提高自己的方法有哪些?
  6. 20190925 On Java8 第二十二章 枚举
  7. 关于MySQL 通用查询日志和慢查询日志分析
  8. 一位同行工作6年的总结
  9. SciPy 科学计算基础
  10. Android的子线程(Thread)和Service、IntentService的区别?
  11. 跨国企业如何更好地从云革命中获益?
  12. ZenBrush(禅宗画笔)反编译后二次开发(电子签名_毛笔带笔锋的效果)
  13. 低成本无线门铃芯片_无线门铃ic选型分析
  14. java sql语句之插入语句的拼接规则
  15. 【英语】动词时态与语态
  16. hexo图片展示-blog图床迁移至七牛云
  17. 心流体验:与挑战颉颃的乐趣
  18. 基于人工智能的滚动轴承PHM方法综述
  19. mysql 生成随机数 —— 数字、字符串、手机号、日期、姓名、一段中文汉字
  20. 抖音不做真人出镜,打造百万粉运营攻略!

热门文章

  1. k8s集群中部署kong网关与konga
  2. dd命令 skip 和 seek参数理解
  3. 【前端测试与集成】使用mocha和sinon进行单元测试
  4. java集合源码分析
  5. 10 个Web3 设计灵感网站
  6. 计算机图形学(一) 视频显示设备_7_光栅扫描系统
  7. C#网络TCP客户端的实现
  8. 计算机与投影仪的记录,投影仪和电脑的连接及PPT播放
  9. 计算机桌面任务栏怎样显示输入法,计算机中任务栏的输入法无法切换怎么处理...
  10. 【python练习】羊车门问题