深度學習只是一種計算機視覺工具,而不是包治百病的良藥,不要因為流行就一味地使用它。傳統的計算機視覺技術仍然可以大顯身手,了解它們可以為你省去很多的時間和煩惱;并且掌握傳統計算機視覺確實可以讓你在深度學習方面做得更好。這是因為你可以更好地理解深度學習的內部狀況,并可執行預處理步驟改善深度學習結果。
本文的靈感同樣來自論壇中的一個常見問題:
深度學習已經取代了傳統的計算機視覺嗎?
或是換種說法:
既然深度學習看起來如此有效,是否還有必要學習傳統的計算機視覺技術?
這個問題很好。深度學習確實給計算機視覺和人工智能領域帶來了革命性的突破。許多曾經看似困難的問題,現在機器可以比解決的比人類還好。圖像分類就是最好的印證。確實,如從前所述,深度學習有責任將計算機視覺納入行業版圖。
但深度學習仍然只是計算機視覺的一個工具,且顯然不是解決所有問題的靈丹妙藥。因此,本文會對此進行詳細闡述。也就是說,我將說明傳統的計算機視覺技術為何仍十分有用,值得我們繼續學習并傳授下去。
本文分為以下幾個部分/論點:
深度學習需要大數據
深度學習有時會做過了頭
傳統計算機視覺將會提升你的深度學習水平
進入正文之前,我認為有必要詳細解釋一下什么是“傳統計算機視覺”,什么是深度學習,及其革命性。
背景知識
在深度學習出現以前,如果你有一項諸如圖像分類的工作,你會進行一步叫做“特征提取”的處理。所謂“特征”就是圖像中“有趣的”、描述性的、或是提供信息的小部分。你會應用我在本文中稱之為的“傳統計算機視覺技術”的組合來尋找這些特征,包括邊緣檢測、角點檢測、對象檢測等等。
在使用這些與特征提取和圖像分類相關的技術時,會從一類對象(例如:椅子、馬等等)的圖像中提取出盡可能多的特征,并將其視為這類對象的“定義”(稱作“詞袋”)。接下來你要在其它圖像中搜索這些“定義”。如果在另一個圖像中存在著詞袋中相當一部分的特征,那么這個圖像就被歸為包含那個特定對象(如椅子、馬等等)的分類。
這種圖像分類的特征提取方法的難點在于你必須在每張圖像中選擇尋找哪些特征。隨著你試圖區分的類別數目開始增長,比如說超過 10 或 20,這就會變得非常麻煩甚至難以實現。你要尋找角點?邊緣?還是紋理信息?不同類別的對象最好要用不同種類型的特征來描述。如果你選擇使用很多的特征,你就不得不處理海量的參數,而且還需要自己來微調。
深度學習引入了“端到端學習”這一概念,(簡而言之)讓機器在每個特定類別的對象中學習尋找特征,即最具描述性、最突出的特征。換句話說,讓神經網絡去發現各種類型圖像中的潛在模式。
因此,借助端到端學習,你不再需要手動決定采用哪種傳統機器視覺技術來描述特征。機器為你做好了這一切。《連線》雜志如此寫道:
舉例來說,如果你想教會一個 [深度] 神經網絡識別一只貓,你不必告訴它去尋找胡須、耳朵、毛或是眼睛。你只需展示給它成千上萬的貓的圖像,它自然會解決這一問題。如果它總是會將狐貍誤認為是貓,你也不用重寫代碼。你只需對它繼續進行訓練。
下圖描述了特征提取(使用傳統計算機視覺)和端到端學習之間的這種區別:
以上就是背景介紹?,F在接著討論為什么傳統計算機視覺仍然必不可少,而且學習它仍大有裨益。
深度學習需要大量數據
首先,深度學習需要數據,許許多多的數據。前文提到過的著名圖像分類模型的訓練都基于龐大的數據集。排名前三的訓練數據集分別是:
ImageNet——150 萬圖像,1000 個對象分類/類別;
COCO——250 萬圖像,91 個對象分類;
PASCAL VOC——50 萬圖像,20 個對象分類。
但是一個訓練不良的模型在你的訓練數據之外很可能表現糟糕,因為機器并沒有對于問題的洞察力,也就不能在沒看到數據的情況下進行概括歸納。而且對你來說查看訓練模型內部并進行手動調整又太過困難,因為一個深度學習模型內部擁有數以百萬計的參數——每個參數在訓練期間都會被調整。某種程度上說,一個深度學習模型就是一個黑箱。
傳統的計算機視覺完全透明,允許你更好地評估判斷你的解決方案是否在訓練環境之外依然有效。你對問題的深入見解可以放進你的算法之中。并且如果任何地方出現故障,你也可以更輕易地弄清楚什么需要調整,在哪里調整。
深度學習有時做過了頭
這大概是我最喜歡的支持研究傳統計算機視覺技術的理由。
訓練一個深度神經網絡需要很長的時間。你需要專門的硬件(例如高性能 GPU)訓練最新、最先進的圖像分類模型。你想在自己還不錯的筆記本上訓練?去度個一周的假吧,等你回來的時候訓練很可能仍未完成。
此外,如果你的訓練模型表現不佳呢?你不得不返回原點,用不同的訓練參數重做全部工作。這一過程可能會重復數百次。
但有時候所有這些完全沒必要。因為傳統計算機視覺技術可以比深度學習更有效率地解決問題,而且使用的代碼更少。例如,我曾經參與的一個項目是檢查每個通過傳送帶的罐子里是否有一個紅勺子?,F在你可以通過前文敘述的曠日持久的過程來訓練一個深度神經網絡去檢測勺子,或者你也可以寫一個簡單的以紅色為閾值的算法(將任何帶有一定范圍紅色的像素都標記為白色,所有其它的像素標記為黑色),然后計算有多少白色的像素。簡簡單單,一個小時就可以搞定!
掌握傳統的計算機視覺技術可能會為你節省大量的時間并減少不必要的煩惱。
傳統計算機視覺會提升你的深度學習技巧
理解傳統的計算機視覺實際上能幫你在深度學習上做得更好。
舉例來說,計算機視覺領域最為普遍使用的神經網絡是卷積神經網絡。但什么是卷積?卷積事實上是一種被廣泛使用的圖像處理技術(比如,索貝爾邊緣檢測)。了解這一點可以幫助你理解神經網絡內部究竟發生了什么,從而進行設計和微調以更好地解決你的問題。
還有一件事叫做預處理。你輸入給模型的數據往往要經過這種處理,以便為接下來的訓練做準備。這些預處理步驟主要是通過傳統的計算機視覺技術完成的。例如,如果你沒有足夠的訓練數據,你可以進行一個叫做數據增強的處理。數據增強是指對你訓練數據集中的圖像進行隨機的旋轉、移動、裁剪等,從而創造出“新”圖像。通過執行這些計算機視覺操作,可以極大地增加你的訓練數據量。
結論
本文闡述了為什么深度學習還沒有取代傳統計算機視覺技術,以及后者仍值得學習和傳授。首先,本文將目光放在了深度學習往往需要大量數據才能表現良好這一問題上。有時并不具備大量數據,而傳統計算機視覺在這種情況下可作為一種替代方案。第二,深度學習針對特定的任務偶爾會做過頭。在這些任務中,標準的計算機視覺比起深度學習可以更為高效地解決問題,并且使用更少的代碼。第三,掌握傳統計算機視覺確實可以讓你在深度學習方面做得更好。這是因為你可以更好地理解深度學習的內部狀況,并可執行預處理步驟改善深度學習結果。
總而言之,深度學習只是一種計算機視覺的工具,而不是包治百病的良藥。不要因為流行就一味地使用它。傳統的計算機視覺技術仍然可以大顯身手,了解它們可以為你省去很多的時間和煩惱。
-
計算機視覺
+關注
關注
8文章
1698瀏覽量
45977 -
深度學習
+關注
關注
73文章
5500瀏覽量
121113
發布評論請先 登錄
相關推薦
評論