一文读懂Grounded-SAM:从检测到分割的全流程解析

一文读懂Grounded-SAM:从检测到分割的全流程解析

【免费下载链接】Grounded-Segment-Anything Grounded-SAM: Marrying Grounding-DINO with Segment Anything & Stable Diffusion & Recognize Anything - Automatically Detect , Segment and Generate Anything 【免费下载链接】Grounded-Segment-Anything 项目地址: https://gitcode.com/gh_mirrors/gr/Grounded-Segment-Anything

你是否还在为复杂的图像分割任务烦恼?是否需要一个高效的工具来实现从目标检测到掩码生成的全流程处理?Grounded-Segment-Anything(简称Grounded-SAM)正是为解决这些问题而生。本文将带你深入了解Grounded-SAM的核心组件,掌握其工作流程,并通过实际案例展示如何利用这一强大工具实现精准的目标检测与分割。读完本文,你将能够:

  • 理解Grounded-SAM的核心架构与组件协同机制
  • 掌握从文本提示到掩码生成的完整流程
  • 学会使用不同轻量级模型进行高效标注
  • 了解Grounded-SAM在实际场景中的应用案例

核心组件架构解析

Grounded-SAM的强大之处在于其巧妙地融合了多个先进模型的优势,构建了一个端到端的目标检测与分割 pipeline。该架构主要由三大核心模块构成:文本引导的目标检测模块、通用目标分割模块以及可选的轻量级加速模块。

Grounding DINO:文本引导的目标检测

Grounding DINO 作为Grounded-SAM的前端目标检测器,实现了基于自然语言描述的零样本目标检测能力。其核心优势在于能够直接将自由形式的文本提示转换为精确的边界框,无需预定义类别列表。

Grounding DINO架构

Grounding DINO的实现细节可在 groundingdino/models/GroundingDINO/ 目录中找到,其中 groundingdino.py 文件包含了模型的核心架构定义。该模型创新性地设计了文本-图像跨模态注意力机制,通过 bertwarper.py 实现BERT模型与视觉编码器的协同工作,从而精准对齐文本描述与图像区域。

Segment Anything (SAM):通用目标分割

Segment Anything 作为后端分割模型,负责将检测到的边界框转换为精确的像素级掩码。SAM模型的核心特点是其强大的提示适应性和泛化能力,能够根据各种输入提示(包括边界框、点集或文本)生成高质量的目标掩码。

SAM模型架构

SAM的核心实现位于 segment_anything/modeling/ 目录下,其中 mask_decoder.pyimage_encoder.py 分别实现了掩码解码器和图像编码器。通过 automatic_mask_generator.py,SAM能够在无需用户提示的情况下自动生成图像中所有物体的掩码,极大地扩展了其应用场景。

EfficientSAM系列:轻量级加速方案

为了满足实时性要求较高的应用场景,Grounded-SAM提供了多种轻量级模型变体,统称为 EfficientSAM。这些模型通过模型压缩和结构优化,在保持较高分割精度的同时显著提升了推理速度。

EfficientSAM架构对比

EfficientSAM系列包括 MobileSAMFastSAMLightHQSAM 等多个变体,分别针对不同的速度-精度权衡需求进行了优化。以MobileSAM为例,其通过使用轻量级视觉编码器 tiny_vit_sam.py,实现了在移动设备上的高效运行。

全流程工作原理

Grounded-SAM的工作流程可以概括为三个主要步骤:文本引导的目标检测、边界框到掩码的转换,以及可选的后处理与优化。下面我们将详细解析每个步骤的实现细节和关键技术。

文本引导的目标检测流程

目标检测是Grounded-SAM流程的第一步,由Grounding DINO模型实现。该过程的核心是将用户输入的文本提示转换为精确的目标边界框。

Grounding DINO检测效果

具体实现可参考 grounding_dino_demo.py,其核心代码如下:

from groundingdino.util.inference import load_model, load_image, predict, annotate
import cv2

model = load_model("GroundingDINO/groundingdino/config/GroundingDINO_SwinT_OGC.py", "./groundingdino_swint_ogc.pth")
IMAGE_PATH = "assets/demo1.jpg"
TEXT_PROMPT = "bear."
BOX_THRESHOLD = 0.35
TEXT_THRESHOLD = 0.25

image_source, image = load_image(IMAGE_PATH)

boxes, logits, phrases = predict(
    model=model,
    image=image,
    caption=TEXT_PROMPT,
    box_threshold=BOX_THRESHOLD,
    text_threshold=TEXT_THRESHOLD
)

annotated_frame = annotate(image_source=image_source, boxes=boxes, logits=logits, phrases=phrases)
cv2.imwrite("annotated_image.jpg", annotated_frame)

在这个过程中,模型首先通过 load_model 函数加载预训练权重和配置文件(如 GroundingDINO_SwinT_OGC.py),然后使用 predict 函数根据文本提示生成目标边界框。检测结果可通过 annotate 函数进行可视化。

边界框到掩码的转换

在获得目标边界框后,Grounded-SAM使用SAM模型将其转换为精确的像素级掩码。这一步骤的关键是如何将边界框提示有效地传递给SAM模型,并生成高质量的掩码。

Grounded-SAM分割效果

grounded_sam_demo.py 展示了这一过程的实现,核心代码片段如下:

from segment_anything import sam_model_registry, SamPredictor

sam = sam_model_registry"vit_h"
sam.to(device=args.device)
predictor = SamPredictor(sam)

# 设置图像
predictor.set_image(image_source)

# 将Grounding DINO的边界框转换为SAM所需格式
h, w, _ = image_source.shape
boxes_xyxy = boxes * torch.Tensor([w, h, w, h])
boxes_xyxy = boxes_xyxy.cpu().numpy()

# 生成掩码
transformed_boxes = predictor.transform.apply_boxes_torch(boxes, image_source.shape[:2]).to(device)
masks, _, _ = predictor.predict_torch(
    point_coords=None,
    point_labels=None,
    boxes=transformed_boxes,
    multimask_output=False,
)

在这段代码中,首先加载SAM模型并创建预测器。然后,将Grounding DINO输出的归一化边界框转换为图像坐标,并通过 predict_torch 方法生成对应掩码。SAM的强大之处在于其能够根据粗略的边界框提示生成高度精确的掩码,这得益于其在大规模数据集上的预训练和精心设计的解码器架构。

后处理与优化

为了进一步提升分割质量和适应特定应用场景,Grounded-SAM提供了多种后处理和优化选项,包括掩码细化、多模态融合和自动标注等高级功能。

自动标注效果

automatic_label_demo.pyautomatic_label_ram_demo.py 展示了如何将Grounded-SAM与Recognize Anything Model (RAM) 结合,实现全自动的图像标注流程。通过集成 RAM++,系统能够自动生成目标类别标签,极大地提高了标注效率。

此外,Grounded-SAM还支持与 Stable Diffusion 等生成模型结合,实现基于分割结果的图像编辑。grounded_sam_inpainting_demo.py 展示了如何使用分割掩码进行图像修复,而 playground/ 目录下则提供了更多高级应用示例,如 DeepFloyd图像生成PaintByExample图像编辑

实际应用案例

Grounded-SAM的强大功能使其在多个领域都有广泛的应用前景。下面我们将介绍几个典型的应用场景,并展示如何使用Grounded-SAM解决实际问题。

交互式图像编辑

Grounded-SAM与生成模型的结合为交互式图像编辑提供了强大工具。用户只需通过文本描述指定需要编辑的区域和内容,系统即可自动完成分割和编辑过程。

图像修复效果

grounded_sam_whisper_inpainting_demo.py 展示了如何结合语音识别(Whisper)和图像修复功能,实现通过语音指令进行图像编辑。这一应用场景的核心在于利用Grounded-SAM精准分割用户描述的目标区域,然后使用 LaMaRePaint 等模型进行高质量的图像修复。

3D目标重建

Grounded-SAM还可以与3D重建技术结合,从单张图像生成目标的3D边界框。这一功能在自动驾驶、机器人导航等领域有重要应用。

3D边界框生成

grounded_sam_3d_box.ipynb 展示了这一过程的实现,其核心是将2D分割掩码与相机内参结合,通过几何推理估计目标的3D姿态和尺寸。相关实现细节可在 voxelnext_3d_box/ 目录中找到,其中 model.pyutils/centernet_utils.py 包含了3D检测的核心算法。

多模态引导分割

除了文本提示外,Grounded-SAM还支持多种模态的引导输入,包括图像、音频等。这极大地扩展了其应用场景和交互方式。

多模态分割效果

playground/ImageBind_SAM/ 目录下的示例展示了如何结合ImageBind模型实现多模态引导的分割功能。例如,audio_referring_seg_demo.py 实现了基于音频提示的目标分割,用户可以通过特定声音(如狗叫声)来指定需要分割的目标。这种多模态融合能力为视障辅助、智能监控等领域提供了新的可能性。

快速开始与资源指南

为了帮助用户快速上手Grounded-SAM,我们提供了详细的安装指南、示例代码和丰富的学习资源。无论你是初学者还是有经验的开发者,都能找到适合自己的学习路径和开发工具。

安装指南

Grounded-SAM支持Docker和本地两种安装方式,以适应不同的开发环境需求。

Docker安装(推荐):

make build-image
make run

本地安装

# 设置环境变量
export AM_I_DOCKER=False
export BUILD_WITH_CUDA=True
export CUDA_HOME=/path/to/cuda-11.3/

# 安装Segment Anything
python -m pip install -e segment_anything

# 安装Grounding DINO
pip install --no-build-isolation -e GroundingDINO

# 安装其他依赖
pip install opencv-python pycocotools matplotlib onnxruntime onnx ipykernel

更多安装细节可参考项目根目录下的 README.md 文件。

示例代码与教程

Grounded-SAM提供了丰富的示例代码和教程,覆盖从基础使用到高级应用的各个方面:

  • 基础演示grounded_sam_simple_demo.py 提供了一个极简的Grounded-SAM使用示例,适合快速了解核心功能。
  • 交互式界面gradio_app.py 实现了一个基于Gradio的交互式Web界面,方便用户通过图形界面体验Grounded-SAM的功能。
  • Jupyter笔记本grounded_sam.ipynbgrounded_sam_colab_demo.ipynb 提供了详细的分步教程,适合初学者系统学习。
  • 高级应用playground/ 目录下包含了多种高级应用示例,如多模态分割、图像生成和修复等。

模型选择指南

Grounded-SAM提供了多种模型变体,以适应不同的应用需求。以下是选择模型时的一些建议:

模型速度精度适用场景
Grounded-SAM (ViT-H)较慢最高高精度要求场景,如医疗影像分析
Grounded-SAM (ViT-L)中等平衡速度和精度的通用场景
Grounded-MobileSAM极快移动设备和实时应用
Grounded-FastSAM中高批量处理和高效标注
Grounded-Light-HQSAM中等需要高质量掩码的场景

模型的具体配置和性能指标可在 EfficientSAM/README.md 中找到。对于大多数应用场景,推荐从Grounded-FastSAM或Grounded-Light-HQSAM开始尝试,这两种模型在速度和精度之间取得了较好的平衡。

总结与展望

Grounded-SAM通过创新地融合Grounding DINO和Segment Anything等先进模型,构建了一个强大而灵活的目标检测与分割框架。其核心优势在于:

  1. 文本引导的灵活性:通过自然语言描述即可实现目标检测与分割,极大降低了使用门槛。
  2. 高精度的分割质量:SAM模型能够生成像素级精确的掩码,满足精细分割需求。
  3. 多模态交互能力:支持文本、图像、音频等多种输入模态,适应不同应用场景。
  4. 轻量级模型选项:提供多种高效模型变体,满足实时性和资源受限场景需求。

随着计算机视觉和自然语言处理技术的不断发展,Grounded-SAM未来还有很大的改进空间。我们可以期待更高效的模型架构、更强的跨模态理解能力,以及更丰富的应用场景拓展。无论你是研究人员、开发者还是普通用户,Grounded-SAM都为你提供了一个探索计算机视觉奥秘的强大工具。

要开始你的Grounded-SAM之旅,可以从克隆项目仓库开始:

git clone https://gitcode.com/mirrors/gr/Grounded-Segment-Anything
cd Grounded-Segment-Anything

然后参考 README.md 中的安装指南和示例代码,快速上手这一强大的视觉AI工具。我们期待看到你使用Grounded-SAM创造出更多令人惊叹的应用!

【免费下载链接】Grounded-Segment-Anything Grounded-SAM: Marrying Grounding-DINO with Segment Anything & Stable Diffusion & Recognize Anything - Automatically Detect , Segment and Generate Anything 【免费下载链接】Grounded-Segment-Anything 项目地址: https://gitcode.com/gh_mirrors/gr/Grounded-Segment-Anything

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

抵扣说明:

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

余额充值