前言
最近在研究图像处理的过程中,接触到了 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,或使用访问链接和密码访问服务器终端。

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

配置环境
进入 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
环境安装过程如下图所示。
通过上面的步骤,我们已经安装好了模型运行的环境。



如果直接在实例中下载,会比较漫长。通过上传到文件存储就会自动挂载到实例中,这里存储的根文件对应到实例中目录
文件上传成功后,我们可以在实例的终端中看到这些文件。如下图:
文件和服务都准备好后,我们下面开始测试一下模型,处理分割一些文件。
然后我们进入
进入/home/imgoutput 目录,可以看到有一个 de 目录,de 就是图片的名称。
一张图片分割了 39 个图片,我们看一下这些分割的图片是什么样的。分割后的图片如下图:
文件 matedata.csv 的内容如下:
到这里我们已经成功地将模型部署到 GPU 的实例中了。
运行一次该模型,消耗的资源还是比较小的,在实例的监控图上,基本看不到资源的负载太大的起伏如下图:
然后再运行以下指令导出 web 使用的 onnx 模型
最后在 demo 目录运行
鼠标放置在某一色块上,该色块就会被增加一层阴影,标识被识别,分割出来啦。如果要做成官网那种交互效果还需要花点前端的功夫。
如果有人需要,我也可以努力尝试做出官方的效果。