跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

基于 Segment Anything 模型的图像分割部署与测试

Segment Anything Model(SAM)可根据输入提示生成高质量对象遮罩。演示了在 Linux 环境下配置 PyTorch 与 CUDA,安装 SAM 依赖库,下载预训练模型文件,并通过命令行脚本及 Web Demo 进行图像分割测试的全过程。涵盖环境搭建、模型推理及 ONNX 导出步骤,适用于 AI 图像分割任务开发。

数字游民发布于 2025/1/20更新于 2026/10/2589 浏览
基于 Segment Anything 模型的图像分割部署与测试

前言

最近在研究图像处理的过程中,接触到了 Meta 开源的图像分割项目,看了他们官网的 demo 演示,感觉很神奇。上传一张图片,点击一下就能将点击的物体切割出来,很类似自动物体识别,智能抠图。于是决定深入研究学习一番。要研究学习一个模型,必不可少地要用到 GPU 计算。

环境准备

登录云服务平台,创建 GPU 实例。 规格选择如下: 镜像选择:PyTorch 2.3.0, Python 3.10.14, 系统 Ubuntu-22.04, CUDA 版本:12.1。

环境配置 内置了 CUDA,可自由选择 PyTorch,Python CUDA 版本,节省手动配置时间。 注意:segment-anything 模型的要求 python>=3.8 , pytorch>=1.7, torchvision>=0.8。 实例创建成功后,点击操作栏的 JupyterLab 打开实例中已安装的 Jupyter,或使用访问链接和密码访问服务器终端。

Jupyter 访问 终端登录

Segment Anything 模型介绍

Segment Anything Model(SAM)可根据输入提示(如点或方框)生成高质量的对象遮罩,并可用于为图像中的所有对象生成遮罩。该模型已在一个包含 1100 万张图像和 11 亿个遮罩的数据集上进行过训练,在各种分割任务中都具有很强的零样本性能。

SAM 示意图

配置环境

进入 GPU 实例的终端,部署 Segment Anything 模型。 要在实例中安装 Segment Anything 模型,有两种方式: 第一种:在实例的终端中执行下面的命令

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

第二种:你也可以执行下面的命令来安装

git clone [email protected]:facebookresearch/segment-anything.git cd segment-anything; pip install -e . 

安装还需要安装相关的依赖库

pip install opencv-python pycocotools matplotlib onnxruntime onnx 

环境安装过程如下图所示。

环境安装 通过上面的步骤,我们已经安装好了模型运行的环境。

下载模型,运行模型

安装好模型的运行环境后,我们需要下载官方训练好的分隔模型,一共有三个,分别是:

  • 大杯 模型类型为 vit_h
  • 中杯 模型类型为 vit_l
  • 小杯 模型类型为 vit_b 这里以大杯 ViT-H SAM model 模型为例,使用浏览器下载,大概有 2.4G。然后将其上传到云平台的文件存储。

模型下载 如果直接在实例中下载,会比较漫长。通过上传到文件存储就会自动挂载到实例中,这里存储的根文件对应到实例中目录 /root/shared-storage。

文件存储 文件上传成功后,我们可以在实例的终端中看到这些文件。如下图:

终端文件 文件和服务都准备好后,我们下面开始测试一下模型,处理分割一些文件。

测试模型

我们使用上传的模型,对一张图片进行分割,然后分割后的图片,放到一个目录里。 原始图片 de.png。

原始图片 然后我们进入 segment-anything 的目录,执行下面的指令。

python scripts/amg.py --checkpoint /root/shared-storage/sam_vit_h_4b8939.pth --model-type vit_h --input /root/shared-storage/de.png --output /home/imgoutput 

使用 sam_vit_h_4b8939.pth 模型将 de.png 图片进行分割,分割后的图片存放在/home/imgoutput 目录中。 执行过程如下:

执行过程 进入/home/imgoutput 目录,可以看到有一个 de 目录,de 就是图片的名称。

输出目录 一张图片分割了 39 个图片,我们看一下这些分割的图片是什么样的。分割后的图片如下图:

分割结果 文件 matedata.csv 的内容如下:

元数据 到这里我们已经成功地将模型部署到 GPU 的实例中了。 运行一次该模型,消耗的资源还是比较小的,在实例的监控图上,基本看不到资源的负载太大的起伏如下图:

资源监控

运行 Demo

上面我们已经使用模型将图片分割出来了,那么下面看一下,该如何使用官方提供的 demo,查看一个图片的分割块。 这个 demo 简单展示了如何使用 Segment Anything 模型切割出来的数据,展示效果如下: 下面我教大家将该 demo 运行起来。 首先在 jupyter 中运行下面的代码,

import numpy as np 
import cv2 
from segment_anything import SamPredictor, sam_model_registry 
checkpoint = "/root/shared-storage/sam_vit_h_4b8939.pth" 
model_type = "vit_h" 
sam = sam_model_registry[model_type](checkpoint=checkpoint) 
sam.to(device='cuda') 
predictor = SamPredictor(sam) 
image = cv2.imread('/root/shared-storage/de.png') 
predictor.set_image(image) 
image_embedding = predictor.get_image_embedding().cpu().numpy() 
np.save("de_embedding.npy", image_embedding) 

运行后会生成一个 de_embedding.npy 文件将该文件下载到本地,并放在 segment-anythingdemo/src/assets/data/ 目录中。

Embedding 文件 然后再运行以下指令导出 web 使用的 onnx 模型

python scripts/export_onnx_model.py --checkpoint /root/shared-storage/sam_vit_h_4b8939.pth --model-type vit_h --output /root/shared-storage/sam_vit_h_onnx_example.onnx 

正常运行完成后,将 /root/shared-storage/sam_vit_h_onnx_example.onnx 文件放置在项目目录 segment-anything/demo/model/sam_vit_h_onnx_example.onnx 然后在 demo 目录 修改 App.tsx 的引用文件路径。

App 修改 最后在 demo 目录运行

yarn && yarn start 

浏览器打开启动的服务,一般是 http://localhost:8081/ 看一下动态效果图:

动态效果 鼠标放置在某一色块上,该色块就会被增加一层阴影,标识被识别,分割出来啦。如果要做成官网那种交互效果还需要花点前端的功夫。 如果有人需要,我也可以努力尝试做出官方的效果。

效果对比

总结

通过部署 Segment Anything 模型,我们了解了平台的使用方法,平台的各种资源使用,实例规格,也知道了在部署 Segment Anything 模型需要注意哪些事项。再部署模型后,后续我们可以集成一个后端开发框架,让用户上传图片,然后进行图片切割,做成一个智能抠图的产品或服务。

目录

  1. 前言
  2. 环境准备
  3. Segment Anything 模型介绍
  4. 配置环境
  5. 下载模型,运行模型
  6. 测试模型
  7. 运行 Demo
  8. 总结

更多推荐文章

查看全部
  • Llama-3.2-3B 部署优化:Ollama 配置上下文窗口与 Token 限制
  • Seedream 4.0 企业级图像 AIGC 能力解析与应用场景
  • AI 绘画精讲与 AIGC 时代游戏美术设计:从入门到精通
  • 常见黑客硬件设备原理与防御指南
  • AI Agent 新范式:FastGPT 结合 MCP 协议实现工具增强
  • Android 中高级技术面试核心考点与解析
  • 人工智能(AI)在教育、科研与行政领域的应用与变革
  • WebStorm 非商业用途全面免费:权益与边界解析
  • gRPC 跨语言通信实战:C++ 服务端对接 C# 客户端
  • JDK 下载、安装与环境配置完整指南
  • 知网维普 AIGC 检测应对策略:降低论文 AI 率的方法
  • 二分算法实战:查找元素首尾位置与区间计数
  • C++ 多态核心原理与实现细节
  • AI、AGI、AIGC、NLP、LLM 与 ChatGPT 的核心区别与联系
  • 为什么 AI 产品经理日渐成为热门职业
  • OpenClaw 云端服务器通过 SSH 控制本地 Windows 浏览器配置指南
  • SystemVerilog 教程:从基础概念到高级验证方法
  • 自然语言处理基础与文本分析系统开发
  • 数据结构初阶:堆的实现
  • 清华大学联合生数科技发布自研视频大模型 Vidu,性能比肩 Sora

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online