1. 程式人生 > >讀書筆記32:PoTion: Pose MoTion Representation for Action Recognition(CVPR2018)

讀書筆記32:PoTion: Pose MoTion Representation for Action Recognition(CVPR2018)

摘要首先介紹背景,很多一流的動作識別方法都依賴於two-stream的架構,一個處理appearance,另一個處理motion。接著介紹本文工作,本王呢認為將這兩個合起來考慮比較好,引入了一個新的representation,可以將semantic keypoints的movement很好的編碼,這裡面keypoint實際上就是human joint,本文的方法稱作Pose moTion,也即PoTion。本文還很罕見的通過介紹工作流程的方式介紹了模型,首先用一流的human pose estimator,抓取出每一幀human joint的heatmap(就是每一個畫素點被劃分為某一個joint的概率的heatmap),PoTion representation最終通過將這些heatmap沿時序合併起來得到,這個步驟是通過對video中的每一幀進行colorizing,然後求和得到的。這樣對整個video得到的固定尺寸的representation適合用淺層卷積網路進行分類。

摘要的第二段簡介了實驗結果,一方面是本文提出的PoTion表現超過了其他一流的pose representation;另一方面,PoTion對於標準的appearance和motion two-stream模型具有補充作用,將PoTion合併到最近提出的two-stream I3D模型中,可以在三個資料集上取得state-of-the-art的結果。

本文提出的PoTion的representation是clip level的,也就是表徵整個video資訊的。模型首先需要的就是pose estimation的heatmap,每一個這樣的heatmap表徵的是每一個畫素值被劃分為某一個joint的概率值,這樣的heatmap在本文中是使用Part Affinity Fields獲得的,這個演算法不僅能獲得每個關節的概率分佈,還能得到關節間的affinity,這個affinity表徵的是關節間是否有骨骼連線,因為得到人體姿態的估計不僅需要估計出每一個關節的位置座標,還需要估計出骨骼資訊,需要估計出肢體,這個affinity就是做這件事的,但是本文並沒有使用pairwise affinity,只使用了關節估計的heatmap。

通過Part Affinity Fields演算法,對每一幀影象都得到19個heatmap,每個肢體對應3個關節,一共四個肢體;頭上有五個關節;身體中心有一個關節。得到的heatmap的解析度是比輸入影象要低的,在本文工作中,所有的heatmap都會被rescale,使得最小的維度是64,用W和H表示寬和高,則有,此外,heatmap的數值都被限制在[0,1]了。

得到了每一個frame的heatmap之後,接著要用colorization將每一frame都按照其時間序號進行colorize,用表示t時刻的第j個關節的heatmap,其尺寸為H×W,colorize之後我們期望得到的是H×W×C的

,C可以被解釋為color channel,例如C=3就可以視作RGB三原色的三個channel。下面將color定義為C維的tuple,,對於某一個時刻t的所有的joint的heatmap都採取相同的color ,也就是color只依賴於時間。具體計算每一個color channel的方式如下,假設整個video一共T frame,那麼如果C=2,就有,而的元素值則為,x,y是空間座標值。

上圖是一個簡單的示意圖,展示了一下colorization的大體思想,也就是說將t=0的這幀標記為紅色,最後一幀標記為綠色,中間的幀就介於兩種顏色之間,連續的從紅色變成綠色,紅色和綠色具體的比例是按照線性函式計算的,即,C=2的時候,下圖左側即是示意圖

這種方法也可以推廣到任意的channel數C,方式是將T幀分為C-1個片段,第一個片段對前兩個channel使用前述的colorization方法,接著在第二個片段,對第二個和第三個channel使用同樣的方式,以此類推,C=3的時候,示意圖如上圖右側,看到這我曾有一個疑問,C大於3的時候哪有那麼多顏色用來表示,後來想想其實不是這個意思,C=2、3的時候,還有三原色可以表示,但是C多了的時候就沒有足夠多的顏色可以表示了,但是無妨,因為顏色本來就不是這個表示的本質內容,只是一個視覺化的手段,這些channel本身也並不是先天就是顏色,只是看作顏色好理解,而本質上這些channel就是用來表徵相對的時間順序的。

經過colorizing之後,就到了PoTion最後一步,即通過將colorized heatmap聚合在一起得到clip level的representation,即前面Figure1右側所示。我們的目的是獲得一個固定尺寸的表示,和video的長度無關,本文嘗試了不同的聚合方式,首先是最簡單的直接求和,得到一個C-channel的image

這個表示式會使得得到的的元素的數值大小與T有關,為了得到invariant的representation,採取的方法是將求和後的每一個channel c的數值都用所有pixel的最大值除一下,其他的normalize方式也試過,例如除以T或者除以,但是表現都差不多,這個normalize表示式如下,用表示normalize之後的C-channel image,則有

下圖第二列是這第一種聚合方式的示意圖

圖中可看出,關節隨時間的變化通過顏色表徵出來了,此外,如果某個關節在某一個地方停留時間較長,那麼此處的顏色強度值就會較大,作者認為這可能是有害的(不是很懂為什麼有害,我還以為這個能夠看出關節移動速度,是有利的呢,可能是就算不同顏色分量的成分比例是固定的,但是強度有時大有時小不好優化?看作者提出的第二種聚合方式中的normalize應該是這個意思),由此提出了第二個聚合方式,採取normalized intensity作為正則化方式。

第二種方式計算一個intensity image ,方式是將所有channel的數值加起來,也就是說是一個只有一個channel的image

上面figure3中的第三列展示的就是一個intensity image,這個image是不包含任何temporal順序資訊的,包含的是此關節在每個地方停留的時間長度。有了intensity image,通過除以強度值,便可得到正則化後的PoTion,即

是為了在intensity值較小的時候起到穩定作用,上面Figure3中的第四列就是展示的這種正則化後的image。這樣的到的representation,不同的location的重要程度都差不多了,在中,有停留或者動作緩慢位置的數值會更大一些,也就是重要程度更高一些(more weighted)。在實驗中,這三個representation都分別進行了實驗,組合也進行了實驗,最終發現將三個合在一起效果是最好的(那說明intensity表示的速度大小可能還是有用的)。

得到representation之後,要做的就是進行分類了,本文采取的分類架構是CNN,由於PoTion比普通的image少了很多紋理結構之類的資訊,因此不需要太深的網路就能很好的處理。本文采取了6層卷積加一層全連線的網路結構,如下圖所示

網路的輸入是三種PoTion representation堆疊在一起得到的tensor,這個tensor的channel數是(2C+1),兩個C指的是,而1指的是,本文網路6層卷積劃分為3個block,每個block兩個卷積層,所有卷積核大小都是3,第一層卷積的stride是1,第二層是2,因此每一個block收到的input都會比上一個block收到的空間尺寸小一半(長寬皆是如此),但在空間解析度下降的時候,模型將channel數double了一下。

本文的實驗部分探索了不同channel數的模型的表現、不同aggregation的表現,還有不同block的組合,即不同網路結構的表現,不同的block包括不同卷積層數量,每一個卷積層不同filter數量。本文介紹了每一個block包含的卷積層數量少網路不夠深(應該是說block數量不變,每一個block包含的卷積層數量不同導致了網路深度的變化),太多了認為是資料不夠,都會導致performance下降。本文還探究了pose estimation error造成的影響,具體方法是用高斯分佈將groundtruth的pose變成heatmap,然後和估計出來的對比,最終發現用groundtruth的可以提升大約4%的performance。為了體現potion的作用,本文對比了添加了potion的I3D模型等模型和不新增potion的原始模型的準確率,發現有所上升,值得注意的是,本文的方法準確率達到state-of-the-art的都是和別的模型合併起來的,單獨的表現都不行。