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

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

3天内不再提示

FP32推理TensorRT演示

OpenCV学堂 来源:OpenCV学堂 作者:OpenCV学堂 2022-09-23 14:47 次阅读

引言

YOLOv5最新版本的6.x已经支持直接导出engine文件并部署到TensorRT上了。

FP32推理TensorRT演示

可能很多人不知道YOLOv5新版本6.x中已经支持一键导出Tensor支持engine文件,而且只需要一条命令行就可以完成:演示如下:

python export.py --weights yolov5s.pt --include onnx engine --device 0

其中onnx表示导出onnx格式的模型文件,支持部署到:

- OpenCV DNN- OpenVINO- TensorRT- ONNXRUNTIME
但是在TensorRT上推理想要速度快,必须转换为它自己的engine格式文件,参数engine就是这个作用。上面的命令行执行完成之后,就会得到onnx格式模型文件与engine格式模型文件。--device 0参数表示GPU 0,因为我只有一张卡!上述导出的FP32的engine文件。

使用tensorRT推理 YOLOv5 6.x中很简单,一条命令行搞定了,直接执行:

python detect.py --weights yolov5s.engine --view-img --source data/images/zidane.jpg

FP16推理TensorRT演示

在上面的导出命令行中修改为如下

python export.py --weights yolov5s.onnx --include engine --half --device 0
其中就是把输入的权重文件改成onnx格式,然后再添加一个新的参 --half 表示导出半精度的engine文件。就这样直接执行该命令行就可以导出生成了,图示如下:

02d33e88-3af3-11ed-9e49-dac502259ad0.png

03edd9f4-3af3-11ed-9e49-dac502259ad0.png

对比可以发现相比FP32大小的engine文件,FP16的engine文件比FP32的engine大小减少一半左右,整个文件只有17MB大小左右。

推理执行的命令跟FP32的相同,直接运行,显示结果如下:

对比发现FP32跟FP16版本相比,速度提升了但是精度几乎不受影响!

INT8量化与推理TensorRT演示

TensorRT的INT量化支持要稍微复杂那么一点点,最简单的就是训练后量化。只要完成Calibrator这个接口支持,我用的TensorRT版本是8.4.0.x的,它支持以下几种Calibrator:

07b38d90-3af3-11ed-9e49-dac502259ad0.png

不同的量化策略,得到的结果可能稍有差异,另外高版本上的INT8量化之后到低版本的TensorRT机器上可能无法运行,我就遇到过!所以建议不同平台要统一TensorRT版本之后,再量化部署会比较好。上面的Calibrator都必须完成四个方法,分别是:

#使用calibrator验证时候每次张数,跟显存有关系,最少1张get_batch_size  #获取每个批次的图像数据,组装成CUDA内存数据get_batch  #如果以前运行过保存过,可以直接读取量化,低碳给国家省电read_calibration_cache#保存calibration文件,量化时候会用到write_calibration_cache

这块对函数集成不懂建议参考TensorRT自带的例子:

TensorRT-8.4.0.6samplespythonint8_caffe_mnist
几乎是可以直接用的!Copy过来改改就好了!

搞定了Calibrator之后,需要一个验证数据集,对YOLOv5来说,其默认coco128数据集就是一个很好的验证数据,在data文件夹下有一个coco128.yaml文件,最后一行就是就是数据集的下载URL,直接通过URL下载就好啦。

完成自定义YOLOv5的Calibrator之后,就可以直接读取onnx模型文件,跟之前的官方转换脚本非常相似了,直接在上面改改,最重要的配置与生成量化的代码如下:

# build trt enginebuilder.max_batch_size = 1config.max_workspace_size = 1 << 30config.set_flag(trt.BuilderFlag.INT8)config.int8_calibrator = calibratorprint('Int8 mode enabled')plan = builder.build_serialized_network(network, config)
主要就是设置config中的flag为INT8,然后直接运行,得到plan对象,反向序列化为engine文件,保存即可。最终得到的INT8量化engine文件的大小在9MB左右。

07d00024-3af3-11ed-9e49-dac502259ad0.png

数据太少,只有128张, INT8量化之后的YOLOv5s模型推理结果并不尽如人意。但是我也懒得再去下载COCO数据集, COCO训练集一半数据作为验证完成的量化效果是非常好。 这里,我基于YOLOv5s模型自定义数据集训练飞鸟跟无人机,对得到模型,直接用训练集270张数据做完INT8量化之后的推理效果如下

0802faba-3af3-11ed-9e49-dac502259ad0.png

量化效果非常好,精度只有一点下降,但是速度比FP32的提升了1.5倍左右(3050Ti)。

已知问题与解决

量化过程遇到这个错误

[09/22/2022-2313] [TRT] [I]   Calibrated batch 127 in 0.30856 seconds.[09/22/2022-2316] [TRT] [E] 2: [quantization.cpp::70] Error Code 2: Internal Error (Assertion min_ <= max_ failed. )[09/22/2022-2316] [TRT] [E] 2: [builder.cpp::619] Error Code 2: Internal Error (Assertion engine != nullptr failed. )Failed to create the engineTraceback (most recent call last):

解决方法,把Calibrator中getBtach方法里面的代码:

img = np.ascontiguousarray(img, dtype=np.float32)

to

img = np.ascontiguousarray(img, dtype=np.float16)

这样就可以避免量化失败。

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

    关注

    0

    文章

    22

    浏览量

    16807
  • 模型
    +关注

    关注

    1

    文章

    2704

    浏览量

    47681
  • 数据集
    +关注

    关注

    4

    文章

    1178

    浏览量

    24349

原文标题:YOLOv5模型部署TensorRT之 FP32、FP16、INT8推理

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

收藏 人收藏

    评论

    相关推荐

    如何在GPU上使用TensorRT部署深度学习应用程序

    本文未涉及的一个主题是在 TensorRT 中以 INT8 精度精确地执行推理TensorRT 自动转换 FP32 网络以进行部署,同时降低精度损失。为了实现这一目标,
    的头像 发表于 04-01 15:19 4540次阅读
    如何在GPU上使用<b class='flag-5'>TensorRT</b>部署深度学习应用程序

    全志XR806+TinyMaix,在全志XR806上实现ML推理

    ATmega328 (32KB Flash, 2KB Ram) 都能基于TinyMaix跑mnist(手写数字识别)支持INT8/FP32/FP16模型,实验性地支持FP8模型,支持keras h5或
    发表于 09-21 09:56

    tflite + XNNPACK代表对量化网络的推理不起作用是怎么回事?

    mobilenet_v1_1.0_224_quant.tflite 对 TFLite 进行基准推理,我发现 XNNPACK 委托未用于推理(很可能是因为这是一个量化网络- 因为它适用于 fp32 模型)。稍微浏览一下
    发表于 04-11 07:05

    推断FP32模型格式的速度比CPU上的FP16模型格式快是为什么?

    在 CPU 上推断出 FP32 模型格式和 FP16 模型格式。 FP32 模型格式的推断速度比 FP16 模型格式快。 无法确定推断 FP32
    发表于 08-15 08:03

    C++演示中的推理速度比Python演示中的推理速度更快是为什么?

    在同一主机机上采用相同型号的 Ran Object Detection C++ 演示 和 对象检测 Python 演示 。 C++ 演示中的推理速度比 Python
    发表于 08-15 06:52

    初次尝试Tengine 适配 Ncnn FP32 模型

    初次尝试Tengine 适配 Ncnn FP32 模型,相较于mnn,ncnn而言,这个框架对于多框架模型有着很好的支持性 – Caffe,Tensorflow,TF-Lite, M...
    发表于 02-07 11:16 0次下载
    初次尝试Tengine 适配 Ncnn <b class='flag-5'>FP32</b> 模型

    NVIDIA TensorRT 8.2将推理速度提高6倍

      TensorRT 是一款高性能的深度学习推理优化器和运行时,为人工智能应用程序提供低延迟、高吞吐量推理TensorRT 用于医疗、汽车、制造、互联网/电信服务、金融服务和能源等
    的头像 发表于 03-31 17:10 1500次阅读

    使用NVIDIA TensorRT优化T5和GPT-2

    在这篇文章中,我们向您介绍了如何将拥抱脸 PyTorch T5 和 GPT-2 模型转换为优化的 TensorRT 推理引擎。 TensorRT 推理机用作原始 HuggingFace
    的头像 发表于 03-31 17:25 3114次阅读
    使用NVIDIA <b class='flag-5'>TensorRT</b>优化T5和GPT-2

    NVIDIA TensorRT和DLA分析

      位于 GitHub 存储库中的sampleMNIST演示了如何导入经过训练的模型、构建 TensorRT 引擎、序列化和反序列化引擎,最后使用引擎执行推理
    的头像 发表于 05-18 10:06 2600次阅读

    NVIDIA T4 GPU和TensorRT提高微信搜索速度

    腾讯公司深耕模型量化开发,且长期与 NVIDIA 团队合作,成功将深度学习模型精度从 FP32 压缩到 FP16 以及 INT8。现在,该技术再次获得了新的重要突破。腾讯团队利用全新设计的 QAT
    的头像 发表于 06-27 14:34 1199次阅读

    TensorRT 8.6 C++开发环境配置与YOLOv8实例分割推理演示

    对YOLOv8实例分割TensorRT 推理代码已经完成C++类封装,三行代码即可实现YOLOv8对象检测与实例分割模型推理,不需要改任何代码即可支持自定义数据训练部署推理
    的头像 发表于 04-25 10:49 3697次阅读
    <b class='flag-5'>TensorRT</b> 8.6 C++开发环境配置与YOLOv8实例分割<b class='flag-5'>推理</b><b class='flag-5'>演示</b>

    TensorRT怎么在多个GPU中指定推理设备

    说实话,之前我在笔记本上都一直都是只有一块N卡,所以没有过多关注过这个问题。然而昨天有个人问我,TensorRT怎么在多个GPU中指定模型推理GPU设备?我查了一下,发现官方有几个不同的解决方案,个人总结了一下,主要的做法有两种。
    的头像 发表于 08-03 14:10 508次阅读

    三种主流模型部署框架YOLOv8推理演示

    部署。这里以YOLOv8为例,演示了YOLOv8对象检测模型在OpenVINO、ONNXRUNTIME、TensorRT三个主流框架上C++推理演示效果。
    的头像 发表于 08-06 11:39 1839次阅读

    边缘生成人工智能推理技术面临的挑战有哪些

    虽然训练通常基于生成大量数据的 fp32fp64 浮点算法,但它不需要严格的延迟。功耗高,成本承受能力高。 相当不同的是推理过程。推理通常在
    发表于 10-10 09:38 170次阅读
    边缘生成人工智能<b class='flag-5'>推理</b>技术面临的挑战有哪些

    Torch TensorRT是一个优化PyTorch模型推理性能的工具

    那么,什么是Torch TensorRT呢?Torch是我们大家聚在一起的原因,它是一个端到端的机器学习框架。而TensorRT则是NVIDIA的高性能深度学习推理软件工具包。Torch Te
    的头像 发表于 01-09 16:41 390次阅读
    Torch <b class='flag-5'>TensorRT</b>是一个优化PyTorch模型<b class='flag-5'>推理</b>性能的工具