SAM 模型真的是强悍到可以“分割一切”了吗?

Meta AI发布的SAM模型被吹捧为图像分割的强大工具,但新报告表明它在伪装物体分割任务上仍存在显著差距。通过与尖端模型对比和在自然、工业及医疗场景的实验,SAM在处理复杂伪装和细微差异时表现不足,揭示了CV研究仍有挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关注公众号,发现CV技术之美

5922afe98e5a3f36d1f10042f5a389c7.gif

97e0a754a7cac76246e86ad3a05bc85e.gif

上周,Meta AI发布了 Segment Anything Model(SAM)—— 第一个图像分割基础模型。很多计算机视觉从业者惊呼“这下CV真的不存在了,快跑!”。但是SAM 模型真的是强悍到可以“分割一切”了吗?它在哪些场景或任务中还不能较好地驾驭呢?

研究社区已经有一些相关工作对这一问题进行探索,今天向大家介绍一篇昨天刚出的技术报告:SAM Struggles in Concealed Scenes -- Empirical Study on "Segment Anything"。

         8668c8b770cd954baa20240182e43837.png

论文地址:https://arxiv.org/abs/2304.06022

该技术报告选择了在伪装物体分割任务上进行实验验证,发现SAM模型与当前尖端的伪装物体分割模型依旧有很大的差距,并通过对伪装动物、工业缺陷、医疗病灶中多个案例进行可视化分析,得出一些有趣的结论。

在讨论具体实验之前,我们先借助一张图片来了解一下什么是“伪装物体”,如左图和右图中分别隐藏了七只和六只小鸟,你发现了吗?生物学家把这种现象称为背景匹配伪装,用于表示一个或者多个生物为了防止被发现,尝试将其颜色与周围环境“无缝地”匹配,这

### SAM模型分割任务使用教程 #### 选择合适的预训练权重文件 对于SAM模型而言,默认提供了三种不同大小的预训练权重文件供使用者下载,分别是`defaultorvit_h:ViT-H SAM model`、`vit_l:ViT-L SAM model`以及`vit_b:ViT-B SAM model`[^2]。 #### 安装依赖库并加载模型 为了顺利运行SAM模型,需先安装必要的Python包。通常情况下,这涉及到PyTorch和其他辅助库的安装。完成环境搭建之后,可以通过如下方式来加载选定的SAM模型: ```python import torch from segment_anything import sam_model_registry, SamPredictor device = "cuda" if torch.cuda.is_available() else "cpu" sam_checkpoint = "./path/to/checkpoint.pth" # 替换成实际路径 model_type = "vit_h" sam = sam_model_registry[model_type](checkpoint=sam_checkpoint).to(device=device) predictor = SamPredictor(sam) ``` #### 准备输入数据 当准备就绪后,下一步就是准备好待处理的图像作为输入给到SAM模型。这里假设已经有一张名为`image.png`的目标图片位于当前工作目录下: ```python import cv2 import numpy as np input_image_path = 'image.png' image = cv2.imread(input_image_path) if image is None: raise ValueError(f"{input_image_path} not found.") image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # 将图像传递给预测器以便后续操作 predictor.set_image(image) ``` #### 执行交互式分割 不同于传统方法需要预先指定特定类别的标签信息,SAM支持通过简单的人机互动来进行更加灵活高效的分割作业。比如,可以直接在画面上点击感兴趣的对象位置或者绘制边界框以指导算法更好地理解用户的意图: ```python def onclick(event): global coords ix, iy = event.xdata, event.ydata print(f'x={ix:.0f}, y={iy:.0f}') coords.append((int(ix), int(iy))) coords = [] plt.imshow(image); plt.axis('off') cid = fig.canvas.mpl_connect('button_press_event', onclick) plt.show() masks, scores, logits = predictor.predict( point_coords=np.array(coords), point_labels=np.ones(len(coords)), # 假设所有标记点都属于前景对象 multimask_output=False, ) mask = masks[0] ``` 上述代码片段实现了基于鼠标点击事件获取坐标,并利用这些坐标点引导SAM执行精准分割的功能[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值