深度學(xué)習(xí)可以自動生成圖像的文本描述嗎?
對圖像搜索和幫助視覺障礙者「查看」世界等應(yīng)用而言,讓圖像帶有文本描述是非常有價值的。使用人力標注顯然不現(xiàn)實,而隨著深度學(xué)習(xí)技術(shù)的發(fā)展,使用機器為圖像自動生成準確的文本描述成為了可能。Jason Brownlee 博士的這篇文章對使用深度學(xué)習(xí)的圖像描述進行了介紹。
圖像描述涉及到為給定圖像(比如照片)生成人類可讀的文本描述。這個問題對人類而言非常簡單,但對機器來說卻非常困難,因為它既涉及到理解圖像的內(nèi)容,還涉及到將理解到的內(nèi)容翻譯成自然語言。
最近,在為圖像自動生成描述(稱為「字幕」)的問題上,深度學(xué)習(xí)方法已經(jīng)替代了經(jīng)典方法并實現(xiàn)了當(dāng)前最佳的結(jié)果。在這篇文章中,你將了解可以如何使用深度神經(jīng)網(wǎng)絡(luò)模型為照片等圖像自動生成描述。
讀完本文之后,你將了解:
為圖像生成文本描述的難點以及將計算機視覺和自然語言處理領(lǐng)域的突破結(jié)合起來的必要性。
神經(jīng)特征描述模型(即特征提取器和語言模型)的組成元素。
可以如何將這些模型元素組合到編碼器-解碼器(Encoder-Decoder)中,也許還會用到注意機制。
概述這篇文章分為三部分,分別是:
1. 使用文本描述圖像
2. 神經(jīng)描述模型
3. 編碼器-解碼器結(jié)構(gòu)
使用文本描述圖像描述圖像是指為圖像(比如某個物體或場景的照片)生成人類可讀的文本描述。
這個問題有時候也被稱為「自動圖像標注」或「圖像標注」。
這個問題對人類而言輕而易舉,但對機器來說卻非常困難。
快速一瞥足以讓人類指出和描述一個視覺場景的豐富細節(jié)。但事實證明,我們的視覺識別模型難以掌握這樣出色的能力。——《用于生成圖像描述的深度視覺-語義對齊》,2015要解決這個問題,既需要理解圖像的內(nèi)容,也需要將其中的含義用詞語表達出來,并且所表達出的詞語必須以正確的方式串接起來才能被理解。這需要將計算機視覺和自然語言處理結(jié)合起來,是廣義的人工智能領(lǐng)域的一大難題。
自動描述圖像內(nèi)容是人工智能領(lǐng)域的一個基本問題,該問題將計算機視覺和自然語言處理連接到了一起。——《Show and Tell:一種神經(jīng)圖像描述生成器》,2015此外,這個問題也有不同的難度;讓我們通過例子看看這個問題的三種不同變體。
1. 分類圖像
從數(shù)百個或數(shù)千個已知分類中為圖像分配一個類別標簽。
將圖像分類到已知類別的示例;來自《檢測鱷梨到西葫蘆:我們已經(jīng)實現(xiàn)了什么與我們將會實現(xiàn)什么?》,2013
2. 描述圖像
生成圖像內(nèi)容的文本描述。
為照片生成描述的示例;來自《用于視覺識別和描述的長期循環(huán)卷積網(wǎng)絡(luò)》,2015
3. 標注圖像
為圖像中的特定區(qū)域生成文本描述。
用描述標注圖像區(qū)域的示例;來自《用于生成圖像描述的深度視覺-語義對齊》,2015
這個問題還可以延伸到隨時間描述視頻中的圖像。
在這篇文章中,我們關(guān)注的重點是描述圖像,我們稱之為圖像描述(image captioning)。
神經(jīng)描述模型神經(jīng)網(wǎng)絡(luò)模型已經(jīng)主導(dǎo)了自動描述生成領(lǐng)域;這主要是因為這種方法得到了當(dāng)前最佳的結(jié)果。
在端到端的神經(jīng)網(wǎng)絡(luò)模型之前,生成圖像描述的兩種主要方法是基于模板的方法和基于最近鄰并修改已有描述的方法。
在將神經(jīng)網(wǎng)絡(luò)用于生成描述之前,有兩種方法占主導(dǎo)地位。第一種涉及到生成描述模板,該模板會基于目標檢測和屬性發(fā)現(xiàn)(attribute discovery)的結(jié)果進行填充。第二種方法是首先從一個大型數(shù)據(jù)庫中檢索有描述的相似圖像,然后修改這些檢索到的描述以符合查詢的情況。…… 在現(xiàn)在占主導(dǎo)地位的神經(jīng)網(wǎng)絡(luò)方法出現(xiàn)后,這兩種方法都已經(jīng)失去了人們的支持。——《Show and Tell:一種神經(jīng)圖像描述生成器》,2015用于描述的神經(jīng)網(wǎng)絡(luò)模型涉及到兩個主要元素:
1. 特征提取
2. 語言模型
特征提取模型
特征提取模型是一種神經(jīng)網(wǎng)絡(luò)。給定一張圖像,它可以提取出顯著的特征,通常用固定長度的向量表示。
提取出的特征是該圖像的內(nèi)部表征,不是人類可以直接理解的東西。
用作特征提取子模型的通常是深度卷積神經(jīng)網(wǎng)絡(luò)(CNN)。這種網(wǎng)絡(luò)可以在圖像描述數(shù)據(jù)集中的圖像上直接訓(xùn)練。
或者可以使用預(yù)訓(xùn)練的模型(比如用于圖像分類的當(dāng)前最佳的模型),或者也可以使用混合方法,即使用預(yù)訓(xùn)練的模型并根據(jù)實際問題進行微調(diào)。
使用為 ILSVRC 挑戰(zhàn)賽在 ImageNet 數(shù)據(jù)集上開發(fā)的表現(xiàn)最好的模型是很常見的做法,比如 Oxford Vision Geometry Group 模型,簡稱 VGG。
……我們探索了多種解決過擬合的技術(shù)。避免過擬合的最明顯方法是將我們系統(tǒng)中的 CNN 組件的權(quán)重初始化為一個預(yù)訓(xùn)練的模型。——《Show and Tell:一種神經(jīng)圖像描述生成器》,2015特征提取器
語言模型
一般而言,當(dāng)一個序列已經(jīng)給出了一些詞時,語言模型可以預(yù)測該序列的下一個詞的概率。
對于圖像描述,語言模型這種神經(jīng)網(wǎng)絡(luò)可以基于網(wǎng)絡(luò)提取出的特征預(yù)測描述中的詞序列并根據(jù)已經(jīng)生成的詞構(gòu)建描述。
常用的方法是使用循環(huán)神經(jīng)網(wǎng)絡(luò)作為語言模型,比如長短期記憶網(wǎng)絡(luò)(LSTM)。每個輸出時間步驟都會在序列中生成一個新詞。
然后每個生成的詞都會使用一個詞嵌入(比如 word2vec)進行編碼,該編碼會作為輸入被傳遞給解碼器以生成后續(xù)的詞。
對該模型的一種改進方法是為輸出序列收集詞在詞匯庫中的概率分布并搜索它以生成多個可能的描述。這些描述可以根據(jù)似然(likelihood)進行評分和排序。常見的方式是使用波束搜索(Beam Search)進行這種搜索。
語言模型可以使用從圖像數(shù)據(jù)集提取出的預(yù)計算的特征單獨訓(xùn)練得到;也可以使用特征提取網(wǎng)絡(luò)或某些組合方法來聯(lián)合訓(xùn)練得到。
語言模型
編碼器-解碼器架構(gòu)構(gòu)建子模型的一種常用方法是使用編碼器-解碼器架構(gòu),其中兩個模型是聯(lián)合訓(xùn)練的。
這種模型的基礎(chǔ)是將圖像編碼成緊湊的表征的卷積神經(jīng)網(wǎng)絡(luò),后面跟著一個循環(huán)神經(jīng)網(wǎng)絡(luò)來生成對應(yīng)的句子。這種模型的訓(xùn)練目標是最大化給定圖像的句子的似然。——《Show and Tell:一種神經(jīng)圖像描述生成器》,2015這種架構(gòu)原本是為機器翻譯開發(fā)的,其中輸入的序列(比如法語)會被一個編碼器網(wǎng)絡(luò)編碼成固定長度的向量。然后一個分立的解碼器網(wǎng)絡(luò)會讀取這些編碼并用另一種語言(比如英語)生成輸出序列。
除了能力出色外,這種方法的好處是可以在該問題上訓(xùn)練單個端到端模型。
當(dāng)將該方法用于圖像描述時,編碼器網(wǎng)絡(luò)使用了深度卷積神經(jīng)網(wǎng)絡(luò),解碼器網(wǎng)絡(luò)則是 LSTM 層的堆疊。
在機器翻譯中,「編碼器」RNN 會讀取源句子并將其轉(zhuǎn)換成信息豐富的固定長度的向量表征,這種表征又會被用作「解碼器」RNN 的初始隱藏狀態(tài),進而生成目標句子。我們在這里提出遵循這種優(yōu)雅的方案,并使用深度卷積神經(jīng)網(wǎng)絡(luò)(CNN)替代編碼器 RNN。——《Show and Tell:一種神經(jīng)圖像描述生成器》,2015CNN 和 LSTM 架構(gòu)的示例,來自《Show and Tell:一種神經(jīng)圖像描述生成器》,2015
使用注意機制的描述模型
編碼器-解碼器的一個局限性是使用了單個固定長度的表征來保存提取出的特征。
在機器翻譯中,這個問題通過在更豐富的編碼上開發(fā)的注意機制而得到了解決,從而讓解碼器可以學(xué)習(xí)在生成翻譯中的每個詞時應(yīng)該注意哪里。
這種方法也已經(jīng)被用于改進用于圖像描述的編碼器-解碼器架構(gòu)的表現(xiàn)水平——讓解碼器可以學(xué)習(xí)在生成描述中每個詞時應(yīng)該關(guān)注圖像中的哪些部分。
受近來描述生成方面的進步的激勵和在機器翻譯和目標識別中成功應(yīng)用注意機制的啟發(fā),我們調(diào)查了在生成描述時可以關(guān)注圖像中突出部分的模型。——《Show and Tell:一種神經(jīng)圖像描述生成器》,2015這種方法的一大優(yōu)勢是可以準確可視化在生成描述中的每個詞時所注意的位置。
我們還通過可視化展示了模型在生成輸出序列中對應(yīng)的詞時自動學(xué)習(xí)關(guān)注突出對象的方式。——《Show and Tell:一種神經(jīng)圖像描述生成器》,2015用例子理解最簡單,如下:
使用注意的圖像描述示例,來自《Show and Tell:一種神經(jīng)圖像描述生成器》,2015
進階閱讀如果你還想進一步更深入地了解圖像描述,可以參看這里給出的資源。
論文
《Show and Tell:一種神經(jīng)圖像描述生成器(Show and Tell: A Neural Image Caption Generator)》,2015:https://arxiv.org/abs/1411.4555
《Show, Attend and Tell:使用視覺注意的神經(jīng)圖像描述生成(Show, Attend and Tell: Neural Image Caption Generation with Visual Attention)》,2015:https://arxiv.org/abs/1502.03044
《用于視覺識別和描述的長期循環(huán)卷積網(wǎng)絡(luò)(Long-term recurrent convolutional networks for visual recognition and description)》,2015:https://arxiv.org/abs/1411.4389
《用于生成圖像描述的深度視覺-語義對齊(Deep Visual-Semantic Alignments for Generating Image Descriptions)》,2015:https://arxiv.org/abs/1412.2306
文章
維基百科:自動圖像標注:https://en.wikipedia.org/wiki/Automatic_image_annotation
Show and Tell:在 TensorFlow 中開源的圖像描述:https://research.googleblog.com/2016/09/show-and-tell-image-captioning-open.html
Andrej Karpathy 和李飛飛:使用卷積網(wǎng)絡(luò)和循環(huán)網(wǎng)絡(luò)的自動圖像描述;視頻:https://www.youtube.com/watch?v=xKt21ucdBY0 ;幻燈片:https://cs.stanford.edu/people/karpathy/sfmltalk.pdf
項目
用于生成圖像描述的深度視覺-語義對齊,2015:http://cs.stanford.edu/people/karpathy/deepimagesent/
NeuralTalk2:運行在 GPU 上的有效圖像描述 Torch 代碼,來自 Andrej Karpathy:https://github.com/karpathy/neuraltalk2