Deep neural network in vedio based person re-id
來自專欄阿遠的科研筆記6 人贊了文章
「天下熙熙,皆為利來;天下攘攘,皆為利往。」[0]
深度神經網路在今天不光早已被各行各業廣為使用,甚至都已經進入了中小學的課本,連街頭大媽都恨不得用深度神經網路計算最優買菜路線和砍價策略。連大媽們都這麼努力,更別說廣大的偽學者們了,大神們挖了這麼多坑,但自己又不會挖坑,肯定要努力往坑裡灌水啊。今天我們就來看看深度學習在視頻行人重識別這個方向上的灌水情況。
1. CNN-RNN
這裡的標題我好像不應該加 1. 的,因為好像我看過的所有這方面的研究用的都是CNN接RNN的結構,2stream? 3dcnn? 不存在的。先來看一下這篇文章:
Recurrent Convolutional Network for Video-Based Person Re-identification
這篇文章可以說是最基本的baseline,通篇基本就講了這個recurrent conv. network的設計,其網路的基本結構如下:
這個網路結構的思路就是,把對每張圖片提取CNN特徵,然後把每段視頻的所有圖片的特徵按序輸入到RNN網路,收集RNN對於每張圖片的輸出,最後使用了一個temporal pooling對所有的RNN輸出進行綜合整理,得到這段視頻的特徵,然後在訓練階段使用孿生網路的方式進行訓練。
很典型的CNN-RNN的結構,亮點也可以說是改進點在於兩點:
一是在於在CNN的輸入上,此CNN的輸入通道不光用了圖片的RGB通道,還用了這張圖片的光流信息,額外增加了兩個通道,分別是圖片x, y方向上的光流。
二是在於對RNN結果的整理上,使用了temporal pooling, 而不是簡單的選取最後一次RNN的輸出,或者使用雙向RNN, 此文中的temporal pooling設計如下:兩種方式,一種average pooling,一種max pooling,對於一段視頻的所有圖片的RNN輸出 , average polling就是對這T個向量簡單求均值:
max pooling的操作就有點迷,就是在向量每個位點上取所有這些向量在此位點上的最大值:
不過後來結果證明average pooling效果要好一點,可見不是所有蜜汁操作都可以得到蜜汁高效。
只在這兩個小庫上做了實驗,在那個年代,這個效果還算不錯了。
總結一下這篇文章:
1. 先說點鼓勵的話,畢竟是較早將CNN-RNN應用到vedio-based re-id問題上的文章,還是起到了在其他文章中做baseline或者實驗對照被吊打的作用。
2. 首先input channel中加光流這一點上,儘管作者進行了剝離實驗論證在他的方法中,加入光流信息會對結果有較大的提升,但我是不認為光流在視頻行人重識別上的作用會很大的,因為仔細觀察過視頻行人重識別圖片的光流結果之後就會發現,此類圖片完全不符合光流法中要求視頻背景大致不變這一特性,此類數據一般都是人物位置大概不變,背景劇烈變化,所以在其光流圖中會發現,一般圖片中的人物倒是很可能會被分析成背景。而且我也使用過雙流的模型進行過視頻行人重識別方面的實驗,實驗結果會在日後的論文中公布,效果真的不好, 所以對文章輸入通道加入光流信息是否真的有用存疑(而且儘管作者做了剝離實驗,但是否在輸入通道加入光流的實驗對結果的影響程度在不同庫之間的差異很明顯,如圖二,很明顯,加入光流在iLIDS-VID上的效果十分明顯,在PRID2011上的效果不太明顯,其中iLIDS-VID的圖片背景較PRID2011更為複雜)。
3. 對於temporal pooling部分,講道理說(就是不會用數學語言表達),RNN到最後的結果是會更側重於後面的輸入,這也是雙向RNN的主要解決的問題,但是RNN到後面的結果是包含了前面輸入的信息的,所以如果直接對全部輸出進行average pooling,最後的結果是否會更傾向於前面的輸入呢?一個猜想,有興趣的話可以實驗驗證一下。
好的,以上就是這篇文章了,兩年前的文章,在這個通貨膨脹的時代,已經可以說是白堊紀時期的研究了。下面我們看一個比較新的:
Video Person Re-identification by Temporal Residual Learning[2]
(如果有世界深度模型複雜度大賽的話,這篇文章的模型應該能拿個前幾名回來吧。)
先來貼張圖:
這篇文章的主要工作也是設計了一個網路結構,如圖三所示,直觀上感覺Mask rcnn,faster rcnn跟它比起來都是小巫見大巫,但仔細分析分析,還是faster rcnn精緻一點,這個可能只是參數和部件比較多,好的,不扯遠了,我們來剖析一下這個結構:
這個模型依然遵循了CNN-RNN的結構,突出的亮點有三個:1. CNN特徵部分設計的ST2N結構,利用上層特徵信息編碼底層特徵,2. RNN部分殘差模塊的設計,加深了RNN,從而利用了更深的網路結構提升實驗效果。3. 維持了純CNN特徵與編碼後的CNN特徵兩條路線。
先來看一下第一點, ST2N(Spatial-Temporal Transformer Network Module),這個部分主要參考了Google的Spatial Transformer Network[3], 這篇文章主要講的是在CNN中學習一個小的模塊對輸入的圖片進行一些形變上的修正,如圖四所示:
作者在此處參考了STN的效果,設計了ST2N模塊,主要作用就是利用上層特徵對底層特徵進行編碼,由於作者的CNN部分採用了inception模型,所以其具體做法就是使用inception-2層的輸出結果對第一層卷積層的結果進行編碼,具體效果如圖五所示:
可以看出,ST2N這一模塊確實能過濾掉大部分的背景(其實上層的feature map基本不就是過濾掉大量無關信息之後的結果嘛。。。。)。
再來看一下第二點,RNN結構的設計,作者採用了兩層的雙向LSTM,中間設計了一層殘差(這層殘差計算說是殘差,但我看來倒是更像normalization,所有RNN的輸出,減去了這些輸出Temporal Pooling之後的結果,這其實是標準化嘛),RNN模塊最後的feature是兩層lstm temporal pooling的結果之和,這個可以算殘差了。。。沒錯,這種設計就屬於那種國際上通用的只能用實驗來證明有效的設計,當然作者做了詳細的剝離實驗來論證。
然後是第三點,原生的CNN特徵和編碼後的CNN特徵兩個通路並行,知道RNN處理結果之後才做合併分析,這種做法雖然確實需要使用很大的資源,但從結果上看,對結果的提升也還是挺明顯的。
實驗結果驅動的模型主要還是要看結果,下表這是在MARS上做的剝離實驗,可以看出,每一部分對實驗結果的提升還是顯而易見的。
下面這兩個表分別在MARS和其他三個庫上的實驗結果對比以及跨庫實驗,可以看到用了XQDA或者KISSME進行檢索結果還是很不錯的(用re-ranking會不會更好一點?):
總結來說,這篇文章從過程和結果來看,實驗和工作都很紮實,沒什麼短板,很好的文章。但是雙通道的模型,整個空間和時間上的花費直接就double了,當然可能作者也嘗試過在CNN的最後就進行兩通道特徵的融合,可能效果也不盡如人意,用時間空間換取精度的做法當然是國際上通用的習慣,但是這可不是什麼好習慣啊,畢竟學術研究還是要為工業界服務的,時間空間開銷太大,可能在工業使用的時候一開始就會被trade-off掉。
最後有個小問題就是,雙向lstm的輸出結果是輸入的兩倍,兩個方向上的特徵如何融合這個小細節作者好像沒有提到。
我們今天從新舊兩篇文章剖析了深度神經網路在視頻行人重識別上的應用, 接下來我們會總結一下一些細節,比如XQDA,KISSME這些在retrival的時候會用的metric,還有triplet loss等等訓練的時候會採用的方法。
好的,以上就是全部內容了,我們下期再見!
Ref:
[0] 《史記 貨殖列傳》司馬遷
[1] Mclaughlin N, Rincon J M D, Miller P. Recurrent Convolutional Network for Video-Based Person Re-identification[C]// Computer Vision and Pattern Recognition. IEEE, 2016:1325-1334.
[2] Dai J, Zhang P, Lu H, et al. Video Person Re-identification by Temporal Residual Learning[J]. 2018.
[3] Jaderberg, Max, Karen Simonyan, and Andrew Zisserman. 「Spatial transformer networks.」 Advances in Neural Information Processing Systems. 2015. (Citations: 116).
推薦閱讀:
TAG:深度學習DeepLearning | 神經網路 | 行人重識別 |