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