# 【論文筆記】Conditional Image-to-Video Generation with Latent Flow Diffusion Models 論文連結:https://arxiv.org/abs/2303.13744 發表於 CVPR 2023 ## Overview Conditional image-to-video generation (cI2V) 的目標是利用給定的一張 image 和某個條件來生成一段影片,例如給定一張人臉圖片和條件「生氣」,生成一段這個人臉生氣的影片。這個任務困難之處在於需要同時處理空間與時間兩個面向。 本篇研究提出一個新的架構來進行 conditional image-to-video generation。作者不選擇直接生成影片的一整個 frame,而是提出使用 latent flow diffusion model (LFDM) 來生成 optical flow,再和給定的 image 進行 warping 得到影片。這樣的作法因為將空間與時間上的資訊分開處理,因此他們提出的 LFDM 比起 SOTA 方法有更好的生成結果。 下圖為一些生成的例子,每一個例子的第二排是使用 LFDM 生成的 optical flow,第一排則是最終得到的影片。  ## Methods ### Training 訓練分成兩個階段,分別處理空間與時間上的資訊,第一階段訓練一個 latent flow auto-encoder,第二階段則是訓練一個 diffusion model 來生成 latent flow sequence。 #### Stage 1  第一階段的目標是訓練一個 latent flow auto-encoder,估計 reference frame 和 driving frame 兩個 frame 之間的 latent flow 後,利用 reference frame 和 latent flow 重建出 driving frame。 總共有三塊需要訓練的模組,分別是 encoder、decoder 和 flow predictor。訓練的時候,首先隨機選取同一部影片的兩個不同的 frame,分別當作 reference frame 和 driving frame。接著把 reference frame 輸入 encoder 得到 latent $z$,兩個 frame 都輸入 flow predictor 得到 flow $f$,$f$ 的 spatial size 和 latent $z$ 相同,用來準備和 latent $z$ 進行 warping。 然而如果只使用 $f$ 進行 warping,可能不足夠生成 driving frame 的 latent map,因為影片的中不同的 frame 可能出現遮擋的位置並不會完全相同,在 reference frame 中被遮擋的部分是無法單靠 warping 生成出來的。因此作者參考了[過往研究](https://arxiv.org/pdf/2003.00196.pdf),讓 flow predictor 同時也輸出 occlusion map $m$,$m$ 數值範圍在 [0, 1] 之間,0 表示完全受遮擋,1 表示完全沒有受到遮擋,最終在 latent space 進行 warping 的過程為: $$ \widetilde{z} = m \odot \mathcal{W}(z, f) $$ 其中 $\mathcal{W}$ 表示進行 (backward) warping,$\odot$ 表示進行 element-wise multiplication。 Decoder 最後根據 latent map $\widetilde{z}$ 的資訊生成 image,輸出應該和 driving frame 越像越好,因此這裡使用到的 loss funcion 為 $$ L_\text{LFAE} = \mathcal{L}_\text{rec}(\hat{x}_\text{out}, x_\text{dri}) $$ Reconstruction loss $\mathcal{L}_\text{rec}$ 使用的是基於 pretrained VGG network 的 perceptual loss。 模型架構的選擇上,encoder 和 decoder 都選擇使用 CNN 架構,flow predictor 則是使用 [MRAA](https://arxiv.org/pdf/2104.11280.pdf) 架構,用來輸出 latent flow 和 occlusion map。 #### Stage 2  第二階段訓練 3D-UNet-based diffusion model 來生成在時間線上有連貫性的 latent flow sequences。給定一段 input video,利用在第一階段 pre-trained 的 flow predictor 得到每一個 frame 和初始 frame 之間的 latent flow $\mathrm{f}_1^k$ 和 occlusion map $\mathrm{m}_1^k$,將 $\mathrm{f}_1^k$ 和 $\mathrm{m}_1^k$ 沿著 channel dimension concatenate 在一起得到 $s_0$,作為 diffusion model 學習的對象。Diffusion model 的 condition 則包含第一個 frame $x_0$ 以及 class condition $y$,分別會先通過 pre-trained encoder 以及 pre-trained BERT 模型得到 embedding 後輸入給 diffusion model,讓模型以 diffusion objective function $$ \mathrm{L}_\text{DM} = \mathbb{E}_{t \sim \mathcal{U}(1, T), s_0 \sim q(s_0), \epsilon \sim \mathcal{N}(0, 1)} [|| \epsilon - \epsilon_\theta (s_t, t, z_0, e)||^2] $$ 學習預測每一個 time step 的 noise。 ### Inference Inference 的流程如下圖所示:  將 image $x_0$ 輸入 encoder 得到 latent map $z_0$, class condition $y$ 輸入 BERT 模型得到 embedding $e$,將 $z_0$ 和 $e$ 作為 condition,透過訓練好的 diffusion model 生成出 latent flow sequence 和 occlusion map sequence。接著對於每一個 frame,都和 $z_0$ 做 warping,我們可以得到對應每一個 frame 的 latent maps,最後輸入 decoder 生成輸出 video 的每一個 frame。 ## Experiments ### Dataset and Metrics 實驗中使用到的資料集包含: 1. MUG:facial expression dataset(臉部表情資料集) 2. MHAD:human action dataset(人物動作資料集) 3. NATOPS:aircraft handling signal dataset(機場地勤手勢資料集) 在結果中使用到的以下一些特殊指標: 1. FVD:和 FID 的概念類似,FVD 是利用 pretrained I3D 模型得到真實和生成影片的 feature representations,並計算 features 之間的 Frechet distance 2. class conditional FVD (cFVD):某個特定 class condition 的 FVD 3. subject conditional FVD (sFVD):某個特定 image 作為 condition 的 FVD ### Comparisons 下表比較 LFDM 和其他 cI2V 方法的結果,其中 ImaGINator 是一個 GAN-based 的方法,VDM 為 video diffusion model,LDM 則 image latent diffusion model 的變形,將原始 LDM 當中的 2D U-Net 以 3D U-Net 代替,變成生成 video。從表中可以看到,不論 resolution 是 64x64 或 128x128,LFDM 都能夠在各種 datasets 上有更好的 FVD 分數。  下圖是一些不同方法生成的影片結果,可以看到其他方法在細節的生成上能理比較差,作者指出說這是因為其他方法並沒有分開處理空間和時間上的資訊。  ## Limitations LFDM 在目前的架構下仍然有一些限制: 1. 只能生成的單一物體的影片 2. 給定的條件是 class condition 而非自然語言 3. 和 GAN-based 模型比起來速度慢
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up