ActivityNet Kinetics Challenge 2018奪冠|基於PaddlePaddle的...

2021-01-10 CSDN技術社區

 百度視覺技術部聯合PaddlePaddle團隊近期開源了用於視頻分類的StNet框架。StNet框架為ActivityNet Kinetics Challenge 2018中奪冠的網絡框架。本次開源了基於ResNet50實現的StNet模型。該模型提出「super-image"的概念,在super-image上進行2D卷積,建模視頻中局部時空相關性。另外通過temporal modeling block建模視頻的全局時空依賴,最後用一個temporal Xception block對抽取的特徵序列進行長時序建模。該框架在動作識別方面優於一些最先進的方法,可以在識別精度和模型複雜性之間取得令人滿意的平衡。

應用背景

視頻當中的動作識別任務已經獲得了許多從事計算機視覺與機器學習研究人員的重點關注。越來越多的視頻錄像設備的普及,讓更多好玩有趣的視頻豐富了人們的業餘生活。但是過多的視頻已經遠遠超過人工能夠處理的範圍,因此發展針對各種應用場景的自動視頻理解算法變得尤為重要,比如:視頻推薦、人類行為分析、視頻監控等等。

深度學習在靜態圖像理解上取得了巨大成功,但是針對視頻時空建模中最有效的網絡架構是什麼還尚不清楚,因此我們將新探索的用於視頻中局部和全局時空建模的時空網絡(StNet)架構與現有的CNN+RNN模型或是基於純3D卷積的方法進行比對分析,來尋求更有效的網絡架構。

現有方法分析

由於深度學習在圖片識別中的卓越表現,該技術也被應用到了解決視頻分類的場景當中。這其中就有兩個主要的研究方向,一個是應用CNN+RNN框架結構來對視頻序列建模,還有一個是單純的利用卷積網絡結構來識別視頻當中的行為。但是在動作識別準確性方面,目前的行動識別方法仍然遠遠落後於人類表現。現有方法存在如下待改進之處。

n  CNN+RNN模型

1.      對於CNN+RNN的方法,CNN前饋網絡部分用來空間建模(spatial modeling),LSTM或者GRU用來時域建模(temporal modeling),由於該模型自身的循環結構,這導致了端到端的優化困難。

2.      單獨訓練的CNN和RNN部分對於聯合的時空特徵表示學習(representation learning)不是最佳的。

n  純卷積網絡結構

1.      2D卷積網絡結構在抽取外觀特徵(appearance features)的時候,只利用了局部的空間信息而忽略了局部的時域信息;此外,對於時域動態,2D卷積網絡僅融合了幾個局部片段的分類得分並計算平均值,這種取平均的方法在捕捉時空信息方面的性能有待提高。

2.      3D卷積網絡結構可以同時在空間和時間上建模進而得到令人滿意的識別任務結果。眾所周知,淺層的神經網絡與深層神經網絡相比,淺層網絡在大數據集中,表現出較差的表示學習能力。當進行大規模數據集中的人類行為識別任務時,一方面淺層的3D卷積網絡得到的視頻特徵的可辨別性相對深層網絡較弱,另一方面,深層的3D卷積網絡會導致過大的模型以及在訓練中和推理階段中過高的計算成本。

StNet模型

局部信息和全局信息對識別視頻中的行為都起著非常重要的作用。

例如,在圖1(a)中,我們可以通過局部的空間信息來識別搬磚和搬石頭,換而言之,在該圖中,局部的空間信息(local spatial information)是我們識別行為至關重要的因素。而在圖1(b)中,全局時空(global spatial-temporal)線索是用來區分」摞卡片」和」飛卡片」這兩個場景行為的關鍵證據。

圖1局部信息足以區分」搬磚」和」搬石頭」;全局時空信息可以分別」摞卡片」和」飛卡牌」

StNet可以由先進的2D卷積網絡改造可得,比如:ResNet,InceptionResnet等等。圖2展示了如何從Resnet構建StNet。

圖2:基於ResNet骨架構建的StNet。StNet的輸入是T ×3N ×H ×W張量。通過2D卷積對局部時空模型進行模型。在Res3和Res4塊之後插入時序卷積模塊進行全局時空特徵建模。最後,用時序Xception模塊進一步建模時序動態信息。3D卷積的設置是(# Output Channel, (temporal kernel size, height kernel size, width kernel size), # groups) -(Ci, (3,1,1), 1)

1.     超圖像(Super-Image):

StNet的輸入為均勻採樣的T個局部連續N幀的視頻幀。局部的連續N幀組合成一個」超圖」,這使得」超圖」保留原始視頻各個局部的時空信息。所以網絡的輸入是一個尺寸為T*3N*H*W的張量。

2.     時域建模塊(Temporal Modeling Block)

採用2D卷積對T個」超圖」進行局部時空關係的建模,可以避免 3D 卷積網絡參數量和計算量大的問題,進而生成T個局部時空特徵圖。通過堆疊3D卷積/2D卷積模塊,對T個局部時空特徵圖進行全局時空信息的建模,這對理解整個視頻起到至關重要的作用。具體而言,我們選擇插入2個時域建模塊在Res3和Res4塊之後。時域建模塊是為了捕捉視頻序列內的長期時域動態,可以利用Conv_3d-BN3d-RELU架構實現。將3D卷積空間維度的kernel size設置成1以節省模型的參數量與計算量。

3.     時域Xception模塊(Temporal Xception Block):

時域Xception模塊是為了在特徵序列之間進行有效的時域建模,並能輕鬆地進行端到端優化。Xception模塊的設計主要基於時序1維卷積,採用了channel-wise和temporal-wise分離的策略進一步減少計算量與模型參數量。

時域Xception塊結構如下:

圖3:時域 Xception 塊(TXB)。時域Xception 塊的詳細配置如(a)所示:括號中的參數表示 1D卷積的(#kernel,kernel size,padding,#groups)配置。綠色的塊表示 channel-wise 的 1D 卷積,藍色的塊表示 temporal-wise 的 1D 卷積。(b)描繪了 channel-wise 和 temporal-wise 的 1D 卷積。TXB 的輸入是視頻的特徵序列,表示為 T×C_in 張量。Channel-wise 1D 卷積的每個卷積核僅在一個通道內沿時間維度應用。Temporal-wise 的 1D 卷積核在每個時序特徵中跨所有通道進行卷積

基於PaddlePaddle 實戰

環境準備:PaddlePaddle Fluid 1.3 + cudnn5.1 。使用cudnn7.0以上版本時batchnorm計算moving mean和moving average會出現異常,此問題還在修復中。建議用戶安裝PaddlePaddle時指定cudnn版本。

數據準備:Kinetics數據集是DeepMind公開的大規模視頻動作識別數據集,有Kinetics400與Kinetics600兩個版本。這裡使用Kinetics400數據集。

 

        ActivityNet官方提供了Kinetics的下載工具,具體參考其官方repo 即可下載Kinetics400的mp4視頻集合。將kinetics400的訓練與驗證集合分別下載到:

        dataset/kinetics/data_k400/train_mp4dataset/kinetics/data_k400/val_mp4。

官方repo:https://github.com/activitynet/ActivityNet/tree/master/Crawler/Kinetics

模型訓練:數據準備完畢後,通過以下方式啟動訓練(方法 1),同時我們也提供快速啟動腳本 (方法 2)

#方法1

python train.py --model-name=STNET

--config=./configs/stnet.txt

--save-dir=checkpoints

--log-interval=10

--valid-interval=1

#方法2

bash scripts/train/train_stnet.sh

 

用戶也可下載Paddle Github上已發布模型通過--resume指定權重存放路徑進行finetune等開發。

數據預處理說明:模型讀取Kinetics-400數據集中的mp4數據,每條數據抽取seg_num段,每段抽取seg_len幀圖像,對每幀圖像做隨機增強後,縮放至target_size。

訓練策略:

·          採用Momentum優化算法訓練,momentum=0.9

·          權重衰減係數為1e-4

·          學習率在訓練的總epoch數的1/3和2/3時分別做0.1的衰減

模型評估:通過以下方式(方法 1)進行模型評估,同樣我們也提供了快速啟動的腳本(方法 2):

#方法1

python test.py --model-name=STNET

--config=configs/stnet.txt

--log-interval=1

--weights=$PATH_TO_WEIGHTS

 

#方法2

bash scripts/test/test__stnet.sh

·          使用scripts/test/test_stnet.sh進行評估時,需要修改腳本中的--weights參數指定需要評估的權重。

·          若未指定--weights參數,腳本會下載已發布模型進行評估。

模型推斷:可通過如下命令進行模型推斷:

python infer.py --model-name=stnet

--config=configs/stnet.txt

--log-interval=1

--weights=$PATH_TO_WEIGHTS

--filelist=$FILELIST

 

·          模型推斷結果存儲於STNET_infer_result中,通過pickle格式存儲。

·          若未指定--weights參數,腳本會下載已發布模型進行推斷。

模型精度:當模型取如下參數時,在 Kinetics400數據集上的指標為:

參數取值

評估精度

傳送門:

PaddlePaddle Github: https://github.com/PaddlePaddle 

StNet in PaddlePaddle Github:

https://github.com/PaddlePaddle/models/blob/develop/fluid/PaddleCV/video/models/stnet

https://arxiv.org/abs/1811.01549

【免責聲明:CSDN本欄目發布信息,目的在於傳播更多信息,豐富網絡文化,稿件僅代表作者個人觀點,與CSDN無關。其原創性以及中文陳述文字和文字內容未經本網證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本網不做任何保證或者承諾,請讀者僅作參考,並請自行核實相關內容。凡註明為其他媒體來源的信息,均為轉載自其他媒體,轉載並不代表本網贊同其觀點,也不代表本網對其真實性負責。您若對該稿件由任何懷疑或質疑,請即與CSDN聯繫,我們將迅速給您回應並做處理。】

                 

相關焦點

  • PaddlePaddle 2.0.0 Beta 發布,API 體系升級,命令式編程完善
    以下為一些特殊的別名關係,推薦使用左邊的名稱: paddle.sigmoid -> paddle.tensor.sigmoid -> paddle.nn.functional.sigmoid paddle.tanh -> paddle.tensor.tanh -> paddle.nn.functional.tanh paddle.remainder -> paddle.mod
  • 520禮包 | 情感分析算法從原理到PaddlePaddle實戰全解
    若將基於LSTM的循環神經網絡表示的函數記為F,則其公式為:F由下列公式組合而成[7]:其中,it,ft,ct,ot,分別表示輸入門,遺忘門,記憶單元及輸出門的向量值,帶角標的W及b為模型參數,tanh為雙曲正切函數,⊙表示逐元素(elementwise)的乘法操作。
  • 經典目標檢測方法Faster R-CNN和Mask R-CNN|基於PaddlePaddle深度...
    而在 Faster R-CNN 的基礎上改進的 Mask R-CNN 在 2018 年被提出,並斬獲了 ICCV2017 年的最佳論文。Mask R-CNN 可以應用到人體姿勢識別,並且在實例分割、目標檢測、人體關鍵點檢測三個任務都取得了很好的效果。
  • 百度PaddlePaddle聯手Kubernetes,助力開發者高效訓練深度學習模型
    我們選擇的是基於容器(container based)的解決方案,因為由虛擬機(VM)引入的總開銷與我們的高效、實用這一目標相矛盾。基於我們對不同的基於容器(container based)解決方案的研究,Kubernetes 最符合我們的要求。
  • 推理引擎Paddle Inference改造三要點,ERNIE時延降低81.3%
    docker pull hub.baidubce.com/paddlepaddle/paddle:1.8.0-gpu-cuda10.0-cudnn7-trt6export CUDA_SO="$(\ls /usr/lib64/libcuda* | xargs -I{} echo '-v {}:{}') $(\ls /usr/lib64/libnvidia* | xargs -I
  • 23個系列分類網絡,10萬分類預訓練模型,這是飛槳PaddleClas百寶箱
    MobileNetV3 是一種基於 NAS 的新的輕量級網絡,與其他網絡相比,在相同的預測速度下,MobileNetV3 系列網絡的精度更有競爭力。百度的小夥伴基於 PaddleClas 提供的 ResNet_vd 系列網絡結構的訓練方法和預訓練模型,訓練了一批大規模圖像分類預訓練模型,並應用到實際圖像分類相關業務中。
  • 如何用Paddle Fluid API搭建簡單的神經網絡?這裡有一份編程指南
    import paddle.fluid as fluidy = fluid.layers.fc(input=x, size=128, bias_attr=True)2.#shape的三個維度含義分別是:channel、圖片的寬度、圖片的高度b = fluid.layers.data(name="image",shape=[3,None,None],dtype="float32")其中,dtype="int64" 表示有符號 64 位整數數據類型,更多 Paddle Fluid 目前支持的數據類型請在官網查閱:http://paddlepaddle.org
  • 百度發布 Paddle Fluid v1.3 版本,帶來多項重要更新
    開發 Transpose,Concat 和 Conv3d 三個基於 MKLDNN 的 kernel。修復 lrn operator 中 MKLDNN kernel 精度 bug,同時單 op 提速 1.3 倍。修復 MKLDNN 初始化佔用 5G 內存的問題,目前初始化佔用 500MB。
  • 長江白鱘滅絕了丨Chinese paddlefish in Yangtze River declared extinct
    Psephurus gladius, a Chinese paddlefish living in the Yangtze River, was
  • 百度Paddle Fluid v1.3版本官方正式發布
    基於PaddlePaddle的NLP裡程碑Bert模型新增支持NLP語義表示BERT模型,支持多機多卡訓練,支持混合精度訓練,訓練速度對比主流實現提升50%+,提供完整部署示例。預發布 intel CPU上的 預測 INT8 離線量化方案開發Conv2D,Pool2D,Quantize,Dequantize四個基於MKL-DNN的INT8 kernel。預發布Calibration的3個核心Python API(paddle.fluid.contrib.Calibrator)。
  • 基於DeepSpeech2實現中文語音識別,實施全流程講解,拿來即用
    PaddlePaddle是百度開源的深度學習框架,雖然不及Tensorflow和Pytorch使用廣泛,但它是我國最流行的深度學習框架,在Github上Star有12K+,百度也是相當重視它的推廣,同時它推出了paddle系列產品,如paddleOCR、paddleSlim、paddleXpaddleLite、paddleHub等等,可滿足用戶不同的需求,它與Tensorflow相似度較高
  • 學習PaddlePaddle(飛槳)是正確的選擇
    在2018年我剛轉向人工智慧方向的時候,還沒有系統的學習機器學習理論知識,比如測試機、訓練集、學習率、優化器、評價等內容(統計學專業,多少有點基礎)。意氣風發的我就一上來就想要把tensorflow學好,結果就是可以學會框架怎麼用,但是永遠不知道為什麼要這樣用。迷途知返的我又花了一年的時間學習理論知識。