(學習筆記)An Uncertain future: forecasting from static images using variational autoencoders

最近在看這篇關於視頻生成的論文,看之前google了一下沒有找到有關的中文導讀或翻譯,所以既然要做筆記,就乾脆寫在這裏好了,然鵝本人水平有限,有可能會產生誤導,這篇blog只作討論。

這篇論文的目的可以歸爲:event/action detection & visual activity forecast。

理想下,模型可以輸入一張靜態圖片,輸出對圖片中的目標semantic動作的預測,這裏的semantic就是指以人的角度怎麼看,模型就應該怎麼預測,比如攝影師抓到了一張照片:熊孩子在街上跑,摔了,那麼我們看到熊孩子摔倒瞬間的圖片時,第一反應應該是熊孩子往前倒了,所以模型讀到這張圖片,應該輸出下一時刻的一系列幀應該是熊孩子趴在地上了。也就是說,輸入模型的是目標前傾的照片,輸出是一系列接下來的動作的預測圖像。然而現有技術還不支持輸出如此規模的輸出,算一下,如果一張320*240的圖片30fps,那麼即使半秒的輸出維度也達到了1.15×1061.15\times 10^6。所以本文采用通過靜態圖片生成接下來圖片目標的運動的dense trajectory 利用軌跡來預測目標的運動。

簡單說,dense trajectory就是圖像中興趣點隨時間變化的描述,下一時刻興趣點的位置等於這一時刻位置加上dense trajectory在這一時刻的分佈。原理這篇講的非常可以https://zhuanlan.zhihu.com/p/27528934

現有方法分爲兩種,一種是以像素爲單位展開的方法,非semantic,非監督,可以說非常的atomic,所以這種方法本身需要非常大的計算量;另一種方法就是使用機器學習,現有方法主要有兩種,一種是agent-based,導致其在空間上的預測受限;另一種是利用optical flow,但在時間上受限。總之就是這篇論文的方法比較好,它基於第二種機器學習的方法,它厲害在:首先它不需要人工標註;其次它預測時間很長,長達一秒,不要小看這一秒,剛纔我們計算過半秒的數據量;並且它的輸出可以包含所有可能的預測。

對於一張圖片,目標可能的動作實際上有很多,比如正在深蹲的小哥,他站起來和蹲下的動作在中間位置的圖片差異可能會非常小,那麼這就產生了一個問題,我們輸入非常相似的一張圖片的時候我們要求可能的輸出結果不只一個。深度神經網絡實際上做的是對函數的擬合,那也就決定了它對於同一個輸入不可能做到不同的輸出,即使有細微差異導致不同的輸出也需要模型有超大的capacity,這點很難做到。因此,文章利用的生成模型variational autoencoder (VAE),也就是採樣latent space(通常是高維高斯分佈)將其映射至輸出模型的分佈。但是問題來了,對於不同的圖片的預測一定是不同的,所以聰明的作者想到了將圖片作爲先驗條件,再對latent space採樣以概率的形式產生輸出的方法。下面來講一下作者怎麼做到這件事的,先看一下模型的結構。
模型
來推導一下數學公式,經過推導我們會發現推導的結果和作者給出的模型圖是一樣一樣的。

我們本來的目的是想得到p(YX)p(Y|X),但由於剛纔的解釋我們無法直接得到,所以我們希望利用p(YX,z)p(Y|X,z)去近似,即Y=μ(X,z)+ϵY=\mu(X,z)+\epsilon,爲了生成方便,我們希望(z,ϵ)N(0,1)(z,\epsilon)~N(0,1)

根據bayes,p(YX,z)=p(zX,Y)×p(YX)p(zX)p(Y|X,z)=\frac{p(z|X,Y)\times p(Y|X)}{p(z|X)}
log p(YX,z)=log p(zX,Y)+log p(YX)log p(zX)log\ p(Y|X,z)=log\ p(z|X,Y)+log\ p(Y|X)-log\ p(z|X),
爲了生成模型,引入q(z):logp(YX)Ez Q[log q(z)log p(ziXi,Yi)]=Ez Q[log p(YiXi,z)+log p(zixi)log q(z)]log p(Y|X)-E_{z~Q}[log\ q(z)-log\ p(zi|Xi,Yi)]=E_{z~Q}[log\ p(Yi|Xi,z)+log\ p(zi|xi)-log\ q(z)]

分析一下,上面公式LHS第二項是XY下生成z先驗分佈的KL divergence,如果我們可以將其縮減至0的話,就可以直接逼近p(Y|X),事實上,我們完全可以將KL divergence加入目標函數來使其降至接近0(因爲Q的結構可以做到capacity很大),這也吻合了VAE的特點,當Y未給出時,z與X無相關性,可以與第三項消掉,那麼就達到了testing時p(YX,z)=p(YX)p(Y|X,z)=p(Y|X)的目的。而訓練時,對KL的縮小既促進了逼近,又提升了log p(YX)log\ p(Y|X)。所以在implementation時,用decoder(CNN)來近似p(YX,z)p(Y|X,z)(reparameterization)使其tractable就大功告成了。

在實現上,分別有三個tower來解決相應的問題。首先是image tower,實際上是比AlexNet更深的CNN,用來對圖像作特徵提取;encode tower,也是CNN,輸入是將後續視頻提取的dense trajectory與image tower提取到的特徵進行concatenation,輸出八對圖片分別作爲均值和標準差,這個在測試階段就會分別接近0和1了,主要是拿來逼近p(z|X,Y);decoder tower實際上也是CNN,輸入是image tower和encoder tower的輸出相乘,輸出預測的dense trajectory,用來近似p(Y|X,z)。

這裏注意幾個細節,首先目標函數是
L(X,Y)=YnormY^norm2+MxMx^+MyMy^+KL[Q(zX,Y)N(0,1)]L(X,Y)=||Y_{norm}-\hat{Y}_{norm}||^2+||M_x-\hat{M_x}||+||M_y-\hat{M_y}||+KL[Q(z|X,Y)||N(0,1)]
他們這樣做的原因是他們發現把dense trajectory normalize之後拆分成圖和全局magnitude兩部分會收斂的快,而最後一項就是VAE經典的KL divergence。

其次,模型的輸出實際上是16*20的圖,是原圖的112\frac{1}{12},原文說是十六分之一,這裏我不知道是我算錯了還是什麼情況。。

在label的處理上他們使用的是與action recognition with improved trajectory一樣的方法,這個方法的原理來源於dense trajectory and motion boundary descriptors for action recognition,都是爲了得到T=(ΔPt,ΔPt+1,...)ΔPiT=\frac{(\Delta P_t,\Delta P_{t+1},...)}{\sum \Delta P_i},最大的不同在於這篇文章使用了SURF和optical flow descriptor結合的方式進行interesting points的採集並使用了RANSAC進行camera motion的過濾,說白了就是防手抖。從文章decoder tower的輸出層數來看,他們提取了每一張圖片後1s內的5幀進行處理得到dense trajectory(分爲x、y兩個方向);另外,他們分別針對得到的dense trajectory的x和y方向上的偏移分別進行了離散餘弦變換壓縮。(這裏實際上看的不是很清楚)

對於升採樣,他們把得到的輸出與decoder不同的conv layer concatenate在一起,再經過decoder的最後一層輸出出來。

在評估中,他們選用了比較直觀的Euclidean distance,因爲log likelihood不好解釋,他們對比了不用VAE直接用regressor和利用optical flow兩種方法,在預測ED上效果拔羣!文章的圖片中還展示了,沿着z採樣會生成從正確到正確相反的預測,但都是可能的預測。

最後,他們還利用他們的模型(image tower)進行了representation learning的評估,經過一些fine-tune之後,很驚喜的發現他們的模型對目標檢測的能力也超過了目前的unsuperised learning model。

參考
http://people.csail.mit.edu/torralba/publications/evt_pred_eccv2010.pdf
http://vision.cs.utexas.edu/aavl_workshop_eccv16/papers/AAVL_PID14.pdf
https://www.cvfoundation.org/openaccess/content_iccv_2013/papers/Wang_Action_Recognition_with_2013_ICCV_paper.pdf
https://www.cvfoundation.org/openaccess/content_iccv_2015/papers/Eigen_Predicting_Depth_Surface_ICCV_2015_paper.pdf
https://hal.inria.fr/hal-00725627v2/document
https://blog.csdn.net/ecnu18918079120/article/details/78195792
https://blog.csdn.net/shenziheng1/article/details/52965104
https://blog.csdn.net/u011835903/article/details/77848011
https://blog.csdn.net/zyh821351004/article/details/47206297

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章