首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >OpenCV4.10 DNN部署YOLO11全系模型

OpenCV4.10 DNN部署YOLO11全系模型

作者头像
OpenCV学堂
发布2026-04-02 18:05:06
发布2026-04-02 18:05:06
1340
举报

YOLO11框架

YOLO11 是一个多功能的深度学习框架,支持多种计算机视觉任务。该框架可以用于对象检测、实例分割、OBB(定向边界框)、姿态估计等。每项任务都有不同的目标和应用场景,使您能够使用一个框架解决各种计算机视觉挑战。

OpenCV DNN介绍

OpenCV(开源计算机视觉库)的DNN模块是其重要组成部分之一,它允许开发者通过深度神经网络执行推理任务。该模块支持多种预训练模型,包括SqueezeNet、AlexNet、VGG、GoogleNet、ResNet等,这些模型广泛应用于图像识别、目标检测、语义分割等任务。

使用OpenCV的DNN模块,开发者可以轻松地将这些预训练模型加载到他们的应用程序中,进行推理或进一步的微调。此外,DNN模块还提供了多种后处理技术,如NMS(非极大值抑制)和阈值过滤,以便从模型的输出中提取有用的信息。

通过OpenCV的DNN模块,开发者可以利用硬件加速功能来提高推理速度,这包括对CPU、GPU以及专用的深度学习加速器如NVIDIA TensorRT的支持。这种灵活性和高效性使得OpenCV的DNN模块成为许多计算机视觉和机器学习应用中的重要工具。

基于最新OpenCV4.10版本的DNN已经支持YOLO11全系模型推理。代码实现与分别演示如下

YOLO11对象检测

YOLO11对象检测模型 OpenCV DNN部署推理演示如下:

Python实现的代码如下:

代码语言:javascript
复制
model = cv.dnn.readNetFromONNX("D:/python/yolov5-7.0/yolo11n.onnx")
frame = cv.imread("D:/city_walk.jpg")
bgr = format_yolov5(frame)
img_h, img_w, img_c = bgr.shape
start = time.time()
image = cv.dnn.blobFromImage(bgr, 1 / 255.0, (640, 640), swapRB=True, crop=False)
model.setInput(image)
# 进行推理
outputs = model.forward()
rows = np.squeeze(outputs, 0)
class_ids = []
confidences = []
boxes = []
x_factor = img_w / 640
y_factor = img_h / 640
for r in range(rows.shape[0]):
    row = rows[r]
    classes_scores = row[4:]
    max_indx = np.argmax(classes_scores) #cv.minMaxLoc(classes_scores)
    class_id = max_indx
    if (classes_scores[class_id] > .5 ):
        confidences.append(classes_scores[class_id])
        class_ids.append(class_id)
        x, y, w, h = row[0].item(), row[1].item(), row[2].item(), row[3].item()
        left = int((x - 0.5 * w) * x_factor)
        top = int((y - 0.5 * h) * y_factor)
        width = int(w * x_factor)
        height = int(h * y_factor)
        box = np.array([left, top, width, height])
        boxes.append(box)
indexes = cv.dnn.NMSBoxes(boxes, confidences, 0.25, 0.45)
for index in indexes:
    box = boxes[index]
    color = colors[int(class_ids[index]) % len(colors)]
    cv.rectangle(frame, box, color, 2)
    cv.rectangle(frame, (box[0], box[1] - 20), (box[0] + box[2], box[1]), color, -1)
    cv.putText(frame, class_list[class_ids[index]], (box[0], box[1] - 10), cv.FONT_HERSHEY_SIMPLEX, .5, (0, 0, 0))
end = time.time()
inf_end = end - start
fps = 1 / inf_end
fps_label = "FPS: %.2f" % fps
cv.putText(frame, fps_label, (20, 45), cv.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
cv.imshow("OpenCV YOLO11 Detection", frame)
cc = cv.waitKey(0)
cv.destroyAllWindows()

YOLO11 实例分割

YOLO11实例分割模型+ OpenCV DNN部署推理演示如下:

我已经给它封装成一个类调用代码如下:

代码语言:javascript
复制
weight_file_path = "D:/python/yolov5-7.0/yolo11n-seg.onnx"
label_map_file_path = "D:/python/yolov5-7.0/classes.txt"
detector = YOLOv8SegDetector(weight_file_path, label_map_file_path)
image = cv.imread("D:/city_walk.jpg")
detector.infer_image(image)
cv.imshow("YOLO11-Segmentation Demo", image)
cv.waitKey(0)
cv.destroyAllWindows()

YOLO11姿态评估

YOLO11姿态评估模型+ OpenCV DNN部署推理演示如下:

调用代码如下:

代码语言:javascript
复制
weight_file_path = "D:/python/yolov5-7.0/yolo11n-pose.onnx"
label_map_file_path = "D:/python/yolov5-7.0/classes.txt"
detector = YOLO11PoseDetector(weight_file_path, label_map_file_path)
image = cv.imread("D:/kgroup.jpg")
detector.infer_image(image)
cv.imshow("YOLO11-Pose Demo", image)
cv.waitKey(0)
cv.destroyAllWindows()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-04-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档