1. 程式人生 > >論文筆記:Image Caption(Show, attend and tell)

論文筆記:Image Caption(Show, attend and tell)

Show, Attend and Tell: Neural Image Caption Generation with Visual Attention

Show, Attend and Tell

1、四個問題

  1. 要解決什麼問題?
    • Image Caption(自動根據影象生成一段文字描述)。
  2. 用了什麼方法解決?
    • 在Show and Tell提出的Encoder-Decoder架構的基礎之上進行了改進,引入注意力機制。
    • 提出了兩種注意力機制的變種:“hard” attention和"soft" attention。
  3. 效果如何?
    • 在MS COCO以及Flickr8k和Flickr30k上取得了state-of-the-art的效果。
  4. 還存在什麼問題?
    • Encoder採用了ImageNet上預訓練好的VGG網路,然而VGG的特徵提取能力相比ResNet、DenseNet等較弱,一定程度上會影響網路效能。
    • 訓練LSTM時one-hot編碼的詞向量沒有采用預訓練的word embedding模型,也可能會影響。

2、論文概述

2.1、簡介

  • 研究難點:

    • 影象標註模型既要能夠處理計算機視覺任務如確定影象中有哪些物體,但他們也必須能夠以自然語言的形式捕獲並表示出這些物體之間的關係。
  • 架構:

    • 使用CNN來提取影象中的視覺資訊,並用RNN來解碼這些視覺資訊轉換成自然語言。
  • 注意力機制:

    • 此前的工作中,大家廣泛認同的是:使用視覺特徵(比如從CNN後面的層中的特徵圖)提取影象中的顯著物體的資訊。
    • 但是這個方法有一個可能的缺點:會損失一部分可能對生成影象描述有用的資訊。
    • 使用低層的特徵有助於解決這個問題,但是使用低層特徵需要一個有效的機制來讓模型關注對這個任務有用的資訊。
    • 為此,提出了兩個注意力機制的變種:hard attention和soft attention。
  • 貢獻:

    • 提出了兩個基於注意力機制的Image Caption模型:soft attention,通過普通的反向傳播演算法即可訓練;hard attention,需要最大化一個近似的變化下邊界。
    • 通過視覺化技術展示了網路在生成單詞都是在關注“哪裡”和“什麼”。
    • 在三個基準資料集(MS COCO、Flickr8k、Flickr30k)上對模型進行測試,取得了state-of-the-art的效果。
  • 除了神經網路之外,caption還有兩種典型的方法:

    1. 使用模板的方法,填入一些影象中的物體;
    2. 使用檢索的方法,尋找相似描述。
    • 這兩種方法都使用了一種泛化的手段,使得描述跟圖片很接近,但又不是很準確。所以作者在此基礎上提出了自己的模型架構,將soft 和hard attention引入到caption,並利用視覺化手段理解attention機制的效果。
  • 模型:

在這裡插入圖片描述

2.2、模型細節

  • 論文中提出了兩個注意力機制的結構,hard attention較為複雜,暫時還沒搞懂。所以就著重介紹soft attention。
  • Encoder:
    • 使用CNN來提取 L L D D 維的特徵作為註釋向量。每個都對應影象中的一個區域: a = { a 1 , . . . , a L } , a i R D a = \{ a_1, ..., a_L \}, a_i \in \mathbb{R}^D
    • 與此前的工作中使用Softmax層之前的全連線層提取影象特徵不同,本文所提取的這些vector來自於 low-level 的卷積層,這使得decoder可以通過選擇所有特徵向量的子集來選擇性地聚焦於影象的某些部分,也就是將attention機制嵌入。
  • Decoder:
    • 解碼階段用LSTM生成caption。
    • 生成的結果: y = { y 1 , . . . , y C } , y i R K y = \{ y_1, ... , y_C \}, y_i \in \mathbb{R}^K 。其中 C C 是句子長度, K K 是詞表大小, y y 是各個詞的one-hot編碼所構成的集合。

在這裡插入圖片描述

在這裡插入圖片描述

  • LSTM:
    • 輸入、遺忘和輸出門由sigmod啟用,所以得到的值在0—1之間,可以直接作為概率值,候選向量 c t c_t h t h_t 由tanh啟用,值在-1—1之間。三個輸入量分別是, E y t 1 Ey_{t−1} 是look-up得到詞 y t 1 y_{t−1} 的 m 維詞向量; h t 1 h_{t−1} 是上一時刻的隱狀態; z t R D z^t \in \mathbb{R}^D 是LSTM真正意義上的“輸入”,代表的是捕捉了特定區域視覺資訊的上下文向量。
    • 隱狀態和細胞狀態的初始值,由兩個獨立的多層感知機得到。輸入是各個影象特徵的均值。 c 0 = f i n i t , c ( 1 L i L a i ) c_0 = f_{init, c}(\frac{1}{L} \sum_i^L a_i) h 0 = f i n i t , h ( 1 L i L a i ) h_0 = f_{init, h} (\frac{1}{L} \sum_i^L a_i)
    • 根據以上,我們就可以通過最大概率求得當前時刻輸出的詞,並作為下一時刻的輸入,從而獲得caption結果。
    • 在這裡插入圖片描述
  • attention:
    • z t z_t 是LSTM真正的輸入,是一個和時間相關的動態變數,不同時間關注在不同的影象區域內,那麼這裡就可以和attention結合起來,規定特定時間內關注某個區域。
    • z t z_t 由時間和位置區域決定,對於每個時間的每個區域都定義一個權重值 α t i \alpha_{ti} 。為了滿足權重的歸一化,則通過softmax函式實現,Softmax的輸入需要包含位置資訊和前一時刻隱層值。
    • 在這裡插入圖片描述
    • 接著, z t z_t 就可以通過影象的特徵 a i a_i 以及產生的權重 α t i \alpha_{ti} 得到。
    • 在這裡插入圖片描述
    • ϕ \phi 函式實際上就是hard attention和soft attention了。
  • hard attention暫時還沒弄懂,暫時先不寫。
  • soft attention:
    • 在hard attention中,權重屬於貝努利分佈,非0即1。不連續意味著不可導,即無法在反向傳播中利用梯度更新。
    • 而soft attention中,不像hard attention那樣對特定時間特定區域只有關注與不關注,而是對所有區域都關注,只是關注的重要程度不一樣。
    • 直接使用前面得到權重 α t \alpha_t ,加權求和得到 z t z_t
    • 在這裡插入圖片描述
    • 由於模型是連續可導的,現在可以直接使用BP演算法對梯度進行更新。
    • 此外,soft attention模型還要引入閾值 β \beta ,用來讓解碼器決定是把重點放在語言建模還是在每個時間步驟的上下文中。
    • 在這裡插入圖片描述
    • 在這裡插入圖片描述
    • 最終的損失函式:
    • 在這裡插入圖片描述
    • soft attention最終通過最小化上式實現。
    • 式中的正則項是為了讓 t C α t i 1 \sum_t^C \alpha_{ti} \simeq 1 , 目的是為了讓attention平等的對待圖片的每一區域。

2.3、實驗

  • 作者用了三個資料集進行實驗,Flickr8k採用RMSProp優化方法, Flickr30k和COCO採用Adam進行優化,用vgg在ImageNet上進行預訓練,採取64的mini-batch,用bleu和meteor作為指標進行評分,下表是實驗結果,可以看出本文所提出的方法取得了很好的結果。

在這裡插入圖片描述

  • 視覺化,為了更好地瞭解attention的效果,作者還對模型進行了視覺化,如下圖所示,可以看出attention機制可以學習到類似於人注意力一樣的資訊。

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

3、參考資料

  1. 論文學習5“Show, Attend and Tell: Neural Image Caption Generation with Visual Attention”文章學習
  2. 【影象理解】之Show, attend and tell演算法詳解
  3. https://github.com/sgrvinod/a-PyTorch-Tutorial-to-Image-Captioning#training