基于 Python 的 Meta AI —— SAM

简介: 基于 Python 的 Meta AI —— SAM

Segment Anything Model(SAM)是 Facebook 的一个 AI 模型,旨在推广分割技术。在我们之前的文章中,我们讨论了 SAM 的一般信息,现在让我们深入了解其技术细节。SAM 模型的结构如下图所示,图像经过编码器得到其嵌入,并且任何掩码都可以被实现。提示可以以文本、边界框或自由形式的点的形式出现。我们对提示进行编码,并将其与图像嵌入一起传递给解码器,该解码器生成我们的掩码。



SAM 最有趣的特性之一是其轻量级的编码器和解码器,可以实现实时性能。您可以使用在 GitHub 上可用的打包版本在 Python 中使用 SAM:https://github.com/kadirnar/segment-anything-video



然而,如果您在使用过程中遇到问题,您可以使用原始 GitHub 页面上提供的 Colab 文件。以下是您可以开始使用的步骤:

    using_colab = True 
    if using_colab:
        import torch
        import torchvision
        print("PyTorch version:", torch.__version__)
        print("Torchvision version:", torchvision.__version__)
        print("CUDA is available:", torch.cuda.is_available())
        import sys
        !{sys.executable} -m pip install opencv-python matplotlib
        !{sys.executable} -m pip install 'git+https://github.com/facebookresearch/segment-anything.git'
        !wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth

    首先,导入 Torch 和 Torchvision,这是项目所必需的,然后使用 pip 安装 Segment Anything。

    https://github.com/facebookresearch/segment-anything#model-checkpoints 下载模型检查点,稍后我们将使用它。


    接下来,创建一个图像目录,您可以将测试图像放在其中。您还可以通过替换以下命令中的 URL 来使用自己的图像:


    !mkdir images
    !wget -O images/image.jpg https://live.staticflickr.com/65535/49894878561_14a39c6c35_b.jpg

    一旦您拥有了图像,您可以导入必要的包,包括 numpy、Torch、Matplotlib 和 OpenCV。

      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)))

        现在,使用 OpenCV 读取图像并将通道从 BGR 更改为 RGB。然后,使用 Matplotlib 显示图像。

          image = cv2.imread('images/image.jpg')
          image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
          plt.figure(figsize=(20,20))
          plt.imshow(image)
          plt.axis('off')
          plt.show()

          要创建您的掩码生成器,您需要定义您的 SAM 模型并使用 SamAutomaticMaskGenerator:


          import sys
          sys.path.append("..")
          from segment_anything import sam_model_registry, SamAutomaticMaskGenerator, SamPredictor
          sam_checkpoint = "sam_vit_h_4b8939.pth"
          model_type = "vit_h"
          device = "cuda"
          sam = sam_model_registry[model_type](checkpoint=sam_checkpoint)
          sam.to(device=device)
          mask_generator = SamAutomaticMaskGenerator(sam)

          我们的 SAM 模型注册表需要检查点和模型类型以提供模型,记得将您的运行时设置为 GPU。SamAutomaticMaskGenerator 使用您的模型来制作您的掩码生成器。您所需要做的就是将您的输入传递给这个函数以获取您的掩码。


          masks = mask_generator.generate(image)

          掩码对象包含关于区域和稳定性分数的多个信息,稍后会将标签添加到此掩码对象中。让我们来看一下输出:


          plt.figure(figsize=(20,20))
          plt.imshow(image)
          show_anns(masks)
          plt.axis('off')
          plt.show()

          您还可以通过更改以下变量来调整遮罩生成器的参数:


          mask_generator_2 = SamAutomaticMaskGenerator(
          model=sam,
          points_per_side=32,
          pred_iou_thresh=0.86,
          stability_score_thresh=0.92,
          crop_n_layers=1,
          crop_n_points_downscale_factor=2,
          min_mask_region_area=100, # Requires open-cv to run post-processing
          )
          masks2 = mask_generator_2.generate(image)
          plt.figure(figsize=(20,20))
          plt.imshow(image)
          show_anns(masks2)
          plt.axis('off')
          plt.show()
          

          不同参数的另一个输出

          您可以在这里找到源代码:

          https://colab.research.google.com/github/facebookresearch/segment-anything/blob/main/notebooks/automatic_mask_generator_example.ipynb

          相关文章
          |
          18天前
          |
          机器学习/深度学习 人工智能
          Leffa:Meta AI 开源精确控制人物外观和姿势的图像生成框架,在生成穿着的同时保持人物特征
          Leffa 是 Meta 开源的图像生成框架,通过引入流场学习在注意力机制中精确控制人物的外观和姿势。该框架不增加额外参数和推理成本,适用于多种扩散模型,展现了良好的模型无关性和泛化能力。
          64 11
          Leffa:Meta AI 开源精确控制人物外观和姿势的图像生成框架,在生成穿着的同时保持人物特征
          |
          26天前
          |
          机器学习/深度学习 人工智能 自然语言处理
          Llama 3.3:Meta AI 开源新的纯文本语言模型,专注于多语言对话优化
          Meta AI推出的Llama 3.3是一款70B参数的纯文本语言模型,支持多语言对话,具备高效、低成本的特点,适用于多种应用场景,如聊天机器人、客户服务自动化、语言翻译等。
          77 13
          Llama 3.3:Meta AI 开源新的纯文本语言模型,专注于多语言对话优化
          |
          24天前
          |
          人工智能 安全 PyTorch
          SPDL:Meta AI 推出的开源高性能AI模型数据加载解决方案,兼容主流 AI 框架 PyTorch
          SPDL是Meta AI推出的开源高性能AI模型数据加载解决方案,基于多线程技术和异步事件循环,提供高吞吐量、低资源占用的数据加载功能,支持分布式系统和主流AI框架PyTorch。
          51 10
          SPDL:Meta AI 推出的开源高性能AI模型数据加载解决方案,兼容主流 AI 框架 PyTorch
          |
          20天前
          |
          机器学习/深度学习 人工智能 算法
          Meta Motivo:Meta 推出能够控制数字智能体动作的 AI 模型,提升元宇宙互动体验的真实性
          Meta Motivo 是 Meta 公司推出的 AI 模型,旨在控制数字智能体的全身动作,提升元宇宙体验的真实性。该模型通过无监督强化学习算法,能够实现零样本学习、行为模仿与生成、多任务泛化等功能,适用于机器人控制、虚拟助手、游戏角色动画等多个应用场景。
          51 4
          Meta Motivo:Meta 推出能够控制数字智能体动作的 AI 模型,提升元宇宙互动体验的真实性
          |
          1月前
          |
          机器学习/深度学习 存储 人工智能
          EfficientTAM:Meta AI推出的视频对象分割和跟踪模型
          EfficientTAM是Meta AI推出的轻量级视频对象分割和跟踪模型,旨在解决SAM 2模型在移动设备上部署时的高计算复杂度问题。该模型采用非层次化Vision Transformer(ViT)作为图像编码器,并引入高效记忆模块,以降低计算复杂度,同时保持高质量的分割结果。EfficientTAM在多个视频分割基准测试中表现出与SAM 2相当的性能,具有更快的处理速度和更少的参数,特别适用于移动设备上的视频对象分割应用。
          49 9
          EfficientTAM:Meta AI推出的视频对象分割和跟踪模型
          |
          2月前
          |
          存储 人工智能 搜索推荐
          Memoripy:支持 AI 应用上下文感知的记忆管理 Python 库
          Memoripy 是一个 Python 库,用于管理 AI 应用中的上下文感知记忆,支持短期和长期存储,兼容 OpenAI 和 Ollama API。
          100 6
          Memoripy:支持 AI 应用上下文感知的记忆管理 Python 库
          |
          30天前
          |
          机器学习/深度学习 人工智能 数据挖掘
          AI精通Python365天第1课,揭秘难易度
          学习Python能显著提升就业竞争力,实现工作自动化,增强数据分析、机器学习、Web开发等技能,促进跨领域应用和个人成长。无论是职场新人还是资深人士,掌握Python都能带来正向的职业发展和收入增长,同时回馈社会。通过AI辅助学习Python,从基础代码开始实践,逐步提升编程能力,让技术成为个人发展的强大助力。
          26 1
          |
          2月前
          |
          机器学习/深度学习 人工智能 算法
          强化学习在游戏AI中的应用,从基本原理、优势、应用场景到具体实现方法,以及Python在其中的作用
          本文探讨了强化学习在游戏AI中的应用,从基本原理、优势、应用场景到具体实现方法,以及Python在其中的作用,通过案例分析展示了其潜力,并讨论了面临的挑战及未来发展趋势。强化学习正为游戏AI带来新的可能性。
          121 4
          |
          2月前
          |
          人工智能 IDE 开发工具
          Python AI 编程助手
          Python AI 编程助手。
          56 5
          |
          2月前
          |
          人工智能 C语言 Python
          AI师傅+通义灵码=零基础小白上手python真·不是梦
          作为一名不懂编程的设计师,我一直渴望掌握AI辅助设计。在快刀青衣的推荐下,我尝试了AI师傅和通义灵码,成功写出了第一个Python程序,并理解了编程的基本概念。通过AI师傅的引导和通义灵码的帮助,我顺利完成了Coursera上的Python课程,获得了两张证书。这种学习方式让编程变得不再遥不可及,为我的未来学习打开了新大门。