1. 程式人生 > >化秋毫為波瀾:運動放大演算法(深度學習版)

化秋毫為波瀾:運動放大演算法(深度學習版)

什麼是運動放大(Motion Magnification)?

將視訊中對應位置的運動進行放大,簡單理解的話,就是找到時間段內的運動向量,進行放大,然後權值疊加回去。

 

為什麼需要運動放大?

因為很多自然界或者生物的 subtle behaviour 不易被肉眼察覺(如飛機翼的震動,受風影響搖晃的建築,生物面板變化等等),這些微變化只有通過運動放大,才能更好地被機器或者人類來做後續的視訊視覺任務。

 

運動放大的難點?

如何在運動放大的同時,儘量保持 apperance 不變?如何不引入大量噪聲? 如何保證放大後的動作平滑?沒有現存的資料集來訓練?

 

傳統方法的發展歷程:

MIT在2012年首次提出了 Eulerian Video Magnification[1] ,第一次實時且相對魯棒地應用到一些場景,如遠端心率脈搏提取,記得多年前看到宣傳的video是非常地震撼~~因為之前做運動放大,都不是用Eulerian方法,而是用Lagrangian視角去做(即運動估計,tracking啥的,非常耗時)

問題描述如下:

\hat{I}(x,t)=f(x+(1+\alpha)\delta(t))

原始訊號 I(x,t)表示影象在位置 x 和時刻 tt的亮度值,而 \delta(t)表示運動偏差。目標就是通過調整運動放大係數 \alpha來生成放大後的訊號 \tilde{I}(x,t)

文中通過實驗發現,temporal filter可以模擬 spatial translation,故問題就簡化為 提空間特徵+設計時間維度上的濾波器。

演算法的流程如下:

1.對視訊每一幀都進行拉普拉斯金字塔處理,得到Multi-scale的邊緣及形狀描述

2. 對每個scale的特徵voxel進行pixel-wise 時間上的帶通濾波,增強感興趣頻率上的訊號,過濾掉不感興趣頻率的噪聲

3. 對filtered完的訊號進行運動放大,疊加回濾波前的特徵voxel;最後將金字塔重構融合。

Eulerian 運動放大框架[1]

 

該方法的cons:

1. 濾波器只能抑制某些頻率的噪聲,但乘以運動放大係數後,在帶通頻段的噪聲也會放大

2. 若物體本身非靜止,而在運動,該放大演算法生成的圖很模糊

故根據以上不足,後面又有兩個經典的變形:

  • 2013年MIT又提出了 Phase-based 運動放大[2],使用了complex-valued steerable pyramids 來得到相點陣圖再進行濾波,抗噪能力更強;

  • CVPR2017,Zhang et al.提出了 Acceleration Magnification[3],設計了二階加速度濾波器,使生成的視訊在 large motion 下效果更好。

 

Learning-based 運動放大[4] ECCV2018 oral

難得的好文章,不像很多文章直接設計個網路,設計個loss完事~~作者對傳統方法的每個stage認知很深,然後把深度學習只是當成一個工具,來複現改造傳統方法的每個stage。

Main Contribution:

1. 第一個使用深度學習端到端地進行運動放大,不需要手工設計特徵,從資料裡自主學到濾波器。

2. 在無現有資料集訓練的情況下,利用COCO和VOC生成資料來訓練。

3. 與傳統方法的temporal filter相相容,且在運動係數適中的情況下,效果比單獨使用全域性Learning的效果還好。

 

再看回同一條公式:\tilde{I}(x,t)=f(x+(1+\alpha)\delta(x,T))

同一個目標:通過網路來學習前後\tilde{I}(x,t)=f(x+(1+\alpha)\delta(x,T))幀( X_{a}, X_{b}的空間特徵,然後通過兩幀特徵差異來得到 \delta(x,t);接著通過對感興趣部分的運動特徵進行放大 \alpha疊加回前幀 X_{a};最後生成運動放大的後幀 \tilde{Y}(即 \tilde{I}(x,t)的集合)。整體架構如下圖所示:

整體框架圖[4]

演算法流程如下:

Stage1: 設計Encoder 進行形狀特徵和紋理特徵的提取,類比文章[1]中的拉普拉斯金字塔提取的多尺度邊緣形狀特徵。給定前後幀( X_{a}, X_{b}),通過網路 G_{e} 可以得到它們各自的形狀特徵 M_{a} , M_{b} 和紋理特徵 V_{a} , V_{b}。這裡的紋理特徵不進行運動放大,主要用於後續約束Intensity放大導致的噪聲。

Encoder[4]

 

Stage2: 把前後幀的形狀特徵送進 Manipulator,來模擬文章[1]中帶通濾波器及運動放大,權值疊加的過程。這裡的修改器 G_{m}G_{m} 有線性和非線性兩種表達:

G_{m}(M_{a},M_{b},\alpha)=M_{a}+\alpha(M_{b}-M_{a})

G_{m}(M_{a},M_{b},\alpha)=M_{a}+h(\alpha\cdot g(M_{b}-M_{a}))

而下圖網路給出的修改器網路是基於非線性表達,就是加了 g(\cdot) 和 h(\cdot) 運算,文中給出的實驗結果圖是非線性的效果更好,具體也沒解釋。個人覺得非線效能更好地模擬帶通濾波器的功能,能放大部分更感興趣的,過濾掉一部分不太感興趣的~~

Manipulator[4]

 

Stage3: Decoder,來模擬文章[1]中金字塔重構融合過程。這裡解碼器需要用到放大後的形狀特徵 M_{a}及前幀的紋理特徵 V_{a}

Decoder[4]

講完了網路結構,來說說 Loss function,共由4部分loss組成,都用L1距離來作為度量。為了讓Encoder能區分地學出形狀特徵和紋理特徵,隨機地加了color intensity擾動在某些幀上,這裡 perturbed frames 及 其運動放大的 groundtruth 分別為 X_{b}^{'} 和 Y^{'}

  • L1(Y,\tilde{Y})約束生成的運動放大圖 \tilde{Y} 與 groundtruth Y儘量一致

  • L1(V_{a},V_{b})約束前後幀的紋理表達儘量一致

  • L1(V_{b}^{'},V_{Y}^{'})約束運動放大前後的擾動幀的紋理表達儘量一致

  • L1(M_{b},M_{b}^{'})約束擾動前後的形狀表達儘量一致

故總Loss為:

Loss = L1(Y,\tilde{Y}) + \lambda(L1(V_{a},V_{b})+L1(V_{b}^{'},V_{Y}^{'})+L1(M_{b},M_{b}^{'}))

兩種不同模式 與 基於時間維度濾波的修改器:

Static mode:這是最原始的公式定義的形式,總是拿第一幀作為anchor,則送進網路的兩幀為 ( X_{0} , X_{t} )

Dynamic mode: 總是把當前幀和上一幀作為網路的輸入 ( X_{t-1}, X_{t}

Temporal filtering based manipulator:

在修改器中,不需要再進行 M_{a}M_{b} 的特徵差異運算;直接類似文章[1]中的 pixel-wise temporal filter 操作,進行時間維度的帶通濾波 (這環節不需要訓練,是在靜態或者動態模式訓練好的網路基礎上,直接接上filters前向傳播即可) 。公式如下:

G_{m},temporal(M(t),\alpha)=M(t)+\alpha\tau(M(t))

具體關於生成的資料集如何carefully designed,感興趣的同志自己找回原文看了,主要圍繞幾個因素去設計:多變的前景和背景;低對比度紋理;全域性運動;靜態場景;不同放大係數的運動;亞畫素運動 等等。

 

實驗結果:

如下圖,可見放大8倍情況下,基於學習的演算法,比Phase-based[2]的結果要少很多artifacts,也不那麼blurred

Decoder[4]

再如下圖,在不加 Temporal filter 的靜態模式下,結果也不錯,基本沒有人工的噪聲和blur;而加了 Temporal filter 後的結果更加平滑穩定。

加上Temporal Filter的效果[4]

通過視覺化encoder中的kernel可以發現,學到的形狀特徵更多是基於 Gabor-like, Laplacian-like, Corner detector-like濾波器;而紋理特徵對應的更多像blur kernel。證明設計的loss約束引導的learning是很有效很成功的~~

 

Encoder形狀核[4]
Encoder紋理核[4]

 

總結展望:

文中作者也說了,該網路一大驚喜就是,學出來的形狀特徵是呈線性的,又因為線性 temporal filter 與運動偏移是相容的,故形狀特徵也能相容 temporal filter。但是在 放大倍數很大的情況下 (如50倍),使用 temporal filter 的效果並不好,影象質量退化嚴重。

故未來方向之一是,如何使temporal filter更好地相容網路。從我個人來看,是否可以直接在manipulator 裡設計個temporal pooling的小網路來自適應地實現 temporal filter 的功能?當然啦,這樣輸入的話就很多幀,而不是 two frames 了。。。

 

Reference:

[1] Hao-Yu Wu, Eulerian Video Magnification for Revealing Subtle Changes in the World, 2012

[2]Neal Wadhwa, Phase-Based Video Motion Processing, 2013

[3]Yichao Zhang, Video Acceleration Magnification,CVPR2017

[4]Tae-Hyun Oh, Learning-based Video Motion Magnification,ECCV2018