2019 ICCV、CVPR、ICLR之視頻預測讀書筆記

2019 ICCV、CVPR、ICLR之視頻預測讀書筆記

做者 | 文永亮git

學校 | 哈爾濱工業大學(深圳)github

研究方向 | 視頻預測、時空序列預測網絡

ICCV 2019

CVP

image-20191229221510241

github地址:https://github.com/JudyYe/CVP架構

​ 這是卡耐基梅隆和facebook的一篇paper,這篇論文的關鍵在於分解實體預測再組成,咱們觀察到一個場景是由不一樣實體經歷不一樣運動組成的,因此這裏提出的方法是經過隱式預測獨立實體的將來狀態,同時推理它們之間的相互做用,並使用預測狀態來構成將來的視頻幀,從而實現了對實體分解組成的視頻預測。ide

​ 該論文使用了兩個數據集,一個是包含可能掉落的堆疊物體ShapeStacks,另外一個包含人類在體育館中進行活動的視頻Penn Action,並代表論文的方法能夠在這些不一樣的環境中進行逼真的隨機視頻預測。函數

pred1

​ 主要架構有下面三個部分組成:測試

  1. Entity Predictor(實體預測模塊): 預測每個實體表示的將來狀態ui

  2. Frame Decoder(幀解碼器): 從實體表示中解碼成frame編碼

  3. Encoder(編碼器): 把frame編碼成u做爲LSTM的cell-state獲得輸出記錄時序信息\(z^1...z^t\)spa

    (最後其實就是concat進去,見以下::)

    obj_vecs = torch.cat([pose, bbox, diff_z], dim=-1)

image-20191229151446374

模型將具備已知或者檢測到的實體位置的圖像做爲輸入。每一個實體均表示爲其位置和隱式特徵。每一個實體的表示爲\({x_n^t}^N_{n=1}\equiv\{(b_n^t,a^t_n)\}^N_{n=1}\), \(b_n^t\)表示爲預測的位置,\(a^t_n\)表示爲隱式特徵,這樣的分解方便咱們高效地預測每個實體的將來狀態,給定當前實體表示形式和採樣的潛在變量,咱們的預測模塊將在下一個時間步預測這些表示形式。咱們所學的解碼器將預測的表示組合爲表明預測的將來的圖像。在訓練期間,使用潛在編碼器模塊使用初始幀和最終幀來推斷潛在變量的分佈。

分解的思想通常都用mask來體現,就是把變化的與不變的用掩碼錶示後在組合起來,預測變化的部分,這是分而治之的思想。

\(\left\{\left(\bar{\phi}_{n}, \bar{M}_{n}\right)=g\left(a_{n}\right)\right\}_{n=1}^{N}\)表示在g的網絡結構下解碼每個實體的特徵和空間掩碼,讓\(\mathcal{W}\)表示相似Spatial Transformer Networks的空間變化網絡,能夠獲得下面的實體的特徵和掩碼\(\phi_{n}\)\(M_n\).

img
\[ \phi_{n}=\mathcal{W}\left(\bar{\phi}_{n}, b_{n}\right) ; \quad M_{n}=\mathcal{W}\left(\bar{M}_{n}, b_{n}\right) \]
經過權重掩碼和各個特徵的結合最後取平均,這樣咱們就獲得圖像級別的特徵,即每一幀的特徵,\(M_{bg}\)是常數的空間掩碼(論文取值爲0.1),其組成的特徵表示以下:
\[ \phi=\frac{\phi_{b g} \odot M_{b g} {\oplus \sum_{n} \phi_{n} \odot M_{n}}}{M_{b g}\oplus\sum_{n} M_{n}} \]
上面的公式很好理解,\(\odot\)是像素乘法,\(\oplus\)是像素加法,\(\phi_{b g} \odot M_{b g} {\oplus \sum_{n} \phi_{n} \odot M_{n}}\)這個是加權後的背景特徵與加權後的每一個實體的特徵的總和,最後除以權重和。這樣就獲得瞭解碼的結果。

編碼器的做用是把各幀\(f^0...f^T\)編碼成u,u的分佈服從標準正態分佈\(\mathcal{N}(0, I)\),因此須要拉近二者之間的KL散度,u做爲cell-state輸入LSTM獲得{\(z_t\)}表示時間序列的隱狀態。
\[ L_{e n c}=K L[q(u) \| \mathcal{N}(0, I)] \]
解碼損失就是實體表示\(\hat{x}_{n}^{t}\)通過解碼與真實圖像\(\hat{f}^{t}\)的L1損失。
\[ L_{d e c}=\sum_{t=0}^{T}\left\|\mathcal{D}\left(\left\{\hat{x}_{n}^{t}\right\}, f^{0}\right)-\hat{f}^{t}\right\|_{1} \]
預測損失即爲解碼損失加上位置損失\[\sum_{n=1}^{N}\left\|b_{n}^{t}-\hat{b}_{n}^{t}\right\|^{2}\].
\[ L_{p r e d}=\sum_{t=1}^{T}\left(\left\|\mathcal{D}\left(\left\{x_{n}^{t}\right\}, f^{0}\right)-\hat{f}^{t}\right\|_{1}+\lambda_{1} \sum_{n=1}^{N}\left\|b_{n}^{t}-\hat{b}_{n}^{t}\right\|^{2}\right) \]
其總的損失函數即三個損失的和。
\[ L=L_{d e c}+L_{p r e d}+\lambda_{2} L_{e n c} \]

Non-Local ConvLSTM

image-20191229221315961

github地址:https://github.com/xyiyy/NL-ConvLSTM (Code will be published later)

Non-Local ConvLSTM是復旦大學和b站的論文,其實這篇不太算視頻預測方向,這是使用了在ConvLSTM中使用Non-Local結合前一幀加強圖像減小視頻壓縮的僞影,是視頻壓縮的領域,可是對我有些啓發,Non-Local最初就是用於視頻分類的。

SSIM是用來評價整張圖的質量,可是對於一張質量很差的圖來講他的patch並不必定差,對於一張好圖來講他的patch也不必定好,因此做者用Non-Local來捕捉兩幀之間特徵圖間像素的類似性

image-20191215195623984

3_2

ConvLSTM能夠表示成下面的公式:
\[ \left[\mathcal{H}_{t}, \mathcal{C}_{t}\right]=\operatorname{Conv} L S T M\left(F_{t},\left[\mathcal{H}_{t-1}, \mathcal{C}_{t-1}\right]\right) \]
hidden state (\(H_t,C_t\)) 是從上一次的hidden state (\(H_{t_1},C_{t-1}\)) 和\(F_t\) 通過ConvLSTM-cell獲得的。

NL-ConvLSTM是在ConvLSTM的基礎上加了Non-local的方法,能夠表示以下:
\[ \begin{aligned} S_{t} &=N L\left(F_{t-1}, F_{t}\right) \\\left[\hat{\mathcal{H}}_{t-1}, \hat{\mathcal{C}}_{t-1}\right] &=N L W \operatorname{arp}\left(\left[\mathcal{H}_{t-1}, \mathcal{C}_{t-1}\right], S_{t}\right) \\\left[H_{t}, C_{t}\right] &=\operatorname{Conv} L S T M\left(F_{t},\left[\hat{\mathcal{H}}_{t-1}, \hat{c}_{t-1}\right]\right) \end{aligned} \]
​ 其中\(S_{t} \in \mathbb{R}^{N \times N}\)是當前幀\(F_t\) 與前一幀的\(F_{t-1}\) 的類似矩陣,這裏的Non-Local的操做是一種特殊的attention,這不是self-attention,是比較前一幀得到類似矩陣再計算attentionNLWrap操做能夠用數學表達以下:
\[ \begin{aligned} D_{t}(i, j) &=\left\|F_{t-1}(i)-F_{t}(j)\right\|_{2} \\ S_{t}(i, j) &=\frac{\exp \left(-D_{t}(i, j) / \beta\right)}{\sum_{\forall i} \exp \left(-D_{t}(i, j) / \beta\right)} \\\left[\hat{\mathcal{H}}_{t-1}, \hat{\mathcal{C}}_{t-1}\right] &=\left[\mathcal{H}_{t} \cdot S_{t}, \mathcal{C}_{t} \cdot S_{t}\right] \end{aligned} \]
這裏的公式估計論文寫錯了,我認爲是:
\[ \left[\hat{\mathcal{H}}_{t-1}, \hat{\mathcal{C}}_{t-1}\right] =\left[\mathcal{H}_{t-1} \cdot S_{t}, \mathcal{C}_{t-1} \cdot S_{t}\right] \]
可是因爲Non-local計算量太大,做者提出了兩階段的Non-Local類似度估計,即池化以後作類似度計算以下:

3_3

ICLR 2019

SAVP

image-20191229221902741

github地址:https://github.com/alexlee-gk/video_prediction

​ 當咱們與環境中的對象進行交互時,咱們能夠輕鬆地想象咱們的行爲所產生的後果:推一顆球,它會滾走;扔一個花瓶,它會碎掉。視頻預測中的主要挑戰是問題的模棱兩可,將來的發展方向彷佛有太多。就像函數的導數可以預測該值附近的走向,當咱們預測很是接近的將來時咱們可以將來可期,但是當可能性的空間超出了幾幀以後,而且該問題本質上變成了多模的,即預測就變得更多樣了。

img

img

​ 這篇把GAN和VAE都用在了視頻預測裏,其實GAN-VAE在生成方面早有人結合,只是在視頻預測中沒有人提出,其實提出的SAVP是SV2P (Stochastic Variational Video Prediction) 和SVG-LP (Stochastic Video Generation with a Learned Prior) 的結合。

SV2P網絡結構

img

​ 在訓練期間,隱變量從\(q(z_{t-1}|x_{t-1:t})\)中採樣,對每一幀的生成均可以看做是對\(\hat{x}_{t}\)的重構,\(x_t\)\({x}_{t-1}\)被Encoder編碼爲隱變量\(z_{t-1}\),前一幀\(x_{t-1}\)與隱變量\(z_{t-1}\)通過G模型以後獲得預測幀\(\hat{x}_t\)要計算與當前幀\(x_t\)\(L_1\)損失,使其生成要儘可能類似。
\[ \mathcal{L}_{1}(G, E)=\mathbb{E}_{\mathbf{x}_{0: T}\left.\mathbf{z}_{t} \sim E\left(\mathbf{x}_{t: t+1}\right)\right|_{t=0} ^{T-1}}{\left[\sum_{t=1}^{T}\left\|\mathbf{x}_{t}-G\left(\mathbf{x}_{t-1}, \mathbf{z}_{t-1}\right)\right\|_{1}\right]}. \]
​ 在測試階段咱們的隱變量從先驗分佈\(p(z_{t-1})\)直接採樣,\(z_{t-1}\)\(\tilde{x}_{t-1}\) 通過G生成下一幀的預測圖\(\hat{x}_t\) ,因此須要同時拉近\(q(z_{t-1}|x_{t-1:t})\)\(p(z_{t-1})\)的分佈,其KL散度以下:
\[ \mathcal{L}_{\mathrm{KL}}(E)=\mathbb{E}_{\mathbf{x}_{0: T}}\left[\sum_{t=1}^{T} \mathcal{D}_{\mathrm{KL}}\left(E\left(\mathbf{x}_{t-1: t}\right) \| p\left(\mathbf{z}_{t-1}\right)\right)\right] \]
​ 因此G和E的目標函數以下:
\[ G^{*}, E^{*}=\arg \min _{G, E} \lambda_{1} \mathcal{L}_{1}(G, E)+\lambda_{\mathrm{KL}} \mathcal{L}_{\mathrm{KL}}(E) \]
\(L_1\)損失並非很能反映圖像的類似度,既然文章是VAE和GAN的結合,因此在下面提出了判別器去評判圖片質量。論文指出單純的VAE更容易產生模糊圖,這裏加入的判別器是可以分辨出生成視頻序列\(\hat{x}_{1:T}\)與真實視頻序列\(x_{1:T}\),這裏是比較意想不到的地方,由於這裏沒有使用直接的圖像判別器,而是判別生成序列與真實序列,其D判別器的網絡結構是使用了3D卷積基於SNGAN的,G生成器是使用了convLSTM捕捉時空序列信息。
\[ \mathcal{L}_{\mathrm{GAN}}(G, D)=\mathbb{E}_{\mathbf{x}_{1: T}}\left[\log D\left(\mathbf{x}_{1: T}\right)\right]+\mathbb{E}_{\left.\mathbf{x}_{1: T}, \mathbf{z}_{t} \sim p\left(\mathbf{z}_{t}\right)\right)_{t=0}^{T-1}}\left[\log \left(1-D\left(G\left(\mathbf{x}_{0}, \mathbf{z}_{0: T-1}\right)\right)\right)\right] \]
​ 最後總的損失函數以下:
\[ G^{*}, E^{*}=\arg \min _{G, E} \max _{D, D^{\mathrm{ME}}} \lambda_{1} \mathcal{L}_{1}(G, E)+\lambda_{\mathrm{KL}} \mathcal{L}_{\mathrm{KL}}(E)+\mathcal{L}_{\mathrm{GAN}}(G, D)+\mathcal{L}_{\mathrm{GAN}}^{\mathrm{VAE}}\left(G, E, D^{\mathrm{VAE}}\right) \]
​ 下面是論文中的實驗結果:

img

img

CVPR 2019

MIM

image-20191229221346982

github地址:https://github.com/Yunbo426/MIM

這是清華大學的一篇paper,做者Yunbo Wang也是Eidetic 3D LSTMPredRNN++PredRNN的做者,天然時空序列的發生過程經常是非平穩( Non-Stationarity )的,在低級的非平穩體如今像素之間的空間相關性或時序性,在高層語義特徵的變化其實體如今降水預報中雷達回波的積累,形變或耗散。

image-20191229205615453

上圖是連續20幀雷達圖變化,其中白色像素表示降水機率較高。第2、第3、最後一行:經過不一樣顏色的邊框代表相應局部區域的像素值分佈、均值和標準差的變化。藍色和黃色框代表着生成的非平穩變化過程,紅色框代表了消散的過程,綠色框爲形變過程。

image-20191215225833850

左邊爲ST-LSTM(Spatio-Temporal LSTM),右邊爲加入了MIM模塊的LSTM

這篇論文的主要工做就是構造了MIM模塊代替遺忘門,其中這個模塊分爲兩部分:MIM-N(非平穩模塊),MIM-S(平穩模塊)。
image-20191229211833612

MIM-N全部的門\(g_t\)\(i_t\)\(f_t\) ,和\(o_t\)都用\(\left(\mathcal{H}_{t}^{l-1}-\mathcal{H}_{t-1}^{l-1}\right)\) 短時間記憶的隱狀態的幀差更新,由於這樣強調了非平穩變換,最後獲得特徵差\(D_t^l\)\(C^l_{t-1}\)做爲MIM-S輸入,MIM-S會根據原記憶\(C^l_{t-1}\)和特徵差\(D_t^l\)決定變化多少,若是\(D_t^l\) 很小,意味着並非非平穩變化,即變化得平穩,MIM-S很大程度會繼續沿用\(C^l_{t-1}\);若是\(D_t^l\) 很大,則會重寫記憶而且更關注於非平穩變化。

其數學表達式以下:

  1. MIM-N

\[ \begin{array}{l}{g_{t}=\tanh \left(W_{x g} *\left(\mathcal{H}_{t}^{l-1}-\mathcal{H}_{t-1}^{l-1}\right)+W_{n g} * \mathcal{N}_{t-1}^{l}+b_{g}\right.} \\ {i_{t}=\sigma\left(W_{x i} *\left(\mathcal{H}_{t}^{l-1}-\mathcal{H}_{t-1}^{l-1}\right)+W_{n i} * \mathcal{N}_{t-1}^{l}+b_{i}\right)} \\ {f_{t}=\sigma\left(W_{x f} *\left(\mathcal{H}_{t}^{l-1}-\mathcal{H}_{t-1}^{l-1}\right)+W_{n f} * \mathcal{N}_{t-1}^{l}+b_{f}\right)} \\ {\mathcal{N}_{t}^{l}=f_{t} \odot \mathcal{N}_{t-1}^{l}+i_{t} \odot g_{t}} \\ {o_{t}=\sigma\left(W_{x o} *\left(\mathcal{H}_{t}^{l-1}-\mathcal{H}_{t-1}^{l-1}\right)+W_{n o} * \mathcal{N}_{t}^{l}+b_{o}\right)} \\ {\mathcal{D}_{t}^{l}=\operatorname{MIM-N}\left(\mathcal{H}_{t}^{l-1}, \mathcal{H}_{t-1}^{l-1}, \mathcal{N}_{t-1}^{l}\right)=o_{t} \odot \tanh \left(\mathcal{N}_{t}^{l}\right)}\end{array} \]

  1. MIM-S:
    \[ \begin{array}{l}{g_{t}=\tanh \left(W_{d g} * \mathcal{D}_{t}^{l}+W_{c g} * \mathcal{C}_{t-1}^{l}+b_{g}\right)} \\ {i_{t}=\sigma\left(W_{d i} * \mathcal{D}_{t}^{l}+W_{c i} * \mathcal{C}_{t-1}^{l}+b_{i}\right)} \\ {f_{t}=\sigma\left(W_{d f} * \mathcal{D}_{t}^{l}+W_{c f} * \mathcal{C}_{t-1}^{l}+b_{f}\right)} \\ {S_{t}^{l}=f_{t} \odot \mathcal{S}_{t-1}^{l}+i_{t} \odot g_{t}} \\ {o_{t}=\sigma\left(W_{d o} * \mathcal{D}_{t}^{l}+W_{c o} * \mathcal{C}_{t-1}^{l}+W_{s o} * S_{t}^{l}+b_{o}\right)} \\ {\mathcal{T}_{t}^{l}=\operatorname{MIM-S}\left(\mathcal{D}_{t}^{l}, \mathcal{C}_{t-1}^{l}, \mathcal{S}_{t-1}^{l}\right)=o_{t} \odot \tanh \left(\mathcal{S}_{t}^{l}\right)}\end{array} \]

    這一篇的實驗作的很全面,其效果以下,均達到了state-of-the-art:

Moving Mnist

mnist2

image-20191229213739083

在數字集上的表現效果較好。

Radar Echo

image-20191215230930358

image-20191229214347599

其實能夠看到MSE在預測第五幀纔有明顯的優點,CSI-40和CSI-50其實並無明顯優點。

總結

視頻預測是結合了時空序列信息的預測,其關鍵在於如何利用時序信息,ConvLSTM就是把卷積直接與LSTM結合記錄時序信息,而在VAE相關的模型中時間序列被編碼成隱變量拼接起來。除了修改LSTM-cell的結構(e.g. MIM)或者其餘的網絡結構嘗試捕捉其餘信息,咱們常見的一種思想就是分而治之,把變與不變用掩碼區分出來,有點像我以前解讀的一篇BANet,這裏的CVP方法甚至對實體直接進行預測,這些都是比較好的想法。

相關文章
相關標籤/搜索