YOLO-NAS | YOLO新高度,引入NAS,出于YOLOv8而优于YOLOv8

编辑 | Happy
首发 | AIWalker
链接 | https://mp.weixin.qq.com/s/FsWSRguAn2WZKtmPhMbc6g

alt

亮点在哪里?

  • 参考QARepVGG,该方案引入了QSP与QCI模块以同时利用重参数与8-bit量化的优化;
  • 该方案采用 AutoNAC搜索最优尺寸、每个stage的结构,含模块类型、数量以及通道数;
  • 采用 混合量化机制进行模型量化,既考虑了每一层对精度与延迟的影响,也考虑了8-bit与16-bit之间切换对整体延迟的影响;
  • 预训练方案:automatically labeled data, self-distillation, and large datasets

总而言之,YOLO-NAS达成目标检测任务新高度,取得了最佳的精度-延迟均衡。值得一提的事,YOLO-NAS与TensorRT推理引擎完全兼容,且支持INT8量化,达成前所未有的运行时性能。

ModelmAPLatency (ms)
YOLO-NAS S47.53.21
YOLO-NAS M51.555.85
YOLO-NAS L52.227.87
YOLO-NAS S INT-847.032.36
YOLO-NAS M INT-851.03.78
YOLO-NAS L INT-852.14.78

方案简介

受启发于YOLOv6、YOLOv7以及YOLOv8,DECI的研究人员采用AutoNAC搜索比YOLOv8更优的架构,即"We used machine learning to find a new deep learning architecture!"

为什么要用AutoNAC呢? 这是因为手工寻找"正确"结构过于低效且乏味,因此DECI的研究人员采用AutoNAC搜索新的目标检测模型,同时最小化在NVIDIA T4上的推理延迟。

为构建YOLO-NAS,作者构建了一个深不可测的搜索空间(1014)以探索精度-延迟上限。最终,作者从中三样三个"前沿观察点"构建了YOLO-NAS-S,YOLO-NAS-M,YOLO-NAS-L。

训练简介

YOLO-NAS采用了多阶段训练方式,包含(1)预训练:Object365+COCO伪标签数据;(2)知识蒸馏;(3) DFL,即Distribution Focal Loss.

alt

在训练数据方面,作者基于RoboFlow100(由100个不同领域的数据集构成)进行训练以验证其处理复杂检测任务的能力。

alt

下图对比了YOLO-NAS与YOLOv8、YOLOv5、YOLOv7在Roboflow100数据集上的性能。

alt
alt

量化感知

YOLO-NAS采用了量化感知模块与Selective量化以达成最优性能,即基于延迟-精度均衡考虑在特定层进行了"Skipping量化"。当转换为INT8量化模型后,YOLO-NAS具有更少的精度损失(L-M-S的损失分别为0.45,0.65,0.51mAP)。

YOLO-NAS架构和预训练权重定义了低延迟推理的新领域,也是微调下游任务的绝佳起点。

上手体验

看完上面的介绍有没有“一头雾水”的感觉,哈哈,上手体验一把。

Step 1. 安装super-gradients

conda create -n sg python=3.7
conda activate sg
pip install super-gradients

Step 2. 命令行测试

from super_gradients.training import models
from super_gradients.common.object_names import Models

net = models.get(Models.YOLO_NAS_S, pretrained_weights='coco')
net.predict("bus.jpg").show()

不出意外的话,你就可以看到下面的输出结果了。

alt

当然,如果出了意外,可以试试用ONNX推理,导出只需一行代码。

models.convert_to_onnx(model=net, input_shape=(3, 640, 640), out_path='yolo-nas-s.onnx')

相关推理code可参考"YOLOv8-TensorRT"中的推理微调一下即可。需要注意以下两点,通过官方工具导出的"bboxes"已经是"xyxy"格式了,所以不需要再执行make_grid, distance2bbox等操作了,直接进行"NMS"即可。但是,OpenCV的NMS要求输入的BBOXES格式为xywh,所以还需要再改一下,^^哈哈哈^^

alt

最后,附上YOLO-NAS的网络结构示意图,这里仅给出了YOLO-NAS-S的示意图,另外两个跟这个整体类似,区别在于Block改为了YOLOv7的ELAN且通道数更多。

alt

最后的最后,如果只想体验,不想去安装super_gradients,可以在公众号后台回复"YOLO-NAS"获取资源(ONNX模型、ORT+OCV推理脚本)。

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/102798.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

el-tree组件的锚点链接

el-tree部分&#xff1a; <el-tree:default-expand-all"true":data"anchorList":props"defaultProps"node-click"handleNodeClick"/> 组件内部部分&#xff1a; <div class"header" :id"content obj.id&q…

2023国赛数学建模A题思路分析 - 定日镜场的优化设计

# 1 赛题 A 题 定日镜场的优化设计 构建以新能源为主体的新型电力系统&#xff0c; 是我国实现“碳达峰”“碳中和”目标的一项重要 措施。塔式太阳能光热发电是一种低碳环保的新型清洁能源技术[1]。 定日镜是塔式太阳能光热发电站(以下简称塔式电站)收集太阳能的基本组件&…

基于亚马逊云科技打造的游戏AIGC专业版,创梦天地快速上线AI生图服务

生成式人工智能&#xff08;以下简称“生成式AI”&#xff09;的热潮正在全球范围内掀起新一轮的科技革命&#xff0c;释放出巨大的商业价值。各类“AI绘画神器”的涌现&#xff0c;为创意行业带来了翻天覆地的变化。 在游戏领域&#xff0c;生成式AI技术也吸引了玩家们的广泛关…

SAP-PP:基础概念笔记-5(物料主数据的工作计划视图)

文章目录 前言一、工作计划视图Production Supervisor 生产管理员生产计划参数文件序列号参数文件&#xff1a;序列化级批次管理批次管理工厂&#xff1a;需要批量记录&#xff1a;批量输入&#xff1a;不足交货允差 Underdelivery Tolerance&#xff1a;过度交货允差 Overdeli…

【电路参考】缓启动电路

一、外部供电直接上电可能导致的问题 1、在热拔插的过程中&#xff0c;两个连接器的机械接触&#xff0c;触点在瞬间会出现弹跳&#xff0c;电源不稳&#xff0c;发生震荡。这期间系统工作可能造成不稳定。 2、由于电路中存在滤波或大电解电容&#xff0c;在上电瞬间&#xff…

BMS电池管理系统——电芯需求数据(三)

BMS电池管理系统 文章目录 BMS电池管理系统前言一、有什么基础数据二、基础数据分析1.充放电的截至电压2.SOC-OCV关系表3.充放电电流限制表4.充放电容量特性5.自放电率 总结 前言 在新能源产业中电芯的开发也占有很大部分&#xff0c;下面我们就来看一下电芯的需求数据有哪些 …

web请求cookie中expires总结

用意 cookie 有失效日期 "expires"&#xff0c;如果还没有过失效期&#xff0c;即使重新启动电脑&#xff0c;cookie 仍然不会丢失 注意&#xff1a;如果没有指定 expires 值&#xff0c;那么在关闭浏览器时&#xff0c;cookie 即失效。 设置 如果cookie存储时间大…

Springboot 实践(14)spring config 配置与运用--手动刷新

前文讲解Spring Cloud zuul 实现了SpringbootAction-One和SpringbootAction-two两个项目的路由切换&#xff0c;正确访问到项目中的资源。这两个项目各自拥有一份application.yml项目配置文件&#xff0c;配置文件中有一部分相同的配置参数&#xff0c;如果涉及到修改&#xf…

Redis持久化、主从与哨兵架构详解

Redis持久化 RDB快照&#xff08;snapshot&#xff09; 在默认情况下&#xff0c; Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中。 你可以对 Redis 进行设置&#xff0c; 让它在“ N 秒内数据集至少有 M 个改动”这一条件被满足时&#xff0c; 自动保存一次数…

java.lang.Exception: No runnable methods

无可执行test方法异常&#xff0c;报错为&#xff1a; 1.查看是否添加了Test注解在执行的方法上 2.查看测试类的注解 3.查看test类的导包&#xff0c;一定要是junit的。

【爬虫】8.1. 使用OCR技术识别图形验证码

使用OCR技术识别图形验证码 文章目录 使用OCR技术识别图形验证码1. OCR技术2. 准备工作2.1. tesserocr安装异常 3. 验证码图片爬取4. 无障碍识别测试5. 错误识别6. 识别实战&#xff1a;7. 参数设置 图形验证码是最早出现的验证方式&#xff0c;现在依然很常见&#xff0c;一般…

【线程池】面试被问到线程池参数如何配置时该如何回答

前言 没有基于业务场景&#xff0c;直接抛出这个问题&#xff0c;等同于耍流氓。 八股文告诉我们CPU密集型就核心数1&#xff0c;IO密集型就核心数*2&#xff0c;那么真实业务中该怎么去配置呢。 方法论还是有的 1.需要分析线程池执行的任务的特性&#xff1a; CPU 密集型还是 …