lang-segment-anything本地部署
简介
lang-segment-anything 是一个基于语言文本提示对图像中的物体进行分割的算法。它结合了 GroundingDINO 和 segment-anything 两大算法,在半自动标注上有很好的应用场景。该算法可以对没有训练的物体进行分割,也就是可以完成文本到图像物体的匹配。
本地部署
1. 代码及相关文件下载
除了要下载 lang-segment-anything 的代码外,还需要下载 GroundingDINO 和 segment-anything 的一些配置文件和权重。
- 首先进入 GitHub 官网下载
lang-segment-anything的所有文件,可以git clone或者下载 zip 压缩包。 - 然后下载
segment-anything需要的权重文件,有三种选择:l、b、h,这里只下载了效果最好的h。 - 除此以外还要下载
GroundingDINO的权重文件和对应的配置文件:有swinb和swint两种选择。 GroundingDINO用到了bert模型,因为在线下载模型很容易连接失败,所以最好也下载到本地,下载以下 5 个文件即可。
2. 环境配置
基本上按照 GitHub 上的操作即可,使用 conda 从 yml 文件创建虚拟环境:
conda env create -f environment.yml
主要是安装 torch、segment-anything 和 groundingdino。注意需要将 environment.yml 文件中 groundingdino 要修改为 groundingdino-py。还有 lang-sam 包找不到,可以不安装。torch 的安装可以按照以下代码执行:
pip install torch torchvision torchmetrics --index-url https://download.pytorch.org/whl/cu118
3. 代码修改
首先修改 lang-sam 下面的 lang-sam.py 文件,主要是添加了 bulid_groundingdino_local 和 load_model_loacl 方法用来加载本地 groundingdino 模型。注意权重文件和配置文件要对应。
4. demo 演示
运行下列代码,首先会提示是否更新 lightning,要选择否,更新的版本不行:
lightning run app app.py
运行代码之后,会在网页弹出以下窗口,上传图片之后,就能对图片进行文本提示的分割了。
注意事项
- 经试验,
lang-segment-anything在ubuntu18.04系统上成功部署,在windows系统上失败,建议在ubuntu系统上部署。
