【计算机视觉】Segment Anything 安装配置及代码测试(含源代码)

news/2024/12/13 5:27:09/

文章目录

  • 一、前言
  • 二、安装
    • 2.1 基本要求
    • 2.2 Install Segment Anything
  • 三、代码使用示例
    • 3.1 Automatically generating object masks with SAM
    • 3.2 Environment Set-up
    • 3.3 显示标注
    • 3.4 图像示例
    • 3.5 Automatic mask generation
    • 3.6 Automatic mask generation options

一、前言

在这里插入图片描述
目前代码已经开源!

在这里插入图片描述
Segment Anything Model(SAM)可以从输入提示(如点或框)生成高质量的物体遮罩,并且可以用于为图像中的所有物体生成遮罩。它在一个包含1100万张图像和10亿个遮罩的数据集上进行了训练,并且在各种分割任务上表现出了强大的零样本性能。

在这里插入图片描述

在这里插入图片描述

二、安装

2.1 基本要求

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

以下是安装步骤的一般指南:

  1. 安装 Python 3.8+:确保您的系统已安装 Python 3.8 或更高版本。您可以从 Python 官方网站(https://www.python.org/downloads/)下载并安装适用于您的操作系统的 Python 版本。
  2. 安装 PyTorch 和 TorchVision:按照以下步骤安装 PyTorch 和 TorchVision:

访问 PyTorch 官方网站(https://pytorch.org/)并根据您的系统选择适当的安装选项。

根据提供的安装说明,使用 pip 或 conda 安装 PyTorch 和 TorchVision。例如,如果您使用 pip,可以执行以下命令安装 PyTorch:

pip install torch>=1.7 torchvision>=0.8
  1. 安装 CUDA(可选):如果您的系统支持 NVIDIA GPU 并且您希望使用 CUDA 加速,建议安装 CUDA 并配置 PyTorch 和 TorchVision 以支持 CUDA。您可以从 NVIDIA 官方网站(https://developer.nvidia.com/cuda-downloads)下载适用于您的系统的 CUDA 版本,并按照提供的说明进行安装。

请注意,上述步骤提供了一般的安装指南。具体的安装步骤可能因您的操作系统、Python 版本和其他依赖项而有所不同。建议参考 PyTorch 和 TorchVision 的官方文档和安装说明,以确保正确地安装和配置这些库。

2.2 Install Segment Anything

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

若是这个运行失败,选择下面的方式:

  1. 第一步:
git clone git@github.com:facebookresearch/segment-anything.git
  1. 第二步:
cd segment-anything
  1. 第三步:
pip install -e .

便可顺利安装成功!

以下是用于遮罩后处理、以 COCO 格式保存遮罩、示例笔记本和以 ONNX 格式导出模型的可选依赖项。同时,运行示例笔记本还需要安装 jupyter。

pip install opencv-python pycocotools matplotlib onnxruntime onnx
  • For mask post-processing: You may need to install additional libraries or packages depending on the specific post-processing techniques used in the code. It is recommended to refer to the code documentation or instructions for the required dependencies.
  • For saving masks in COCO format: If you intend to save the generated masks in COCO format, you will need to install the pycocotools library. You can install it using pip:
pip install pycocotools
  • For example notebooks: To run the example notebooks, you need to have Jupyter Notebook installed. Jupyter Notebook allows you to run interactive code cells and view the notebook content. You can install it using pip:
pip install jupyter
  • For exporting the model in ONNX format: If you want to export the model in ONNX format, you will need to install the onnx and onnxruntime packages. You can install them using pip:
pip install onnx onnxruntime

Please note that the specific dependencies may vary depending on the code and its requirements. It is recommended to refer to the code documentation or instructions for the complete list of dependencies and installation instructions.

三、代码使用示例

3.1 Automatically generating object masks with SAM

在这里插入图片描述

from IPython.display import display, HTML
display(HTML(
"""
<a target="_blank" href="https://colab.research.google.com/github/facebookresearch/segment-anything/blob/main/notebooks/automatic_mask_generator_example.ipynb"><img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/>
</a>
"""
))

上述代码片段是用于在Jupyter Notebook或支持HTML输出的环境中显示一个带有Colab徽章的链接。当点击该链接时,它将在Colab中打开名为"automatic_mask_generator_example.ipynb"的笔记本。

要使用此代码片段,请确保已经安装并正确配置了IPython和Jupyter Notebook。将代码片段放置在代码单元格中并运行,您将在输出中看到一个带有Colab徽章的链接,点击该链接即可在Colab中打开相应的笔记本。

在这里插入图片描述

3.2 Environment Set-up

using_colab = False
if using_colab:import torchimport torchvisionprint("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'!mkdir images!wget -P images https://raw.githubusercontent.com/facebookresearch/segment-anything/main/notebooks/images/dog.jpg!wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth

如果在本地使用 Jupyter 运行,请首先根据存储库中的安装说明在您的环境中安装segment_anything。

如果在 Google Colab 上运行,请在下方将 using_colab=True 设置为 True 并运行该单元格。在 Colab 中,请确保在“编辑”->“笔记本设置”->“硬件加速器”下选择了“GPU”。

3.3 显示标注

import numpy as np
import torch
import matplotlib.pyplot as plt
import cv2
def show_anns(anns):if len(anns) == 0:returnsorted_anns = sorted(anns, key=(lambda x: x['area']), reverse=True)ax = plt.gca()ax.set_autoscale_on(False)img = np.ones((sorted_anns[0]['segmentation'].shape[0], sorted_anns[0]['segmentation'].shape[1], 4))img[:,:,3] = 0for ann in sorted_anns:m = ann['segmentation']color_mask = np.concatenate([np.random.random(3), [0.35]])img[m] = color_maskax.imshow(img)

这段代码是一个用于显示标注(annotations)的函数 show_anns。下面是对代码的解读:

  1. 函数接受一个标注列表 anns 作为参数。
  2. 首先,检查标注列表的长度,如果列表为空,则直接返回。
  3. 根据标注的面积对标注进行排序,从大到小,使用 sorted 函数和 key 参数来实现排序。排序后的结果保存在 sorted_anns 列表中。
  4. 创建一个坐标轴对象 ax,并关闭其自动缩放功能。
  5. 创建一个图像数组 img,形状与最大标注的分割形状相同,并初始化为全1,表示完全透明。
  6. 遍历排序后的标注列表,对每个标注进行处理:

获取标注的分割掩码 m。

生成一个随机的颜色掩码 color_mask,由3个随机数和一个透明度值组成。

将颜色掩码应用到图像数组的相应位置上,使得标注区域显示为对应的颜色。

  1. 使用 ax.imshow 函数显示图像数组 img,即显示了带有颜色标注的图像。

总体来说,该函数的作用是根据给定的标注信息,在图像上显示带有不同颜色的标注区域。

3.4 图像示例

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

原图如下:

在这里插入图片描述

3.5 Automatic mask generation

要运行自动 mask 生成,请向 SamAutomaticMaskGenerator 类提供一个 SAM 模型。将下面的路径设置为 SAM 检查点的路径。推荐在 CUDA 上运行,并使用默认模型。

import sys
sys.path.append("..")
from segment_anything import sam_model_registry, SamAutomaticMaskGenerator, SamPredictorsam_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)
masks = mask_generator.generate(image)

在这里插入图片描述

print(len(masks))
print(masks[0].keys())

输出结果为:

dict_keys(['segmentation', 'area', 'bbox', 'predicted_iou', 'point_coords', 'stability_score', 'crop_box'])
plt.figure(figsize=(20,20))
plt.imshow(image)
show_anns(masks)
plt.axis('off')
plt.show() 

可视化结果如下:

在这里插入图片描述

3.6 Automatic mask generation options

自动掩码生成中有几个可调参数,用于控制采样点的密度以及去除低质量或重复掩码的阈值。 此外,生成可以在图像的裁剪上自动运行以提高较小对象的性能,并且后处理可以去除杂散像素和孔洞。 以下是对更多掩码进行采样的示例配置:

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

在这里插入图片描述


http://www.ppmy.cn/news/128824.html

相关文章

哪个牌子的蓝牙耳机好用?质量最好的蓝牙耳机排行榜

蓝牙耳机无非就是音质上的需求&#xff0c;如今市面上的蓝牙耳机参差不齐&#xff0c;蓝牙耳机品牌产品的琳琅满目&#xff0c;耳机之间的价格不一&#xff0c;因此购买蓝牙耳机时是越来越重视性价比了&#xff0c;在这里就分享一些质量好性价比高的蓝牙耳机&#xff0c;希望对…

家用智能洗地机哪个牌子好、洗地机品牌排行榜前十名介绍

洗地机作为目前最火的智能清洁产品&#xff0c;相比常见的清洁工具&#xff0c;它不仅解放了人的双手&#xff0c;同时也保证了清洁的效果。对于那些每天都需要把卫生搞好的人来说&#xff0c;简直就是福音。最近家用洗地机的风这么大&#xff0c;加上市面上的清洁工具种类也越…

分享盒子直播软件.已测试,网络机顶盒看电视直播哪个软件好(最好用的三款免费直播软件分享)...

1、魔力视频TV 魔力视频TV是一款聚合类视频软件&#xff0c;涵盖了直播及点播资源。在直播界面中进入直播状态&#xff0c;可收视卫视地方台网播频道等直播资源。卫视频道基本高清画质&#xff0c;小编随意打开一个频道&#xff0c;体验极佳&#xff0c;播放流畅稳定。如果想切…

网络电视频道

最全的网络电视频道 <Asx Version"3.0"> <Entry> <Title>民视新闻回放台</Title> <Ref href"http://www.wcetv.com/asx/LIB/LIB100352_v5.asx"/> </Entry> <Title>HTC HD 网络电视播放列表</Title>…

网络电视机顶盒的工作原理

1.网络机顶盒的组成 % q) q H. d$ D$ W I 网络机顶盒由高频头、QAM解调器、TS流解复用器、MPEG一2解码器、PAUNTSC视频编码器、嵌人式CPU系统和外围接口、CA模块和上行数据调制器组成。工作原理如附图。 网络机顶盒的工作过程大致如下&#xff1a;高频头接收来自有线网的高频信…

网络电视机顶盒、IPTV后台内容管理系统?

网友问题&#xff1a; 想要做个类似OTT, IPTV的IP网络电视系统&#xff0c;用个安卓APK盒子通过网络播放节目。我们做计费管理&#xff0c;第三方支付&#xff0c;但是不了解视频后台管理系统&#xff0c;包括视频传输&#xff0c;节目管理。没接触过此类项目&#xff0c;这个视…

机顶盒市场

最近找工作&#xff0c;发现许多都是做机顶盒产品的&#xff0c;对于这个市场一开始不了解&#xff0c;但是见得多了&#xff0c;有了兴趣&#xff0c;所以来调查一番 1. 机顶盒就是将数字信号转为电视机这个显示器可以接收的信号&#xff0c;例如HDMI,VGA等..... 为什么不将机…

电视盒刷linux 教程,网络机顶盒刷机教程和详细方法,实现软件任意安装,电视免费看...

原标题: 网络机顶盒刷机教程和详细方法,实现软件任意安装,电视免费看 引语: 网友发来的定制版IPTV网络机顶盒,型号HG680-R,从系统信息看盒子配置为1G内存,4G闪存。网友希望我给研究一下,刷机把这台闲置的盒子变成全网通盒子,实现随意安装软件,免费看电视的目的。经过…