計算機視覺 | 圖像描述與注意力機制
點擊上方“小白學視覺”,選擇加"星標"或“置頂”
重磅干貨,第一時間送達
本文轉(zhuǎn)自:視學算法
圖像描述的含義是生成圖像的描述,采用注意力機制生成圖像標題,圖像標題的每個詞集中在圖像中最相關(guān)的部分,并且預(yù)測下一個詞。
如下圖的圖像生成:

圖像標題:<start>a large airplane flying in the blue sky <end>
圖像標題生成框架:

該框架涉及的幾個概念:
圖像編碼(Encoder):將具有3個彩色通道的輸入圖像編碼成具有“學習”通道的較小圖像,這些編碼圖像包含了原始圖像的信息。
圖像解碼(Encoder):將編碼圖像逐字生成標題。
注意力網(wǎng)絡(luò)(Attention):編碼與詞相關(guān)的圖像,每個標題的詞集中在圖像最相關(guān)的部分。
束搜索(Beam search):解碼器逐字生成的標題序列中,束搜索算法得到最優(yōu)的標題序列。
下面詳細介紹這幾個概念。
我們使用ResNet-101網(wǎng)絡(luò)去編碼圖像,需要去除最后兩層的線性層,因為最后兩層的線性層是用于分類任務(wù)的,圖像編碼只需提取特征。
圖像編碼網(wǎng)絡(luò)如下圖:

ResNet網(wǎng)絡(luò)編碼的結(jié)果是由2048個通道大小為14×14圖像組成,模型參數(shù)通過遷移學習獲得。
若解碼器不使用注意力機制,那么解碼器的算法流程是:首先對編碼圖像所有像素進行平均,得到2048×1的向量,然后無論對該向量是否進行線性變換,都可以將其作為第一個隱藏狀態(tài)輸入解碼器,生成第一個單詞,并用該單詞作為輸入生成下一個單詞。

若解碼器使用注意力機制,那么解碼器在生成單詞時,需要考慮該單詞最相關(guān)的圖像部分。比如語句序列a man holds a生成單詞football時,解碼器需要關(guān)注圖像中足球所在的區(qū)域,并給該區(qū)域較大的權(quán)重。
如下圖含有注意力機制的解碼器:

解碼器網(wǎng)絡(luò)的輸入是前一個RNN單元的輸出隱藏層,上一個單詞的嵌入向量和注意力網(wǎng)絡(luò)生成的權(quán)重圖像,算法代碼需要將嵌入向量和注意力網(wǎng)絡(luò)拼接成一個向量作為輸入。
注意力網(wǎng)絡(luò)計算與詞相關(guān)的像素權(quán)重。
憑自己的直覺,如何估計圖像某一部分的重要性?若要突出圖像某一區(qū)域的重要性,那么需要提高該區(qū)域的權(quán)重。
在圖像描述項目中,你需要了解到目前為止生成的序列,根據(jù)注意力網(wǎng)絡(luò)生成像素權(quán)重,并決定接下來需要描述什么。
這正是注意力機制所做的——它考慮目前為止所生成的序列,并關(guān)注接下來需要描述的圖像部分。如下圖:

根據(jù)前面介紹的編碼器,解碼器和注意力機制,圖像描述框架如下圖:

算法流程:
1)編碼器編碼輸入圖像的信息,生成1048個通道大小為14×14的圖像,編碼器采用ResNet-101網(wǎng)絡(luò),不包括網(wǎng)絡(luò)最后兩層的線性層。
2)注意力網(wǎng)絡(luò)根據(jù)編碼圖像和上一層解碼器的輸出隱藏狀態(tài),生成與下一個單詞相關(guān)的圖像。
3)解碼器生成圖像的標題序列,解碼器采用LSTMcell網(wǎng)絡(luò)。
我們使用線性層將解碼器的輸出轉(zhuǎn)換為詞匯表中每個單詞的得分。
最直接和貪婪的方法是選擇當前得分最高的單詞來預(yù)測下一個單詞,這種做法很可能生成的不是最佳序列,因為剩下的單詞序列取決于你選擇的第一個單詞。如果第一個單詞不是最好的,那么接下來的序列預(yù)測都是次優(yōu)的。
解決方法是:每次解碼器都選擇最好的3個單詞,比如你在第一步選擇3個最好的單詞,第二步根據(jù)第一步的每個單詞,都生成3個最好的單詞,即第二步共生成9個單詞。結(jié)合第一步第二步,選擇最優(yōu)的3個單詞序列。以此類推,當預(yù)測單詞為<end>時,標題序列生成結(jié)束。
如下圖的束搜索算法生成最優(yōu)標題序列:


由上圖可知,最優(yōu)標題序列為:a man holds a football
參考
https://github.com/sgrvinod/a-PyTorch-Tutorial-to-Image-Captioning
交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學影像、GAN、算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~

