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

    文章

    4455

    浏览量

    90756
  • 模型
    +关注

    关注

    1

    文章

    2704

    浏览量

    47687
  • 精度
    +关注

    关注

    0

    文章

    247

    浏览量

    19821

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

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

收藏 人收藏

    评论

    相关推荐

    yolov5量化INT8出错怎么处理?

    model_deploy.py --mlir yolov5l.mlir --quantize INT8 --calibration_table yolov5l_cali_table --chip
    发表于 01-10 06:40

    【爱芯派 Pro 开发板试用体验】模型部署(以mobilenetV2为例)

    好,因为动态是在推理时去估计算子的数据范围,误差较大。 这里采用的是静态的训练后量化方式,通过提供一个和训练集同分布的校准数据集,将算子的权重从FP32量化INT8 一些细节:仔细看看axmodel
    发表于 12-10 16:34

    【爱芯派 Pro 开发板试用体验】yolov8模型转换

    尝试将最新的yolov8模型转换为爱芯派的模型。 环境准备 准备Docker环境 首先自己在任意机器上准备好docker环境,详细步骤见官网。 Docker 镜像文件 准备 yolo8
    发表于 11-20 12:19

    【KV260视觉入门套件试用体验】Vitis AI 进行模型校准和来量化

    。 优化性能:通过校准,可以找到量化位宽和缩放因子的最佳组合,从而在精度损失最小的情况下获得最大的压缩率。这可以优化量化模型的性能。 部署
    发表于 10-15 10:51

    探索ChatGLM2在算能BM1684X上INT8量化部署加速模型商业落地

    |探索ChatGLM2-6B模型与TPU部署》。为了进一步提升模型的推理效率与降低存储空间,我们对模型进行了INT8
    的头像 发表于 10-10 10:18 2156次阅读
    探索ChatGLM2在算能BM1684X上<b class='flag-5'>INT8</b><b class='flag-5'>量化</b><b class='flag-5'>部署</b>,<b class='flag-5'>加速</b>大<b class='flag-5'>模型</b>商业落地

    TPU-MLIR量化敏感层分析,提升模型推理精度

    于浮点数模型量化模型的推理精度会有一定程度的损失。当精度损失较大时,需要搜索模型中对
    的头像 发表于 10-10 10:17 595次阅读
    TPU-MLIR<b class='flag-5'>量化</b>敏感层分析,提升<b class='flag-5'>模型</b>推理<b class='flag-5'>精度</b>

    超星未来NE100开箱体验,15分钟部署目标检测模型

    量化工具以 ONNX 文件和部分图片为输入,将神经网络从 FP32 量化INT8 精度,目前支持 PTQ 与 QAT 功能。仅需在代码中将量化
    的头像 发表于 09-27 17:14 480次阅读
    超星未来NE100开箱体验,15分钟<b class='flag-5'>部署</b>目标检测<b class='flag-5'>模型</b>

    INT8量化常见问题的解决方案

    一、int8的输出和fp32模型输出差异比较大 解决方案: 检查前后处理是否有问题,int8网络输入输出一般需要做scale处理,看看是否遗漏? 通过量化可视化工具分析
    发表于 09-19 06:09

    INT8量子化PyTorch x86处理器

    INT8量子化PyTorch x86处理器
    的头像 发表于 08-31 14:27 503次阅读
    <b class='flag-5'>INT8</b>量子化PyTorch x86处理器

    LLaMa量化部署

    使用 GPTQ 量化模型具有很大的速度优势,与 LLM.int8() 不同,GPTQ 要求对模型进行 post-training quantization,来得到
    的头像 发表于 08-28 16:44 1011次阅读
    LLaMa<b class='flag-5'>量化</b><b class='flag-5'>部署</b>

    请问在新CPU上推断INT8模型的速度是否比旧CPU快?

    与采用旧 CPU 的推理相比,在新 CPU 上推断的 INT8 模型的推理速度更快。
    发表于 08-15 08:28

    用TensorFlow将神经网络量化8

    使用CoreML量化工具优化模型以进行部署。查看34T苹果开发者34Twebsite了解更多更新。 请注意,目前无法在iOS上通过CoreML部署8
    发表于 08-10 06:01

    YOLOv8模型ONNX格式INT8量化轻松搞定

    深度学习模型量化支持深度学习模型部署框架支持的一种轻量化模型
    的头像 发表于 07-18 09:34 2378次阅读
    YOLOv8<b class='flag-5'>模型</b>ONNX格式<b class='flag-5'>INT8</b><b class='flag-5'>量化</b>轻松搞定

    总结FasterTransformer Encoder优化技巧

    FasterTransformer BERT 包含优化的 BERT 模型、高效的 FasterTransformer 和 INT8 量化推理。
    的头像 发表于 05-30 15:15 978次阅读
    总结FasterTransformer Encoder优化技巧

    超越YOLOv8!YOLO-NAS:下一代目标检测基础模型

    总而言之,YOLO-NAS达成目标检测任务新高度,取得了最佳的精度-延迟均衡。值得一提,YOLO-NAS与TensorRT推理引擎完全兼容,且支持INT8
    的头像 发表于 05-15 15:31 1321次阅读
    超越YOLOv8!<b class='flag-5'>YOLO</b>-NAS:下一代目标检测基础<b class='flag-5'>模型</b>