1. 程式人生 > >對Image caption的一些理解(看圖說話)

對Image caption的一些理解(看圖說話)

1. 背景

​ 在計算機視覺中,影象分類和目標檢測任務是比較成熟的領域,已經應用到實際的產品領域。而“看圖說話”要實現的功能是,給定一張影象,計算機能告訴我們圖片的內容,顯然,這會使一個比較複雜的任務,因為它涉及到了如下的子任務:

1)檢測影象中的目標;

2)目標的屬性,比如顏色、尺寸等;

3)目標之間的關聯;

4)語言模型,用於把上面的資訊表述成句子;

2. 相關的論文

2.1 “Show and Tell: A Neural Image Caption Generator”

​ 為了實現看圖說話的功能,初步的想法是使用多個模型,分別實現上面的各個子任務,然後把每個子任務的結果進行邏輯上的組合。作為谷歌的大作,“Show and Tell: A Neural Image Caption Generator”這一篇論文首次使用端到端的神經網路實現圖文轉換功能,該網路結構與語言翻譯模型的對比如下,

語言翻譯模型source sentence —> encoder —>fixed length vector —> decoder —> target sentence

圖文轉換模型source image —> encoder —>fixed length vector —> decoder —> target sentence

可以看出,它們是很相似的,區別在於輸入的不同,語言翻譯模型的輸入是序列資料,對應的encoder便是RNN了,而圖文轉換模型的輸入是圖片,對應的encoder則為CNN網路,具體的網路結構如下,
在這裡插入圖片描述

在這裡插入圖片描述

​ 注:引用自論文“Show and Tell: A Neural Image Caption Generator”

在訓練階段,模型經過兩大階段:影象訊號的forward propagation和誤差訊號的back propagation。前向傳播的公式表示如下,
在這裡插入圖片描述
誤差訊號的定義如下,
在這裡插入圖片描述
其中, p t (

S t ) = p ( S t I , S 0 , . . . , S t 1 ) L ( I , S ) = l o g p ( S I ) p_{t}(S_{t})=p(S_{t}|I, S_{0}, ..., S_{t-1}),L(I, S)=-logp(S|I) ,因此,優化的目標是給定任意輸入影象I,輸出序列S的聯合概率最大化,這裡是將聯合概率展開成了條件概率的乘積的形式。

2.2 “Captioning Images with Diverse Objects”

​ 上面的文章使用的是有監督的方法,只能識別訓練集中出現的目標,因此在應用中是非常受限制的。大牛Lisa Anne在CVPR 2016上發的一篇文章“Deep Compositional Captioning”,第一次解決了描述novel 目標的目的(訓練集中不存在該目標),作為一篇oral文章,作者提供了文章的程式碼,https://github.com/LisaAnne/DCC。

​ 為了優化半監督看圖說話模型的效果,作者所在團隊在CVPR 2017發了一篇新的文章“Captioning Images with Diverse Objects”,這裡主要闡述這篇文章中的思想。

2.2.1 網路結構

​ 文中將所提模型稱之為“Novel Object Captioner (NOC)”,其網路結構如下圖,它包含了三個子任務:語言建模+目標識別模型+圖文生成。從直覺上可見,當聯合訓練時,模型可以實現下面的目標:(1)生成讀起來通順的文字;(2)識別影象中的視覺目標;(3)生成合理的圖片描述。當(2)和(3)互補時,可以使的生成的文字包含(2)的結果,這裡(2)為imagenet 1000類的目標,(3)為MSCOCO caption資料集,只包含了80類目標,也即在inference階段,生成的文字中可以包含其餘的920種目標。
在這裡插入圖片描述

2.2.2 優化的目標函式

​ 模型優化的目的是,在給出影象描述的同時儘可能多地識別圖中的物體,包括image caption資料集(paired)中未出現或者很少出現的目標,在訓練過程中聯合優化Image model、Language model 和 Caption模型,整體的目標函式如下,
在這裡插入圖片描述

2.2.2.1 Image-specific Loss

​ 與常用的CNN分類模型不同,這裡我們希望能夠儘可能全地描述出影象中存在的所有目標,所以這裡的CNN為一個多標籤模型,其cross-entropy 損失如下,
在這裡插入圖片描述
其中, l l 表示標籤的總個數, z l z_{l} 表示第 l l ​ 個輸出的真實標籤,0或者1。

2.2.2.2 Text-specific Loss

​ 該路分支是一個語言模型,輸入文字序列 w 0 , w 1 , . . . , w t 1 w_{0}, w_{1}, ..., w_{t-1} ,預測下一個詞 w t w_{t} ,損失函式定義如下,
在這裡插入圖片描述

2.2.2.3 Image-caption Loss

​ 該路分支用於根據輸入影象,輸出對應的sentence描述,損失函式定義如下,
在這裡插入圖片描述
其中,
S w t ( f C M ( w 0 , . . . , w t 1 , I ; θ ) ) = P ( w t w 0 , . . . , w t 1 , I ) S_{w_{t}}(f_{CM}(w_{0}, ...,w_{t-1}, I; \theta)) = P(w_{t}|w_{0}, ..., w_{t-1}, I)

程式碼連結:https://github.com/vsubhashini/noc/tree/recurrent/examples/noc

3. 資料集介紹

資料集名稱 sentence數量/每幅影象 圖片數量 資料集介紹
Flickr 30k 5 3.1w http://web.engr.illinois.edu/~bplumme2/Flickr30kEntities/
MS coco 5 8w+ https://arxiv.org/abs/1504.00325

由上表可以看出,每幅圖片對應了5個sentence,這是因為給定一幅影象,不同的人對它的描述會是多種多樣的,所以這樣構造訓練集,是很合理的。

4. 評測方法

​ 在得到了看圖說話模型後,有多種用於評測模型效果的指標,比如BLEU, METEOR, ROUGE 和 CIDEr,這裡主要解釋BLEU,在解釋BLEU之前,需要說明一下n-Gram模型。

4.1 n-Gram模型

​ n-Gram模型用於對一個序列的聯合概率進行建模,也就是估計一個序列(比如一句話)出現的可能性。舉例來說,比如一句話有m個詞,分別為 w 1 , w 2 , . . . , w m w_{1}, w_{2}, ...,w_{m} ,若想求聯合概率 p ( w 1 , w 2 , . . . , w m ) p(w_{1}, w_{2}, ...,w_{m}) ,很直接地我們會想到鏈式法則,即將聯合概率的求解分解如下,
p ( w 1 , w 2 , . . . , w m ) = p ( w 1 ) p ( w 2 w 1 ) p ( w 3 p ( w 1 ) , p ( w 2 ) ) . . . p ( w m p ( w 1 ) , p ( w 2 ) , . . . , p ( w m 1 ) ) p(w_{1}, w_{2}, ...,w_{m})=p(w_{1})*p(w_{2}|w_{1})*p(w_{3}|p(w_{1}), p(w_{2}))*...*p(w_{m}|p(w_{1}), p(w_{2}), ..., p(w_{m-1}))
n-Gram模型的假設條件是,第k個詞出現的可能性只於相鄰的n個詞有關,用公式表達如下,

p ( w m p ( w 1 ) , p ( w 2 ) , . . . , p ( w m 1 ) ) = p ( w m p ( w m n ) , p ( w m ( n 1 ) ) , . . . , p ( w m 1 ) ) p(w_{m}|p(w_{1}), p(w_{2}), ..., p(w_{m-1})) = p(w_{m}|p(w_{m-n}), p(w_{m-(n-1)}), ..., p(w_{m-1}))