【Meta-AI】Sam-分割一切 测试

这篇具有很好参考价值的文章主要介绍了【Meta-AI】Sam-分割一切 测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【什么是 SAM】

 


近日,Meta AI在官网发布了基础模型 Segment Anything Model(SAM)并开源,其本质是用GPT的方式(基于Transform 模型架构)让计算机具备理解了图像里面的一个个“对象”的通用能力。SAM模型建立了一个可以接受文本提示、基于海量数据(603138)训练而获得泛化能力的图像分割大模型。图像分割是计算机视觉中的一项重要任务,有助于识别和确认图像中的不同物体,把它们从背景中分离出来,这在自动驾驶(检测其他汽车、行人和障碍物)、医学成像(提取特定结构或潜在病灶)等应用中特别重要。

官网:
Segment Anything | Meta AI
github:
GitHub - facebookresearch/segment-anything: The repository provides code for running inference with the SegmentAnything Model (SAM), links for downloading the trained model checkpoints, and example notebooks that show how to use the model.
官方论文:
https://arxiv.org/abs/2304.02643

【环境搭建】


首先将源码下载到pytorch环境中:
GitHub - facebookresearch/segment-anything: The repository provides code for running inference with the SegmentAnything Model (SAM), links for downloading the trained model checkpoints, and example notebooks that show how to use the model.
安装依赖库:
pip install opencv-python pycocotools matplotlib onnxruntime onnx
安装SAM
cd segment-anything
pip install -e .

下载权重文件:
下载三个权重文件中的一个,我用的第一个,三个模型从大到小,8G以下显存选vit_b。
default or vit_h: ViT-H SAM model.
vit_l: ViT-L SAM model.
vit_b: ViT-B SAM model.

【推理测试】


源码的 notebooks下面提供了测试代码和图片:

【Meta-AI】Sam-分割一切 测试,深度学习/机器学习/强化学习/算法,python,深度学习,人工智能,meta-ai,sam

automatic_mask_generator_example.ipynb    : 自动识别图片所有mask
predictor_example.ipynb    :手动选取范围进行识别mask
onnx_model_example.ipynb    :    onnx格式模型工具


下面测试使用的 py 代码:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jupyter
jupyter nbconvert --to script predictor_example.ipynb
jupyter nbconvert --to script automatic_mask_generator_example.ipynb

测试代码中 matplotlib 库需要使用3.6以下的低版本这里选择3.5.3:

【Meta-AI】Sam-分割一切 测试,深度学习/机器学习/强化学习/算法,python,深度学习,人工智能,meta-ai,sam
【Meta-AI】Sam-分割一切 测试,深度学习/机器学习/强化学习/算法,python,深度学习,人工智能,meta-ai,sam
automatic_mask_generator_example(识别所有区域):
【Meta-AI】Sam-分割一切 测试,深度学习/机器学习/强化学习/算法,python,深度学习,人工智能,meta-ai,sam

区别主要在于引入的Sam预测器:

from segment_anything import sam_model_registry, SamPredictor
from segment_anything import sam_model_registry, SamAutomaticMaskGenerator

SamPredictor    =>    需要传入一个抠图点坐标,也就是 input_point,会扣出包含抠图点的mask以及可能的父mask。
masks, scores, logits = predictor.predict(
    point_coords=input_point,
    point_labels=input_label,
    multimask_output=True,
)

代码如下:

import cv2
import matplotlib.pyplot as plt
import numpy as np
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)
if __name__ == '__main__':
    # 配置,vit_h、vit_l、vit_b 从大到小,8G显存选 vit_b
    sam_checkpoint = "C:\\workspace\\pycharm_workspace\\pytorch\\src\\segment-anything\\sam_vit_b_01ec64.pth"
    # vit_h(default)、vit_l、vit_b
    model_type = "vit_b"
    # 模型实例化
    sam = sam_model_registry[model_type](checkpoint=sam_checkpoint)
    sam.to(device="cuda")
    predictor = SamPredictor(sam)
    image = cv2.imread(r"C:\\workspace\\pycharm_workspace\\pytorch\\src\\segment-anything\\notebooks\\images\\truck.jpg")
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    predictor.set_image(image)
    input_point = np.array([[500, 375]])
    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,
    )
    # 遍历读取每个扣出的结果
    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()

SamAutomaticMaskGenerator    =>    直接生成所有可能的mask
masks = mask_generator.generate(image)    

代码如下:

import sys
sys.path.append("..")
from segment_anything import sam_model_registry, SamAutomaticMaskGenerator
import numpy as np
import torch
import matplotlib.pyplot as plt
import cv2

def show_anns(anns):
    if len(anns) == 0:
        return
    sorted_anns = sorted(anns, key=(lambda x: x['area']), reverse=True)
    ax = plt.gca()
    ax.set_autoscale_on(False)
    polygons = []
    color = []
    for ann in sorted_anns:
        m = ann['segmentation']
        img = np.ones((m.shape[0], m.shape[1], 3))
        color_mask = np.random.random((1, 3)).tolist()[0]
        for i in range(3):
            img[:,:,i] = color_mask[i]
        ax.imshow(np.dstack((img, m*0.35)))

if __name__ == '__main__':
    sam_checkpoint = "C:\\workspace\\pycharm_workspace\\pytorch\\src\\segment-anything\\sam_vit_b_01ec64.pth"
    model_type = "vit_b"
    device = "cuda"
    sam = sam_model_registry[model_type](checkpoint=sam_checkpoint)
    sam.to(device=device)
    mask_generator = SamAutomaticMaskGenerator(sam)
    image = cv2.imread('images/dog.jpg')
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    masks = mask_generator.generate(image)
    print(len(masks))
    print(masks[0].keys())
    plt.figure(figsize=(20, 20))
    plt.imshow(image)
    show_anns(masks)
    plt.axis('off')
    plt.show()

【模型导出onnx】


提供了一个onnx转换的脚本:
jupyter nbconvert --to script  onnx_model_example.ipynb
同样修改一下权重类型和文件即可:
checkpoint = "C:\\workspace\\pycharm_workspace\\pytorch\\src\\segment-anything\\sam_vit_b_01ec64.pth"
model_type = "vit_b"

会生成两个onnx文件,quantized是量化过后的权重:

【Meta-AI】Sam-分割一切 测试,深度学习/机器学习/强化学习/算法,python,深度学习,人工智能,meta-ai,sam
模型参数:
【Meta-AI】Sam-分割一切 测试,深度学习/机器学习/强化学习/算法,python,深度学习,人工智能,meta-ai,sam

​ 【onnx部署】java


下面是进行 java-onnx 部署的代码,见另外一篇文章:
 

http://t.csdn.cn/A07aE

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

到了这里,关于【Meta-AI】Sam-分割一切 测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【AIGC】6、Segment Anything | Meta 推出超强悍可分割一切的模型 SAM

    论文:Segment Anything 官网:https://segment-anything.com/ 代码:https://github.com/facebookresearch/segment-anything 出处:Meta、FAIR 时间:2023.04.05 贡献点: 首次提出基于提示的分割任务,并开源了可以分割一切的模型 SAM 开源了一个包含 1100 万张图像(约包含 10 亿 masks)的数据集 SA-1B,是目前

    2023年04月23日
    浏览(58)
  • 【多模态】14、Segment Anything | Meta 推出超强悍可分割一切的模型 SAM

    论文:Segment Anything 官网:https://segment-anything.com/ 代码:https://github.com/facebookresearch/segment-anything 出处:Meta、FAIR 时间:2023.04.05 贡献点: 首次提出基于提示的分割任务,并开源了可以分割一切的模型 SAM 开源了一个包含 1100 万张图像(约包含 10 亿 masks)的数据集 SA-1B,是目前

    2024年02月16日
    浏览(45)
  • 【计算机视觉 | 语义分割】OVSeg:分割一切后,SAM又能分辨类别了,Meta/UTAustin提出全新开放类分割模型

    前几日,Meta 推出了「分割一切」AI 模型 Segment Anything,令网友直呼 CV 不存在了?! 而在另一篇被 CVPR 2023 收录的论文中,Meta、UTAustin 联合提出了新的开放语言风格模型(open-vocabulary segmentation, OVSeg),它能让 Segment Anything 模型知道所要分隔的类别。 论文地址: 从效果上来看

    2024年02月12日
    浏览(54)
  • SAM - 分割一切图像【AI大模型】

    如果你认为 AI 领域已经通过 ChatGPT、GPT4 和 Stable Diffusion 快速发展,那么请系好安全带,为 AI 的下一个突破性创新做好准备。 推荐:用 NSDT场景设计器 快速搭建3D场景。 Meta 的 FAIR 实验室刚刚发布了 Segment Anything Model (SAM),这是一种最先进的图像分割模型,旨在改变计算机视

    2023年04月21日
    浏览(40)
  • Meta AI 开源万物可分割 AI 模型(SAM)

    4 月 6 日,根据 Meta AI 官方博客,Meta AI 宣布推出了一个 AI 模型 Segment Anything Model(SAM,分割一切模型)。据介绍,该模型能够根据文本指令等方式实现图像分割,而且万物皆可识别和一键抠图。 github源码地址:facebookresearch/segment-anything 官方网站体验地址:segment-anything.com/

    2023年04月11日
    浏览(39)
  • SAM&Stable-Diffusion集成进化!分割、生成一切!AI绘画新玩法

    自SAM「分割一切」模型推出之后,二创潮就开始了,有想法有行动!飞桨AI Studio开发者 会唱歌的炼丹师 就创作出SAM进化版,将SAM、Stable Diffusion集成,实现「分割」、「生成」能力二合一,并部署为应用,支持在线使用! 创作者:会唱歌的炼丹师 作者主页:https://aistudio.ba

    2024年02月16日
    浏览(56)
  • OpenCV与AI深度学习 | 实战 | 基于YOLOv9+SAM实现动态目标检测和分割(步骤 + 代码)

    本文来源公众号 “OpenCV与AI深度学习” ,仅用于学术分享,侵权删,干货满满。 原文链接:实战 | 基于YOLOv9+SAM实现动态目标检测和分割(步骤 + 代码)     本文主要介绍基于YOLOv9+SAM实现动态目标检测和分割,并给出详细步骤和代码。     在本文中,我们使用YOLOv9+SAM在

    2024年04月22日
    浏览(69)
  • Meta AI最新出品,全能的分割模型SAM:掀桌子的Segment Anything,CV届的ChatGPT已经到来!

    本来不打算再发关于分割的相关内容的,但是13小时前,2023年4月5号,Meta AI在Arxiv网站发布了文章《Segment Anything》,并将SAM模型代码和数据开源。作为通用的分割网络,SAM或许将成为,甚至是已经成为了CV届的ChatGPT。简简单单的两个词Segment Anything,简单粗暴却不失优雅。 说

    2023年04月15日
    浏览(48)
  • 【计算机视觉】不仅能分割一切简单物体,而且还能高精度分割一切复杂物体的SAM升级版本HQ-SAM来了

    相信很多朋友都对Facebook开源的Segement Anything(SAM)算法有很深的印象,当前SAM已经被开发出众多的热门应用,至今为止,可能已经有很多朋友用它来提升自己的工作与生产效率。 虽然SAM算法效果很好,但是当碰到复杂的图像分割任务时,SAM输出的效果并不能满足我们的需求。

    2024年02月06日
    浏览(58)
  • SAM 模型真的是强悍到可以“分割一切”了吗?

    关注公众号,发现CV技术之美 上周,Meta AI发布了 Segment Anything Model(SAM)—— 第一个图像分割基础模型。很多计算机视觉从业者惊呼“这下CV真的不存在了,快跑!”。但是SAM 模型真的是强悍到可以“分割一切”了吗?它在哪些场景或任务中还不能较好地驾驭呢? 研究社区

    2024年02月06日
    浏览(51)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包