Commit ·
3ca46d0
1
Parent(s): b04c3c5
docs(readme): strip private-repo references, sync RKNN list to 2026-06-03 batch
Browse files- Drop §1.5 (references helmsman private repo)
- §1.3.3 pureBN: remove 'recommended for deployment' (production uses §1.3.1)
- §2.1: rename 'Refiner' column to '深度导向滤波 (Deep Guided Filter)'
- §2.2: replace RKNN table with current 11-file 2026-06-03 batch
(all no-resize); fix ArcFoundry version to v0.15.0
- §2.3/§2.4: mark old s14/s20/s21 data stale; new benchmarks pending
- §2.5: reword '全部 RKNN 已应用 graph surgery' (no special variant)
- §3: strip helmsman private paths; keep only public-facing pointers
- Add scope note to top (this repo = artifacts only)
- Bump version 1.3 → 1.4
README.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
| 1 |
# MODNet 与 RVM 模型制品仓库 (Model Artifact Registry)
|
| 2 |
|
| 3 |
-
> **用途**:集中管
|
|
|
|
| 4 |
>
|
| 5 |
> **维护者**:PotterWhite
|
| 6 |
> **最后更新**:2026-07-03
|
|
@@ -15,8 +16,7 @@
|
|
| 15 |
- [1.2 微调模型 — 摄影数据集](#12-微调模型--摄影数据集)
|
| 16 |
- [1.3 ONNX 模型变体](#13-onnx-模型变体)
|
| 17 |
- [1.4 目录结构](#14-目录结构)
|
| 18 |
-
- [1.5
|
| 19 |
-
- [1.6 速查表](#16-速查表)
|
| 20 |
2. [RVM 模型](#2-rvm-模型)
|
| 21 |
- [2.1 ONNX 模型](#21-onnx-模型)
|
| 22 |
- [2.2 RKNN 模型](#22-rknn-模型)
|
|
@@ -209,8 +209,6 @@ sess = onnxruntime.InferenceSession('photographic/finetune/onnx/modnet_bn_best_p
|
|
| 209 |
**文件**:`photographic/finetune/onnx/modnet_bn_best_pureBN.onnx`
|
| 210 |
|
| 211 |
```
|
| 212 |
-
★ 推荐用于部署
|
| 213 |
-
|
| 214 |
从 modnet_bn_best.ckpt(微调模型)导出的 ONNX
|
| 215 |
- 来源:PyTorch 微调训练(第 15 轮)
|
| 216 |
- 导出日期:2026-03-31 16:15
|
|
@@ -219,14 +217,13 @@ sess = onnxruntime.InferenceSession('photographic/finetune/onnx/modnet_bn_best_p
|
|
| 219 |
- 输入:[1, 3, 512, 512](float32,[-1, 1] 归一化)
|
| 220 |
- 输出:[1, 1, 512, 512](float32,[0, 1] 范围)
|
| 221 |
- 文件大小:25 MB
|
| 222 |
-
- 状态:
|
|
|
|
| 223 |
|
| 224 |
-
|
| 225 |
-
|
| 226 |
-
|
| 227 |
-
|
| 228 |
-
✓ RKNN 工具链编译更快
|
| 229 |
-
✓ 比 IBNorm 变体收敛更好
|
| 230 |
|
| 231 |
已测试环境:
|
| 232 |
- ONNX Runtime 1.16.3(CPU, x86_64)
|
|
@@ -289,79 +286,7 @@ MODNet/
|
|
| 289 |
|
| 290 |
---
|
| 291 |
|
| 292 |
-
### 1.5
|
| 293 |
-
|
| 294 |
-
#### ONNX 生成方法
|
| 295 |
-
|
| 296 |
-
```python
|
| 297 |
-
# 第 1 步:训练微调检查点
|
| 298 |
-
# $ cd helmsman.git/
|
| 299 |
-
# $ python3 third-party/scripts/modnet/train_modnet_block1_2.py
|
| 300 |
-
# → 输出:photographic/finetune/checkpoints/modnet_bn_best.ckpt
|
| 301 |
-
|
| 302 |
-
# 第 2 步:导出为 ONNX(Pure-BN 架构)
|
| 303 |
-
import torch
|
| 304 |
-
import onnx
|
| 305 |
-
from modnet import MODNet # Pure-BN 版本
|
| 306 |
-
|
| 307 |
-
checkpoint = torch.load('checkpoints/modnet_bn_best.ckpt')
|
| 308 |
-
model = MODNet()
|
| 309 |
-
model.load_state_dict(checkpoint)
|
| 310 |
-
model.eval()
|
| 311 |
-
|
| 312 |
-
# 虚拟输入(Dummy Input)
|
| 313 |
-
dummy_input = torch.randn(1, 3, 512, 512)
|
| 314 |
-
|
| 315 |
-
# 导出,支持动态轴(Dynamic Axes)
|
| 316 |
-
torch.onnx.export(
|
| 317 |
-
model, dummy_input,
|
| 318 |
-
'onnx/modnet_bn_best_pureBN.onnx',
|
| 319 |
-
export_params=True,
|
| 320 |
-
opset_version=11,
|
| 321 |
-
do_constant_folding=False, # 保留 BN 参数可见
|
| 322 |
-
input_names=['input'],
|
| 323 |
-
output_names=['output'],
|
| 324 |
-
dynamic_axes={
|
| 325 |
-
'input': {0: 'batch_size', 2: 'height', 3: 'width'},
|
| 326 |
-
'output': {0: 'batch_size', 2: 'height', 3: 'width'}
|
| 327 |
-
}
|
| 328 |
-
)
|
| 329 |
-
|
| 330 |
-
# 第 3 步:验证 ONNX 模型
|
| 331 |
-
onnx_model = onnx.load('onnx/modnet_bn_best_pureBN.onnx')
|
| 332 |
-
onnx.checker.check_model(onnx_model)
|
| 333 |
-
print("✓ ONNX 模型验证通过")
|
| 334 |
-
```
|
| 335 |
-
|
| 336 |
-
#### C++ 推理部署
|
| 337 |
-
|
| 338 |
-
```bash
|
| 339 |
-
# 构建 C++ 推理引擎
|
| 340 |
-
cd helmsman.git/
|
| 341 |
-
./helmsman prepare # 安装 Python 依赖、MODNet 子模块
|
| 342 |
-
./helmsman build cpp cb native # 清理构建(x86_64 原生)
|
| 343 |
-
|
| 344 |
-
# 运行推理
|
| 345 |
-
./install/native/release/bin/Helmsman_Matting_Client \
|
| 346 |
-
<input_image> \
|
| 347 |
-
photographic/finetune/onnx/modnet_bn_best_pureBN.onnx \
|
| 348 |
-
<output_dir>
|
| 349 |
-
|
| 350 |
-
# 对比 Python 黄金参考
|
| 351 |
-
python3 tools/MODNet/verify_golden_tensor.py
|
| 352 |
-
```
|
| 353 |
-
|
| 354 |
-
#### 部署清单
|
| 355 |
-
|
| 356 |
-
- [ ] ONNX 模型通过 `onnx.checker.check_model()` 验证
|
| 357 |
-
- [ ] C++ 构建通过黄金张量验证(Golden Tensor Verification)
|
| 358 |
-
- [ ] Python 与 C++ 推理输出匹配(L∞ 误差 < 1e-5)
|
| 359 |
-
- [ ] 边缘设备(RK3588S)交叉编译测试通过
|
| 360 |
-
- [ ] 延迟基准测试:每次推理 < 100ms(512×512 输入)
|
| 361 |
-
|
| 362 |
-
---
|
| 363 |
-
|
| 364 |
-
### 1.6 速查表
|
| 365 |
|
| 366 |
| 模型 | 文件 | 大小 | 用途 | 状态 |
|
| 367 |
|------|------|------|------|------|
|
|
@@ -379,72 +304,80 @@ python3 tools/MODNet/verify_golden_tensor.py
|
|
| 379 |
|
| 380 |
位于 `RobustVideoMatting/onnx/`。
|
| 381 |
|
| 382 |
-
| 模型 | 文件 | 大小 | 骨干网络(Backbone) |
|
| 383 |
-
|------|------|------|----------|---------|------|
|
| 384 |
-
| **MobileNetV3 FP32** | `rvm_mobilenetv3_fp32.onnx` | 14.3MB | MobileNetV3 |
|
| 385 |
-
| **MobileNetV3 FP16** | `rvm_mobilenetv3_fp16.onnx` | 7.2MB | MobileNetV3 |
|
| 386 |
-
| **MobileNetV3 FP32
|
| 387 |
-
| **ResNet50 FP32** | `rvm_resnet50_fp32.onnx` | ~90MB | ResNet50 |
|
| 388 |
-
| **ResNet50 FP16** | `rvm_resnet50_fp16.onnx` | ~45MB | ResNet50 |
|
| 389 |
|
| 390 |
**关键模型属性**(MobileNetV3):
|
| 391 |
- Opset 12,IR version 6,353 个节点
|
| 392 |
- 零个 InstanceNorm 节点(NPU 友好)
|
| 393 |
-
- 无精炼器算子(DeepGuidedFilterRefiner 未包含)
|
| 394 |
- 6 个输入:`src [1,3,H,W]`、`r1i~r4i`(ConvGRU 状态)、`downsample_ratio [1]`
|
| 395 |
- 经 ArcFoundry `fold_constant_inputs` 处理后:5 个输入(downsample_ratio 烘焙为常量)
|
| 396 |
|
| 397 |
### 2.2 RKNN 模型
|
| 398 |
|
| 399 |
-
位于 `RobustVideoMatting/rknn/`。
|
| 400 |
-
|
| 401 |
-
|
| 402 |
-
|
| 403 |
-
|
| 404 |
-
|
| 405 |
-
|
|
| 406 |
-
|
|
| 407 |
-
| **
|
| 408 |
-
| **
|
| 409 |
-
| **
|
| 410 |
-
| **544×960 FP16
|
| 411 |
-
| **544×960 FP16
|
| 412 |
-
|
| 413 |
-
**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 414 |
- 配置目录:`ArcFoundry.git/configs/rvm/`
|
| 415 |
-
- 目标平台:RK3588
|
| 416 |
- 归一化:`mean=[0,0,0], std=[255,255,255]`(RKNN 运行时执行 `/255.0`)
|
| 417 |
|
| 418 |
### 2.3 质量总结
|
| 419 |
|
| 420 |
-
|
| 421 |
-
|
| 422 |
-
|
| 423 |
-
|
| 424 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 425 |
|
| 426 |
-
|
| 427 |
-
- 所有模型在 `dance.mp4` 上测试(363 帧,1920×1080)
|
| 428 |
-
- 板端:RK3588S,NPU0=40%,NPU1&2=10%
|
| 429 |
|
| 430 |
### 2.4 推荐模型选择
|
| 431 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 432 |
| 使用场景 | 推荐模型 | 理由 |
|
| 433 |
|----------|---------|------|
|
| 434 |
-
| **质量优先** |
|
| 435 |
-
| **速度优先** |
|
| 436 |
-
| **低内存** |
|
| 437 |
|
| 438 |
### 2.5 Graph Surgery:移除最终的 Resize 及以后的算子
|
| 439 |
|
| 440 |
-
>
|
| 441 |
-
>
|
| 442 |
-
>
|
| 443 |
-
>
|
| 444 |
-
> 详情见 `primary-folder/log/log-MR2-P5-s5_8_22-bottleneck-investigation.md`
|
| 445 |
-
> 的 §s5_8_22_12(独立脚本版)和 §s5_8_22_14(ArcFoundry 集成版);
|
| 446 |
-
> 算子实测对比结果(脚本 + 输出)已嵌入该 PKB 的 §s5_8_22_12 / `### After - 执行` /
|
| 447 |
-
> `2026-07-03 算子数对比验证` 章节。
|
| 448 |
|
| 449 |
#### 裁剪点
|
| 450 |
|
|
@@ -456,7 +389,7 @@ python3 tools/MODNet/verify_golden_tensor.py
|
|
| 456 |
| **图清理后净减少的节点(实测)** | **36 个**(353 → 317) |
|
| 457 |
| 裁剪版图输出 tensor | `777`(Conv_316 输出,refiner A,4ch,272×480)、`779`(Sub_318 输出,refiner b,4ch,272×480),外加 `r1o~r4o` |
|
| 458 |
|
| 459 |
-
#### 实测算子分类对比
|
| 460 |
|
| 461 |
| op_type | 原版 | 裁剪版 | Δ(原版 − 裁剪版) |
|
| 462 |
|---------|----:|-----:|------------------:|
|
|
@@ -472,8 +405,7 @@ python3 tools/MODNet/verify_golden_tensor.py
|
|
| 472 |
| Split | 10 | 9 | +1 |
|
| 473 |
| **合计** | | | **+36** |
|
| 474 |
|
| 475 |
-
> 上表只列出发生变化的 `op_type`(未变的不列出)。
|
| 476 |
-
> `2026-07-03 算子数对比验证` 章节中嵌入的脚本在 2026-07-03 实测得出,无估算。
|
| 477 |
|
| 478 |
**为什么 `Constant` 减少了 16 个?** 因为 `graph.cleanup()` 会同时清理那些原本只为
|
| 479 |
被删节点提供常量输入的 Constant 节点;而 `Shape`/`Slice`/`Concat` 的减少则来自
|
|
@@ -487,13 +419,13 @@ A(4ch,272×480) + b(4ch,272×480) 是 C++ 后处理 guided-filter 组合的输
|
|
| 487 |
|
| 488 |
## 3. 相关文档
|
| 489 |
|
| 490 |
-
|
| 491 |
-
|
| 492 |
-
-
|
| 493 |
-
-
|
| 494 |
-
-
|
| 495 |
-
-
|
| 496 |
-
-
|
| 497 |
|
| 498 |
---
|
| 499 |
|
|
@@ -519,6 +451,6 @@ Overfitting: ✓ No significant degradation, clean convergence
|
|
| 519 |
|
| 520 |
---
|
| 521 |
|
| 522 |
-
**文档版本**:1.
|
| 523 |
**最后更新**:2026-07-03 by PotterWhite
|
| 524 |
**提交历史**:通过 Git commit message 追踪
|
|
|
|
| 1 |
# MODNet 与 RVM 模型制品仓库 (Model Artifact Registry)
|
| 2 |
|
| 3 |
+
> **用途**:集中托管 MODNet 与 RVM 的模型制品(ckpt / onnx / rknn 文件本身)
|
| 4 |
+
> **不包含**:训练代码与 C++ 推理代码——这些在配套的私有仓库中维护
|
| 5 |
>
|
| 6 |
> **维护者**:PotterWhite
|
| 7 |
> **最后更新**:2026-07-03
|
|
|
|
| 16 |
- [1.2 微调模型 — 摄影数据集](#12-微调模型--摄影数据集)
|
| 17 |
- [1.3 ONNX 模型变体](#13-onnx-模型变体)
|
| 18 |
- [1.4 目录结构](#14-目录结构)
|
| 19 |
+
- [1.5 速查表](#15-速查表)
|
|
|
|
| 20 |
2. [RVM 模型](#2-rvm-模型)
|
| 21 |
- [2.1 ONNX 模型](#21-onnx-模型)
|
| 22 |
- [2.2 RKNN 模型](#22-rknn-模型)
|
|
|
|
| 209 |
**文件**:`photographic/finetune/onnx/modnet_bn_best_pureBN.onnx`
|
| 210 |
|
| 211 |
```
|
|
|
|
|
|
|
| 212 |
从 modnet_bn_best.ckpt(微调模型)导出的 ONNX
|
| 213 |
- 来源:PyTorch 微调训练(第 15 轮)
|
| 214 |
- 导出日期:2026-03-31 16:15
|
|
|
|
| 217 |
- 输入:[1, 3, 512, 512](float32,[-1, 1] 归一化)
|
| 218 |
- 输出:[1, 1, 512, 512](float32,[0, 1] 范围)
|
| 219 |
- 文件大小:25 MB
|
| 220 |
+
- 状态:⚠️ 参考用。纯 BN 变体在当前量化/部署路径上仍有数值问题,
|
| 221 |
+
**生产部署请用 §1.3.1 官方原版(带 InstanceNorm)**。
|
| 222 |
|
| 223 |
+
技术说明(仅供对比研究):
|
| 224 |
+
- 无 InstanceNormalization → 理论上是 NPU 友好
|
| 225 |
+
- 全部算子:Conv2d, BatchNorm2d, ReLU 等(硬件友好)
|
| 226 |
+
- 但实测在某些量化路径上数值偏移较大,需进一步调试
|
|
|
|
|
|
|
| 227 |
|
| 228 |
已测试环境:
|
| 229 |
- ONNX Runtime 1.16.3(CPU, x86_64)
|
|
|
|
| 286 |
|
| 287 |
---
|
| 288 |
|
| 289 |
+
### 1.5 速查表
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 290 |
|
| 291 |
| 模型 | 文件 | 大小 | 用途 | 状态 |
|
| 292 |
|------|------|------|------|------|
|
|
|
|
| 304 |
|
| 305 |
位于 `RobustVideoMatting/onnx/`。
|
| 306 |
|
| 307 |
+
| 模型 | 文件 | 大小 | 骨干网络(Backbone) | 深度导向滤波(Deep Guided Filter) | 来源 |
|
| 308 |
+
|------|------|------|----------|-----------------|------|
|
| 309 |
+
| **MobileNetV3 FP32** | `rvm_mobilenetv3_fp32.onnx` | 14.3MB | MobileNetV3 | ✓ | PeterL1n/RobustVideoMatting v1.0.0 |
|
| 310 |
+
| **MobileNetV3 FP16** | `rvm_mobilenetv3_fp16.onnx` | 7.2MB | MobileNetV3 | ✓ | FP16 导出 |
|
| 311 |
+
| **MobileNetV3 FP32** | `rvm_mobilenetv3_fp32_no_refiner.onnx` | 14.3MB | MobileNetV3 | — | 移除 Deep Guided Filter |
|
| 312 |
+
| **ResNet50 FP32** | `rvm_resnet50_fp32.onnx` | ~90MB | ResNet50 | ✓ | PeterL1n v1.0.0 |
|
| 313 |
+
| **ResNet50 FP16** | `rvm_resnet50_fp16.onnx` | ~45MB | ResNet50 | ✓ | FP16 导出 |
|
| 314 |
|
| 315 |
**关键模型属性**(MobileNetV3):
|
| 316 |
- Opset 12,IR version 6,353 个节点
|
| 317 |
- 零个 InstanceNorm 节点(NPU 友好)
|
|
|
|
| 318 |
- 6 个输入:`src [1,3,H,W]`、`r1i~r4i`(ConvGRU 状态)、`downsample_ratio [1]`
|
| 319 |
- 经 ArcFoundry `fold_constant_inputs` 处理后:5 个输入(downsample_ratio 烘焙为常量)
|
| 320 |
|
| 321 |
### 2.2 RKNN 模型
|
| 322 |
|
| 323 |
+
位于 `RobustVideoMatting/rknn/`,目标平台 RK3588 / RK3588S。
|
| 324 |
+
|
| 325 |
+
> **全部 RKNN 都已应用 no-resize graph surgery**(详见 §2.5):refiner 末尾的
|
| 326 |
+
> 2× Resize + Mul/Add/Split/Clip 链已从 NPU 图中移除,由 C++ 后处理端实现
|
| 327 |
+
> guided-filter 组合 + 上采样。下表不再单独标注 no-resize 变体。
|
| 328 |
+
|
| 329 |
+
| 模型 | 文件 | 大小 | 分辨率 | 精度 | dsr | 状态 |
|
| 330 |
+
|------|------|------|--------|------|-----|------|
|
| 331 |
+
| **1080×1920 FP16** | `rvm_mobilenetv3_fp16_1080x1920_0.25-dsr_rk3588s_20260603_rk3588_fp16.rknn` | 10.9MB | 1080×1920 | FP16 | 0.25 | 默认 |
|
| 332 |
+
| **736×1280 FP16** | `rvm_mobilenetv3_fp16_736x1280_0.5-dsr_rk3588s_20260603_rk3588_fp16.rknn` | 11.3MB | 736×1280 | FP16 | 0.5 | 较高质量 |
|
| 333 |
+
| **736×1280 FP16** | `rvm_mobilenetv3_fp16_736x1280_0.25-dsr_rk3588s_20260603_rk3588_fp16.rknn` | 9.9MB | 736×1280 | FP16 | 0.25 | — |
|
| 334 |
+
| **544×960 FP16** | `rvm_mobilenetv3_fp16_544x960_0.5-dsr_rk3588s_20260603_rk3588_fp16.rknn` | 10.3MB | 544×960 | FP16 | 0.5 | 中等质量 |
|
| 335 |
+
| **544×960 FP16** | `rvm_mobilenetv3_fp16_544x960_0.25-dsr_rk3588s_20260603_rk3588_fp16.rknn` | 9.5MB | 544×960 | FP16 | 0.25 | — |
|
| 336 |
+
| **416×736 FP16** | `rvm_mobilenetv3_fp16_416x736_0.5-dsr_rk3588s_20260603_rk3588_fp16.rknn` | 9.8MB | 416×736 | FP16 | 0.5 | — |
|
| 337 |
+
| **416×736 FP16** | `rvm_mobilenetv3_fp16_416x736_0.25-dsr_rk3588s_20260603_rk3588_fp16.rknn` | 9.3MB | 416×736 | FP16 | 0.25 | — |
|
| 338 |
+
| **320×576 FP16** | `rvm_mobilenetv3_fp16_320x576_0.5-dsr_rk3588s_20260603_rk3588_fp16.rknn` | 9.5MB | 320×576 | FP16 | 0.5 | — |
|
| 339 |
+
| **320×576 FP16** | `rvm_mobilenetv3_fp16_320x576_0.25-dsr_rk3588s_20260603_rk3588_fp16.rknn` | 9.1MB | 320×576 | FP16 | 0.25 | — |
|
| 340 |
+
| **288×512 FP16** | `rvm_mobilenetv3_fp16_288x512_0.25-dsr_rk3588s_20260603_rk3588_fp16.rknn` | 9.1MB | 288×512 | FP16 | 0.25 | 早期验证 |
|
| 341 |
+
| **256×256 FP16** | `rvm_mobilenetv3_fp16_256x256_0.25-dsr_rk3588s_20260603_rk3588_fp16.rknn` | 8.8MB | 256×256 | FP16 | 0.25 | 早期验证 |
|
| 342 |
+
|
| 343 |
+
**转换工具**:[ArcFoundry](https://github.com/PotterWhite/ArcFoundry.git) v0.15.0
|
| 344 |
- 配置目录:`ArcFoundry.git/configs/rvm/`
|
| 345 |
+
- 目标平台:RK3588 / RK3588S
|
| 346 |
- 归一化:`mean=[0,0,0], std=[255,255,255]`(RKNN 运行时执行 `/255.0`)
|
| 347 |
|
| 348 |
### 2.3 质量总结
|
| 349 |
|
| 350 |
+
> 当前批次(`rk3588s_20260603`)的板端 benchmark 正在收集中。
|
| 351 |
+
> 旧的 s14/s20/s21 数据对应的是已下线的 `rk3588` 批次,不再适用。
|
| 352 |
+
|
| 353 |
+
通用预期(基于已知的 RVM 行为规律):
|
| 354 |
+
|
| 355 |
+
- **dsr 越大,质量越好、速度越慢**(decoder 工作在 `H×dsr × W×dsr` 分辨率上)
|
| 356 |
+
- **处理分辨率越大,alpha 边缘越锐利**,但 NPU 推理时间近似线性增长
|
| 357 |
+
- 1080p 输入 + `dsr=0.25` 是速度最优档(decoder 工作在 270×480)
|
| 358 |
+
- 1080p 输入 + `dsr=0.5` 是质量最优档(decoder 工作在 540×960)—— 当前批次未提供该组合
|
| 359 |
|
| 360 |
+
> 详细 benchmark 数据待补。
|
|
|
|
|
|
|
| 361 |
|
| 362 |
### 2.4 推荐模型选择
|
| 363 |
|
| 364 |
+
> 待补。当前批次(`rk3588s_20260603`)的 benchmark 数据收集中。
|
| 365 |
+
> 一般规则:质量优先选 `dsr=0.5` 中最大处理分辨率(候选:544×960 / 736×1280),
|
| 366 |
+
> 速度优先选 `1080×1920 / dsr=0.25`,低内存选 `256×256 / dsr=0.25`。
|
| 367 |
+
> 选定后填入下表。
|
| 368 |
+
|
| 369 |
| 使用场景 | 推荐模型 | 理由 |
|
| 370 |
|----------|---------|------|
|
| 371 |
+
| **质量优先** | _(待补)_ | _(待补)_ |
|
| 372 |
+
| **速度优先** | _(待补)_ | _(待补)_ |
|
| 373 |
+
| **低内存** | _(待补)_ | _(待补)_ |
|
| 374 |
|
| 375 |
### 2.5 Graph Surgery:移除最终的 Resize 及以后的算子
|
| 376 |
|
| 377 |
+
> **本仓库全部 RKNN 模型都已应用此 graph surgery**(见 §2.2 表前的说明)。
|
| 378 |
+
> 原始 RVM ONNX 的 refiner 末尾含 2 个 `Resize` + 后续 element-wise 链(Mul、Add、
|
| 379 |
+
> Split、Clip 等),通过 ArcFoundry 的 `graph_surgery` 步骤把这些节点从 NPU 图中
|
| 380 |
+
> 移除,由 C++ 后处理端自行完成 guided-filter 组合 + 上采样。
|
|
|
|
|
|
|
|
|
|
|
|
|
| 381 |
|
| 382 |
#### 裁剪点
|
| 383 |
|
|
|
|
| 389 |
| **图清理后净减少的节点(实测)** | **36 个**(353 → 317) |
|
| 390 |
| 裁剪版图输出 tensor | `777`(Conv_316 输出,refiner A,4ch,272×480)、`779`(Sub_318 输出,refiner b,4ch,272×480),外加 `r1o~r4o` |
|
| 391 |
|
| 392 |
+
#### 实测算子分类对比
|
| 393 |
|
| 394 |
| op_type | 原版 | 裁剪版 | Δ(原版 − 裁剪版) |
|
| 395 |
|---------|----:|-----:|------------------:|
|
|
|
|
| 405 |
| Split | 10 | 9 | +1 |
|
| 406 |
| **合计** | | | **+36** |
|
| 407 |
|
| 408 |
+
> 上表只列出发生变化的 `op_type`(未变的不列出)。
|
|
|
|
| 409 |
|
| 410 |
**为什么 `Constant` 减少了 16 个?** 因为 `graph.cleanup()` 会同时清理那些原本只为
|
| 411 |
被删节点提供常量输入的 Constant 节点;而 `Shape`/`Slice`/`Concat` 的减少则来自
|
|
|
|
| 419 |
|
| 420 |
## 3. 相关文档
|
| 421 |
|
| 422 |
+
本仓库**仅托管模型制品**(ckpt / onnx / rknn 文件),不包含训练代码和 C++ 推理代码。
|
| 423 |
+
|
| 424 |
+
- 训练流程、ONNX 导出、C++ 推理、RKNN 转换等代码均在配套的私有仓库中维护
|
| 425 |
+
- 公开可见的模型来源:
|
| 426 |
+
- MODNet:作者 Google Drive(ZHKKKe/MODNet)
|
| 427 |
+
- RVM:[PeterL1n/RobustVideoMatting](https://github.com/PeterL1n/RobustVideoMatting) v1.0.0
|
| 428 |
+
- RKNN 转换 pipeline:[ArcFoundry](https://github.com/PotterWhite/ArcFoundry.git)(配置文件位于其 `configs/rvm/`)
|
| 429 |
|
| 430 |
---
|
| 431 |
|
|
|
|
| 451 |
|
| 452 |
---
|
| 453 |
|
| 454 |
+
**文档版本**:1.4
|
| 455 |
**最后更新**:2026-07-03 by PotterWhite
|
| 456 |
**提交历史**:通过 Git commit message 追踪
|