轉(zhuǎn)眼就要博0了,導師開始讓我看視頻理解多模態(tài)方向的內(nèi)容,重新一遍打基礎吧,從Python,到NLP,再到視頻理解,最后加上凸優(yōu)化,一步一步來,瘋學一個暑假。寫這個博客作為我的筆記以及好文章的鏈接搬運,以便以后復習。
Python從入門到放棄
視頻理解類Papers整理
萬字長文漫談視頻理解
視頻理解綜述:動作識別、時序動作定位、視頻Embedding
視頻理解/動作分類 模型匯總(2022.06.28 更新)
計算機視覺中video understanding領域有什么研究方向和比較重要的成果?
視頻多模態(tài)預訓練/檢索模型
視頻多模態(tài)預訓練/檢索模型(二)
多模態(tài)視頻文本時序定位
多模態(tài)預訓練文章筆記
CVPR2020 Tutorial on Video Modeling
CVPR2021 2nd Tutorial on Video Modeling
ICCV2021 Tutorial on Multi-modality Learning
一.多模態(tài)大模型
1.1 統(tǒng)一架構
多模態(tài)大模型都是Transformer based
架構,NLP對文本進行embedding,CV對圖像patch進行Embedding,從圖像、視頻、文本、語音數(shù)據(jù)中提取特征,轉(zhuǎn)換為tokens,進行不同模態(tài)特征的對齊,送入Transformer進行運算。
1.2 模型基礎
預訓練語言模型的前世今生 - 從Word Embedding到RNN/LSTM到Transformer到GPT到BERT 看完√
1.2.1 Transformer
Transformer 是一種基于自注意力機制(self-attention)的序列到序列(sequence-to-sequence)模型。它使用了多頭注意力機制,能夠并行地關注不同位置的信息。Transformer 在自然語言處理領域中廣泛應用,如機器翻譯和文本生成。Masked-MultiHead Attetion
:獨立學習得到 head 組不同的 線性投影(linear projections)來變換查詢、鍵和值。然后,這 head 組變換后的查詢、鍵和值將并行地進行注意力計算
。最后,將這 head 個注意力計算的輸出拼接在一起,允許注意力機制組合使用查詢、鍵和值的不同的 子空間表示(representation subspaces)。
1.2.2 ViT
ViT(Vision Transformer)是一種將 Transformer 模型應用于圖像分類任務的方法。它將圖像分割為一系列的小塊patch,并將每個小塊作為序列輸入 Transformer 模型。通過自注意力機制,ViT 能夠在圖像中捕捉全局和局部的視覺信息,實現(xiàn)圖像分類。
1.2.3 Bert
Bert (Bidirectional Encoder Representations from Transformers)是一種 Transformer Encoder-Only 雙向編碼
模型,通過大量無標記數(shù)據(jù)進行預訓練和微調(diào)的方式,提供了深度的語言理解能力的語言特征提取模型
。與傳統(tǒng)的單向語言模型不同,Bert 同時考慮了上下文的信息,使得它在詞義消歧、命名實體識別等任務上具有優(yōu)勢。
雙向編碼的Bert如何使用無監(jiān)督預訓練?訓練時,將輸入序列mask掉15%的詞(token),然后做完形填空
(根據(jù)上下文預測中間的詞),預測mask的詞。測試階段沒有mask
1.2.4 GPT
GPT(Generative Pretrained Transformer)是一種基于 Transformer Decoder-Only 單向編碼
模型的預訓練語言生成模型
。GPT 通過大規(guī)模的無監(jiān)督訓練來學習語言的語法和語義,能夠生成連貫且逼真的文本。GPT 在文本生成、對話系統(tǒng)等任務中取得了顯著的成果。預訓練語言模型之GPT-1,GPT-2和GPT-3
- GPT-1:無監(jiān)督訓練(
文字接龍,根據(jù)前文預測下文,不是完形填空
) + 有監(jiān)督微調(diào)(堆疊12層Transformer decoder) - GPT-2:無監(jiān)督訓練 + 多任務zero-shot(不進行有監(jiān)督微調(diào),堆疊48層Transformer decoder)
- GPT-3:無監(jiān)督訓練 + 更大的數(shù)據(jù)集和模型參數(shù)(堆疊96層Transformer decoder)
1.2.5 CrossAttention
CrossAttention 是 Transformer 模型中的一種注意力機制。與自注意力機制不同,CrossAttention 允許模型在處理輸入序列時,同時關注另一個相關的序列。CrossAttention 在多模態(tài)任務中經(jīng)常使用,例如將圖像和文本進行對齊或生成多模態(tài)表示。(Q和K不同源,K和V同源)
1.2.6 CLIP
CLIP (Contrastive Language-Image Pretraining)是一種跨模態(tài)的預訓練模型,它能夠同時處理圖像和文本。通過將圖像和文本進行對比學習,CLIP 提供了一個共享的視覺和語義空間,使得圖像和文本可以進行直接的匹配和檢索。
1.2.7 預訓練Pretrain(遷移學習)
通過 ImageNet 數(shù)據(jù)集我們訓練出一個模型 A。由于上面提到 CNN 的淺層學到的特征通用性特別強,我們可以對模型 A 做出一部分改進得到模型 B(兩種方法):
- 凍結(adapter):淺層參數(shù)使用模型 A 的參數(shù),高層參數(shù)隨機初始化,淺層參數(shù)一直不變,然后利用領導給出的 30 張圖片訓練參數(shù)。
- 微調(diào)(finetune):淺層參數(shù)使用模型 A 的參數(shù),高層參數(shù)隨機初始化,然后利用領導給出的 30 張圖片訓練參數(shù),但是在這里淺層參數(shù)會隨著任務的訓練不斷發(fā)生變化。
1.2.6 微調(diào)Finetune
在大規(guī)模無標簽數(shù)據(jù)上訓練Pretrain得到預訓練模型,再在小規(guī)模數(shù)據(jù)集上進行微調(diào)訓練Finetune,成為某個特定任務的專才
,如機器翻譯、摘要生成。Bert走的路線
1.2.7 提示Prompt
在大規(guī)模無標簽數(shù)據(jù)上訓練Pretrain得到預訓練模型,人類提供一些提示指令Prompt,成為可以解決所有問題的通才
,根據(jù)Prompt來完成不同的任務。GPT走的路線
1.2.8 遷移與零樣本學習
遷移學習(小模型) 通常使用較小的模型,在源領域訓練好的知識和參數(shù)可以被遷移到目標領域,從而加速目標任務的學習過程。這種方式可以提高模型的泛化能力和效果,在數(shù)據(jù)稀缺的情況下也能取得較好的結果。
Zero-shot(大模型) 解決從未見過類別的樣本進行分類的問題。在零樣本學習中,我們通常使用大模型,如GPT-3等。這些模型在訓練階段通過學習大規(guī)模數(shù)據(jù)獲取了廣泛的知識,并且能夠通過關聯(lián)不同領域的知識來進行分類。通過利用這些大模型的泛化能力,我們可以在沒有見過的類別上進行分類,實現(xiàn)零樣本學習。
1.2.8 拓展閱讀
CLIP——圖文匹配
(1) 預訓練圖像和文本編碼器:訓練<圖片,文本>
對,進行對比學習
。N個圖像和N個文本,用Bert
和ViT
提取文本和圖片的特征(768維),向量兩兩相乘,得到<圖片,文本>
對兒之間的余弦相似度(向量乘法)。標簽對比學習:對角線上相匹配的圖文是正樣本(正確的pair=1),其他不匹配的全是負樣本(錯誤的pair=0),這兩個標簽計算loss反向傳播,最大化正樣本對的余弦相似度,最小化負樣本對的優(yōu)余弦相似度,約束前面的Bert
和ViT
梯度下降修改參數(shù)。最終預訓練得到文本和圖像編碼器Bert
和ViT
。
(2)和(3) Zero-shot實現(xiàn)圖文匹配:根據(jù)剛剛的預訓練,任意給出文本(dog、car、cat…)與圖片計算余弦相似度(相乘),相似度分數(shù)最大的就是正確的<圖片,文本>
對
BLIP——圖文匹配&圖生文
(1)對比學習ITC:圖片編碼器提取的向量 與 第一個文本編碼器提取的向量,進行對比學習。(bert的雙向注意力)
(2)二分類任務ITM:圖片編碼器提取的向量 與 第二個文本編碼器提取的向量進行cross attention,融合的向量進行二分類任務(文本和圖片是不是描述的同一件事),以更細粒度的讓文本和圖像的難樣本對齊。(bert的雙向注意力)
(3)生成任務LM:圖片編碼器提取的向量 與 第三個文本編碼器提取的向量進行cross attention,融合的向量進行文本生成任務(根據(jù)圖像生成描述文本)。(gpt的單向注意力)
BLIP2——圖文匹配&圖生文
(1)階段一:使用QFormer將 圖像特征向量 投影到 文本特征空間,使得LLM可以理解圖像向量的特征。
(2)階段二:把圖片特征輸入LLM(作為prompt),生成對應的圖像的文本描述。
BLIP2對細節(jié)理解不到位的原因:ViT的patch級tokenlization對細節(jié)處理不到位。
DALL·E——文生圖
(1)訓練過程:將圖片編碼為one-hot向量,再解碼為一只狗,實現(xiàn)無損壓縮圖像。(loss是原圖和解碼圖片的差別)
(2)推理過程:自回歸編碼器(GPT)通過文本tokens預測出多種圖片tokens,再解碼為對應的圖片,最后使用CLIP進行圖文匹配,得到解碼圖片中與文本最相似的圖片。
VisualGLM——中文版BLIP2
使用Lora訓練。
但文本生成經(jīng)常胡說八道,原因在于ChatGLM的模型規(guī)模太小7B。
1.3 多模態(tài)預訓練
圖文音多模態(tài)數(shù)據(jù)的不斷增多,多模態(tài)大模型能力也持續(xù)涌現(xiàn)
。
大規(guī)模數(shù)據(jù) + T r a n s f o r m e r 架構 + 自監(jiān)督預訓練 P r e t r a i n + 下游微調(diào) F i n e T u n e 大規(guī)模數(shù)據(jù) + Transformer架構 + 自監(jiān)督預訓練Pretrain + 下游微調(diào)Fine Tune 大規(guī)模數(shù)據(jù)+Transformer架構+自監(jiān)督預訓練Pretrain+下游微調(diào)FineTune
1.3.1 多模態(tài)數(shù)據(jù)集
1.3.1 多模態(tài)模型架構
- Encoder-only:Bert雙向理解
- Decoder-only:GPT單向生成
- Encoder+Decoder:Transformer理解+生成(Encoder Decoder串行/并行)
1.3.3 自監(jiān)督預訓練
- 模態(tài)內(nèi)掩碼學習:在任意一個模態(tài)內(nèi)部進行token級別的掩碼,像Bert一樣,對一句話的不同單詞的token進行掩碼。
- 模態(tài)間掩碼學習:比如對text進行掩碼,通過video信息對文本進行預測。
-
模態(tài)間的匹配學習:模態(tài)內(nèi)的匹配學習(對圖像進行變換角度,預測角度等自監(jiān)督任務)、模態(tài)間的匹配學習(如CLIP這種對比學習的方式進行圖文模態(tài)間的匹配)
1.3.4 下游微調(diào)
- 模型微調(diào):全參數(shù)微調(diào)、部分參數(shù)微調(diào)
- 下游任務:對模態(tài)組合,定義更好的下游任務
1.3.5 前景展望
經(jīng)典工作
以語言大模型為核心的多模態(tài)融合感知模型
二.語言大模型分類
學習哪些大模型?(訓練不同規(guī)模的模型適應不同場景)
- 在線大模型:OpneAI系列的大模型組
- 開源大模型:ChatGLM 6B 和 VisualGM 6B
2.1 在線大模型
需要OpenAI的key,私人數(shù)據(jù)被openai共享,不能部署在本地,只能調(diào)用API接口在線微調(diào)Openai公司的大模型。
語言大模型:
圖文多模態(tài)大模型:
語音大模型:
文本嵌入大模型:根據(jù)文本語義編碼,語義越接近,向量越接近。
審查大模型:
編程大模型:
2.2 開源大模型
根據(jù)下游任務使用開源微調(diào)框架進行微調(diào)訓練,也可以本地部署。
實時更新的OPEN LLM排行榜
ChatGLM——中文語言開源大模型
VisualGLM——中文多模態(tài)開源大模型
三. 大模型微調(diào)
-
全量微調(diào)(Full Fine-tuning,F(xiàn)T)將預訓練好的模型的所有參數(shù)都進行微調(diào),包括底層的特征提取器和頂層的分類器。這種方法通常需要較大的計算資源和長時間的訓練,但可以獲得相對較好的性能。
-
高效微調(diào)(Partial Fine-tuning,PEFT)則是一種更加高效的微調(diào)方法,它僅對部分參數(shù)進行微調(diào)。具體來說,我們凍結預訓練模型的底層參數(shù)(如特征提取器)不進行微調(diào),只微調(diào)頂層的分類器或一部分頂層參數(shù)。這樣可以更快地完成微調(diào)過程,減少計算資源和訓練時間的消耗,同時在一定程度上保留了底層參數(shù)的知識。
-
基于強化學習的進階微調(diào)(Reinforcement Learning-based Hierarchical Fine-tuning,RLHF)使用強化學習的思想來指導微調(diào)的過程。通常,在微調(diào)過程中,我們定義一個獎勵函數(shù)并通過強化學習的方式來最大化獎勵。這樣可以使得模型在微調(diào)過程中更加智能地進行參數(shù)更新,從而獲得更好的性能和泛化能力。
3.1 高效微調(diào) PEFT
3.1.1 LoRA
3.1.2 Prefix Tuning
3.1.3 Prompt Tuning
3.1.4 P-Tuning V2
3.2 RLHF
四.硬件和操作系統(tǒng)要求
4.1 顯卡
4.2 操作系統(tǒng)
五. LangChian
六.視頻理解
6.1 TASK
4個基礎任務:動作識別(Action Recognition)、時序動作定位(Temporal Action Localization)、時空動作檢測(Spation Temporal Action Detection)、視頻Embedding
6.1.1 行為識別——Action Recognition
6.1.2 時序動作檢測——Temporal Action Detction
基于內(nèi)容的檢索——Moment Retrieval
關鍵片段定位——Highlight Detection
6.1.3 時空動作檢測——Spation Temporal Action Detection
挑戰(zhàn):
挑戰(zhàn)1方案:靜態(tài)的外觀特征
+ 幀間空間運動特征
思路1:先提取靜態(tài)外觀特征,再使用不同幀的靜態(tài)外觀特征,提取動態(tài)運動特征。
思路2:同時并行提取靜態(tài)外觀特征 和 時序運動特征,再進行融合。
思路3:使用更加強大的架構,直接提取綜合特征。
挑戰(zhàn)2: 視頻數(shù)據(jù)包含的幀數(shù)太多,計算量巨大
挑戰(zhàn)3: 難以標注海量視頻數(shù)據(jù)
6.2 經(jīng)典工作
-
深度學習視頻理解方法開山始祖(2014):
DeepVideo
(AlexNet用于視頻分類) -
雙流網(wǎng)絡系列(2014-2017):
Two Stream Network
(增加光流分支學習時序信息)、TDD
(提出軌跡卷積,感受野按照軌跡的偏移在時序上將卷積位置偏移到對應的點上去)、LRCN
(將CNN提取的特征送入LSTM進行時序建模)、Fusion
(探究early and late fusion)、TSN
(分段抽幀進行長時間建模) -
3D CNN系列(2015-2020):
C3D
(三維卷積核來建模視頻時間信息)、I3D
(膨脹2D預訓練權重到3D進行初始化)、R(2+1)D
(將3D卷積分解為2D+1D減少計算量)、Non-local
(在I3D基礎上使用self-attention進行長距離時空序列建模)、SlowFast
(雙流快慢幀采樣分支進行3D卷積側(cè)向鏈接融合) -
Video Transformer系列(2020-至今):
TimeSformer
、VidTr
、ViViT
、MviT
、Video Swin Transformer
、VATT
、BeiT
6.2.1 光流Optical Flow 傳統(tǒng)方法
光流估計:
軌跡追蹤:
光流可視化:
稀疏光流與稠密光流:
稠密軌跡方法 Dense Trajectories(DT)
按軌跡對齊的局部特征:
特征編碼:對提取到的軌跡特征進行聚類,得到不同的聚類中心(視覺詞語),構成直方圖來表示整個視頻特征。
稠密軌跡方法 iDT
6.2.2 2D卷積
DeepVideo
DeepVideo [CVPR 14] 是在Alexnet出現(xiàn)之后,在深度學習時代,使用超大規(guī)模的數(shù)據(jù)集,使用比較深的卷積神經(jīng)網(wǎng)絡去做的視頻理解(DeepVideo是處理視頻理解的最早期工作之一)。
DeepVideo論文中的方法是比較直接的,論文中的想法就是如何將卷積神經(jīng)網(wǎng)絡從圖片識別應用到視頻識別中。視頻與圖片的不同在于,視頻多了一個時間軸(有更多的視頻幀)。所以論文中嘗試了以下幾個變體(下圖后3種):
- Single frame單幀,其實就是一個圖片分類的任務。在視頻里任選一幀,然后把這一幀通過一個卷積神經(jīng)網(wǎng)絡,然后通過兩個FC,最后得到分類結果,這個其實就是一個baseline。它完全沒有時間信息,也沒有視頻信息在里面。
- Late Fusion晚融合,之所以叫Late,就是因為它在網(wǎng)絡輸出層做的一些結合。如上圖,從視頻中,隨機選幾幀,然后每一幀都單獨通過一個卷積神經(jīng)網(wǎng)絡,這兩個神經(jīng)網(wǎng)絡是權值共享的,將兩個特征合并,再通過FC全連接層,最后做輸出。 這樣就稍微有一些時序上的信息了。
- Early Fusion早融合,作者在輸入層就做了融合。具體做法就是在RGB在Channel上直接合起來。原來一張圖片,有3個channel,現(xiàn)在有5張圖片,就有3x5=15個channel。那就意味著網(wǎng)絡結構要進行一定的改變了,尤其是第一層。這樣的做法,可以在輸入層就可以感受到時序上的改變,希望能學到一些全局的運動或者時間信息。
- Slow Fusion是在Late Fusion 和 Early Fusion的基礎上提出,Late Fusion合并太晚,Early Fusion合并太早了,Slow Fusion在特征層面做了一些融合。具體做法就是選19個視頻幀的1個小的視頻片段,每4個視頻幀就通過一個卷積神經(jīng)網(wǎng)絡,剛開始的層也是權值共享的,在抽出最開始的這些特征之后,由最開始的4個輸入片段,慢慢合并成2個輸入片段,再去做一些卷積操作,去學習更深層的特征。然后在融合2個特征,最后把學習到的特征給FC。
實驗結結果表明,Slow Fusion結果較好(相對于前三個)。但是從總體看來,這幾種方法的差別都不大。即使在100萬個視頻上去做了預訓練之后,在UCF101小數(shù)據(jù)集上去做遷移學習的時候,效果竟然還比不上之前的手工特征。
其實這篇文章的意義,不在于它的效果,作者不僅提出了當時最大的視頻理解數(shù)據(jù)集Sport1M,而且把你能想到的,最直接的方式,全都試了一遍,為后續(xù)的工作做了一個很好的鋪墊。這才有了深度學習在視頻領域的飛速發(fā)展。所以到了18、19年,視頻理解(或者動作識別),已經(jīng)是CV領域排名前5、6的關鍵詞。
Two-Stream Networks 雙流網(wǎng)絡
所謂two-stream是指空間stream
和時間stream
,視頻可以分成空間與時間兩個部分:Spatio Stream Convet處理靜態(tài)的幀畫面,輸入是單個幀畫面
,得到畫面中物體的特征,還可以使用ImageNet challenge數(shù)據(jù)集種有標注的圖像數(shù)據(jù)進行預訓練。Temporal Stream Convet則是通過多幀畫面的光流位移來獲取畫面中物體的運動信息,其輸入由多個連續(xù)幀之間的光流位移
場疊加而成,這種輸入顯式地描述了視頻幀之間的運動,這使得識別更加容易,因為網(wǎng)絡不需要隱式地估計運動。兩個不同的stream都通過CNN實現(xiàn),最后進行信息融合。
光流(Optical flow) 是由一些位移矢量場(displacement vector fields)(每個矢量用dt表示)組成的,其中dt是一個向量,表示第t幀的displacement vector,是通過第t和第t+1幀圖像得到的。dt包含水平光流
d
t
x
dt_x
dtx?和豎直光流
d
t
y
dt_y
dty?。因此如果一個video有L幀,那么一共可以得到2L個channel的optical flow,然后才能作為temporal stream convnet網(wǎng)絡的輸入。(一般用TVL1算法)
所以如果假設一個video frame的寬和高分別是w和h,那么Temporal stream convnet輸入的光流圖像維度應該是下面這樣的。其中 t 表示任意的一幀。
I
t
?
R
w
×
h
×
2
L
I_t\subseteq R^{w \times h \times 2L}
It??Rw×h×2L
本文實驗討論了2種光流:光流棧(Optical flow stacking)
(計算起始幀與每幀之間的光流,然后簡單的stacking)、軌跡疊加(Trajectory stacking)
(計算相鄰兩幀之間的光流,假設第一幀的某個像素點,我們可以通過光流來追蹤它在視頻中的軌跡,即用來描述一個對應特征點連續(xù)的光流變化)
multi-task learning:首先原來的網(wǎng)絡(temporal stream convnet)在全連接層后只有一個softmax層,現(xiàn)在要變成兩個softmax層,一個用來計算HDMB-51數(shù)據(jù)集的分類輸出,另一個用來計算UCF-101數(shù)據(jù)集的分類輸出,這就是兩個task。這兩條支路有各自的loss,最后回傳loss的時候采用的是兩條支路loss的和。
問題:1.缺乏長時間建模
(LSTM、3D CNN、TSN);2.雙流網(wǎng)絡的early fusion
效果怎么樣?(early fusion)3.為什么軌跡光流
比光流棧
效果差?(TDD)
TSN 時序分段網(wǎng)絡
做對了什么?
抽幀策略
一段完整的視頻,包含的視頻幀是非常多的,那么全部處理這些視頻幀數(shù)據(jù)顯然是不現(xiàn)實的,所以只能采用抽幀策略,TSN中的抽幀策略,個人感覺比較不錯。
按照新的視頻時間分段采樣
方式,而不是按照固定頻率去采樣,使得網(wǎng)絡分析的時間范圍更長
。每個雙流網(wǎng)絡是共享參數(shù)的。
在TSN中,視頻首先被等間隔分為K個片段
,根據(jù)視頻的時間分布來設置K,比如K=16,即一段視頻被分成了16個片段,在每個片段
中隨機抽取一幀數(shù)據(jù)作為輸入
(測試的時需要固定,一般測試的時候可以選擇中間幀),這樣避免了采用過于連續(xù)幀之間的信息冗余,同時又盡可能利用到更多的視頻信息。
數(shù)據(jù)增強
由于數(shù)據(jù)有限,為了更好的訓練模型,作者采用了數(shù)據(jù)增強,主要包括location jittering
, horizontal flipping
, corner cropping
, and scale jittering
,作者通過實驗證明了在圖像領域常用的數(shù)據(jù)增強手段,在視頻分類的任務中同樣有效。
多幀融合
TSN中,作者采用的多幀融合
(不同時間片段分類結果的融合
)方式比較簡單,直接取了平均
(先空間融合,再時間融合,最后時空取平均),后續(xù)會介紹更為復雜的視頻幀融合的方式。
多模態(tài)融合
這里的多模態(tài)融合是指RGB輸入和光流輸入的融合,作者采用的是結果融合
。由于這篇論文是16年的文章,所以多模態(tài)融合的方式也相對簡單,而且多模態(tài)還包括視頻、文本之間的多模態(tài),后續(xù)也會專門講多模態(tài)視頻分類。
TSM 時間轉(zhuǎn)移模塊
使用2D的復雜度,達到3D CNN的性能。TSM的核心思想是將部分通道C沿時間T維進行移位
,便于相鄰幀之間的信息交換。可以插入到任何二維CNN中,以實現(xiàn)時間建模。
時間轉(zhuǎn)移模塊如下圖所示。為了簡單起見,只顯示了時間T和通道C維度,而忽略了批大小N、高度H和寬度W,因為它們與我們的討論無關。
在圖a中,我們描述了一個包含C通道和T幀的張量。不同時間戳的特征在每行中表示為不同的顏色。傳統(tǒng)的二維CNN在不同的信道間進行操作,即在不進行時間融合的情況下,沿每一行單獨進行操作。在時間維度上,我們將1 / 4通道C在時間維度T上移動了- 1個單位,將另一個單位移動了+1個單位,剩下的一半沒有移動(圖2b)。“四分之一”是我們將在消融研究中討論的超參數(shù)。哪一1/4shift并不重要,因為下一層的權重會在訓練中適應。因此,我們將幀 t - 1
、t
、t + 1
的時間信息混合在一起,類似于核大小為3的一維卷積,但計算成本為零。乘法累加被推到下一層。利用二維卷積的信道間融合能力,實現(xiàn)了原始的時域間融合。
將視頻分成N段,每段采樣一幀。采樣的幀跨越整個視頻,支持長期的時間關系建模。然后將二維CNN應用于每一幀,提取空間特征。在每個二維殘差塊內(nèi),我們的時間移位模塊將部分通道沿時間維數(shù)移動±1
,融合時間信息。然后,通過沿通道的二維卷積處理移位激活。
我們發(fā)現(xiàn),將時間移位模塊插入到殘差分支中是有益的,而不是外部的,這樣就不會損害主干二維CNN的空間特征學習能力。我們還添加了一個額外的時間最大池層來減少時間維度,與純2D CNN相比,實現(xiàn)了更少的計算。
6.2.3 3D卷積
能不能不用計算光流(計算光流即麻煩又耗時,無法實現(xiàn)工業(yè)實時落地),直接從多幀圖像中提取時序與運動信息?
3D卷積:增加時間維度time(幀)
C3D 三維卷積
3D ConvNets 更適合學習時空特征,通過3D卷積(3x3x3)和3D池化(1x2x2時序上不做下采樣,保留時序信息;2x2x2時序上也做下采樣),可以對時間信息建模,而2D卷積只能在空間上學習特征。
video clips size:
c
?
l
?
h
?
w
c*l*h*w
c?l?h?w,其中,c是通道數(shù)量,l是幀長度,h是幀高,w是幀寬(實際上是3 x 16 x 112 x 112)
3D kernel size:
d
?
k
?
k
d*k*k
d?k?k, d是 kernel 時域深度(d<l),k是 kernel 空間尺寸(實際上就是把3x3卷積核,都變成3x3x3)
class C3D(nn.Module):
# C3D模型的實現(xiàn)挺簡單的。想要得到時序上的關系,那么把時序也納入卷積,即二維卷積變?nèi)S,實現(xiàn)可以看作是3D版VGG
def __init__(self):
super(C3D, self).__init__()
# 所有3D卷積濾波器均為3×3×3,步長為1×1×1
self.conv1 = nn.Conv3d(3, 64, kernel_size=(3, 3, 3), padding=(1, 1, 1))
# 為了保持早期的時間信息,pool1有些許不同
self.pool1 = nn.MaxPool3d(kernel_size=(1, 2, 2), stride=(1, 2, 2))
self.conv2 = nn.Conv3d(64, 128, kernel_size=(3, 3, 3), padding=(1, 1, 1))
self.pool2 = nn.MaxPool3d(kernel_size=(2, 2, 2), stride=(2, 2, 2))
self.conv3a = nn.Conv3d(128, 256, kernel_size=(3, 3, 3), padding=(1, 1, 1))
self.conv3b = nn.Conv3d(256, 256, kernel_size=(3, 3, 3), padding=(1, 1, 1))
self.pool3 = nn.MaxPool3d(kernel_size=(2, 2, 2), stride=(2, 2, 2))
self.conv4a = nn.Conv3d(256, 512, kernel_size=(3, 3, 3), padding=(1, 1, 1))
self.conv4b = nn.Conv3d(512, 512, kernel_size=(3, 3, 3), padding=(1, 1, 1))
self.pool4 = nn.MaxPool3d(kernel_size=(2, 2, 2), stride=(2, 2, 2))
self.conv5a = nn.Conv3d(512, 512, kernel_size=(3, 3, 3), padding=(1, 1, 1))
self.conv5b = nn.Conv3d(512, 512, kernel_size=(3, 3, 3), padding=(1, 1, 1))
self.pool5 = nn.MaxPool3d(kernel_size=(2, 2, 2), stride=(2, 2, 2), padding=(0, 1, 1))
# 3個FC輸出單元
self.fc6 = nn.Linear(8192, 4096)
self.fc7 = nn.Linear(4096, 4096)
self.fc8 = nn.Linear(4096, 487) #最后對應著487個類別(視數(shù)據(jù)集而定)
self.dropout = nn.Dropout(p=0.5)
self.relu = nn.ReLU()
self.softmax = nn.Softmax() #得到對應類別的預測概率
def forward(self, x):
# forward按模型架構圖來就好
h = self.relu(self.conv1(x))
h = self.pool1(h)
h = self.relu(self.conv2(h))
h = self.pool2(h)
h = self.relu(self.conv3a(h))
h = self.relu(self.conv3b(h))
h = self.pool3(h)
h = self.relu(self.conv4a(h))
h = self.relu(self.conv4b(h))
h = self.pool4(h)
h = self.relu(self.conv5a(h))
h = self.relu(self.conv5b(h))
h = self.pool5(h)
h = h.view(-1, 8192)
h = self.relu(self.fc6(h))
h = self.dropout(h)
h = self.relu(self.fc7(h))
h = self.dropout(h)
logits = self.fc8(h)
probs = self.softmax(logits)
return probs
C3D的性能瓶頸:其優(yōu)點就是可以同時提取時空信息;缺點也顯而易見,即具有更龐大的參數(shù)數(shù)量從而更難訓練,因此一般3D網(wǎng)絡的深度都較淺,單這樣又影響了模型的表達能力,此外,沒有辦法能夠有效的把2D網(wǎng)絡的預訓練權重遷移到3D網(wǎng)絡。
I3D 膨脹三維卷積
視頻分類相較于圖像分類等任務,多了一個時間維度。而Imagenet挑戰(zhàn)賽中的各種2D卷積網(wǎng)絡沒有辦法同時提取時空信息,怎么把2D卷積預訓練的權重,擴展到3D卷積上呢? 作者通過了Inflated膨脹
(模型和權重從2D變成3D),提出了Two-Stream Inflated 3D ConvNets (I3D)
模型。
Inflated膨脹
:
-
對于模型,本文直接把2D卷積或2D池化的 NxN 的kernel變成 NxNxN 的kernel。
-
對于預訓練權重,首先把2D卷積核在時間維度上復制N份,然后除以時間維度的維度N,這樣做是為了擴展到3D卷積之后,每一層都仍然獲取到類似大小的輸出相應。如果不除以N,就會出現(xiàn)輸出相應會增大N倍,改變了預訓練時網(wǎng)絡所學習到的數(shù)據(jù)分布。
Imagenet挑戰(zhàn)賽中有很多優(yōu)秀的模型,作者使用Inception-V1作為骨干網(wǎng)絡,將其從2D擴展為3D。
實驗表明:加上光流分支的雙流I3D網(wǎng)絡效果更好。同時I3D把UCF-101
和HMDB-51
兩個數(shù)據(jù)集刷爆了,后續(xù)大家都開始使用Kinetics-400
數(shù)據(jù)集進行測試。
I3D局限性:雖然證明了2D遷移到3D的可行性,但3D卷積計算量非常大,如何改進仍需進一步探索。
3D卷積計算量 解決辦法:
由于I3D把分類做到98%之后已經(jīng)又沒有什么提升空間了,所以人們轉(zhuǎn)向提升效率,著名的有P3D(偽3D),S3D(分開3D),R(2+1)D(把3D變成2+1),這三種模型都考慮把3D CNN拆開,以求得到更好的效率。
-
P3D
用一個1×3×3的空間方向卷積和一個3×1×1的時間方向卷積近似原3×3×3卷積,通過組合三種不同的模塊結構,進而得到P3D ResNet。 -
S3D
,將 3x3x3 卷積核都換成 1x3x3 + 3x1x1 卷積,在每個 3x1x1 卷積后加入了 Self-attention 模塊 (即文中的 spatio-temporal feature gating)。 -
ResNet (2+1)D
,把一個3D卷積分解成為一個2D卷積空間卷積和一個1D時間卷積,改進ResNet內(nèi)部連接中的卷積形式,然后堆疊成超深網(wǎng)絡,明顯降低了3D卷積的參數(shù)量。 -
D3D
,那么自然可以想到能否結合光流的方法,如D3D等。它的著手點是由于一般的3D方法加入光流仍有提升,說明3D CNN的學習并沒有很充分,但是加入光流之后免不了速度又慢,怎么才比較好?于是D3D使用蒸餾,讓3D模型在光流的監(jiān)督下進行teacher-student的學習。
①R(2+1)D——混合2D 3D
②分解卷積核
③減少通道關聯(lián)
Non-Local 非局部神經(jīng)網(wǎng)絡
Non-local Neural Networks非局部神經(jīng)網(wǎng)絡模型(即插即用模塊),為了有效捕捉序列中各個元素間的依賴關系,將Self Attention
(替代LSTM)用于長距離時空建模
。在這里,所謂的序列可以是單幅圖像的不同位置(空間序列),也可以是視頻中的不同幀(時間序列),還可以是視頻中不同幀的不同位置(時空序列)。
Non-Local bolck:其實就是self attention。
設輸入的視頻一共有 T 幀(在上圖中 T=5 ),針對每一幀圖像獲取的特征圖維度為 H × W × d v H \times W \times d_v H×W×dv? ,其中 H , W , d v H,W,d_v H,W,dv? 分別為每幀圖像特征圖的高度、寬度以及通道數(shù)(通道數(shù)即特征維度),那么輸入序列 x x x 可以表達為一個 T × H × W × d v T \times H \times W \times d_v T×H×W×dv? 維張量。Non-local塊的處理過程為:
第一步,對輸入序列分別進行三個 1x1x1 的卷積操作(輸出特征圖通道數(shù)為 d v / 2 d_v/2 dv?/2 ),得到三個尺寸為 T × H × W × ( d v / 2 ) T \times H \times W \times (d_v/2) T×H×W×(dv?/2) 的特征圖;
第二步,對三個特征圖進行形狀變換(“reshape”操作),得到三個特征圖的矩陣表示,將這三個矩陣分別記作 Q , K , V Q,K,V Q,K,V,其維度分別為 T H W × ( d v / 2 ) THW \times (d_v/2) THW×(dv?/2) 、 ( d v / 2 ) × T H W (d_v/2) \times THW (dv?/2)×THW 和 T H W × ( d v / 2 ) THW \times (d_v/2) THW×(dv?/2) (這里 Q , K , V Q,K,V Q,K,V 即為 W θ x , W ? x , W g x W_{\theta}x,W_{\phi}x,W_{g}x Wθ?x,W??x,Wg?x );
第三步,利用 s o f t m a x ( Q T K ) softmax(Q^TK) softmax(QTK) 計算歸一化的注意力權重系數(shù);
第四步,將注意力權重系數(shù)作用到 V 上,即計算 s o f t m a x ( Q T K ) V softmax(Q^TK)V softmax(QTK)V ,得到一個 T H W × ( d v / 2 ) THW \times (d_v/2) THW×(dv?/2) 矩陣;
第五步,將第四步得到的矩陣進行形狀變換,得到一個 T × H × W × ( d v / 2 ) T \times H \times W \times (d_v/2) T×H×W×(dv?/2) 維張量,將該張量記為 y ;
第六步,對張量 y 進行 1x1x1 的卷積操作(輸出特征圖通道數(shù)為 d y d_y dy? ),得到一個 T × H × W × ( d v / 2 ) T \times H \times W \times (d_v/2) T×H×W×(dv?/2) 維張量,該張量即為 W z y W_zy Wz?y ,然后再將其與 x 相加得到輸出 z 。
SlowFast 快慢網(wǎng)絡
SlowFast使用了一個慢速高分辨率3DCNN(Slow通道)
來分析視頻中的靜態(tài)內(nèi)容(環(huán)境)
,同時使用一個快速低分辨率3DCNN(Fast通道)
來分析視頻中的動態(tài)內(nèi)容(動作)
。為了更好的提取slow分支特征,slow通道的計算會更加復雜,Slow通道的計算成本要比Fast通道高4倍。
雙分支提取
Slow通道和Fast通道都使用i3D RestNet
模型,捕捉若干幀之后立即運行3D卷積操作:
- Slow通道使用一個較大的時序跨度(即每秒跳過的幀數(shù)),通常每隔16幀取1幀(共32幀取4幀)。
- Fast通道使用一個非常小的時序跨度τ/α,其中α通常設置為8,每隔1幀取1幀(共32幀取32幀)。Fast通道通過
使用小得多的卷積寬度(kernel數(shù)量=out_channel)來保持輕量化
,通常設置為慢通道卷積寬度的?,這個值被標記為β。使用小一些的卷積寬度的原因是Fast通道需要的計算量要比Slow通道小4倍,雖然它的時序頻率更高。
特征融合
來自Fast通道的數(shù)據(jù)通過側(cè)向連接
被送入Slow通道,這使得Slow通道可以了解Fast通道的處理結果。單一數(shù)據(jù)樣本的shape在兩個通道間是不同的,這要求SlowFast對Fast通道的結果進行數(shù)據(jù)維度變換
,然后融入Slow通道。論文給出了三種進行數(shù)據(jù)維度變換的技術思路,其中第三個思路在實踐中最有效。
效果:(3)>(1)>(2)
- (1)Time-to-channel:將{αT, S2, βC} 變形轉(zhuǎn)置為 {T , S2, αβC},就是說把α幀壓入一幀
- (2)Time-strided采樣:簡單地每隔α幀進行采樣,{αT , S2, βC} 就變換為 {T , S2, βC}
- (3)Time-strided卷積: 用一個5×12的核進行3d卷積, 2βC輸出頻道,跨度= α.
有趣的是,研究人員發(fā)現(xiàn)雙向側(cè)鏈接
,即將Slow通道結果也送入Fast通道,對性能沒有改善
。
在每個通道的末端,SlowFast執(zhí)行全局平均池化,一個用來降維的標準操作,然后組合兩個通道的結果并送入一個全連接分類層,該層使用softmax來識別圖像中發(fā)生的動作。
6.2.4 弱監(jiān)督
IG-65M
OmniSource
6.2.5 Transformer based
基于Transformer的video工作看這篇:Transformer-based Video Understanding
TimeSformer
FBAI團隊的TimeSformer,這也是第一篇使用純Transformer結構在視頻識別上的文章。
https://zhuanlan.zhihu.com/p/449323671
ViViT
https://zhuanlan.zhihu.com/p/451386368
Video Swin Transformer
VATT
對比學習引入視頻特征學習
BeiT
Bert預訓練
完形填空
BeiT
解耦表征學習
高效計算
視頻幀內(nèi)部、幀之間的自注意力計算,計算復雜度非常高
VideoSwin
Video MobileFormer
DynamicViT and AdaViT
AdaFrame
Ada3D
STTS
6.3 Dataset
Video領域的數(shù)據(jù)集(按時間劃分):Videos Understanding Dataset
文章來源:http://www.zghlxwxcb.cn/news/detail-666219.html
七、多模態(tài)video預訓練
多模態(tài)video預訓練看這篇:Multimodal Video Pre-trainin文章來源地址http://www.zghlxwxcb.cn/news/detail-666219.html
到了這里,關于視頻理解多模態(tài)大模型(大模型基礎、微調(diào)、視頻理解基礎)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!