Benim Kodlarım:
python3 darknet_video.py --weights yolov4_ders.weights --config_file yolov4_ders.cfg --input salca.mp4
python3 yolo_to_onnx.py -m yolov4_ders
python3 onnx_to_tensorrt.py -m yolov4_ders
python3 trt_yolo.py --video yolo/salca.mp4 -m yolov4_ders
Or if you plan to run Demo #4 and Demo #5, you'd need to have "protobuf" installed. I recommend installing "protobuf-3.8.0" using my install_protobuf-3.8.0.sh script. This script would take a couple of hours to finish on a Jetson system. Alternatively, doing pip3 install
with a recent version of "protobuf" should also work (but might run a little bit slowlier).
In case you are setting up a Jetson Nano, TX2 or Xavier NX from scratch to run these demos, you could refer to the following blog posts.
- JetPack-4.6
- JetPack-4.5
- Setting up Jetson Xavier NX
- JetPack-4.4 for Jetson Nano
- JetPack-4.3 for Jetson Nano
-
Install "pycuda".
$ cd ${HOME}/project/tensorrt_demos/yolo $ ./install_pycuda.sh
-
Install version "1.4.1" (not the latest version) of python3 "onnx" module. Note that the "onnx" module would depend on "protobuf" as stated in the Prerequisite section. Reference: information provided by NVIDIA.
$ sudo pip3 install onnx==1.4.1
-
Go to the "plugins/" subdirectory and build the "yolo_layer" plugin. When done, a "libyolo_layer.so" would be generated.
$ cd ${HOME}/project/tensorrt_demos/plugins $ make
-
Download the pre-trained yolov3/yolov4 COCO models and convert the targeted model to ONNX and then to TensorRT engine. I use "yolov4-416" as example below. (Supported models: "yolov3-tiny-288", "yolov3-tiny-416", "yolov3-288", "yolov3-416", "yolov3-608", "yolov3-spp-288", "yolov3-spp-416", "yolov3-spp-608", "yolov4-tiny-288", "yolov4-tiny-416", "yolov4-288", "yolov4-416", "yolov4-608", "yolov4-csp-256", "yolov4-csp-512", "yolov4x-mish-320", "yolov4x-mish-640", and custom models such as "yolov4-416x256".)
$ cd ${HOME}/project/tensorrt_demos/yolo $ ./download_yolo.sh $ python3 yolo_to_onnx.py -m yolov4-416 $ python3 onnx_to_tensorrt.py -m yolov4-416
The last step ("onnx_to_tensorrt.py") takes a little bit more than half an hour to complete on my Jetson Nano DevKit. When that is done, the optimized TensorRT engine would be saved as "yolov4-416.trt".
In case "onnx_to_tensorrt.py" fails (process "Killed" by Linux kernel), it could likely be that the Jetson platform runs out of memory during conversion of the TensorRT engine. This problem might be solved by adding a larger swap file to the system. Reference: Process killed in onnx_to_tensorrt.py Demo#5.
-
Test the TensorRT "yolov4-416" engine with the "dog.jpg" image.
$ cd ${HOME}/project/tensorrt_demos $ wget https://raw.githubusercontent.com/pjreddie/darknet/master/data/dog.jpg -O ${HOME}/Pictures/dog.jpg $ python3 trt_yolo.py --image ${HOME}/Pictures/dog.jpg \ -m yolov4-416
This is a screenshot of the demo against JetPack-4.4, i.e. TensorRT 7.
-
Similar to step 5 of Demo #3, I created an "eval_yolo.py" for evaluating mAP of the TensorRT yolov3/yolov4 engines. Refer to README_mAP.md for details.
$ python3 eval_yolo.py -m yolov3-tiny-288 $ python3 eval_yolo.py -m yolov4-tiny-416 ...... $ python3 eval_yolo.py -m yolov4-608 $ python3 eval_yolo.py -l -m yolov4-csp-256 ...... $ python3 eval_yolo.py -l -m yolov4x-mish-640
I evaluated all these TensorRT yolov3/yolov4 engines with COCO "val2017" data and got the following results. I also checked the FPS (frames per second) numbers on my Jetson Nano DevKit with JetPack-4.4 (TensorRT 7).
TensorRT engine mAP @
IoU=0.5:0.95mAP @
IoU=0.5FPS on Nano yolov3-tiny-288 (FP16) 0.077 0.158 35.8 yolov3-tiny-416 (FP16) 0.096 0.202 25.5 yolov3-288 (FP16) 0.331 0.601 8.16 yolov3-416 (FP16) 0.373 0.664 4.93 yolov3-608 (FP16) 0.376 0.665 2.53 yolov3-spp-288 (FP16) 0.339 0.594 8.16 yolov3-spp-416 (FP16) 0.391 0.664 4.82 yolov3-spp-608 (FP16) 0.410 0.685 2.49 yolov4-tiny-288 (FP16) 0.179 0.344 36.6 yolov4-tiny-416 (FP16) 0.196 0.387 25.5 yolov4-288 (FP16) 0.376 0.591 7.93 yolov4-416 (FP16) 0.459 0.700 4.62 yolov4-608 (FP16) 0.488 0.736 2.35 yolov4-csp-256 (FP16) 0.336 0.502 12.8 yolov4-csp-512 (FP16) 0.436 0.630 4.26 yolov4x-mish-320 (FP16) 0.400 0.581 4.79 yolov4x-mish-640 (FP16) 0.470 0.668 1.46