天天看點

計算機視覺 | 圖像描述與注意力機制

圖像描述的含義是生成圖像的描述,采用注意力機制生成圖像标題,圖像标題的每個詞集中在圖像中最相關的部分,并且預測下一個詞。

如下圖的圖像生成:

計算機視覺 | 圖像描述與注意力機制

圖像标題:<start>a large airplane flying in the blue sky <end>

圖像标題生成架構:

計算機視覺 | 圖像描述與注意力機制

該架構涉及的幾個概念:

圖像編碼(Encoder):将具有3個彩色通道的輸入圖像編碼成具有“學習”通道的較小圖像,這些編碼圖像包含了原始圖像的資訊。

圖像解碼(Encoder):将編碼圖像逐字生成标題。

注意力網絡(Attention):編碼與詞相關的圖像,每個标題的詞集中在圖像最相關的部分。

束搜尋(Beam search):解碼器逐字生成的标題序列中,束搜尋算法得到最優的标題序列。

下面詳細介紹這幾個概念。

1.圖像編碼

我們使用ResNet-101網絡去編碼圖像,需要去除最後兩層的線性層,因為最後兩層的線性層是用于分類任務的,圖像編碼隻需提取特征。

圖像編碼網絡如下圖:

計算機視覺 | 圖像描述與注意力機制

ResNet網絡編碼的結果是由2048個通道大小為14×14圖像組成,模型參數通過遷移學習獲得。

2.圖像解碼

解碼器是根據編碼圖像逐字生成标題,這裡使用循環神經網絡(RNN)生成标題序列,選擇的RNN類型為LSTM。

若解碼器不使用注意力機制,那麼解碼器的算法流程是:首先對編碼圖像所有像素進行平均,得到2048×1的向量,然後無論對該向量是否進行線性變換,都可以将其作為第一個隐藏狀态輸入解碼器,生成第一個單詞,并用該單詞作為輸入生成下一個單詞。

計算機視覺 | 圖像描述與注意力機制

若解碼器使用注意力機制,那麼解碼器在生成單詞時,需要考慮該單詞最相關的圖像部分。比如語句序列a man holds a生成單詞football時,解碼器需要關注圖像中足球所在的區域,并給該區域較大的權重。

如下圖含有注意力機制的解碼器:

計算機視覺 | 圖像描述與注意力機制

解碼器網絡的輸入是前一個RNN單元的輸出隐藏層,上一個單詞的嵌入向量和注意力網絡生成的權重圖像,算法代碼需要将嵌入向量和注意力網絡拼接成一個向量作為輸入。

3.注意力網絡

注意力網絡計算與詞相關的像素權重。

憑自己的直覺,如何估計圖像某一部分的重要性?若要突出圖像某一區域的重要性,那麼需要提高該區域的權重。

在圖像描述項目中,你需要了解到目前為止生成的序列,根據注意力網絡生成像素權重,并決定接下來需要描述什麼。

這正是注意力機制所做的——它考慮目前為止所生成的序列,并關注接下來需要描述的圖像部分。如下圖:

計算機視覺 | 圖像描述與注意力機制

4.圖像描述架構

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

計算機視覺 | 圖像描述與注意力機制

算法流程:

1)編碼器編碼輸入圖像的資訊,生成1048個通道大小為14×14的圖像,編碼器采用ResNet-101網絡,不包括網絡最後兩層的線性層。

2)注意力網絡根據編碼圖像和上一層解碼器的輸出隐藏狀态,生成與下一個單詞相關的圖像。

3)解碼器生成圖像的标題序列,解碼器采用LSTMcell網絡。

5. 束搜尋(Beam Search)

我們使用線性層将解碼器的輸出轉換為詞彙表中每個單詞的得分。

最直接和貪婪的方法是選擇目前得分最高的單詞來預測下一個單詞,這種做法很可能生成的不是最佳序列,因為剩下的單詞序列取決于你選擇的第一個單詞。如果第一個單詞不是最好的,那麼接下來的序列預測都是次優的。

解決方法是:每次解碼器都選擇最好的3個單詞,比如你在第一步選擇3個最好的單詞,第二步根據第一步的每個單詞,都生成3個最好的單詞,即第二步共生成9個單詞。結合第一步第二步,選擇最優的3個單詞序列。以此類推,當預測單詞為<end>時,标題序列生成結束。

如下圖的束搜尋算法生成最優标題序列:

計算機視覺 | 圖像描述與注意力機制
計算機視覺 | 圖像描述與注意力機制

由上圖可知,最優标題序列為:a man holds a football

參考

​​https://github.com/sgrvinod/a-PyTorch-Tutorial-to-Image-Captioning​​

備注:公衆号菜單包含了整理了一本AI小抄,非常适合在通勤路上用學習。

繼續閱讀