使用 CLIPSeg 的零样本图像分割
TL;DR
CLIPSeg 是一种零样本图像分割模型,允许用户通过文本描述或示例图像(视觉提示)对图像中的对象进行分割,无需对特定类别进行模型训练。虽然它只能提供粗糙、低分辨率的掩码,但在机器人感知、图像修复以及生成用于微调更精确分割模型的预标签方面具有很高的通用性。
CLIPSeg 工作原理:利用 CLIP 嵌入
CLIPSeg 通过基于 CLIP(对比语言-图像预训练)实现零样本分割,CLIP 是由 OpenAI 开发的模型。CLIP 在共享的高维空间中为图像和文本创建抽象表示(即嵌入),相似的概念在该空间中彼此靠近。
为了实现分割,CLIPSeg 使用在 PhraseCut 数据集上训练的基于 Transformer 的解码器,该数据集包含超过 34 万个短语及其对应的掩码。技术架构包括:
- Frozen CLIP Backbone:在训练期间底层的 CLIP 模型保持冻结。
- Decoder Integration:解码器接受目标图像的 CLIP 表示以及提示(文本或图像)的 CLIP 表示。
- Layer Utilization:解码器不仅使用最终的 CLIP 表示,还利用多个中间 CLIP 层的输出,以生成二值分割掩码。
关键能力:文本和视觉提示
CLIPSeg 的独特之处在于它能够处理两种提示类型来识别待分割的对象:
文本提示
用户可以提供文本字符串(例如 “pancakes” 或 “blueberries”)作为提示。模型使用这些词的 CLIP 文本嵌入来定位并掩码图像中对应的对象。
视觉提示
CLIPSeg 允许使用示例图像作为提示,而非文本。这对那些难以用语言描述的对象(例如服装上的特定徽标)特别有用。为优化视觉提示,研究建议:
- Cropping:提示图像应裁剪至仅包含感兴趣的对象。
- Background Modification:对提示图像的背景进行模糊或变暗可以略微提升效果。
技术限制与实际应用
尽管在灵活性方面功能强大,CLIPSeg 仍存在一些技术限制:
- Resolution:模型在 352 x 352 像素的图像上运行,产生低分辨率、‘模糊’的输出掩码,无法达到像素级精确。
- Use Case:由于分辨率限制,它最适合用于粗略定位或作为进一步细化的起点。
高精度分割工作流
由于 CLIPSeg 提供的是粗糙标签,它可以加速高质量数据集的创建。推荐的工作流是先使用 CLIPSeg 生成初始预标签,然后使用诸如 Segments.ai 的标注工具对这些掩码进行细化,最后在细化后的数据上微调最先进的分割模型(例如 SegFormer)。
使用 Hugging Face Transformers 实现
CLIPSeg 已集成到 ‹‹transformers‹‹ 库中。实现需要使用 CLIPSegProcessor 和 CLIPSegForImageSegmentation 类。
对于文本提示,processor 同时处理文本和图像。对于视觉提示,processor 为目标图像和提示图像生成独立的嵌入,然后将它们作为 conditional_pixel_values 传递给模型。