首页 > 编程语言 >TensorRT-For-YOLO-Series项目:实现yolov10模型的python-tensorrt推理(对比int8与fp16推理差异)

TensorRT-For-YOLO-Series项目:实现yolov10模型的python-tensorrt推理(对比int8与fp16推理差异)

时间:2024-09-08 21:24:42浏览次数:7  
标签:-- yolov10 jpg int8 fp16 end2end 推理 trt

项目地址:https://github.com/Linaom1214/TensorRT-For-YOLO-Series/tree/cuda-python
算法支持状态:
2024.6.16 Support YOLOv9, YOLOv10, changing the TensorRT version to 10.0
2023.8.15 Support cuda-python
2023.5.12 Update
2023.1.7 support YOLOv8
2022.11.29 fix some bug thanks @JiaPai12138
2022.8.13 rename reop、 public new version、 C++ for end2end
2022.8.11 nms plugin support ==> Now you can set --end2end flag while use export.py get a engine file
2022.7.8 support YOLOv7
2022.7.3 support TRT int8 post-training quantization

1、tensorrt环境安装

下载tensorrt https://developer.nvidia.com/tensorrt/download/10x
这里根据个人的系统、cuda版本进行选择。
在这里插入图片描述
解压文件,并将tensorrt的路径添加系统环境变量中,具体如下所示:在这里插入图片描述
然后安装python-tensorrt,具体如下所示
在这里插入图片描述
最后安装
pip install cuda-python

同时需要设计cuda环境变量
1、在系统环境变量path中添加 %CUDA_PATH%
在这里插入图片描述
2、在系统环境变量中添加 CUDA_PATH
在这里插入图片描述

2、onnx2trt

执行以下代码可以将pt模型导出为onnx模型

from ultralytics import YOLO

model = YOLO("yolov10n.pt")
model.fuse()  
model.info(verbose=False)  # Print model information
model.export(format='onnx')  # TODO: 

执行以下命令可以将onnx模型转换为trt模型
python export.py -o yolov10n.onnx -e yolov10.trt --end2end --v10 -p fp32
在这里插入图片描述

3、模型推理

测试代码如下所示

python trt.py -e yolov10.trt  -i src/1.jpg -o yolov10-1.jpg --end2end

推理输出如下所示,针对640x640的输入,fps为146,基本上是6.8ms一张图。推理软硬件环境为:win10+tensorrt10.4+python3.8+cuda12.1+3060显卡

Namespace(end2end=True, engine='yolov10.trt', image='src/1.jpg', output='yolov10-1.jpg', video=None)
146.50372522347308 FPS

对应的trt.py代码如下所示

from utils.utils import preproc, vis
from utils.utils import BaseEngine
import numpy as np
import cv2
import time
import os
import argparse

class Predictor(BaseEngine):
    def __init__(self, engine_path):
        super(Predictor, self).__init__(engine_path)
        self.n_classes = 80  # your model classes

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument("-e", "--engine", help="TRT engine Path")
    parser.add_argument("-i", "--image", help="image path")
    parser.add_argument("-o", "--output", help="image output path")
    parser.add_argument("-v", "--video",  help="video path or camera index ")
    parser.add_argument("--end2end", default=False, action="store_true",
                        help="use end2end engine")

    args = parser.parse_args()
    print(args)

    pred = Predictor(engine_path=args.engine)
    pred.get_fps()
    img_path = args.image
    video = args.video
    if img_path:
      origin_img = pred.inference(img_path, conf=0.1, end2end=args.end2end)

      cv2.imwrite("%s" %args.output , origin_img)
    if video:
      pred.detect_video(video, conf=0.1, end2end=args.end2end) # set 0 use a webcam

4、fp16推理

导出fp16模型

python export.py -o yolov10n.onnx -e yolov10.trt --end2end --v10 -p fp16
推理模型

(base) PS D:\yolo_seq\TensorRT-For-YOLO-Series-cuda-python> 
python trt.py -e yolov10.trt  -i src/1.jpg -o yolov10-1.jpg --end2end

输出结果如下所示,可以发现fps此时接近200,5ms左右一张图


Namespace(end2end=True, engine='yolov10.trt', image='src/1.jpg', output='yolov10-1.jpg', video=None)
199.44339337776142 FPS

在这里插入图片描述

5、int8推理

导出int8模型需要设置 calib_input参数(设置校准数据的路径)

python export.py  -o yolov10n.onnx -e yolov10.int8.trt --end2end --v10 -p int8 --calib_input  D:\yolo_seq\datasets\coco128\images\train2017

然后再基于以下命令测试int8模型推理效果

python trt.py -e yolov10.int8.trt  -i src/1.jpg -o yolov10-1.jpg --end2end

此时运行输出如下

Namespace(end2end=True, engine='yolov10.int8.trt', image='src/1.jpg', output='yolov10-1.jpg', video=None)
259.70545246403356 FPS

运行效果如下,相比于fp16,似乎没有区别。
在这里插入图片描述

上点难度看一下int8与fp16推理效果

python trt.py -e yolov10.int8.trt  -i D:\yolo_seq\coco\images\val2017\000000001000.jpg -o 0-int8.jpg --end2end

python trt.py -e yolov10.trt  -i D:\yolo_seq\coco\images\val2017\000000001000.jpg -o 0-fp16.jpg --end2end

此时可以发现,转为int8的模型明显存在较多漏检
在这里插入图片描述

基于更多的数据矫正,再对比一下模型的效果差异

python export.py  -o yolov10n.onnx -e yolov10.int8-2.trt --end2end --v10 -p int8 --calib_input  D:\yolo_seq\coco\images\val2017

测试新数据,可以发现int8模型任然存在不足

python trt.py -e yolov10.int8.trt  -i D:\yolo_seq\coco\images\train2017\000000581831.jpg -o 1-int8.jpg --end2end

python trt.py -e yolov10.trt  -i D:\yolo_seq\coco\images\train2017\000000581831.jpg -o 1-fp16.jpg --end2end

在这里插入图片描述
测试校准数据中的样例,依旧可以发现int8模型存在精度损失

python trt.py -e yolov10.int8.trt  -i D:\yolo_seq\coco\images\val2017\000000001000.jpg -o 2-int8.jpg --end2end

python trt.py -e yolov10.trt  -i D:\yolo_seq\coco\images\val2017\000000001000.jpg -o 2-fp16.jpg --end2end

在这里插入图片描述

标签:--,yolov10,jpg,int8,fp16,end2end,推理,trt
From: https://blog.csdn.net/a486259/article/details/142029669

相关文章

  • 【25届校招Verify测评】宁德时代新能源ATL演绎推理真题SHL测评
    新能源科技有限公司(英语:AmperexTechnologyLimited,简称ATL)成立于1999年,是一家锂离子电池制造商,总部位于香港。属下有三家全资子公司,分别位于东莞南城区、东莞松山湖科技产业园区和福建省宁德市。新能源科技是致力于可充式锂离子电池的电芯、封装和系统整合的研发、生产和营销......
  • 带你1分钟玩转AI大模型微调推理,更有限时福利等你领
    本文分享自华为云开发者联盟微信公众号《如何1分钟玩转AI大模型微调推理?(文末有福利)》想要低成本用好大模型,必然离不开对它的微调(FineTuning)。那么,为什么大模型需要微调呢?举个例子:一个通用大模型涵盖了许多语言信息,我们和它可以进行流畅的对话。但是如果想要它正确回答“布......
  • 澎峰科技受邀参加全球AI芯片峰会,探讨大模型推理引擎PerfXLM面向RISC-V的移植和优化
    2024全球AI芯片峰会,9月6-7日北京开启!9月6-7日,2024全球AI芯片峰会(GACS2024)将在北京辽宁大厦盛大举办。全球AI芯片峰会至今已成功举办六届,现已成为国内规模最大、规格最高、影响力最强的产业峰会之一。本届峰会由芯东西与智猩猩共同主办,以「智算纪元共筑芯路」为主题。峰会采......
  • SVI pyro 随机变分推理的提示和技巧 ,贝叶斯神经网络 bnn pytorch python
    SVI第四部分:提示和技巧¶pyro.ai/examples/svi_part_iv.html导致这一个的三个SVI教程(第一部分, 第二部分,& 第三部分)通过使用Pyro做变分推断所涉及的各个步骤。在这个过程中,我们定义了模型和指南(即,变分分布),设置了变分目标(特别是埃尔博斯),以及构造的优化器(pyro.opti......
  • 支持国产——使用mmdetection进行目标检测并保存推理结果图片
    ⭐️概述MMDetection是OpenMMLab算法体系的一部分,OpenMMLab是一个国产的开源计算机视觉算法体系。今天小编初次体验了MMDetection,怀着激动的心情,将这次体验记录下来。⭐️准备工作笔者的cuda版本是11.8python环境中pytorch相关版本是:torch1.......
  • 深度学习|模型推理:端到端任务处理
    文章目录引言端到端的能力任务与模型简介手写数字识别数据准备训练集与测试集模型介绍推理过程前向传播权重参数推理与评估结语引言通过前文「深度学习|感知机:神经网络之始」中XORGate的示例,我们知道叠加层可以增强感知机的表达能力。神奇的是,实际上通过简单的......
  • YOLOv5 结合切片辅助超推理算法 | 这才叫让小目标无处遁形!
    引言YOLOv5作为一种高效的目标检测算法,在许多领域得到了广泛应用。然而,在处理小目标检测任务时,YOLOv5仍然面临一些挑战。切片辅助超推理算法则为解决这一问题提供了一种有效的思路。本文将深入探讨YOLOv5与切片辅助超推理算法结合的原理、实现细节、以及在小目标检测方面的优......
  • 使用docker部署tensorrtllm推理大模型baichuan2-7b
    简介大模型的推理框架,我之前用过vllm和mindie。近期有项目要用tensorrtllm,这里将摸索的过程记录下,特别是遇到的问题。我的环境是Linux+rt3090准备docker环境本次使用docker镜像部署,需要从网上拉取:dockerpullnvcr.io/nvidia/tritonserver:24.08-trtllm-python-py3Th......
  • NumPyro入门API和开发人员参考 pyro分布推理效果处理程序贡献代码更改日志入门教程使
    NumPyro文档¶NumPyro入门API和开发人员参考烟火元素分布推理效果处理程序贡献代码更改日志入门教程使用NumPyro的贝叶斯回归贝叶斯分层线性回归例如:棒球击球率示例:变型自动编码器例子:尼尔的漏斗例子:随机波动例如:亚麻和俳句可变推断参数化NumPyro模型的自动绘制不良后几何及......
  • GNN-RAG:以RAG形式将 llm 的语言能力与 gnns 推理进行联合
    Paper: https://arxiv.org/abs/2405.20139知识图(KGs)以三元组(头、关系、尾)的形式表示人类精心制作的事实知识,它们共同构成了一个图。大型语言模型(LargeLanguageModels,llm)是QA任务中最先进的模型,因为它们具有理解自然语言的卓越能力。另一方面,图神经网络(GraphNeu......