摘要:這個像素級別的圖像分割問題被等科學家解決,這個框架被稱為。由于圖像分割需要做到像素級,這與邊框分割不同,所以必然導致不準確。
作者:chen_h
微信號 & QQ:862251340
微信公眾號:coderpai
簡書地址:https://www.jianshu.com/p/867...
自從?Alex Krizhevsky, Geoff Hinton, and Ilya Sutskever 成為了 ImageNet 2012 冠軍之后,CNN 已經變成了圖像分割的標配。實際上,從那時起,CNN 已經在 ImageNet 挑戰上面戰勝了人類。
雖然這些分類結果令人印象深刻,但是比真實的人類視覺理解還是要簡單很多。
在分類中,通常我們會把圖像中一個單一對象作為分類焦點,也就是說主要去識別焦點的物體(比如上面的狗狗)。但是,當我們環顧我們周圍世界的時候,我們面對的是一個更加復雜的問題。
我們看到場景是一個非常復雜的場景,而且是多個目標進行重疊的背景,我們不僅需要分類這些不同的對象,而且需要識別他們的邊界和彼此的關聯。
CNN 可以幫助我們實現這樣復雜的任務嗎?也就是說,我們給出更復雜的圖像,可以利用 CNN 來識別圖像中的不同物體之間的邊界嗎?這個問題,在過去幾年里,已經由 Ross Girshick 和他的同事向我們證明了,答案是肯定的。
這篇文章的目標通過這篇文章,我們將介紹一些用于對象檢測和分割的主要技術手段,并且了解他們是如何從上一個模型演變到下一個模型的。具體來說,我們將介紹 R-CNN(Regional CNN),一個最早利用CNN解決這個問題的模型,以及其后期的 Fast R-CNN 模型和 Faster R-CNN 模型。最后,我們將介紹 Mask R-CNN 模型,這個模型是由 Facebook Research 最近發布的一篇文章,這篇文章提供了像素級別的分割。以下是各個模型的文章:
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 - An Early Application of CNNs to Object Detection.](http://upload-images.jianshu....
受 Hinton 實驗室的啟發,UCB 的 Jitendra Malik 的團隊問了這樣一個問題:
對象檢測到底能如何泛化?
對象檢測是找到圖像中的不同對象并且進行分類的任務(如上圖所示)。由 Ross Girshick,Jeff Donahue 和 Trevor Darrel 組成的團隊發現這個問題可以用 Krizhevsky 的方法在 PASCAL VOC Challenge 上面進行實現,他們寫道:
本文首先顯示,與基于 HOG 類特征的簡單系統相比,CNN 可以顯著提高 PASCAL VOC 上的對象檢測性能。
現在讓我們來了解一下 R-CNN 的架構,以及它是如何工作的。
理解 R-CNNR-CNN 模型的目標是根據拍攝的圖像,正確識別圖像中主要對象(通過邊框)的位置。
輸入:image
輸出:物體邊框 + 每個對象的標簽
但是我們如何找出這些邊框的位置呢?R-CNN 的做法就是按照人類的直觀理解來做的 —— 我們先從圖像里把一些物體給框出來,然后來確定這個物體是什么對象。
R-CNN 使用一種稱為選擇性搜索的技術來創建這些邊界框,更多的細節你可以閱讀這篇文章。更高層次來說,選擇性搜索(如上圖所示)是通過不同大小的窗口來查看圖像,并且對于每個大小不同的窗口,嘗試通過文理,顏色或強度將相鄰像素分組在一起以識別對象。
一旦這些邊框確定之后,R-CNN 就會將該區域轉變到一個標準的平方尺寸,并將其傳送到 AlexNet 的一個變體中,如上圖所示。
在 CNN 的最后一層,R-CNN 添加了一個支持向量機(SVM),它簡單的分類這是否是一個對象,也就是圖中的第四步。
改進邊界框現在,我們已經獲得了物體的大致邊框,那么我們可以將這個邊框縮小以適應物體本身真實的尺寸嗎?答案是可以的,這是 R-CNN的最后一步。R-CNN 對區域進行一個簡單的線性回歸,以生成更緊密的邊界框坐標以獲得結果。以下是回歸模型的輸入和輸出:
輸入:與物體對應圖像的子區域。
輸出:子區域中對象的新邊界框坐標。
最后,總結一下 R-CNN 的幾個步驟:
給圖像生成一組邊界框。
通過預先訓練的 AlexNet 運行邊框中的圖像,最后通過 SVM 來進行分類。
一旦對象被分類,邊界框通過運行線性回歸模型輸出更加緊密的邊框坐標。
2015: Fast R-CNN - Speeding up and Simplifying R-CNNR-CNN 可以很好的工作,但是基于以下幾個理由,它非常慢:
‘
’它需要 CNN(AlexNet)針對每個圖像區域進行運行分類(每個圖像大約 2000 次前向傳遞)。
它需要分別訓練三種不同的模型 —— CNN生成圖像特征,SVM來預測分類,最后通過線性回歸來收緊邊界框。這樣設計使得數據管道非常難設計。
2015年,R-CNN 的第一作者 Ross Girshick 解決了這兩個問題,也就誕生了第二個算法 —— Fast R-CNN?,F在,讓我們來看看它的主要思路:
Fast R-CNN Insight 1: RoI (Region of Interest) Pooling對于 CNN 的前向傳播,Girshick 意識到,對于每個圖像,圖像的許多分割區域都是重疊的,這就使得我們一次又一次地運行相同的 CNN 計算(大約 2000 次)。他的想法很簡單,就是讓CNN運行一次圖像,然后找到一種共享計算的方法,來區分這 2000 個區域。
這正是 Fast R-CNN 被稱之為 PolPool(Region of Interest Pooling)的核心技術,該技術能分享 CNN 在其次區域的前向傳遞。在上圖中,請注意每個 CNN 特征圖是從一個原來的大特征圖中進行選取的。然后,區域中的特征都被進行合并(一般是采用最大池)。所以需要我們計算的是一個原始圖片,而不是那個 2000 次區域。
Fast R-CNN Insight 2: Combine All Models into One NetworkFast R-CNN 的第二個改進是在單一模型中同時訓練了 CNN,分類器和邊界回歸。早期的模型我們使用 CNN 來進行圖像特征提取,SVM 來進行分類,最后用線性回歸來進行邊框收緊。Fast R-CNN 使用一個模型來同時達到這三個模型的效果。
上圖展示的就是這個聯合模型。Fast R-CNN 用 CNN 頂部的 softmax 層來替代 SVM 分類器的輸出分類。它還添加了與 softmax 層平行的線性回歸層用來輸出邊界框坐標。這樣,所有我們需要模型的輸出都是來自于單一的網絡。整個網絡模型的輸入和輸出如下:
輸入:帶有區域目的的圖像。
輸出:每個區域的對象分類以及更緊密的邊界框。
2016: Faster R-CNN - Speeding Up Region Proposal即使取得了這些進步,Fast R-CNN 仍然存在一個瓶頸 —— 區域檢測。正如我們所看到的,檢測對象位置的第一步是產生一對潛在的邊界框和區域進行測試。在 Fast R-CNN 中,這些邊界框是采用選擇性搜索創建的,這是一個相當緩慢的過程,被認為是整個流程額瓶頸。
在2015年中期,一個微軟研究員的團隊 Shaoqing Ren,Kaiming He,Ross Girshick 和 Jian Sun,找到了一個方法來解決這個瓶頸問題,他們將這個方法命名為 Faster R-CNN。
Faster R-CNN 的一個重大改進是,在 CNN 第一步分類的時候,后續步驟重用那些相同的 CNN 結構,而不是多帶帶運行選擇性搜索算法。
的確,這正是 Faster R-CNN 團隊所取得的成就。在上圖中,你可以看到如何使用單個 CNN 來對區域進行處理和分類。這樣,我們只需要一個 CNN 進行訓練,而其他的區域都可以從這個 CNN 網絡中獲取,作者這樣寫道:
我們的觀測結果是,用于區域檢查(如 Fast R-CNN)的卷積特征圖也可以用于區域生成,從而實現幾乎無成本的區域生成。
一下是其模型的輸入和輸出:
輸入:圖像(注意不需要區域提案)。
輸出:圖像中對象的分類和邊界框坐標。
如何生成區域接下來,讓我們來看看 Faster R-CNN 是如何從 CNN 特征圖中來生成區域。Faster R-CNN 在網絡上添加了一個完全卷積網絡,創建了一個所謂的區域生成網絡。
區域生成網絡通過在 CNN 特征圖上面的滑動窗口,并在每個窗口中輸出 k 個潛在的邊界框和分數,以便預測哪些框是最好的。那么,k 個框是代表什么呢?
直觀地,我們知道圖像中的對象應該符合某些常見的比例和大小。例如,我們知道我們想要的一些類似于人類形狀的邊框比例和大小。同樣,我們知道我們看到的很多的盒子厚度都不會很薄。以這種方式,我們可以創建 k 個這樣的盒子,我們稱之為錨盒(anchor boxes)。對于每個這樣的錨盒,我們在圖像中輸出一個邊界框和每個位置的得分。
考慮到這些錨盒,我們來看看這個區域生成網絡的輸入和輸出:
輸入:CNN 特征圖。
輸出:每個錨盒對應的邊界框和該邊界框中圖像會是某個對象的可能性分數。
然后,我們將每個這樣的可能對象邊界框傳遞到 Fast R-CNN 中,以生成分類結果和收緊邊界框。
2017: Mask R-CNN - Extending Faster R-CNN for Pixel Level Segmentation到目前為止,我們已經看到我們如何使用 CNN 特征圖去有效地定位圖像中不同對象的邊界框。
我們可以將這些技術進一步擴展,并定位每個對象的精確像素,而不是僅限于邊框。這個像素級別的圖像分割問題被 Kaiming He 等科學家解決,這個框架被稱為 Mask R-CNN。
Fast R-CNN 和 Faster R-CNN 都能很好的工作,那么我們能不能將模型進行擴展,使得他們在像素級別進行分割?
Mask R-CNN 通過向 Faster R-CNN 添加一個分支來輸出一個二進制掩碼,說明給定像素是否是對象的一部分。如上所述,分支(在上圖中的白色部分)僅僅是基于 CNN 特征圖的完全卷積網絡,一下是它的輸入和輸出:
輸入:CNN特征圖
輸出:在像素屬于對象的所有位置上標記為 1,其他地方標記為 0(這個稱為二進制掩碼)。
但是 Mask R-CNN 的作者不得不對模型進行一個小的調整,使這個管道可以按預期工作。
RoiAlign - Realigning RoIPool to be More Accurate我們需要對原始的 Faster R-CNN 架構進行修改,Mask R-CNN 的作者發現 RoIPool 選擇的特征圖的區域與原始圖形的區域略有一點不對氣。由于圖像分割需要做到像素級,這與邊框分割不同,所以必然導致不準確。
作者可以通過巧妙的調整 RoIPool 網絡來解決這個問題,調整好的模型被稱為 RoIAlign。
想象一下,我們有一個大小為 128128 的圖像和大小為 2525 的特征圖。讓我們想象一下,我們想要的是與原始圖像中左上角 15*15 像素對應的區域(見上文),那么我們如何從特征圖中選取出這些像素呢?
我們知道原始圖像中的每個像素對應于特征圖中大約 25/128 像素。要從原始圖像中選擇 15 像素,所以我們只是選擇了 15*25/128 ~= 2.93 像素。
在 RoIPool 中,我們會將小數點舍去,從而選擇 2 個像素,這樣就會導致輕微的錯位。然而,在 RoIAlign 中,我們避免了這種四舍五入。相反的,我們使用雙線性差值來精確地了解像素 2.93 中的所有內容。這在很大程度上讓我們避免 RoIPool 所造成的錯位。
一旦這些掩碼生成,Mask R-CNN 將它們與來自 Faster R-CNN 的分類和邊界框組合起來,以產生如此奇妙的精確分割:
代碼如果你有興趣自己嘗試這些算法,這里有一些相關的庫:
Faster R-CNNCaffe:?https://github.com/rbgirshick/py-faster-rcnn
PyTorch:?https://github.com/longcw/faster_rcnn_pytorch
MatLab:?https://github.com/ShaoqingRen/faster_rcnn
Mask R-CNNPyTorch:?https://github.com/felixgwu/mask_rcnn_pytorch
TensorFlow:?https://github.com/CharlesShang/FastMaskRCNN
作者:chen_h
微信號 & QQ:862251340
簡書地址:https://www.jianshu.com/p/867...
CoderPai 是一個專注于算法實戰的平臺,從基礎的算法到人工智能算法都有設計。如果你對算法實戰感興趣,請快快關注我們吧。加入AI實戰微信群,AI實戰QQ群,ACM算法微信群,ACM算法QQ群。長按或者掃描如下二維碼,關注 “CoderPai” 微信號(coderpai)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41156.html
摘要:自從和在年贏得了的冠軍,卷積神經網絡就成為了分割圖像的黃金準則。事實上,從那時起,卷積神經網絡不斷獲得完善,并已在挑戰上超越人類?,F在,卷積神經網絡在的表現已超越人類。 卷積神經網絡(CNN)的作用遠不止分類那么簡單!在本文中,我們將看到卷積神經網絡(CNN)如何在圖像實例分割任務中提升其結果。自從 Alex Krizhevsky、Geoff Hinton 和 Ilya Sutskever ...
摘要:從標題上可以看出,這是一篇在實例分割問題中研究擴展分割物體類別數量的論文。試驗結果表明,這個擴展可以改進基準和權重傳遞方法。 今年10月,何愷明的論文Mask R-CNN摘下ICCV 2017的較佳論文獎(Best Paper Award),如今,何愷明團隊在Mask R-CNN的基礎上更近一步,推出了(以下稱Mask^X R-CNN)。這篇論文的第一作者是伯克利大學的在讀博士生胡戎航(清華...
摘要:目前目標檢測領域的深度學習方法主要分為兩類的目標檢測算法的目標檢測算法。原來多數的目標檢測算法都是只采用深層特征做預測,低層的特征語義信息比較少,但是目標位置準確高層的特征語義信息比較豐富,但是目標位置比較粗略。 目前目標檢測領域的深度學習方法主要分為兩類:two stage的目標檢測算法;one stage的目標檢測算法。前者是先由算法生成一系列作為樣本的候選框,再通過卷積神經網絡進行樣本...
摘要:近日,開源了和的實現基準。是商湯和港中文近日聯合開源的基于的開源目標檢測工具包。你也可以配置你自己的到數據集的路徑。 近日,Facebook AI Research 開源了 Faster R-CNN 和 Mask R-CNN 的 PyTorch 1.0 實現基準:MaskRCNN-Benchmark。相比 Detectron 和 mmdetection,MaskRCNN-Benchmark ...
摘要:近幾年來,目標檢測算法取得了很大的突破。本文主要講述算法的原理,特別是算法的訓練與預測中詳細細節,最后將給出如何使用實現算法。但是結合卷積運算的特點,我們可以使用實現更高效的滑動窗口方法。這其實是算法的思路。下面將詳細介紹算法的設計理念。 1、前言當我們談起計算機視覺時,首先想到的就是圖像分類,沒錯,圖像分類是計算機視覺最基本的任務之一,但是在圖像分類的基礎上,還有更復雜和有意思的任務,如目...
閱讀 3397·2021-11-22 15:22
閱讀 2375·2021-09-06 15:00
閱讀 878·2020-06-22 14:39
閱讀 3707·2019-08-30 15:56
閱讀 1545·2019-08-30 12:55
閱讀 3276·2019-08-29 17:19
閱讀 3236·2019-08-26 11:41
閱讀 621·2019-08-23 17:14