Tensorflow實現:圖像描述---Show and Tell: A Neural Image Caption Generator

Tensorflow實現:圖像描述—Show and Tell: A Neural Image Caption Generator


Introduction

  • Image Caption是一個融合計算機視覺、自然語言處理和機器學習的綜合問題,它類似於翻譯一副圖片爲一段描述文字。該任務對於人類來說非常容易,但是對於機器卻非常具有挑戰性,它不僅需要利用模型去理解圖片的內容並且還需要用自然語言去表達它們之間的關係。除此之外,模型還需要能夠抓住圖像的語義信息,並且生成人類可讀的句子。
  • 簡單理解爲:爲圖片生成描述語言,輸入爲一張圖片,輸出爲客觀描述圖片的句子。
  • 研究難點與挑戰:
    (1)多模態理解與推理,包括:圖片(捕捉真實世界的原始刻畫);自然語言(代表更高一級的抽象)
    (2)複合理解與推理,包括:多個元素(物體、動作、場景、事件等);多步、迭代過程
  • 參考論文:Show and Tell: Lessons learned from the 2015 MSCOCO Image Captioning Challenge.
    Oriol Vinyals, Alexander Toshev, Samy Bengio, Dumitru Erhan.
    IEEE transactions on pattern analysis and machine intelligence (2016).
    Full text available at: http://arxiv.org/abs/1609.06647
  • 效果舉例:
Tables Are

Database:MSCOCO、Flickr30k、Flickr8k

這裏作者使用MSCOCO數據集,故只對MSCOCO數據集進行介紹。
- COCO數據集是微軟團隊獲取的一個可以用來圖像recognition+segmentation+captioning
數據集,其官方說明網址:http://mscoco.org/
- 爲了更好的介紹這個數據集,微軟在ECCV Workshops裏發表這篇文章:Microsoft COCO: Common Objects in Context。從這篇文章中,我們瞭解了這個數據集以scene understanding爲目標,主要從複雜的日常場景中截取,圖像中的目標通過精確的segmentation進行位置的標定。
- 該數據集主要解決3個問題:目標檢測,目標之間的上下文關係,目標的2維上的精確定位。
- COCO數據集分兩部分發布,前部分於2014年發佈,後部分於2015年,2014年版本:82,783 training, 40,504 validation, and 40,775 testing images,有270k的segmented people和886k的segmented object;2015年版本:165,482 train, 81,208 val, and 81,434 test images。

Database 訓練集 評估集 測試集 文字標註
MSCOCO(2014) 82783 40504 40775 5句描述
Flickr30k 28000 1000 1000 5句描述
Flickr8k 6000 1000 1000 5句描述

- 其性能對比和一些例子:
這裏寫圖片描述
這裏寫圖片描述


Architecture

  • Show and Tell模型是encoder-decoder神經網絡的一個例子。它首先將圖像“編碼”爲固定長度的向量表示,然後將表示“解碼”爲自然語言描述。
  • 圖像編碼器是深度卷積神經網絡。 這種類型的網絡廣泛用於圖像任務,並且目前是用於對象識別和檢測的最新技術。本文作者選用的網絡是在ILSVRC-2012-CLS圖像分類數據集上預先訓練的Inception v3的CNN模型。
  • 解碼器是一個長短期記憶(LSTM)網絡。 這種類型的網絡通常用於序列建模任務,如語言建模和機器翻譯。 在Show and Tell模型中,LSTM網絡被訓練爲一種以圖像編碼爲條件的語言模型。
  • 標題中的單詞用嵌入模型表示。 詞彙表中的每個詞都與在訓練期間學習的固定長度矢量表示相關聯。
    這裏寫圖片描述
  • 在結構圖中: {s0, s1, …, sN-1}是描述的單詞(the words of the caption),{wes0, wes1, …, wesN-1} 是它們相應的單詞的嵌入向量(their corresponding word embedding vectors),輸出 {p1, p2, …, pN}爲模型爲句子中的下一個單詞生成的概率分佈, {log p1(s1), log p2(s2), …, log pN(sN)} 是每個步驟中正確單詞的對數似然值,這些項的否定總和就是模型的最小化目標。
具體推導公式:
LSTM語言生成器這裏寫圖片描述CNN+LSTM這裏寫圖片描述
  • 訓練細節:
    • Step 1:固定CNN參數,訓練LSTM語言模型500K
      • CNN參數:在ImageNet數據集預訓練(pre-trained)好的參數
      • 訓練拆分:一句話n個詞 -> n-1組訓練序列
    • Step 2:細調CNN參數,CNN&LSTM一起訓練100K
  • 推理策略
    • Beam Search (尺寸=3)
    • 每一步獲取Top3概率的詞作爲備選

Getting Started

Step 1:A Note on Hardware and Training Time

  • 硬件環境:i7-6700K,GTX1060 6G,16G,150G以上磁盤空間
  • 軟件環境:Tensorflow1.4,Python3.6,最終進行訓練65000次(未達到要求的500k+100K),使用Tensorflow-GPU進行訓練,耗時約9小時,每次迭代的平均時間爲0.45秒。
  • 如果讀者未安裝Tensorflow-GPU版。使用CPU進行訓練,時間約爲這個時間的10倍長,供讀者們參考。
  • 作者所用的完整工程文件目錄,下載地址:
    http://download.csdn.net/download/laurenitum0716/10256327
    這裏寫圖片描述

Step 2: Install Required Packages

  • TensorFlow 1.0 or greater
  • NumPy
  • Natural Language Toolkit (NLTK)
    安裝NLTK教程:運行/Show_And_Tell/datainstall_nltk_data.py,內容如下:
import nltk
nltk.download()

執行運行,在彈出的對話框中選Models標籤頁,下載路徑設置爲C:\nltk_data,選中punkt後點Download按鈕下載:
這裏寫圖片描述


Step 3: Prepare the Training Data

  • 爲了訓練模型,您需要提供原生TFRecord格式的訓練數據。TFRecord格式由一組包含序列化tf.Sequence示例協議緩衝區的分片文件組成。 每個 tf.Sequence 示例圖片包含一個圖像(JPEG格式),一個標題和元數據,如圖像ID。
  • 每個標題都是一個單詞列表。 在預處理過程中,會創建一個字典,將詞彙表中的每個單詞分配給一個整數值的id。 每個標題都被編碼爲tf.Sequence示例原型中的整數詞標識列表。
  • 我們提供了一個腳本來下載和預處理MSCOCO圖像字幕數據集成這種格式。 根據您的網絡和計算機速度,下載和預處理數據可能需要幾個小時(作者完成時間約爲1.5小時,以供參考),請耐心等待。
  • 在運行腳本之前,請確保您的硬盤至少有150GB可用空間用於存儲下載和處理的數據。

(1)下載mscoco數據集(3個文件)到/Show_And_Tell/data/mscoco/raw-data路徑

(2)原始數據轉換爲TFRecord文件,執行 /Show_And_Tell/data/build_mscoco_data.py
轉化完成後(~100G),將會有8個test、256個train和4個val,這些文件將分別對應:train-?????-of-00256, val-?????-of-00004 和 test-?????-of-00008
這裏寫圖片描述


Step 4: Download the Inception v3 Checkpoint

下載inception v3的ImageNet預訓練模型到/Show_And_Tell/data/inception_v3,並解壓


Training a Model

執行train.py進行訓練(Global step至少要大於5000)
作者以訓練65000次的模型,下載地址:https://pan.baidu.com/s/1bqkq4NX
將下載後的文件,解壓至:/Show_And_Tell/data/mscoco/train文件夾下即可。
這裏寫圖片描述


Generating Captions

執行evaluate.py進行性能評估
執行run_inference.py進行單圖測試

這裏寫圖片描述 這裏寫圖片描述
這裏寫圖片描述 這裏寫圖片描述
這裏寫圖片描述 這裏寫圖片描述
這裏寫圖片描述 這裏寫圖片描述

當然,有些圖片就不知道在說些什麼了。。。

這裏寫圖片描述 這裏寫圖片描述
這裏寫圖片描述 這裏寫圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章