电脑基础 · 2023年4月18日

Segment Anything Model (SAM)——卷起来了,那个号称分割一切的CV大模型他来了

最近每天打开微信看到10个公众号里面差不多有11个都在各种玩赚chatGPT,每个都在说是各种大好风口,哎,看得眼睛都是累的。

今天下午无意间看到Meta发布了一款号称能分割一切的CV大模型,CV圈也开始卷起来,今年各种大模型要爆发了感觉。

吃瓜群众满怀好奇,点开了解一下。

官方论文在这里,感兴趣可以自行阅读。

Segment Anything Model (SAM)——卷起来了,那个号称分割一切的CV大模型他来了

Segment Anything Model (SAM)——卷起来了,那个号称分割一切的CV大模型他来了

Segment Anything Model (SAM)——卷起来了,那个号称分割一切的CV大模型他来了

Segment Anything Model (SAM)——卷起来了,那个号称分割一切的CV大模型他来了

 官方同时也开源了项目,地址在这里,如下所示:

Segment Anything Model (SAM)——卷起来了,那个号称分割一切的CV大模型他来了

 可以看到:才开源了一天的时间就已经有6k的star量了,后续增长感觉会更猛的!

Segment Anything Model (SAM)——卷起来了,那个号称分割一切的CV大模型他来了

官方也给出来了数据集地址,在这里,如下所示:

Segment Anything Model (SAM)——卷起来了,那个号称分割一切的CV大模型他来了

 有需要的话可以自行下载使用即可。

当然了这么精彩的技术自然不会少的了技术博客的介绍,官方的技术博客在这里。

为了能让大家第一时间上手体验,这里官方也是开放出来了Demo地址,在这里,如下所示:

Segment Anything Model (SAM)——卷起来了,那个号称分割一切的CV大模型他来了

 上传一张我本地的图片,用的就是上一篇博客摔倒检测的数据集,如下:

Segment Anything Model (SAM)——卷起来了,那个号称分割一切的CV大模型他来了

 我添加了一个box,瞬间就给我分割出来了,如下:

Segment Anything Model (SAM)——卷起来了,那个号称分割一切的CV大模型他来了

 随着光标的移动,模型给出来的响应也是很快的:

Segment Anything Model (SAM)——卷起来了,那个号称分割一切的CV大模型他来了

Segment Anything Model (SAM)——卷起来了,那个号称分割一切的CV大模型他来了

Segment Anything Model (SAM)——卷起来了,那个号称分割一切的CV大模型他来了

Segment Anything Model (SAM)——卷起来了,那个号称分割一切的CV大模型他来了

 甚至还可以一键cutout所有的子对象如下:

Segment Anything Model (SAM)——卷起来了,那个号称分割一切的CV大模型他来了

Segment Anything Model (SAM)——卷起来了,那个号称分割一切的CV大模型他来了

Segment Anything Model (SAM)——卷起来了,那个号称分割一切的CV大模型他来了

 很强大了已经。

官方这里也提供了很多实例图片,简单看下:

Segment Anything Model (SAM)——卷起来了,那个号称分割一切的CV大模型他来了

 选择小狗试试吧:

Segment Anything Model (SAM)——卷起来了,那个号称分割一切的CV大模型他来了

Segment Anything Model (SAM)——卷起来了,那个号称分割一切的CV大模型他来了

添加box对指定区域直接分割:

Segment Anything Model (SAM)——卷起来了,那个号称分割一切的CV大模型他来了

 再来一张:

Segment Anything Model (SAM)——卷起来了,那个号称分割一切的CV大模型他来了

 效果如下:

Segment Anything Model (SAM)——卷起来了,那个号称分割一切的CV大模型他来了

 指定区域分割:

Segment Anything Model (SAM)——卷起来了,那个号称分割一切的CV大模型他来了

 最后再来试一下:

Segment Anything Model (SAM)——卷起来了,那个号称分割一切的CV大模型他来了

 效果如下:

Segment Anything Model (SAM)——卷起来了,那个号称分割一切的CV大模型他来了

 感兴趣的话都可以自己玩玩体验一下。

当然了如果想要自己安装使用也是可以的,官方同样给了安装说明如下:

先安装一些基础依赖
pip install opencv-python pycocotools matplotlib onnxruntime onnx
安装SAM
方法一:
pip install git+https://github.com/facebookresearch/segment-anything.git
方法二:
git clone git@github.com:facebookresearch/segment-anything.git
cd segment-anything; pip install -e .

 模型库在这里,需要的自行下载即可。

使用方法也很简单如下:

#from a given prompt:
from segment_anything import build_sam, SamPredictor
predictor = SamPredictor(build_sam(checkpoint="</path/to/model.pth>"))
predictor.set_image(<your_image>)
masks, _, _ = predictor.predict(<input_prompts>)

或者也可以如下使用:

#generate masks for an entire image:
from segment_anything import build_sam, SamAutomaticMaskGenerator
mask_generator = SamAutomaticMaskGenerator(build_sam(checkpoint="</path/to/model.pth>"))
masks = mask_generator_generate(<your_image>)

当然了,mask也可以通过命令行生成,如下:

python scripts/amg.py --checkpoint <path/to/sam/checkpoint> --input <image_or_folder> --output <output_directory>

关于两种不同的调用计算方式,官方也都给出来了详细的demo样例如下:

predictor_example

automatic_mask_generator_example

想要导出onnx格式的话也是可以的,如下:

python scripts/export_onnx_model.py --checkpoint <path/to/checkpoint> --output <path/to/output>

这里一共提供了H、L、B三种不同size的模型,如下:

ViT-H SAM model
ViT-L SAM model
ViT-B SAM model

 三种不同模型体积如下:

Segment Anything Model (SAM)——卷起来了,那个号称分割一切的CV大模型他来了

 可以根据自己的兴趣自由使用即可。

今天就简单到这里了,后面找时间在仔细看看吧!