YOLOv5、YOLOv6、YOLOv7、YOLOv8、YOLOv9、YOLOv10、YOLOv11 推理的 C++ 和 Python 实现

扫测资讯 2024-11-17 06:07   106 0

yolo 推理

YOLOv5、YOLOv6、YOLOv7、YOLOv8、YOLOv9、YOLOv10、YOLOv11 推理的 C++ 和 Python 实现

支持的推理后端包括 Libtorch/PyTorch、ONNXRuntime、OpenCV、OpenVINO 和 TensorRT。

支持的任务类型包括分类、检测和分割。

支持的模型类型包括FP32、FP16和INT8。

yolo测试

C++代码测试

你可以使用以下方法测试 C++ 代码:

# Windows
mkdir build ; cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build . --config Release
./run.bat

或者

# Linux
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
./run.sh

Docker上对C++测试

在Docker中的Ubuntu22.04上进行C++测试(CPU i7-12700,GPU RTX3070):

模型 任务 设备 精确 LibTorch ONNX运行时 OpenCV 开放的VINO TensorRT
YOLOv5n 分类 中央处理器 FP32 15.3毫秒 12.2毫秒 20.6毫秒 14.1毫秒 ×
YOLOv5n 分类 图形处理器 FP32 4.9毫秒 5.1毫秒 5.1毫秒 4.1毫秒
YOLOv5n 分类 中央处理器 FP16 × 21.7毫秒 20.1毫秒 14.0毫秒 ×
YOLOv5n 分类 图形处理器 FP16 4.6毫秒 8.1毫秒 4.9毫秒 3.2毫秒
YOLOv5n 分类 中央处理器 INT8 × 18.3毫秒 × ×
YOLOv5n 分类 图形处理器 INT8 × 34.2毫秒 × 3.0毫秒
YOLOv5n 探测 中央处理器 FP32 23.3毫秒 20.2毫秒 57.3毫秒 20.0毫秒 ×
YOLOv5n 探测 图形处理器 FP32 7.2毫秒 6.4毫秒 8.2毫秒 4.4毫秒
YOLOv5n 探测 中央处理器 FP16 × 41.8毫秒 57.3毫秒 19.8毫秒 ×
YOLOv5n 探测 图形处理器 FP16 6.8毫秒 18.8毫秒 7.9毫秒 3.9毫秒
YOLOv5n 探测 中央处理器 INT8 × 26.7毫秒 × 18.1毫秒 ×
YOLOv5n 探测 图形处理器 INT8 × 49.3毫秒 × 3.5毫秒
YOLOv5n 部分 中央处理器 FP32 × 28.2毫秒 75.8毫秒 27.2毫秒 ×
YOLOv5n 部分 图形处理器 FP32 10.6毫秒 10.6毫秒 10.8毫秒 6.3毫秒
YOLOv5n 部分 中央处理器 FP16 × 55.0毫秒 75.9毫秒 27.2毫秒 ×
YOLOv5n 部分 图形处理器 FP16 9.8毫秒 29.0毫秒 10.0毫秒 5.0毫秒
YOLOv5n 部分 中央处理器 INT8 × 34.5毫秒 × ×
YOLOv5n 部分 图形处理器 INT8 × 62.1毫秒 × 4.2毫秒
YOLOv6n 探测 中央处理器 FP32 28.1毫秒 29.7毫秒 29.3毫秒 ×
YOLOv6n 探测 图形处理器 FP32 6.4毫秒 6.5毫秒 5.0毫秒
YOLOv6n 探测 中央处理器 FP16 47.1毫秒 27.4毫秒 29.3毫秒 ×
YOLOv6n 探测 图形处理器 FP16 13.1毫秒 6.2毫秒 3.5毫秒
YOLOv6n 探测 中央处理器 INT8 38.5毫秒 × 23.4毫秒 ×
YOLOv6n 探测 图形处理器 INT8 95.7毫秒 × 4.1毫秒
YOLOv7t 探测 中央处理器 FP32 50.5毫秒 33.6毫秒 59.9毫秒 34.8毫秒 ×
YOLOv7t 探测 图形处理器 FP32 8.0毫秒 7.7毫秒 8.7毫秒 5.5毫秒
YOLOv7t 探测 中央处理器 FP16 71.7毫秒 63.7毫秒 34.7毫秒 ×
YOLOv7t 探测 图形处理器 FP16 21.3毫秒 7.0毫秒 3.9毫秒
YOLOv7t 探测 中央处理器 INT8 50.7毫秒 × 27.8毫秒 ×
YOLOv7t 探测 图形处理器 INT8 85.6毫秒 × 3.7毫秒
YOLOv8n 分类 中央处理器 FP32 3.5毫秒 2.2毫秒 4.0毫秒 2.4毫秒 ×
YOLOv8n 分类 图形处理器 FP32 2.3毫秒 1.5毫秒 1.9毫秒 1.2毫秒
YOLOv8n 分类 中央处理器 FP16 × 6.3毫秒 4.0毫秒 2.4毫秒 ×
YOLOv8n 分类 图形处理器 FP16 1.7毫秒 1.7毫秒 1.0毫秒
YOLOv8n 分类 中央处理器 INT8 × 3.4毫秒 × ×
YOLOv8n 分类 图形处理器 INT8 × 7.8毫秒 × 1.0毫秒
YOLOv8n 探测 中央处理器 FP32 33.3毫秒 27.9毫秒 42.2毫秒 28.6毫秒 ×
YOLOv8n 探测 图形处理器 FP32 6.4毫秒 6.9毫秒 6.8毫秒 6.0毫秒
YOLOv8n 探测 中央处理器 FP16 × 57.2毫秒 41.9毫秒 28.6毫秒 ×
YOLOv8n 探测 图形处理器 FP16 19.4毫秒 5.7毫秒 3.7毫秒
YOLOv8n 探测 中央处理器 INT8 × 37.3毫秒 × 24.5毫秒 ×
YOLOv8n 探测 图形处理器 INT8 × 85.5毫秒 × 4.7毫秒
YOLOv8n 部分 中央处理器 FP32 × 42.9毫秒 54.7毫秒 37.5毫秒 ×
YOLOv8n 部分 图形处理器 FP32 9.5毫秒 10.5毫秒 × 8.1毫秒
YOLOv8n 部分 中央处理器 FP16 × 73.1毫秒 54.9毫秒 37.4毫秒 ×
YOLOv8n 部分 图形处理器 FP16 27.3毫秒 × 5.9毫秒
YOLOv8n 部分 中央处理器 INT8 × 51.0毫秒 × ×
YOLOv8n 部分 图形处理器 INT8 × 101.1毫秒 × 5.6毫秒
YOLOv9t 探测 中央处理器 FP32 40.8毫秒 34.6毫秒 54.1毫秒 29.0毫秒 ×
YOLOv9t 探测 图形处理器 FP32 8.1毫秒 9.4米 9.7毫秒 7.1毫秒
YOLOv9t 探测 中央处理器 FP16 60.6毫秒 55.0毫秒 29.0毫秒 ×
YOLOv9t 探测 图形处理器 FP16 17.9毫秒 9.0毫秒 4.9毫秒
YOLOv9t 探测 中央处理器 INT8 48.0毫秒 × 27.0毫秒 ×
YOLOv9t 探测 图形处理器 INT8 135.2毫秒 × 5.6毫秒
YOLOv10n 探测 中央处理器 FP32 30.4毫秒 27.9毫秒 26.1毫秒 ×
YOLOv10n 探测 图形处理器 FP32 6.0毫秒 6.5 米
YOLOv10n 探测 中央处理器 FP16 56.4毫秒 26.0毫秒 ×
YOLOv10n 探测 图形处理器 FP16 10.9毫秒
YOLOv10n 探测 中央处理器 INT8 40.7毫秒 × 23.5毫秒 ×
YOLOv10n 探测 图形处理器 INT8 83.9毫秒 ×
YOLOv11n 分类 中央处理器 FP32 4.1毫秒 2.4毫秒 4.4毫秒 2.6毫秒 ×
YOLOv11n 分类 图形处理器 FP32 2.7毫秒 1.7毫秒 × 1.4毫秒
YOLOv11n 分类 中央处理器 FP16 × 6.3毫秒 4.5毫秒 2.6毫秒 ×
YOLOv11n 分类 图形处理器 FP16 2.1毫秒 × 1.1毫秒
YOLOv11n 分类 中央处理器 INT8 × × ×
YOLOv11n 分类 图形处理器 INT8 × × 1.3毫秒
YOLOv11n 探测 中央处理器 FP32 35.0毫秒 26.9毫秒 44.4毫秒 25.0毫秒 ×
YOLOv11n 探测 图形处理器 FP32 7.2毫秒 7.2毫秒 × 6.0毫秒
YOLOv11n 探测 中央处理器 FP16 × 61.3毫秒 44.8毫秒 25.0毫秒 ×
YOLOv11n 探测 图形处理器 FP16 20.0毫秒 × 3.9毫秒
YOLOv11n 探测 中央处理器 INT8 × × 22.8毫秒 ×
YOLOv11n 探测 图形处理器 INT8 × × 4.7毫秒
YOLOv11n 部分 中央处理器 FP32 × 38.8毫秒 56.9毫秒 34.0毫秒 ×
YOLOv11n 部分 图形处理器 FP32 10.9毫秒 × 7.5毫秒
YOLOv11n 部分 中央处理器 FP16 × 78.3毫秒 58.1毫秒 33.8毫秒 ×
YOLOv11n 部分 图形处理器 FP16 27.9毫秒 × 6.2毫秒
YOLOv11n 部分 中央处理器 INT8 × × ×
YOLOv11n 部分 图形处理器 INT8 × × 4.9毫秒

Python代码测试

可以使用以下方式测试 Python 代码:

# Windows 
pip install -r requirements.txt
./run.bat

或者

# Linux
pip install -r requirements.txt
./run.sh

Docker上对python测试

在Docker中对Ubuntu22.04进行Python测试(CPU i7-12700,GPU RTX3070):

模型 任务 设备 精确 PyTorch ONNX运行时 OpenCV 开放的VINO TensorRT
YOLOv5n 分类 中央处理器 FP32 26.3毫秒 21.4毫秒 33.2毫秒 21.8毫秒 ×
YOLOv5n 分类 图形处理器 FP32 15.6毫秒 16.1毫秒 16.6毫秒 17.0毫秒
YOLOv5n 分类 中央处理器 FP16 30.3毫秒 31.5毫秒 21.7毫秒 ×
YOLOv5n 分类 图形处理器 FP16 14.5毫秒 18.6毫秒 17.4毫秒 19.8毫秒
YOLOv5n 分类 中央处理器 INT8 28.9毫秒 × ×
YOLOv5n 分类 图形处理器 INT8 54.8毫秒 × 18.9毫秒
YOLOv5n 探测 中央处理器 FP32 30.6毫秒 27.0毫秒 60.0毫秒 24.8毫秒 ×
YOLOv5n 探测 图形处理器 FP32 10.4毫秒 14.9毫秒 10.7毫秒 14.3毫秒
YOLOv5n 探测 中央处理器 FP16 40.7毫秒 59.8毫秒 24.8毫秒 ×
YOLOv5n 探测 图形处理器 FP16 12.3毫秒 19.6毫秒 10.3毫秒 12.8毫秒
YOLOv5n 探测 中央处理器 INT8 33.7毫秒 × 23.1毫秒 ×
YOLOv5n 探测 图形处理器 INT8 72.9毫秒 × 13.8毫秒
YOLOv5n 部分 中央处理器 FP32 159.2毫秒 116.1毫秒 147.2毫秒 47.8毫秒 ×
YOLOv5n 部分 图形处理器 FP32 34.6毫秒 49.1毫秒 38.0毫秒 70.7毫秒
YOLOv5n 部分 中央处理器 FP16 138.8毫秒 142.2毫秒 48.2毫秒 ×
YOLOv5n 部分 图形处理器 FP16 50.9毫秒 78.9毫秒 52.4毫秒 72.6毫秒
YOLOv5n 部分 中央处理器 INT8 127.6毫秒 × ×
YOLOv5n 部分 图形处理器 INT8 191.8毫秒 × 13.3毫秒
YOLOv6n 探测 中央处理器 FP32 54.0毫秒 48.1毫秒 52.0毫秒 ×
YOLOv6n 探测 图形处理器 FP32 40.0毫秒 34.2毫秒 43.0毫秒
YOLOv6n 探测 中央处理器 FP16 66.4毫秒 48.1毫秒 51.8毫秒 ×
YOLOv6n 探测 图形处理器 FP16 49.9毫秒 36.3毫秒 40.5毫秒
YOLOv6n 探测 中央处理器 INT8 67.1毫秒 × 44.9毫秒 ×
YOLOv6n 探测 图形处理器 INT8 241.4毫秒 × 61.7毫秒
YOLOv7t 探测 中央处理器 FP32 53.3 41.1毫秒 62.9毫秒 39.4毫秒 ×
YOLOv7t 探测 图形处理器 FP32 10.6 16.5毫秒 10.4毫秒 14.0毫秒
YOLOv7t 探测 中央处理器 FP16 72.2毫秒 62.9毫秒 39.4毫秒 ×
YOLOv7t 探测 图形处理器 FP16 24.3毫秒 9.1毫秒 12.7毫秒
YOLOv7t 探测 中央处理器 INT8 58.2毫秒 × 32.4毫秒 ×
YOLOv7t 探测 图形处理器 INT8 101.8毫秒 × 12.9毫秒
YOLOv8n 分类 中央处理器 FP32 3.5毫秒 2.2毫秒 4.1毫秒 2.3毫秒 ×
YOLOv8n 分类 图形处理器 FP32 2.5毫秒 1.6毫秒 1.8毫秒 3.5毫秒
YOLOv8n 分类 中央处理器 FP16 6.3毫秒 4.1秒 2.3毫秒 ×
YOLOv8n 分类 图形处理器 FP16 1.7毫秒 1.7毫秒 2.8毫秒
YOLOv8n 分类 中央处理器 INT8 3.7毫秒 × ×
YOLOv8n 分类 图形处理器 INT8 8.2毫秒 × 3.0毫秒
YOLOv8n 探测 中央处理器 FP32 59.2毫秒 57.8毫秒 60.3秒 49.4毫秒 ×
YOLOv8n 探测 图形处理器 FP32 35.5毫秒 40.5毫秒 29.4毫秒 39.1毫秒
YOLOv8n 探测 中央处理器 FP16 77.1毫秒 61.3毫秒 49.6毫秒 ×
YOLOv8n 探测 图形处理器 FP16 60.4毫秒 30.8毫秒 38.1毫秒
YOLOv8n 探测 中央处理器 INT8 64.1毫秒 × 44.1毫秒 ×
YOLOv8n 探测 图形处理器 INT8 138.7毫秒 × 40.9毫秒
YOLOv8n 部分 中央处理器 FP32 184.7毫秒 157.8毫秒 142.3毫秒 100.0毫秒 ×
YOLOv8n 部分 图形处理器 FP32 94.3毫秒 104.2毫秒 88.5毫秒 116.6毫秒
YOLOv8n 部分 中央处理器 FP16 180.4毫秒 144.8秒 99.3毫秒 ×
YOLOv8n 部分 图形处理器 FP16 122.2毫秒 108.7毫秒 118.7毫秒
YOLOv8n 部分 中央处理器 INT8 166.4毫秒 × ×
YOLOv8n 部分 图形处理器 INT8 275.3毫秒 × 40.9毫秒
YOLOv9t 探测 中央处理器 FP32 61.0毫秒 61.0毫秒 74.9毫秒 49.7毫秒 ×
YOLOv9t 探测 图形处理器 FP32 33.6毫秒 41.4米 31.2毫秒 40.2毫秒
YOLOv9t 探测 中央处理器 FP16 81.0毫秒 75.4毫秒 49.6毫秒 ×
YOLOv9t 探测 图形处理器 FP16 45.9毫秒 33.5毫秒 41.5毫秒
YOLOv9t 探测 中央处理器 INT8 74.4毫秒 × 46.8毫秒 ×
YOLOv9t 探测 图形处理器 INT8 384.5毫秒 × 47.5毫秒
YOLOv10n 探测 中央处理器 FP32 33.7毫秒 34.7毫秒 28.6毫秒 ×
YOLOv10n 探测 图形处理器 FP32 8.3毫秒 13.0米
YOLOv10n 探测 中央处理器 FP16 57.8毫秒 28.6毫秒 ×
YOLOv10n 探测 图形处理器 FP16 14.4毫秒
YOLOv10n 探测 中央处理器 INT8 49.8毫秒 × 26.1毫秒 ×
YOLOv10n 探测 图形处理器 INT8 103.0毫秒 ×
YOLOv11n 分类 中央处理器 FP32 4.1毫秒 2.3毫秒 4.6毫秒 2.5毫秒 ×
YOLOv11n 分类 图形处理器 FP32 2.8毫秒 1.7毫秒 3.7毫秒
YOLOv11n 分类 中央处理器 FP16 6.1毫秒 4.5毫秒 2.5毫秒 ×
YOLOv11n 分类 图形处理器 FP16 1.9毫秒 3.3毫秒
YOLOv11n 分类 中央处理器 INT8 × ×
YOLOv11n 分类 图形处理器 INT8 × 3.6毫秒
YOLOv11n 探测 中央处理器 FP32 62.2毫秒 52.9毫秒 66.2毫秒 45.2毫秒 ×
YOLOv11n 探测 图形处理器 FP32 38.7毫秒 41.2毫秒 36.6毫秒
YOLOv11n 探测 中央处理器 FP16 82.5毫秒 63.0毫秒 45.1毫秒 ×
YOLOv11n 探测 图形处理器 FP16 58.2毫秒 38.2毫秒
YOLOv11n 探测 中央处理器 INT8 × 50.0毫秒 ×
YOLOv11n 探测 图形处理器 INT8 × 39.1毫秒
YOLOv11n 部分 中央处理器 FP32 183.5毫秒 152.7毫秒 144.1毫秒 91.9毫秒 ×
YOLOv11n 部分 图形处理器 FP32 98.2毫秒 116.2毫秒 114.9毫秒
YOLOv11n 部分 中央处理器 FP16 185.4毫秒 155.2毫秒 92.3毫秒 ×
YOLOv11n 部分 图形处理器 FP16 ?多发性硬化症 130.4毫秒 120.2毫秒
YOLOv11n 部分 中央处理器 INT8 × ×
YOLOv11n 部分 图形处理器 INT8 × 39.0毫秒

你可以使用以下命令获取 docker 镜像:

docker pull taify/yolo_inference:latest