欢迎关注我的公众号 [极智视界],获取我的更多经验分享
大家好,我是极智视界,本文带来一个实战项目 Segment-Anything分割一切,并提供完整项目工程源码 (划重点:单卡就能跑)。
Segment Anything,也即Segment Anyhing Model,也即SAM,这个工作由facebook提出,最近十分火热,给CV领域大模型的研究打开了一扇门。很多人其实根本意想不到CV领域的第一个大模型竟然出在分割,而不是相对容易的任务如分类、目标检测。从这点也足以看出facebook的实力和那么些傲娇(可能寓意着分割我都能做出来,那么其他如分类、检测任务就不在话下了)。
SAM有几个特点十分重要:
- (1) zero shot ==> 由segment anything引出的zero-shot,这个词你是不是在哪里听过,没错就是CLIP。这意味着你拿到SAM预训练模型后,不用微调、不用迁移,就能实现对一切物体的分割,十分地霸道;
- (2) 分割标注 ==> SAM还有一个十分重要的意义在于它可以成为一个分割数据集辅助标注的工具模型,大家知道分割的标注成本十分昂贵(这也是为什么通常的分割数据集都不够大 以及 吃惊在分割领域数据集如此匮乏的情况下facebook做出了十分依赖大数据集的分割大模型)。当然,SAM的大多训练数据集也是它自己标注的,而不是人工标注,这对于未来CV大模型的发展意义重大;
由于SAM本身不需要再训练,所以属于开箱即用型。
项目整体的流程是:跟语言大模型一样,需要给sam模型一个prompt提示,这个提示可以是一个点(point),也可以是几个点(points),也可以是一个框(box),也可以是一个文本(text),而SAM就根据prompt提示分割目标物体,就像下面这样:
为了方便展示,本项目用一个jupyter进行项目的执行。
首先需要安装conda环境 ==> 对应于jupyter执行的kernel。
# 参考项目README.md
# 安装conda环境
# 安装anaconda过程略过
conda create -n sam_py39 python=3.9
conda activate sam_py39
# 这里咱们安装最新的pytorch2.0 ==> pytorch官网下载链接:https://pytorch.org/get-started/locally/
# 这里cuda118,其他版本可以自行切换
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# 安装sam
pip install git+https://github.com/facebookresearch/segment-anything.git
# 或
git https://github.com/facebookresearch/segment-anything.git
cd segment-anything
pip install -e .
# 执行run_sam.ipynb进行分割
在run_sam.ipynb
执行的时候选择上述构建的kernel,然后进行一些基础设施构建:
今天YY刚回国,这里咱们就用YY来做项目的演示。首先导入YY:
然后进行模型的加载:
然后给模型一个提示prompt,这里给他一个点:
来看看sam的分割效果:
再来一个好玩的,我给它两个点,一个点是想让它分割的(绿色点),一个点是反选的(红色点),来看效果:
可以看到反选的效果十分之好。
下面是给它喂一个提示框的分割效果:
以下是一些其他图片的效果图:
另外这里提供的项目工程还有其他一些能力,比如输入多点和多框的配合、比如多batch图片同时进行分割等,实现均放在工程内run_sam.ipynb
,有兴趣的同学可以把玩一下,见识一下AI2.0的视界。
好了,以上分享了 Segmet-Anything分割一切,包括完整的项目工程源码和模型分享,希望我的分享能对你的学习有一点帮助。