【Python&语义分割】Segment Anything(SAM)模型介绍&安装教程

这篇具有很好参考价值的文章主要介绍了【Python&语义分割】Segment Anything(SAM)模型介绍&安装教程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 Segment Anything介绍

1.1 概况

        Meta AI 公司的 Segment Anything 模型是一项革命性的技术,该模型能够根据文本指令或图像识别,实现对任意物体的识别和分割。这一模型的推出,将极大地推动计算机视觉领域的发展,并使得图像分割技术进一步普及化。

        论文地址:https://arxiv.org/abs/2304.02643

        项目地址:Segment Anything

1.2 核心优势

        Segment Anything 模型的核心优势在于其强大的泛化能力和广泛的适用性。该模型不仅可以接受来自其他系统的输入提示,例如根据 AR / VR 头显传来的用户视觉焦点信息来选择对应的物体,而且还能从科学图像分析、照片编辑等各类场景中识别出万物。同时,Meta AI 还发布了 Segment Anything 1-Billion(SA-1B)掩码数据集,这是计算机视觉领域有史以来体量最大的分割数据集。这个数据集的推出,使得 Segment Anything 模型能够支持更为广泛的应用场景,并助力计算机视觉基础模型的进一步研究。

1.3 使用方法

        具体使用方法上,Segment Anything 提供了简单易用的接口,用户只需要通过提示,即可进行物体识别和分割操作。例如在图片处理中,用户可以通过 Hover & Click 或 Box 等方式来选取物体。值得一提的是,SAM 还支持通过上传自己的图片进行物体分割操作,提取物体用时仅需数秒。

        总的来说,Meta AI 的 Segment Anything 模型为我们提供了一种全新的物体识别和分割方式,其强大的泛化能力和广泛的应用前景将极大地推动计算机视觉领域的发展。未来,我们期待看到更多基于 Segment Anything 的创新应用,以及在科学图像分析、照片编辑等领域的广泛应用。

【Python&语义分割】Segment Anything(SAM)模型介绍&安装教程,Python深度学习,python,开发语言,深度学习,pytorch,语义分割,SAM

2 安装教程

2.1 Web端使用

        Segment Anything的官网提供了Demo可以在Web端直接对他的数据集或者自己上传的图片进行分割。我这里就不过多演示了,官网的英文很简单,应该都可以看懂,下面是效果图。

【Python&语义分割】Segment Anything(SAM)模型介绍&安装教程,Python深度学习,python,开发语言,深度学习,pytorch,语义分割,SAM

2.2 本地端使用(Python)

        该代码要求使用 python>=3.8,并且需要安装 pytorch>=1.7 和torchvision>=0.8。按照以下说明安装 PyTorch 和 TorchVision 的依赖项。建议同时安装支持 CUDA 的 PyTorch 和 TorchVision。项目地址:Segment Anything

2.2.1 git安装

pip install git+https://github.com/facebookresearch/segment-anything.git

        该项目依赖opencv-python pycocotools matplotlib onnxruntime onnx torch等包。

pip install opencv-python pycocotools matplotlib onnxruntime onnx torch

2.2.2 本地安装

        个人认为本地安装是最简单的,我之前已经下载好了项目源码,大家直接在命令行里使用pip install 安装zip文件即可,链接中还包含了三个模型。由于我之前做目标识别时就已经安装了Pytorch所以这里就没有介绍Pytorch怎么安装,后续更新相关安装教程。

C:\Users\JY03>cd /d G:\Neat Download Manager\Compressed

G:\Neat Download Manager\Compressed>pip install segment-anything-main.zip

3 使用教程

3.1 官方demo教程

        下载好官方的项目源码后,在notebooks文件夹中有三个demo文件,大家可以自己阅读观看,不过是.ipynb文件啊需要Jupyter打开,Pycharm打不开这种文件。

【Python&语义分割】Segment Anything(SAM)模型介绍&安装教程,Python深度学习,python,开发语言,深度学习,pytorch,语义分割,SAM

3.2 单点分割示例代码

        我这里给大家提供一下最简单的单点分割代码,大家可以做做实验,后续会详细更新其使用教程的。代码中只需要修改图片路径和模型路径即可。模型大家可以在上面的2.2.2小节中下载。

# -*- coding: utf-8 -*-
"""
@Time : 2023/10/10 11:10
@Auth : RS迷途小书童
@File :SAM.py
@IDE :PyCharm
"""
import numpy as np
import torch
import matplotlib.pyplot as plt
import cv2
import sys
from segment_anything import sam_model_registry, SamPredictor


def show_mask(mask, ax, random_color=False):
    if random_color:
        color = np.concatenate([np.random.random(3), np.array([0.6])], axis=0)
    else:
        color = np.array([30 / 255, 144 / 255, 255 / 255, 0.6])
    h, w = mask.shape[-2:]
    mask_image = mask.reshape(h, w, 1) * color.reshape(1, 1, -1)
    ax.imshow(mask_image)


def show_points(coords, labels, ax, marker_size=375):
    pos_points = coords[labels == 1]
    neg_points = coords[labels == 0]
    ax.scatter(pos_points[:, 0], pos_points[:, 1], color='green', marker='*', s=marker_size, edgecolor='white',
               linewidth=1.25)
    ax.scatter(neg_points[:, 0], neg_points[:, 1], color='red', marker='*', s=marker_size, edgecolor='white',
               linewidth=1.25)


def show_box(box, ax):
    x0, y0 = box[0], box[1]
    w, h = box[2] - box[0], box[3] - box[1]
    ax.add_patch(plt.Rectangle((x0, y0), w, h, edgecolor='green', facecolor=(0, 0, 0, 0), lw=2))


image = cv2.imread(r'G:\Neat Download Manager\Compressed\segment-anything-main\notebooks\images/truck.jpg')
# 图片地址
image = cv2.resize(image, None, fx=0.5, fy=0.5)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
plt.figure(figsize=(10, 10))
plt.imshow(image)
plt.axis('on')
plt.show()
sys.path.append("..")
sam_checkpoint = "G:/Neat Download Manager/Misc/sam_vit_b_01ec64.pth"
# 定义模型路径
model_type = "vit_b"
device = "cuda"
sam = sam_model_registry[model_type](checkpoint=sam_checkpoint)
sam.to(device=device)
predictor = SamPredictor(sam)
predictor.set_image(image)
input_point = np.array([[250, 187]])
# 输入兴趣点
input_label = np.array([1])
plt.figure(figsize=(10, 10))
plt.imshow(image)
show_points(input_point, input_label, plt.gca())
plt.axis('on')
plt.show()
masks, scores, logits = predictor.predict(
    point_coords=input_point,
    point_labels=input_label,
    multimask_output=True,
)

print(masks.shape)  # (number_of_masks) x H x W  | output (3, 600, 900)
for i, (mask, score) in enumerate(zip(masks, scores)):
    plt.figure(figsize=(10, 10))
    plt.imshow(image)
    show_mask(mask, plt.gca())
    show_points(input_point, input_label, plt.gca())
    plt.title(f"Mask {i+1}, Score: {score:.3f}", fontsize=18)
    plt.axis('off')
    plt.show()

4 总结

        不得不说,国外程序员的创造力是真的牛,这些算法不仅功能强大最重要的是源码还是开源的,我们任重而道远啊。总的来说,Segment Anything这个模型还是很不错的,图片的分割效果非常好,真的可以做到分割万物。同时其前景也非常可观,我看现在已经有人使用SAM这个模型做了二开实现了样本的自动化标注,这对于我们在标记深度学习样本时有很大的帮助,还有很多领域都可以和SAM相契合,大家感兴趣可以自己去了解。

 文章来源地址https://www.toymoban.com/news/detail-744945.html

到了这里,关于【Python&语义分割】Segment Anything(SAM)模型介绍&安装教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包