目录
YOLO11环境安装:
提示:由于之前安装了很多版本的YOLO,这次我们直接采用了YOLO10的安装环境
一、YOLO11使用
下载模型:
https://github.com/ultralytics/assets/releases
可以把yolo11s相关的pose、segmentation等都下载好。
测试检测模型
#编写测试代码:python
from ultralytics import YOLO
from PIL import Image
import cv2
# Load a model
modelPath = "yolo11n.pt"
# 加载预训练的COCO RT-DETR-l模型
model = YOLO(modelPath)
# 显示模型信息(可选)
model.info()
imgPath = "resource/cars.jpg"
# from PIL
im1 = Image.open(imgPath)
results = model.predict(source=im1, save=True) # save plotted images
这是yolo11的检测效果:
对比下YOLO10的检测效果:
可以看到,yolo11能检测出更加密集的cars。
测试Pose模型
#编写测试代码:python
from ultralytics import YOLO
from PIL import Image
import cv2
# Load a model
modelPath = "yolo11s-pose.pt"
# 加载预训练的COCO RT-DETR-l模型
model = YOLO(modelPath)
# 显示模型信息(可选)
model.info()
imgPath = "resource/people.jpg"
# from PIL
im1 = Image.open(imgPath)
results = model.predict(source=im1, save=True) # save plotted images
这是yolo11的pose检测效果:
测试Seg模型
#编写测试代码:python
from ultralytics import YOLO
from PIL import Image
import cv2
# Load a model
modelPath = "yolo11s-seg.pt"
# 加载预训练的COCO RT-DETR-l模型
model = YOLO(modelPath)
# 显示模型信息(可选)
model.info()
imgPath = "resource/people.jpg"
# from PIL
im1 = Image.open(imgPath)
results = model.predict(source=im1, save=True) # save plotted images
这是yolo11的pose检测效果:
二、使用SAM2
sam2
SAM 2 是 Meta 的Segment Anything Model (SAM) 的后续产品,是一款专为图像和视频中的综合对象分割而设计的尖端工具。它采用统一、可提示的模型架构,支持实时处理和零镜头泛化,在处理复杂的视觉数据方面表现出色。
特点
统一模型架构
SAM 2 在单一模型中结合了图像和视频分割功能。这种统一简化了部署,并能在不同媒体类型中实现一致的性能。它利用灵活的基于提示的界面,使用户能够通过各种提示类型(如点、边界框或掩码)指定感兴趣的对象。
实时性能
该模型可实现实时推理速度,每秒处理约 44 帧图像。这使得SAM 2 适用于需要即时反馈的应用,如视频编辑和增强现实。
零点概括
SAM 2 可以分割它从未遇到过的物体,展示了强大的零点泛化能力。这在多种多样或不断变化的视觉领域尤其有用,因为在这些领域中,预定义的类别可能无法涵盖所有可能的物体。
互动式改进
用户可以通过提供额外的提示来迭代完善分割结果,从而实现对输出的精确控制。这种交互性对于微调视频注释或医学成像等应用中的结果至关重要。
视觉挑战的高级处理
SAM 2 包括一些机制,用于管理常见的视频分割难题,如物体遮挡和重现。它使用复杂的记忆机制来跟踪各帧中的物体,即使物体暂时被遮挡或退出和重新进入场景,也能确保连续性。
模型架构
核心部件
- Image and Video Encoder: Utilizes a transformer-based architecture to extract high-level features from both images and video frames. This component is responsible for understanding the visual content at each timestep.
- 提示编码器: 处理用户提供的提示(点、框、遮罩),以指导分割任务。这样,SAM 2 就能适应用户输入,并锁定场景中的特定对象。
- 记忆机制:包括记忆编码器、记忆库和记忆注意力模块。这些组件共同存储和利用过去帧的信息,使模型能够在一段时间内保持一致的目标跟踪。
- 掩码解码器:根据编码图像特征和提示生成最终的分割掩码。在视频中,它还使用内存上下文来确保跨帧的准确跟踪。
特点
记忆机制和闭塞处理
记忆机制允许SAM 2 处理视频数据中的时间依赖性和遮挡。当物体移动和互动时,SAM 2 会将其特征记录在记忆库中。当一个物体被遮挡时,模型可以依靠这个记忆库来预测它再次出现时的位置和外观。遮挡头专门处理物体不可见的情况,预测物体被遮挡的可能性。
多掩码模糊解决
在模棱两可的情况下(如物体重叠),SAM 2 可以生成多个掩码预测。这一功能对于准确呈现复杂场景至关重要,因为在复杂场景中,单一掩码可能无法充分描述场景的细微差别。
使用:使用提示来分割图像或视频中的特定对象。
sam2下载
https://github.com/ultralytics/assets/releases/download/v8.2.0/sam2_s.pt
使用box、point或者mask来指定分割的对象。
from ultralytics import SAM
from PIL import Image
import cv2
# Load a model
model = SAM("sam2_b.pt")
# Display model information (optional)
model.info()
# imgPath = "resource/cars.jpg"
imgPath = "resource/people.jpg"
# from PIL
im1 = Image.open(imgPath)
# # Segment with bounding box prompt
results = model(im1, bboxes=[100, 100, 200, 200], save=True)
# # Segment with point prompt
# results = model(im1, points=[150, 150], labels=[1], save=True)
Segment with bounding box prompt效果
Segment with point prompt效果
分割一切
本示例演示了SAM 2 如何在不提供提示(bboxes/points/masks)的情况下用于分割图像或视频的全部内容。
from ultralytics import SAM
from PIL import Image
import cv2
# Load a model
model = SAM("sam2_b.pt")
# Display model information (optional)
model.info()
# imgPath = "resource/cars.jpg"
imgPath = "resource/pedestrians.jpg"
# from PIL
im1 = Image.open(imgPath)
# # Segment without prompt
results = model(im1, save=True)
Model summary: 566 layers, 80,833,666 parameters, 80,833,666 gradients
0: 1024x1024 1 0, 1 1, 1 2, 1 3, 1 4, 1 5, 1 6, 1 7, 1 8, 1 9, 1 10, 1 11, 1 12, 1 13, 1 14, 1 15, 1 16, 1 17, 1 18, 1 19, 1 20, 1 21, 1882.2ms
Speed: 7.7ms preprocess, 1882.2ms inference, 0.4ms postprocess per image at shape (1, 3, 1024, 1024)
Results saved to /home/wqt/Projects/yolov11/ultralytics/runs/segment/predict6
检测并分割这张1024x1024,只需要1.8S
性能对比:SAM2 & YOLO-Seg
这是meta的SAM模型与YOLO8n-seg的推理性能对比,可以看到:
- YOLO-Seg的速度几乎比SAM快1071倍;
SAM的用途:自动注释—>高效创建数据集
自动标注是SAM 2 的一项强大功能,用户可以利用预先训练好的模型快速准确地生成分割数据集。这一功能对于创建大型、高质量的数据集尤为有用,无需大量人工操作。
如何使用SAM 2 自动注释
要使用SAM 2 自动标注数据集,请参考以下示例:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolov8x.pt", sam_model="sam2_b.pt")
太强大了,SAM可以作为一种利器,可以省掉大量人力物力去标记数据。
总结
在YOLO11的基础上,浅尝SAM2的模型带来的惊艳效果!唯一遗憾的是,YOLO11的官方代码只提供了inference的代码,并没有提供training的代码,因此训练自己的模型还是需要从SAM2的官方代码入手,这里只是快速体验SAM的效果。