姓名:王咫毅
學(xué)號:19021211150
【嵌牛導(dǎo)讀】機器學(xué)習(xí)成為現(xiàn)在研究的一大熱門,而機器學(xué)習(xí)所應(yīng)用到的領(lǐng)域圖像處理 目標檢測 圖像分割都已經(jīng)日趨成熟,而cnn是如何應(yīng)用到圖像分割里邊的呢?而其發(fā)展過程又有哪些呢?
【嵌牛鼻子】機器學(xué)習(xí) cnn?
【嵌牛提問】r-cnn和mask r-cnn有什么區(qū)別?兩者又是怎么形成的?
【嵌牛正文】
轉(zhuǎn)載自:http://www.itdecent.cn/p/3bd8e680d52e
在Athelas(Athelas 通過深度學(xué)習(xí)進行血液診斷),我們使用卷積神經(jīng)網(wǎng)絡(luò)(CNN)不僅僅是分類!在這篇文章中,我們將看到如何在圖像實例分割中使用CNN,效果很好。
自從Alex Krizhevsky,Geoff Hinton和Ilya Sutskever在2012年贏得ImageNet以來,卷積神經(jīng)網(wǎng)絡(luò)(CNNs)已經(jīng)成為圖像分類的黃金標準。事實上,從那時起,CNN已經(jīng)改進到現(xiàn)在他們在ImageNet挑戰(zhàn)中勝過人類的程度!
need-to-insert-img
CNN現(xiàn)在在ImageNet挑戰(zhàn)中勝過人類。上圖中的y軸是ImageNet上的錯誤率。
雖然這些結(jié)果令人印象深刻,但圖像分類遠比真人類視覺理解的復(fù)雜性和多樣性簡單得多。
need-to-insert-img
分類挑戰(zhàn)中使用的圖像示例。請注意圖像是如何構(gòu)圖良好的,并且只有一個對象。
在分類中,通常有一個圖像,其中一個對象作為焦點,任務(wù)是說該圖像是什么(見上文)。但是,當我們觀察周圍的世界時,我們會執(zhí)行更復(fù)雜的任務(wù)。
need-to-insert-img
現(xiàn)實生活中的景點通常由許多不同的,重疊的物體,背景和動作組成。
我們看到復(fù)雜的景點有多個重疊的物體和不同的背景,我們不僅要對這些不同的物體進行分類,還要確定它們之間的界限,差異和關(guān)系!
need-to-insert-img
在圖像分割中,我們的目標是對圖像中的不同對象進行分類,并識別它們的邊界。資料來源:Mask R-CNN論文。
CNN可以幫助我們完成這些復(fù)雜的任務(wù)嗎?也就是說,給定一個更復(fù)雜的圖像,我們可以使用CNN來識別圖像中的不同對象及其邊界嗎?正如Ross Girshick和他的同齡人在過去幾年所表明的那樣,答案是肯定的。
這篇文章的目標
通過這篇文章,我們將介紹在對象檢測和分割中使用的一些主要技術(shù)背后的直覺,并了解它們是如何從一個實現(xiàn)發(fā)展到下一個實現(xiàn)的。特別是,我們將介紹R-CNN(地區(qū)CNN),這是CNN對此問題的原始應(yīng)用,以及其后代Fast R-CNN和Faster R-CNN。最后,我們將介紹最近由Facebook Research發(fā)布的一篇文章Mask R-CNN,它擴展了這種對象檢測技術(shù)以提供像素級分割。以下是本文中引用的論文:
R-CNN:https://arxiv.org/abs/1311.2524
Fast R-CNN:https://arxiv.org/abs/1504.08083
Faster R-CNN:https://arxiv.org/abs/1506.01497
Mask R-CNN:https://arxiv.org/abs/1703.06870
2014年:R-CNN - CNN在物體檢測中的早期應(yīng)用
need-to-insert-img
諸如R-CNN的對象檢測算法接收圖像并識別圖像中主要對象的位置和分類。
受多倫多大學(xué)Hinton實驗室研究的啟發(fā),由Jitendra Malik教授領(lǐng)導(dǎo)的加州大學(xué)伯克利分校的一個小團隊問自己,今天看來是一個不可避免的問題:
在多大程度上[Krizhevsky等。al的結(jié)果]推廣到物體檢測?
對象檢測的任務(wù)是在圖像中查找不同的對象并對其進行分類(如上圖所示)。由Ross Girshick(我們將再次看到的名字),Jeff Donahue和Trevor Darrel組成的團隊發(fā)現(xiàn),通過測試PASCAL VOC Challenge,這是一種類似于ImageNet的流行物體檢測挑戰(zhàn),Krizhevsky的結(jié)果可以解決這個問題。他們寫,
本文首次表明,與基于簡單HOG類功能的系統(tǒng)相比,CNN可以在PASCAL VOC上實現(xiàn)更高的物體檢測性能。
現(xiàn)在讓我們花一點時間來了解他們的架構(gòu),CNNs區(qū)域(R-CNN)是如何工作的。
了解R-CNN
R-CNN的目標是接收圖像,并正確識別圖像中主要對象(通過邊界框)的位置。
輸入:圖像
輸出:圖像中每個對象的邊界框+標簽。
但是我們?nèi)绾握页鲞@些邊界框的位置?R-CNN做了我們可能直觀地做的事情 -在圖像中提出一堆框,看看它們中的任何一個是否實際上對應(yīng)于一個對象。
need-to-insert-img
選擇性搜索查看多個比例的窗口,并查找共享紋理,顏色或強度的相鄰像素
R-CNN使用稱為選擇性搜索的過程創(chuàng)建這些邊界框或區(qū)域提議,您可以在此處閱讀。在較高的層次上,選擇性搜索(如上圖所示)通過不同大小的窗口查看圖像,并且對于每個尺寸,嘗試通過紋理,顏色或強度將相鄰像素組合在一起以識別對象。
need-to-insert-img
在創(chuàng)建一組區(qū)域提議后,R-CNN通過AlexNet的修改版本傳遞圖像,以確定它是否是有效區(qū)域。
一旦提出建議,R-CNN將該區(qū)域變?yōu)闃藴实姆叫未笮。⑵鋫鬟f給AlexNet的修改版本(ImageNet 2012的獲獎提交,啟發(fā)了R-CNN),如上所示。
在CNN的最后一層,R-CNN增加了一個支持向量機(SVM),它簡單地分類這是否是一個對象,如果是的話,是什么對象。這是上圖中的第4步。
改進邊界框
現(xiàn)在,在盒子里找到了這個物體,我們可以收緊盒子以適應(yīng)物體的真實尺寸嗎?我們可以,這是R-CNN的最后一步。R-CNN對區(qū)域提議運行簡單的線性回歸,以生成更緊密的邊界框坐標以獲得最終結(jié)果。以下是此回歸模型的輸入和輸出:
輸入:與對象對應(yīng)的圖像的子區(qū)域。
輸出:子區(qū)域中對象的新邊界框坐標。
總而言之,R-CNN只是以下步驟:
1.為邊界框生成一組提議。
2.通過預(yù)先訓(xùn)練的AlexNet運行邊界框中的圖像,最后運行SVM,以查看框中圖像的對象。
3.通過線性回歸模型運行該框,一旦對象被分類,就為框輸出更緊密的坐標。
2015年:快速R-CNN - 加速并簡化R-CNN
need-to-insert-img
Ross Girshick寫了R-CNN和Fast R-CNN。他繼續(xù)在Facebook Research推動計算機視覺的界限。
R-CNN效果很好,但由于一些簡單的原因,它確實很慢:
它需要CNN(AlexNet)的正向傳遞,用于每個單個圖像的每個區(qū)域建議(每個圖像大約2000個前向傳遞!)。
它必須分別訓(xùn)練三個不同的模型 - 用于生成圖像特征的CNN,用于預(yù)測類的分類器,以及用于收緊邊界框的回歸模型。這使得管道極難訓(xùn)練。
2015年,R-CNN的第一作者Ross Girshick解決了這兩個問題,導(dǎo)致了我們短暫歷史中的第二個算法 - 快速R-CNN?,F(xiàn)在讓我們回顧一下它的主要見解。
Fast R-CNN洞察力1:RoI(感興趣區(qū)域)池
對于CNN的前向傳遞,Girshick意識到對于每個圖像,圖像的許多建議區(qū)域總是重疊,導(dǎo)致我們一次又一次地運行相同的CNN計算(~2000次?。?。他的洞察力很簡單 -為什么不在每張圖像上運行CNN一次,然后找到一種方法來分享?2000個提案中的計算?
need-to-insert-img
在RoIPool中,創(chuàng)建圖像的完整前向傳遞,并從所得到的前向傳遞中提取每個感興趣區(qū)域的conv特征。
這正是Fast R-CNN使用稱為RoIPool(感興趣區(qū)域池)的技術(shù)所做的事情。在其核心,RoIPool分享CNN的前向傳遞,以在其子區(qū)域中形成圖像。在上圖中,請注意如何通過從CNN的要素圖中選擇相應(yīng)的區(qū)域來獲取每個區(qū)域的CNN要素。然后,匯集每個區(qū)域中的要素(通常使用最大池)。所以我們所需要的只是原始圖像的一次傳遞而不是~2000!
快速R-CNN洞察力2:將所有模型組合到一個網(wǎng)絡(luò)中
need-to-insert-img
快速R-CNN將CNN,分類器和邊界框回歸器組合成一個單一網(wǎng)絡(luò)
Fast R-CNN的第二個見解是在單個模型中聯(lián)合訓(xùn)練CNN,分類器和邊界框回歸器。之前我們有不同的模型來提取圖像特征(CNN),分類(SVM)和收緊邊界框(回歸量),而快速R-CNN則使用單個網(wǎng)絡(luò)來計算所有三個。
您可以在上圖中看到這是如何完成的??焖賀-CNN用在CNN頂部的softmax層替換SVM分類器以輸出分類。它還添加了一個與softmax圖層平行的線性回歸圖層,以輸出邊界框坐標。這樣,所需的所有輸出都來自一個網(wǎng)絡(luò)!以下是此整體模型的輸入和輸出:
輸入:帶有區(qū)域提案的圖像。
輸出:每個區(qū)域的對象分類以及更嚴格的邊界框。
2016年:更快的R-CNN - 加速地區(qū)提案
即使有了所有這些進步,快速R-CNN過程仍然存在一個瓶頸 - 區(qū)域提議者。正如我們所看到的,檢測對象位置的第一步是生成一堆潛在的邊界框或感興趣的區(qū)域進行測試。在Fast R-CNN中,這些提議是使用選擇性搜索創(chuàng)建的,這是一個相當緩慢的過程,被發(fā)現(xiàn)是整個過程的瓶頸。
need-to-insert-img
微軟研究院的首席研究員孫健帶領(lǐng)團隊領(lǐng)導(dǎo)更快的R-CNN。
在2015年中期,由Shaoqing Ren,Kaiming He,Ross Girshick和Jian Sun組成的微軟研究團隊找到了一種方法,通過他們(創(chuàng)造性地)命名為快速R-CNN的架構(gòu),使該區(qū)域提案步驟幾乎免費。
更快的R-CNN的見解是區(qū)域建議取決于已經(jīng)通過CNN的前向傳遞(分類的第一步)計算的圖像的特征。那么為什么不為區(qū)域提案重用那些相同的CNN結(jié)果而不是運行單獨的選擇性搜索算法呢?
need-to-insert-img
在Faster R-CNN中,單個CNN用于區(qū)域提議和分類。
實際上,這正是R-CNN團隊更快取得的成就。在上圖中,您可以看到單個CNN如何用于執(zhí)行區(qū)域提議和分類。這樣,只有一個CNN需要接受培訓(xùn),我們幾乎可以免費獲得地區(qū)建議!作者寫道:
我們的觀察結(jié)果是,基于區(qū)域的探測器(如Fast R-CNN)使用的卷積特征圖也可用于生成區(qū)域提議[從而實現(xiàn)幾乎無成本的區(qū)域提議]。
以下是其模型的輸入和輸出:
輸入:圖像(注意不需要區(qū)域提議)。
輸出:圖像中對象的分類和邊界框坐標。
如何生成區(qū)域
讓我們花點時間看看R-CNN如何通過CNN功能更快地生成這些區(qū)域提案。Faster R-CNN在CNN的功能之上增加了一個完全卷積網(wǎng)絡(luò),創(chuàng)建了所謂的區(qū)域提案網(wǎng)絡(luò)。
need-to-insert-img
區(qū)域提案網(wǎng)絡(luò)在CNN的功能上滑動窗口。在每個窗口位置,網(wǎng)絡(luò)輸出每個錨點的分數(shù)和邊界框(因此4k框坐標,其中k是錨的數(shù)量)。
區(qū)域提議網(wǎng)絡(luò)通過在CNN特征映射和每個窗口上傳遞滑動窗口來工作,輸出k個潛在的邊界框以及每個框預(yù)期有多好的分數(shù)。這些k盒代表什么?
need-to-insert-img
我們知道人們的邊界框往往是矩形和垂直的。我們可以通過創(chuàng)建這樣的維度錨來利用這種直覺來指導(dǎo)我們的區(qū)域提案網(wǎng)絡(luò)。
直覺上,我們知道圖像中的對象應(yīng)該適合某些常見的寬高比和大小。例如,我們知道我們想要一些類似于人類形狀的矩形盒子。同樣,我們知道我們不會看到很多非常薄的盒子。以這種方式,我們創(chuàng)建k這樣的常見寬高比,我們稱之為錨盒。對于每個這樣的錨箱,我們輸出一個邊界框并在圖像中的每個位置得分。
考慮到這些錨框,我們來看看這個區(qū)域提案網(wǎng)絡(luò)的輸入和輸出:
輸入:CNN功能圖。
輸出:每個錨點的邊界框。表示該邊界框中圖像成為對象的可能性的分數(shù)。
然后,我們將可能是對象的每個這樣的邊界框傳遞到Fast R-CNN,以生成分類和收緊的邊界框。
2017:Mask R-CNN - 擴展更快的R-CNN以實現(xiàn)像素級分割
need-to-insert-img
圖像實例分割的目標是在像素級別識別場景中不同的對象是什么。
到目前為止,我們已經(jīng)看到我們?nèi)绾文軌蛞栽S多有趣的方式使用CNN功能來有效地定位帶有邊界框的圖像中的不同對象。
我們是否可以擴展這些技術(shù)以進一步找到每個對象的精確像素而不僅僅是邊界框?這個問題被稱為圖像分割,是Kaiming He和包括Girshick在內(nèi)的一組研究人員在Facebook AI上使用一種名為Mask R-CNN的架構(gòu)進行探索的。
need-to-insert-img
Facebook AI的研究員Kaiming He是Mask R-CNN的主要作者,也是Faster R-CNN的合著者。
就像Fast R-CNN和Faster R-CNN一樣,Mask R-CNN的潛在直覺也是直截了當?shù)?。鑒于Faster R-CNN在物體檢測方面的效果非常好,我們是否可以擴展它以進行像素級分割?
need-to-insert-img
在掩碼R-CNN中,在快速R-CNN的CNN特征之上添加完全卷積網(wǎng)絡(luò)(FCN)以生成掩碼(分段輸出)。注意這與Faster R-CNN的分類和邊界框回歸網(wǎng)絡(luò)并行。
Mask R-CNN通過向更快的R-CNN添加分支來完成此操作,該分支輸出二進制掩碼,該Mask 表示給定像素是否是對象的一部分。與以前一樣,分支(上圖中的白色)只是基于CNN的特征映射之上的完全卷積網(wǎng)絡(luò)。以下是其輸入和輸出:
輸入:CNN功能圖。
輸出:矩陣在像素屬于對象的所有位置上為1,在其他位置為0(這稱為二進制掩碼)。
但Mask R-CNN的作者不得不進行一次小調(diào)整,以使這條管道按預(yù)期工作。
RoiAlign - 重新調(diào)整RoIPool更準確
need-to-insert-img
而不是RoIPool,圖像通過RoIAlign傳遞,以便RoIPool選擇的特征圖的區(qū)域更精確地對應(yīng)于原始圖像的區(qū)域。這是必需的,因為像素級分割需要比邊界框更細粒度的對齊。
當在原始的快速R-CNN架構(gòu)上運行而沒有修改時,Mask R-CNN作者意識到由RoIPool選擇的特征圖的區(qū)域與原始圖像的區(qū)域略微不對準。由于圖像分割需要像素級特異性,與邊界框不同,這自然會導(dǎo)致不準確。
作者能夠通過巧妙地調(diào)整RoIPool來解決這個問題,使用一種稱為RoIAlign的方法進行更精確的對齊。
need-to-insert-img
我們?nèi)绾螠蚀_地將感興趣的區(qū)域從原始圖像映射到特征圖?
想象一下,我們有一個大小為128x128的圖像和一個大小為25x25的特征圖。讓我們想象一下,我們想要的特征區(qū)域?qū)?yīng)于原始圖像中左上角的15x15像素(見上文)。我們?nèi)绾螐囊貓D中選擇這些像素?
我們知道原始圖像中的每個像素對應(yīng)于特征圖中的~25 / 128像素。要從原始圖像中選擇15個像素,我們只選擇15 * 25 / 128~ =2.93像素。
在RoIPool中,我們將它向下舍入并選擇2個像素,導(dǎo)致輕微的錯位。但是,在RoIAlign中,我們避免了這種舍入。相反,我們使用雙線性插值來準確了解像素2.93處的內(nèi)容。這在很大程度上是允許我們避免RoIPool引起的錯位的原因。
生成這些掩模后,Mask R-CNN將它們與Faster R-CNN中的分類和邊界框組合在一起,生成如此精確的分割:
need-to-insert-img
Mask R-CNN能夠?qū)D像中的對象進行分段和分類。
期待
在短短3年時間里,我們已經(jīng)看到研究界如何從Krizhevsky等進步。al的原始結(jié)果是R-CNN,最后一直到Mask R-CNN這樣強大的結(jié)果。孤立地看,像面具R-CNN這樣的結(jié)果看起來像天才的難以置信的飛躍,是無法接近的。然而,通過這篇文章,我希望你已經(jīng)看到這些進步如何通過多年的努力和合作實現(xiàn)直觀,漸進的改進。R-CNN,F(xiàn)ast R-CNN,F(xiàn)aster R-CNN以及最后的Mask R-CNN提出的每個想法都不一定是量子跳躍,但它們的總和產(chǎn)品已經(jīng)產(chǎn)生了非常顯著的結(jié)果,使我們更接近人類水平了解視力。
讓我特別興奮的是,R-CNN和Mask R-CNN之間的時間只有三年!通過持續(xù)的資金,關(guān)注和支持,未來計算機視覺能夠進一步提升?