论文笔记:Image Caption(Show and Tell)
生活随笔
收集整理的這篇文章主要介紹了
论文笔记:Image Caption(Show and Tell)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Show and Tell: A Neural Image Caption Generator
Show and Tell
1、四個問題
- Image Caption(自動根據圖像生成一段文字描述)。
- 作者提出了一個基于深度循環架構的生成式模型。
- 訓練時的目標是最大化這個從輸入圖像到目標描述語句的似然。
- 所提出模型在幾個數據集上的效果都不錯。
- 比如,此前在Pascal數據集上效果最好的BLEU-1分數是25,這里達到了59,與人類的表現(69左右)相當。
- 在Flickr30k上的BLEU-1分數從56提高到了66。
- 在SBU上,從19提高到了28.
- 在最新的COCO數據集上,BLEU-4分數達到了27.7,是目前最好的結果。
- 由于這篇論文是在15年發表的,當時的state-of-the-art,現在已經算是比較落后的了。
- 圖像特征僅僅是只在開始的時候以bias的形式傳入,只關注到了全局特征,模型也是學習到了一種模板然后往里面填詞。
2、論文概述
2.1、簡介
- Image Caption任務,顧名思義,就是讓算法根據輸入的一幅圖像自動生成對應的描述性文字。
- Image Caption的難點在于,不止要檢測到圖像中的物體,還需要表示出這些物體相互之間的關系。
- 此前關于Image Caption的嘗試,大多數是考慮將那些子問題的一些現有的解決算法拼在一起。
- Image Caption任務數學模型:
- 輸入圖像為III。
- 輸出語句是S=S1,S2,...S = {S_1, S_2, ...}S=S1?,S2?,...,每個單詞StS_tSt?都是從一個給定的字典中得到的。可以充分地對圖像進行描述。
- 目標函數是最大化似然函數:p(S∣I)p(S | I)p(S∣I)。
- 文中提出的主要思路來自于最近的機器翻譯相關的工作。
- 機器翻譯的主要任務是將源語言的語句SSS轉換為目標語言的語句TTT,通過最大化似然函數p(S∣I)p(S | I)p(S∣I)。
- 近期的工作中使用RNN做機器翻譯可以取得相當不錯的效果。
- 整體思路是:使用一個“編碼器”RNN讀取源語句,并將其轉換為長度固定的特征向量,而這些特征向量又被用作“解碼器”RNN的初始隱藏層狀態。最后使用“解碼器”RNN來生成目標語句。
- 上圖是文中提出的模型,NIC。
- 思路很簡單,在機器翻譯中有一個編碼器RNN、一個解碼器RNN,然后把編碼器RNN替換成CNN。
- 在近些年來的研究中,已經充分證明了CNN可以從輸入圖像中充分地提取特征并嵌入到一個定長的向量中。
- 很自然地,可以將CNN用作一個編碼器,先在ImageNet上進行預訓練,隨后將其最后一層隱藏層作為作為RNN的輸入。
- 論文的貢獻有以下三點:
- 提出了一個端到端的系統來解決Image Caption任務。
- NIC模型結合了分別在CV和NLP領域state-of-the-art的子網絡模型。
- 相比其他方法,取得了state-of-the-art的效果。
2.2、模型
- 近期的基于統計機器翻譯的發展說明了,只要提供了一個強大的序列模型,我們能夠直接通過最大化給定輸入語句的正確翻譯的概率(以一種端到端的方式),來獲得state-of-the-art的結果。
- 這些模型使用RNN對變長輸入進行編碼,得到定長的特征向量,然后再用來解碼成期望的輸出語句。
- 將編碼器的部分換成,輸入圖像到CNN,輸出定長的特征向量。
- 最大化似然的公式可以描述為如下公式:
- θ?=argmaxθ∑(I,S)log?p(S∣I;θ)\theta^* = argmax_{\theta} \sum_{(I, S)} \log p(S | I; \theta)θ?=argmaxθ?∑(I,S)?logp(S∣I;θ),其中III是輸入圖像,SSS是正確的圖像描述,θ\thetaθ是模型的參數。
- SSS可以表示任意語句,它的長度是不確定的。
- 使用鏈式法則來對S0S_0S0?到SNS_NSN?的聯合概率建模是很常見的:
- log?p(S∣I)=∑t=0Nlog?p(St∣I,S0,...,St?1)\log p(S | I) = \sum_{t=0}^N \log p(S_t | I, S_0, ..., S_{t-1})logp(S∣I)=∑t=0N?logp(St?∣I,S0?,...,St?1?)。
- 為簡便起見,丟棄了θ\thetaθ的依賴。
- 訓練中,(S,I)(S, I)(S,I)是一對樣本對。我們求上式的log概率之和,使用SGD進行優化,使其最大。
- 使用RNN來對p(St∣I,S0,...,St?1)p(S_t | I, S_0, ..., S_{t-1})p(St?∣I,S0?,...,St?1?)建模,0到t?1t-1t?1為止的可變詞數可以用一個定長的隱藏層hth_tht?來表示。
- 在得到一個新的輸入xtx_txt?后,會使用一個非線性函數fff更新ht+1=f(ht,xt)h_{t+1} = f(h_t, x_t)ht+1?=f(ht?,xt?)。
- 為了讓上述的RNN模型更具體,還有兩個重要的問題要考慮:
- 非線性函數fff具體的形式是什么樣子?
- fff使用一個LSTM網絡來表示。
- 圖像和單詞如何轉換成輸入xtx_txt??
- 使用CNN從圖像提取特征,來表示圖像。
2.3、LSTM
- 在設計和訓練RNN過程中,最具挑戰的是如何解決梯度消失和梯度爆炸的問題,所以選擇了LSTM。
2.4、訓練
- 如果用III表示輸入圖像,用S=(S0,...,SN)S=(S_0, ..., S_N)S=(S0?,...,SN?)表示描述這個圖像的真實句子,展開過程如下:
- 每個單詞都被表示為一個與字典等長的one-hot向量StS_tSt?。
- S0S_0S0?表示開始單詞,SNS_NSN?表示結束單詞。 從LSTM檢測到停止單詞,就意味著已經生成了一個完整的句子。
- 圖像和單詞都被映射到同一個特征空間,使用CNN提取圖像特征,使用word embedding將單詞映射為詞向量。
- 圖像只在t=?1t=-1t=?1時輸入,以告知LSTM圖像中的內容。
- loss函數是每個步驟中正確單詞的負對數概率之和。
2.4、Inference
- 我們有多種方法來使用NIC模型根據輸入圖像生成描述。
- 第一種是采樣。我們可以根據p1p_1p1?采樣得到第一個單詞,然后提供對應的embedding作為輸入,并采樣p2p_2p2?,不斷重復,知道我們采樣到特殊句末標識,或到達了最大句長。
- 第二種是BeamSearch。迭代地選取直到時間ttt最好的kkk個語句作為候選,來長度為t+1t+1t+1時刻的句子,最后只保留其中的kkk個最好結果。
- 后續的實驗中采用BeamSearch的方法,beam大小為20。如果將beam大小取為1,結果會降低2個BLEU點數。
2.5、實驗
- 數據集
- 訓練細節:
- 訓練中很容易碰到過擬合。
- 解決過擬合的一個很簡單的辦法就是,提供大量的數據。但是已有的數據量卻不足。
- 經過實驗,作者發現最有效的避免過擬合的方法是使用預訓練權重(ImageNet)來初始化CNN。
- 另外一組權重,即word embedding的權重,使用在一個大型新聞語料庫下預訓練的結果效果并不理想。所以最后為簡單起見,直接就不對其做初始化。
- 還用了其他一些防止過擬合的策略:dropout,ensemble等。
- 訓練時采用SGD,學習率固定,沒有momentum。除了CNN的權重采用ImageNet的預訓練權重,其他權重參數都是隨機初始化的。
- embedding的維度是512維,也是LSTM記憶單元的大小。
- 生成結果見表1。
- 生成多樣性討論
- 表3顯示了從beamsearch解碼器中返回的N個最佳列表的一些樣本,而不是最好的假設。
- 如果選出最好的候選句子,那么這個句子就會在約80%的時間里出現在訓練集中。考慮到訓練數據較少,并不難預料到,模型相對容易會選取一個模板句子,然后填詞進去。
- 如果分析的是生成的前15個最好的句子,大約在50%的時間內,我們可以看到一個全新的語句描述,也可以取得差不多高的BLEU分數。
- 排名結果:
- 人工評估:
- word embedding分析
- 把輸入的前一個詞St?1S_{t-1}St?1?送入LSTM然后輸出StS_tSt?,使用了word embedding方法,這樣能夠擺脫字典大小的依賴。
- 如表6中所示,一些示例單詞,和其最近鄰的詞向量所對應的單詞。
- 請注意模型學習到一些關系是如何幫助視覺組件的。
- 比如,將“馬”、“小馬”和“驢”的詞向量彼此靠近,將會鼓勵CNN提取與馬匹動物相關的特征。
3、參考資料
總結
以上是生活随笔為你收集整理的论文笔记:Image Caption(Show and Tell)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 论文笔记:PointNet
- 下一篇: 论文笔记:Image Caption(S