CLEAR(Context-Aware Learning with End-to-End Mask-Free Inference for Adaptive Video Subtitle Removal) 远端部署总结

目标:在远端服务器上尝试复制 CLEAR 仓库并尝试部署测试(暂不进行训练)。

测试步骤:

  • 考虑人为给一个视频添加硬字幕,然后测试去除效果。

  • 考虑选取一个有字幕的短视频测试去除效果。

一、环境配置:

项目 最终配置
系统 Ubuntu 22.04
GPU RTX 4090D 24GB
Python 3.12.3
PyTorch 2.8.0+cu128
CUDA 12.8
transformers 4.49.0
diffusers 0.32.2
huggingface_hub 0.36.2
DiffSynth 1.1.8,对应历史 commit ed256ef
CLEAR 基座 Wan2.1-Fun-V1.1-1.3B-Control(CLEAR github项目中README中的基座环境有误)
CLEAR LoRA CLEAR-mask-free-subtitle-removal.pt

二、部署流程

2.1 租用并登录远端服务器

先评估硬件要求,在 AutoDL 里面找一个实例购买。

注意自带的 pytorch 和 CUDA 版本。

屏幕截图 2026-09-18 171322

先用无卡模式打开机子(可以省点钱,但是仅可用于轻量文件操作,不建议用于依赖导入/环境验证),然后用VScode去登录。

在 VS Code 里面 ctrl+shift+P 打开 SSH 界面,创建一个新的SSH之后输入密码即可。登录后界面如下。

屏幕截图 2026-09-18 171909

项目、大模型、数据等全部尽量放:

/root/autodl-tmp/

而不要大量放在:

/root/

原因是 AutoDL 系统盘较小,大模型很容易把系统盘塞满。

2.2 基础环境的获取

机子已经配置了一些环境, 我们需要在文件夹中激活这些环境。

创建一个名为 clear312 的环境,克隆Pytorch并且激活:

conda create -n clear312 --clone base
conda activate clear312

验证环境是否配好代码:

python --version

python - <<'PY'
import torch
print(torch.__version__)
print(torch.version.cuda)
print(torch.cuda.is_available())
print(torch.cuda.get_device_name())
PY

配置好后会得到:

2.8.0+cu128
12.8
True
NVIDIA GeForce RTX 4090 D

2.3 克隆CLEAR仓库

两种方式。

  • 第一种:直接把github仓库 git clone下来
git clone https://github.com/silent-commit/CLEAR.git /root/autodl-tmp/CLEAR
cd /root/autodl-tmp/CLEAR

git clone 后面跟着 github 仓库地址

cd 指你要把这个仓库克隆到哪里去

  • 第二种:把 github 仓库本地下下来再传上去

比较垃圾比较慢,但是有时候服务器抽风只能这么搞了。

2.4 安装 CLEAR 依赖

在CLEAR文件夹中执行:

pip install -r requirements.txt

这句话指的是根据 requirements.txt 这个文档pip安装所需要的库或者环境。

注意,不要以为所有的环境都是越新越好,因为有些新版本已经不兼容论文代码了,会出错。

*安装正确版本的 DiffSynth

# 2. 下载 DiffSynth-Studio 源码
cd /root/autodl-tmp
git -c http.version=HTTP/1.1 clone \
https://github.com/modelscope/DiffSynth-Studio.git
cd DiffSynth-Studio
# 3. 切换到 CLEAR 所需要的旧版本
git checkout ed256ef
# 4. 安装这个版本 DiffSynth 的依赖
python -m pip install -r requirements.txt
# 5. 强制固定 CLEAR 已验证兼容的关键版本
python -m pip install \
"transformers==4.49.0" \
"diffusers==0.32.2"
# 6. 把当前这个旧版 DiffSynth 安装进 Python 环境
python -m pip install -e . --no-deps


# 7. 验证代码
python - <<'PY'
import transformers
import diffusers
import huggingface_hub

print("transformers:", transformers.__version__)
print("diffusers:", diffusers.__version__)
print("huggingface_hub:", huggingface_hub.__version__)

from transformers.modeling_utils import PretrainedConfig, PreTrainedModel
print("Transformers compatibility OK")

from diffsynth import load_state_dict
from diffsynth.pipelines.wan_video_new import WanVideoPipeline, ModelConfig
print("DiffSynth + wan_video_new import OK")
PY

注意到 CLEAR 对最新版的不兼容,我们需要把这个插件降级到 CLEAR 适用版本。

2.5 修改线程为 \(0\) 的问题

似乎服务器启动后线程会被默认为 \(0\) ,但是 OpenMP 规定线程要正整数,所以顺手最好改成 \(8\) 并持久化。

echo 'export OMP_NUM_THREADS=8' >> ~/.bashrc

2.6 预先部署——下载作者的 checkpoints

为了直接可以使用测试,可以直接下载好作者预先训练的一个小checkpoints,这样子暂时不用重训。

cd /root/autodl-tmp/CLEAR

hf download charlesw09/CLEAR-mask-free-video-subtitle-removal \
  CLEAR-mask-free-subtitle-removal.pt \
  --local-dir ./checkpoints

*2.7 安装 Wan 基座模型

mkdir -p /root/autodl-tmp/models/Wan2.1-Fun-V1.1-1.3B-Control

cd /root/autodl-tmp/models

先下载三个主要模型文件:

hf download alibaba-pai/Wan2.1-Fun-V1.1-1.3B-Control \
  diffusion_pytorch_model.safetensors \
  models_t5_umt5-xxl-enc-bf16.pth \
  Wan2.1_VAE.pth \
  --local-dir /root/autodl-tmp/models/Wan2.1-Fun-V1.1-1.3B-Control

再下载 tokenizer:

hf download alibaba-pai/Wan2.1-Fun-V1.1-1.3B-Control \
  --include "google/*" \
  --local-dir /root/autodl-tmp/models/Wan2.1-Fun-V1.1-1.3B-Control

最终检查:

ls -lh /root/autodl-tmp/models/Wan2.1-Fun-V1.1-1.3B-Control

应该至少看到:

Wan2.1-Fun-V1.1-1.3B-Control/
├── diffusion_pytorch_model.safetensors
├── models_t5_umt5-xxl-enc-bf16.pth
├── Wan2.1_VAE.pth
└── google/
    └── umt5-xxl/
*注意 CLEAR 仓库中 README.md 的下载示例容易产生误解,我一开始就装错了,到后面爆了张量维度 \(-16\) 失败才发现。CLEAR 的文档容易让人把普通 Wan2.1-T2V-1.3B 当成基座,但 CLEAR 实际运行需要 Wan2.1-Fun-V1.1-1.3B-Control。两者的 T5/VAE/tokenizer 可以兼容复用,但核心 DiT 的输入结构不同,因此错误直到推理阶段才以张量维度异常的形式暴露出来。这是昨天复现过程中我踩到的最大的坑。

*2.8 安装视频工具(+人为添加硬字幕)

软字幕:****是视频文件里单独存在的一条字幕轨道,例如播放器可以开关,这种字幕不是完全覆盖视频画面的,不适用 CLEAR 场景。

硬字幕:已经则是字幕已经被画进每一帧图像,更难去除。

下载 ffmpeg

apt-get update
apt-get install -y ffmpeg fonts-dejavu-core

目的:在一个 \(3 \sim 5\) 秒的 \(480p/720p\) 视频(\(>81 frames\))人为添加字幕。

  • 截取从 \(8\) 秒开始的 \(5s\)
ffmpeg \
  -ss 00:00:08 \
  -i /root/autodl-tmp/test_videos/source.mp4 \
  -t 5 \
  -an \
  -c:v libx264 \
  -crf 18 \
  /root/autodl-tmp/test_videos/test_clean.mp4
  • 测试字体是否存在
ls /usr/share/fonts/truetype/dejavu/DejaVuSans.ttf
  • 例:人为添加字幕
ffmpeg \
  -i /root/autodl-tmp/test_videos/test_clean.mp4 \
  -vf "\
drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf:text='Where are you going?':fontcolor=white:fontsize=28:borderw=2:bordercolor=black:x=(w-text_w)/2:y=h-text_h-25:enable='between(t,0,1.7)',\
drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf:text='I am going outside.':fontcolor=white:fontsize=28:borderw=2:bordercolor=black:x=(w-text_w)/2:y=h-text_h-25:enable='between(t,1.7,3.4)',\
drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf:text='The weather is beautiful today.':fontcolor=white:fontsize=28:borderw=2:bordercolor=black:x=(w-text_w)/2:y=h-text_h-25:enable='between(t,3.4,5.0)'" \
  -c:v libx264 \
  -crf 18 \
  -an \
  /root/autodl-tmp/test_videos/test_sub.mp4

2.9 正式启动测试

tmux new -s clearinfer


conda activate clear312
cd /root/autodl-tmp/CLEAR


export OMP_NUM_THREADS=8

export MODEL_BASE_PATH=\
/root/autodl-tmp/models/Wan2.1-Fun-V1.1-1.3B-Control

export LORA_CHECKPOINT=\
/root/autodl-tmp/CLEAR/checkpoints/CLEAR-mask-free-subtitle-removal.pt

bash scripts/inference.sh \
  /root/autodl-tmp/test_videos/test_sub.mp4 \
  /root/autodl-tmp/results/test14

三、测试结果

  • 人为烧入硬字幕 再使用 CLEAR 进行去除效果:

    视频参数:$ 640 \times 360 $,\(120\) 帧。用时 24.90 s 完成擦除

    当前官方部署已经成功,但这次 120 帧视频的 sliding-window 推理最终仅输出了 81 帧。后续如果需要正式处理长视频,需要进一步检查 sliding-window。

屏幕截图 2026-09-20 143440

  • 直接使用 CLEAR 擦除源文件就有硬字幕的视频:

    视频参数:$ 640 \times 360 $,\(81\) 帧。总推理时间:16.90 s。

屏幕截图 2026-09-20 150121

自我评估:使用默认参数情况下, CLEAR 确实可以做到擦除字幕且大体保留视频的完整性与画面的适配,但是在局部细节方面还是不能做到很好的完美擦除,例如第二次测试中,左侧男士的手还原效果不是非常理想。

第一次人工添加硬字幕且没有黑色底幕背景情况下擦除效果远优于第二次,但是两次擦除都对颜色对比度造成了肉眼可见的影响。

四、常见问题

问题 原因 最终解决
Python import 时直接 Killed AutoDL 无 GPU 模式实际 cgroup 内存只有 2GB 回到正常 GPU 实例
自建 Python3.10 环境没有 torch 新 Conda 环境为空 conda create -n clear312 --clone base
pip install diffsynth 找不到 wan_video_new PyPI / 新版 DiffSynth API 已变化 GitHub DiffSynth + commit ed256ef
DiffSynth main 没有需要的旧接口 上游代码发生变化 checkout 历史 commit
sentencepiece pip install -e . --no-deps 没装依赖 安装 DiffSynth requirements
PretrainedConfig ImportError transformers 5.17 太新 固定 transformers 4.49.0
diffusers / hub 依赖冲突 diffusers 0.40 太新 固定 diffusers 0.32.2
OMP_NUM_THREADS warning 环境变量为 0 设置为 8
Hugging Face timeout AutoDL 到 HF 网络不稳定 network_turbo / hf-mirror
Xet 401 Unauthorized hf-xet 请求 xethub HF_HUB_DISABLE_XET=1
SSH 断开下载停止 程序直接挂在 SSH 前台 使用 tmux;hf 下载可续传
negative dimension -16 错用了普通 Wan2.1-T2V 改成 Wan2.1-Fun Control DiT
ffmpeg: command not found 镜像未安装 ffmpeg apt 安装
tmux: command not found 镜像未安装 tmux apt 安装
120 帧只输出 81 帧 尚未定位 后续检查 sliding-window 实现
posted @ 2026-09-20 16:21  Finale_Start  阅读(8)  评论(0)    收藏  举报