文章目錄
0. 前言
- 本文基本上就是2019年之前的論文。
- 行爲識別模型主要分爲三類(好像一般大家都這麼分,但我感覺不是特別合理……)
- 3D卷積
- 傳統圖像網絡的輸入是
(batch_size, h, w, 3)
,而視頻數據相對於圖像數據多了時間緯度,所以一般行爲識別網絡的輸入是(batch_size, t, h, w, 3)
- 因爲多了一維,就將普通2D卷積用3D卷積來替代,所以所謂的3D卷積就是指同時對 spatial-temporal 緯度進行卷積操作。
- 優點:相對來說,能夠較好的提取時間維度的特徵(也就是提取不同幀的數據)。
- 缺點:3D卷積的參數數量龐大、訓練/預測時消耗的計算資源較多。
- 傳統圖像網絡的輸入是
- 2D卷積
- 上面說了3D卷積存在消耗計算資源多的問題。
- 如果能用2D卷積來提取時間特徵,那麼就既能夠滿足行爲識別模型訓練的需求,也能滿足降低行爲識別模型計算資源消耗的目標。
- 雙流法(感覺雙流法與2D/3D卷積並不衝突)
- 雙流法指的是模型的輸入包括了RGB幀也包括光流數據,其實中間提取光流特徵的網絡與提取RGB幀信息的網絡是類似的……
- 感覺雙流法與2D/3D卷積並不衝突,提取光流/RGB流特徵就用的是3D/2D網絡。
- 3D卷積
- 論文分類與簡介
- 雙流法:就是引入了雙流,以及探索雙流融合方式。因爲用不上所以不列了。
- 3D卷積
- C3D:3D版VGG。
- I3D:提出Kinetics-400數據集,基於InceptionV1的3D卷積網絡。。
- R(2+1)D:使用
tx1x1+1xdxd
卷積替代txdxd
卷積,使用ResNet作爲Backbone。 - SlowFast:同一個模型中有多個分支(slow分支與fast分支,分別對應不同的幀率),每個分支都是I3D模型。
- 2D卷積
- TSN:將視頻分爲N個部分、分別提取其中一幀作爲模型輸入,對每一幀分別使用2D CNN提取特徵,融合(如avg)後使用分類網絡判斷行爲類別。
- TSM:在TSN的基礎上,對中間部分特徵圖(shape爲
NxTxHxWxC
)的T
維度上進行shift操作。
- 其他:
- ECO:先2D提取特徵再3D融合,提出了一種online video提取幀的新方法。
- Non-local:類似於attention,增加“感受野”
1. 雙流法
1.2. 雙流法第一篇
- 2014年6月
- arxiv: Two-Stream Convolutional Networks for Action Recognition in Videos,論文解讀,Github
- 要解決什麼問題?
- 引入深度學習後,雙流法處理行爲識別的開山之作。
- 如何通過卷積神經網絡同時獲取時間(光流)、位置信息(普通食品)。
- 用了什麼方法解決?
- 引入了光流(Optical flow),用於表示時間信息。
- 對於RGB/光流都是通過2D卷積提取特徵。
- 最後融合也比較直接。
- 效果如何?
- 當時在兩個小數據集上達到SOTA。
- 還存在什麼問題?
- 早期論文了,也沒啥花頭。
- 光流需要實現處理得到,總體結構應該不是end-to-end的。
- 從後一篇論文看,融合方式太過直接,有上升空間。
- 其他:光流相關內容需要進一步理解。
1.2. 雙流法+新特徵融合方式
- 2016年4月,題外話,看着像實驗報告,不像論文
- arxiv: Convolutional Two-Stream Network Fusion for Video Action Recognition,論文解讀,論文解讀2,Github
- 要解決什麼問題?
- 之前的雙流模型,特徵融合過於簡單,希望找到更好的融合方式。
- 用了什麼方法解決?
- 就是各種實驗,找到合適的方式……
- 下圖是幾處可以特徵融合的位置。
- 下圖是幾種特徵融合的方式
- 下圖是論文使用的特徵融合模型結構,主要就是利用了3D卷積和3D池化進行特徵融合,融合位置如上上圖。
- 效果如何?
- 在某幾個數據集上達到SOTA。
- 還存在什麼問題?
- 還是感覺之前的模型過於簡單了……
2. 3D卷積
2.1. C3D
- 2014年12月
- arxiv: Learning Spatiotemporal Features with 3D Convolutional Networks,論文解讀,Github
- 要解決什麼問題?
- 利用3D卷積來處理視頻數據。
- 用了什麼方法解決?
- 利用3D卷積(即C3D)來提出視頻的特徵。
- 將特徵利用線性迴歸來分類,就能得到很好的效果。
- 效果如何?
- 這個應該是3D卷積第一次用來做行爲識別吧,當時效果比較驚豔。
- 還存在什麼問題?
- 早期模型了,現在看沒啥花頭,感覺就是用3D卷積謝了一遍VGG。
- 看了源碼後發現,一切思想都很樸素:
- 輸入圖像的尺寸與圖像分類一樣,是固定的,比如
batch_size * clip_len * img_height * img_width * 3
。這個圖像序列的獲取是有一定講究的,對於一個視頻要至少獲取 clip_len 幀圖像,一般都是間隔着獲取。 - 由於輸入尺寸是固定的,所以得到的最終特徵圖尺寸也是固定的,可以reshape到一個固定的向量。
- 通過這個向量直接通過全連接層即可獲得結果。
- 輸入圖像的尺寸與圖像分類一樣,是固定的,比如
2.2. I3D + Kinetics
- 2017年5月
- arxiv: Quo Vadis, Action Recognition A New Model and the Kinetics Dataset,論文解讀,mmaction有實現
- 要解決什麼問題?
- 當時的行爲識別數據集都太小。
- 2D卷積無法提取時間特徵。
- 用了什麼方法解決?
- 提出Kinetics數據集。
- 分析當時行爲識別模型的結構,提出自己的結構。
- (a) CONV+LSTM:融合單幀特徵的一種方法就是LSTM。
- (b) 普通3D卷積:比較直接,僅利用了RGB圖像,而沒有利用光流。
- © 普通雙流:對RGB和光流都利用2D卷積,然後再進行特徵融合。
- (d) 作者提出的一種新結構:對於每一幀都利用2D卷積,然後最終將每一幀的信息融合,再利用3D卷積。
- (e) I3D結構:對RGB與光流分別進行3D卷積,然後再融合結果。
- I3D模型本身使用的是InceptionV1的結構,而不是ResNet
- 效果如何?
- 在HMDB-51與UCF-101中,I3D都達到了SOTA。
- 大數據集,有點訓練不動。
- 還存在什麼問題?
- 3D卷積都比較費時間、參數多,而且空間特徵提取的並不太好。
- 現在所謂的I3D模型好像都是基於ResNet的,跟I3D論文這裏的好像沒太多關係。
2.3. R(2+1)D
- 17年11月
- arxiv: A Closer Look at Spatiotemporal Convolutions for Action Recognition,論文解讀,Github
- 要解決什麼問題?
- 使用3D卷積網絡實現行爲識別模型(I3D)雖然在當時達到了SOTA,但相比於iDT等非深度學習方法, 準確率提升的不多。
- 當時的3D卷積都比較直白。
- 用了什麼方法解決?
- 探索了一些3D卷積結構,或者替代3D卷積的結構。
- 所謂的(2+1)D其實就是用
tx1x1
卷積 +1xdxd
卷積替代普通的txdxd
卷積。 - R3D結構,估計R(2+1)D結構也與這個類似
- 探索了一些3D卷積結構,或者替代3D卷積的結構。
- 效果如何?
- 當時在同等算力下,(2+1)D的效果最好。
- 還存在什麼問題?
- 早起模型啦,模型總體結構還是比較樸素的。
- 但(2+1)D這個結構在現在還是比較常見的。
2.4. SlowFast
- arxiv: SlowFast Networks for Video Recognition,譯文,論文解讀,Github
- 要解決什麼問題?
- intuition:圖像在x,y兩個維度上是均勻的,但在視頻x,y,t中並非如此,且慢動作比快動作更可能發生。
- 從上面的思路可以看出,那要如何同時處理時間維度和空間維度和空間維度的信息呢。
- 雙流法的一個缺陷:沒有考慮不同速率的關係。
- 用了什麼方法解決?
- 提出了SlowFastNet,分爲兩個分支,即Slow分支和Fast分支。
- Slow分支:幀率較慢,用於獲取語義信息(semantic information),猜測就是空間信息,計算量大。
- Fast分支:幀率較快,用於獲取去時間信息,計算量小,大約是總體計算量的20%。
- 提出了SlowFastNet,分爲兩個分支,即Slow分支和Fast分支。
- 效果如何?
- 發表時認爲在四個數據集 kinetics400/600, Charades, AVA上都達到SOTA。
- 其實該論文精讀不如TSM,但這篇論文的“故事”更好理解。
- 還存在什麼問題?
- 卡多,牛逼,野獸派。
3. 2D 卷積
3.1. TSN
- 2016年8月
- arxiv: Temporal Segment Networks: Towards Good Practices for Deep Action Recognition,論文解讀,mmaction有實現
- 要解決什麼問題?
- 當時的模型都對短視頻比較友好,對長視頻不太行。
- 用了什麼方法解決?
- 提出了TSN結構,主要包括了Segments和Snippets兩個概念。
- 首先將整段視頻分爲若干個Segments,再將每個segments中分爲若干snippets,將這些snippets作爲輸入。
- 從下圖中可以看出,就是利用了多個雙流結構,然後融合結果。
- 對於模型的輸入,做了多種試驗。
- 提出了TSN結構,主要包括了Segments和Snippets兩個概念。
- 效果如何?
- 當時在兩個小數據集上達到了SOTA。
- 還存在什麼問題?
- 顯然,雙流模型不是end-to-end的。
3.2. TSM
- 2018.11
- arxiv: TSM: Temporal Shift Module for Efficient Video Understanding,論文解讀,Github
- 要解決什麼問題?
- 視頻行爲識別需要考慮 temporal modeling。
- 2D卷積雖然需要的操作量少但無法直接考慮 temporal modeling,3D卷積雖然能夠考慮temporal modeling但參數量、計算量大。
- 用了什麼方法解決?
- 提出了TSM結構,即利用了2D卷積的參數、操作量少,又兼顧了3D卷積的temporal modeling。
- TSM的結構如下圖。
- (b) 是離線模式,即在預測當前幀的信息時,會利用到未來的幀。
- © 是在線模式,即預測當前幀的時候,不會利用到未來的幀。
- 具體TSM的結構,利用了(b)形式,即殘差形式。
- 效果如何?
- 查資料的時候看到不少,說這個網絡效果好,但感覺有點奇怪
- 下面這個圖霸氣,縱座標是精度,橫座標是計算量,圓圈大小是參數數量,可以看到TSM是啥都好……
- 查資料的時候看到不少,說這個網絡效果好,但感覺有點奇怪
- 還存在什麼問題?
- 只知道效果好,但總感覺有點怪(我看得少,沒看出來)
4. 其他
4.2. ECO
- 18年4月
- arxiv: ECO: Efficient Convolutional Network for Online Video Understanding
- 論文解讀,論文解讀2,Github(caffe),Github(PyTorch)
- 要解決什麼問題?
- 當時常見的模型不會同時考慮幾秒內不同幀的關係。
- 當時常見的模型(主要指的是雙流法)的視頻預處理較慢,阻礙了實時視頻理解。
- 用了什麼方法解決?
- 提出了一種新結構,可融合處理視頻不同時間點的幀信息。總體流程是:
- 第一步,將視頻微分N段,每一段中隨機選取一幀內容,共N幀信息。
- 第二步,對N幀內容分別進行2D卷積進行特徵提取(weight sharing),將結果concat後獲取4D特徵。
- 第三步,將4D特徵作爲輸入,進行3D卷積。
- 結構類型分爲兩種,即ECO Lite和ECO Full
- 提出了一種實時視頻分類的方法,這種方法模型結構並沒有變化,有變化的只是獲取視頻幀的過程。
- 提出了一種新結構,可融合處理視頻不同時間點的幀信息。總體流程是:
- 效果如何?
- 準確率與當時的SOTA差不多(略差一點),但速度快了10-80倍。
- 還存在什麼問題?
- 感覺這些網絡都是以224*224的圖像作爲輸入,會不會對一些距離鏡頭較遠的動作檢測效果不佳?
4.3. Non-local
-
17年11月
-
要解決什麼問題?
- 主要提出了local/non local兩類操作的定義。
- local 操作
- 每次只能處理一個鄰域內的數據(process one local neightborhood at a time)
- 普通的CNN/RNN都屬於local操作
- 主要缺陷有:計算效率低(computationally inefficient),優化較爲困難(cause optimization difficulties),使得multihop dependency modeling(數據需要前後依賴的情況)更困難。
- non local 操作:
- 主要優勢:能夠獲取long-range dependencies,效率高且需要的層數少,輸入與輸出的尺寸相同(可較爲方便地嵌入模塊)。
- local 操作
- 主要提出了local/non local兩類操作的定義。
-
用了什麼方法解決?
- 定義了 non local 操作:
- 參考下論文解讀中的描述,很清楚了:
- 上面的公式中,輸入是x,輸出是y,i和j分別代表輸入的某個空間位置,x_i是一個向量,維數跟x的channel數一樣。f是一個計算任意兩點相似關係的函數,輸出的是標量。g是一個映射函數,將一個點映射成一個向量,可以看成是計算一個點的特徵,比如最簡單的1*1卷積。
- 也就是說,爲了計算輸出層的一個點,需要將輸入的每個點都考慮一遍,而且考慮的方式很像attention:輸出的某個點在原圖上的attention,而mask則是相似性給出。
- 參看下圖:
- 參考下論文解讀中的描述,很清楚了:
- 具體實現方式參考下圖:
- Softmax分支代表的是mask。
- 另外一路代表的就是transformed image。
- 定義了 non local 操作:
-
效果如何?
- 在當時,進將non-local作爲一個trick添加到行爲識別網絡中就能達到SOTA的效果。
-
還存在什麼問題?
- 這玩意是個即插即用的小模塊,能提點,但性能就……