百度PaddlePaddle開源影片分類模型Attention Cluster,曾奪挑戰賽冠軍

pythontab發表於2019-03-15

百度PaddlePaddle




百度深度學習框架 PaddlePaddle 最近開源了用於影片分類的 Attention Cluster 模型。由於擁有卓越的分類能力,它曾助力百度計算機視覺團隊奪取了 ActivityNet Kinetis Challenge 2017 挑戰賽的冠軍。該模型透過帶 Shifting operation 的 Attention clusters,處理經過 CNN 模型抽取特徵的影片的 RGB、光流、音訊等資料,實現影片分類。


Attention Cluster 模型


影片分類問題在影片標籤、監控、自動駕駛等領域有著廣泛的應用,但它同時也是計算機視覺領域面臨的一項重要挑戰之一。


目前的影片分類問題大多是基於 CNN 或者 RNN 網路實現的。眾所周知,CNN 在影像領域已經發揮了重大作用。它具有很好的特徵提取能力,透過卷積層和池化層,可以在影像的不同區域提取特徵。RNN 則在獲取時間相關的特徵方面有很強的能力。


Attention Cluster 在設計上僅利用了 CNN 模型,而沒有使用 RNN,主要是基於影片的以下幾個特點考慮:

 

0001.png

圖 1 影片幀的分析


首先,一段影片的連續幀常常有一定的相似性。在圖 1(上)可以看到,除了擊球的動作以外,不同幀幾乎是一樣的。因此,對於分類,可能從整體上關注這些相似的特徵就足夠了,而沒有必要去特意觀察它們隨著時間的細節變化。


其次,影片幀中的區域性特徵有時就足夠表達出影片的類別。比如圖 1(中),透過一些區域性特徵,如牙刷、水池,就能夠分辨出『刷牙』這個動作。因此,對於分類問題,關鍵在於找到幀中的關鍵的區域性特徵,而非去找時間上的線索。


最後,在一些影片的分類中,幀的時間順序對於分類不一定是重要的。比如圖 1(下),可以看到,雖然幀順序被打亂,依然能夠看出這屬於『撐杆跳』這個類別。


基於以上考慮,該模型沒有考慮時間相關的線索,而是使用了 Attention 機制。它有以下幾點好處:


1. Attention 的輸出本質上是加權平均,這可以避免一些重複特徵造成的冗餘。

2. 對於一些區域性的關鍵特徵,Attention 能夠賦予其更高的權重。這樣就能夠透過這些關鍵的特徵,提高分類能力。

3. Attention 的輸入是任意大小的無序集合。無序這點滿足我們上面的觀察,而任意大小的輸入又能夠提高模型的泛化能力。


當然,一些影片的區域性特徵還有一個特點,那就是它可能會由多個部分組成。比如圖 1(下)的『撐杆跳』,跳、跑和著陸同時對這個分類起到作用。因此,如果只用單一的 Attention 單元,只能獲取影片的單一關鍵資訊。而如果使用多個 Attention 單元,就能夠提取更多的有用資訊。於是,Attention Cluster 就應運而生了!在實現過程中,百度計算機視覺團隊還發現,將不同的 Attention 單元進行一次簡單有效的『位移操作』(shifting operation),可以增加不同單元的多樣性,從而提高準確率。


接下來我們看一下整個 Attention Cluster 的結構。

 

0002.png

 圖 2 Attention Cluster 的模型結構

 

整個模型可以分為三個部分:


1. 區域性特徵提取。透過 CNN 模型抽取影片的特徵。提取後的特徵用 X 表示,如公式(1)所示:0003.png(1)X 的維度為 L,代表 L 個不同的特徵。


2. 區域性特徵整合。基於 Attention 來獲取全域性特徵。Attention 的輸出本質上相當於做了加權平均。如公式(2)所示,v 是一個 Attention 單元輸出的全域性特徵,a 是權重向量,由兩層全連線層組成,如公式(3)所示。實際實現中,v 的產生使用了 Shifting operation,如公式(4)所示,其中α和β是可學習的標量。它透過對每一個 Attention 單元的輸出新增一個獨立可學習的線性變換處理後進行 L2-normalization,使得各 Attention 單元傾向於學習特徵的不同成分,從而讓 Attention Cluster 能更好地學習不同分佈的資料,提高整個網路的學習表徵能力。由於採用了 Attention clusters,這裡會將各個 Attention 單元的輸出組合起來,得到多個全域性特徵 g,如公式(5)所示。N 代表的是 clusters 的數量。


0004.png


3. 全域性特徵分類。將多個全域性特徵拼接以後,再透過常規的全連線層和 Softmax 或 Sigmoid 進行最後的單標籤或多標籤分類。


用 PaddlePaddle 訓練 Attention Cluster


PaddlePaddle 開源的 Attention Cluster 模型,使用了 2nd-Youtube-8M 資料集。該資料集已經使用了在 ImageNet 訓練集上 InceptionV3 模型對特徵進行了抽取。

如果執行該模型的樣例程式碼,要求使用 PaddlePaddle Fluid V1.2.0 或以上的版本。


資料準備:首先請使用 Youtube-8M 官方提供的連結下載訓練集和測試集,或者使用官方指令碼下載。資料下載完成後,將會得到 3844 個訓練資料檔案和 3844 個驗證資料檔案(TFRecord 格式)。為了適用於 PaddlePaddle 訓練,需要將下載好的 TFRecord 檔案格式轉成了 pickle 格式,轉換指令碼請使用 PaddlePaddle 提供的指令碼 dataset/youtube8m/tf2pkl.py。


  • 訓練集:http://us.data.yt8m.org/2/frame/train/index.html

  • 測試集:http://us.data.yt8m.org/2/frame/validate/index.html

  • 官方指令碼:https://research.google.com/youtube8m/download.html


模型訓練:資料準備完畢後,透過以下方式啟動訓練(方法 1),同時我們也提供快速啟動指令碼 (方法 2)


# 方法 1


python train.py --model-name=AttentionCluster 
        --config=./configs/attention_cluster.txt
        --save-dir=checkpoints 
        --log-interval=10 
        --valid-interval=1


# 方法 2


bash scripts/train/train_attention_cluster.sh


使用者也可下載 Paddle Github 上已釋出模型透過--resume 指定權重存放路徑進行 finetune 等開發。


資料預處理說明: 模型讀取 Youtube-8M 資料集中已抽取好的 rgb 和 audio 資料,對於每個影片的資料,均勻取樣 100 幀,該值由配置檔案中的 seg_num 引數指定。


模型設定: 模型主要可配置引數為 cluster_nums 和 seg_num 引數。其中 cluster_nums 是 attention 單元的數量。當配置 cluster_nums 為 32, seg_num 為 100 時,在 Nvidia Tesla P40 上單卡可跑 batch_size=256。


訓練策略:


  • 採用 Adam 最佳化器,初始 learning_rate=0.001

  • 訓練過程中不使用權重衰減

  • 引數主要使用 MSRA 初始化


模型評估:可透過以下方式(方法 1)進行模型評估,同樣我們也提供了快速啟動的指令碼(方法 2):


# 方法 1


python test.py --model-name=AttentionCluster 
        --config=configs/attention_cluster.txt
        --log-interval=1 
        --weights=$PATH_TO_WEIGHTS


# 方法 2


bash scripts/test/test_attention_cluster.sh


  • 使用 scripts/test/test_attention_cluster.sh 進行評估時,需要修改指令碼中的--weights 引數指定需要評估的權重。

  • 若未指定--weights 引數,指令碼會下載已釋出模型進行評估


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


python infer.py --model-name=attention_cluster 
        --config=configs/attention_cluster.txt
        --log-interval=1 
        --weights=$PATH_TO_WEIGHTS 
        --filelist=$FILELIST


  • 模型推斷結果儲存於 AttentionCluster_infer_result 中,透過 pickle 格式儲存。

  • 若未指定--weights 引數,指令碼會下載已釋出模型 model 進行推斷


模型精度:當模型取如下引數時,在 Youtube-8M 資料集上的指標為:


引數取值:

0005.png


評估精度:


0006.png


傳送門:

PaddlePaddle 

Github: https://github.com/PaddlePaddleAttention 

Cluster in PaddlePaddle 

Github:https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/video/models/attention_cluster

Reference:Xiang Long, Chuang Gan, Gerard de Melo, Jiajun Wu, Xiao Liu, Shilei Wen, Attention Clusters: Purely Attention Based Local Feature Integration for Video Classification

https://arxiv.org/abs/1711.09550





相關文章