Files
my-vault/自动语义分割系统/ComfyUI 搭建操作指南.md

291 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: ComfyUI 视频分割系统 - 界面搭建操作指南
date: 2026-04-22
tags:
- comfyUI
- 操作指南
- SAM2
- 工作流搭建
---
# ComfyUI 视频分割系统 - 界面搭建操作指南
> 前置假设:你已安装以下节点包。如未安装,请先通过 ComfyUI Manager 安装:
> - `ComfyUI-Manager`(管理器本身)
> - `ComfyUI-VideoHelperSuite`(视频加载/保存)
> - `ComfyUl-segment-anything-2`SAM2 分割,推荐 kijai 版)
> - `ComfyUI-Impact-Pack`Grounding DINO / 检测器)
> - `rgthree-comfy`Fast Muter / Bypass 节点)
---
## 第一步:打开节点添加菜单
在画布空白处 **双击鼠标左键**,或 **右键单击空白处** → 选择 `添加节点`
你会看到一个分类菜单(如 `image`, `video`, `SAM2`, `rgthree` 等)。
---
## 第二步:搭建视频输入端
### 2.1 加载视频
1. 右键/双击空白处打开节点菜单
2. 在第二级菜单中找到 **Video Helper Suite**(带有紫色摄像机图标的那一项)
3. 在右侧弹出的第三级菜单中,根据你的需求选择以下任意一个节点:
- **Load Video (Upload)**:如果你想从电脑本地上传一个视频文件
- **Load Video (Path)**:如果你想通过输入电脑上的文件夹路径来读取视频
4. 点击创建节点
5. 节点出现在画布上,把它拖到左上角区域
### 2.2 提取第一帧(关键帧选择器)
1. 回到 **Video Helper Suite**(紫色摄像机图标)的第三级菜单
2. 找到 `图像` 分类下的 **`Select Images`**
- 在较新版本的 Video Helper Suite 中,它取代了旧版的 `VHS_SelectFrames` 名称功能完全一致都是通过索引Index从视频流中挑选特定帧
3. (可选抽帧)如果你不想逐帧处理,也可以使用它上方的 **`Select Every Nth Image`**,每隔几帧取一张
4. 连接:`Load Video``IMAGE` 输出 → `Select Images``image` 输入
5. 设置参数:`index = 0`(表示取第一帧)
> **操作技巧**ComfyUI 中,鼠标从一个节点的**圆形输出端**拖拽到另一个节点的**圆形输入端**即可完成连线。
---
## 第三步:放置 SAM2 模型加载器
这是整个系统的核心引擎。
1. 右键/双击空白处
2. 找到分类:`SAM2` ,别选 `segment_anything2 `
3. 选择节点:`(Down)Load SAM2Model`(名称可能为 `SAM2ModelLoader``SAM2::Model Loader`
4. 参数设置:
- `model_name`: 选择 `sam2.1 hiera_base_plus.safetensors`(精度与速度平衡)
- `device`: `cuda`(若显存不足可选 `cpu`,但极慢)
- `precision`: `fp16`(推荐,省显存)
将这个节点放在画布**中上部**,作为公共模型源。
---
## 第四步:创建交互式提示(三选一或组合)
根据你的需求,添加以下**至少一种**提示节点。建议**三种都创建**,后期灵活切换。
### 4.1 点标注(正选/反选)
1. 添加节点:`SAM2 → `SAM2 Point Prompt` 或 `Point Prompt`
2. 参数设置:
- `points`: `[[0.5, 0.5]]`(归一化坐标,格式为 JSON 列表)
- `labels`: `[1]``1` = 正选前景,`0` = 反选背景)
- **示例**`points = [[0.45, 0.52], [0.55, 0.48]]`, `labels = [1, 0]` 表示第一个点是前景、第二个点是背景排除
> **注意**SAM2 的坐标通常是**归一化坐标**0~1而非像素坐标。部分节点包也支持像素坐标请查看节点说明。
### 4.2 框标注
1. 添加节点:`SAM2``SAM2 Box Prompt``Box Prompt`
2. 参数:
- `box`: `[0.3, 0.3, 0.7, 0.8]`xyxy 格式,归一化坐标)
### 4.3 语义提示(文本 → 检测框 → Mask
这是**自动化程度最高**的路径,需要两步:
#### Step A文本转检测框
1. 添加节点:`Impact``GroundingDinoDetector``UltralyticsDetectorProvider`
- 选择 `Grounding DINO` 节点
2. 参数:
- `prompt`: `"a person"`(你的目标描述)
- `threshold`: `0.3`(置信度阈值)
#### Step B检测框转 SAM2 框提示
1. `Grounding DINO``BOXES` 输出 → 连接到 `Box Prompt` 节点的 `box` 输入
2. 这样文本自动生成了空间位置信息
---
## 第五步单帧分割SAM2 Image Predictor
1. 添加节点:`SAM2``SAM2 Image Predictor`
2. 连线如下:
- `SelectFrames` 的图像输出 → `SAM2 Image Predictor``image`
- `SAM2 Model Loader` 的模型输出 → `SAM2 Image Predictor``sam2_model`
- `Point Prompt` / `Box Prompt` 的提示输出 → `SAM2 Image Predictor``prompt`
3. 参数:
- `multimask_output`: `False`(一般场景单 mask 即可,复杂场景可开 True 再筛选)
**此时你可以先点击「运行」测试单帧分割效果。**
---
## 第六步视频追踪核心SAM2 Video Predictor
这是将单帧结果传播到全视频的关键节点。
1. 添加节点:`SAM2``SAM2 Video Predictor``SAM2VideoPredictor`
2. 连线:
- `SAM2 Model Loader``sam2_model`
- `Load Video` 的完整图像批次 → `video_frames`(或 `images`
- `SAM2 Image Predictor` 输出的 `mask``initial_mask`
- `SelectFrames` 的帧索引(或通过常量节点设置 `frame_index=0`)→ `frame_index`
3. **内部逻辑**:该节点会对视频所有帧预编码,并在第 0 帧注入你刚才分割的 mask
---
## 第七步双向追踪Track Range
部分 SAM2 节点包将追踪拆分为独立节点,部分内嵌在 Video Predictor 中。
### 情况 A有独立追踪节点
1. 添加节点:`SAM2``SAM2 Track Forward``SAM2 Track Backward`
2. 或者查找:`SAM2``Track Range` / `Track Bidirectional`
3. 连线:`SAM2 Video Predictor``state` 输出 → `Track Range``video_state`
4. 参数:
- `start_frame`: 关键帧索引(如 0
- `direction`: `both` 或分别创建前向/后向节点
### 情况 B追踪内嵌在 Video Predictor 中
- 若你的节点包版本直接输出 `mask_sequence`,则跳过此步,直接连到预览/保存节点。
---
## 第八步:输出与可视化
### 8.1 预览 Mask
1. 添加节点:`image``MaskToImage`(将 mask 转为可视图像)
2. 再添加:`image``Preview Image`
3. 连接追踪输出的 mask → `MaskToImage``Preview Image`
### 8.2 合成视频(原图 + Mask 叠加)
1. 添加节点:`video``VHS_VideoCombine`VideoHelperSuite
2. 或:`image``Composite Mask` / `ImageCompositeMasked`
3. 参数:
- `color`: `#FF0000`Mask 颜色)
- `alpha`: `0.6`(透明度)
### 8.3 保存 Mask 序列
1. 添加节点:`image``Save Image`(批量保存时每个 mask 会存为独立文件)
2. 或使用 `VHS_SaveImageSequence`
3. 建议设置 `filename_prefix`: `mask_segment`
---
## 第九步人工纠正分支RGThree Fast Muter
这是提升迭代效率的核心技巧。
### 9.1 创建 Fast Muter 节点
1. 右键/双击空白处
2. 找到:`rgthree``Fast Muter`(或 `Fast Bypasser`
3. 该节点有一个开关按钮,点击可在 **启用(绿色)****跳过/静音(红色)** 之间切换
### 9.2 搭建纠正分支
**思路**在主线旁创建一条「修正输入」的旁路默认关闭Bypass。发现问题时打开覆盖原追踪结果。
#### 具体步骤:
1. **创建修正用的 Frame Picker**
- 再添加一个 `SelectFrames` 节点,命名为 "Fix_Frame"
- 参数 `frame_index`:留空或设为 `45`(示例问题帧)
2. **创建修正用的 Point Prompt**
- 再添加一个 `Point Prompt`,命名为 "Fix_Points"
- 填入修正后的坐标
3. **创建修正用的 SAM2 Image Predictor**
- 添加第二个 `SAM2 Image Predictor`,命名为 "SAM2_Fix"
- 输入:`Fix_Frame` 的图像 + `Fix_Points` + 公共 `SAM2 Model Loader`
4. **插入 Fast Muter 控制修正流**
- 在 "SAM2_Fix" 的 `mask` 输出后,连接到一个 `Fast Muter` 节点
- `Fast Muter` 的输出 → `SAM2 Video Predictor``correction_mask``additional_hint` 输入
- **默认状态**:点击 `Fast Muter` 使其变为红色Muted/跳过),此时修正分支不参与运算
- **需要修正时**:点击变绿(启用),修正 mask 被注入追踪器
5. **创建重新追踪控制**
- 如果 SAM2 Video Predictor 支持 `retrack_from_frame` 输入,将 `Fix_Frame` 的帧索引连入
- 或使用第二个 `Track Range` 节点,设置 `start_frame` 为修正帧
### 9.3 实际操作流程
```
第一次运行:
1. Fast Muter = 红色(关闭)
2. 运行完整工作流
3. 检查 Preview Image / 输出视频
发现问题(如第 45 帧漂移):
1. 修改 "Fix_Frame" 的 frame_index = 45
2. 修改 "Fix_Points" 的坐标为正确位置
3. 点击 Fast Muter → 绿色(启用)
4. 重新点击「运行」
5. 系统从第 45 帧重新追踪,覆盖错误区间
确认修复后:
1. Fast Muter → 红色(关闭,避免影响后续运行)
2. 保存最终工作流
```
---
## 第十步:工作流连线总览
按以下逻辑检查你的连线是否完整:
```
[Load Video] ──→ [SelectFrames(0)] ──→ [SAM2 Image Predictor] ←── [SAM2 Model Loader]
│ ↑
│ [Point Prompt / Box Prompt / Text→Grounding→Box]
│ │
│ [Fast Muter] ←── [SelectFrames(N)] ──→ [SAM2 Image Predictor(修正)]
│ (默认关闭) ↑
│ [Fix Points]
[SAM2 Video Predictor] ←── initial_mask ───┘
├──→ [Track Forward] ──┐
└──→ [Track Backward] ─┼──→ [合并 Mask Sequence] ──→ [MaskToImage] ──→ [Preview Image]
└────────────────────────────────────────────────→ [Save Image]
```
---
## 运行前检查清单
- [ ] SAM2 模型文件已下载到 `ComfyUI/models/sam2/` 目录
- [ ] Grounding DINO 模型已下载(如使用语义提示)
- [ ] `Load Video` 已选择有效视频路径
- [ ] `SelectFrames(0)` 正确提取了第一帧
- [ ] Prompt 节点的坐标格式与节点要求一致(归一化 0~1 或像素坐标)
- [ ] `SAM2 Video Predictor` 接收的是**完整视频批次**,而非单帧
- [ ] `Fast Muter` 当前状态符合预期(首次运行应为关闭/红色)
- [ ] 输出节点的保存路径可写
---
## 常见问题速查
| 问题 | 排查方向 |
|------|---------|
| 节点呈红色/无法创建 | 节点包未安装或加载失败,检查 ComfyUI 启动日志 |
| SAM2 节点报错显存不足 | 换 `sam2_hiera_tiny.pt`,或降低视频分辨率,或启用 fp16 |
| 追踪结果全黑/全白 | 检查 `initial_mask` 是否正确传入检查坐标格式0~1 vs 像素) |
| Grounding DINO 无检测结果 | 降低 `threshold`,或简化 prompt如只写 `"person"` |
| 修正后重新追踪无变化 | 确认 `Fast Muter` 已启用(绿色),且修正 mask 正确连入 Video Predictor |
| 视频输出帧率不对 | 在 `Load Video``VideoCombine` 中统一设置 fps 参数 |
---
## 下一步建议
1. **先跑通单帧分割**:不连 Video Predictor只用 Image Predictor + Preview Image 确认第一帧分割正确
2. **再接入视频追踪**:确认单帧无误后,再连 SAM2 Video Predictor
3. **最后添加纠正分支**:等标准流程跑通后再加入 RGThree Fast Muter 机制
4. **保存工作流模板**`Workflow``Save`(或 Ctrl+S命名为 `VideoSeg_Template.json`