詳解計算機視覺五大技術:影象分類、物件檢測、目標跟蹤、語義分割和例項分割...
譯者 | 王柯凝
出品 | AI科技大本營(公眾號ID:rgznai100)
【 AI 科技大本營導讀】目前,計算機視覺是深度學習領域最熱門的研究領域之一。計算機視覺實際上是一個跨領域的交叉學科,包括電腦科學(圖形、演算法、理論、系統、體系結構),數學(資訊檢索、機器學習),工程學(機器人、語音、自然語言處理、影象處理),物理學(光學 ),生物學(神經科學)和心理學(認知科學)等等。許多科學家認為,計算機視覺為人工智慧的發展開拓了道路。
那麼什麼是計算機視覺呢? 這裡給出了幾個比較嚴謹的定義:
✦ “對影象中的客觀物件構建明確而有意義的描述”(Ballard&Brown,1982)
✦ “從一個或多個數字影象中計算三維世界的特性”(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 充分分析並利用了 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)獲取所有的演講幻燈片以及指南。
招聘作者 | James Le
原文連結
https://heartbeat.fritz.ai/the-5-computer-vision-techniques-that-will-change-how-you-see-the-world-1ee19334354b
AI科技大本營現招聘AI記者和資深編譯,有意者請將簡歷投至:[email protected],期待你的加入!
AI科技大本營讀者群(計算機視覺、機器學習、深度學習、NLP、Python、AI硬體、AI+金融、AI+PM方向)正在招募中,和你志同道合的小夥伴也在這裡!關注AI科技大本營微信公眾號,後臺回覆:讀者群,新增營長請務必備註姓名,研究方向。
AI科技大本營公眾號ID:rgznai100
☟☟☟點選 | 閱讀原文 | 檢視更多精彩內容