这个问题困扰了我很长时间,请教您的建议,该往哪个方向发展。目标 - 在 Windows 上使用 yolo 开发通用应用程序,可以使用 AMD/Nvidia/Intel GPU、AMD/Intel CPU 的计算能力(将使用其中一种设备)。据我所知,OpenCV DNN模块在CPU计算方面处于领先地位;计划为 Nvidia 显卡提供 DNN + Cuda 捆绑包,并计划为 Intel GPU 提供 DNN + OpenCL 捆绑包。但是使用 DNN + OpenCL 测试 AMD GPU rx580 时,我遇到了以下问题:https://github.com/opencv/opencv/issues/17656。这个模块根本不支持AMD GPU计算吗?如果是这样,您能否告诉我这可以在什么平台上实现,并且最好尽可能高效。一个可能的解决方案可能是腾讯的ncnn,但我不确定桌面上的性能。我所说的输出是指检测到的对象的坐标及其名称(在 opencv dnn 模块中,我使用 cv::dnn::Net::forward() 获取它们)。另外,如果我有错的地方,请纠正我。如有任何反馈,我们将不胜感激。
我尝试了 OpenCV DNN + OpenCL 模块并期望获得高性能,但这种组合不起作用。
我在 yolov8 ON WINDOWS 上做了这个,我相信它应该与任何其他 yolo 版本一起工作:
1-安装 ONNX 的 DirectML 版本。选择 ONNX DirectML 而不是任何其他变体或版本至关重要。您需要的 Python 包被恰当地命名为“onnxruntime_directml”。 放心使用:
pip install onnxruntime_directml
2- 将 YOLO 模型渲染为 ONNX 格式。
from ultralytics import YOLO
model = YOLO('yolov8n.pt')
model.export(format='onnx')
3- 将“DmlExecutionProvider”字符串添加到提供程序列表中: 这是“venv\Lib\site-packages\ultralytics”中的第 133 行到 140 行 n utobackend.py":
elif onnx: # ONNX Runtime
LOGGER.info(f'Loading {w} for ONNX Runtime inference...')
# check_requirements(('onnx', 'onnxruntime-gpu' if cuda else 'onnxruntime'))
import onnxruntime
providers = ['CUDAExecutionProvider', 'CPUExecutionProvider'] if cuda else ['DmlExecutionProvider', 'CPUExecutionProvider']
session = onnxruntime.InferenceSession(w, providers=providers)
output_names = [x.name for x in session.get_outputs()]
metadata = session.get_modelmeta().custom_metadata_map # metadata
✨ 评论检查_要求第 135 行 ✨ 将“DmlExecutionProvider”字符串添加到提供程序列表中
4-享受模型性能100%开机