如何使用 YOLOv11 分割对象

文摘   科技   2024-11-15 07:45   重庆  

点击下方卡片,关注“OpenCV与AI深度学习

视觉/图像重干货,第一时间送达!

介绍
    在快速发展的计算机视觉领域,YOLO 模型一直在不断突破实时物体检测和分割的界限。从最早的迭代开始,YOLO 就改变了机器解读视觉数据的方式,优先考虑速度和准确性。现在,借助 YOLOv11,我们看到性能和功能有了显著的飞跃,尤其是在物体分割方面——这是一项关键技术,它不仅能让我们检测物体,还能让我们在图像中区分物体的确切边界。
    在之前的博客中,我探讨了如何使用YOLOv8和YOLOv9实现对象分割,并讨论了每个版本为该领域带来的改进。YOLOv11 在此基础上构建,具有增强的神经架构和优化的分割功能,可提供更准确、更高效的对象描绘。这使得它对于自动驾驶、医学成像和实时监控等应用特别有价值,在这些应用中,了解物体的形状和大小与简单地检测它们一样重要。
    与单纯的检测不同,对象分割是指了解对象的确切空间属性,使我们能够将图像划分为有意义的区域。YOLOv11 使用高级卷积层和创新的主干网络来提供更清晰、更准确的对象边界,即使在复杂或混乱的场景中也是如此。在这篇博客中,我将向您展示 YOLOv11 如何改进分割任务,并概述在您自己的项目中实现它的步骤。
如何使用 YOLOv11 分割图像
    步骤1:安装必要的库
pip install opencv-python ultralytics numpy
    步骤2:导入库
from ultralytics import YOLOimport randomimport cv2import numpy as np
    步骤3:选择模型
model = YOLO("yolo11m-seg.pt")
    下载链接:
https://docs.ultralytics.com/tasks/segment/#models
    步骤4:使用 YOLOv11 分割图像中的对象
img = cv2.imread( "YourImagePath" ) 
# 如果你想要所有的类yolo_classes = list (model.names.values()) classes_ids = [yolo_classes.index(clas) for clas in yolo_classes] conf = 0.2 results = model.predict(img, conf=conf) colors = [random.choices( range ( 256 ), k= 3 ) for _ in classes_ids] print (results) for result in results: for mask, box in zip (result.masks.xy, result.boxes): points = np.int32([mask]) color_number = classes_ids.index( int (box.cls[ 0 ])) cv2.fillPoly(img, points, colors[color_number])
    1.加载图像:
    img = cv2.imread("YourImagePath")使用OpenCV的函数从指定路径读取图像cv2.imread()。
    2. 预测准备:
    yolo_classes = list(model.names.values())创建YOLOv11模型识别的类名列表。
    classes_ids = [yolo_classes.index(clas) for clas in yolo_classes]创建与这些名称对应的类 ID 列表。
    conf = 0.2设置对象检测的置信度阈值。只有置信度分数高于此阈值的预测才会被考虑。
    3.运行模型预测:
    results = model.predict(img, conf=conf)调用predict()YOLOv11 模型的方法对加载的图像进行预测。结果包括检测到的物体、其边界框、掩码(多边形轮廓)、置信度分数和类别预测。
    colors = [random.choices(range(256), k=3) for _ in classes_ids]生成一个随机颜色列表,每个类别一个,用于视觉表示。
    4. 处理结果和可视化蒙版:
    循环for遍历结果中每个检测到的对象:
    mask, box = zip(result.masks.xy, result.boxes)解压对象的掩码坐标和边界框信息。
    points = np.int32([mask])将掩码坐标(可能是浮点格式)转换为整数,以便使用 OpenCV 在图像上绘制。
    color_number = classes_ids.index(int(box.cls[0]))根据对象的预测类别确定视觉表示的颜色索引。
    cv2.fillPoly(img, points, colors[color_number])使用原始图像上的相应颜色填充蒙版坐标定义的多边形,有效地创建对象的视觉分割。
    步骤5:保存并绘制结果图像
cv2.imshow("Image", img)cv2.waitKey(0)cv2.imwrite("YourSavePath", img)
    完整代码:
from ultralytics import YOLOimport randomimport cv2import numpy as np
model = YOLO("yolo11m-seg.pt")
img = cv2.imread("00.jpg")
# if you want all classesyolo_classes = list(model.names.values())classes_ids = [yolo_classes.index(clas) for clas in yolo_classes]
conf = 0.2
results = model.predict(img, conf=conf)colors = [random.choices(range(256), k=3) for _ in classes_ids]
for result in results: for mask, box in zip(result.masks.xy, result.boxes): points = np.int32([mask]) color_number = classes_ids.index(int(box.cls[0])) cv2.fillPoly(img, points, colors[color_number])
cv2.imshow("Image", img)cv2.waitKey(0)
cv2.imwrite("res.jpg", img)

—THE END—

下载1:Pytorch常用函数手册

在「OpenCV与AI深度学习公众号后台回复:Pytorch函数手册即可下载学习全网第一份Pytorch函数常用手册,包括Tensors介绍、基础函数介绍、数据处理函数、优化函数、CUDA编程、多处理等十四章内容。

下载2:145个OpenCV实例应用代码
在「OpenCV与AI深度学习」公众号后台回复:OpenCV145即可下载学习145个OpenCV实例应用代码(Python和C++双语言实现)。

欢迎加入CV学习交流微信

觉得有用,记得点个赞和在看 

OpenCV与AI深度学习
专注计算机视觉、深度学习和人工智能领域干货、应用、行业资讯的分享交流!
 最新文章