特徵工程(七):圖像特徵提取和深度學習

來源:https://mp.weixin.qq.com/s/pZWKECYyvLlkB-Qt8wi0fw

視覺和聲音是人類固有的感覺輸入。我們的大腦是可以迅速進化我們的能力來處理視覺和聽覺信號的,一些系統甚至在出生前就對刺激做出反應。另一方面,語言技能是學習得來的。他們需要幾個月或幾年的時間來掌握。許多人天生就具有視力和聽力的天賦,但是我們所有人都必須有意訓練我們的大腦去理解和使用語言。

 

有趣的是,機器學習的情況是相反的。我們已經在文本分析應用方面取得了比圖像或音頻更多的進展。以搜索問題爲例。人們在信息檢索和文本檢索方面已經取得了相當多年的成功,而圖像和音頻搜索仍在不斷完善。在過去五年中,深度學習模式的突破最終預示着期待已久的圖像和語音分析的革命。

 

進展的困難與從相應類型的數據中提取有意義特徵的困難直接相關。機器學習模型需要語義上有意義的特徵進行語義意義的預測。在文本分析中,特別是對於英語這樣的語言,其中一個基本的語義單位(一個詞)很容易提取,可以很快地取得進展。另一方面,圖像和音頻被記錄爲數字像素或波形。圖像中的單個“原子”是像素。在音頻數據中,它是波形強度的單一測量。它們包含的語義信息遠少於數據文本。因此,在圖像和音頻上的特徵提取和工程任務比文本更具挑戰性。

 

在過去的二十年中,計算機視覺研究已經集中在人工標定上,用於提取良好的圖像特徵。在一段時間內,圖像特徵提取器,如 SIFT 和 HOG 是標準步驟。深度學習研究的最新發展已經擴展了傳統機器學習模型的範圍,將自動特徵提取作爲基礎層。他們本質上取代手動定義的特徵圖像提取器與手動定義的模型,自動學習和提取特徵。人工標定仍然存在,只是進一步深入到建模中去。

 

在本章中,我們將從流行的圖像特徵提取SIFT和HOG入手,深入研究本書所涵蓋的最複雜的建模機制:深度學習的特徵工程。

 

最簡單的圖像特徵(爲什麼他們不好使)

 

從圖像中提取的哪些特徵是正確的呢?答案當然取決於我們試圖用這些特徵來做什麼。假設我們的任務是圖像檢索:我們得到一張圖片並要求從圖像數據庫中得到相似的圖片。我們需要決定如何表示每個圖像,以及如何測量它們之間的差異。我們可以看看圖像中不同顏色的百分比嗎?圖8-1展示了兩幅具有大致相同顏色輪廓但有着非常不同含義的圖片;一個看起來像藍色天空中的白雲,另一個是希臘國旗。因此,顏色信息可能不足以表徵圖像。

 

 

另一個比較簡單的想法是測量圖像之間的像素值差異。首先,調整圖像的寬度和高度。每個圖像由像素值矩陣表示。矩陣可以通過一行或一列被堆疊成一個長向量。每個像素的顏色(例如,顏色的 RGB 編碼)現在是圖像的特徵。最後,測量長像素向量之間的歐幾里得距離。這絕對可以區分希臘國旗和白雲。但作爲相似性度量,它過於嚴格。雲可以呈現一千種不同的形狀,仍然是一朵雲。它可以移動到圖像的一邊,或者一半可能位於陰影中。所有這些轉換都會增加歐幾里得距離,但是他們不應該改變圖片仍然是雲的事實。

 

問題是單個像素不攜帶足夠的圖像語義信息。因此,使用它們用於分析結果是非常糟糕的。在 1999 年,計算機視覺研究者想出了一種更好的方法來使用圖像的統計數據來表示圖像。它叫做 Scale Invariant Feature Transform(SIFT)。

SIFT最初是爲對象識別的任務而開發的,它不僅涉及將圖像正確地標記爲包含對象,而且確定其在圖像中的位置。該過程包括在可能的尺度金字塔上分析圖像,檢測可以指示對象存在的興趣點,提取關於興趣點的特徵(通常稱爲計算機視覺中的圖像描述符),並確定對象的姿態。

 

多年來,SIFT 的使用擴展到不僅提取興趣點,而且遍及整個圖像的特徵。SIFT 特徵提取過程非常類似於另一種稱爲 Histogram of Oriented Gradients (HOG)的技術。它們都計算梯度方向的直方圖。現在我們詳細地描述一下。

 

人工特徵提取:SIFT 與 HOG

 

圖像梯度

要比原始像素值做得更好,我們必須以某種方式將像素組織成更多信息單元。相鄰像素之間的差異通常是非常有用的特徵。通常情況下像素值在對象的邊界處是不同,當存在陰影、圖案內或紋理表面時。相鄰像素之間的差值稱爲圖像梯度。

 

計算圖像梯度的最簡單的方法是分別計算圖像沿水平(X)和垂直(Y)軸的差異,然後將它們合成爲二維矢量。這涉及兩個 1D 差分操作,可以用矢量掩模或濾波器方便地表示。掩碼(1, 0, -1)可以得到在左像素和右像素之間的差異或者上像素和下像素之間的差異,取決於我們應用掩碼的方向。當然也有二維梯度濾波器。但在本例中,1D 濾波器就足夠了。

爲了對圖像應用濾波器,我們執行卷積。它涉及翻轉濾波器和內積與一小部分的圖像,然後移動到下一個塊。卷積在信號處理中很常見。我們將使用*來表示操作:

 

 

向量可以通過它的方向和大小來完全描述。梯度的大小等於梯度的歐幾里得範數,這表明像素值在像素周圍變化得多大。梯度的位置或方向取決於水平方向和垂直方向上的變化的相對大小;圖 8-2 說明了這些數學概念。

 

 

圖8—3展出了由垂直和水平梯度組成的圖像梯度的示例。每個示例是一個 9 像素的圖像。每個像素用灰度值標記。(較小的數字對應於較深的顏色)中心像素的梯度顯示在每個圖像下面。左側的圖像包含水平條紋,其中顏色僅垂直變化。因此,水平梯度爲零,梯度垂直爲非零。中心圖像包含垂直條紋,因此水平梯度爲零。右邊的圖像包含對角線條紋,斜率也是對角線。

 

 

它們能在真實的圖像上發揮作用嗎?在例 8-1 中,我們使用圖 8-4 所示的貓的水平和垂直梯度上來實驗。由於梯度是在原始圖像的每個像素位置計算的,所以我們得到兩個新的矩陣,每個矩陣可以被可視化爲圖像。

 

 

注意,水平梯度提取出強烈的垂直模式,如貓眼睛的內邊緣,而垂直梯度則提取強的水平模式,如晶須和眼睛的上下眼瞼。這乍看起來似乎有些矛盾,如果我們仔細考慮一下,這還是有道理的。水平(X)梯度識別水平方向上的變化。強的垂直圖案在大致相同的X位置上跨越多個Y像素。因此,垂直圖案導致像素值的水平差異。這也是我們的眼睛也能察覺到的。

 

梯度方向直方圖

單個圖像梯度可以識別圖像鄰域中的微小差異。但是我們的眼睛看到的圖案比那更大。例如,我們看到一整隻貓的鬍鬚,而不僅僅是一個小部分。人類視覺系統識別區域中的連續模式。因此,我們咋就圖像梯度鄰域有仍然有很多的工作要做。

我們如何精確地歸納向量?統計學家會回答:“看分佈!SIFT 和 HOG 都走這條路。它們計算(正則化)梯度矢量直方圖作爲圖像特徵。直方圖將數據分成容器並計算每容器中有多少,這是一個(不規範的)經驗分佈。規範化確保數和爲 1,用數學語言描述爲它具有單位 L 範數。

圖像梯度是矢量,矢量可以由兩個分量來表示:方向和幅度。因此,我們仍然需要決定如何設計直方圖來表示這兩個分量。SIFT 和 HOG 提供了一個解決方案,其中圖像梯度被它們的方向角所包括,由每個梯度的大小加權。以下是流程:

  1. 將 0° - 360° 分成相等大小的容器。

  2. 對於鄰域中的每個像素,將權重W添加到對應於其方向角的容器中。

  3. W是梯度的大小和其他相關信息的函數。例如,其他相關信息可以是像素到圖像貼片中心的逆距離。其思想是,如果梯度較大,權重應該很大,而圖像鄰域中心附近的像素比遠離像素的像素更大。

  4. 正則化直方圖。

 

圖 8-5 提供了由4x4像素的圖像鄰域構成的8個容器的梯度方向直方圖的圖示。

 

 

當然,在基本的梯度方向直方圖算法中還有許多選項。像通常一樣,正確的設置可能高度依賴於想要分析的特定圖像。

 

有多少容器?

他們的跨度是從 0° - 360°(有符號梯度)還是 0° - 180°(無符號梯度)?

具有更多的容器導致梯度方向的細粒度量化,因此會保留更多關於原始梯度的信息。但是,有太多的容器是不必要的,並可能導致過度擬合訓練數據。例如,在圖像中識別貓可能不依賴於精確地取向在 3° 的貓的晶須。

還有一個問題,容器是否應該跨越 0 - 360°,這將沿Y軸保持梯度,或跨越 0°- 180°,這將不會保留垂直梯度的符號。Dalal 與 Triggs 是 HOG 論文的最初作者,實驗確定從 0 - 180° 跨越的 9 個容器是最好的,而 SIFT 論文推薦了 8 個跨越 0° - 360° 的容器。

 

 

鄰域怎麼定義?他們應該怎樣覆蓋圖片?

HOG 和 SIFT 都基於圖像鄰域的兩層表示:首先,將相鄰像素組織成單元,然後將相鄰單元組織成塊。計算每個單元的方向直方圖,並將單元直方圖矢量連接起來,形成整個塊的最終特徵描述符。

SIFT 使用16x16像素的單元,將其組織成 8 個方向的容器,然後通過4x4單元的塊分組,使得圖像鄰域的4x4x8=128個特徵。

HOG 論文實驗用矩形和圓形形狀的單元和塊。矩形單元稱爲 R-HOG。最好的 R-HOG 設置爲8x8像素的 9 個定向倉,每個分組爲2x2個單元的塊。圓形窗口稱爲 C-HOG,具有由中心單元的半徑確定的變量、單元是否徑向分裂、外單元的寬度等。

無論鄰域如何組織,它們通常重疊形成整個圖像的特徵向量。換言之,單元和塊在水平方向和垂直方向上橫移圖像,一次只有幾個像素,以覆蓋整個圖像。

鄰域結構的主要組成部分是多層次的組織和重疊的窗口,其在圖像上移動。在深度學習網絡的設計中使用了相同的成分。

 

什麼樣的歸一化?

歸一化處理出特徵描述符,使得它們具有可比的大小。它是縮放的同義詞,我們在第 4 章中討論過。我們發現,文本特徵的特徵縮放(以 tf-idf 的形式)對分類精度沒有很大影響。圖像特徵與文字區別很大,其對在自然圖像中出現的照明和對比度的變化可能是非常敏感的。例如,在強烈的聚光燈下觀察蘋果的圖像,而不是透過窗戶發出柔和的散射光。即使物體是相同的,圖像梯度也會有非常不同的幅度。爲此,計算機視覺中的圖像特徵通常從全局顏色歸一化開始,以消除照度和對比度方差。對於 SIFT 和 HOG 來說,結果表明,只要我們對特徵進行歸一化,這種預處理是不必要的。

SIFT 遵循歸一化-閾值-歸一化方案。首先,塊特徵向量歸一化爲單位長度(L2 標準化)。然後,將特徵剪輯除以最大值以擺脫極端的照明效果,如從相機的色彩飽和度。最後,將剪切特徵再次歸一化到單位長度。

HOG 論文實驗涉及不同的歸一化方案例如 L1 和 L2,包括 SIFT 論文中標歸一化-閾值-歸一化方案。他們發現L1歸一化比其他的方法稍顯不靠譜。

 

SIFT 結構

SIFT 需要相當多的步驟。HOG 稍微簡單,但是遵循許多相同的基本步驟,如梯度直方圖和歸一化。圖 8-6 展示了 SIFT 體系結構。從原始圖像中的感興趣區域開始,首先將區域劃分爲網格。然後將每個網格單元進一步劃分爲子網格。每個子網格元素包含多個像素,並且每個像素產生梯度。每個子網格元素產生加權梯度估計,其中權重被選擇以使得子網格元素之外的梯度可以貢獻。然後將這些梯度估計聚合成子網格的方向直方圖,其中梯度可以具有如上所述的加權投票。然後將每個子網格的方向直方圖連接起來,形成整個網格的長梯度方向直方圖。(如果網格被劃分爲2x2子網格,那麼將有 4 個梯度方向直方圖拼接成一個。)這是網格的特徵向量。從這開始,它經過一個歸一化-閾值-歸一化過程。首先,將向量歸一化爲單位範數。然後,將單個值剪輯除以最大閾值。最後,再次對閾值向量進行歸一化處理。這是圖像塊的最終 SIFT 特徵描述。

 

 

基於深度神經網絡的圖像特徵提取

SIFT 和 HOG 在定義良好的圖像特徵方面走了很久。然而,計算機視覺的最新成果來自一個非常不同的方向:深度神經網絡模型。這一突破發生在 2012 的 ImageNet 挑戰中,多倫多大學的一組研究人員幾乎將前一年的獲獎者的錯誤率減半。他們強調他們的方法是“深度學習”。與以前的神經網絡模型不同,最新一代包含許多層疊在彼此之上的神經網絡層和變換。ImageNet 2012 的獲獎模型隨後被稱爲 AlexNet ,其神經網絡有 13 層。之後 IMANET 2014 的獲勝者有 27 層。

從表面上看,疊層神經網絡的機制與 SIFT 和 HOG 的圖像梯度直方圖有很大的不同。但是 AlxNETA 的可視化顯示,前幾層本質上是計算邊緣梯度和其他簡單的操作,很像 SIFT 和 HOG。隨後的層將局部模式組合成更全局的模式。最終的結果是一個比以前更強大的特徵提取器。

堆疊層的神經網絡(或任何其他分類模型)的基礎思想不是新的。但是,訓練這種複雜的模型需要大量的數據和強大的計算能力,這是直到最近纔有的。ImageNet 數據集包含來自 1000 個類的 120 萬個圖像的標記集。現代 GPU 加速了矩陣向量計算,這是許多機器學習模型的核心,包括神經網絡。深度學習方法的成功取決於大量可用的數據和大量的 GPU 小時。

深度學習架構可以由若干類型的層組成。例如,AlxNETs 包含卷積、全連接層、歸一化層和最大池化層。現在我們將依次查看每一層的內容。

 

 

 

全連接層

所有神經網絡的核心是輸入的線性函數。我們在第4章中遇到的邏輯迴歸是神經網絡的一個示例。全連接的神經網絡只是所有輸入特徵的一組線性函數。回想一個線性函數可以被寫爲輸入特徵向量與權重向量之間的內積,加上一個可能的常數項。線性函數的集合可以表示爲矩陣向量乘積,其中權重向量成爲權重矩陣。

 

全連接層的數學定義

 

 

W的每一行是將整個輸入向量X映射成Z中的單個輸出的權重向量。b是表示每個神經元恆定偏移(或偏置)的標量。

 

全連接層之所以如此命名,是因爲在每一個輸入都要在每個輸出中使用。在數學上,這意味着對矩陣W中的值沒有限制。(如我們將很快看到的,卷積層僅利用每個輸出的一小部分輸入。)在圖中,一個完全連接的神經網絡可以由一個完整的二部圖表示,其中前一層的每個結點輸出都連接到下一層的每個輸入。

 

全連接層包含儘可能多的參數。因此,它們是昂貴的。這種密集連接允許網絡檢測可能涉及所有輸入的全局模式。由於這個原因,AlexNet 的最後兩層完全連接。在輸入爲條件下輸出仍然是相互獨立的。

 

卷積層

與全連接層相反,卷積層僅使用每個輸出的輸入子集。通過在輸入上移動窗,每次使用幾個特徵產生輸出。爲了簡單起見,可以對輸入的不同集合使用相同的權重,而不是重新學習新權重。數學上,卷積算子以兩個函數作爲輸入,併產生一個函數作爲輸出。它翻轉一個輸入函數,將其移動到另一個函數上,並在每個點上在乘法曲線下輸出總面積。計算曲線下總面積的方法是取其積分。操作符在輸入中是對稱的,這意味着不管我們翻轉第一個輸入還是第二個輸入,輸出都是一樣的。

卷積定義爲

 

 

 

卷積的思想

卷積算子捕獲線性系統的效果,該線性系統將輸入信號與其響應函數相乘,求出所有過去輸入響應的和。

在上面的示例中,g(t)用來表示響應函數,f(t)表示輸入。但是由於卷積是對稱的,響應和輸出實際上並不重要。輸出只是兩者的結合。g(t)也稱爲濾波器。

 

 

 

 

 

Relu 變換對原始圖像或高斯濾波器等非負函數沒有影響。然而,經過訓練的神經網絡,無論是完全連接的還是卷積的,都有可能輸出負值。AlxNet 使用 Relu 代替其他變換,在訓練過程中可以更快的收斂,它適用於每一個卷積和全連接層。

 

響應歸一化層

在第 4 章和本章之前的討論之後,歸一化對大家來說應該是一個熟悉的概念。歸一化將個體輸出通過集體總響應的函數來劃分。因此,理解歸一化的另一種方式是,它在鄰居之間產生競爭,因爲現在每個輸出的強度都相對於其鄰居進行測量。AlexNet 在不同內核的每個位置上歸一化輸出。

局部響應歸一化引起相鄰核之間的競爭

 

 

 

池化層

池化層將多個輸入組合成單個輸出。當卷積濾波器在圖像上移動時,它爲其尺寸下的每個鄰域生成輸出。池化層迫使局部圖像鄰域產生一個值而不是許多值。這減少了在深度學習網絡的中間層中的輸出數量,這有效地減少了過擬合訓練數據的概率。

 

有多種方法彙集輸入:平均,求和(或計算一個廣義範數),或取最大值。池化層通過圖像或中間輸出層移動。Alxnet 使用最大池化層,以 2 像素(或輸出)的步幅移動圖像,並在 3 個鄰居之間彙集。

 

 

 

注意 AlexNet 是 SIFT/HOG 特徵提取器的梯度直方圖標準化規範化體系結構(參見圖8 -6),但具有更多的層。(這就是“深度學習”中的“深度”)不同於 SIFT/HOG,卷積核和全連接權值是從數據中學習的,而不是預定義的。此外,SIFT 中的歸一化步驟在整個圖像區域上遍及特徵向量執行,而 AlexNet 中的響應歸一化層在卷積核上歸一化。

 

深入的來看,模型從局部圖像鄰域中提取特徵開始。每個後續層建立在先前層的輸出上,有效地覆蓋原始圖像的相繼較大區域。因此,即使前五個卷積層都具有相當小的內核寬度,後面的層依然能夠制定更多的全局特徵。端部的全連接層是最具全局性的。

 

儘管特徵的要點在概念上是清晰的,但是很難想象每個層挑選出的實際特徵。圖 8- 14 和圖 8-15 顯示了由特徵型學習的前兩層卷積核的可視化。第一層包括在不同的方向上的灰度邊緣和紋理的檢測器,以及顏色斑點和紋理。第二層似乎是各種光滑圖案的檢測器。

 

儘管該領域有巨大的進步,圖像特徵仍然是一門藝術而不是科學。十年前,人工製作的特徵提取步驟結合了圖像梯度、邊緣檢測、定位、空間提示、平滑和歸一化等。如今,深度學習架構師構建了封裝相同想法的模型,但是這些參數是從訓練圖像中自動學習的。

 

總結

接近尾聲,我們在直覺上更好地理解爲什麼最直接和簡單的圖像特徵在執行任務時將永遠不是最有用的,如圖像分類。與其將每個像素表示爲原子單位相反,更重要的是考慮像素與它們附近的其他像素之間的關係。我們可以將這些技術如 SIFT 和 HOG 一樣,通過分析鄰域的梯度更好地提取整個圖像的特徵,發展技術以適應其他任務。

 

近年來的又一次飛躍將更深層次的神經網絡應用於計算機視覺,以進一步推動圖像的特徵提取。這裏要記住的重要一點是,深度學習堆疊了許多層的神經網絡和相互轉換。這些層中的一些,當單獨檢查時,開始梳理出類似的特徵,這些特徵可以被識別爲人類視覺的構建塊:定義線條、梯度、顏色圖。

https://github.com/apachecn/feature-engineering-for-ml-zh

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章