Meta最新 | 分割一切后,Segment Anything又能分辨类别了!

编辑 | FightingCV

点击下方卡片,关注“自动驾驶之心”公众号

ADAS巨卷干货,即可获取

点击进入→自动驾驶之心【语义分割】技术交流群

后台回复【分割综述】获取语义分割、实例分割、全景分割、弱监督分割等超全学习资料!

前几日,Meta 推出了「分割一切」AI 模型 Segment Anything,令网友直呼 CV 不存在了?!而在另一篇被 CVPR 2023 收录的论文中,Meta、UTAustin 联合提出了新的开放语言风格模型(open-vocabulary segmentation, OVSeg),它能让 Segment Anything 模型知道所要分隔的类别。

从效果上来看,OVSeg 可以与 Segment Anything 结合,完成细粒度的开放语言分割。比如下图 1 中识别花朵的种类:sunflowers (向日葵)、white roses (白玫瑰)、 chrysanthemums (菊花)、carnations (康乃馨)、green dianthus (绿石竹)。

cc7eb7189b9371c08c7c9e2cd9712e86.jpeg

  • 即刻体验:https://huggingface.co/spaces/facebook/ov-seg

  • 项目地址:https://jeff-liangf.github.io/projects/ovseg/

研究背景

开放式词汇语义分割旨在根据文本描述将图像分割成语义区域,这些区域在训练期间可能没有被看到。最近的两阶段方法首先生成类别不可知的掩膜提案,然后利用预训练的视觉-语言模型(例如 CLIP)对被掩膜的区域进行分类。研究者确定这种方法的性能瓶颈是预训练的 CLIP 模型,因为它在掩膜图像上表现不佳。

为了解决这个问题,研究者建议在一组被掩膜的图像区域和它们对应的文本描述的收集的数据上对 CLIP 进行微调。研究者使用 CLIP 将掩膜图像区域与图像字幕中的名词进行匹配,从而收集训练数据。与具有固定类别的更精确和手动注释的分割标签(例如 COCO-Stuff)相比,研究者发现嘈杂但多样的数据集可以更好地保留 CLIP 的泛化能力。

除了对整个模型进行微调之外,研究者还使用了被掩膜图像中的「空白」区域,使用了他们称之为掩膜提示微调的方法。

实验表明,掩膜提示微调可以在不修改任何 CLIP 权重的情况下带来显著的改进,并且它可以进一步改善完全微调的模型。特别是当在 COCO 上进行训练并在 ADE20K-150 上进行评估时,研究者的最佳模型实现了 29.6%的 mIoU,比先前的最先进技术高出 8.5%。开放式词汇通用模型首次与 2017 年的受监督专家模型的性能匹配,而不需要特定于数据集的适应。

673799a9a86d6a8e1faaa33024915008.png

论文地址:https://arxiv.org/pdf/2210.04150.pdf

论文解读

动机

研究者的分析表明,预训练的 CLIP 在掩膜建议上表现不佳,成为两阶段方法的性能瓶颈。

7a7a634944b1bd757a06c34ed8429adf.png

  1. CLIP 是使用很少的数据增强在自然图像上进行预训练的。

  2. 两阶段的开放词汇语义分割方法首先生成类别不可知的掩膜建议,然后利用预训练的 CLIP 进行开放词汇分类。CLIP 模型的输入是裁剪的掩膜图像,与自然图像存在巨大的领域差距。

  3. 我们的分析表明,预训练的 CLIP 在掩膜图像上表现不佳。

方法

研究者的模型包括一个分割模型(例如 MaskFormer)和一个 CLIP 模型

1fead1072c9ed6307cfa7f1d08c57753.png

他们首先训练修改后的 MaskFormer 作为开放词汇分割的基线(第 3.1 节),然后从图像标题中收集多样的掩膜-类别对(第 3.2 节),并适应 CLIP 用于掩膜图像(第 3.3 节)。

结果

研究者首次展示开放词汇的通用模型可以在没有数据集特定调整的情况下与受监督的专业模型的性能相匹配

25c11a75338a76fbfcb9085fcd6843ab.png

更多分类示例如下所示。

e741aa083b3ad2ad489c72817ba01e4e.jpeg

994b6b73688cc7dedeee4e1de0cdf064.png

更多技术细节请参阅原论文。

视频课程来了!

自动驾驶之心为大家汇集了毫米波雷达视觉融合、高精地图、BEV感知、传感器标定、传感器部署、自动驾驶协同感知、语义分割、自动驾驶仿真、L4感知、决策规划、轨迹预测等多个方向学习视频,欢迎大家自取(扫码进入学习)

dde89fc39b252717598882b882f8070c.png

(扫码学习最新视频)

国内首个自动驾驶学习社区

近1000人的交流社区,和20+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(分类、检测、分割、关键点、车道线、3D目标检测、Occpuancy、多传感器融合、目标跟踪、光流估计、轨迹预测)、自动驾驶定位建图(SLAM、高精地图)、自动驾驶规划控制、领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!

2df09751db689fc3892e3874065e09e3.jpeg

自动驾驶之心】全栈技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多传感器融合、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向;

1045bff219aedafe826a9d99f2693b5e.jpeg

添加汽车人助理微信邀请入群

备注:学校/公司+方向+昵称

<think>嗯,用户想了解SAM模型的工作原理和使用方法。首先,我需要回忆一下SAM的相关信息。记得SAM是Meta提出的一个用于图像分割的模型,可以处理各种提示输入生成掩码。根据引用[3],SAM包含三个组件:图像编码器、提示编码器和掩码解码器。这部分应该是结构的关键。 接下来,工作原理方面,用户可能需要知道每个组件的功能。图像编码器可能用的是类似ViT的结构,处理高分辨率图像。提示编码器需要处理不同类型的提示,比如点、框、文本,但引用里提到的是点、框和掩码,所以可能需要确认。然后,掩码解码器结合图像和提示信息生成分割结果。引用[4]提到预训练时模拟各种提示,对比预测结果,这应该是训练策略的一部分。 关于使用方法,用户可能想知道如何实际操作,比如输入点、框等提示,或者批量处理。引用[2]提到代码复现部分,有点标记、框标记的预测,可能需要说明如何调用模型,不同的输入方式对应的输出。例如,单点、多点、混合提示的使用。 还要考虑用户可能的深层需求,比如他们是否想自己训练模型,或者应用在具体项目中。可能需要强调SAM的零样本迁移能力,适用场景如医学图像、自动驾驶等,引用[1]和[4]提到的数据生成和歧义处理能力。 需要注意回答的结构,分工作原理和使用方法,每个部分再细分组件和步骤。引用格式要正确,每个引用对应到正确的部分。例如,模型结构部分引用[3],训练策略引用[4],使用示例引用[2]。 最后,生成相关问题时要围绕SAM的扩展应用、优化、对比其他模型等方面,帮助用户进一步探索。检查是否遗漏了重要部分,比如数据引擎的三个阶段,但用户的问题可能更关注模型本身,所以可能不需要深入数据部分,除非必要。</think>### Segment Anything Model (SAM) 模型解析 #### 一、工作原理 1. **核心组件** SAM 包含三个核心模块(引用[3]): - **图像编码器(Image Encoder)**:使用 Vision Transformer (ViT) 结构,将输入图像编码为高维特征表示$$Z \in \mathbb{R}^{H \times W \times C}$$,支持高分辨率输入(如 $1024 \times 1024$)。 - **提示编码器(Prompt Encoder)**:将用户提供的提示(点、框、文本或掩码)编码为向量,例如点坐标通过位置编码映射为嵌入向量$$p \in \mathbb{R}^d$$。 - **掩码解码器(Mask Decoder)**:结合图像特征和提示嵌入,通过交叉注意力机制生成分割掩码$$M \in \{0,1\}^{H \times W}$$,并预测掩码的置信度得分。 2. **训练策略** - 预训练时,通过模拟多种提示(单点、多点、框等)生成训练样本,并计算预测掩码与真实标签的损失(如 Dice Loss + Focal Loss)[^4]。 - 支持**零样本迁移**:无需微调即可直接应用于新数据集或任务,例如医学图像分割、遥感图像分析等[^1]。 --- #### 二、使用方法 1. **输入类型** SAM 支持以下交互式提示(引用[2]): - **点标记**:单点(前景/背景)或多点组合。 - **框标记**:通过矩形框指定目标范围。 - **混合提示**:同时输入点和框以提高精度。 2. **代码示例(简化版)** ```python from segment_anything import SamPredictor, sam_model_registry # 加载模型 sam = sam_model_registry["vit_b"](checkpoint="sam_vit_b_01ec64.pth") predictor = SamPredictor(sam) # 输入图像 predictor.set_image("image.jpg") # 指定提示(例如点坐标和标签) input_point = np.array([[x1, y1], [x2, y2]]) # 坐标 input_label = np.array([1, 0]) # 1为前景,0为背景 # 生成掩码 masks, scores, _ = predictor.predict( point_coords=input_point, point_labels=input_label, multimask_output=True # 输出多个候选掩码 ) ``` 3. **应用场景** - **自动标注**:通过批量生成掩码加速数据标注流程。 - **交互式编辑**:结合用户反馈迭代优化分割结果。 - **跨领域分割**:如自动驾驶中的障碍物识别、生物医学图像分析等。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值