Grounded SAM 2
Grounded SAM 2:使用Grounding DINO、Grounding DINO 1.5和SAM 2在视频中检测和跟踪任何物体。
🔥 项目亮点
在本仓库中,我们通过简单的实现支持了以下演示:
- 使用Grounding DINO、Grounding DINO 1.5 & 1.6和SAM 2进行检测和分割任何物体
- 使用Grounding DINO、Grounding DINO 1.5 & 1.6和SAM 2进行检测和跟踪任何物体
- 基于强大的supervision库进行检测、分割和跟踪可视化
与Grounded SAM: 组装开放世界模型以应对多样化视觉任务相比,Grounded SAM 2在方法上没有引入重大变化。两种方法都利用了开放世界模型的能力来解决复杂的视觉任务。因此,我们尝试在这个仓库中简化代码实现,旨在提高用户便利性。
新闻
2024/08/09
: 支持在整个视频中检测和跟踪新物体。该功能目前仍在开发中。感谢Shuo Shen的贡献。2024/08/07
: 支持自定义视频输入,用户只需提交他们的视频文件(例如mp4文件)和特定的文本提示即可获得令人印象深刻的演示视频。
目录
安装
下载预训练的SAM 2
检查点:
cd checkpoints
bash download_ckpts.sh
下载预训练的Grounding DINO
检查点:
cd gdino_checkpoints
bash download_ckpts.sh
不使用docker的安装
首先安装PyTorch环境。我们在环境中使用python=3.10
,以及torch >= 2.3.1
、torchvision>=0.18.1
和cuda-12.1
来运行这个演示。请按照这里的说明安装PyTorch和TorchVision依赖项。强烈建议安装支持CUDA的PyTorch和TorchVision。你可以使用以下命令轻松安装最新版本的PyTorch:
pip3 install torch torchvision torchaudio
由于我们需要CUDA编译环境来编译Grounding DINO中使用的Deformable Attention
算子,我们需要检查CUDA环境变量是否已正确设置(你可以参考Grounding DINO安装了解更多细节)。如果你想为Grounding DINO构建本地GPU环境以运行Grounded SAM 2,可以手动设置环境变量如下:
export CUDA_HOME=/path/to/cuda-12.1/
安装Segment Anything 2
:
pip install -e .
安装Grounding DINO
:
pip install --no-build-isolation -e grounding_dino
使用docker的安装
构建Docker镜像并运行Docker容器:
cd Grounded-SAM-2
make build-image
make run
执行这些命令后,你将进入Docker环境。容器内的工作目录设置为:/home/appuser/Grounded-SAM-2
进入Docker环境后,你可以通过运行以下命令启动演示:
python grounded_sam2_tracking_demo.py
Grounded SAM 2演示
使用Grounding DINO的Grounded SAM 2图像演示
请注意,Grounding DINO
已经在Huggingface上得到支持,因此我们提供了两种运行Grounded SAM 2
模型的选择:
- 使用huggingface API进行Grounding DINO推理(简单明了)
python grounded_sam2_hf_model_demo.py
[!注意] 🚨 如果在使用
HuggingFace
模型时遇到网络问题,你可以通过设置适当的镜像源来解决:export HF_ENDPOINT=https://hf-mirror.com
- 加载本地预训练的Grounding DINO检查点,并使用Grounding DINO原始API进行推理(确保你已经下载了预训练检查点)
python grounded_sam2_local_demo.py
使用Grounding DINO 1.5 & 1.6的Grounded SAM 2图像演示
我们已经发布了我们最强大的开放集检测模型Grounding DINO 1.5 & 1.6,它可以与SAM 2结合使用,以获得更强大的开放集检测和分割能力。你可以先申请API令牌,然后按如下方式运行使用Grounding DINO 1.5的Grounded SAM 2:
安装最新的DDS cloudapi:
pip install dds-cloudapi-sdk
从我们的官方网站申请你的API令牌:申请API令牌。
python grounded_sam2_gd1.5_demo.py
Grounded SAM 2视频对象跟踪演示
基于SAM 2强大的跟踪能力,我们可以将其与Grounding DINO结合,实现开放集对象分割和跟踪。你可以运行以下脚本来获得使用Grounded SAM 2的跟踪结果:
python grounded_sam2_tracking_demo.py
- 每一帧的跟踪结果将保存在
./tracking_results
中 - 视频将保存为
children_tracking_demo_video.mp4
- 你可以自行修改此文件,使用不同的文本提示和视频片段来获得更多跟踪结果
- 为了简单起见,我们这里只对第一个视频帧使用Grounding DINO进行提示
支持各种跟踪提示类型
我们为Grounded SAM 2跟踪演示支持了不同类型的提示:
- 点提示:为了获得稳定的分割结果,我们重新使用SAM 2图像预测器基于Grounding DINO的框输出获取每个对象的预测掩码,然后我们从预测掩码中均匀采样点作为SAM 2视频预测器的点提示
- 框提示:我们直接使用Grounding DINO的框输出作为SAM 2视频预测器的框提示
- 掩码提示:我们使用基于Grounding DINO框输出的SAM 2掩码预测结果作为SAM 2视频预测器的掩码提示
使用Grounding DINO 1.5 & 1.6的Grounded SAM 2视频对象跟踪演示
我们还基于更强大的Grounding DINO 1.5
模型和SAM 2
支持了视频对象跟踪演示,在申请运行Grounding DINO 1.5
的API密钥后,你可以尝试以下演示:
python grounded_sam2_tracking_demo_with_gd1.5.py
使用Grounding DINO的Grounded SAM 2自定义视频输入的视频对象跟踪演示
用户可以上传自己的视频文件(例如 assets/hippopotamus.mp4
)并指定自定义文本提示,使用以下脚本通过 Grounding DINO 和 SAM 2 进行定位和跟踪:
python grounded_sam2_tracking_demo_custom_video_input_gd1.0_hf_model.py
使用自定义视频输入的 Grounded SAM 2 视频对象跟踪演示(使用 Grounding DINO 1.5 和 1.6)
用户可以上传自己的视频文件(例如 assets/hippopotamus.mp4
)并指定自定义文本提示,使用以下脚本通过 Grounding DINO 1.5 和 SAM 2 进行定位和跟踪:
python grounded_sam2_tracking_demo_custom_video_input_gd1.5.py
你可以在此文件中指定参数:
VIDEO_PATH = "./assets/hippopotamus.mp4"
TEXT_PROMPT = "hippopotamus."
OUTPUT_VIDEO_PATH = "./hippopotamus_tracking_demo.mp4"
API_TOKEN_FOR_GD1_5 = "你的API令牌" # G-DINO 1.5 的 API 令牌
PROMPT_TYPE_FOR_VIDEO = "mask" # 使用 SAM 2 掩码预测作为视频预测器的提示
运行我们的演示代码后,你可以获得如下跟踪结果:
[视频名称]
我们将自动将跟踪可视化结果保存在 OUTPUT_VIDEO_PATH
中。
[!警告] 我们在输入视频的第一帧初始化框提示。如果你想从不同的帧开始,可以在我们的代码中自行修改
ann_frame_idx
。
具有连续 ID 的 Grounded-SAM-2 视频对象跟踪(使用 Grounding DINO)
在上述演示中,我们仅在特定帧中提示 Grounded SAM 2,这可能不利于在整个视频中发现新对象。在这个演示中,我们尝试发现新对象并在整个视频中为它们分配新的 ID,这个功能仍在开发中,目前还不太稳定。
用户可以上传自己的视频文件并指定自定义文本提示,使用 Grounding DINO 和 SAM 2 框架进行定位和跟踪。执行以下脚本:
python grounded_sam2_tracking_demo_with_continuous_id.py
你可以自定义各种参数,包括:
text
:定位文本提示。video_dir
:包含视频文件的目录。output_dir
:保存处理后输出的目录。output_video_path
:输出视频的路径。step
:处理的帧步长。box_threshold
:groundingdino 模型的框阈值text_threshold
:groundingdino 模型的文本阈值 注意:此方法仅支持掩码类型的文本提示。
运行我们的演示代码后,你可以获得如下跟踪结果:
[视频名称]
如果你想尝试 Grounding DINO 1.5
模型,可以在设置好 API 令牌后运行以下脚本:
python grounded_sam2_tracking_demo_with_continuous_id_gd1.5.py
引用
如果你发现这个项目对你的研究有帮助,请考虑引用以下 BibTeX 条目。
[BibTeX 引用内容]