[論文筆記] 圖像密集標註
論文概述
純屬個人理解,梳理自己思路用,僅供參考(可能會有標點錯誤或語句不通順 +_+)
圖像標註屬於圖像語義理解的一個領域,圖像的語義理解需要利用多模態的數據,主要是圖片或視頻的視覺數據(可以是圖像特徵,骨架,分割mask等等視覺表示),還有語言為主的文本或知識圖譜,以及最近論文音頻數據。
這次主要介紹關於圖片的dense標註方面信息,分別來自兩篇論文,一篇是Deep Visual-Semantic Alignments for Generating Image Descriptions
,另一篇是DenseCap: Fully Convolutional Localization Networks for Dense Captioning
。關於圖片標註常用的思路是通過cnn對整張圖片提取高層抽象特徵,然後作為rnn的hidden,輸入start標籤,最後利用rnn生成語句。這種方式的圖像標註,往往生成信息比較籠統,不能夠體現語言對圖像充分的理解,為了提升語言生成的精細能力,以上兩面論文都從dense的圖像特徵來訓練rnn,所謂dense是指利用detection網路將所有可以檢測到的bbox對應的圖像feature,如下圖所示。第一篇論文不是end-to-end,第二篇相當於第一篇的改進和簡化。以圖像特徵為條件來進行語言生成,這兩篇論文都沒能利用多個entity之間關聯推理關係,關於這些reasioning和relationship後續筆記會陸續介紹。
Visual-Semantic Alignments
簡單來說文章提出了利用multimodal-embedding構建結構化目標函數,來實現視覺和語義的對齊,其思想來自structured-learning,構建相似性度量函數F(x,y)。上面這個成為第一個模型,接著用multimodal-rnn來生成語言,作為第二個模型,因此本文不是端到端的方法。
論文的動機就是之前提到的DenseCap,利用更豐富的文本信息和圖像信息來達到對圖片更充分的標註。下面詳細介紹本文提出的兩個模型,主要流程如下圖
- align visual and language data
圖像特徵: 卷積神經網路能夠有效的提取圖像特徵,區別於提取全局的特徵,利用RCNN可以有效提取感興趣region的特徵。通過提取檢測的前19個region和整個圖像,一共20區域,來提取特徵,如下式所示。其中CNN(Ib)表示region的最後4096維特徵,而Wm是用來將4096維特徵壓縮為1000-1600維多模態特徵。
語句特徵:為了提取詞特徵,並使得詞能夠充分對上下文建模,得到圖片對應的語義空間特徵,以便和上面視覺特徵做關聯。文章利用雙向循環神經網路BRNN來計算整個語句片段,所以所得的詞能夠有上下文語義表達能力,主要公式如下:
對齊目標函數:文章通過第i個region和第t個word的特徵點乘做相似度度量,用來表示匹配度,值越大越匹配,公式如下:
可以進一步簡化,減少附加目標函數的需求(相比於文獻24提出的依賴樹方法),可以找到每個詞對應最佳region匹配,公式如下:
語句片段對齊: 原則上有了上面三個模塊就可以完成語義對齊訓練,個人理解這部分主要是用來解釋或可視化模型,和生成樣本label為下面的M-RNN做訓練用。上面的對其目標函數只能表示region和單個詞的匹配,導致問題就是每個region不能對應一個語言片段(表面上這樣理解)。為了解決這個對齊匹配問題,自然想到用MRF來解決匹配隱變數問題。所以在MRF能量模型構建了smoothing項,來約束語言到region的匹配。公式如下:
當β=0是傾向於匹配單個詞,越大相當匹配的句子越長。
總之,有了前三個模塊就可以訓練的有一定語義對齊能力的視覺特徵,整體結構如下圖。- Multimodal Recurrent Neural Network
這個模型主要用來依據上面提取的有對齊能力的數據特徵來生成對應區域的描述,整體結構如下圖所示:
其公式:
RNN訓練時,利用上一次的輸出y作為下一次的輸入。其中視覺語義特徵做為bias輸入到RNN的隱藏特徵h中,x1是start標籤,其損失函數輸入label感覺是MRF對其的label(文章中沒有提到對每個區域都標定產生訓練集,只標定一點測試集)。RNN測試時的輸入是從上一個輸出中的採樣。
DenseCap
相比於上文,本文更粗暴更簡單統一,通過設計dense localization layer來端到端學習region的特徵和仿射變換(有點參考spatial transformer network)。說實在的,感覺文章效果之所以好,是因為標定了大量region的描述,來端到端訓練導致的,模型其他部分沒有大的變化,RNN生成語言的模型和上面基本保持一致,替換為LSTM,同時將視覺特徵作為x的第一個輸入。整體流程如下圖所示:
- Fully Convolutional Localization Layer
RoI pooling的主要作用是將不同region大小的特徵映射為同樣大小的特徵,通過grid的方式取max來做映射。這樣的缺點是區域坐標不能通過bp來調整。本文根據這點設計了該層。
這個層的主要改進就是將roi pooling換成了雙線性插值的方式,公式如下:通過學習sampling grid G可以使region的坐標也可導,使得區域可以通過訓練適應性的改變以更好的提取特徵(通過插值的方式提特徵)。
本文的效果用例如下圖所示:
和上一篇的對比如下圖所示:
有了DenseCap就可以通過語言檢索圖像,如下圖所示:
推薦閱讀:
※使用Tensorflow把我們的數據轉換成TFRecord格式
※菜鳥學tensorflow.3
※Learning to Segment Every Thing論文導讀
※【小林的OpenCV基礎課 15】剪刀手/分水嶺分割法
※線上分享|王超 走進GAN的世界
TAG:卷積神經網路CNN | 深度學習DeepLearning | 計算機視覺 |