WavFlow:Meta 開源原始波形空間音訊生成專案

整理 facebookresearch/WavFlow 的定位、方法、安裝方式、推理入口、訓練流程和使用限制。WavFlow 嘗試繞過 latent compression,直接在 raw waveform space 中從影片和文字生成同步高保真音訊。

facebookresearch/WavFlow 是 Meta AI 發布的多模態音訊生成專案,論文標題是 WavFlow: Audio Generation in Waveform Space

專案地址:https://github.com/facebookresearch/WavFlow

它關注的不是語音合成,也不是單純的音樂生成,而是從影片和文字條件生成同步、高保真的音訊。更特別的是,它不走常見的 latent compression 路線,而是嘗試直接在 raw waveform space 裡做端到端音訊生成。

截至寫作時,GitHub 頁面顯示倉庫約有 55 star、3 fork,程式碼主要是 Python,專案沒有發布 release。倉庫 README 也明確提醒:由於組織政策限制,目前不能發布 production-trained checkpoints,團隊正在訓練基於完全開源資料的 foundation checkpoint。在那之前,使用者需要自己訓練模型。

WavFlow 想解決什麼問題

很多多模態音訊生成方法會先把音訊壓縮到 latent 空間,再在 latent 上做生成,最後還原成波形。這條路線效率高,但也會帶來一個問題:壓縮過程可能損失細節,最終音訊的質感、同步性和高頻資訊會受影響。

WavFlow 的思路是繞開這一步,直接在原始波形空間生成音訊。

README 裡提到,它透過 waveform patchifying 和 amplitude lifting,讓 flow matching 可以穩定地作用在 raw audio 上,並使用直接的 x-prediction。直白一點說,它不是先把聲音壓成某種中間表示再生成,而是把音訊波形本身切成適合模型處理的 patch,並做幅度變換,讓模型能在波形層面學習生成。

這也是它最值得關注的地方:如果端到端波形生成能穩定工作,就有機會減少編碼器/解碼器帶來的資訊瓶頸。

支援哪些輸入模式

從 README 和訓練說明看,WavFlow 面向三類輸入。

第一類是 VT2A,也就是 video + text to audio。給模型影片和文字描述,讓它生成與畫面和語義同步的音訊,比如森林、青蛙、鼓聲、滑板等場景。

第二類是 T2A,也就是 text to audio。只有文字描述,沒有影片輸入。訓練時使用 CLIP text feature,推理時 CSV 裡可以把 video_exist 設為 0

第三類是 V2A,也就是 video to audio。只有影片,沒有文字。推理時可以把 text_exist 設為 0,模型會使用 learned empty CLIP-text token。

這種設計比較實用。真實資料裡不一定每條樣本都有完整的影片、文字和音訊標註,WavFlow 用 video_existtext_exist 這類欄位把缺失模態顯式表達出來,訓練和推理都能處理不同組合。

評測和效果定位

README 提到,WavFlow 在 VGGSound 的 VT2A 任務和 AudioCaps 的 T2A 任務上進行評測,表現可以和已有 latent-based 方法相當。

這句話的意義不是說它已經全面碾壓現有模型,而是證明一件事:端到端 raw waveform generation 並不一定輸給傳統 latent 框架。至少在 acoustic richness、fidelity 和 synchronization 這些指標上,它可以達到同一檔水平。

專案頁還提供了 forest、frog、drum、skateboard 等 demo,並在專案主頁放了 24 個以上樣例和並排 benchmark 對比。對音訊生成模型來說,demo 很重要,因為文字指標很難完整描述聲音的質感、空間感和同步感。

安裝方式

官方提供了自動安裝腳本:

1
2
3
4
git clone https://github.com/facebookresearch/WavFlow.git
cd WavFlow
bash scripts/setup.sh
conda activate wavflow

scripts/setup.sh 會建立名為 wavflow 的 conda 環境,並安裝所需依賴。

如果想手動安裝,可以按 README 裡的方式:

1
2
3
4
5
conda create -n wavflow python=3.10 -y
conda activate wavflow
pip install -r requirements.txt
pip install -e . --no-deps
conda install -n wavflow -c conda-forge "ffmpeg<7" -y

這裡的 ffmpeg<7 主要是為了 torio 影片解碼。README 還說明,CLIP、Synchformer、empty-string CFG embedding 等外部權重會在首次執行時自動下載或計算,並快取到 ~/.cache/wavflow/

推理怎麼跑

由於官方暫時沒有發布 production-trained checkpoints,下面的推理入口只適用於你已經有訓練好的 checkpoint 的情況。

1
bash scripts/launch/predict.sh [--gpu N] [--config PATH]

預設配置文件是:

1
wavflow/configs/infer.yaml

輸入 CSV 由 data.csv_path 指定,支援影片、文字,或者兩者同時存在:

1
2
3
4
5
video_path,caption,video_exist,text_exist
/abs/path/sample1.mp4,a whistling rocket explodes,1,1
/abs/path/sample2.mp4,birds chirping in a forest,1,1
,a whistling rocket explodes,0,1
/abs/path/sample3.mp4,,1,0

其中 video_exist=0 表示不解碼影片,使用 learned empty CLIP/Sync tokens;text_exist=0 表示忽略 caption,使用 learned empty CLIP-text token。如果有逗號的 caption,需要加引號。

常用啟動參數包括:

1
2
3
--gpu N
--config PATH
WAVFLOW_ENV

關鍵配置項包括 model.namemodel.ckpt_pathmodel.use_emainference.duration_sectarget_sample_rateinference.cfgnum_stepsnoise_scalenoise_shiftprediction_typeseed 和輸出目錄。

EMA 的一個坑

README 特別提醒了 model.use_ema 的問題。

WavFlow 的 checkpoint 裡可能有 model_ema1,它按 ema_decay = 0.9999 更新。如果訓練只跑了幾百或幾千步,EMA 裡可能還包含大量隨機初始化值,推理時會產生噪聲。

所以,如果你只是做短跑、過擬合小樣本或 smoke test,採樣時應該考慮:

1
model.use_ema: false

或者使用訓練足夠久之後保存的 ema_epoch_*.pth。這個細節很實用,否則很容易誤以為模型壞了,其實只是 EMA 還沒穩定。

訓練流程

官方的 TRAINING.md 把訓練分成兩步。

第一步是特徵提取。

T2A 只提取 CLIP text feature;VT2A 會提取 CLIP frame feature、Synchformer feature 和 CLIP text feature。示例 CSV 大致是:

1
2
id,audio_path,video_path,caption
sample1,/abs/or/relative/wav/sample1.wav,/abs/or/relative/video/sample1.mp4,a whistling rocket explodes

影片長度需要大於等於 extraction.duration_sec,預設是 8 秒;更短的片段會被跳過。特徵提取可以這樣執行:

1
2
bash scripts/launch/extract_t2a.sh
bash scripts/launch/extract_vt2a.sh

如果要用更多 GPU 或自訂配置:

1
2
NPROC_PER_NODE=4 bash scripts/launch/extract_vt2a.sh
CONFIG_PATH=path/to/your_extract.yaml bash scripts/launch/extract_t2a.sh

第二步是訓練。

單機多卡可以用:

1
bash scripts/launch/train_single_node.sh

多節點訓練需要設定 NNODESNODE_RANKMASTER_ADDRMASTER_PORTNPROC_PER_NODE。訓練輸出包括 checkpoint_latest.pthcheckpoint_epoch_*.pthema_epoch_*.pth、生成音訊樣本和 training.log

訓練可以自動 resume:如果實驗目錄裡存在 checkpoint_latest.pth,訓練會從那裡繼續。

適合誰關注

WavFlow 更適合研究者和工程團隊關注,而不是普通使用者直接拿來做成品音效。

適合關注它的人包括:

  • 研究 video-to-audio、text-to-audio 或 multimodal audio generation 的人。
  • 想比較 raw waveform generation 和 latent-based audio generation 的團隊。
  • 需要訓練自有音訊生成模型,並能準備資料和 GPU 資源的使用者。
  • 對影片畫面和聲音同步要求高的應用團隊。
  • 想研究 flow matching 在原始音訊波形上是否可行的人。

如果你只是想找一個網頁工具,輸入 prompt 直接生成音效,WavFlow 現在不是最省事的選擇。它暫時沒有公開 production checkpoint,部署路徑也更接近研究程式碼。

使用時要注意什麼

第一,不能把它當成「下載即用」的音訊生成模型。官方目前沒有發布生產訓練 checkpoint,真正推理前需要自己訓練,或者等待後續開放資料 checkpoint。

第二,許可證不是寬鬆商用預設選項。README 說明,WavFlow 大部分程式碼採用 CC-BY-NC 4.0,部分 vendored 元件沿用 MIT、Apache 2.0、CC BY-NC 4.0 和 Stability AI Community License 等原始許可證。商業使用前要仔細讀 LICENSENOTICE.txt

第三,訓練資料很關鍵。WavFlow 的優勢建立在音訊、影片和文字對齊資料之上。如果資料品質差、caption 不準確、音畫不同步,模型很難學到穩定的聲音生成。

第四,raw waveform generation 雖然減少 latent bottleneck,但也可能帶來更高的訓練和推理成本。實際專案裡仍然要在音質、速度、顯存、採樣率和輸出時長之間取捨。

小結

WavFlow 的價值在於提出了一個清晰問題:多模態音訊生成一定要先壓縮到 latent 空間嗎?

它用 waveform patchifying、amplitude lifting 和 flow matching,嘗試直接在 raw waveform space 裡生成同步高保真音訊。評測結果說明,這條路線至少有機會和成熟的 latent-based 方法站在同一水平線上。

不過,現階段它更像一套研究和訓練框架,而不是開箱即用的產品模型。沒有公開生產 checkpoint、許可證偏非商用、訓練需要音影片文字對齊資料,這些都決定了它更適合研究、復現和二次訓練。如果你關注下一代 video-to-audio 或 text-to-audio 模型,WavFlow 值得認真看一眼。

參考資料

记录并分享
使用 Hugo 建立
主題 StackJimmy 設計