File size: 18,496 Bytes
b04c3c5 d2c37f4 3ca46d0 249ed54 9726c4e 249ed54 d2c37f4 249ed54 d2c37f4 b04c3c5 3ca46d0 b04c3c5 d2c37f4 b04c3c5 d2c37f4 b04c3c5 d2c37f4 249ed54 d2c37f4 249ed54 d2c37f4 b04c3c5 d2c37f4 249ed54 d2c37f4 249ed54 d2c37f4 b04c3c5 d2c37f4 249ed54 d2c37f4 249ed54 d2c37f4 b04c3c5 d2c37f4 b04c3c5 d2c37f4 249ed54 d2c37f4 b04c3c5 d2c37f4 249ed54 d2c37f4 b04c3c5 249ed54 b04c3c5 d2c37f4 249ed54 d2c37f4 249ed54 d2c37f4 249ed54 d2c37f4 b04c3c5 d2c37f4 249ed54 d2c37f4 249ed54 d2c37f4 b04c3c5 d2c37f4 249ed54 d2c37f4 249ed54 d2c37f4 b04c3c5 d2c37f4 249ed54 d2c37f4 249ed54 d2c37f4 b04c3c5 d2c37f4 b04c3c5 d2c37f4 249ed54 d2c37f4 249ed54 d2c37f4 b04c3c5 d2c37f4 249ed54 d2c37f4 249ed54 d2c37f4 249ed54 d2c37f4 b04c3c5 d2c37f4 249ed54 d2c37f4 249ed54 3ca46d0 249ed54 3ca46d0 249ed54 d2c37f4 b04c3c5 d2c37f4 249ed54 d2c37f4 b04c3c5 d2c37f4 249ed54 d2c37f4 249ed54 d2c37f4 249ed54 d2c37f4 249ed54 d2c37f4 249ed54 d2c37f4 249ed54 d2c37f4 249ed54 d2c37f4 249ed54 d2c37f4 249ed54 d2c37f4 249ed54 d2c37f4 249ed54 d2c37f4 249ed54 d2c37f4 3ca46d0 d2c37f4 249ed54 d2c37f4 b04c3c5 3d6f7a4 b04c3c5 3d6f7a4 249ed54 3d6f7a4 3ca46d0 3d6f7a4 249ed54 3d6f7a4 b04c3c5 3d6f7a4 3ca46d0 249ed54 3ca46d0 249ed54 3d6f7a4 b04c3c5 3d6f7a4 3ca46d0 249ed54 3ca46d0 3d6f7a4 b04c3c5 3d6f7a4 3ca46d0 249ed54 3ca46d0 3d6f7a4 b04c3c5 8aec406 3ca46d0 8aec406 3ca46d0 8aec406 3ca46d0 8aec406 249ed54 3d6f7a4 b04c3c5 d2c37f4 3ca46d0 d2c37f4 249ed54 d2c37f4 3ca46d0 9726c4e 249ed54 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 | # MODNet 与 RVM 模型制品仓库 (Model Artifact Registry)
> **用途**:集中托管 MODNet 与 RVM 的模型制品(ckpt / onnx / rknn 文件本身)
> **不包含**:训练代码与 C++ 推理代码——这些在配套的私有仓库中维护
>
> **维护者**:PotterWhite
> **最后更新**:2026-07-03
> **许可证(License)**:MIT
---
## 目录(Table of Contents)
1. [MODNet 模型](#1-modnet-模型)
- [1.1 官方预训练模型](#11-官方预训练模型)
- [1.2 微调模型 — 摄影数据集](#12-微调模型--摄影数据集)
- [1.3 ONNX 模型变体](#13-onnx-模型变体)
- [1.4 目录结构](#14-目录结构)
- [1.5 速查表](#15-速查表)
2. [RVM 模型](#2-rvm-模型)
- [2.1 ONNX 模型](#21-onnx-模型)
- [2.2 RKNN 模型](#22-rknn-模型)
- [2.3 质量总结](#23-质量总结)
- [2.4 推荐模型选择](#24-推荐模型选择)
- [2.5 Graph Surgery:移除最终的 Resize 及以后的算子](#25-graph-surgery移除最终的-resize-及以后的算子)
3. [相关文档](#3-相关文档)
4. [附录:训练日志摘要](#附录训练日志摘要)
---
## 1. MODNet 模型
### 1.1 官方预训练模型
#### 摄影人像抠图(Photographic Portrait Matting)
**文件**:`photographic/modnet_photographic_portrait_matting.ckpt`
```
原始 MODNet 检查点,在人像抠图数据集上训练
- 来源:作者 Google Drive(ZHKKKe/MODNet)
- 格式:PyTorch .ckpt(state_dict)
- 架构:MODNet + IBNorm + InstanceNormalization
- 输入尺寸:512×512
- 用途:微调实验的基线参考
- 状态:✓ 生产基线
```
#### 摄像头人像抠图(Webcam Portrait Matting)
**文件**:`modnet_webcam_portrait_matting.ckpt`
```
针对摄像头实时抠图优化的 MODNet 检查点
- 来源:作者 Google Drive
- 格式:PyTorch .ckpt(state_dict)
- 架构:MODNet + IBNorm + InstanceNormalization
- 输入尺寸:384×384(更低延迟)
- 用途:实时视频/直播场景
- 状态:✓ 可用,当前管线未使用
```
#### MobileNetV2 人体分割(Human Segmentation)
**文件**:`mobilenetv2_human_seg.ckpt`
```
辅助分割模型,用于预处理阶段
- 来源:作者 Google Drive
- 格式:PyTorch .ckpt
- 用途:可选预处理阶段(当前未部署)
- 状态:✓ 可用作参考
```
---
### 1.2 微调模型 — 摄影数据集
#### 纯批归一化变体(Pure Batch Normalization Variant)
**训练轮次**:Block 1.2 微调(2026-03-19 ~ 2026-03-19)
##### 概要
```
在 P3M-10k 摄影数据集上微调 MODNet-BN
- 将所有 IBNorm + InstanceNormalization 替换为纯 BatchNorm2d
- 15 个 Epoch 的监督训练,含学习率调度(Learning Rate Schedule)
- 最佳模型:验证集 L1 Loss 0.0062
```
##### 训练配置
| 参数 | 值 |
|------|-----|
| 数据集(Dataset) | P3M-10k(Photographic 子集) |
| 训练样本数 | 9,421 |
| 验证样本数 | 500 |
| 批大小(Batch Size) | 8 |
| 轮次(Epochs) | 15 |
| 初始学习率(Learning Rate) | 0.01 |
| 学习率调度 | StepLR:γ=0.1 @ epoch 5, 10 |
| 输入尺寸 | 512×512 |
| 优化器(Optimizer) | Adam (β₁=0.9, β₂=0.999) |
| 损失函数(Loss Function) | L1(MAE),作用于 alpha 遮罩 |
| 设备(Device) | NVIDIA A100 (CUDA 11.8) |
| 训练时长 | ~4 小时 |
| 时间戳 | 2026-03-19 15:40:18 |
##### 生成的制品(Artifacts)
```
photographic/finetune/
├── checkpoints/
│ ├── modnet_bn_best.ckpt # ★ 最佳模型(Val L1: 0.0062)
│ ├── modnet_bn_epoch_01.ckpt
│ ├── modnet_bn_epoch_02.ckpt
│ ├── ...(epoch 3-14 省略)
│ └── modnet_bn_epoch_15.ckpt
├── logs/
│ └── block1_2_training_20260319_154018.log # 训练日志(详细)
├── onnx/
│ └── modnet_bn_best_pureBN.onnx # ★ ONNX 导出(见 §1.3.3)
└── output/
├── epoch_01_val.png # 验证预览(第 1 轮)
├── epoch_02_val.png
├── ...(epoch 3-14 省略)
└── epoch_15_val.png # 最终验证可视化
```
##### 验证损失曲线(Validation Loss Curve)
```
Epoch | Val L1 Loss | 改进幅度
------|-------------|-------------------
1 | 0.0264 | Δ = -0.0202(新最佳)
2 | 0.0175 | Δ = -0.0089(新最佳)
3 | 0.0121 | Δ = -0.0054(新最佳)
4 | 0.0098 | Δ = -0.0023(新最佳)
5 | 0.0089 | Δ = -0.0009(新最佳)
6 | 0.0081 | Δ = -0.0008(新最佳)
7 | 0.0076 | Δ = -0.0005(新最佳)
8 | 0.0074 | Δ = -0.0002(新最佳)
9 | 0.0072 | Δ = -0.0002(新最佳)
10 | 0.0070 | Δ = -0.0002(新最佳)
11 | 0.0068 | Δ = -0.0002(新最佳)
12 | 0.0066 | Δ = -0.0002(新最佳)
13 | 0.0065 | Δ = -0.0001(新最佳)
14 | 0.0063 | Δ = -0.0002(新最佳)
15 | 0.0062 | Δ = -0.0001(最终)
→ 第 5 轮后收敛(学习率调度生效),持续稳步改进
```
##### 使用方法
```python
# PyTorch 推理
import torch
from modnet import MODNet
checkpoint = torch.load('photographic/finetune/checkpoints/modnet_bn_best.ckpt')
model = MODNet()
model.load_state_dict(checkpoint)
model.eval()
# 或使用 ONNX 推理(推荐用于部署)
import onnxruntime
sess = onnxruntime.InferenceSession('photographic/finetune/onnx/modnet_bn_best_pureBN.onnx')
```
---
### 1.3 ONNX 模型变体
#### 官方原始版本(Photographic)
**文件**:`photographic/modnet_photographic_portrait_matting.onnx`
```
从官方检查点直接导出的 ONNX
- 来源:作者 Google Drive
- 格式:ONNX opset 11
- 包含:InstanceNormalization 算子
- 输入:[1, 3, 512, 512](float32,[-1, 1] 归一化)
- 输出:[1, 1, 512, 512](float32,[0, 1] 范围)
- 状态:✓ 对比参考
- 注意:InstanceNormalization 在 NPU 上会回退到 CPU,**不推荐用于边缘部署**
```
#### 折叠变体(Folded Variant,Anti-fusion)
**文件**:`photographic/modnet_photographic_portrait_matting_in_folded.onnx`
```
通过 anti-fusion 方法展开 InstanceNormalization
- 优化者:PotterWhite (potter_white@outlook.com)
- 日期:2026-03-11 16:11
- 方法:将 InstanceNorm 展开为算术原语
- Var(x) = E[x²] − (E[x])²
- 防止 RKNN 编译器重新识别 InstanceNormalization
- 强制在 CPU 上执行(负面效果)
- 状态:⚠️ 实验性,不推荐
- 分析:违背了优化初衷
```
#### 纯批归一化版本(ONNX 导出)
**文件**:`photographic/finetune/onnx/modnet_bn_best_pureBN.onnx`
```
从 modnet_bn_best.ckpt(微调模型)导出的 ONNX
- 来源:PyTorch 微调训练(第 15 轮)
- 导出日期:2026-03-31 16:15
- 格式:ONNX opset 11
- 架构:纯 BatchNormalization(无 InstanceNorm)
- 输入:[1, 3, 512, 512](float32,[-1, 1] 归一化)
- 输出:[1, 1, 512, 512](float32,[0, 1] 范围)
- 文件大小:25 MB
- 状态:⚠️ 参考用。纯 BN 变体在当前量化/部署路径上仍有数值问题,
**生产部署请用 §1.3.1 官方原版(带 InstanceNorm)**。
技术说明(仅供对比研究):
- 无 InstanceNormalization → 理论上是 NPU 友好
- 全部算子:Conv2d, BatchNorm2d, ReLU 等(硬件友好)
- 但实测在某些量化路径上数值偏移较大,需进一步调试
已测试环境:
- ONNX Runtime 1.16.3(CPU, x86_64)
- ONNX Runtime 1.16.3(aarch64, 模拟环境)
- RKNN 工具链 v2.3.2(编译阶段验证)
```
##### 验证结果(对比参考)
```
黄金测试向量(Golden Test Vector):green-fall-girl-point-to.png (1803×1019)
- Python 推理输出:py_08_inference-Output.bin ✓
- C++ 推理输出:cpp_08_inference-Output.bin(待 C++ 构建)
- 预期匹配:像素级 L∞ 误差 < 1e-5(float32 精度)
```
---
### 1.4 目录结构
```
MODNet/
│
├── README.md ← 当前文件
│
├── [官方模型 - 根目录]
│ ├── mobilenetv2_human_seg.ckpt (备份,非活跃)
│ └── modnet_webcam_portrait_matting.ckpt (参考用,384×384)
│
└── photographic/ ← ★ 活跃部署变体
│
├── README.md (历史文件,已被取代)
│
├── [官方基线]
│ ├── modnet_photographic_portrait_matting.ckpt (1.8 GB)
│ ├── modnet_photographic_portrait_matting.onnx (26 MB, InstanceNorm)
│ └── modnet_photographic_portrait_matting_in_folded.onnx (26 MB, folded)
│
└── finetune/ ← ★ 活跃训练输出
│
├── checkpoints/ (PyTorch 制品)
│ ├── modnet_bn_best.ckpt ★ (1.8 GB, 最佳模型)
│ ├── modnet_bn_epoch_01.ckpt
│ ├── modnet_bn_epoch_02.ckpt
│ ├── ... (epoch 3-14)
│ └── modnet_bn_epoch_15.ckpt
│
├── onnx/ (部署用)
│ └── modnet_bn_best_pureBN.onnx ★ (25 MB, 推荐)
│
├── logs/ (元数据)
│ └── block1_2_training_20260319_154018.log
│
└── output/ (验证可视化)
├── epoch_01_val.png
├── epoch_02_val.png
├── ... (epoch 3-14)
└── epoch_15_val.png
```
---
### 1.5 速查表
| 模型 | 文件 | 大小 | 用途 | 状态 |
|------|------|------|------|------|
| **官方摄影模型** | `photographic/modnet_photographic_portrait_matting.ckpt` | 1.8 GB | 基线参考 | ✓ 参考 |
| **官方 ONNX** | `photographic/modnet_photographic_portrait_matting.onnx` | 26 MB | InstanceNorm 变体 | ⚠️ 不推荐 |
| **微调最佳模型** | `photographic/finetune/checkpoints/modnet_bn_best.ckpt` | 1.8 GB | PyTorch 部署 | ✓ 生产 |
| **微调 ONNX** | `photographic/finetune/onnx/modnet_bn_best_pureBN.onnx` | 25 MB | C++/RKNN 部署 | ★ **推荐** |
| **摄像头模型** | `modnet_webcam_portrait_matting.ckpt` | 1.8 GB | 实时流媒体 | ✓ 可用 |
---
## 2. RVM 模型
### 2.1 ONNX 模型
位于 `RobustVideoMatting/onnx/`。
| 模型 | 文件 | 大小 | 骨干网络(Backbone) | 深度导向滤波(Deep Guided Filter) | 来源 |
|------|------|------|----------|-----------------|------|
| **MobileNetV3 FP32** | `rvm_mobilenetv3_fp32.onnx` | 14.3MB | MobileNetV3 | ✓ | PeterL1n/RobustVideoMatting v1.0.0 |
| **MobileNetV3 FP16** | `rvm_mobilenetv3_fp16.onnx` | 7.2MB | MobileNetV3 | ✓ | FP16 导出 |
| **MobileNetV3 FP32** | `rvm_mobilenetv3_fp32_no_refiner.onnx` | 14.3MB | MobileNetV3 | — | 移除 Deep Guided Filter |
| **ResNet50 FP32** | `rvm_resnet50_fp32.onnx` | ~90MB | ResNet50 | ✓ | PeterL1n v1.0.0 |
| **ResNet50 FP16** | `rvm_resnet50_fp16.onnx` | ~45MB | ResNet50 | ✓ | FP16 导出 |
**关键模型属性**(MobileNetV3):
- Opset 12,IR version 6,353 个节点
- 零个 InstanceNorm 节点(NPU 友好)
- 6 个输入:`src [1,3,H,W]`、`r1i~r4i`(ConvGRU 状态)、`downsample_ratio [1]`
- 经 ArcFoundry `fold_constant_inputs` 处理后:5 个输入(downsample_ratio 烘焙为常量)
### 2.2 RKNN 模型
位于 `RobustVideoMatting/rknn/`,目标平台 RK3588 / RK3588S。
> **全部 RKNN 都已应用 no-resize graph surgery**(详见 §2.5):refiner 末尾的
> 2× Resize + Mul/Add/Split/Clip 链已从 NPU 图中移除,由 C++ 后处理端实现
> guided-filter 组合 + 上采样。下表不再单独标注 no-resize 变体。
| 模型 | 文件 | 大小 | 分辨率 | 精度 | dsr | 状态 |
|------|------|------|--------|------|-----|------|
| **1080×1920 FP16** | `rvm_mobilenetv3_fp16_1080x1920_0.25-dsr_rk3588s_20260603_rk3588_fp16.rknn` | 10.9MB | 1080×1920 | FP16 | 0.25 | 默认 |
| **736×1280 FP16** | `rvm_mobilenetv3_fp16_736x1280_0.5-dsr_rk3588s_20260603_rk3588_fp16.rknn` | 11.3MB | 736×1280 | FP16 | 0.5 | 较高质量 |
| **736×1280 FP16** | `rvm_mobilenetv3_fp16_736x1280_0.25-dsr_rk3588s_20260603_rk3588_fp16.rknn` | 9.9MB | 736×1280 | FP16 | 0.25 | — |
| **544×960 FP16** | `rvm_mobilenetv3_fp16_544x960_0.5-dsr_rk3588s_20260603_rk3588_fp16.rknn` | 10.3MB | 544×960 | FP16 | 0.5 | 中等质量 |
| **544×960 FP16** | `rvm_mobilenetv3_fp16_544x960_0.25-dsr_rk3588s_20260603_rk3588_fp16.rknn` | 9.5MB | 544×960 | FP16 | 0.25 | — |
| **416×736 FP16** | `rvm_mobilenetv3_fp16_416x736_0.5-dsr_rk3588s_20260603_rk3588_fp16.rknn` | 9.8MB | 416×736 | FP16 | 0.5 | — |
| **416×736 FP16** | `rvm_mobilenetv3_fp16_416x736_0.25-dsr_rk3588s_20260603_rk3588_fp16.rknn` | 9.3MB | 416×736 | FP16 | 0.25 | — |
| **320×576 FP16** | `rvm_mobilenetv3_fp16_320x576_0.5-dsr_rk3588s_20260603_rk3588_fp16.rknn` | 9.5MB | 320×576 | FP16 | 0.5 | — |
| **320×576 FP16** | `rvm_mobilenetv3_fp16_320x576_0.25-dsr_rk3588s_20260603_rk3588_fp16.rknn` | 9.1MB | 320×576 | FP16 | 0.25 | — |
| **288×512 FP16** | `rvm_mobilenetv3_fp16_288x512_0.25-dsr_rk3588s_20260603_rk3588_fp16.rknn` | 9.1MB | 288×512 | FP16 | 0.25 | 早期验证 |
| **256×256 FP16** | `rvm_mobilenetv3_fp16_256x256_0.25-dsr_rk3588s_20260603_rk3588_fp16.rknn` | 8.8MB | 256×256 | FP16 | 0.25 | 早期验证 |
**转换工具**:[ArcFoundry](https://github.com/PotterWhite/ArcFoundry.git) v0.15.0
- 配置目录:`ArcFoundry.git/configs/rvm/`
- 目标平台:RK3588 / RK3588S
- 归一化:`mean=[0,0,0], std=[255,255,255]`(RKNN 运行时执行 `/255.0`)
### 2.3 质量总结
> 当前批次(`rk3588s_20260603`)的板端 benchmark 正在收集中。
> 旧的 s14/s20/s21 数据对应的是已下线的 `rk3588` 批次,不再适用。
通用预期(基于已知的 RVM 行为规律):
- **dsr 越大,质量越好、速度越慢**(decoder 工作在 `H×dsr × W×dsr` 分辨率上)
- **处理分辨率越大,alpha 边缘越锐利**,但 NPU 推理时间近似线性增长
- 1080p 输入 + `dsr=0.25` 是速度最优档(decoder 工作在 270×480)
- 1080p 输入 + `dsr=0.5` 是质量最优档(decoder 工作在 540×960)—— 当前批次未提供该组合
> 详细 benchmark 数据待补。
### 2.4 推荐模型选择
> 待补。当前批次(`rk3588s_20260603`)的 benchmark 数据收集中。
> 一般规则:质量优先选 `dsr=0.5` 中最大处理分辨率(候选:544×960 / 736×1280),
> 速度优先选 `1080×1920 / dsr=0.25`,低内存选 `256×256 / dsr=0.25`。
> 选定后填入下表。
| 使用场景 | 推荐模型 | 理由 |
|----------|---------|------|
| **质量优先** | _(待补)_ | _(待补)_ |
| **速度优先** | _(待补)_ | _(待补)_ |
| **低内存** | _(待补)_ | _(待补)_ |
### 2.5 Graph Surgery:移除最终的 Resize 及以后的算子
> **本仓库全部 RKNN 模型都已应用此 graph surgery**(见 §2.2 表前的说明)。
> 原始 RVM ONNX 的 refiner 末尾含 2 个 `Resize` + 后续 element-wise 链(Mul、Add、
> Split、Clip 等),通过 ArcFoundry 的 `graph_surgery` 步骤把这些节点从 NPU 图中
> 移除,由 C++ 后处理端自行完成 guided-filter 组合 + 上采样。
#### 裁剪点
| 项目 | 数值 |
|------|-----|
| 原始 ONNX 总节点数 | 353 |
| 被删除的"尾部"命名算子 | 2× Resize + Mul + Add + Split + Add + 2× Clip(共 8 个) |
| `graph.cleanup()` 级联删除的死节点 | 28 个 |
| **图清理后净减少的节点(实测)** | **36 个**(353 → 317) |
| 裁剪版图输出 tensor | `777`(Conv_316 输出,refiner A,4ch,272×480)、`779`(Sub_318 输出,refiner b,4ch,272×480),外加 `r1o~r4o` |
#### 实测算子分类对比
| op_type | 原版 | 裁剪版 | Δ(原版 − 裁剪版) |
|---------|----:|-----:|------------------:|
| Constant | 48 | 32 | +16 |
| Shape | 12 | 8 | +4 |
| Slice | 12 | 8 | +4 |
| Concat | 23 | 20 | +3 |
| Add | 16 | 14 | +2 |
| Clip | 2 | 0 | +2 |
| Resize | 7 | 5 | +2 |
| Mul | 47 | 46 | +1 |
| ReduceMean | 2 | 1 | +1 |
| Split | 10 | 9 | +1 |
| **合计** | | | **+36** |
> 上表只列出发生变化的 `op_type`(未变的不列出)。
**为什么 `Constant` 减少了 16 个?** 因为 `graph.cleanup()` 会同时清理那些原本只为
被删节点提供常量输入的 Constant 节点;而 `Shape`/`Slice`/`Concat` 的减少则来自
refiner 内 Concat_311 上游、只为已删除 Resize 准备 shape/slice 信息的辅助节点。
**为什么 `Conv` 一颗没少?** 裁剪只动 refiner 尾巴(ID 195-202 对应的算子),
refiner 内部产生 A/b 的 Conv 网络(Conv_312/314/316)被保留——它输出的
A(4ch,272×480) + b(4ch,272×480) 是 C++ 后处理 guided-filter 组合的输入。
---
## 3. 相关文档
本仓库**仅托管模型制品**(ckpt / onnx / rknn 文件),不包含训练代码和 C++ 推理代码。
- 训练流程、ONNX 导出、C++ 推理、RKNN 转换等代码均在配套的私有仓库中维护
- 公开可见的模型来源:
- MODNet:作者 Google Drive(ZHKKKe/MODNet)
- RVM:[PeterL1n/RobustVideoMatting](https://github.com/PeterL1n/RobustVideoMatting) v1.0.0
- RKNN 转换 pipeline:[ArcFoundry](https://github.com/PotterWhite/ArcFoundry.git)(配置文件位于其 `configs/rvm/`)
---
## 附录:训练日志摘要
```
[Config] Device: cuda
[Config] Epochs: 15, BS: 8, LR: 0.01, Input: 512×512
[Dataset] Loaded 9421 samples (P3M-10k train)
[Model] Total parameters: 6,487,795
[Model] Trainable parameters: 6,487,795
Training Results (15 epochs):
- Epoch 1: Avg Loss 0.5410 → Val L1 0.0264 (new best)
- Epoch 2: Avg Loss 0.3054 → Val L1 0.0175 (new best)
- Epoch 3: Avg Loss 0.2634 → Val L1 0.0121 (new best)
- ...
- Epoch 15: Avg Loss 0.1820 → Val L1 0.0062 (final)
Convergence: ✓ Steady improvement through all 15 epochs
Overfitting: ✓ No significant degradation, clean convergence
```
---
**文档版本**:1.4
**最后更新**:2026-07-03 by PotterWhite
**提交历史**:通过 Git commit message 追踪
|