AI作者:Chan Joya
AI編輯:田旭
Pythia,她是古希臘的阿波羅神女祭司,以傳達阿波羅神的神諭而聞名,被認為能預知未來。她的名字,被 Facebook AI Research 將賦給了在 VQA 2018 Challenge 上的冠軍模型。Pythia 以 VQA 2017 Challenge 的冠軍模型 Up-Down 為基本方法,輔助以了諸多工程細節上的調整,這使得 Pythia 較往年增加了約 2% 的性能提升(70.34% → 72.25%)。在這裡,我們將嘗試去解讀這個模型。
論文:Pythia v0.1: the Winning Entry to the VQA Challenge 2018
代碼:facebookresearch/pythia (雖然在提交結果時為 72.25%,但公開的代碼中達到的效果為 72.27%)
首先我們將會對 2017 VQA Challenge 的冠軍模型 Up-Down 進行解讀,而後再引入 Pythia 為其的改進,最後從代碼中去查看值得注意的實現部分。一起來看吧!
2017 VQA Challenge 冠軍,Up-Down 模型解讀
Bottom-Up and Top-Down Attention for Image Captioning and Visual Question Answering(CVPR'18,澳大利亞國立大學 & 京東 AI 研究院 & Microsoft Research & 阿德萊德大學 & 麥考瑞大學)
Tips and Tricks for Visual Question Answering: Learnings from the 2017 Challenge(CVPR'18,阿德萊德大學 & 澳大利亞國立大學 & Microsoft Research)
VQA 2017 Challenge 的冠軍模型體現在這兩篇文章中,我們放在一起介紹。CVPR'18 這一篇是方法論,Tips and Tricks 算是工程實現方面的報告。在方法論中,主打的就是 top-down 和 bottom-up 和兩種 attention 機制:前者是指的人會被視覺中的顯著突出物體給吸引,是由圖像這種底層信息到上層語義的;而後者指的是人在進行某項任務的時候,緊密關注和該任務相關的部分,是由上遊任務去關注到圖像的。一般的注意力機制就像下圖中的左側顯示的那樣,是自上而下(top-down)的,表現在依據任務為這些 grid cell 去分配不同的權重,而右側的注意力機制是自下而上的,從物體層面(object-level)去注意到顯著性區域:
那我們首先來看 bottom-up attention 如何實現。作者採用了基於 ResNet-101 的 Faster R-CNN,添加了 attributes 分支在 VisualGenome 上進行了訓練,也正因為如此,Faster R-CNN 能進行更為細緻的檢測 (圖2.2)。在得到圖像的預測區域後,再取到這個區域對應的特徵(7×7×2048 做一個 mean pooling)。也就是說,在 VQA 模型中是沒有用到預測出的標籤的,而僅僅使用了該區域的特徵。
再來看 top-down attention,這個注意力機制的原型即為 image caption 中的 soft attention 機制,本質上是為不同區域的圖像特徵賦予權重。如何生成這些權重呢?在這裡依照下圖簡單說明一下:(1)GRU 編碼問題為 hidden state ;(2)bottom-up 部分得到圖像向量 , 是一個 2048 維的向量;(3)令對於 的權重為 ,, 是需要學習的參數, 可以看作是輸入為 和 的一個 LSTM。通過這樣一個變換接上 softmax,形成對應於每一個 的權重為 。而後續的過程也可以很自然的得出了,利用權重對圖像特徵做 weighted sum: ,與問題 一起再經過一個 LSTM 得出候選答案的概率。
兩者結合後的模型稱為 Up-Down,以下提供了在 VQA v2.0 上的評測結果,為提交時最高:
從評測時集成了 30 個模型就可以看出,文章中一定有諸多的實現細節。下面就是 Tips and Tricks 一文中提及的細節:
sigmoid outputs: 允許多個正確答案存在,利用多個二分類器來替代 softmax;
soft training targets: 這裡一開始理解成了知識蒸餾中的 soft target,但是實質上在這裡訓練時的標籤沒有任何不同,只是 allow uncertain answers;
image features from bottom-up attention: 這也就是核心方法 Up-Down;
gated tanh activations: 門控 tanh 激活函數,靈感來源於 LSTM/GRU 中的 gating 操作,實驗中發現具有比 ReLU 和 tanh 更好的效果。簡述如下:這個層的目標是完成一個非線性的映射 ,參數為 ,實現為 ,其中 分別表示 sigmoid 函數和 element-wise 乘積。 就可以看作是對於 的一個門控;
output embeddings initialized using GloVe and Google Images: 這裡的操作就很騷了,涉及對於答案分類時最後一層的初始化方法。本質上每個答案的分數就是圖片特徵和問題特徵與層權重的點積: ,而層權重就可以看成是答案的特徵;對於 通過答案的 GloVe word embeddings 進行初始化,對於 ,對每個答案在 Google Images 上搜索,挑選 10 個最相關的圖片計算經過 ImageNet 預訓練的 ResNet-101 特徵進行初始化;
large mini-batches: 256 和 384 最佳;
smart shuffling of training data: 保持在同一個 batch 中的問題都有同樣的一對,但是其對應的是不同的圖像和答案。
漲點情況以及細緻分析可以移步原論文。這裡也有分享的 slides:VQA-Challenge-Slides-TeneyAnderson,將本可以秘而不宣的 tricks 做詳細的 ablation study 是一件非常令人感動的事情。
代碼:Bottom-Up and Top-Down Attention for Image Captioning and Visual Question Answering
Pythia: 極致的工程能力Pythia v0.1 the Winning Entry to the VQA Challenge 2018(arxiv'18,Facebook AI Research)
做出這個模型的,是 Facebook AI Research (FAIR)’s A-STAR team. A-STAR 的意思,如果將其拆解開來則是 Agents that See, Talk, Act, and Reason。這些人類才特有的動作,似乎都是 VQA 這個任務裡所不可少的一部分。Pythia 的重點調整在於模型結構,超參數,數據增強,以及最後的模型集成。我們分條列舉:
模型結構:65.32% → 66.91%
還記得 Up-Down 裡面那個長相奇怪的門控激活函數嗎?Pythia 使用了 RELU+Weight Normalization 來取代它,這樣可以降低計算量,但是效果上有無提升文中沒有給出實驗。
在進行 top-down 的 attention 權重計算時,將特徵整合的方式由原本 concat 轉換為 element-wise multiplication,這也是可以降低計算量的表現。
在第二個 LSTM 做文本和圖像的聯合預測時,hidden size 為 5000 最佳。
超參數:66.91% → 68.05%
這裡主要是學習率的調整。作者發現在 Up-Down 模型中適當減小 batch 可以帶來一些提升,這意味著在同樣的 batch 下提升學習率可能帶來性能的提升。為了防止學習率過大不收斂,他們採用了廣泛使用的 warm-up 策略,並使用了適當的 lr step。這使得 Pythia 的性能提升約一個點。
Faster R-CNN 增強:68.05% → 68.49%
將 Faster R-CNN 的 backbone 由 ResNet-101 換為 ResNext-101-FPN,並且不再使用 ROI Pooling 後的 7×7×2048 + mean pooling 表徵 object -level 特徵,而採用 fc7 出來的 2048 維向量以減少計算量。
數據增強:68.49% → 69.24%
採用了圖像水平翻轉的增強方法,這樣的方式在純視覺任務中廣泛出現。在這裡還需要做變換的是,將問題和答案中的「左」和「右」對調。
Bottom-up 增強:69.24% → 70.01%
光是使用 Faster R-CNN 在 head network 上的 fc7 特徵不足以表示圖像整體的特徵。於是作者們融合了 ResNet-152 提取的整圖特徵,並且增加了在每一張圖提取 object-level feature 的個數。它們分別帶來了可見的提升。
模型集成:70.96% → 72.18%
圖2.1 不同 Ensemble 策略的實驗註:72.18% 是 VQA v2.0 test-dev 上的結果,而提交在 test-std 上的結果為 72.27%。test-std 才是最終的榜單排名依據。
總結Up-Down 是一個十分優秀的,面向於真實圖像場景的 VQA 模型,Pythia 是對它的強化實現(不愧是 FAIR,代碼寫的真是好)。以 Up-Down 為基礎的方法已經連續斬獲 2017 和 2018 的 VQA 冠軍。現在 VQA 2019 Challenge 已經拉開帷幕,winner 將在 VQA and Dialog Workshop, CVPR 2019 進行公布。還會是 Up-Down 嗎?
文中的錯誤與疏漏,懇請批評指正。歡迎交流 ~(另外弱弱的問一句,正進行/有意 VQA 2019 Challenge 的童鞋,可以拉上我呀 ლ╹◡╹ლ!有卡,我們一起煉丹!)