Files
LTX-2/docs/tasks.md
T
indigo 5594d49c76 Add char_masks preprocessing script for SCAIL-2 training (task 3.7)
scripts/process_char_masks.py turns per-sample character label-map videos/images
(integer pixel labels: 0 = environment, 1..K = characters -> binding slots) into
the pixel-space semantic-mask tensors the SCAIL training/inference path consumes:
{"mask": [K+1, F_pix, H_pix, W_pix]} (ch0 = environment switch, ch1..K = slots).

- Aligns to the target video's latent grid read from the saved latent metadata
  (F_pix=(F-1)*8+1, H*32, W*32), so char_masks/ lines up file-for-file with
  latents/ / driving_latents/ for PrecomputedDataset.
- Nearest-neighbour resize so integer labels are never blended; labels > K are
  dropped with a warning; ch0 filled uniformly with --environment-switch.
- Reuses process_videos.py helpers (naming, atomic save, VAE factors) and matches
  its typer CLI conventions.

Verified on CPU: a synthetic 2-character label map (plus an out-of-range id)
produces mask (7,17,128,128) with ch0 uniform, slots placed correctly, id>K
dropped, and feeds encode_mask_channels to the 8*(K+1)=56 channels. README +
docs/tasks.md 3.7 updated (upstream label-map generation via SAM/tracking is
dataset-specific and still out of scope).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13 09:49:25 +08:00

6.7 KiB
Raw Blame History

SCAIL-2 → LTX-2 移植任務追蹤

狀態圖例: 完成 🔄 進行中 未開始 ⏸️ 暫緩

相關計畫見 plan.md

Phase 1 — Driving 串接 item(推論期 PoC

# 任務 狀態 產出 / 備註
1.1 新增 VideoConditionByDrivingLatent + DrivingMode packages/ltx-core/src/ltx_core/conditioning/types/driving_video_cond.py,以 reference_video_cond.py 為藍本,實作 ΔW width 偏移、時間對齊 target、max_pos 防呆、token 數防呆
1.2 匯出新 conditioning 類別 conditioning/types/__init__.pyconditioning/__init__.py
1.3 免-GPU 資料流驗證腳本 序列長度、ΔW 不重疊、時間對齊、frozen denoise_mask、attention_mask=None、clear_conditioning 剝除、超界/token 數防呆 — 全通過;ruff clean
1.4 (選配)端到端 smoke run 本機 CPU-only、無 checkpoint,改用小型真實 LTXModel(隨機權重)跑 pipeline 實走路徑:create_noised_state(含 driving cond)→ modality_from_latent_state真 transformer forwardseq 160=target 80+driving 80)→ clear_conditioning(→80)。ANIMATION/REPLACEMENT 皆通過:不 crash、輸出 finite、driving frozen 且正確剝除。僅驗證整合,不評估畫質

Phase 2 — In-context mask channelcheckpoint 手術)

決策mask channel 時間編碼採忠實堆疊——每 latent 幀對應 8 個 pixel 子幀沿 channel 堆疊,8×(K+1)=56 channelLTX 時間因子 8K=6)。非 Wan 的 4×(K+1)=28。

# 任務 狀態 備註
2.1 patchify_proj 加寬(config-gated LTXModel(mask_conditioning_channels=0)>0 時 patchify_proj=Linear(in+mask, inner)。預設不變
2.2 LatentState/Modalitycond_channels 欄位 types.pymodality.pycond_channels: Tensor|None=Nonepatchified [B,T,C]);tools.clear_conditioning 裁切;helpers.modality_from_latent_state 帶入
2.3 投影前 concat/zero-pad cond_channels transformer_args.py _apply_patchify_proj:寬度不足時用 cond_channels 補齊,None 則補零
2.4 checkpoint zero-init 加寬轉換 mask_channels_checkpoint.py widen_patchify_proj_for_mask_channels:尾端補零欄,載入舊權重行為不變
2.5 VideoConditionByMaskChannels56ch mask_channels_cond.py:1 環境開關 + K=6 綁定槽 → 空間下採樣 + 時間 8× 堆疊(causal 首幀複製)=56ch,寫入尾端 driving tokentarget 保持零
2.6 token-append conditioning 延伸 cond_channels cond_channels.py extend_cond_channelsreference_video/reference_audio/driving/keyframe 皆接上
2.7 Phase 2 驗證(免訓練) verify_mask_channels.pymask=0 向後相容;zero-init 加寬 forward == baseline(任意 cond_channels);driving+mask pipeline forward 不 crash、cond_channels 形狀/placement 正確、clear_conditioning 剝除
2.8 Replacement Mode z_ref 高度位移 ΔH_ref 仍暫緩(Phase 1 divergence,需獨立 reference token group

Phase 3 — 訓練整合(ltx-trainer

決策:完整整合到 FlexibleStrategy;訓練方式 = LoRA + 解凍 patchify_proj(新 mask 欄位無法純 LoRA 訓練)。本機無 GPU/Linux/checkpoint,只做到 CPU 單元驗證,實訓需在 GPU 機器跑。

# 任務 狀態 備註
3.1 新增 Driving/MaskChannels ConditionConfig flexible.pyDrivingConditionConfig(latents_dir/mode/width_offset) + MaskChannelsConditionConfig(mask_dir/num_slots),加入 union + get_data_sources
3.2 strategy 接線 driving concat + cond_channels _apply_driving_condition(cond-first concat + ΔW width 偏移) + _build_mask_channels(重用 encode_mask_channels,寫前 N driving token) → Modality.cond_channels
3.3 model_loader + ModelConfig 支援加寬 widen_module_patchify_proj_for_mask_channels(live module zero-init) + load_transformer(mask_conditioning_channels=) + ModelConfig.mask_conditioning_channels
3.4 LoRA 模式解凍 patchify_proj trainer._unfreeze_patchify_projmask_channels>0 時把 video patchify_proj 設 trainable,讓新欄位隨 LoRA 一起訓
3.5 範例 config + docs configs/scail_animation_lora.yamlconfigs/README.mddocs/training-modes.md 表格 row
3.6 CPU 單元驗證 verify_phase3_trainer.pyconfig round-trip、prepare_training_inputs 建 cond_channels[B,T,56]、driving 前置/mask placement、widened model forward + compute_loss finite、widen helper zero-init 等價
3.7 dataset 前處理(產 driving latents + 語意 mask 🟡 char_masks/ 前處理已做:scripts/process_char_masks.pylabel-map 影片/圖 → [K+1,F_pix,H,W],對齊 target latentnearest 保留整數 labelch0 環境開關)。driving_latents/ 沿用既有 process_videos.pydriving 影片走 video latent 路徑,同 target 形狀)。仍缺:從原始影片產生 label-map 的分割/追蹤步驟(SAM 等,資料集特定,未含)
3.8 validation runner 接 driving/mask 驗證期取樣尚未接 SCAIL 條件(config 內 validation 先停用),與 Phase 4 一起
3.9 實機訓練跑通 需 Linux + GPU + checkpoint,本機無法

Phase 4 — Pipeline + CLI

# 任務 狀態 備註
4.1 configurator 讀 mask_conditioning_channels LTXModelConfigurator 兩分支 config.get("mask_conditioning_channels",0) → SCAIL checkpoint 自描述、載入自動加寬(不需 runtime widen wrapper
4.2 ScailAnimationPipeline + build_scail_conditionings scail_animation.py:仿 distilled.py 兩階段,注入 SCAIL driving+mask conditioningbuild_scail_conditionings 為可測純函式;load_masks helper
4.3 scail_animation_arg_parser + main() utils/args.py:在 default_2_stage_distilled_arg_parser 上加 --driving-video/--mask-path/--mode/--driving-strength
4.4 CPU 驗證 + docs verify_phase4_pipeline.pyimport、CLI round-trip、conditioning assembly(driving append + mask 在尾端)、configurator 自描述加寬;ltx-pipelines/CLAUDE.md pipeline 表格 row
4.5 實機端到端跑通 需 GPU + SCAIL-trained checkpoint(含 mask_conditioning_channels config + 訓練好的 patchify_proj + LoRA

決議紀錄

  • 範圍:先只做 Phase 1(推論期 PoC)。Phase 2+ 待 Phase 1 驗證後再討論。
  • 架構前提SCAIL-2 建構於 Wan 2.1,本移植為跨架構移植。