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

news2024/9/20 22:22:39

文章目录

  • 一、前言
  • 二、安装
    • 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 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'
    
    !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:
        return
    sorted_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] = 0
    for ann in sorted_anns:
        m = ann['segmentation']
        color_mask = np.concatenate([np.random.random(3), [0.35]])
        img[m] = color_mask
    ax.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, 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)
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.coloradmin.cn/o/594755.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

客户体验:响应速度是他们的 No.1 Pick么?

服务响应速度在为消费者提供服务时极为重要&#xff0c;那么&#xff0c;在消费者整体体验中&#xff0c;响应速度是否是消费者最在意的呢&#xff1f; 无论是对企业还是消费者来说&#xff0c;时间都至关重要。消费者在寻求客户服务时&#xff0c;不喜欢等待。根据《客户服务受…

【Python asyncio】零基础也能轻松掌握的学习路线与参考资料

Python asyncio是一个强大而易于使用的库&#xff0c;让Python程序员能够编写高效的异步IO应用程序。它为程序员提供了一种简单而优雅的方法来避免使用 Python GIL&#xff08;全局解释器锁&#xff09;&#xff0c;同时允许他们轻松地处理高并发的网络通信和并发任务执行。下面…

蓝桥杯数论总结:快速幂和矩阵快速幂

本文先是给出快速幂的原理&#xff0c;又由一道例题明确快速幂的Python代码模版&#xff1b;而后给出矩阵快速幂的原理&#xff08;介绍了矩阵相乘&#xff0c;对没学过线代者友好&#xff09;&#xff0c;和矩阵快速幂的模版。再给出快速幂和矩阵快速幂相关的题单。 目录 快…

Linux高级---k8s存储

文章目录 一、数据卷的概述二、关系图三、数据卷的类型1、emptydira、描述b、适用场景c、emptydir应用 2、hostpatha、描述b、适用场景c、hostpath应用 3、nfsa、描述b、适用场景c、nfs应用 4、PV和PVCa、描述b、存储卷和存储卷声明的关系c、存储卷声明的管理过程 5、PVa、资源…

10个可以快速用Python进行数据分析的小技巧

一些小提示和小技巧可能是非常有用的&#xff0c;特别是在编程领域。有时候使用一点点黑客技术&#xff0c;既可以节省时间&#xff0c;还可能挽救“生命”。 一个小小的快捷方式或附加组件有时真是天赐之物&#xff0c;并且可以成为真正的生产力助推器。所以&#xff0c;这里…

基于Spring Boot+Vue的课堂管理系统

介绍 基于Spring BootVue的课堂管理系统。前后端分离。包含教师授课管理、学生选退课、聊天室、签到、笔记管理模块等。 技术架构 spring BootMyBatisRedisWebSocketVueCLIAxiosElement UI 项目特点&#xff1a; - 后台使用MyBatis连接数据库&#xff0c;编写后台服务器的…

【教程】2步白嫖使用DeepL Pro会员版 [附插件]

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 【教程】5步白嫖使用Grammarly Premium高级版 [附脚本] 适用说明 Edge、Chrome等&#xff0c;使用了Chrome内核的浏览器应该都可以吧。 开始白嫖 1、下载并解压插件&#xff0c;下载链接&#xff1a;https://x…

第2章:数据结构【AcWing】

文章目录 单链表定义初始化头插在下标为pos位置后插入删除下标为pos后的结点遍历 双链表定义初始化在下标为pos后插入删除下标为pos的位置 栈和队列栈定义示例代码 队列定义示例代码循环队列定义示例代码 单调栈和单调队列单调栈朴素方法 O ( n 2 ) O(n^2) O(n2)优化 O ( n ) …

Web的基本漏洞--逻辑漏洞

目录 一、逻辑漏洞介绍 1.逻辑漏洞的原理 2.逻辑漏洞的分类 3.常见的逻辑漏洞 4.挖掘逻辑漏洞 一、逻辑漏洞介绍 1.逻辑漏洞的原理 逻辑漏洞是指由于程序逻辑不严或逻辑太复杂&#xff0c;导致一些逻辑分支不能够正常处理或处理错误&#xff0c;从而进行攻击。一般出现任…

英国皇家植物园采用机器学习预测植物抗疟性,将准确率从 0.46 提升至 0.67

内容一览&#xff1a;疟疾是严重危害人类生命健康的重大传染病&#xff0c;研究人员一直在致力于寻找新的植物源性抗疟疾化合物&#xff0c;以研发相关药物。近期英国皇家植物园利用机器学习 算法 有效预测了植物抗疟性&#xff0c;该研究成果目前已发表在《Frontiers in Plant…

路径规划算法:基于风驱动优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于风驱动优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于风驱动优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法…

游戏场景的转换——状态模式

状态模式 游戏比较复杂时&#xff0c;通常会设计成多个场景。 切换场景的好处 1、重复使用场景 跳转切换场景的代码有两种一种是旧版的方法 Application.LoadLevel(“SampleScene”);另一种是新版的方法 SceneManager.LoadScene(“SampleScene”); 例子1&#xff1a;通过场景…

通过IEDA连接Linux上的MYSQL

一、打开idea新建项目 idea与数据库的连接是与项目强相关的 在项目A中配置的数据库连接a&#xff0c;那么只能在项目A中能看到和使用数据库连接a 二、配置新的数据库连接 1.点击界面左侧栏中的Database&#xff0c;唤出数据库连接界面 2. 新建数据库&#xff08;mysql&#x…

Linux:apache配置与应用

Linux&#xff1a;apache配置与应用 一、虚拟 Web 主机1.1 虚拟Web主机1.2 httpd服务支持的虚拟主机类型 二、基于域名的虚拟主机2.1 为虚拟主机提供域名解析2.2 为虚拟主机准备网页文档2.3 添加虚拟主机配置2.4 设置访问控制2.5 加载独立的配置文件2.6 在客户机中访问虚拟 Web…

RabbitMQ消息属性详解

content-type属性 如同各种标准化的HTTP规范&#xff0c;content-type传输消息体的MIME类型。例如&#xff0c;如果你的应用程序正在发送JSON序列化的数据值&#xff0c;那么将content-type属性设置为application/json将允许尚待开发的消费者应用程序在收到消息时检查消息类型…

BiFormer实战:使用BiFormer实现图像分类任务(一)

文章目录 摘要安装包安装timm安装 grad-cam 数据增强Cutout和MixupEMA项目结构计算mean和std生成数据集 摘要 论文翻译&#xff1a;https://wanghao.blog.csdn.net/article/details/130186102 官方源码&#xff1a;https://github.com/rayleizhu/BiFormer BiFormer是今年提出…

java idea常用的快捷方式

文章目录 java idea常用的快捷方式快速复制选多行改变代码格式化 快速代码编辑psvmsout5.for java idea常用的快捷方式 快速复制 c t r l d \color{red}{ctrld} ctrld 选多行改变 A l t 鼠标 \color{red}{Alt鼠标} Alt鼠标 代码格式化 C t r l A l t l \color{red}{Ctrl…

Web的基本漏洞--代码执行漏洞

目录 一、代码执行漏洞的介绍 1.代码执行漏洞的原理 2.常用含有的代码执行漏洞的函数 3.代码执行漏洞的危害 4.代码执行漏洞的防范措施 一、代码执行漏洞的介绍 1.代码执行漏洞的原理 web应用程序是指程序员在代码中使用了一些执行函数例如php的eval&#xff0c;assert等…

全球冰川均衡调整(GIA)数据下载链接汇总

在处理GRACE数据时&#xff0c;由于GRACE监测的信号包含地表的质量迁移信号和固体地球物理信号&#xff0c;因此研究地表的质量迁移时需要扣除固体地球的信号&#xff0c;目前最主要的时冰川均衡调整&#xff08;冰后回弹&#xff09;的信号。具体的关于冰川均衡调整的信息可参…

Unity——在C#中调用C++动态链接库(DLL)

一、创建C动态链接库&#xff08;DLL&#xff09; 1、新建C空项目 打开VS&#xff0c;新建一个C空项目&#xff0c;自命名项目名称与位置。 2、配置项目属性为动态链接库 右键项目&#xff0c;点击属性&#xff0c;打开项目属性页&#xff0c;将常规中的配置类型改为动态库&…