YOLO11+SAM2:强强联合,能爆发出什么效果?



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的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烧技湾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值