Windows11-YOLOX-TensorRT部署


环境:Windows11-CUDA11.1-cudnn8.9.7-PyTorch1.9.1+cu111-TensorRT8.5.2.2-Python3.8

1、YOLOX训练

  • 下载源码
    git clone https://github.com/Megvii-BaseDetection/YOLOX
  • 配置相关环境训练
    1. cd /xxx/xxx/YOLOX-main
    2. pip install -r requirements.txt
    3. python setup.py develop
    4. 安装apex
      git clone https://github.com/NVIDIA/apex
      cd apex
      pip install -v --no-cache-dir --global-option="--pyprof" --global-option="--cpp_ext" --global-option="--cuda_ext" ./
      
    5. 运行/xxx/xxx/YOLOX-main/tools/train.py,根据运行报错安装相应包。
    6. 训练完成后,得到.pth文件。

2、生成engine文件

(方式二比较方便)

  • 下载TensorRTtorch2trt并解压。

  • 方式一: 使用trtexec工具转engine。(TensorRT-8.5.2.2/bin/trtexec.exe)

    • 首先,将pth文件转onnx文件。
      pip install onnxruntime
      cd /xxx/xxx/YOLOX-main
      # 标准模型可采用
      python tools/export_onnx.py --output-name your_name.onnx -n your_name -c your_name.pth
      # 自定义模型采用
      python tools/export_onnx.py --output-name yolox_s.onnx -f exps/default/yolox_s.py -c yolox_s.pth
      
    • 然后,将onnx文件转engine文件。
      	#生成静态batchsize的engine
      	./trtexec.exe 	--onnx=<onnx_file> \ 						#指定onnx模型文件()
              			--explicitBatch \ 							#在构建引擎时使用显式批大小(默认=隐式)显示批处理
              			--saveEngine=<tensorRT_engine_file> \ 		#输出engine
              			--workspace=<size_in_megabytes> \ 			#设置工作空间大小单位是MB(默认为16MB)
              			--fp16 										#除了fp32之外,还启用fp16精度(默认=禁用)
          
      	#生成动态batchsize的engine
      	./trtexec.exe 	--onnx=<onnx_file> \						#指定onnx模型文件
          				--minShapes=input:<shape_of_min_batch> \ 	#最小的batchsize x 通道数 x 输入尺寸x x 输入尺寸y
              			--optShapes=input:<shape_of_opt_batch> \  	#最佳输入维度,跟maxShapes一样就好
              			--maxShapes=input:<shape_of_max_batch> \ 	#最大输入维度
              			--workspace=<size_in_megabytes> \ 			#设置工作空间大小单位是MB(默认为16MB)
              			--saveEngine=<engine_file> \   				#输出engine
              			--fp16   									#除了fp32之外,还启用fp16精度(默认=禁用)
      

    举例:

    #将ONNX模型转换为静态batchsize的TensorRT模型,启动所有精度以达到最佳性能,工作区大小设置为1024M
    ./trtexec.exe --onnx=yolox_s_voc.onnx --explicitBatch --saveEngine=yolox_s_voc.engine --workspace=1024 --best        
    #将ONNX模型转换为动态batchsize的TensorRT模型,启动所有精度以达到最佳性能,工作区大小设置为1024M
    ./trtexec.exe --onnx=mnist.onnx --minShapes=input:<1x3x640x640> --optShapes=input:<8x3x640x640> --maxShapes=input:<8x3x640x640> --saveEngine=mnist.engine --best --workspace=1024 --best
    
  • 方式二: 使用TensorRT-Python转engine。

      cd /xxx/xxx/TensorRT-8.5.2.2/python
      pip install tensorrt-8.5.2.2-cp38-none-win_amd64.whl
      # 标准模型可采用
      python tools/trt.py -n yolox-s -c your_ckpt.pth
      # 自定义模型采用
      python tools/trt.py -f <YOLOX_EXP_FILE> -c <YOLOX_CHECKPOINT>
    

3、使用engine文件推理(Visual Studio 2022)

  1. 打开Visual Studio 2022,创建空项目。
  2. 将/xxx/xxx/YOLOX-main/demo/TensorRT/cpp路径下的logging.h和yolox.cpp复制到工程文件内。
  3. 添加包含目录,项目——属性——VC++目录——包含目录:
    在这里插入图片描述
  4. 添加库目录,项目——属性——VC++目录——库目录:
    在这里插入图片描述
  5. 添加附加依赖项,项目——属性——链接器——输入:
    	opencv_world4100d.lib
    	nvinfer.lib
    	nvinfer_plugin.lib
    	nvonnxparser.lib
    	nvparsers.lib
    	cudart.lib
    	cuda.lib
    
  6. 编译代码并运行。
  7. 运行报错解决:
    1. 缺少dirent.h
      解决方法:从Github上下载dirent.h加入工程文件内。
    2. C2589: “(”: “::”右边的非法标记
      解决方法:这是由于函数模板max与Visual C++中的全局的宏max冲突。需将yolox.cpp中的std::max和std::min加上括号,即 (std::max)和 (std::min)。
    3. C4996 ‘localtime‘: This function or variable may be unsafe.
      解决方法:
      项目——属性——C/C++——预处理器——预处理器定义——右侧下拉框中“编辑”——在第一个编辑框中添加_CRT_SECURE_NO_WARNINGS
  • 48
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FY_Pegasus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值