FastSAM初体验,比SAM快50倍

 一、FastSAM介绍

1.简介

       由美国Meta公司提出的能够“分割一切”的视觉基础大模型SAM引起了较大影响,为探索通用视觉大模型提供了一个新的方向。

       2023年6月22日,中科院自动化所的研究团队针对“分割一切”任务,提出了FastSAM方法。中科院自动化所团队提出的FastSAM,对“分割一切”这一通用视觉任务的算法设计范式进行了重新思考,设计了“全实例分割+基于指令的掩码输出”两阶段算法。

       FastSAM通过引入人工先验的结构设计,大幅降低了原Transformer结构在该通用感知任务上的计算冗余,实现了50倍加速,这一“快速”的特点,有利于视觉基础大模型的行业落地,有利于工业化应用落地。

项目地址:GitHub - CASIA-IVA-Lab/FastSAM: Fast Segment Anything

2.设计方法

FastSAM在每个阶段进行了任务和方法协同的方法设计:

(1)第一阶段,利用图像中大多数物体只占据图像局部区域的特点,采用天然具备局部连接特点的卷积算子进行全实例分割网络构建。该结构相较Transformer结构更加紧致,计算成本更低,但依旧保持对物体或图像区域的表示和判别能力。

(2)第二阶段,采用物理空间匹配和图文对齐空间匹配的策略进行基于指令的掩码输出。基于上一阶段的全实例分割掩码:对于基于位置点指令,将该点的位置所关联的最优分割区域进行输出,支持多点模式、背景点抑制;对于基于位置框的指令,将包围框匹配到的最大IoU的分割掩码进行输出;对于文本指令,利用图文对齐网络CLIP将掩码图像区域与文本指令映射到同一个空间,进行相似性计算,进而输出最相似区域。

基于此方法结构,FastSAM在SAM团队开源的SA-1B数据集上随机挑选了2%的图片进行训练就取得了和SAM可匹配的效果,并且速度相较最常用的32×32指令版本的SAM提升了50倍,实现了实时的“分割一切”。

二、环境部署

1.安装 conda

wget https://mirrors.bfsu.edu.cn/anaconda/archive/Anaconda3-2022.10-Linux-x86_64.sh --no-check-certificate
bash Anaconda3-2022.10-Linux-x86_64.sh

输入 yes 表示同意,确认安装的路径,一般直接回车安装在默认的 /home/你的名字/anaconda3,很快就安装完毕。输入 yes 来确认使用 conda init 来启动,如果现在输入 conda,会显示找不到命令,需要启动已经修改环境变量,输入以下命令(以后都不用再 source 了,因为启动 Ubuntu 会自动 source)

source ~/.bashrc

这时候会发现出现了 (base)。

2.安装FastSAM环境

conda create -n FastSAM python=3.9
conda activate FastSAM

cd FastSAM
pip install -r requirements.txt

pip install git+https://github.com/openai/CLIP.git

模型下载:链接:https://pan.baidu.com/s/1PF6i5jzlxM7-4Sc3-fDFSw 密码:iuh1

放在./weights/下,修改为FastSAM.pt 。

三、测试运行

python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg

 

python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg  --text_prompt "the yellow dog"

 

from fastsam import FastSAM, FastSAMPrompt

model = FastSAM('./weights/FastSAM.pt')
IMAGE_PATH = './images/dogs.jpg'
DEVICE = 'cpu'
everything_results = model(IMAGE_PATH, device=DEVICE, retina_masks=True, imgsz=1024, conf=0.4, iou=0.9,)
prompt_process = FastSAMPrompt(IMAGE_PATH, everything_results, device=DEVICE)

# everything prompt
ann = prompt_process.everything_prompt()

# bbox default shape [0,0,0,0] -> [x1,y1,x2,y2]
ann = prompt_process.box_prompt(bbox=[200, 200, 300, 300])

# text prompt
ann = prompt_process.text_prompt(text='a photo of a dog')

# point prompt
# points default [[0,0]] [[x1,y1],[x2,y2]]
# point_label default [0] [1,0] 0:background, 1:foreground
ann = prompt_process.point_prompt(points=[[620, 360]], pointlabel=[1])

prompt_process.plot(annotations=ann,output_path='./output/dog.jpg',)

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学术菜鸟小晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值