最近看了兩篇 Video-based 的 ReID 文章,做下筆記簡單對比下:
第一篇CVPR2018 [1]:先對每幀的深度特徵進行 空間Attention,讓網路自主發現對分類任務更有幫助的人體parts;然後對每Part各自進行多幀 時間Attention,讓網路自動評價每幀中的parts特徵的質量好壞(如下圖最後一行 SK,網路關注的part=黑色小包包區域,對於第1幀,全被遮擋,質量權值為0)
第二篇AAAI2019 [2]:Refining Recurrent Unit (RRU) 對多幀的歷史特徵,進行時空交互提煉更新,輸出更新後的多幀特徵; Spatial-Temporal clues Integration Module (STIM) 對多幀特徵進行時空卷積整合。
不得不說,繼17年18年單幀ReID後,現在基於視頻的ReID陸陸續續火起來。什麼叫火?就是演算法不需要特別大的創新,針對視頻特性來解決單幀中難以解決的問題,最後性能超SOTA,就可以發頂會了~~哈哈,純屬娛樂,火應該定義為當下對學術界有研究意義,而對工業界產品預研方向起到作用的topic。
-----------------------------------------------------------------
演算法流程:
1.首先類似TSN對視頻進行下採樣,得到 N 幀。
2. 對每幀進行 Multiple Spatial Attention , 得到 K 個attention於不同parts 且 part間重疊盡量少的特徵圖。
3.對每個part類別中的N個特徵圖進行 temporal attention,權值疊加。
4.最後把K個part特徵 Concat 起來,進行分類。
那麼問題來了,怎麼才能讓網路自主去關注 multiple spatial attention parts?當然可以使用輔助監督的方法,比如給定人體某些 keypoint 對應的熱圖,來讓網路刻意學對應的區域特徵。文中作者使用的是無監督的方法,訓練 multiple attention model 去關注 multiple parts,具體的網路模塊如下:
既然每個Spatial Attention Model都是相同的架構(Conv+ReLU+Conv+Softmax),怎麼才能保證每個model訓練出來關注不同的 parts?這就是本文的 main contribution:使用 Diversity Regularization 來約束不同model出來的Attention map感受野重疊的部分盡量小,即IoU盡量小。作者發現使用 Kullback-Leibler divergence 訓練起來可能不穩定,因為有 log()項 會使Softmax出來的大部分小值更小;故最後使用 Hellinger distance 作為度量來約束,即最大化model出來的Attention maps的 Hellinger distance。
假定models個數=6,即希望關注6個不同parts (knee, hip, foot, arm, neck, waist),加上Diversity Regularization後效果如下:
對於 Temporal Attention 也是簡單的 softmax of a linear response function 即可。
總結:
最後再反觀來看,文中的主思路更像是在 tracking 特定 parts 的時空特徵,而由於每幀中人的姿態不同,受遮擋程度不同,如何給時空中元素打分,就純靠網路學習得來。更進一步來說,multiple attention model+diversity regularization思想跟清華那篇PCB-RPP[3]也類似,只不過後者的 RPP 是建立在 PCB part-based預訓練的模型基礎上微調,其實就是一個6 parts 的 diversity regularization。
當然文中也有不足的地方:
1.基本上沒有使用全局特徵(person-based的),也沒有建立起parts間的關係,等於丟失了大部分有用的空間信息。
2.Temporal信息的利用只放在最後評價每幀中parts的質量,也是可惜。
-------------------------------------------------------------------
先來一覽總框架圖:
看圖說話,main contribution就是 RRU 和 STIM 模塊,不過後者簡直是醉了:STIM = 1x1x1卷積+3x3x3卷積+AVGpooling,等於把每幀時空refined好的特徵再進行時空聚合。
來看看RRU做了什麼:
1.由於是想設計類似RNN的 recurrent unit的結構,利用上一個時刻的輸出很有必要,故RRU的輸入為 當前幀,上一幀的 raw feature 和上一幀的 refined feature
2.使用 來模擬外觀差異,使用 來捕捉動作上下文信息,將這兩項concat一起作為 Update gate 的輸入。
3.gate 首先對輸入特徵進行聚合降維(過渡層),接著分別進行 channel attention 和 Spatial attention,然後將兩個attention結果進行 element-wise 相乘,過Sigmoid函數,得到對當前幀 raw feature 的更新權重 ,以及上一幀refined feature 的更新權值
4.最後更新得到當前幀的refined feature:
循環計算clip中每一幀的refined feature,最後把T幀特徵stack起來。
文中的story講得非常細膩有趣,生動地描述了RRU設計的初衷以及與普通RNN的本質區別:
1.不同幀間的部分人體區域會遭受 遮擋/不同姿態/抖動 影響,為了更好地恢復幀內區域的丟失的信息,設計了RRU(通過參考過去幀的外觀和動作信息,來去掉雜訊和恢復丟失信息)
2.RRU通過參考過去幀時空信息來更新 frame-level feature,而傳統的RNN模塊是從temporal features來提取新特徵;即前者輸入與輸出共享同樣feature space,而後者的hidden state已經是不同的feature space。這可以應用到每個time step,來減少空間雜訊,改善特徵質量?
Loss function由三部分組成:
STIM後的softmax CE loss + STIM後的video-level的 triplet loss + RRU後的part-based triplet loss
實驗結果:
文中設置 T=8,即每次對8幀進行操作;有點失望,文中沒有給出超參T的對比實驗,還想看看RRU的 short-term 和 Long-term 特性如何。
從上圖可以看到兩個有趣的點:
1.從第一個block結果可見,使用temporal信息未必能帶來性能提升,比如使用LSTM,反而性能下降了;而STIM,用3D卷積的形式,能提升性能。這跟 @高繼揚 BMVC[4]文章得出的結論神同步。
2.從第二個block結果可見,RRU中每個小模塊都對feature起著不同程度的改善作用。但是最終只加複雜RRU的性能還不如簡單STIM,可見在 top 層使用 temporal 卷積的強大威力。
倒數第三行的 DRSTA 就是第一篇文章[1]的結果。
可見在大規模數據集MARS下,本文的方法性能比DRSTA高了足足7個點(mAP)。。。無力吐槽的是,這文用的backbone是Inception-v3,每幀resize到299 × 299,這不好比。
總結與展望:
文中通過RRU和STIM來整合時空信息,雖然創新性不是很強,但簡潔有效,也方便大家復現。其中RRU使用歷史幀特徵來更新當前幀特徵的模塊構造,非常有啟發性,大家可以思考:如何構造對特定的任務的 RNN模塊纔是最有效的?而不是想都不想直接用 LSTM, GRU,convLSTM, convGRU來序列建模~~
--------------------------------
RRU的論文代碼鏈接如下:
Reference:
[1]Shuang Li et al., Diversity Regularized Spatiotemporal Attention for Video-based Person Re-identification, CVPR2018
[2]Yiheng Liu et al., Spatial and Temporal Mutual Promotion for Video-based Person Re-identification, AAAI2019
[3]Yifan Sun et al., Beyond Part Models: Person Retrieval with Refined Part Pooling, ECCV2018
[4]Jiyang Gao and Ram Nevatia, Revisiting Temporal Modeling for Video-based Person ReID,BMVC2018
推薦閱讀: