1. 程式人生 > >為什麼深度學習不能取代傳統的計算機視覺技術?

為什麼深度學習不能取代傳統的計算機視覺技術?

轉載自:

https://mp.weixin.qq.com/s?__biz=MzI4MDMwMDM3NA==&mid=2247485542&idx=2&sn=6c6e04179aad2e37926ca94a3a58dba4&chksm=ebbbd65fdccc5f499f5fc938472017601e1afcde9b5404b3e94b0fa9a8847d3c00a3dc3b5390&mpshare=1&scene=1&srcid=0316tdVEMPsKKb0oTxuSc5yG#rd

當你輾轉於各種論壇時,相信會經常看到這樣的問題:深度學習是否會取代傳統的計算機視覺?或者說,當深度學習看起來如此有效時,是否還有必要研究傳統的計算機視覺技術?

這是一個非常好的問題。

深度學習已經徹底改變了計算機視覺和人工智慧這一領域,許多曾經看起來不可能解決的問題,深度學習都能夠解決——尤其是在影象識別和分類問題上,機器已經超越人類(短鏈:http://t.cn/Rnzv2JX)。事實上,深度學習也強化了計算機視覺在行業中的重要地位。

但是,深度學習對計算機視覺來說僅僅是一種工具,它不可能成為解決所有問題的萬能藥。所以,在這篇文章中,我想闡述一下為什麼傳統計算機視覺技術仍然很重要,並且值得我們去深入學習和研究。

本文將分為以下三個部分:

  • 深度學習需要大資料

  • 深度學習有時過於深度(殺雞焉用牛刀)

  • 傳統的計算機視覺有助於更好的使用深度學習

首先我需要解釋下什麼是傳統的計算機視覺技術,什麼是深度學習,以及深度學習為什麼如此具有革命性。

背景知識

在深度學習出現之前,如果你想對影象進行分類,首先需要執行一個特徵提取(wiki:http://t.cn/RnzvIJ8)的步驟。特徵是影象中比較小的“有趣的”、具有描述性的或包含資訊的塊。在這篇文章中你將會了解到傳統的計算機視覺技術,包括邊緣檢測(wiki:http://t.cn/RnzvqtE),角點檢測(wiki:http://t.cn/RnzvSVQ),物件檢測(wiki:http://t.cn/RnzvpqH)等等。

就特徵提取和影象分類而言,使用這些技術的思路是:從統一類別物件的影象中(椅子、馬等)提取儘可能多的特徵,並將這些特徵視為物件的一個“定義”(眾所周知的詞袋模型),然後在其他影象中搜索這些“定義”,如果詞袋模型中有相當一部分的特徵都可以在這幅影象中找到,那麼這幅影象被分類為包含該特定物件的類別(椅子,馬等)。

這種特徵提取方法的難點在於,在給定影象中,必須選擇需要查詢哪些特徵。當影象中類別過多時(如10或20個類別),就會變得複雜而難以分類。角點?邊緣?還是紋理特徵?只有使用不同的特徵才可以更好地描述不同類別的物件。如果你在分類時使用很多特徵,就必須對大量的引數進行微調。

深度學習為我們展示了端到端學習( end-to-endlearning)這一概念,簡而言之,針對每個特定類別的物件,機器會自動學習需要查詢什麼特徵。它為每個物件提供了最具描述性和顯著性的特徵。換句話說,神經網路可以探索影象類別中的底層模式。

因此,通過端到端的學習,你不再需要自己動手來決定使用哪種傳統計算機視覺技術來描述這些特徵,機器將會替你做這些工作。《連線》雜誌這樣描述:

“舉個例子來說,如果你想訓練一個[深度]神經網路來識別一隻貓,你不需要告訴它要尋找影象上的鬍鬚、耳朵、毛髮和眼睛。你需要做的就是向它展示成千上萬張貓的照片,這就能解決問題。如果它將狐狸誤認為貓,你也不需要重寫程式碼,只需要繼續訓練即可。”

下圖展示了特徵提取(使用傳統的計算機視覺技術)和端到端學習二者之間的差異:

下面我們將繼續討論,傳統的計算機視覺為什麼仍然有必要且值得我們去學習。

深度學習需要大資料

首先,深度學習需要資料,並且是大量的資料!上面提到的那些經典的影象分類模型都是在大型資料集上進行訓練的。常用於訓練的三種資料集分別是:

  • ImageNet資料集——包含150萬張影象,有1000個類別。

  • MicrosoftCommon Objects in Context(COCO)資料集——包含250萬張影象,有91個類別。

  • PASCAL VOC資料集——包含500萬張影象,有20個類別。

比影象分類簡單的任務或許並不需要如此多資料,但也少不到哪裡去。你必須在你所擁有的資料上進行訓練(有些技巧能夠增強訓練資料,但也都是人為處理的方法)。

在訓練資料範圍之外的資料上,已訓練模型的表現就會很差,這是因為機器並沒有理解這個問題,所以不能在沒有訓練過的資料上進行泛化。

我們很難看到訓練過的模型的內在機制,手動調參也相當困難,因為深度學習模型裡面有數百萬個引數——每個引數在訓練過程中都需要調整。從某種意義上來說,深度學習模型就是一個黑匣子。

傳統的計算機視覺具有充分的透明度,這能夠使你對解決方案能否在訓練環境之外執行做一個更好的評估和判斷。你可以更容易地瞭解演算法中存在的問題,弄清楚什麼地方需要調整。

殺雞焉用牛刀

這也許是我支援繼續研究傳統計算機視覺技術的最佳理由。

訓練一個深度神經網路需要很長時間。如果使用專用硬體(例如高效能GPU)訓練最先進的影象分類模型,也得需要將近一天的時間;如果使用標準膝上型電腦進行訓練,甚至需要一週或者更長的時間。

此外,如果你的訓練模型表現不佳應該怎麼辦?你必須重來一遍,使用不同的訓練引數重新進行訓練,而且這個過程有時候還得重複數百次。

並不是所有問題需要使用深度學習。在某些問題上,傳統的計算機視覺技術的表現比深度學習更好,而且需要的程式碼更少。

例如,我曾經參與過一個專案——檢測每個通過傳送帶的錫罐中是否有紅色的勺子。你可以訓練一個深度神經網路來檢測勺子並完成上述過程,但這比較耗費時間;或者你也可以編寫一個簡單的關於紅色的顏色閾值演算法(在紅色範圍內的任何畫素都標記成白色,其他畫素則都是黑色),然後計算有多少白色畫素,這樣就可以快速檢測勺子。第二個方法很簡單,並且能在一個小時以內完成!

瞭解傳統的計算機視覺技術會為你節省大量時間以及減少不必要的麻煩。

理解傳統的計算機視覺方法可以提升你的深度學習技巧

理解傳統的計算機視覺實際上真的有助於你更好的使用深度學習。例如,計算機視覺中最常見的神經網路是卷積神經網路。但是什麼是卷積?它實際上是一種廣泛使用的影象處理技術(例如Sobel邊緣檢測)。瞭解卷積有助於瞭解神經網路的內在機制,在解決問題時,它可以幫助你設計和調整模型。

其次是預處理,這通常是針對訓練資料而言。預處理這一步驟用到的主要是傳統的計算機視覺技術。例如,如果你沒有足夠多的訓練資料,則可以採用資料增強的方法來處理:通過對原來的影象進行隨機旋轉、移位、剪下的方式來建立“新”的影象。這些操作可以大大增加訓練資料的數量。

結論

在這篇文章中,我解釋了為什麼深度學習仍然沒有取代傳統的計算機視覺技術,以及傳統的計算機視覺技術為何值得我們去學習和研究。

首先,深度學習通常需要大量的資料才能達到較好的效能,但是有時候這是不可能實現的。在這些情況下,傳統的計算機視覺技術就可以成為替代方案。

其次,對於某些特定的任務來說,有時候深度學習過於深度。在這種情況下,標準的計算機視覺技術可以更有效地解決問題,並且使用較少的程式碼。

第三,瞭解傳統的計算機視覺技術實際上可以讓你更好地使用深度學習。這是因為通過傳統的計算機視覺,你可以更好地瞭解深度學習的內在機制,並且可以執行某些預處理步驟來提升深度學習的效能。

簡而言之,深度學習只是計算機視覺的一種工具,並不是萬能藥。不要因為深度學習現在較為流行就只使用深度學習。傳統的計算機視覺技術仍然非常重要,它可以為你節省很多時間,並減少許多不必要的麻煩。

對於這個觀點,你怎麼看呢?

原文地址:

http://zbigatron.com/has-deep-learning-superseded-traditional-computer-vision-techniques/