仍然是對attention機制的擴展。可以看到,現在的工作,基本都添加了attention機制,要麼是spitial attention,要麼是semantic attention。
文章的主要貢獻包括:
(1)提出了一個新的lstm組合模型,包括了attention lstm和language lstm 兩個組件。在這個 組合模型的基礎上引入spitial attention機制(類似於《show,attend and tell》的top-down attention機制),可以實現比此前最佳scst(self critic)模型略好的效果。
(2)引入了bottom-up,bottom-up機制基於 faster r-cnn提出圖像區域,每個區域具有相關的特徵向量。
(3)爲了提升提取特徵的能力,對Faster R-CNN的輸出和損失函數做了添加。設計了屬性分類的部分。
這樣把top-down和bottom-up組合起來得到聯合注意機制。bottom-up機制提出圖像區域,確定每個區域的特徵向量,而top-down的機制確定特徵權重。其實在某種程度上來看,bottom-up的機制,相當於更精細的hard attention,因爲是給確定的少數區域特徵加權重。
作者的想法源自於,原本的attention機制是把特徵圖平均的劃分爲14*14=196塊,然後給它們配權重。作者認爲,我們應當把注意力更多地放在圖中的對象上(聚焦主要目標)。
模型結構:
- 首先使用在ImageNet上預訓練好的resnet-101初始化Faster R-CNN,然後在VG數據集上開始訓練。訓練的時候,原本的輸出是類標籤上的Softmax分佈和BBs。爲了提升網絡提取特徵的能力,在原本輸出和損失函數的基礎上,作者新添加了一個新的輸出和損失,用於訓練一個額外的屬性預測器。
將某個區域的平均池化卷積特徵vi與該區域ground truth的目標類別embedding連接起來,接softmax,輸出是屬性類別數+1,也就是除了每個屬性之外,加了一個‘no attribute’。
訓練完成後,使用當前模型提取不同區域的特徵,預測的標籤和屬性不用。
- Caption模型部分,作者設計了兩個lstm:
attention lstm(記爲1)和language lstm(記爲2)
(1)attention lstm的主要功能是產生權重,進而生成 特徵組合成的上下文變量。
每個時刻的輸入包括三部分:language lstm前一個時刻的隱藏態、所有區域特徵的平均值、前一個時刻預測出單詞的embedding。經過lstm單元以後,與《show ,attend and tell》類似,產生權重和上下文變量 ,只不過把上下文變量由變成了來表示。
(2)language lstm用於預測下一個單詞
實驗結果:
既使用了損失函數來訓練,也仿照着scst用同樣的策略來優化評價指標。在優化評價指標的時候,
利用這種方法,文章在一個epoch內完成了CIDER的優化。感覺這部分的工作大大節省了時間,
但是沒看太懂,需要去了解一下beam search,跑一跑相關的代碼。
不使用bottom-up的情況下 resnet的baseline 比 scst取得了略優的性能。加入bottom up 機制以後甩開差距。但是 scst是取了四種初始化方式中最好的一種,這種方法只取了一種。
不過加了CIDER優化後,二者不分伯仲。後者的結構更復雜一些,個人認爲本文的caption 兩個lstm的效果可能略好,但是在引入CIDER優化後,並沒有優勢。