【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:app

這篇論文發表在14年的NIPS上,主要解決的問題集中在retrieval的問題,沒有生成description。仍是先介紹一下模型吧,如下這張圖其實能夠徹底歸納了函數

輸入的數據集每個樣例由一張圖片,五個manual句子描述。性能

 

對於句子的處理,主要是處理單詞之間的關係。相似於上圖右邊,解析出單詞之間的依賴關係,叫作triplet ,R就是關係,而w1,w2就是單詞的representation,是1-of-k的,經過如下的關係把triplet映射到一個非線性的空間,學習

s是h維的向量特徵向量,f是一個激活函數,是對應的關係的矩陣,但它是須要學習的參數。是經過訓練獲得的固定的參數矩陣,至於怎麼獲得的,我沒有看過索引的論文,而源代碼讀入的數據直接使用了,我就沒有仔細研究。激活函數論文裏使用了ReLU,而公開的源代碼裏提供了不少其餘類型的函數,然而並無試跑過。那爲何須要激活函數呢?我猜測大概是(未探究過正確與否)非線性的特徵會有更好的擬合效果吧,聯想到了深度學習裏的激活函數。優化

對於圖片的處理。使用RCNN,提取top 19個Region和一張全圖做爲特徵。這裏主要是提取最後一層的4096維的向量做爲特徵表示,通過如下式子映射到h維的特徵空間中。RCNN網絡結構能夠進行微調,也能夠不微調。在這裏,須要學習的參數是spa

計算Image Fragment 和 sentence Fragment的類似度主要對兩個特徵向量進行內積運算這就很粗暴了。這樣計算類似度,看起來彷佛不太穩當,由於每個圖片Region的向量貌似並不能找到一個標準,至少類似度做爲一種距離,這裏好像並無單位吧。可是,假如認爲v和s在同一個特徵空間的話,那麼,一切都很順其天然了,由於內積不就是夾角嗎?還記得怎麼定義希爾伯特空間的嗎?3d

恩,對於兩個模態的學習,找到一種方法把他們映射到同一特徵空間很是重要。orm

 

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

 

如今,怎麼使得語義上使對應的fragment的變得類似很重要,這天然是經過學習參數了。AK首先用一種簡單的方法,定義alignment目標函數爲

當兩種fragment出如今同一image-sentence pair中時,注意是image-sentence pair,就把y置爲1,不然爲 -1。是一個normalize項,具體能夠看代碼怎麼實現的。經過這樣簡單的設置,不就使得當兩種fragment出如今同一image-sentence pair中時,類似度朝着大於1的方向發展,不然朝着小於-1的方向發展了嗎?由於式子前面有1減去,並且是一個max和0比較的。

 

可是,兩種fragment出如今同一image-sentence pair中不表明他們就是相對應啊。注意,如下至關於提高性能吧,由於即使沒有如下的multiple instance learning也是能夠有結果的。由於,AK想到了一種方法,經過有約束的不等式求解,目標函數天然仍是最小化了,獲得

這稱爲mi-SVM。太厲害了,他是怎麼知道有這種方法的呢?限制條件要求參數y至少有一個值爲+1。論文中使用了一種啓發式求解的方法,畢竟直接優化看起來仍是很難的,具體的求解過程是對於y的值設置爲,若是沒有+1,就把內積最大的對應的y設爲+1。

 

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

Global目標函數主要與image和sentence對應的類似度做爲比較。經過與所在的行和列比較,使得目標函數朝着令匹配的比不匹配的 的方向優化。

最後優化時,使用的求導的鏈式法則。整個優化的過程使用SGD的方法。總的來講,是參數的學習使得兩種模態的信息能夠對應起來。

 

實驗評估的方法,實驗數據集是隨機選出句子與對應的圖片。經過計算,並在每個句子對進行排序,看最匹配圖片的 出如今序列的位置,定義一個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它其實包含了上下文的信息,因此認爲是與整個句子的語義相關。是1-of-k的向量。RNN的函數以下

對於圖片,依然使用的是RCNN的模型。並且,對於image和sentence對應的類似度計算方法也有所改變,,整個模型變成以下

以上模型經過訓練以後,學習到的只是word與image的region的對應關係,這可能會使得鄰近的單詞(它們可能相關)被對應到不一樣的label中。這裏做者經過使用馬爾科夫隨機場來輸出最佳的每一個word對應的region的序列。馬爾科夫隨機場對應的勢函數爲是能量函數,注意前面是負值,要使得最後序列的機率最大,則能量函數應該儘可能小。因此,這裏定義的能量函數的條件爲,使用的是鏈式條件隨機場的形式

對於後面一項,當兩個先後的word分配同一個標註的時候,但願能量函數爲0(即儘可能小),不然爲。可是對於第一項……暫時還沒想明白,可能認爲是固有的屬性,因此直接加入。當越大,意味着若是但願能量函數越小,分配到同一個box的連續的word會趨向於更多。

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

以後,經過使用generator的RNN的生成captioning,這個比較容易理解,模型爲

 

具體的計算過程爲

 

 

其中輸入的單詞是,而不是。其實這裏個人疑問是,不輸入第一部分生成correspondence的意義在哪裏呢?僅僅是爲了alignment?感受挺奇怪的……

相關文章
相關標籤/搜索