๐Ÿ“ฆ iamstarlee / YOLOv8-ONNXRuntime-CPP

This example demonstrates how to perform inference using YOLOv8 in C++ with ONNX Runtime and OpenCV's API.

โ˜… 11 stars โ‘‚ 1 forks ๐Ÿ‘ 11 watching
๐Ÿ“ฅ Clone https://github.com/iamstarlee/YOLOv8-ONNXRuntime-CPP.git
HTTPS git clone https://github.com/iamstarlee/YOLOv8-ONNXRuntime-CPP.git
SSH git clone git@github.com:iamstarlee/YOLOv8-ONNXRuntime-CPP.git
CLI gh repo clone iamstarlee/YOLOv8-ONNXRuntime-CPP
Xinxin Li Xinxin Li Create main.cpp e2e43f0 1 years ago ๐Ÿ“ History
๐Ÿ“‚ main View all commits โ†’
๐Ÿ“„ CMakeLists.txt
๐Ÿ“„ inference.cpp
๐Ÿ“„ inference.h
๐Ÿ“„ main.cpp
๐Ÿ“„ README.md
๐Ÿ“„ README.md

YOLOv8 OnnxRuntime C++

C++ Onnx-runtime

This example demonstrates how to perform inference using YOLOv8 in C++ with ONNX Runtime and OpenCV's API.

Benefits โœจ

  • Friendly for deployment in the industrial sector.
  • Faster than OpenCV's DNN inference on both CPU and GPU.
  • Supports FP32 and FP16 CUDA acceleration.

Note โ˜•

  • Benefit for Ultralytics' latest release, a Transpose op is added to the YOLOv8 model, while make v8 and v5 has the same output shape. Therefore, you can run inference with YOLOv5/v7/v8 via this project.

Exporting YOLOv8 Models ๐Ÿ“ฆ

To export YOLOv8 models, use the following Python script:

from ultralytics import YOLO

# Load a YOLOv8 model
model = YOLO("yolov8n.pt")

# Export the model
model.export(format="onnx", opset=12, simplify=True, dynamic=False, imgsz=640)

Alternatively, you can use the following command for exporting the model in the terminal

yolo export model=yolov8n.pt opset=12 simplify=True dynamic=False format=onnx imgsz=640,640

Exporting YOLOv8 FP16 Models ๐Ÿ“ฆ

import onnx
from onnxconverter_common import float16

model = onnx.load(R"YOUR_ONNX_PATH")
model_fp16 = float16.convert_float_to_float16(model)
onnx.save(model_fp16, R"YOUR_FP16_ONNX_PATH")

Download COCO.yaml file ๐Ÿ“‚

In order to run example, you also need to download coco.yaml. You can download the file manually from here

Dependencies โš™๏ธ

DependencyVersion
Onnxruntime(linux,windows,macos)>=1.14.1
OpenCV>=4.0.0
C++ Standard>=17
Cmake>=3.5
Cuda (Optional)>=11.4 \<12.0
cuDNN (Cuda required)=8
Note: The dependency on C++17 is due to the usage of the C++17 filesystem feature.

Note (2): Due to ONNX Runtime, we need to use CUDA 11 and cuDNN 8. Keep in mind that this requirement might change in the future.

Build ๐Ÿ› ๏ธ

  • Clone the repository to your local machine.
  • Navigate to the root directory of the repository.
  • Create a build directory and navigate to it:
mkdir build && cd build

  • Run CMake to generate the build files:
cmake ..

  • Build the project:
make

  • The built executable should now be located in the build directory.

Usage ๐Ÿš€

``c++ //change your param as you like //Pay attention to your device and the onnx model type(fp32 or fp16) DL_INIT_PARAM params; params.rectConfidenceThreshold = 0.1; params.iouThreshold = 0.5; params.modelPath = "yolov8n.onnx"; params.imgSize = { 640, 640 }; params.cudaEnable = true; params.modelType = YOLO_DETECT_V8; yoloDetector->CreateSession(params); Detector(yoloDetector); ``