1. 程式人生 > >深度學習 --- CNN的變體在影象分類、影象檢測、目標跟蹤、語義分割和例項分割的簡介(附論文連結)

深度學習 --- CNN的變體在影象分類、影象檢測、目標跟蹤、語義分割和例項分割的簡介(附論文連結)

以上就是卷積神經網路的最基礎的知識了,下面我們一起來看看CNN都是用在何處並且如何使用,以及使用原理,本人還沒深入研究他們,等把基礎知識總結完以後開始深入研究這幾個方面,然後整理在寫成部落格,最近的安排是後面把自然語言處理總結一下,強化學習的總結就先往後推一下。再往後是系統的學習一下演算法和資料結構,因為這些是基礎,必須把這些的基礎打紮實了。因為本人還在學校所以還有時間系統的梳理這方面的知識,然後在好好研究這些前言的應用技術。這裡需要說明的一下是,本篇的部落格主要參考外國的一篇部落格的介紹,這裡簡單的介紹一下,一方面為大家提供實戰時的方向,另一方面也為自己實戰時提供有力的理論依據(論文),原始部落格在末尾註明。好,廢話不多說,下面開始:

計算機視覺是目前深度學習領域最熱門的研究領域之一。它位於許多學術科目的交匯點,如電腦科學(圖形學,演算法,理論,系統,建築),數學(資訊檢索,機器學習),工程學(機器人學,語音,NLP,影象處理),物理學(光學) ),生物學(神經科學)和心理學(認知科學)。由於計算機視覺代表了對視覺環境及其背景的相對理解,許多科學家認為,由於其跨域掌握,該領域為人工智慧鋪平了道路。

那麼什麼是計算機視覺?以下是一些正式的教科書定義:

  • “從影象中構建明確,有意義的物理物件描述”(Ballard&Brown,1982)
  • “從一個或多個數字影象計算3D世界的屬性”(Trucco&Verri
    ,1998)
  • “根據感知的影象做出有關真實物體和場景的有用決策”(Sockman&Shapiro,2001)

為何學習計算機視覺?最明顯的答案是,從這一研究領域衍生出的快速增長的有用應用程式集合。以下是其中的一小部分:

  • 面部識別:Snapchat和Facebook使用面部檢測演算法來應用濾鏡並在圖片中識別您。
  • 影象檢索:Google影象使用基於內容的查詢來搜尋相關影象。演算法分析查詢影象中的內容,並根據最匹配的內容返回結果。
  • 遊戲和控制:使用立體視覺的遊戲中的一個很好的商業產品是Microsoft Kinect。
  • 監視:監控攝像機在公共場所無處不在,用於檢測可疑行為。
  • 生物識別:指紋,虹膜和麵部匹配仍然是生物識別中的一些常用方法。
  • 智慧汽車:Vision仍然是檢測交通標誌和燈光以及其他視覺特徵的主要資訊來源。

下面開始介紹五中計算機視覺的任務即影象分類、物件檢測、目標跟蹤、語義分割和例項分割:

1 - 影象分類

影象分類的問題是這樣的: 給定一組都標記為單個類別的影象, 我們被要求為一組新的測試影象預測這些類別, 並測量預測的準確性。與此任務相關的挑戰有很多, 包括視點變化、比例變化、類內變化、影象變形、影象遮擋、照明條件和背景雜波。

我們如何編寫一種演算法, 可以將影象分類為不同的類別?計算機視覺研究人員已經提出了一種資料驅動的方法來解決這個問題。它們沒有試圖直接在程式碼中指定每個影象類別的外觀, 而是為計算機提供了每個影象類的許多示例, 然後開發了學習演算法, 檢視這些示例並瞭解視覺物件每個類的外觀。換句話說, 他們首先積累標記影象的訓練資料集, 然後將其輸入計算機處理資料。

鑑於這一事實, 完整的影象分類管道可以形式化如下:

  • 我們的輸入是一個訓練資料集, 由n個影象組成, 每個影象都用 k 不同的之一標記。
  • 然後, 我們使用此訓練集訓練一個分類器, 以瞭解每個類的外觀。
  • 最後, 我們通過要求分類器預測一組以前從未見過的新影象的標籤來評估分類器的質量。然後, 我們將這些影象的真實標籤與分類器預測的標籤進行比較。

最流行的影象分類體系結構是卷積神經網路 (cnn).cnn 的一個典型用例是您提供網路映像, 網路對資料進行分類。cnn 傾向於從輸入 "掃描器" 開始, 該掃描器並不打算同時解析所有的訓練資料。例如, 要輸入 100 x 100 畫素的影象, 您不希望有一個包含 10, 000個節點的圖層。相反, 您建立一個掃描輸入圖層, 例如 10 x 10, 您將影象的前 10 x 10 畫素提供。通過該輸入後, 您可以通過向右移動掃描器一個畫素來將其輸入接下來的 10 x 10 畫素。這種技術被稱為滑動視窗。(這是我們前面講CNN時的卷積核)

然後通過卷積層而不是正常層饋送該輸入資料。每個節點僅關注相鄰的相鄰小區。這些卷積層也隨著它們變得更深而趨於收縮,主要是通過輸入的易分解因素。除了這些卷積層,它們通常還具有池化層。池化是一種過濾細節的方法:常見的池化技術是最大池化,我們採用2 x 2畫素,並傳遞具有最大量特定屬性的畫素。

第一屆 ImageNet 競賽的獲獎者是 Alex Krizhevsky(NIPS 2012) ,他在 Yann LeCun 開創的神經網路型別基礎上,設計了一個深度卷積神經網路。該網路架構除了一些最大池化層外,還包含 7 個隱藏層,前幾層是卷積層,最後兩層是全連線層。在每個隱藏層內,啟用函式為線性的,要比邏輯單元的訓練速度更快、效能更好。除此之外,當附近的單元有更強的活動時,它還使用競爭性標準化來壓制隱藏活動,這有助於強度的變化。



 

在硬體要求方面,Alex在2個Nvidia GTX 580 GPU(超過1000個快速小核心)上使用了非常有效的卷積網路實現。GPU非常適合矩陣矩陣乘法,並且具有非常高的儲存器頻寬。這使他能夠在一週內訓練網路,並在測試時快速的從10個塊中組合出結果。如果我們能夠足夠快地傳達狀態,我們可以在多個核心上傳播網路。隨著核心變得越來越便宜而資料集越來越大,大型神經網路的改進速度將超過老式的計算機視覺系統。自AlexNet以來,已有多種新型號使用CNN作為其骨幹架構,並在ImageNet中取得了出色的成果:ZFNet(2013),GoogLeNet(2014),VGGNet(2014),ResNet(2015),DenseNet(2016)等

2 - 物體檢測

在處理影象中的物件這一任務,通常會涉及到為各個物件輸出邊界框和標籤。這不同於分類/定位任務——對很多物件進行分類和定位,而不僅僅是對個主體物件進行分類和定位。在物件檢測中,你只有 2 個物件分類類別,即物件邊界框和非物件邊界框。例如,在汽車檢測中,你必須使用邊界框檢測所給定影象中的所有汽車。

如果使用影象分類和定點陣圖像這樣的滑動視窗技術,我們則需要將卷積神經網路應用於影象上的很多不同物體上。由於卷積神經網路會將影象中的每個物體識別為物件或背景,因此我們需要在大量的位置和規模上使用卷積神經網路,但是這需要很大的計算量!

為了應對這種情況,神經網路的研究人員已經提出使用區域(region代替,在那裡我們找到可能包含物件的“blobby”影象區域。執行起來相對較快。第一個引人注目的模型是R-CNN(基於區域的卷積神經網路)。在R-CNN中,我們首先使用稱為選擇性搜尋的演算法掃描輸入影象以尋找可能的物件,生成約2,000個區域提議。然後我們在每個區域提案的基礎上執行CNN。最後,我們獲取每個CNN的輸出並將其輸入SVM以對區域進行分類,並使用線性迴歸來收緊物件的邊界框。

 

基本上,我們將物件檢測轉變為影象分類問題。但是,存在一些問題 - 訓練緩慢,需要大量磁碟空間,推理也很慢。

R-CNN的直接後代是Fast R-CNN,它通過2次增強提高了檢測速度:

1)在提出區域之前執行特徵提取,因此僅在整個影象上執行一個CNN

2)用softmax層替換SVM ,從而擴充套件神經網路的預測,而不是建立一個新的模型。

 

Fast R-CNN在速度方面表現得更好,因為它只為整個影象訓練一個CNN。但是,選擇性搜尋演算法仍然需要花費大量時間來生成區域提議。

因此,發現了Faster R-CNN,其現在是用於基於深度學習的物件檢測的規範模型。它通過插入區域提議網路(RPN)來預測來自特徵的提議,從而用快速神經網路取代慢選擇性搜尋演算法。RPN用於決定“在哪裡”以減少整個推理過程的計算要求。RPN快速有效地掃描每個位置,以評估是否需要在給定區域中進行進一步處理。它通過輸出k個邊界框提議來做到這一點,每個提議具有2個值---代表每個位置包含目標物件和不包含目標物件的概率。

一旦我們獲得了我們的區域提案,我們就會直接將它們提供給基本上是Fast R-CNN的內容。我們添加了一個池化層,一些完全連線的層,最後是一個softmax分類層和邊界框迴歸器。

總而言之,Faster R-CNN實現了更快的速度和更高的精度。值得注意的是,儘管未來的模型在提高檢測速度方面做了很多工作,但很少有模型能夠以更高的優勢超越更快的R-CNN。換句話說,更快的R-CNN可能不是最簡單或最快的物件檢測方法,但它仍然是表現最好的方法之一。

近年來的主要物體檢測趨勢已轉向更快,更有效的檢測系統。這在諸如You Only Look Once(YOLO),Single Shot MultiBox Detector(SSD)和基於區域的完全卷積網路(R-FCN)等方法,這三種演算法轉向在整個影象上共享計算。因此,這三種演算法和上述的3種造價較高的R-CNN 技術有所不同。這些趨勢背後的主要原因是避免讓單獨的演算法孤立地關注各自的子問題,因為這通常會增加訓練時間並降低網路準確性。

3-物件跟蹤

物件跟蹤是指在給定場景中跟蹤特定感興趣物件或多個物件的過程。傳統上,它在視訊和現實世界的互動中具有應用,其中在初始物件檢測之後進行觀察。現在,它對自動駕駛系統至關重要,例如優步和特斯拉等公司的自動駕駛車輛。

物體跟蹤方法可以根據觀察模型分為兩類:生成方法和判別方法。生成方法使用生成模型來描述表觀特徵並最小化重建誤差以搜尋物件,例如PCA。判別方法可用於區分物件和背景,其效能更加穩健,逐漸成為跟蹤的主要方法。判別方法也稱為檢測跟蹤(Tracking-by-Detection),深度學習屬於這一類。為了通過檢測實現跟蹤,我們檢測所有幀的候選物件,並使用深度學習從候選者中識別所需物件。可以使用兩種基本網路模型:堆疊式自動編碼器(SAE)卷積神經網路(CNN)。

使用SAE跟蹤任務的最流行的深度網路是深度學習跟蹤器Deep Learning Tracker它提出了離線預訓練和線上微調網路。這個過程是這樣的:

  • 離線無監督預訓練使用大規模自然影象資料集的堆疊去噪自動編碼器以獲得一般物件表示。通過在輸入影象中新增噪聲並重建原始影象,堆疊去噪自動編碼器可以獲得更強大的特徵表達能力。
  • 將預訓練網路的編碼部分與分類器組合以獲得分類網路,然後使用從初始幀獲得的正樣本和負樣本來微調網路,這可以區分當前物件和背景。DLT(Deep Learning Tracker)使用粒子濾波器作為運動模型來產生當前幀的候選補丁。分類網路輸出這些補丁的概率分數,表示其分類的置信度,然後選擇這些補丁中最高的補丁作為物件。
  • 在模型更新中,DLT使用限制閾值的方式。

由於其在影象分類和物體檢測方面的優越性,CNN已成為計算機視覺和視覺跟蹤的主流深度模型。一般而言,大規模CNN既可以作為分類器也可以作為跟蹤器進行訓練。2個代表性的基於CNN的跟蹤演算法是完全卷積網路跟蹤器(FCNT)多域CNN (MD Net)。

FCNT成功分析並利用VGG模型的特徵圖,這是一個經過預先訓練的ImageNet,併產生以下觀察結果:

  • CNN特徵圖可用於定位和跟蹤。
  • 許多CNN特徵圖對於區分特定物件與其背景的任務是嘈雜的或不相關的。
  • 較高層捕獲物件類別的語義概念,而較低層編碼更多的判別特徵以捕獲類內變異。

由於這些觀察,FCNT設計了特徵選擇網路,以在VGG網路的conv4-3和conv5-3層上選擇最相關的特徵對映。然後,為了避免在噪聲上過度擬合,它還分別為兩個層的選定特徵圖設計了額外的兩個通道(稱為SNet和GNet)。在主幹網路捕獲物件的類別資訊,而SNET將物件與具有類似外觀的背景區分開。使用第一幀中的給定邊界框初始化兩個網路以獲得物件的熱圖,並且對於新幀,以最後一幀中的物件位置為中心的感興趣區域(ROI)被裁剪和傳播。最後,通過SNet和GNet,分類器獲得兩個用於預測的熱圖,並且跟蹤器根據是否存在干擾物來決定將使用哪個熱圖來生成最終跟蹤結果。FCNT的管道如下所示。

與FCNT的想法不同,MD Net使用視訊的所有序列來跟蹤其中的移動。上述網路使用不相關的影象資料來減少跟蹤資料的訓練需求,這種想法與跟蹤有一些偏差。此視訊中一個類的物件可以是另一個視訊中的背景,因此MD Net提出了多域的概念,以獨立區分每個域中的物件和背景。域表示包含相同型別物件的一組視訊。

如下所示,MD Net分為兩部分:共享層和特定於域的層的K分支。每個分支包含一個具有softmax損失的二進位制分類層,用於區分每個域中的物件和背景,共享層與所有域共享以確保一般表示。

 近年來, 深度學習研究人員嘗試了不同的方法來適應視覺跟蹤任務的特點。探索的方向有很多: 應用復發神經網路、深信念網等其他網路模型, 設計適應視訊處理和端到端學習的網路結構, 優化過程、結構, 引數, 甚至將深度學習與傳統的計算機視覺方法或語言處理和語音識別等其他領域的方法結合起來。

4 - 語義分段

計算機視覺的核心是分割過程,它將整個影象按畫素分組,然後可以對其進行標記和分類。特別是,語義分割試圖在語義上理解影象中每個畫素的作用(例如,它是汽車,摩托車還是其他型別的類?)。例如,在上圖中,除了識別人,道路,汽車,樹木等之外,我們還必須描繪每個物體的邊界。因此,與分類不同,我們需要從模型中進行密集的逐畫素預測。

與其他計算機視覺任務一樣,CNN在分割問題上取得了巨大成功。其中一種流行的初始方法是通過滑動視窗進行塊分類,其中每個畫素使用其周圍的影象分別分類。然而,這在計算上是非常低效的,因為我們不重用重疊塊之間的共享特徵。

相反,該解決方案是加州大學伯克利分校的全卷積網路 (FCN),它推廣了端到端的CNN架構,用於密集預測而無需任何完全連線的層。這允許為任何大小的影象生成分割圖,並且與塊分類方法相比也快得多。幾乎所有後續的語義分割方法都採用了這種正規化。

但是,這也仍然存在一個問題:在原始影象解析度上進行卷積運算非常昂貴。為了解決這個問題, FCN 在網路內部使用了下采樣和上取樣:下采樣層被稱為條紋卷積( striped convolution );而上取樣層被稱為反捲積( transposed convolution )。

儘管採用了上取樣和下采樣層,但由於池化期間的資訊丟失, FCN 會生成比較粗糙的分割對映。 SegNet 是一種比 FCN (使用最大池化和編碼解碼框架)更高效的記憶體架構。在 SegNet 解碼技術中,從更高解析度的特徵對映中引入了 shortcut/skip connections ,以改善上取樣和下采樣後的粗糙分割對映。

最近的語義分割研究在很大程度上依賴於完全卷積網路,例如擴張卷積DeepLabRefineNet

5 、例項分割

 

除了語義分段之外,例項分段將不同的類例項分段,例如用5種不同顏色標記5輛汽車。在分類中,通常有一個影象,其中一個物件作為焦點,任務是說該影象是什麼。但是為了分割例項,我們需要執行更復雜的任務。我們看到複雜的景點有多個重疊的物體和不同的背景,我們不僅要對這些不同的物體進行分類,還要確定它們之間的界限,差異和關係!

到目前為止,我們已經看到了如何以許多有趣的方式使用CNN功能來有效地定位帶有邊界框的影象中的不同物件。我們可以擴充套件這些技術來定位每個物件的精確畫素而不僅僅是邊界框嗎?使用稱為Mask R-CNN的架構在Facebook AI上探索該例項分割問題。

就像Fast R-CNN和Faster R-CNN一樣,Mask R-CNN的潛在直覺很簡單鑑於更快的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種主要的計算機視覺技術可以幫助計算機從單個或一系列影象中提取,分析和理解有用的資訊。我還沒有涉及許多其他先進技術,包括樣式轉移,著色,動作識別,3D物件,人體姿勢估計等。事實上,計算機視覺領域的成本太高而無法深入探討,我鼓勵您進一步探索,無論是通過線上課程,部落格教程還是正式文件。作為獎勵,您可以從我的GitHub儲存庫獲取所有演講幻燈片和作業指南。我希望它能指導你改變如何看世界!

從上面可以看出大多數都是基於卷積神經網路的改進和應用,因此深入理解前面的CNN有多重要,因此我們要學會學習,去學習最本質的東西,一旦深入理解了CNN,學習上面的演算法會很快理解,而且很快可以實現,這就是理論基礎的重要性,好上面的都附有相關論文,想深入的請查閱原始論文,卷積神經網路就到這裡,下一篇是RNN。

原始部落格地址,需要翻牆