How Computer Vision works:
Object Detection and Segmentation
with Mask R-CNN
|
AI科技大本营 譯者 | 王柯凝出品 | AI科技大本营(公众号ID:rgznai100)
【 AI 科技大本營導讀】目前,電腦視覺是深度學習領域,最熱門的研究領域之一。
電腦視覺實際上是一個跨領域的交叉學科,包括電腦科學(圖形、算法、理論、系統、體系結構),數學(資訊檢索、機器學習),工程學(機器人、語音、自然語言處理、圖像處理),物理學(光學 ),生物學(神經科學)和心理學(認知科學)等等。
許多科學家認為,電腦視覺為人工智慧的發展開拓了道路。
那麼什麼是電腦視覺呢? 這裡給出了幾個比較嚴謹的定義:
✦ 「對圖像中的客觀對象建構明確而有意義的描述」(Ballard&Brown,1982)
✦ 「從一個或多個數位圖像中計算 3D 世界的特性」(Trucco&Verri,1998)
✦ 「基於感知圖像做出對客觀對象和場景有用的決策」(Sockman&Shapiro,2001)
▌為什麼要學習電腦視覺?
一個顯而易見的答案就是,這個研究領域已經衍生出了一大批快速成長的、有實際作用的應用,例如:
人臉辨識: Snapchat 和 Facebook 使用人臉檢測算法來辨識人臉。
圖像檢索:Google Images 使用基於內容的查詢來搜索相關圖片,算法分析查詢圖像中的內容,並根據最佳匹配內容返回結果。
遊戲和控制:使用立體視覺較為成功的遊戲應用產品是:微軟 Kinect。
監測:用於監測可疑行為的監視攝影機,遍佈於各大公共場所中。
生物辨識技術:指紋、虹膜和人臉匹配,仍然是生物辨識領域的一些常用方法。
智慧汽車:電腦視覺仍然是檢測交通標誌、燈光和其他視覺特徵的主要資訊來源。
視覺辨識是電腦視覺的關鍵組成部分,如圖像分類、定位和檢測。神經網路和深度學習的最新進展,極大地推動了這些,最先進的視覺辨識系統的發展。
在本文中,將分享 5 種主要的辨識視覺技術,並介紹幾種基於電腦視覺技術的深度學習模型與應用。
▌1 、圖像分類
給定一組各自被標記為單一類別的圖像,我們對一組新的測試圖像的類別進行預測,並測量預測的準確性結果,這就是圖像分類問題。圖像分類問題,需要面臨以下幾個挑戰☟☟☟:
視點變化、尺度變化、類內變化、圖像變形、圖像遮擋、照明條件和背景雜斑
我們怎樣來編寫一個圖像分類算法呢?
電腦視覺研究人員,提出了一種基於數據驅動的方法。
該算法並不是直接在代碼中,指定每個感興趣的圖像類別,而是為電腦每個圖像類別,都提供許多示例,然後設計一個學習算法,查看這些示例並學習每個類別的視覺外觀。
也就是說,首先累積一個帶有標記圖像的訓練集,然後將其輸入到電腦中,由電腦來處理這些數據。
因此,可以按照下面的步驟來分解:
輸入是由 N 個圖像組成的訓練集,共有 K 個類別,每個圖像都被標記為其中一個類別。
然後,使用該訓練集訓練一個分類器,來學習每個類別的外部特徵。
最後,預測一組新圖像的類標籤,評估分類器的性能,我們用分類器預測的類別標籤,與其真實的類別標籤進行比較。
目前較為流行的圖像分類架構,是卷積神經網路(CNN)——將圖像送入網路,然後網路對圖像數據進行分類。卷積神經網路從輸入「掃描儀」開始,該輸入「掃描儀」也不會一次性解析所有的訓練數據。
比如輸入一個大小為 100*100 的圖像,你也不需要一個有 10,000 個節點的網路層。相反,你只需要創建一個大小為 10 *10 的掃描輸入層,掃描圖像的前 10*10 個像素。然後,掃描儀向右移動一個像素,再掃描下一個 10 *10 的像素,這就是滑動窗口。
輸入數據被送入卷積層,而不是普通層。每個節點只需要處理離自己最近的鄰近節點,卷積層也隨著掃描的深入,而趨於收縮。除了卷積層之外,通常還會有池化層。池化是過濾細節的一種方法,常見的池化技術是最大池化,它用大小為 2*2 的矩陣傳遞,擁有最多特定屬性的像素。
現在,大部分圖像分類技術,都是在 ImageNet 數據集上訓練的, ImageNet 數據集中,包含了約 120 萬張高解析度訓練圖像。測試圖像沒有初始注釋(即沒有分割或標籤),並且算法必須產生標籤,來指定圖像中存在哪些對象。
現存的很多電腦視覺算法,都是被來自牛津、 INRIA 和 XRCE 等頂級的電腦視覺團隊,在 ImageNet 數據集上實現的。通常來說,電腦視覺系統使用複雜的多級管道,並且,早期階段的算法都,是通過優化幾個參數,來手動微調的。
第一屆 ImageNet 競賽的獲獎者是 Alex Krizhevsky(NIPS 2012) ,他在 Yann LeCun 開創的神經網路類型基礎上,設計了一個深度卷積神經網路。
該網路架構除了一些最大池化層外,還包含 7 個隱藏層,前幾層是卷積層,最後兩層是全連接層。在每個隱藏層內,激活函數為線性的,要比邏輯單元的訓練速度更快、性能更好。
除此之外,當附近的單元有更強的活動時,它還使用競爭性標準化來壓制隱藏活動,這有助於強度的變化。
就硬體要求而言, Alex 在 2 個 Nvidia GTX 580 GPU (速度超過 1000 個快速的小內核)上實現了非常高效的卷積網路。 GPU 非常適合矩陣間的乘法,且有非常高的暫存記憶體頻寬。這使他能在一周內完成訓練,並在測試時快速的從 10 個塊中組合出結果。如果我們能夠以足夠快的速度傳輸狀態,就可以將網路分布在多個內核上。
隨著內核越來越便宜,數據集越來越大,大型神經網路的速度,要比老式電腦視覺系統更快。在這之後,已經有很多種使用卷積神經網路作為核心,並取得優秀成果的模型,如 ZFNet(2013),GoogLeNet(2014), VGGNet(2014), RESNET(2015),DenseNet(2016)等。
▌2 、對象檢測
辨識圖像中的對象這一任務,通常會涉及到為各個對象輸出邊界框和標籤。這不同於分類/定位任務 —— 對很多對象進行分類和定位,而不僅僅是對個主體對象進行分類和定位。
在對象檢測中,你只有 2 個對象分類類別,即對象邊界框和非對象邊界框。例如,在汽車檢測中,你必須使用邊界框檢測所給定圖像中的所有汽車。
如果使用圖像分類和定位圖像,這樣的滑動窗口技術,我們則需要將卷積神經網路,應用於圖像上的很多不同物體上。由於卷積神經網路會將圖像中的每個物體,辨識為對象或背景,因此我們需要在大量的位置和規模上,使用卷積神經網路,但是這需要很大的計算量!
為瞭解決這一問題,神經網路研究人員建議使用區域(Region)這一概念,這樣我們就會找到,可能包含對象的「斑點」圖像區域,這樣運行速度就會大大提高。第一種模型是採用區域的卷積神經網路( R-CNN ),其算法原理如下:
在 R-CNN 中,首先使用選擇性搜索算法掃描輸入圖像,尋找其中的可能對象,從而生成大約 2,000 個區域建議;
然後,在這些區域建議上,運行一個卷積神網路;
最後,將每個卷積神經網路的輸出,傳給支持向量機( SVM ),使用一個線性回歸收緊對象的邊界框。
實質上,我們將對象檢測,轉換為一個圖像分類問題。但是也存在這些問題:訓練速度慢,需要大量的磁碟空間,推理速度也很慢。
R-CNN 的第一個升級版本是 Fast R-CNN,透過使用了 2 次增強,大大提了檢測速度:
在建議區域之前進行特徵提取,因此在整幅圖像上,只能運行一次卷積神經網路;
用一個 Softmax 層代替支持向量機,對用於預測的神經網路進行擴展,而不是創建一個新的模型。
Fast R-CNN 的運行速度要比 R-CNN 快的多,因為在一幅圖像上,它只能訓練一個 CNN 。 但是,擇性搜索算法生成區域,提議仍然要花費大量時間。
Faster R-CNN ,是基於深度學習對象檢測的一個典型案例。
該算法用一個快速神經網路,代替了運算速度很慢的選擇性搜索算法:透過插入區域提議網路( RPN ),來預測來自特徵的建議。 RPN 決定查看「哪裡」,這樣可以減少整個推理過程的計算量。
RPN 快速且高效地掃描每一個位置,來評估在給定的區域內,是否需要作進一步處理,其實現方式如下:透過輸出 k 個邊界框建議,每個邊界框建議都有 2 個值 —— 代表每個位置包含目標對象,和不包含目標對象的機率。
一旦我們有了區域建議,就直接將它們送入 Fast R-CNN 。 並且,我們還添加了一個池化層、一些全連接層、一個 Softmax 分類層,以及一個邊界框回歸器。
總之,Faster R-CNN 的速度和準確度更高。值得注意的是,雖然以後的模型,在提高檢測速度方面,做了很多工作,但很少有模型,能夠大幅度的超越 Faster R-CNN 。換句話說, Faster R-CNN 可能不是最簡單,或最快速的目標檢測方法,但仍然是性能最好的方法之一。
近年來,主要的目標檢測算法已經轉向更快、更高效的檢測系統。這種趨勢在 You Only Look Once(YOLO),Single Shot MultiBox Detector(SSD)和基於區域的全卷積網路( R-FCN )算法中尤為明顯,這三種算法轉向在整個圖像上共享計算。因此,這三種算法和上述的 3 種造價較高的 R-CNN 技術有所不同。
▌3 、 目標跟蹤
目標跟蹤,是指在特定場景,跟蹤某一個或多個,特定感興趣對象的過程。傳統的應用就是影像和真實世界的交互,在檢測到初始對象之後進行觀察。現在,目標跟蹤在無人駕駛領域也很重要,例如 Uber 和特斯拉等公司的無人駕駛。
根據觀察模型,目標跟蹤算法可分成 2 類:生成算法和判別算法。
生成算法使用生成模型來描述表觀特徵,並將重建誤差最小化,來搜索目標,如主成分分析算法( PCA );
判別算法用來區分物體和背景,其性能更穩健,並逐漸成為跟蹤對象的主要手段(判別算法也稱為 Tracking-by-Detection ,深度學習也屬於這一範疇)。
為了透過檢測實現跟蹤,我們檢測所有幀的候選對象,並使用深度學習,從候選對象中,辨識想要的對象。有兩種可以使用的基本網路模型:堆疊自動編碼器( SAE )和卷積神經網路( CNN )。
目前,最流行的使用 SAE ,進行目標跟蹤的網路,是 Deep Learning Tracker(DLT),它使用了離線預訓練和在線微調。其過程如下:
離線無監督預訓練,使用大規模自然圖像數據集,獲得通用的目標對象表示,對堆疊去噪自動編碼器進行預訓練。堆疊去噪自動編碼器在輸入圖像中,添加噪聲並重構原始圖像,可以獲得更強大的特徵表述能力。
將預訓練網路的編碼部分,與分類器合併,得到分類網路,然後使用從初始幀中獲得的正負樣本,對網路進行微調,來區分當前的對象和背景。
DLT 使用粒子濾波作為意向模型(motion model),生成當前幀的候選塊。分類網路輸出這些塊的概率值,即分類的置信度,然後選擇置信度最高的塊作為對象。
在模型更新中, DLT 使用有限閾值(臨界值)。
鑒於 CNN 在圖像分類和目標檢測方面的優勢,它已成為電腦視覺和視覺跟蹤的主流深度模型。 一般來說,大規模的卷積神經網路,既可以作為分類器和跟蹤器來訓練。
具有代表性的基於卷積神經網路的跟蹤算法,有全卷積網路跟蹤器( FCNT )和多域卷積神經網路( MD Net )。
具有代表性的基於卷積神經網路的跟蹤算法,有全卷積網路跟蹤器( FCNT )和多域卷積神經網路( MD Net )。
FCNT 充分分析並利用了 VGG 模型中的特徵映射,這是一種預先訓練好的 ImageNet 數據集,並有如下效果:
卷積神經網路特徵映射,可用於定位和跟蹤。
對於從背景中區分特定對象這一任務來說,很多卷積神經網路特徵映射,是噪音或不相關的。
較高層捕獲對象類別的語義概念,而較低層編碼更多的具有區性的特徵,來捕獲類別內的變形。
因此, FCNT 設計了特徵選擇網路,在 VGG 網路的卷積 4-3 和卷積 5-3 層上,選擇最相關的特徵映射。 然後為避免噪音的過擬合, FCNT 還為這兩個層的選擇特徵映射,單獨設計了兩個額外的通道(即 SNet 和 GNet ): GNet 捕獲對象的類別資訊; SNet 將該對象從具有相似外觀的背景中區分出來。
這兩個網路的運作流程如下:都使用第一幀中給定的邊界框進行初始化,以獲取對象的映射。而對於新的幀,對其進行剪切並傳輸最後一幀中的感興趣區域,該感興趣區域是以目標對象為中心。
最後,透過 SNet 和 GNet ,分類器得到兩個預測熱映射,而跟蹤器根據是否存在干擾資訊,來決定使用哪張熱映射生成的跟蹤結果。 FCNT 的圖如下所示。
與 FCNT 的思路不同, MD Net 使用影像的所有序列,來跟蹤對象的移動。上述網路使用不相關的圖像數據,來減少跟蹤數據的訓練需求,並且這種想法與跟蹤有一些偏差。
該影像中的一個類的對象,可以是另一個影像中的背景,因此, MD Net 提出了「多域」這一概念,它能夠在每個域中,獨立的區分對象和背景,而一個域表示一組包含相同類型對象的影像。
如下圖所示, MD Net 可分為兩個部分,即 K 個特定目標分支層和共享層:每個分支包含一個具有 Softmax 損失的二進制分類層,用於區分每個域中的對象和背景;共享層與所有域共享,以保證通用表示。
近年來,深度學習研究人員嘗試使用了不同的方法,來適應視覺跟蹤任務的特徵,並且已經探索了很多方法:
應用到諸如循環神經網路( RNN )和深度信念網路(DBN )等其他網路模型;設計網路結構來適應影像處理,和端到端學習,優化流程、結構和參數;或者將深度學習與傳統的電腦視覺,或其他領域的方法(如語言處理和語音辨識)相結合。
▌4、語義分割
電腦視覺的核心是分割,它將整個圖像分成一個個像素組,然後對其進行標記和分類。特別地,語義分割試圖在語義上,理解圖像中每個像素的角色(比如,辨識它是汽車、摩托車還是其他的類別)。
如上圖所示,除了辨識人、道路、汽車、樹木等之外,我們還必須確定每個物體的邊界。因此,與分類不同,我們需要用模型對密集的像素進行預測。
與其他電腦視覺任務一樣,卷積神經網路在分割任務上,取得了巨大成功。最流行的原始方法之一,是透過滑動窗口進行塊分類,利用每個像素周圍的圖像塊,對每個像素分別進行分類。但是其計算效率非常低,因為我們不能在重疊塊之間,重用共享特徵。
解決方案就是加州大學伯克萊分校提出的全卷積網路( FCN ),它提出了端到端的卷積神經網路體系結構,在沒有任何全連接層的情況下,進行密集預測。
這種方法允許針對任何尺寸的圖像生成分割映射,並且比塊分類算法快得多,幾乎後續所有的語義分割算法,都採用了這種範式。
但是,這也仍然存在一個問題:在原始圖像解析度上,進行卷積運算非常昂貴。為瞭解決這個問題, FCN 在網路內部使用了下採樣和上採樣:下採樣層被稱為條紋卷積( striped convolution );而上採樣層被稱為反卷積( transposed convolution )。
儘管採用了上採樣和下採樣層,但由於池化期間的資訊丟失, FCN 會生成比較粗糙的分割映射。 SegNet 是一種比 FCN (使用最大池化和編碼解碼框架)更高效的內存架構。在 SegNet 解碼技術中,從更高解析度的特徵映射中,引入了 shortcut/skip connections ,以改善上採樣和下採樣後的粗糙分割映射。
目前的語義分割研究都依賴於完全卷積網路,如空洞卷積 ( Dilated Convolutions ),DeepLab 和 RefineNet 。
▌5 、實例分割
除了語義分割之外,實例分割將不同類型的實例進行分類,比如用 5 種不同顏色,來標記 5 輛汽車。分類任務通常來說,就是辨識出包含單個對象的圖像是什麼,但在分割實例時,我們需要執行更複雜的任務。
我們會看到多個重疊物體,和不同背景的複雜景象,我們不僅需要將這些不同的對象進行分類,而且還要確定對象的邊界、差異和彼此之間的關係!
到目前為止,我們已經看到了,如何以多種有趣的方式,使用卷積神經網路的特徵,透過邊界框有效定位圖像中的不同對象。我們可以將這種技術進行擴展嗎?也就是說,對每個對象的精確像素進行定位,而不僅僅是用邊界框進行定位?
Facebook AI 則使用了 Mask R-CNN 架構,對實例分割問題進行了探索。
就像 Fast R-CNN 和 Faster R-CNN 一樣, Mask R-CNN 的底層,是鑒於 Faster R-CNN 在物體檢測方面效果很好,我們是否可以將其擴展到像素級分割?
Mask R-CNN 透過向 Faster R-CNN 添加一個分支,來進行像素級分割,該分支輸出一個二進制掩碼,該掩碼表示給定像素,是否為目標對象的一部分:該分支是以卷積神經網路特徵,映射的全卷積網路。
將給定的卷積神經網路特徵映射作為輸入,輸出為一個矩陣,其中像素屬於該對象的所有位置用 1 表示,其他位置則用 0 表示,這就是二進制掩碼。
另外,當在原始 Faster R-CNN 架構上運行,且沒有做任何修改時,感興趣池化區域( RoIPool ) 選擇的特徵映射區域,或原始圖像的區域稍微錯開。由於圖像分割具有像素級特性,這與邊界框不同,自然會導致結果不準確。
Mas R-CNN 透過調整 RoIPool 來解決這個問題,使用感興趣區域對齊( Roialign )方法使其變的更精確。
本質上, RoIlign 使用雙線性插值來避免捨入誤差,這會導致檢測和分割不準確。
一旦生成這些掩碼, Mask R-CNN 將 RoIAlign 與來自 Faster R-CNN 的分類,和邊界框相結合,以便進行精確的分割:
▌結語
上述這 5 種主要的電腦視覺技術,可以協助電腦從單個或一系列圖像中提取、分析和理解有用的資訊。你還可以透過 GitHub 儲存庫(https://github.com/khanhnamle1994/computer-vision)獲取所有的演講幻燈片以及指南。
————————————————
版權聲明:本文為 CSDN 博主「AI 科技大本營」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/dQCFKyQDXYm3F8rB0/article/details/80016353
AKD 寰楚專業級全系列監控設備 |
沒有留言:
張貼留言