1. 程式人生 > >加入attention機制的image caption問題

加入attention機制的image caption問題

這兩年image caption的問題在CV領域非常火,就是輸入一張圖片,計算機自動輸出對這張圖片的文字描述。因為這個問題同時牽涉到了CV(Computer Vision)和NLP(Natural Language Processing),也牽涉到了當下非常流行的一些網路:CNN,RNN,LSTM,所以從14年這個問題變得火了起來。而本人也研究過一段這個問題,所以寫點感悟,也方便以後複習。

 image caption這個問題的演算法個人認為有三類:

(1)基於image-text embedding的方法;

(2)基於目標檢測的方法;

(3)基於CNN+RNN的方法。

關於這部分我會在之後的部落格中給出詳細的思想和論文補充。而本篇部落格主要關注的是attention的方法。

attention機制引入的出發點有兩條:(1)由於之前的caption問題中,對影象資訊的提取基本上都是整張影象直接提取特徵,這樣用一個向量來表示一張影象,肯定會損失掉一部分的影象資訊。

(2)正像人的視覺機制,看一張圖片不會盯著一整張來看,肯定是有著重點和細節來看。因此,作者想到了在image caption問題中加入attention機制,就是在提取影象特徵後,將影象特徵和之前的預測出的單詞資訊共同輸入RNN中計算隱層輸出,這樣就可以根據之前預測出的單詞資訊來提示應該關注影象的哪個部分,而不是漫無目的關注整張影象。(比如我們之前時刻預測出了“ride”這個單詞,那麼接下來應該預測的可能是horse,bike這種單詞,而不是盲目的關注一些毫不相關的影象區域)。就目前的文章看,效果還是比Google的NIC等採用CNN+RNN的要好一些。

目前我看到attention文章有兩篇:

 [1]Show, attend and tell: Neural image caption generation with visual attention.

 [2]Image Captioning with Semantic Attention. 兩篇都發表在CVPR2016上,attention機制的引入也算是caption問題未來的一個發展方向,而不是說再改網路結構,拼接網路這麼簡單。 文章[1]就是普通的加入attention的思路,具體過程如下圖所示:
還提出了一個重要概念:soft attention 和 hard attention: soft的意思指:由上一時刻推斷出的單詞來決定下一時刻對影象中哪部分著重注意,它是對影象中所有visual concepts都attention,只是根據不同的權值來確定對哪些部分關注更多,最終的attention結果也是對整張影象visual concepts進行加權和,生成attention map; 而hard則是指對特定某一個visual concept進行attention,而對其他的部分不引入attention。具體看下圖:

實驗結果是hard-attention效果更好一些
然後來看文章[2],這篇文章在attention的基礎上,結合了圖片的全域性特徵(top-down)和區域性特徵(bottom-up),比[1]獲得了一些提升。照例先看演算法流程圖:
首先對於輸入圖片,提取了兩種特徵,一種是Visual Attributes:{Ai},也就是提取影象中的目標,對應bottom-up特徵;一種是影象的全域性特徵 v,就是我們平時通過CNN提取的整張影象特徵。其中提取Ai的時候,作者用了三種方法:(1)類似影象檢索的方法,通過影象特徵之間的相似性來得到最終一張圖片中包含的目標;(2)multi-label模型[3],就是通過一個目標函式式,保證該圖片中含有的標籤排序高於圖片中不存在的標籤,這樣能夠保證影象標籤的正確預測;(3)Fully-Convolutional-Network[4],就是採用語義分割的方法得到Attributes。實驗證明第三種方法效果最好。 然後在t=0時刻,將全域性特徵輸入RNN中,在t>0時刻,通過input attention模型:大fai(希臘字母),和output attention模型:小fai(希臘字母)來通過t時刻預測出的單詞,來決定下一時刻對那些Attributes進行Attention。具體公式如下:
其中關鍵就是(3)(4)式,output attention模型和input attention模型的構建,具體公式如下圖:

上面是input attention model的公式,(5)中的alpha就是圖片中每個attributes的注意力權重,yt-1對應的是t-1時刻預測出的單詞,yi對應的是attribute i。這裡需要說明的是,因為影象中檢測出的visual attributes也就是影象中目標的單詞,如貓、狗等,所以和預測出的單詞是在同一個詞彙空間Y的,因此二者都可以用y表示,只是上下標有所不同。 接下來(6)式就是在(5)的基礎上,對詞彙特徵進行embbeding降維,因為之前的詞彙特徵yt-1,yi都是one-hot表示法,維度較高不好處理。E是embbed矩陣。 然後就是最終的input attention模型了,(7)式對應(4)式,主要是由兩部分組成,一部分是之前預測的單詞Yt-1,一部分是對影象中的visual attributes {Ai}進行attention,其中wx,A用來確定這兩部分的重要性,而在在attention部分是用的各塊的加權和,所以對應soft attention。 下面介紹output attention model的公式:

(8)與(6)相似,只是對attribute yi要經過一個啟用函式,這是為了保證輸出與RNN隱層輸出ht保持格式一致。 (9)與(7)相似,是最終的output attention model,對應上面的公式(3)。 最後一部分就是訓練部分了:

從(10)中可以看出,前一步logp(Yt)和普通的image caption問題的目標函式一致,就是保證每次預測出的單詞都是所有單詞中概率最高的,只是在後面對輸入輸出attention模型中的權重加了兩個約束,詳見式(11)。其中[11]前半部分是對同一個屬性i在每一時刻都被attention的懲罰;後半部分是對某一時刻對所有的屬性都attention的懲罰。 本篇論文目前來看是做image caption問題中效果最好的。

本人知識有限,寫作水平也一般,文中如有不妥之處,歡迎大家指出,互相交流,共同進步。另轉載請註明出處

參考文獻:

 [1]Show, Attend and Tell: Neural Image Caption Generation with Visual Attention. arXiv 2015.

 [2]Image Captioning with Semantic Attention. In CVPR, 2016

 [3]Deep Convolutional Ranking for Multilabel Image Annotation. InICLR, 2014.

 [4]Fully Convolutional Networks for Semantic Segmentation. InCVPR,  2015