OpenCV与AI深度学习 | SAM2(Segment Anything Model 2)新一代分割一切大模型介绍与使用(步骤 + 代码)

双木的木 2024-08-22 16:31:01 阅读 74

本文来源公众号“OpenCV与AI深度学习”,仅用于学术分享,侵权删,干货满满。

原文链接:SAM2(Segment Anything Model 2)新一代分割一切大模型介绍与使用(步骤 + 代码)

SAM 2: Segment Anything Model 2

    Segment Anything Model 2(SAM 2)是由Meta公司发布的一个先进的图像和视频分割模型。它是Segment Anything Model(SAM)的升级版本,SAM是Meta的FAIR实验室发布的一款用于图像分割的基础模型,能够在给定提示的情况下生成高质量的对象掩模。

    项目地址:

https://github.com/facebookresearch/segment-anything-2

 特点

准确性提升:SAM 2相比原始的SAM模型在分割精度上有所提高。

速度加快:SAM 2的处理速度提高了大约六倍,这意味着它可以更快地生成分割掩模。

支持视频分割:除了图像分割之外,SAM 2还支持视频中的对象分割。

实时处理:SAM 2可以实现实时处理,这使得它非常适合于需要快速响应的应用场景,如增强现实(AR)和虚拟现实(VR)应用。

Zero-Shot泛化:SAM 2具有良好的zero-shot迁移能力,即可以在未见过的数据上工作而不需要额外的训练。

可提示的模型架构:SAM 2继承了SAM的特性,可以根据不同的提示(如点、框、甚至是文本)来生成分割结果。

    结构

编码器-解码器架构:SAM 2很可能会继续使用编码器-解码器架构,其中编码器负责提取特征,解码器则用于生成分割掩模。

高效网络设计:为了达到更高的处理速度,SAM 2可能采用了优化过的网络结构或计算效率更高的组件。

适应性强的分割头:模型可能包含了一个高度灵活的分割头,能够根据不同的提示生成相应的掩模。

多模态输入支持:除了传统的图像输入外,SAM 2还可能支持视频帧序列作为输入,以实现视频分割。

训练数据集:SAM 2的训练数据集可能包含了大量多样化的图像和视频样本,以确保模型的泛化能力和鲁棒性。

    应用场景

增强现实(AR)和虚拟现实(VR):SAM 2可以用于实时分割用户周围的环境,从而增强用户体验。

自动驾驶:在自动驾驶系统中,SAM 2可以帮助车辆识别和理解道路场景中的不同元素。

医学影像分析:SAM 2可以用来自动分割医学影像中的器官或病变区域。

SAM 2使用步骤与代码演示

    方法一:使用github项目

<code>https://github.com/facebookresearch/segment-anything-2

    使用前需要先安装 SAM 2。代码需要python>=3.10,以及torch>=2.3.1和。请按照此处的torchvision>=0.18.1说明安装 PyTorch 和 TorchVision 依赖项。您可以使用以下方式在 GPU 机器上安装 SAM 2:

git clone https://github.com/facebookresearch/segment-anything-2.git

cd segment-anything-2; pip install -e .

    下载模型:

    图像预测:

<code>import torch

from sam2.build_sam import build_sam2

from sam2.sam2_image_predictor import SAM2ImagePredictor

checkpoint = "./checkpoints/sam2_hiera_large.pt"

model_cfg = "sam2_hiera_l.yaml"

predictor = SAM2ImagePredictor(build_sam2(model_cfg, checkpoint))

with torch.inference_mode(), torch.autocast("cuda", dtype=torch.bfloat16):

predictor.set_image(<your_image>)

masks, _, _ = predictor.predict(<input_prompts>)

    视频预测:

import torch

from sam2.build_sam import build_sam2_video_predictor

checkpoint = "./checkpoints/sam2_hiera_large.pt"

model_cfg = "sam2_hiera_l.yaml"

predictor = build_sam2_video_predictor(model_cfg, checkpoint)

with torch.inference_mode(), torch.autocast("cuda", dtype=torch.bfloat16):

state = predictor.init_state(<your_video>)

# add new prompts and instantly get the output on the same frame

frame_idx, object_ids, masks = predictor.add_new_points(state, <your_prompts>):

# propagate the prompts to get masklets throughout the video

for frame_idx, object_ids, masks in predictor.propagate_in_video(state):

...

    方法二:基于ultralytics包的封装来调用

    【1】安装必要的包。安装ultralytics并确保其版本>=8.2.70,torch版本也需>=2.0或使用最新版本

pip install -U ultralytics

    【2】下载分割模型。下面网址中提供了4个模型,大家可以根据自己需要下载:

https://docs.ultralytics.com/models/sam-2/#how-can-i-use-sam-2-for-real-time-video-segmentation

    【3】全局目标分割。

<code>from ultralytics import ASSETS, SAM

# Load a model

model = SAM("sam2_s.pt")

# Display model information (optional)

model.info()

# Segment image or video

results = model('d.jpg') # 图片推理

#results = model('d.jpg') # 视频推理

# Display results

for result in results:

result.show()

    图片推理效果:

【4】引导分割制定目标(指定点或者矩形区域)。

<code>from ultralytics import ASSETS, SAM

# Load a model

model = SAM("sam2_s.pt")

# Segment with point prompt

results = model("b.jpg", points=[120, 80], labels=[1], device="cpu")code>

# Display results

for result in results:

result.show()

   图片推理效果:

<code>

from ultralytics import ASSETS, SAM

# Load a model

model = SAM("sam2_s.pt")

# Segment with bounding box prompt

results = model("a.jpg", bboxes=[30, 10, 283, 267], labels=[1], device="cpu")code>

# Display results

for result in results:

result.show()

    视频推理效果:

图片

    最后附上SAM 2与YOLOv8 seg推理时间对比:

THE END !

文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。