《------往期经典推荐------》
二、机器学习实战专栏【链接】,已更新31期,欢迎关注,持续更新中~~
三、深度学习【Pytorch】专栏【链接】
四、【Stable Diffusion绘画系列】专栏【链接】
五、YOLOv8改进专栏【链接】,持续更新中~~
六、YOLO性能对比专栏【链接】,持续更新中~
《------正文------》
引言
在快速发展的计算机视觉领域,You Only Look Once(YOLO)模型一直在推动实时对象检测和分割的边界。从最早的迭代开始,YOLO就改变了机器解释视觉数据的方式,优先考虑速度和准确性。现在,通过YOLOv11,我们看到了性能和功能的重大飞跃,特别是在对象分割方面-这是一项关键技术,不仅可以检测对象,还可以区分图像中的确切边界。
YOLOv11构建了增强的神经架构和优化的分割功能,可提供更准确,更有效的对象描绘。这使得它对于自动驾驶、医学成像和实时监控等应用特别有价值,在这些应用中,了解物体的形状和大小与简单地检测它们一样重要。
对象分割,而不仅仅是检测,是关于理解对象的确切空间属性,使我们能够将图像划分为有意义的区域。YOLOv 11使用先进的卷积层和创新的骨干网络,即使在复杂或混乱的场景中也能提供更清晰、更准确的对象边界。在这篇博客中,我将向您展示YOLOv 11如何改进分割任务,并概述在您自己的项目中实现它的步骤。
使用YOLOv11进行图像分割
步骤1:安装必要的库
pip install opencv-python ultralytics numpy
步骤2:导入库
from ultralytics import YOLO
import random
import cv2
import numpy as np
步骤3:选择模型
model = YOLO("yolo11x-seg.pt")
我们可以比较不同的模型,并权衡各自的优点和缺点。这里我们选择yolov11x-seg.pt。
步骤4:使用YOLOv 11分割图像中的对象
img = cv2.imread("YourImagePath")
# if you want all classes
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)
调用YOLOv11模型的predict()
方法对加载的图像进行预测。结果包括检测到的对象、它们的边界框、遮罩(多边形轮廓)、置信度分数和类预测。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 YOLO
import random
import cv2
import numpy as np
model = YOLO("yolo11x-seg.pt")
img = cv2.imread("YourImagePath")
# if you want all classes
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]
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("YourSavePath", img)
结论
在本教程中,我们学习了如何在图像和视频中使用YOLOv 11分割对象。如果你觉得这段代码很有帮助,感谢点赞关注!
好了,这篇文章就介绍到这里,喜欢的小伙伴感谢给点个赞和关注,更多精彩内容持续更新~~
关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!