天天看點

【CV論文閱讀】Image Captioning 總結

初次接觸Captioning的問題,第一印象就是Andrej Karpathy好聰明。主要從他的兩篇文章開始入門,《Deep Fragment Embeddings for Bidirectional Image Sentence Mapping》和《Deep Visual-Semantic Alignments for Generating Image Descriptions》。基本上,第一篇文章看明白了,第二篇就容易了,研究思路其實是一樣的。但确實,第二個模型的功能更強大一些,因為可以生成description了。

Deep Fragment Embeddings for Bidirectional Image Sentence Mapping:

這篇論文發表在14年的NIPS上,主要解決的問題集中在retrieval的問題,沒有生成description。還是先介紹一下模型吧,以下這張圖其實可以完全概括了

【CV論文閱讀】Image Captioning 總結

輸入的資料集每一個樣例由一張圖檔,五個manual句子描述。

對于句子的處理,主要是處理單詞之間的關系。類似于上圖右邊,解析出單詞之間的依賴關系,叫做triplet 

【CV論文閱讀】Image Captioning 總結

,R就是關系,而w1,w2就是單詞的representation,是1-of-k的,通過以下的關系把triplet映射到一個非線性的空間,

【CV論文閱讀】Image Captioning 總結

s是h維的向量特征向量,f是一個激活函數,

【CV論文閱讀】Image Captioning 總結

是對應的關系的矩陣,但它是需要學習的參數。

【CV論文閱讀】Image Captioning 總結

是通過訓練得到的固定的參數矩陣,至于怎麼得到的,我沒有看過索引的論文,而源代碼讀入的資料直接使用了

【CV論文閱讀】Image Captioning 總結

,我就沒有仔細研究。激活函數論文裡使用了ReLU,而公開的源代碼裡提供了很多其他類型的函數,然而并沒有試跑過。那為什麼需要激活函數呢?我猜想大概是(未探究過正确與否)非線性的特征會有更好的拟合效果吧,聯想到了深度學習裡的激活函數。

對于圖檔的處理。使用RCNN,提取top 19個Region和一張全圖作為特征。這裡主要是提取最後一層的4096維的向量作為特征表示,經過以下式子映射到h維的特征空間中

【CV論文閱讀】Image Captioning 總結

。RCNN網絡結構可以進行微調,也可以不微調。在這裡,需要學習的參數是

【CV論文閱讀】Image Captioning 總結

計算Image Fragment 和 sentence Fragment的相似度主要對兩個特征向量進行内積運算

【CV論文閱讀】Image Captioning 總結

。這就很粗暴了。這樣計算相似度,看起來似乎不太妥當,因為每一個圖檔Region的向量貌似并不能找到一個标準,至少相似度作為一種距離,這裡好像并沒有機關吧。但是,假如認為v和s在同一個特征空間的話,那麼,一切都很順其自然了,因為内積不就是夾角嗎?還記得怎麼定義希爾伯特空間的嗎?

恩,對于兩個模态的學習,找到一種方法把他們映射到同一特征空間非常重要。

最後一步就是定義損失函數了,這裡加了一個正則化項,我看了代碼對正則化怎麼搞的了解又加深了,

【CV論文閱讀】Image Captioning 總結

現在,怎麼使得語義上使對應的fragment的變得相似很重要,這自然是通過學習參數了。AK首先用一種簡單的方法,定義alignment目标函數為

【CV論文閱讀】Image Captioning 總結

當兩種fragment出現在同一image-sentence pair中時,注意是image-sentence pair,就把y置為1,否則為 -1。

【CV論文閱讀】Image Captioning 總結

是一個normalize項,具體可以看代碼怎麼實作的。通過這樣簡單的設定,不就使得當兩種fragment出現在同一image-sentence pair中時,相似度朝着大于1的方向發展,否則朝着小于-1的方向發展了嗎?因為式子前面有1減去,而且是一個max和0比較的。

但是,兩種fragment出現在同一image-sentence pair中不代表他們就是相對應啊。注意,以下相當于提升性能吧,因為即便沒有以下的multiple instance learning也是可以有結果的。因為,AK想到了一種方法,通過有限制的不等式求解,目标函數自然還是最小化了,得到

【CV論文閱讀】Image Captioning 總結

這稱為mi-SVM。太厲害了,他是怎麼知道有這種方法的呢?限制條件要求參數y至少有一個值為+1。論文中使用了一種啟發式求解的方法,畢竟直接優化看起來還是很難的,具體的求解過程是對于y的值設定為

【CV論文閱讀】Image Captioning 總結

,如果沒有+1,就把内積最大的對應的y設為+1。

另外定義了一個global目标函數。首先計算整張圖檔和sentence的相似度,n是一個平滑項

【CV論文閱讀】Image Captioning 總結

Global目标函數主要與image和sentence對應的

【CV論文閱讀】Image Captioning 總結

相似度作為比較。通過與所在的行和列比較,使得目标函數朝着令比對的

【CV論文閱讀】Image Captioning 總結

比不比對的

【CV論文閱讀】Image Captioning 總結

【CV論文閱讀】Image Captioning 總結

的方向優化。

【CV論文閱讀】Image Captioning 總結

最後優化時,使用的求導的鍊式法則。整個優化的過程使用SGD的方法。總的來說,是參數的學習使得兩種模态的資訊可以對應起來。

實驗評估的方法,實驗資料集是随機選出句子與對應的圖檔。通過計算

【CV論文閱讀】Image Captioning 總結

,并在每一個句子對

【CV論文閱讀】Image Captioning 總結

進行排序,看最比對圖檔的

【CV論文閱讀】Image Captioning 總結

出現在序列的位置,定義一個R@K,K代表位置,即在位置K以前出現最比對圖檔的百分比,通過對此比較評估Retrieval的性能。

作者Andrej Karpathy的代碼,我看的時候自己加了注釋,放在這裡共享吧,希望對你有點幫助吧。http://pan.baidu.com/s/1i5M8xk5

Deep Visual-Semantic Alignments for Generating Image Descriptions:

這篇論文相對于上一篇Deep Fragment Embeddings for Bidirectional Image Sentence Mapping,是可以生成description了,而且retrieval也得到了提升。這裡,句子中提取的不再是dependency,而是首先對于每一個單詞都生成一個特征向量,這是通過雙向的RNN(BRNN)生成的,因為RNN它其實包含了上下文的資訊,是以認為是與整個句子的語義相關。

【CV論文閱讀】Image Captioning 總結

是1-of-k的向量。RNN的函數如下

【CV論文閱讀】Image Captioning 總結

對于圖檔,依然使用的是RCNN的模型。而且,對于image和sentence對應的相似度計算方法也有所改變,

【CV論文閱讀】Image Captioning 總結

,整個模型變成如下

【CV論文閱讀】Image Captioning 總結

以上模型通過訓練之後,學習到的隻是word與image的region的對應關系,這可能會使得鄰近的單詞(它們可能相關)被對應到不同的label中。這裡作者通過使用馬爾科夫随機場來輸出最佳的每個word對應的region的序列。馬爾科夫随機場對應的勢函數為

【CV論文閱讀】Image Captioning 總結

。而

【CV論文閱讀】Image Captioning 總結

是能量函數,注意前面是負值,要使得最後序列的機率最大,則能量函數應該盡量小。是以,這裡定義的能量函數的條件為,使用的是鍊式條件随機場的形式

【CV論文閱讀】Image Captioning 總結

對于後面一項,當兩個前後的word配置設定同一個标注的時候,希望能量函數為0(即盡量小),否則為

【CV論文閱讀】Image Captioning 總結

。但是對于第一項……暫時還沒想明白,可能認為是固有的屬性,是以直接加入。當

【CV論文閱讀】Image Captioning 總結

越大,意味着如果希望能量函數越小,配置設定到同一個box的連續的word會趨向于更多。

以上其實解決的是latent alignment的問題。

之後,通過使用generator的RNN的生成captioning,這個比較容易了解,模型為

【CV論文閱讀】Image Captioning 總結

具體的計算過程為

【CV論文閱讀】Image Captioning 總結

繼續閱讀