[笔记]darknet(.weights)—>onnx—>.engine

利用darknet训练YOLOv4,利用TensorRT部署到Jetson平台(用的是Xavier,Jetpack4.5)。第0,1,2步是在Station上完成的,第3步是在Xavier上完成的。

0.利用darknet训练YOLOv4,生成.weights权重。
1.先在pytorch的虚拟环境中安装onnxruntime。利用https://github.com/Tianxiaomo/pytorch-YOLOv4中的demo_darknet2onnx.py脚本(根据实际情况做修改,参考README.md),将在上一步训练好的权重和.cfg文件复制到该项目中,再找一张测试用图,然后执行

[笔记]darknet(.weights)—>onnx—>.engine_第1张图片

python demo_darknet2onnx.py cfg/yolov4.cfg YOLOv4_darknet_weights/yolov4.weights 000000002149.jpg -1

2.因为现在将生成好的.onnx复制到Xavier上,执行trtexec会报错:
[TRT] onnx2trt_utils.cpp:198: Your ONNX model has been generated with INT64 weights, while TensorRT does not natively support INT64. Attempting to cast down to INT32.
所以需要先简化.onnx,参考https://blog.csdn.net/weixin_41010198/article/details/107712487
安装onnx-simplifier

pip3 install onnx-simplifier

然后执行

python3 -m onnxsim yolov4_-1_3_608_608_dynamic.onnx yolov4_-1_3_608_608_dynamic_sim.onnx --dynamic-input-shape --input-shape 1,3,608,608

这样就是成功了,将yolov4_-1_3_608_608_dynamic_sim.onnx拷贝到Xavier上。
[笔记]darknet(.weights)—>onnx—>.engine_第2张图片
3.将yolov4_-1_3_608_608_dynamic_sim.onnx拷到Xavier中,执行trtexec看一下报不报错
(Jetpack4.5带有TensorRT7.1.3,如果这里找不到trtex命令,是因为没有添加环境变量)

trtexec --onnx=yolov4_-1_3_608_608_dynamic_sim.onnx --minShapes=input:1x3x608x608 --optShapes=input:4x3x608x608 --maxShapes=input:8x3x608x608 --saveEngine=YOLOv4.engine --workspace=2048 --fp16

[笔记]darknet(.weights)—>onnx—>.engine_第3张图片依然会出现 warning [W]
[笔记]darknet(.weights)—>onnx—>.engine_第4张图片然后在这要等好久
[笔记]darknet(.weights)—>onnx—>.engine_第5张图片等呀等,没白等,PASSED!
[笔记]darknet(.weights)—>onnx—>.engine_第6张图片

你可能感兴趣的:(深度学习,人工智能)