0
本文為 AI 研習社編譯的技術博客,原標題 :
The 5 Computer Vision Techniques That Will Change How You See The World
作者 | James Le
翻譯 | jinlilei
校對 | 醬番梨 整理 | 菠蘿妹
原文鏈接:
https://heartbeat.fritz.ai/the-5-computer-vision-techniques-that-will-change-how-you-see-the-world-1ee19334354b
計算機視覺是目前深度學習領域最熱門的研究領域之一。它位于許多學術科目的交匯點,如計算機科學(圖形學,算法,理論,系統,建筑),數學(信息檢索,機器學習),工程學(機器人學,語音,自然語言處理,圖像處理),物理學(光學) ,生物學(神經科學)和心理學(認知科學)。由于計算機視覺代表了對視覺環境及其背景的相對理解,許多科學家認為,該領域由于其跨域掌握為人工智能鋪平了道路。
那么什么是計算機視覺?以下是一些正式的教科書定義:
“從圖像中構建明確,有意義的物理對象描述”(Ballard&Brown,1982)
“從一個或多個數字圖像計算3D世界的屬性”(Trucco&Verri,1998)
“根據感知的圖像做出有關真實物體和場景的有用決策”(Sockman&Shapiro,2001)
為何學習計算機視覺?最明顯的答案是,從這一研究領域衍生出的快速增長的有用的應用集合。以下是其中的一小部分:
人臉識別:Snapchat和Facebook使用 面部檢測 算法應用卷積核并在圖片中識別出你。
圖像檢索:Google圖像使用基于內容的查詢來搜索相關圖像。算法分析查詢圖像中的內容,并根據最匹配的內容返回結果。
游戲和控制:Microsoft Kinect是使用立體視覺的游戲中的一個很好的商業產品。
監視:監控攝像機在公共場所無處不在,它用于檢測可疑行為。
生物識別:指紋,虹膜和面部匹配仍然是生物識別中的一些常用方法。
智能汽車:視覺仍然是檢測交通標志和信號燈以及其他視覺特征的主要信息來源。
我最近完成了斯坦福大學關于使用卷積神經網絡進行視覺識別的精彩CS231n課程。視覺識別任務,如圖像分類,定位和檢測,是計算機視覺的關鍵組成部分。神經網絡和深度學習方法的最新發展極大地提高了這些最先進的視覺識別系統的性能。該課程是一個非凡的資源,它教會了我在頂端計算機視覺研究中使用深度學習架構的細節。在本文中,我想分享我學到的5種主要計算機視覺技術,以及使用每種技術主要的深度學習模型和應用。
圖像分類的問題是這樣的:給定一組單一類別標注的圖像,要求我們對一組新的測試集預測這些類別并且測試預測的準確率。關于這個任務有很多挑戰,包括視點變化,尺度變換,類內變化,圖像變形,圖像遮擋,條件,以及雜亂的背景。
我們如何來編寫一個能將圖像分成不同類別的算法?計算機視覺研究人員已經提出一種數據驅動的方法來解決這個問題。 他們不是試圖直接在代碼中指定每個感興趣的圖像類別,而是為計算機提供每張圖像類的許多樣本,然后開發學習算法,查看這些樣本并了解每個類的視覺外觀。換句話說,他們首先收集一個帶標注圖像的訓練集,然后將它傳給計算機去處理這個數據。
鑒于這一事實,整個圖像分類的過程可形式化如下:
我們的輸入是一個訓練集,包括N 個圖像,用K 個不同的類別給每個圖像進行標注。
然后,我們用這個訓練集來訓練分類器以了解每個類別像什么。
最后,我們通過讓這個分類器預測一組它之前沒見過的新的圖像集來評估分類器的效果。然后我們將這些圖像的真實標簽與分類器預測的標簽進行比較。
卷積神經網絡(CNNs)是用于圖像分類最流行的架構。CNNs一個典型的用例是你傳給這個網絡圖像,然后網絡對這些數據分類。CNNs往往從輸入”掃描器“ 開始,它不打算一次解析所有的訓練數據。比如,輸入一張100×100像素的圖像,你不需要具有10,000節點的圖層。相反,你會創建一個10×10大小的掃描輸入層,你可以為圖像的前10×10像素提供圖像。通過該輸入后,通過將掃描器向右移動一個像素,可以輸入下一個10×10像素。這個技術稱為滑動窗口。
然后,通過卷積層而不是正常層饋送輸入數據。每個節點僅僅關注與自身相鄰的部分。這些卷積層隨著網絡的變深也趨于收縮,主要是通過輸入的易分解因素。除了卷積層,它們通常還具有特征池化層。 池化是一個過濾細節的方法:常見的池化技術是最大池化,我們采用2×2像素,并傳遞具有最大量特定屬性的像素。
目前大多數圖像分類技術都是在ImageNet上面訓練的,它是一個約120萬個高分辨率的訓練圖像的數據集。測試圖像不顯示初始注釋(沒有分割或者標簽),并且算法必須生成指定圖像中存在的對象的標簽。Oxford、INRIA、XRCE 等機構的領先計算機視覺小組用已有的最好計算機視覺方法應用于這個數據集。通常,計算機視覺系統是復雜的多級系統,往往需要在早期階段通過手動調試優化參數。
第一屆ImageNet 競賽的冠軍 Alex Krizhevsky (NIPS 2012) 由 Yann LeCun 開創的深度卷積神經網絡。其結構包括7個隱藏層,不包括一些最大池化層。前5層是卷積層,最后2層是全連接層。每個隱藏層的激活函數是ReLU。這些訓練比邏輯單元更快更有表達力。除此之外,當相近的單元有更強的激活值,它還用競爭的歸一化來抑制隱藏的活動。這有助于強度的變化。
在硬件要求方面,Alex在2個Nvidia GTX 580 GPU(超過1000個快速小內核)上使用了非常有效的卷積網絡實現。 GPU非常適合矩陣矩陣乘法,并且具有非常高的存儲器帶寬。 這使他能夠在一周內訓練網絡,并在測試時快速組合10個補丁的結果。 如果我們能夠足夠快地傳達狀態,我們可以在多個核心上傳播網絡。 隨著核心變得越來越便宜而數據集越來越大,大型神經網絡的改進速度將超過老式的計算機視覺系統。 自AlexNet以來,已有多種新型號使用CNN作為其骨干架構,并在ImageNet中取得了出色的成果:ZFNet(2013),GoogLeNet(2014),VGGNet(2014),ResNet(2015),DenseNet(2016)等。
在圖像中定義目標的任務通常涉及單個目標的邊界框和標簽的輸出。這與分類/定位任務的不同之處在于,它將分類和定位應用于許多目標,而不僅僅是一個主導目標。你只有2類目標分類,即目標邊界框和非目標邊界框。例如,在汽車檢測中,您必須使用其邊界框檢測給定圖像中的所有汽車。
如果我們就像對圖像進行分類和定位的方式使用滑動窗口技術,我們需要將CNN應用于圖像的許多不同位置。因為CNN將每個位置分類為目標或背景,我們需要在CNN中應用許多的位置和不同比例,計算上是非常昂貴的!
為了處理這種情況,神經網絡研究人員已經提出使用區域來代替,在那里我們找到可能包含目標的“blobby”圖像區域。這個區域運行起來相對較快。第一個引人注目的模型是 R-CNN(基于區域的卷積神經網絡)。在R-CNN中,我們首先使用稱為選擇性搜索的算法掃描輸入圖像以尋找可能的目標,生成約2,000個候選區域。然后我們在每個區域框的基礎上運行CNN。最后,我們獲取每個CNN的輸出并將其輸入到SVM以對區域進行分類,并使用線性回歸來收緊目標的邊界框。
基本上,我們將目標檢測轉變成了圖像分類問題。但是,存在一些問題 - 訓練緩慢,需要大量磁盤空間,推理也很慢。
R-CNN的直接后代是快速R-CNN,它通過2次增強提高了檢測速度:1)在侯選區域之前執行特征提取,因此在整個圖像上僅運行一個CNN,以及2)用softmax層替換SVM ,從而擴展神經網絡的預測,而不是創建一個新的模型。
快速R-CNN在速度方面表現得更好,因為它只為整個圖像訓練一個CNN。但是,選擇性搜索算法仍然需要花費大量時間來生成候選區域。
因此,發現了更快的R-CNN,它現在是用于基于深度學習的目標檢測的規范模型。通過插入區域生成網絡(RPN)來預測來自特征的區域,它用快速神經網絡取代慢的選擇性搜索算法。RPN用于決定“在哪里”以減少整個推理過程的計算要求。RPN快速有效地掃描每個位置,以評估是否需要在給定區域中進行進一步處理。它通過輸出k個邊界框區域來做到這一點, 每個區域具有2個分數,表示每個位置處目標的概率。
一旦我們獲得了我們的候選區域,我們就會直接將它們提供給基本上是快速R-CNN的內容。我們添加了一個池化層,一些全連接層,最后是一個softmax分類層和邊界框回歸器。
總而言之,更快的R-CNN實現了更好的速度和更高的精度。值得注意的是,盡管未來的模型在提高檢測速度方面做了很多工作,但很少有模型能夠以更高的優勢超越更快的R-CNN。換句話說,更快的R-CNN可能不是最簡單或最快的目標檢測方法,但它仍然是表現最好的方法之一。
近年來的主要目標檢測趨勢已轉向更快,更有效的檢測系統。這在諸如You Only Look Once(YOLO),Single Shot MultiBox Detector(SSD)和基于區域的完全卷積網絡(R-FCN)等方法中可見,作為在整個圖像上共享計算的一種方法。因此,這些方法將自己與3種R-CNN技術相關聯的昂貴子網區分開來。這些趨勢背后的主要原因是避免讓單獨的算法孤立地關注各自的子問題,因為這通常會增加訓練時間并降低網絡準確性。
目標跟蹤指的是在給定場景下跟蹤特定感興趣的一個或者多個目標 。傳統上,它應用在視頻和現實世界的交互中,它們在初始目標檢測之后進行觀察。現在,它對自動駕駛系統至關重要,例如優步和特斯拉等公司的自動駕駛車輛。
目標跟蹤方法可以根據觀察模型分為兩類:生成方法和判別方法。生成方法使用生成模型來描述表觀特征并最小化重建誤差以搜索目標,例如PCA。判別方法可用于區分目標和背景,其性能更加魯棒,它逐漸成為跟蹤的主要方法。判別方法也稱為檢測跟蹤,深度學習屬于這一類。為了通過檢測實現跟蹤,我們檢測所有幀的候選目標,并使用深度學習從候選者中識別所需目標。可以使用兩種基本網絡模型:棧式自動編碼器(SAE)和卷積神經網絡(CNN)。
使用SAE跟蹤任務的最流行的深度網絡是深度學習跟蹤器,它提出了離線預訓練和在線微調網絡。這個過程是這樣的:
離線無監督預訓練使用大規模自然圖像數據集的棧式去噪自動編碼器以獲得一般目標表示。通過在輸入圖像中添加噪聲并重建原始圖像,棧式 去噪自動編碼器可以獲得更魯棒的特征表達能力。
將預訓練網絡的編碼部分與分類器組合以獲得分類網絡,然后使用從初始幀獲得的正樣本和負樣本來微調網絡,這可以區分當前目標和背景。DLT使用粒子濾波器作為運動模型來產生當前幀的候選補丁。分類網絡輸出這些補丁的概率分數,表示其分類的置信度,然后選擇這些補丁中最高的補丁作為目標。
在模型更新中,DLT使用限制閾值的方式。
由于其在圖像分類和目標檢測方面的優越性,CNN已成為計算機視覺和視覺跟蹤的主流深度模型。一般而言,大規模CNN既可以作為分類器也可以作為跟蹤器進行訓練。2個代表性的基于CNN的跟蹤算法是 完全卷積網絡跟蹤器(FCNT)和多域CNN (MD Net)。
FCNT成功分析并利用VGG模型的特征圖,這是一個經過預先訓練的ImageNet,并產生以下觀察結果:
CNN特征圖可用于定位和跟蹤。
許多CNN特征圖區分特定目標與其背景的任務是嘈雜的或不相關的。
較高層捕獲對象類別的語義概念,而較低層編碼更多的判別特征以捕獲類內變異。
由于這些觀察,FCNT設計了特征選擇網絡,以在VGG網絡的conv4-3和conv5-3層上選擇最相關的特征圖。然后,為了避免在噪聲上過擬合,它還分別為兩個層的選定特征圖設計了額外的兩個通道(稱為SNet和GNet)。GNet捕獲目標的類別信息,而SNet將目標位置為中心的感興趣區域(ROI)。最后,通過SNet和GNet,分類器獲得兩個預測熱圖,并且跟蹤器根據是否存在干擾者來決定將使用哪個熱圖來生成最終跟蹤結果。FCNT的流程如下所示。
與FCNT的想法不同,MD Net使用視頻的所有序列來跟蹤其中的移動物體。上述網絡使用不相關的圖像數據來減少跟蹤數據的訓練需求,這種想法與跟蹤有一些偏差。此視頻中一個類的目標可以是另一個視頻中的背景,因此MD Net提出了多域的概念,以獨立區分每個域中的目標和背景。域表示包含相同類型目標的一組視頻。
如下所示,MD Net分為兩部分:共享層和特定域層的K分支。每個分支包含一個具有softmax損失的二進制分類層,用于區分每個域中的目標和背景,以及共享層與所有域共享以確保一般性表示。
近年來,深度學習研究人員嘗試了不同的方法來適應視覺跟蹤任務的特征。他們已經探索了許多方向:應用其他網絡模型,如遞歸神經網絡和深度置信網絡,設計網絡結構以適應視頻處理和端到端學習,優化過程,結構和參數,或者甚至將深度學習與傳統的計算機視覺方法或語言處理和語音識別等其他領域的方法相結合。
計算機視覺的核心是分割過程 ,它將整個圖像分成像素組,然后可以對其進行標記和分類。特別是,語義分割試圖在語義上理解圖像中每個像素的作用(例如,它是汽車,摩托車還是其它類型的類?)。例如,在上圖中,除了識別人,道路,汽車,樹木等之外,我們還必須描繪每個物體的邊界。因此,與分類不同,我們需要從模型中進行密集的逐像素預測。
與其他計算機視覺任務一樣,CNN在分割問題上取得了巨大成功。其中一種流行的初始方法是通過滑動窗口進行補丁分類,其中每個像素使用其周圍的圖像分別分為類。然而,這在計算上是非常低效的,因為我們不重用重疊補丁之間的共享特征。
相反,解決方案是加州大學伯克利分校的全卷積網絡(FCN),它推廣了端到端的CNN架構,用于密集預測而無需任何全連接層。這允許為任何大小的圖像生成分割圖,并且與補丁分類方法相比也快得多。幾乎所有后續的語義分割方法都采用了這種范式。
然而,仍然存在一個問題:原始圖像分辨率下的卷積將非常昂貴。為了解決這個問題,FCN在網絡內部使用下采樣和上采樣。下采樣層稱為條紋卷積,而上采樣層稱為反卷積。
盡管采用了上采樣/下采樣層,但由于在池化期間信息丟失,FCN會生成粗分割圖。 SegNet 是一種比使用最大池化和編碼 - 解碼器框架的FCN更高效的內存架構。在SegNet中,從更高分辨率的特征映射引入快捷/跳躍連接,以改善上采樣/下采樣的粗糙度。
最近的語義分割研究在很大程度上依賴于全卷積網絡,例如擴張卷積,DeepLab和RefineNet。
除了語義分割之外,實例分割將不同類的實例分段,例如用5種不同顏色標記5輛汽車。在分類中,通常有一個圖像,其中一個目標作為焦點,任務是說這個圖像是什么。但是為了分割實例,我們需要執行更復雜的任務。我們看到復雜的景點有多個重疊的物體和不同的背景,我們不僅要對這些不同的物體進行分類,還要確定它們之間的界限,差異和關系!
到目前為止,我們已經看到了如何以許多有趣的方式使用CNN特征來有效地定位帶有邊界框的圖像中的不同目標。我們可以擴展這些技術來定位每個目標的精確像素而不僅僅是邊界框嗎?使用稱為Mask R-CNN的架構在Facebook AI上探索該實例分割問題。
就像Fast R-CNN和Faster R-CNN一樣,Mask R-CNN的潛在原理很簡單。鑒于 Faster R-CNN在目標檢測中運行得非常好,我們是否可以擴展它以進行像素級分割?
Mask R-CNN通過向 Faster R-CNN添加分支來完成此操作,該分支輸出二進制掩碼,該掩碼表示給定像素是否是目標的一部分。該分支是基于CNN的特征圖之上的全卷積網絡。給定CNN特征圖作為輸入,網絡在像素屬于目標的用1s在所有位置輸出矩陣,在其他地方輸出0(這稱為二進制掩碼)。
另外,當在原始Faster R-CNN架構上運行而沒有修改時,由RoIPool(感興趣區域池化)選擇的特征圖的區域與原始圖像的區域略微不對準。由于圖像分割需要像素級特異性,與邊界框不同,這自然會導致不準確。Mask R-CNN通過使用稱為RoIAlign(感興趣區域對齊)的方法調整RoIPool以更精確地對齊來解決此問題。從本質上講,RoIAlign使用雙線性插值來避免舍入誤差,從而導致檢測和分割不準確。
一旦生成了這些掩模,Mask R-CNN將它們與來自Faster R-CNN的分類和邊界框組合在一起,以生成如此精確的分割:
這5種主要的計算機視覺技術可以幫助計算機從一個或一系列圖像中提取,分析和理解有用的信息。我還沒有談到許多其他先進技術,包括樣式轉移,著色,動作識別,3D對象,人體姿勢估計等。事實上,計算機視覺領域的成本太高而無法深入探討,我鼓勵您進一步探索,無論是通過在線課程,博客教程還是正式文檔。對于初學者,我強烈推薦CS231n課程,因為您將學習如何實現,訓練和調試自己的神經網絡。作為獎勵,您可以從我的GitHub存儲庫獲取所有演講幻燈片和作業指南。我希望它能指導你改變對世界的看法!
想要繼續查看該篇文章相關鏈接和參考文獻?
長按鏈接點擊打開或點擊【這5中計算機視覺技術,刷新你的世界觀】:雷鋒網雷鋒網雷鋒網
http://ai.yanxishe.com/page/TextTranslation/1251
AI研習社每日更新精彩內容,觀看更多精彩內容:
等你來譯:
雷峰網原創文章,未經授權禁止轉載。詳情見轉載須知。