1. 程式人生 > >【影象理解】自動生成影象的文字描述

【影象理解】自動生成影象的文字描述

Deep Visual-Semantic Alignments for Generating Image Descriptions
Andrej Karpathy Li Fei-Fei

摘要

這篇文章的作者提出了一種方法,可以用於生成影象的自然語言描述。主要包含了兩個部分(1)視覺語義的對齊模型;(2)為新影象生成文字描述的 Multimodal RNN 模型。

其中視覺語義的對齊模型主要由3部分組成:

  1. 應用於影象區域的卷積神經網路(Convolution Neural Networks)。
  2. 應用於語句的雙向迴圈神經網路(bidirectional Recurrent Neural Networks)。
  3. 結構化的目標函式,通過多模態嵌入來對齊視覺與語義。

Figure1

簡介

我們的目標是在給定一張影象的情況下,得到他的自然語言描述。如何做呢?假設我們有一個很大的資料庫,每條記錄是影象以及它對應的語句描述。每條語句的詞彙片段其實對應了一些特定的但是未知的影象區域。我們的方法是推斷出這些詞彙片段和影象區域的對應關係,然後使用他們來生成一個泛化的語言描述模型。具體來說,可以分為兩個部分:

  1. 一個深度神經網路模型用於推斷語句片段與影象區域的對應關係(如Figure 2的中間那張圖所示)。如何將影象與語句片段關聯起來呢?通過mutimodal embedding空間和一個結構化的目標函式。
  2. 一個Mutimodal RNN模型,以圖片為輸入,輸出它的文字描述(如Figure 2的右圖所示)。

Figure2

模型

概述

模型的最終目標是生成影象區域的文字描述。訓練階段,模型的輸入是影象集合和對應的語句(如Figure2所示)。這裡有兩個模型,第一個模型通過多模嵌入來對齊語句片段和視覺區域。然後,我們將這些對齊好的視覺區域和語句片段作為訓練資料,訓練一個Multimodal RNN模型,這個模型可以根據輸入影象自動生成對應的文字描述。

3.1 視覺與語言資料的對齊

3.1.1 影象的表示

使用Region Convolution Neural Network(RCNN)檢測影象上的物體,取top 19個檢測到的影象區域,加上整張影象。然後計算這個20個影象塊的CNN特徵,每個特徵是4096維(最後一個全連線層的輸出)。

公式1

其中Wmh×4096 維的矩陣,h是多模態嵌入空間的維度(1000到1600的範圍)。因此每個影象區域表示為h維的向量 {vi|i=1...20}

3.1.2 語句的表示

為了建立內部模態的關聯性(單詞與影象區域的關聯性),需要將語句中的單詞也對映到相同的h維的嵌入空間中。最簡單的方法是將單詞直接進行對映,但是這樣就忽略掉了單詞間的順序和上下文資訊。因此本文提出使用Bidirectional Reccurrent Neural Network(雙向迴圈神經網路,BRNN)來計算單詞的表示。

BRNN以N個單詞(encoded in a 1-of-k representation)的序列作為輸入, 將每個單詞轉換為h維的向量。下標t=1...N 表示單詞在句子中的位置,BRNN的具體形式如下列公式所示:

[公式2-6]

It是一個指示向量,它的含義是: 初始時這是一個全0的列向量,假設句子中第t個詞在詞典(word vocabulary)中的位置為i, 那只有i位置的值為1,其他位置的值全為0。

Ww是一個單詞嵌入矩陣(簡單來說應該就是一個轉換矩陣或者投影矩陣),初始化為300維的word2vec的權重,並保持不變。

BRNN包含了兩個獨立的過程, 一個從左到右(hft), 一個從右到左(hbt) , 如圖3所示。

最後第t個詞的h維輸出st, 是一個關於這個詞的位置和句子的上下文資訊的函式。

We,Wf,Wb,Wd,be,bf,bb,bd是要學習的引數。

啟用函式f是整流線性單元(ReLU), f:xmax(0,x)

figure3

3.1.3 對齊模型的目標函式

上文描述瞭如何將影象和句子表示h維向量的集合,那麼我們將影象vs句子的得分看作多個影象區域vs單詞的得分的一個函式, 以內積vTist作為 i-th影象區域與t-th word的相似性度量,那麼影象k與句子l的得分為:

公式7

gk是影象區域的集合,gl是單詞的集合。

得分函式的簡化版本:

公式8

公式8表示每個單詞只與最匹配的那個影象區域進行對齊。

假設 k=l 表示相對應的影象和語句,那麼最終的結構化損失函式為:

公式9

它的物理意義就是使得Skk要儘量高,而SklSlk儘量小。也就是說相關的影象和語句會獲得更高的得分,而非相關的影象和語句將獲得比較低的得分。

3.2 Multimodal Recurrent Neural Network 用於產生影象描述

假定我們有一些影象和相關文字描述的集合,這些集合可以是整幅的影象和相關的句子描述,也可以是影象區域和相關的文字片段。主要的挑戰是設計一個模型,可以根據給出的影象,預測出可變尺寸的文字序列。

訓練階段,Multimodal RNN輸入影象I和對應的文字序列的特徵向量序列(x1,...,xT)xt表示第t個詞的特徵向量。然後通過重複下面的迭代過程 (t=1toT) 來計算隱藏狀態序列(h1,...,hT)和輸出值序列(y1,...,yT):

公式13-15

CNNθc(I)表示CNN最後一層的輸出。Whi,Whx,Whh,Woh,xi,bh,bo是要學習的引數。 yt是輸出向量,表示了單詞在字典中的概率, 還有額外的一個維度表示結束符的概率。

  • RNN training RNN根據一個詞(xt)和之前的上下文資訊(ht1)來預測下一個詞(yt)。在訓練的第一步通過引入影象資訊(bv)對預測值產生影響。訓練過程參考Figure4: 設定h0為0向量,x1為一個特定的START向量, 要求的label y1對應了序列的第一個詞,以此類推。最後一步中,XT表示最後一個詞,目標標籤yT則設定為一個特定的END記號。那麼目標函式就是要最大化目標標籤的對數概率(例如, softmax分類器)

  • RNN at test time 以影象為輸入,預測它的文字描述。首先計算影象的表示bv, 設定h0=0, x1為START向量,計算第一個詞的概率分佈y1, 根據最大的那個概率來獲得一個詞,設定它的嵌入向量為

    相關推薦

    影象理解自動生成影象文字描述

    Deep Visual-Semantic Alignments for Generating Image Descriptions Andrej Karpathy Li Fei-Fei 摘要 這篇文章的作者提出了一種方法,可以用於生成影象的自然語言描述。主

    OpenCV學習縮放影象

    《OpenCV入門指南》系列文章地址:http://blog.csdn.net/morewindows/article/category/1291764  一. 主要函式介紹 1.1 cvResize 函式功能:影象大小變換 函式原型: voidcvResize(  

    數字影象處理七.MFC影象增強之影象普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

            程式碼如下:void CImageProcessingView::OnTxzqPtph2() { if(numPicture==0) { AfxMessageBox("載入圖片後才能影象增強(平滑)!",MB_OK,0); return; } AfxMessageBox("影象

    OpenCV影象處理三、影象的邏輯運算

    影象的邏輯運算就是將兩幅影象的對應畫素進行邏輯運算。邏輯運算主要包括 與(AND)或(OR)及補運算。要對灰度影象進行邏輯運算,就要首先對影象進行二值化處理。 影象的二值化處理在上一篇中已經敘述完畢,這篇主要寫影象的與,或和補三種邏輯運算。 在OpenCV中,除了本文中所提

    正則表示式自動生成各類正則程式碼

    1.開啟線上正則網址: https://regex101.com/   2.輸入需要正則的內容和正則表示式: 第一行輸入正則表示式;第二行輸入需要匹配的文字。   3.輸入完後點擊“code generator” 選擇自己需要的開發語言,自動生成

    自動生成整型序列

    目錄:https://www.cnblogs.com/liqingwen/p/10261436.html 當需要一系列整型值時,可以使用某種迴圈手動建立,或者可以使用 Enumerable.Range 方法。以下為程式碼說明: var oneT

    Python自動生成命令列工具

    Python 中用於生成命令列介面(Command Line Interfaces, CLIs)的工具已經有一些了,例如已經成為 Python 標準庫的 argparse 和第三方的 click ,這些都是很不錯的工具。但是這些工具為 Python 程式生成 C

    OpenCV影象處理八、影象的掩碼操作

    本篇內容參考 朱偉 主編 OpenCV影象處理程式設計例項 影象的掩碼操作是指通過掩碼核算子重新計算影象中各個畫素的值,掩碼核子刻畫鄰域畫素點對新畫素值的影響程度,同時根據掩碼運算元中權重因子對原畫素點進行加權平均。影象掩碼操作常常用於影象的平滑,邊緣檢測和特徵分析等不同的

    Hibernate自動生成資料庫表

      雖說整體上對SSH有一定的把控使用能力,但還是見微知著,點滴積累。Hibernate本意是冬眠,很好的封裝了JDBC和資料庫互動,實現了物件的持久化操作。所以也可以理解物件的持久化其實就是“冬眠”

    影象融合簡單認識影象融合

    概念   影象融合(Image Fusion)是指將多源通道所採集到的關於同一目標的影象資料經過影象處理和計算機技術等,最大限度的提取各自通道中的有利資訊,最後綜合成高質量的影象,以提高影象資訊的利用率、改善計算機解譯精度和可靠性、提升原始影象的

    Deep Learning深度學習影象標註工具VGG Image Annotator (VIA)使用教程

    VGG Image Annotator (VIA)是一款開源的影象標註工具,由Visual Geometry Group開發。可以線上和離線使用,可標註矩形、圓、橢圓、多邊形、點和線。標註完成後,可以匯出為csv和json檔案格式。 一、新增圖片 點選via.ht

    OpenCV影象處理五、影象的幾何變換(下)

    5.1 影象的縮放變換 影象的縮放指的是將影象的尺寸變小或變大的過程,也就是減少或增加原影象資料的畫素個數。簡單來說,就是通過增加或刪除畫素點來改變影象的尺寸。當影象縮小時,影象會變得更加清晰,當影象放大時,影象的質量會有所下降,因此需要進行插值處理。 在影象縮放中常常會用

    python影象處理python的影象處理模組Image原創

    版本資訊:2.7.11 環境:windows 7 64位系統 編輯器:PyCharm 執行工具:PyCharm 檔案地址:D:\phpStudy\WWW\python\Image 一、引入影象模組 1. PIL簡介:PIL(Python Imaging Library Py

    影象處理OpenCV+Python影象處理入門教程(四)幾何變換

           這篇隨筆介紹使用OpenCV進行影象處理的第四章 幾何變換。 4  幾何變換        影象的幾何變換是指將一幅影象對映到另一幅影象內。有縮放、翻轉、仿射變換、透視、重對映等操作。 4.1 

    影象處理OpenCV+Python影象處理入門教程(五)閾值處理

           這篇隨筆介紹使用OpenCV進行影象處理的第五章 閾值處理。 5  閾值處理 閾值是指畫素到達某臨界值。閾值處理表示畫素到達某臨界值後,對該畫素點進行操作和處理。 例如:設定一幅影象素閾值為200,則圖片中所有大於200的畫素點設定為2

    簡單理解gulp和webpack的區別

    task ont 是個 多個 自動化構建 簡單明了 能夠 基本 指正 Gulp和Webpack的基本區別: gulp可以進行js,html,css,img的壓縮打包,是自動化構建工具,可以將多個js文件或是css壓縮成一個文件,並且可以壓縮為一行,以此來減少文件體積,加快

    線上直播人工智慧中的文字分類技術

    講師:黃鴻波                            講師簡介: 珠海金山辦公軟體有限公司(WPS)人工智慧領域專家,高階演算法工

    遊戲開發集合圖片、文字、圖形、音樂的遊戲視窗

    //Windows視窗標頭檔案 #include <windows.h> //PlaySound函式包含的標頭檔案 #pragma comment(lib,"winmm.lib") //視窗寬度 #define WINDOW_WIDTH 1132 //視窗高度 #defi

    遊戲開發遊戲視窗輸入文字

    字型顏色對照表:https://www.sioe.cn/yingyong/yanse-rgb-16/ //Windows視窗標頭檔案 #include <windows.h> //PlaySound函式包含的標頭檔案 #pragma comment(lib,"winmm.lib"

    oracle效能11g生成ASH報告

    oracle 11g生成ASH報告 ASH以V$SESSION為基礎,每秒取樣一次,記錄活動會話等待的事件。不活動的會話不會取樣,取樣工作由新引入的後臺程序MMNL來完成。ASH buffers 的最小值為1MB,最大值不超過30MB.記憶體中記錄資料。期望值是記錄一小時的內容。 資料庫