8 月 26 日,文章《深度 | Facebook 的圖像識(shí)別很強(qiáng)大,一次開源了三款機(jī)器視覺工具(附論文)》介紹 Facebook 在開源上的新動(dòng)態(tài)。在這篇文章中,作者對(duì)此次開源的 3 款工具分別進(jìn)行了深度解析。介紹
說(shuō)到分析圖象,F(xiàn)acebook 毫無(wú)疑問在深度卷積神經(jīng)網(wǎng)絡(luò)方面取得了很大成就。一周前,F(xiàn)acebook 人工智能研究團(tuán)隊(duì)發(fā)表了一個(gè) blog,詳細(xì)闡述了一些對(duì)象分割算法背后的計(jì)算機(jī)視覺技術(shù)。在這篇文章中,我們將會(huì)總結(jié)并解釋 blog 中引用的三篇論文。
Facebook 人工智能研究團(tuán)隊(duì)利用的主要渠道如下。圖象被輸入到 DeepMask 分割構(gòu)架,被分割的部分通過(guò) SharpMask 模型進(jìn)行精煉,再通過(guò) MultiPathNet 進(jìn)行分類。讓我們來(lái)看看每一個(gè)組成部分是怎么單獨(dú)運(yùn)行的吧。

DeepMask簡(jiǎn)介
Pedro Pinheiro, Roman Collobert 與 Piotr Dollar 寫了一篇標(biāo)題為「學(xué)習(xí)分割候選對(duì)象(Learning to Segment Object Candidates)」的論文。作者通過(guò)一個(gè)模型著手處理對(duì)象分割的任務(wù)。該模型在給定的一個(gè)圖像補(bǔ)丁的情況下,首先輸出一個(gè)分割掩碼,然后再輸出該圖像補(bǔ)丁在完整對(duì)象上居中的概率。那個(gè)過(guò)程被應(yīng)用在整個(gè)圖象上以便每一個(gè)對(duì)象都可以得到一個(gè)創(chuàng)造的掩碼。而這整個(gè)過(guò)程僅通過(guò)一個(gè) CNN 來(lái)完成,因?yàn)樵谠摼W(wǎng)絡(luò)中,這兩個(gè)組件都共享了許多層。輸入和輸出
讓我們先可視化出我們想讓這個(gè)模型做什么。給定一個(gè)輸入圖像后,我們希望這個(gè)網(wǎng)絡(luò)可以為每一個(gè)對(duì)象都輸出一組掩碼或輪廓。我們可以認(rèn)為每一個(gè)輸入圖象都包含一組補(bǔ)?。ㄔ瓐D的一小部分)。對(duì)于一個(gè)輸入的補(bǔ)丁而言,輸出是一個(gè)二進(jìn)制掩碼,它能勾勒出主要對(duì)象的形狀并對(duì)輸入補(bǔ)丁有多少可能包括一個(gè)對(duì)象進(jìn)行評(píng)分(在-1 和 1 之間)。

每個(gè)訓(xùn)練樣本都將要包含這 3 個(gè)要素(邊注:帶有 1 標(biāo)注的樣本需要在給定大小的范圍內(nèi)包含一個(gè)在該圖像中大致居中的對(duì)象)。該模型在多個(gè)尺寸刻度和位置上將這個(gè)過(guò)程應(yīng)用在圖像上(這是一個(gè)我們之前討論過(guò)的補(bǔ)丁集)。然后將結(jié)果匯總形成一個(gè)帶有所有掩碼的最終圖像。現(xiàn)在,讓我們看一看這個(gè)模型是這么架構(gòu)起來(lái)的。

網(wǎng)絡(luò)架構(gòu)
這個(gè)網(wǎng)絡(luò)是為了 ImageNet(遷移學(xué)習(xí)。使用它)上的分類而預(yù)訓(xùn)練的。圖象通過(guò)一個(gè)含有八個(gè) 3x3 的卷積圖層和五個(gè) 2x2 maxpool 層的類似 VGG 的模型(不含充分連接的層)流入。根據(jù)輸入圖象的尺寸,你將會(huì)得到一個(gè)確定的輸出量(在這個(gè)案例中是 512x14x14)。
輸入:3 x 高 x 寬
輸出:512 x 高/16 x 寬/16
然后,模型分成了之前描述過(guò)的 2 個(gè)組件。一個(gè)主要處理分割,而另一個(gè)判定圖象中是否有一個(gè)對(duì)象。Segmentation Head
現(xiàn)在我們采用輸出量,將它穿過(guò)一個(gè) network-in-network 層和一個(gè) ReLU 層。然后,我們將會(huì)得到一個(gè)寬乘高(這個(gè)寬和高小于原圖的高和寬)像素分類器的層,而這個(gè)層將決定已知像素是否是圖象中心的對(duì)象的一部分(如果你有一個(gè) 28x28 大小的原圖,那么將會(huì)少于 784 個(gè)分類器)。然后我們來(lái)看看這些分類器的輸出,雙線性增采樣的輸出符合完整的原分辨率,取得一個(gè)黑白的二進(jìn)制掩碼(1 代表「是」,0 代表「否」)。Objectness Head
另一個(gè)網(wǎng)絡(luò)組件決定了圖象是否包含居中并且比例適中的對(duì)象。將 VGG 圖層的輸出穿過(guò)一個(gè) 2x2 的 maxpool(一個(gè) dropout 單元)和兩個(gè)充分相連接的網(wǎng)絡(luò)層,我們就可以得到「objectness」的得分。
訓(xùn)練
由于損失函數(shù)是邏輯回歸損失的總和(一個(gè)是 objectness head 的損失,一個(gè)是 segmentation head 中每個(gè)位置的損失),網(wǎng)絡(luò)的兩個(gè)組件是同時(shí)訓(xùn)練的。反向傳播在 segmentation head 和 objectness head 之間交替進(jìn)行。數(shù)據(jù)增加技術(shù)也被用來(lái)改善這個(gè)模型。這個(gè)模型采用隨機(jī)梯度下降法在 Nvidia Tesla K40m GPU 上訓(xùn)練了將進(jìn) 5 天。
為什么這篇論文很酷
一個(gè)單獨(dú)的卷積神經(jīng)網(wǎng)絡(luò)。我們不需要一個(gè)額外的圖片目標(biāo)提議步驟或一些復(fù)雜的訓(xùn)練渠道。很明確的是,這個(gè)模型提高了網(wǎng)絡(luò)的效率、速度和靈活性。SharpMask
前面的作者(與 Tsung-Yi Lin 合作)也發(fā)表了一篇標(biāo)題為「學(xué)習(xí)提煉對(duì)象分割塊(Learning to Refine Object Segments)」的論文。正如標(biāo)題所示,這篇論文的主旨是提煉 DeepMask 模型生成的分割掩碼。DeepMask 的主要問題在于,它使用了一個(gè)簡(jiǎn)單的前饋網(wǎng)絡(luò),它在生成「粗糙對(duì)象掩碼」時(shí)是很成功的,卻并不能生成「精確到像素的分割」。原因是,這里運(yùn)用了全圖像大小的二元線性采樣。這就導(dǎo)致了對(duì)象邊界的粗糙和不精確對(duì)齊。為了解決這個(gè)問題,SharpMask 模型把網(wǎng)絡(luò)中的淺層(early layers)的低級(jí)(low-level)特征與深層(layers deeper)的高級(jí)(high-level)的對(duì)象信息結(jié)合起來(lái)。這個(gè)模型通過(guò)首先對(duì)每一個(gè)輸入部分生成一個(gè)粗糙掩碼,然后將它傳入網(wǎng)絡(luò)中的不同提煉模型來(lái)實(shí)現(xiàn)這點(diǎn)?,F(xiàn)在我們來(lái)介紹細(xì)節(jié)。

網(wǎng)絡(luò)的構(gòu)架
SharpMask 模型構(gòu)架的動(dòng)機(jī)源于高級(jí)(high-level)的對(duì)象信息對(duì)精確的分割掩碼十分有用,我們需要一個(gè)自上而下的方法:第一步生成粗糙的邊界,然后整合淺層(early layers)中重要的低級(jí)(low-level)信息。正如你從上圖中看到的,原始輸入最先傳入 DeepMask 通道來(lái)得到粗略的分割。然后它通過(guò)一系列精煉模型,增采樣進(jìn)而還原圖像的原始維度。精煉模型
讓我們深入挖掘下該精煉模塊的特性。該模塊的目標(biāo)通過(guò)增采樣將自下而上(你可以認(rèn)為 DeepMas=bottom-up 和精煉模塊=top-down)創(chuàng)造的特征圖考慮在內(nèi)的方式生成的掩碼,對(duì)抗 DeepMask 通道中池化層的影響。看待它的一種數(shù)學(xué)方式是精煉模塊 R 是一個(gè)生成增采樣的掩碼 M 的函數(shù),掩碼 M 是前面層中掩碼的函數(shù),也是特征圖 F 的函數(shù)。使用的精煉模塊的數(shù)量等于 DeepMask 通道中使用的池化層的數(shù)量。

現(xiàn)在,函數(shù) R 中到底發(fā)生了什么?一個(gè)簡(jiǎn)單方法是只要連接(concatenate) M 和 F,因?yàn)樗鼈冇型瑯拥膶捄透?。問題存在于這些每個(gè)組件的深度信道中。特征圖中深度信道的數(shù)量要比掩碼的深度信道數(shù)量大的多。因此,M 和 F 的連接將過(guò)于偏向 F。解決方案是通過(guò)應(yīng)用一個(gè) 3×3 卷積層減少 F 深度信道的數(shù)量,然后再連接 M,通過(guò)另一個(gè) 3 ×3 卷積層,最終使用一個(gè)雙線性增采樣。訓(xùn)練
DeepMask 使用的訓(xùn)練數(shù)據(jù)同樣適用于 SharpMask。我們需要輸入二進(jìn)制掩碼補(bǔ)丁和標(biāo)簽。DeepMask 層先被訓(xùn)練,然后在精煉模塊開始訓(xùn)練的時(shí)候,權(quán)重會(huì)被凍結(jié)。
為什么這篇論文很酷
在引入一個(gè)新的、易于使用的模塊的同時(shí),該論文也能夠建立在 DeepMask 的方法之上。作者們創(chuàng)造性的認(rèn)識(shí)到通過(guò)只融合在 DeepMask 通道的較早層中可用的低層信息,就能獲得更精確的分割。

MultiPathNet簡(jiǎn)介
DeepMask 用來(lái)生成粗糙的分割掩碼,SharpMask 用來(lái)精煉這些輪廓。而 MultiPathNet 的職責(zé)是在這些掩碼中進(jìn)行對(duì)象識(shí)別或者分類。包括 Sergey Zagoruyko、Adam Lerer、Tsung-Yi Lin、Pedro Pinheiro、Sam Gross、Soumith Chintala、Piotr Dollar 在內(nèi)的幾個(gè)人發(fā)表了一篇名為「A MultiPath Network for Object Detection」的論文。這篇文章的目的,是通過(guò)專注處理尺度變化、高度遮擋、雜亂的圖片,以及更高的精度定位,來(lái)提高對(duì)對(duì)象的檢測(cè)技術(shù)。這個(gè)模型是以快速 R-CNN(Fast R-CNN)為起點(diǎn)的。總的來(lái)講,這個(gè)模型應(yīng)用了快速 R-CNN 以及 DeepMask 和 SharpMask 的對(duì)象檢測(cè)技術(shù)。這篇論文的三個(gè)主要貢獻(xiàn)之處是:忽略連接(skip connections)、黃斑區(qū)域(foveal regions)和一個(gè)積分損失函數(shù)(integral loss function)。在詳細(xì)介紹這三個(gè)方法之前,我們先來(lái)看看這個(gè)網(wǎng)絡(luò)的架構(gòu)。

網(wǎng)絡(luò)架構(gòu) / 黃斑區(qū)域
使用快速 R-CNN 時(shí),我們首先將輸入圖像傳入一個(gè)層與層之間沒有完全連接的 VGG 網(wǎng)絡(luò)。POI 池化(ROI pooling)被用于提取區(qū)域的特征(在 Ross Girshick 的論文中,ROI 池化是一個(gè)將圖像的特征映射(mapping)到描述圖像區(qū)域的固定空間的特征圖(feature map)的方法)。對(duì)于每一個(gè)對(duì)象,我們接著創(chuàng)建四個(gè)不同的區(qū)域來(lái)從多個(gè)角度觀察對(duì)象。這些區(qū)域就是我們?cè)诤?jiǎn)介中介紹的「黃斑區(qū)域」。這些區(qū)域被傳入完全連接的層中,得到的輸出被連接起來(lái),然后網(wǎng)絡(luò)分成一個(gè)分類器和一個(gè)回歸頭文件?;谶@個(gè)網(wǎng)絡(luò)架構(gòu)可以從多個(gè)尺度觀察圖像,并可以注意到目標(biāo)對(duì)象周圍的事物,這篇論文的作者推測(cè)這些黃斑區(qū)域可以幫助精確定位。忽略連接
由于快速 R-CNN 的架構(gòu)問題,一張 32x32 大小的輸入圖像會(huì)在最后的 VGG 卷積層迅速縮減到 2x2 的大小。ROI 池化會(huì)創(chuàng)建一個(gè) 7x7 的映射,但是我們?nèi)匀粊G失了很多原始空間信息。為了解決這個(gè)問題,我們將特征從卷積 3、4、5 層就開始連接,然后把它們傳入黃斑分類器(foveal classifier)。這篇論文指出,這些連接「給分類器提供了多種位置的特征信息」。積分損失函數(shù)
我并不想對(duì)這個(gè)概念深入介紹,在紙上演算數(shù)學(xué)公式無(wú)疑更簡(jiǎn)明易懂。這個(gè)概念的大致意思是,作者發(fā)明了一個(gè)損失函數(shù),使得在預(yù)測(cè)有多個(gè)交除并(intersection-over-union, IoU)值的圖像時(shí)有更好的表現(xiàn)。為什么這篇論文很酷
如果你對(duì)快速 R-CNN 感興趣,那么你一定喜歡這個(gè)模型。它運(yùn)用了 VGG 網(wǎng)絡(luò)(VGG Net)和 ROI 池化(ROI pooling)的主要思想,同時(shí)還介紹了一種通過(guò)黃斑區(qū)域(foveal regions)、忽略連接(skip connections)和積分損失函數(shù)(integral loss function)得到更精確的定位和分類的方法。















