【计算机视觉 | 目标检测 | 图像分割】Grounded Segment Anything:Grounding DINO + Segment Anything Model (SAM)介绍

本文介绍了一个结合GroundingDINO和SegmentAnything的项目,通过文本提示实现图像中的对象检测和分割。文章详细描述了预处理工作、亮点项目如通用图像分割模型和交互式分割框架,以及如何安装和使用这些工具进行演示。


集成SAM,可以通过文本提示做检测/分割等任务。

在这里插入图片描述
我们计划通过结合 Grounding DINO 和 Segment Anything 来创建一个非常有趣的演示,旨在通过文本输入检测和分割任何内容! 并且我们会在此基础上不断完善它,创造出更多有趣的demo。

我们非常愿意帮助大家分享和推广基于Segment-Anything的新项目,更多精彩的demo和作品请查看社区:亮点扩展项目。 您可以提交新问题(带有项目标签)或新拉取请求以添加新项目的链接。

在这里插入图片描述
在这里插入图片描述
该项目背后的核心思想是结合不同模型的优势,构建一个非常强大的管道来解决复杂问题。 值得一提的是,这是一个组合强专家模型的工作流程,其中所有部件都可以单独或组合使用,并且可以替换为任何相似但不同的模型(例如用 GLIP 或其他探测器替换 Grounding DINO / 替换 Stable- 使用 ControlNet 或 GLIGEN 进行扩散/与 ChatGPT 结合)。

一、Preliminary Works

在这里,我们提供了一些您在尝试演示之前可能需要了解的背景知识。

  1. Segment-Anything:

强大的基础模型旨在分割图像中的所有内容,这需要提示(如框/点/文本)来生成掩模

在这里插入图片描述
2. Grounding DINO:

强大的零样本检测器,能够生成带有自由格式文本的高质量框和标签。

在这里插入图片描述
3. OSX

一种强大而高效的单阶段运动捕捉方法,可从单目图像生成高质量的 3D 人体网格。 OSX还发布了大规模上半身数据集UBody,用于更准确地重建上半身场景。

在这里插入图片描述
4. Stable-Diffusion

超强大的开源潜在文本到图像扩散模型。

在这里插入图片描述
5. RAM

RAM is an image tagging model, which can recognize any common category with high accuracy.

  1. BLIP

A wonderful language-vision model for image understanding.

  1. Visual ChatGPT

A wonderful tool that connects ChatGPT and a series of Visual Foundation Models to enable sending and receiving images during chatting.

  1. Tag2Text

An efficient and controllable vision-language model which can simultaneously output superior image captioning and image tagging.

  1. VoxelNeXt

A clean, simple, and fully-sparse 3D object detector, which predicts objects directly upon sparse voxel features.

二、Highlighted Projects

在这里,我们提供了一些您可能会感兴趣的令人印象深刻的作品:

2.1 Semantic-SAM

通用图像分割模型,能够以任何所需的粒度分割和识别任何内容.

2.2 SEEM: Segment Everything Everywhere All at Once

强大的提示分割模型支持使用各种类型的提示(文本、点、涂鸦、引用图像等)以及提示的任意组合进行分割。

2.3 OpenSeeD

一个用于开放词汇分割和检测的简单框架,支持通过框输入生成掩模的交互式分割.

2.4 LLaVA

Visual instruction tuning with GPT-4.

三、Installation

该代码需要 python>=3.8,以及 pytorch>=1.7 和 torchvision>=0.8。 请按照此处的说明安装 PyTorch 和 TorchVision 依赖项。 强烈建议安装支持 CUDA 的 PyTorch 和 TorchVision。

3.1 Install with Docker

Open one terminal:

make build-image
make run

就是这样。

如果您想允许跨 docker 容器进行可视化,请打开另一个终端并输入:

xhost +

3.2 Install without Docker

如果您想为Grounded-SAM构建本地GPU环境,您应该手动设置环境变量,如下所示:

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

安装 DINO 接地:

python -m pip install -e GroundingDINO

安装扩散器:

pip install --upgrade diffusers[torch]

Install osx:

git submodule update --init --recursive
cd grounded-sam-osx && bash install.sh

Install RAM & Tag2Text:

git submodule update --init --recursive
cd Tag2Text && pip install -r requirements.txt

以下可选依赖项对于掩模后处理、以 COCO 格式保存掩模、示例笔记本以及以 ONNX 格式导出模型是必需的。 运行示例笔记本还需要 jupyter。

pip install opencv-python pycocotools matplotlib onnxruntime onnx ipykernel

四、GroundingDINO: Detect Everything with Text Prompt

以下是运行 GroundingDINO 演示的分步教程:

4.1 Download the pretrained weights

cd Grounded-Segment-Anything

# download the pretrained groundingdino-swin-tiny model
wget https://github.com/IDEA-Research/GroundingDINO/releases/download/v0.1.0-alpha/groundingdino_swint_ogc.pth

4.2 Running the demo

python grounding_dino_demo.py

4.3 Running with Python

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)

如果您想使用 Grounding DINO 在一个句子中检测多个物体,我们建议用 分隔每个名称。 。 一个例子:猫。 狗 。 椅子 。

4.4 Check the annotated image

带注释的图像将保存为./annotated_image.jpg。

在这里插入图片描述

### 如何使用 Grounded Segment Anything 框架进行图像分割 #### 加载必要的模型和配置文件 为了利用 `Grounded Segment Anything` 框架执行图像分割任务,首先需要加载相应的预训练模型以及设置好环境。具体来说,通过调用特定函数可以构建出用于检测目标物体位置的 `grounding_dino` 模型实例[^3]。 ```python from groundingdino import load_model # 构建 grounding dino 模型 grounding_model = load_model( model_config_path="path/to/GROUNDING_DINO_CONFIG", model_checkpoint_path="path/to/GROUNDING_DINO_CHECKPOINT", device="cuda" ) ``` #### 准备输入数据并获取预测结果 完成上述准备工作之后,下一步就是准备待处理的图片作为输入给到模型中去。通常情况下,这一步骤涉及到读取本地存储的照片或者是网络上的资源链接,并将其转换成适合喂入神经网络的形式。对于 `Grounded Segment Anything` 而言,在得到初步的目标定位信息后,还需要进一步借助其他组件来实现精确的对象边界描绘工作[^4]。 ```python import cv2 import numpy as np def preprocess_image(image_path): image = cv2.imread(image_path) # 假设此处有额外的数据前处理逻辑... processed_data = transform(image) # 使用合适的transform方法调整尺寸等操作 return processed_data.unsqueeze(0).to(device) input_tensor = preprocess_image('example.jpg') predictions = grounding_model(input_tensor)[0] ``` #### 解析输出并与原始图像结合展示 最后,解析由模型产生的预测结果,提取感兴趣区域(ROI),并将这些 ROI 叠加回原图之上以便直观查看效果。值得注意的是,由于采用了先进的算法设计思路,使得该框架能够在几乎不受限的情况下对各类场景中的对象进行全面而细致地划分[^1]。 ```python import matplotlib.pyplot as plt def visualize_results(original_img, prediction_masks): fig, ax = plt.subplots() ax.imshow(cv2.cvtColor(original_img, cv2.COLOR_BGR2RGB)) mask_overlay = np.zeros_like(original_img) for idx, mask in enumerate(prediction_masks): color = np.random.randint(0, 256, (1, 3), dtype=np.uint8) mask_overlay[mask > 0.5] = color alpha = 0.5 overlayed_image = cv2.addWeighted(mask_overlay, alpha, original_img, 1-alpha, 0) ax.imshow(overlayed_image) plt.show() visualize_results(cv2.imread('example.jpg'), predictions['masks'].cpu().numpy()) ```
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

旅途中的宽~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值