0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Yolo系列模型的部署、精度对齐与int8量化加速

jf_pmFSk4VX 来源:GiantPandaCV 2023-11-23 16:40 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Yolo系列模型的部署、精度对齐与int8量化加速

大家好,我是海滨。写这篇文章的目的是为宣传我在23年初到现在完成的一项工作---Yolo系列模型在TensorRT上的部署与量化加速,目前以通过视频的形式在B站发布(不收费,只图一个一剑三连)。

麻雀虽小但五脏俱全,本项目系统介绍了YOLO系列模型在TensorRT上的量化方案,工程型较强,我们给出的工具可以实现不同量化方案在Yolo系列模型的量化部署,无论是工程实践还是学术实验,相信都会对你带来一定的帮助。

B站地址(求关注和三连):https://www.bilibili.com/video/BV1Ds4y1k7yr/

Github开源地址(求star):https://github.com/thb1314/mmyolo_tensorrt/

当时想做这个的目的是是为了总结一下目标检测模型的量化加速到底会遇到什么坑,只是没想到不量化坑都会很多。

比如即使是以FP32形式推理,由于TensorRT算子参数的一些限制和TRT和torch内部实现的不同,导致torch推理结果会和TensorRT推理结果天然的不统一,至于为什么不统一这里卖个关子大家感兴趣可以看下视频。

下面说一下我们这个项目做了哪些事情

YOLO系列模型在tensorrt上的部署与精度对齐

该项目详细介绍了Yolo系列模型在TensorRT上的FP32的精度部署,基于mmyolo框架导出各种yolo模型的onnx,在coco val数据集上对齐torch版本与TensorRT版本的精度。

在此过程中我们发现,由于TopK算子限制和NMS算子实现上的不同,我们无法完全对齐torch和yolo模型的精度,不过这种风险是可解释且可控的。

详解TensorRT量化的三种实现方式

TensorRT量化的三种实现方式包括trt7自带量化、dynamic range api,trt8引入的QDQ算子。

Dynamic range api会在采用基于MQbench框架做PTQ时讲解。

TensorRT引入的QDQ算子方式在针对Yolo模型的PTQ和QAT方式时都有详细的阐述,当然这个过程也没有那么顺利。

在基于PytorchQuantization导出的含有QDQ节点的onnx时,我们发现尽管量化版本的torch模型精度很高,但是在TensorRT部署时精度却很低,TRT部署收精度损失很严重,通过可视化其他量化形式的engine和问题engine进行对比,我们发现是一些层的int8量化会出问题,由此找出问题量化节点解决。

详解MQbench量化工具包在TensorRT上的应用

我们研究了基于MQbench框架的普通PTQ算法和包括Adaround高阶PTQ算法,且启发于Adaround高阶PTQ算法。

我们将torch版本中的HistogramObserver引入到MQBench中,activation采用HistogramObserverweight采用MinMaxObserver,在PTQ过程中,weight的校准前向传播一次,activation的校准需要多次因此我们将weight的PTQ过程和activation的PTQ过程分开进行,加速PTQ量化。实践证明,我们采用上述配置的分离PTQ量化在yolov8上可以取得基本不掉点的int8量化精度。

针对YoloV6这种难量化模型,分别采用部分量化和QAT来弥补量化精度损失

在部分量化阶段,我们采用量化敏感层分析技术来判断哪些层最需要恢复原始精度,给出各种metric的量化敏感层实现。

在QAT阶段,不同于原始Yolov6论文中蒸馏+RepOPT的方式,我们直接采用上述部分量化后的模型做出初始模型进行finetune,结果发现finetune后的模型依然取得不错效果。

针对旋转目标检测,我们同样给出一种端到端方案,最后的输出就是NMS后的结果。通过将TensorRT中的EfficientNMS Plugin和mmcv中旋转框iou计算的cuda实现相结合,给出EfficientNMS for rotated box版本,经过简单验证我们的TRT版本与Torch版本模型输出基本对齐。

以上就是我们这个项目做的事情,欢迎各位看官关注b站和一剑三连。同时,如果各位有更好的想法也欢迎给我们的git仓库提PR。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4800

    浏览量

    98505
  • 模型
    +关注

    关注

    1

    文章

    3810

    浏览量

    52253
  • 精度
    +关注

    关注

    0

    文章

    274

    浏览量

    20831

原文标题:Yolo系列模型的部署、精度对齐与int8量化加速

文章出处:【微信号:GiantPandaCV,微信公众号:GiantPandaCV】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【幸狐Omni3576边缘计算套件试用体验】YOLO26 板端部署

    提供了一个模型系列,该模型系列在小对象上实现了更高的精度,提供了无缝部署,并且在CPU 上的运行
    发表于 04-19 22:02

    量化模型在 iMX93 NPU 上运行,但输出不正确怎么解决

    良好的精度,但 int8 输出似乎完全随机。在对一些训练数据进行测试后,应该为正的帧的范围是 -128 到 127,应该为负的帧也是如此。我是否误解了输出,或者在转换或量化模型时出了问
    发表于 03-18 07:53

    【瑞萨AI挑战赛】手写数字识别模型在RA8P1 Titan Board上的部署

    如下: 支持.onnx、.tflite、.pte等多种深度学习模型格式的直接转换; 内置量化功能,可完成模型INT8量化,降低
    发表于 03-15 20:42

    AWQ/GPTQ量化模型加载与显存优化实战

    大语言模型(LLM)推理显存需求呈指数级增长,70B参数的模型需要约140GB显存(FP16),远超单卡GPU容量。量化技术通过降低模型参数精度
    的头像 发表于 03-13 09:45 548次阅读

    基于Arm平台的端到端int8 Conformer模型部署

    在边缘侧运行高质量的语音与音频模型颇具挑战,需满足时延、内存、功耗和模型大小等多方面的严苛约束。不同于云端部署,边缘侧系统通常离线运行,需兼顾用户隐私与可预测的实时性能。这些落地场景涵盖端侧语音转文本、语音助手、语音控制的物联网
    的头像 发表于 02-24 10:23 417次阅读
    基于Arm平台的端到端<b class='flag-5'>int8</b> Conformer<b class='flag-5'>模型</b><b class='flag-5'>部署</b>

    专为边缘而生:深度解析昆仑芯K100 AI加速卡,释放128 TOPS极致能效

    昆仑芯K100边缘AI加速卡以75W超低功耗实现128 TOPS的INT8算力,重新定义边缘推理能效标准。其半高半长设计搭载8GB HBM内存与256GB/s带宽,支持INT8至FP3
    的头像 发表于 12-14 11:12 3146次阅读
    专为边缘而生:深度解析昆仑芯K100 AI<b class='flag-5'>加速</b>卡,释放128 TOPS极致能效

    部署量化YOLO模型

    YOLO物联网聆思CSK6
    的头像 发表于 12-14 07:47 1631次阅读

    Termux手机摄像头采集图像/视频流 部署 YOLO 模型推理

    Termux手机摄像头采集图像/视频流 部署 YOLO 模型推理
    的头像 发表于 12-14 07:26 3271次阅读

    如何精准驱动菜品识别模型--基于米尔瑞芯微RK3576边缘计算盒

    优化: 支持将FP32模型量化INT8INT16精度,在保证精度的同时,大幅减小
    发表于 10-31 21:19

    小白必读:到底什么是FP32、FP16、INT8

    网上关于算力的文章,如果提到某个芯片或某个智算中心的算力,都会写:在FP32精度下,英伟达H100的算力大约为0.9PFlops。在FP16精度下,某智算中心的算力是6.7EFlops。在INT8
    的头像 发表于 10-20 14:34 1632次阅读
    小白必读:到底什么是FP32、FP16、<b class='flag-5'>INT8</b>?

    如何进行YOLO模型转换?

    我目前使用的转模型代码如下 from ultralytics import YOLOimport cv2import timeimport nncaseimport# 加载预训练的YOLO模型
    发表于 08-14 06:03

    RK3576 Yolov11训练部署教程

    1.Yolo11简介YOLO11系列YOLO家族中最先进的(SOTA)、最轻量级、最高效的模型,其表现优于其前辈。它由Ultralytic
    的头像 发表于 07-25 15:22 1233次阅读
    RK3576 Yolov11训练<b class='flag-5'>部署</b>教程

    计算精度对比:FP64、FP32、FP16、TF32、BF16、int8

    、BF16、int8以及混合精度等。本文将浅显易懂地介绍这些精度计算方式及其差别。什么是精度精度,是数据表示的一个重要参数,它决定了数据的
    的头像 发表于 06-26 11:09 3220次阅读
    计算<b class='flag-5'>精度</b>对比:FP64、FP32、FP16、TF32、BF16、<b class='flag-5'>int8</b>

    使用 NPU 插件对量化的 Llama 3.1 8b 模型进行推理时出现“从 __Int64 转换为无符号 int 的错误”,怎么解决?

    推理量化的 Llama 3.1 8B 模型时遇到错误: Runtime error: Bad cast from __int64 to unsigned
    发表于 06-25 07:20

    为什么无法在GPU上使用INT8INT4量化模型获得输出?

    安装OpenVINO™ 2024.0 版本。 使用 optimum-intel 程序包将 whisper-large-v3 模型转换为 int 4 和 int8,并在 GPU 上使用 OpenVINO™ 运行推理。 没有可用的
    发表于 06-23 07:11