「Show and Tell」——圖像標註(Image Caption)任務技術綜述
所謂Image Caption,就是從圖片中自動生成一段描述性文字,有點類似於我們小時候做過的「看圖說話」,十分有趣。對於人來說,Image Caption是簡單而自然的一件事,但對於機器來說,這項任務卻充滿了挑戰性。原因在於機器不僅要能檢測出圖像中的物體,而且要理解物體之間的相互關係,最後還要用合理的語言表達出來。
隨著深度學習技術的發展和COCO等圖像標註數據集的出現,Image Caption相關的技術得到了快速的發展。本文就在這個領域中,選擇了最具代表性的幾篇論文進行講解。在講解的過程中會盡量注意論文間的發展和聯繫。
1. 從Encoder-Decoder結構談起
在介紹Image Caption相關的技術前,有必要先來複習一下RNN的Encoder-Decoder結構。我們知道,在最原始的RNN結構中,輸入序列和輸出序列必須是嚴格等長的。但在機器翻譯等任務中,源語言句子的長度和目標語言句子的長度往往不同,因此我們需要將原始序列映射為一個不同長度的序列。Encoder-Decoder模型就解決了這樣一個長度不一致的映射問題,它的結構如下圖所示:
是輸入的單詞序列,而 為輸出的單詞序列,每個 和 都是已經經過獨熱編碼的單詞,因此它們都是1xD的向量,其中D為程序中使用的單詞表的長度。RNN的隱層狀態(hidden state)用 表示。在實際應用中,我們往往不是把獨熱編碼的 輸入RNN,而是將其轉換為對應的word embedding的形式,即圖中的 ,再輸入RNN網路。在Encoder部分,RNN將所有的輸入「編碼」成一個固定的向量表示,即最後一個隱層狀態 , 我們就認為這個 包含了原始輸入中所有有效的信息,,Decoder在每一步都會利用 這個信息,進行「解碼」,並輸出合適的單詞序列 。這樣,我們就完成了不同長度序列之間的轉換工作。
Encoder-Decoder結構最初是在論文《Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation》中提出並應用到機器翻譯系統中的。有興趣的同學可以參考原始論文了解其細節,這裡我們還是回到Image Caption任務中來,看看如何把Encoder-Decoder結構用到Image Caption上。
2. Show and Tell: A Neural Image Caption Generator
在機器翻譯任務中,輸入輸出都是單詞序列,現在換一下,在Image Caption任務中,輸入是圖像,輸出是單詞序列,應該怎麼建模呢?其實很簡單,我們只需要將原來的Encoder RNN換成圖像中使用的CNN結構,為圖像提取一個「視覺特徵」I,然後還是使用Decoder將這個I解碼為輸出序列就可以了,這就是論文《Show and Tell: A Neural Image Caption Generator》中的想法。
這篇論文算是做Image Caption任務早期的開山之作,它只把Encoder-Decoder結構做了簡單修改,就在Image Caption任務上取得了較好的結果,下圖是這篇論文中網路的具體結構。先看提取圖像特徵的CNN部分,由於這篇論文是谷歌出品的,因此這部分就使用了自家的Inception模型。再看Decoder部分,將RNN換成了性能更好的LSTM,輸入還是word embedding,每步的輸出是單詞表中所有單詞的概率,這些都是標準做法了,就不再贅述。
這篇論文為Image Caption任務提供了一種統一的思路,下面我們會連著介紹三篇論文,都是在這篇論文基礎上的改進。
3. Show, Attend and Tell: Neural Image Caption Generation with Visual Attention
在Encoder-Decoder結構中,Encoder把所有的輸入序列都編碼成一個統一的語義特徵 再解碼,因此, 中必須包含原始句子中的所有信息,它的長度就成了限制模型性能的瓶頸。對於短句來說還好,但當句子較長時,一個 可能存不下那麼多信息,就會造成翻譯精度的下降。對此,論文《Neural machine translation by jointly learning to align and translate》提出了一種Attention機制,不再使用統一的語義特徵,而讓Decoder在輸入序列中自由選取需要的特徵,大大提高了Encoder-Decoder的模型性能。
在Image Caption任務中,我們同樣可以利用Attention機制對原來的Encoder-Decoder機制進行改進,對應的論文就是這篇《Show, Attend and Tell: Neural Image Caption Generation with Visual Attention》了。顯然這篇文章的標題山寨了我們之前提到的「Show and Tell」,將之改為「Show, Attend and Tell」,意即加入了Attention機制。
具體怎麼來做呢?之前是用CNN提取了固定長度的向量特徵I,實際上,我們可以利用CNN的空間特性,使用卷積層的feature map,給圖片的不同位置都提取一個特徵。舉例來說,用 表示我們提取的圖片特徵,一共 個位置,每個位置的特徵為一個 維的向量,對於一個高、寬為14,通道數為256的feature map,對應的 , 。
有了這些位置的特徵,我們再讓Decoder在解碼時擁有在這196個位置特徵中選擇的能力,這就是Attention機制。設在第t階段(通俗的講,就是生成第t個單詞時)傳入Decoder RNN的上下文向量為 ,RNN前一階段的隱層狀態為 。這個上下文向量 就是 的一個加權平均,具體地, 和 的關係用下面的式子表達:
就是衡量生成第t個單詞時,第i個位置的圖像特徵所佔的權重。這個權重實際是前一個隱層狀態 和第i個位置圖像特徵 的函數。具體的表達式為:
由於 只和已有的信息 有關,因此這些參數也是可以從數據中進行端到端的自動學習的。
值得一提的是,這個論文實際介紹了兩種Attention機制,一種叫HardAttention,一種叫Soft Attention,我們這裡只講了標準的Soft Attention,Hard Attention比Soft Attention更有難度,限於篇幅原因不再展開介紹。實驗證明,無論是使用Hard Attention還是Soft Attention,都提高了原始模型的性能。
另外,由於使用了Attention機制,我們可以根據權重係數 的大小,得知在生成每個詞時模型關注到了圖片的哪個區域。下圖展示了一些例子,每個句子都是模型自動生成的,在圖片中用白色高亮標註了生成下劃線單詞時模型關注的區域:
4. What Value Do Explicit High Level Concepts Have in Vision to Language Problems?
除了使用Attention的機制改善Encoder-Decoder結構外,這篇文章又提供了另外一種改進原始模型的方式,即使用高層語義特徵。
在前兩篇論文中,都是使用CNN在做最終分類之前的卷積特徵作為「圖像語義」,但這篇文章認為,CNN在最終的分類層包含了大量諸如「圖中有無人」、「圖中有無桌子」這樣的高層信息。這種高層語義與最終生成的語句非常相關,不能輕易捨棄。
實際做法中,作者把這個高層語義理解為一個多標籤分類問題。在Image Caption任務中,需要知道圖片裡面有哪些物體,由於一張圖片中的物體數目會有很多,因此圖片和物體標籤就是一個一對多的關係,而不是通常的一對一的關係。為此,我們需要對原先的CNN結構做出適當調整。在通常的一對一關係中,我們在卷積特徵後使用一個softmax即可,而在一對多關係中,假設我們要找出c類物體,那麼就分別使用c個softmax層。設第i張圖片的標籤 。其中每個 要麼是0,要麼是1,1表示該圖片具有標籤j(如圖中有人),0表示該圖片不具有標籤j。又設c個softmax層的輸出各個標籤的概率 ,那麼最終的損失就是:
在訓練時,首先在所有描述中提取出現最頻繁的c個單詞作為總標籤數,每個圖像的訓練數據直接從其描述單詞中取得。訓練完成後,就可以針對每張圖片提取高層的語義表達向量 (如下圖所示)。簡單來說,這個高層語義向量 實際就表示圖像中出現了哪些物體。
得到 後,就直接將其送入Decoder進行解碼。Decoder的結構和最初的那篇論文中的結構完全一致。如在下圖中,藍色的線就是之前直接使用的卷積特徵 ,而紅色線就是這篇文章提出的 。實驗證明,使用 代替 可以大幅提高模型效果。
5. Mind』s Eye: A Recurrent Visual Representation for Image Caption Generation
之前的兩篇論文,《Show, Attend and Tell: Neural Image Caption Generation with Visual Attention》以及《What Value Do Explicit High Level Concepts Have in Vision to Language Problems?》,一個是給RNN加上了Attention結構,一個是改進了CNN提取的特徵,都是比較好理解的。而這篇文章比較fancy,較多地改動了Decoder部分RNN的本身的結構,使得RNN網路不僅能將圖像特徵翻譯為文字,還能反過來從文字得到圖像特徵,此外還順帶提高了性能,我們一起來看下是怎麼做的。
下圖就是這篇文章中使用的Decoder RNN。 表示圖像特徵, 表示第t階段RNN的隱層狀態,而 是第t階段生成的單詞。 這三個量都是之前的模型中存在的,而作者又再這些量的基礎上加入了 和 。其中 表示的是「已經生成的文字」的隱變數,作用是記住已經生成單詞中包含的信息。這個量在每次生成 時都會使用到,作為給模型的提示。此外,作者還要求在每個階段都可以使用 去還原視覺信息 ,通過 計算的視覺信息就是 ,在訓練儘可能要求 ,換句話說,我們已經生成的文字都要儘可能地去表達視覺信息,才能做到這樣的還原。
設 ,表示在第t階段已經生成的所有t個單詞。 是已經生成的單詞表達信息的隱變數。這篇文章的核心就是,我們之前建模的都是 ,即在圖像信息和已經生成單詞的條件下找尋下一個單詞的概率,而這篇文章建模的是 ,由於這是 的聯合分布,因此我們不僅可以生成文字,還可以反過來利用文字生成圖像特徵。
如下圖,我們在生成文字的時候,不需要用到 ,因此將其去掉即可:
在利用文字生成圖像特徵時,沒有下面的 和 ,同樣將之去除:
6. From Captions to Visual Concepts and Back
最後還有一篇不得不提到的《From Captions to Visual Concepts and Back》。這篇為微軟出品,是和第一篇谷歌的論文同時期的文章,它們都去參加了微軟的Image Caption比賽(MS COCO caption challenge),總的結果是並列第一(如下圖),在具體的小指標上各有上下,都是屬於開創性的工作。之所以放到最後講是因為它並不屬於Encoder-Decoder架構,而是採用傳統的語言建模方式。
在圖像特徵提取方面,這篇文章和《What Value Do Explicit High Level Concepts Have in Vision to Language Problems?》類似,都是從圖像中提取可能存在的單詞,再對語言進行建模。不同點在於,之前那篇文章採用的是多標籤學習的方式,而這篇文章採用的是多示例學習(Multiple Instance Learning)的方法,不僅可以從圖像中提取可能的單詞,而且可以把單詞對應到具體的圖像區域。
首先來簡單介紹下多示例學習。多示例學習實際是一種半監督演算法。考慮這樣一種訓練數據:我們有很多個數據包(bag),每個數據包中有很多個示例(instance)。我們只有對bag的正負類標記,而沒有對instance的正負例標記。當一個bag被標記為正時,這個包里一定有一個instance是正類,但也有可能其他instance是負類,當一個bag被標記為負類時,它裡面的所有instance一定是負類。我們的目標是訓練一個分類器,可以對instance的正負進行判別。
多示例學習在現實中其實很常見。如一篇文章違禁時通常是因為該文章具有某些違禁詞,但我們可能無法知道具體是哪個詞違禁。在這個例子中,bag就是文章,instance就是單詞。又如在醫學圖像領域,CT圖被標定為有無病症,而一個人有病症是因為在CT圖的某個區域被檢測為病灶區域。我們往往只有CT圖的標註,但沒有CT圖中每個區域的標註。這時,bag就是CT圖像,而instance就是CT圖中的小區域。
在這篇論文中,就是使用多示例學習來處理從圖片出提取單詞這一問題。對每一個單詞來說,標註中含有該單詞的圖片就是正例的bag,圖中的區域就是instance。由此,我們使用多示例學習方法進行兩步迭代,第一步是利用當前演算法,選出正例bag中最有可能是正例的instance、以及負例bag的instance,第二步是利用選出的instance進行訓練,更新訓練。這樣迭代下去,就可以對圖片的區域進行分類了。這樣我們就可以從圖片的區域中提取所需要的單詞(如下圖)。在實際操作的時候,使用的是一種針對目標檢測改進版的多示例學習方法Noisy-OR MIL,細節可以參考論文《Multiple instance boosting for object detection》。
在圖像中提取好單詞後,這篇文章就採用一種傳統的方法來進行語言建模。設在圖片中提取的單詞都放在一個集合 中,自動生成的圖片標註為 ,我們的目標就是去建模 ,其中 ,表示生成第l個單詞時,還沒有使用的單詞。
建模 的方法是使用一些特徵提取函數從 這些單詞中提取一些特徵,如文中使用了 是否屬於 、n-Gram關係等特徵,每個特徵提取函數設為 ,對每個要生成的單詞,就可以得到一個打分 ,最後使用softmax函數將這些打分轉換為概率即可。
7. 總結
本文選取了Image Caption領域中比較重要的5篇文章進行了介紹。第一篇論文首先使用了Encoder-Decoder結構對此問題進行建模,接下來三篇文章分別從不同的角度對第一篇論文做出了改進。最後介紹的論文並沒有採用Encoder-Decoder結構,而是採用傳統的方式對語言進行建模,也具有一定啟發意義。
推薦閱讀:
※【專知薈萃16】主題模型Topic Model知識資料全集(基礎/進階/論文/綜述/代碼/專家,附PDF下載)
※5分鐘教你如何布局人工智慧
※美日巨型機器人已經運達決戰現場!希望誰贏呢?
※AI晶元四大流派論劍,中國能否彎道超車?|半導體行業觀察
※大家來預測一下吳恩達三個新項目之一deeplearning.ai之後,接下來的兩個項目將會是什麼項目?
TAG:人工智能 | 机器学习 | 深度学习DeepLearning |