1、环境部署
1、conda 创建环境,创建一个单独的torch环境
conda create -n torch_2 python=3.8
然后在完成torch与torchvision的配置。链接:NVIDIA JETSON AGX XAVIER 环境配置记录_nvidia jetson agx xavier配置-CSDN博客
然后进行测试
conda activate torch_2
python3
import torch
import torchvision
print(torch.__version__) # 查看torch版本
print(torchvision.__version__) # 查看torchvision版本
print(torch.cuda.is_available()) # 查看torch下cuda是否可用
2、创建YOLOX训练环境
conda create -n yolox -clone torch_2
# 激活环境
conda activate yolox
cd yourpath
download the code https://github.com/Megvii-BaseDetection/YOLOX/releases/tag/0.3.0
cd yolox
# 配置环境
pip3 install -U pip && pip3 install -r requirements.txt
3、解决error:Protobuf compiler not found Call Stack
参考链接:
onnx安装失败,Protobuf compiler not found-CSDN博客解决jetson nano安装onnx错误(ERROR: Failed building wheel for onnx)总结-CSDN博客
sudo apt-get install libprotobuf-dev protobuf-compiler
再次运行
pip3 install -U pip && pip3 install -r requirements.txt
完成后,输入
python3 setup.py develop
以上即完成环境的配置,由于pip已换成清华源,所以不用科学上网。科学上网时,使用上述代码时,会出现找不到包。
2、代码测试
demo运行,下载官方权重。
然后运行
python tools/demo.py image -n yolox-s -c weight/yolox_s.pth --path assets/dog.jpg --conf 0.25 --nms 0.45 --tsize 640 --save_result --device [gpu]
3、数据集创建
参考COCO数据集格式:
4、模型训练
python tools/train.py -f exps/example/custom/yolox_s.py -d 1 -b 8 --fp16 -c weight/yolox_s.pth
5、模型部署(这部分问题比较多)
1、基于训练好的 .pth文件,第一步尝试将 .pth->onnx格式。
python3 tools/export_onnx.py --output-name yolox_s.onnx -f exps/example/custom/yolox_s.py -c weight/best_ckpt.pth
然后基于生成的onnx文件,利用Jetson自带的 trtexec 进行转换为engine格式。
./trtexec --onnx=yolox_s.onnx --saveEngine=yolox.engine
但是我在这步遇到了比较麻烦的问题。
error:
onnx2trt_utils.cpp:375: Your ONNX model has been generated with INT64 weights, while TensorRT does not natively support INT64. Attempting to cast down to INT32.
[07/01/2024-22:00:41] [W] [TRT] onnx2trt_utils.cpp:403: One or more weights outside the range of INT32 was clamped. 尝试网上的办法,均不行。因此考虑YOLOX 自带的trt.py.
2、基于训练好的 .pth文件,直接利用trt.py 文件将.pth->engine格式.
python3 tools/trt.py -f exps/example/custom/yolox_s.py -c weight/best_ckpt.pth
error1:
no module named tensorrt
参考链接:jetson 系列 安装完jetpack/已安装 tensorrt 在虚拟环境中仍然报 no module named tensorrt >> 在虚拟环境建立软连接_tensorrt: export failure 6.2s: no module named '-CSDN博客
将 tensorrt.so 链接到yolox的python环境中。
error2:
ModuleNotFoundError: No module named 'torch2trt'
解决办法:在本环境下安装torch2trt;
git clone https://github.com/NVIDIA-AI-IOT/torch2trt
cd torch2trt
python setup.py install
其中运行setup.py 会出现错误,显示 module 'tensorrt' has no attribute '__version__'。但其实并不影响安装,将setup.py中的__version__语句注释掉,然后顺利安装。(提示:本人安装的版本>8,因此该条件语句不会执行,所以直接注释,并无影响)
error3:
module 'tensorrt' has no attribute '__version__'
python3 tools/trt.py -f exps/example/custom/yolox_s.py -c weight/best_ckpt.pth
这时的报错应该就是torch2trt安装包中关于输出tensorrt.__version__的语句,直接将其改为你的tensorrt.__version__版本,例'8.5.2.2'
后面就不再有什么报错,然后在output文件夹中找到相应的engine文件,然后就可以部署啦。(本人用的是Jetson AGX Orin,可能在其他环境下并不会遇到这种问题)