From b9a4bbbaa1ecd5a07a96c594d8c9432a452eefbc Mon Sep 17 00:00:00 2001 From: triple-Mu Date: Tue, 11 Jul 2023 16:35:34 +0800 Subject: [PATCH] Add docs --- docs/Jetson.md | 18 ++++++++----- docs/Normal.md | 48 ++++++++++++++++++++++++++------- docs/Pose.md | 72 +++++++++++++++++++++++++++++++++++++++++++------ docs/Segment.md | 55 +++++++++++++++++++++++++++++-------- 4 files changed, 158 insertions(+), 35 deletions(-) diff --git a/docs/Jetson.md b/docs/Jetson.md index e10b613..b804279 100644 --- a/docs/Jetson.md +++ b/docs/Jetson.md @@ -3,6 +3,7 @@ Only test on `Jetson-NX 4GB` ENVS: + - Jetpack 4.6.3 - CUDA-10.2 - CUDNN-8.2.1 @@ -20,7 +21,8 @@ If you have other environment-related issues, please discuss in issue. `yolov8s.pt` is your trained pytorch model, or the official pre-trained model. Do not use any model other than pytorch model. -Do not use [`build.py`](../build.py) to export engine if you don't know how to install pytorch and other environments on jetson. +Do not use [`build.py`](../build.py) to export engine if you don't know how to install pytorch and other environments on +jetson. ***!!! Please use the PC to execute the following script !!!*** @@ -79,7 +81,8 @@ Usage: `yolov8s-seg.pt` is your trained pytorch model, or the official pre-trained model. Do not use any model other than pytorch model. -Do not use [`build.py`](../build.py) to export engine if you don't know how to install pytorch and other environments on jetson. +Do not use [`build.py`](../build.py) to export engine if you don't know how to install pytorch and other environments on +jetson. ***!!! Please use the PC to execute the following script !!!*** @@ -106,7 +109,8 @@ Here is a demo: [`csrc/jetson/segment`](../csrc/jetson/segment) . #### Build: -Please modify `CLASS_NAMES` and `COLORS` and postprocess parameters in [`main.cpp`](../csrc/jetson/segment/main.cpp) for yourself. +Please modify `CLASS_NAMES` and `COLORS` and postprocess parameters in [`main.cpp`](../csrc/jetson/segment/main.cpp) for +yourself. ```c++ int topk = 100; @@ -140,8 +144,6 @@ Usage: ./yolov8-seg yolov8s-seg.engine data/test.mp4 # the video path ``` - - ## Normal Posture ### 1. Export Posture Normal ONNX @@ -149,7 +151,8 @@ Usage: `yolov8s-pose.pt` is your trained pytorch model, or the official pre-trained model. Do not use any model other than pytorch model. -Do not use [`build.py`](../build.py) to export engine if you don't know how to install pytorch and other environments on jetson. +Do not use [`build.py`](../build.py) to export engine if you don't know how to install pytorch and other environments on +jetson. ***!!! Please use the PC to execute the following script !!!*** @@ -176,7 +179,8 @@ Here is a demo: [`csrc/jetson/pose`](../csrc/jetson/pose) . #### Build: -Please modify `KPS_COLORS` and `SKELETON` and `LIMB_COLORS` and postprocess parameters in [`main.cpp`](../csrc/jetson/pose/main.cpp) for yourself. +Please modify `KPS_COLORS` and `SKELETON` and `LIMB_COLORS` and postprocess parameters +in [`main.cpp`](../csrc/jetson/pose/main.cpp) for yourself. ```c++ int topk = 100; diff --git a/docs/Normal.md b/docs/Normal.md index 1b9eede..0435f5b 100644 --- a/docs/Normal.md +++ b/docs/Normal.md @@ -2,23 +2,39 @@ ## Export TensorRT Engine -### 1. Python script +### 1. ONNX -> TensorRT -Usage: +You can export your onnx model by `ultralytics` API. -```python +``` shell +yolo export model=yolov8s.pt format=onnx opset=11 simplify=True +``` +or run this python script: + +```python from ultralytics import YOLO # Load a model model = YOLO("yolov8s.pt") # load a pretrained model (recommended for training) -success = model.export(format="engine", device=0) # export the model to engine format +success = model.export(format="onnx", opset=11, simplify=True) # export the model to onnx format assert success ``` -After executing the above script, you will get an engine named `yolov8s.engine` . +Then build engine by Trtexec Tools. + +You can export TensorRT engine by [`trtexec`](https://github.com/NVIDIA/TensorRT/tree/main/samples/trtexec) tools. + +Usage: + +``` shell +/usr/src/tensorrt/bin/trtexec \ +--onnx=yolov8s.onnx \ +--saveEngine=yolov8s.engine \ +--fp16 +``` -### 2. CLI tools +### 2. Direct to TensorRT (NOT RECOMMAND!!) Usage: @@ -26,7 +42,19 @@ Usage: yolo export model=yolov8s.pt format=engine device=0 ``` -After executing the above command, you will get an engine named `yolov8s.engine` too. +or run python script: + +```python + +from ultralytics import YOLO + +# Load a model +model = YOLO("yolov8s.pt") # load a pretrained model (recommended for training) +success = model.export(format="engine", device=0) # export the model to engine format +assert success +``` + +After executing the above script, you will get an engine named `yolov8s.engine` . ## Inference with c++ @@ -34,9 +62,11 @@ You can infer with c++ in [`csrc/detect/normal`](../csrc/detect/normal) . ### Build: -Please set you own librarys in [`CMakeLists.txt`](../csrc/detect/normal/CMakeLists.txt) and modify `CLASS_NAMES` and `COLORS` in [`main.cpp`](../csrc/detect/normal/main.cpp). +Please set you own librarys in [`CMakeLists.txt`](../csrc/detect/normal/CMakeLists.txt) and modify `CLASS_NAMES` +and `COLORS` in [`main.cpp`](../csrc/detect/normal/main.cpp). -Besides, you can modify the postprocess parameters such as `num_labels` and `score_thres` and `iou_thres` and `topk` in [`main.cpp`](../csrc/detect/normal/main.cpp). +Besides, you can modify the postprocess parameters such as `num_labels` and `score_thres` and `iou_thres` and `topk` +in [`main.cpp`](../csrc/detect/normal/main.cpp). ```c++ int num_labels = 80; diff --git a/docs/Pose.md b/docs/Pose.md index 61d7fbc..45ea899 100644 --- a/docs/Pose.md +++ b/docs/Pose.md @@ -1,7 +1,7 @@ # YOLOv8-pose Model with TensorRT The yolov8-pose model conversion route is : - YOLOv8 PyTorch model -> ONNX -> TensorRT Engine +YOLOv8 PyTorch model -> ONNX -> TensorRT Engine ***Notice !!!*** We don't support TensorRT API building !!! @@ -9,10 +9,48 @@ The yolov8-pose model conversion route is : You can leave this repo and use the original `ultralytics` repo for onnx export. -### 1. Python script +### 1. ONNX -> TensorRT + +You can export your onnx model by `ultralytics` API. + +``` shell +yolo export model=yolov8s-pose.pt format=onnx opset=11 simplify=True +``` + +or run this python script: + +```python +from ultralytics import YOLO + +# Load a model +model = YOLO("yolov8s-pose.pt") # load a pretrained model (recommended for training) +success = model.export(format="onnx", opset=11, simplify=True) # export the model to onnx format +assert success +``` + +Then build engine by Trtexec Tools. + +You can export TensorRT engine by [`trtexec`](https://github.com/NVIDIA/TensorRT/tree/main/samples/trtexec) tools. + +Usage: + +``` shell +/usr/src/tensorrt/bin/trtexec \ +--onnx=yolov8s-pose.onnx \ +--saveEngine=yolov8s-pose.engine \ +--fp16 +``` + +### 2. Direct to TensorRT (NOT RECOMMAND!!) Usage: +```shell +yolo export model=yolov8s-pose.pt format=engine device=0 +``` + +or run python script: + ```python from ultralytics import YOLO @@ -24,15 +62,31 @@ assert success After executing the above script, you will get an engine named `yolov8s-pose.engine` . -### 2. CLI tools +# Inference + +## Infer with python script + +You can infer images with the engine by [`infer-pose.py`](../infer-pose.py) . Usage: -```shell -yolo export model=yolov8s-pose.pt format=engine device=0 +``` shell +python3 infer-pose.py \ +--engine yolov8s-pose.engine \ +--imgs data \ +--show \ +--out-dir outputs \ +--device cuda:0 ``` -After executing the above command, you will get an engine named `yolov8s-pose.engine` too. +#### Description of all arguments + +- `--engine` : The Engine you export. +- `--imgs` : The images path you want to detect. +- `--show` : Whether to show detection results. +- `--out-dir` : Where to save detection results images. It will not work when use `--show` flag. +- `--device` : The CUDA deivce you use. +- `--profile` : Profile the TensorRT engine. ## Inference with c++ @@ -40,9 +94,11 @@ You can infer with c++ in [`csrc/pose/normal`](../csrc/pose/normal) . ### Build: -Please set you own librarys in [`CMakeLists.txt`](../csrc/pose/normal/CMakeLists.txt) and modify `KPS_COLORS` and `SKELETON` and `LIMB_COLORS` in [`main.cpp`](../csrc/pose/normal/main.cpp). +Please set you own librarys in [`CMakeLists.txt`](../csrc/pose/normal/CMakeLists.txt) and modify `KPS_COLORS` +and `SKELETON` and `LIMB_COLORS` in [`main.cpp`](../csrc/pose/normal/main.cpp). -Besides, you can modify the postprocess parameters such as `score_thres` and `iou_thres` and `topk` in [`main.cpp`](../csrc/pose/normal/main.cpp). +Besides, you can modify the postprocess parameters such as `score_thres` and `iou_thres` and `topk` +in [`main.cpp`](../csrc/pose/normal/main.cpp). ```c++ int topk = 100; diff --git a/docs/Segment.md b/docs/Segment.md index a41b44c..cb335be 100644 --- a/docs/Segment.md +++ b/docs/Segment.md @@ -1,7 +1,7 @@ # YOLOv8-seg Model with TensorRT The yolov8-seg model conversion route is : - YOLOv8 PyTorch model -> ONNX -> TensorRT Engine +YOLOv8 PyTorch model -> ONNX -> TensorRT Engine ***Notice !!!*** We don't support TensorRT API building !!! @@ -96,7 +96,9 @@ You can infer segment engine with c++ in [`csrc/segment/simple`](../csrc/segment ### Build: -Please set you own librarys in [`CMakeLists.txt`](../csrc/segment/simple/CMakeLists.txt) and modify you own config in [`main.cpp`](../csrc/segment/simple/main.cpp) such as `CLASS_NAMES`, `COLORS`, `MASK_COLORS` and postprocess parameters . +Please set you own librarys in [`CMakeLists.txt`](../csrc/segment/simple/CMakeLists.txt) and modify you own config +in [`main.cpp`](../csrc/segment/simple/main.cpp) such as `CLASS_NAMES`, `COLORS`, `MASK_COLORS` and postprocess +parameters . ```c++ int topk = 100; @@ -119,7 +121,8 @@ cd ${root} ***Notice !!!*** -If you have build OpenCV(>=4.7.0) by yourself, it provides a new api [`cv::dnn::NMSBoxesBatched`](https://docs.opencv.org/4.x/d6/d0f/group__dnn.html#ga977aae09fbf7c804e003cfea1d4e928c) . +If you have build OpenCV(>=4.7.0) by yourself, it provides a new +api [`cv::dnn::NMSBoxesBatched`](https://docs.opencv.org/4.x/d6/d0f/group__dnn.html#ga977aae09fbf7c804e003cfea1d4e928c) . It is a gread api about efficient in-class nms . It will be used by default! ***!!!*** @@ -139,22 +142,39 @@ Usage: You can leave this repo and use the original `ultralytics` repo for onnx export. -### 1. Python script +### 1. ONNX -> TensorRT -Usage: +You can export your onnx model by `ultralytics` API. + +``` shell +yolo export model=yolov8s-seg.pt format=onnx opset=11 simplify=True +``` + +or run this python script: ```python from ultralytics import YOLO # Load a model model = YOLO("yolov8s-seg.pt") # load a pretrained model (recommended for training) -success = model.export(format="engine", device=0) # export the model to engine format +success = model.export(format="onnx", opset=11, simplify=True) # export the model to onnx format assert success ``` -After executing the above script, you will get an engine named `yolov8s-seg.engine` . +Then build engine by Trtexec Tools. -### 2. CLI tools +You can export TensorRT engine by [`trtexec`](https://github.com/NVIDIA/TensorRT/tree/main/samples/trtexec) tools. + +Usage: + +``` shell +/usr/src/tensorrt/bin/trtexec \ +--onnx=yolov8s-seg.onnx \ +--saveEngine=yolov8s-seg.engine \ +--fp16 +``` + +### 2. Direct to TensorRT (NOT RECOMMAND!!) Usage: @@ -162,7 +182,18 @@ Usage: yolo export model=yolov8s-seg.pt format=engine device=0 ``` -After executing the above command, you will get an engine named `yolov8s-seg.engine` too. +or run python script: + +```python +from ultralytics import YOLO + +# Load a model +model = YOLO("yolov8s-seg.pt") # load a pretrained model (recommended for training) +success = model.export(format="engine", device=0) # export the model to engine format +assert success +``` + +After executing the above script, you will get an engine named `yolov8s-seg.engine` . ## Inference with c++ @@ -170,9 +201,11 @@ You can infer with c++ in [`csrc/segment/normal`](../csrc/segment/normal) . ### Build: -Please set you own librarys in [`CMakeLists.txt`](../csrc/segment/normal/CMakeLists.txt) and modify `CLASS_NAMES` and `COLORS` in [`main.cpp`](../csrc/segment/normal/main.cpp). +Please set you own librarys in [`CMakeLists.txt`](../csrc/segment/normal/CMakeLists.txt) and modify `CLASS_NAMES` +and `COLORS` in [`main.cpp`](../csrc/segment/normal/main.cpp). -Besides, you can modify the postprocess parameters such as `num_labels` and `score_thres` and `iou_thres` and `topk` in [`main.cpp`](../csrc/segment/normal/main.cpp). +Besides, you can modify the postprocess parameters such as `num_labels` and `score_thres` and `iou_thres` and `topk` +in [`main.cpp`](../csrc/segment/normal/main.cpp). ```c++ int topk = 100;