摘要: 深度學習大潮爲何淹沒傳統的計算機視覺技術?聽聽大牛怎麼說~算法
這篇文章是受到論壇中常常出現的問題所創做的:網絡
這明顯是一個很好的問題,深度學習(DL)已經完全改變了計算機視覺(CV)和人工智能。許多曾經看起來不可能解決的問題都解決了,機器得到比人類更好的結果。圖像分類可能就是最好的例子。工具
但深度學習仍然只是解決計算機視覺領域內問題的工具之一。它並非解決該全部問題的萬能藥。在這篇文章中,我想詳細說明這一點。也就是說,我想闡述一下爲何傳統的計算機視覺技術仍然很是有用。性能
我將把這篇文章分紅如下部分:學習
但在我討論這些論點以前,我認爲有必要首先詳細解釋什麼是「傳統的計算機視覺」、深度學習是什麼以及它爲何如此有破壞力。大數據
在進行深度學習以前,若是你有諸如圖像分類之類的任務,這時你須要執行一個稱爲特徵提取的步驟,特徵提取是很是「有趣的」。我這篇文章中將要提到一些傳統的計算機視覺技術(包括諸如邊緣檢測,角點檢測,物體檢測等等)。阿里雲
在使用這些技術時,例如在特徵提取和圖像分類方面,咱們想的是從一類對象(例如椅子,馬等)的圖像中提取儘量多的特徵,並將這些特徵視爲一種「定義」(被稱爲「袋」)的對象。而後,你會在其餘圖像中搜索這些「定義」。若是一個袋子中的大量特徵位於另外一個圖像中,則該圖像被分類爲包含該特定對象(即椅子,馬等)。人工智能
這種圖像分類特徵提取方法的難點在於,你必須選擇在每一個給定圖像中查找哪些特徵。當你嘗試分類的類別數量開始增長,例如10或20時,這會變得很麻煩而且變得幾乎不可能。你是否尋找邊緣?紋理信息?使用不一樣類型的功能能夠更好地描述不一樣類別的對象。若是你選擇使用許多特徵,則必須處理大量參數,全部這些參數都必須由你進行微調。spa
那麼,深度學習介紹了端到端的學習概念,其中(簡而言之)機器被告知要針對每一個特定類別的對象學習要尋找什麼。它爲每一個對象提供了最具描述性和顯着的特徵。換句話說,神經網絡已經被告知發現圖像類別中的底層模式。翻譯
所以,經過端到端的學習,你再也不須要手動決定使用傳統計算機視覺技術來描述你的特徵。有線雜誌這樣說道:
例如,若是你想教一個神經網絡來識別一隻貓,那麼你不要告訴它尋找鬍鬚,耳朵,毛皮和眼睛。你只須要展現成千上萬張貓的照片,最終就能解決問題。若是它將狐狸誤分類爲貓,你不須要重寫代碼,你只須要作的是繼續訓練。
下面的圖片描繪了特徵提取(使用傳統的方法)和端到端學習之間的差別:
因此,這是整篇文章的背景。接下來,讓咱們來看看爲何傳統的計算機視覺仍然是必要的,有益的。
首先,深度學習須要數據,不少不少的數據。上面提到的那些著名的圖像分類模型都是在大數據集上進行訓練的,這些用於訓練的數據集的前三名是:
ImageNet——包含 1000個對象類別/類的 150萬個圖像。
上下文中的Microsoft通用對象(COCO)——250萬個圖像,91個對象類別。
PASCAL VOC數據集 ——500K圖像,20個對象類別。
比通常圖像分類更容易的任務不須要這麼多的數據,但你仍然須要不少數據。若是你沒法得到那麼多的數據,你根本不知道會發生什麼?(確實也有一些技巧能夠提升你的訓練數據量,但這些是人爲的方法)。
沒有充足的數據,訓練出來的模型通常表現都很差,由於一臺機器沒有洞察能力,它不能在沒有看到數據的狀況下歸納它看到的東西。
對於你來講,看到訓練好的模型而且手動調整一些東西太困難了,由於深度學習模型裏面有數百萬個參數,其中每一個參數在訓練過程當中都會被調整。從某種意義上說,深度學習模式是一個黑匣子。
傳統的計算機視覺爲你提供了充分的透明度,使你可以更好地評估和判斷你的解決方案是否能夠在訓練環境以外進行工做。你能夠深刻了解算法中存在的問題,若是有任何不妥,你能夠很容易地弄清楚在哪裏以及須要調整什麼。
這多是我支持傳統計算機視覺技術研究的最佳理由。訓練深度神經網絡須要很長時間,你須要專用硬件(例如,高性能GPU),在很長的時間內訓練最新的最早進的圖像分類模型。
此外,若是你的訓練模型表現不佳,會發生什麼?你必須返回並用不一樣的訓練參數重作整個過程,並且這個過程有時可能重複數百次。
但有時候這些都是沒必要要的,由於有時傳統的CV技術能夠比DL更有效地解決問題,而且代碼行數更少。例如,我曾經參與過一個項目,以檢測經過傳送帶的每一個錫罐是否有紅色的勺子。如今,你能夠訓練一個深度神經網絡來檢測勺子,或者你能夠對紅色上編寫簡單的顏色閾值算法(紅色的某個範圍內的任何像素都是白色的,每一個其餘像素是黑色的),而後計算你有多少白色像素。
瞭解傳統的計算機視覺可能會爲你節省大量時間和減小一些沒必要要的麻煩。
理解傳統的計算機視覺實際上能夠幫助你更好地進行深度學習。
例如,計算機視覺中使用的最多見的神經網絡是卷積神經網絡。但什麼是卷積?它其實是一種普遍使用的圖像處理技術(例如參見Sobel邊緣檢測)。瞭解這能夠幫助你瞭解你的神經網絡作了什麼,所以能夠更好地設計和調整你嘗試解決的任務。
而後還有一件事叫作預處理。這是常常對你提供的模型的數據進行準備以進行訓練。這些預處理步驟主要經過傳統的計算機視覺技術來完成。例如,若是你沒有足夠的訓練數據,則能夠執行稱爲數據增長的任務。數據增長能夠包括對訓練集中的圖像執行隨機旋轉,移位,剪切等,以建立「新」圖像。經過執行這些計算機視覺操做,你能夠大大增長你擁有的訓練數據量。
在這篇文章中,我解釋了爲何深度學習沒有取代傳統的計算機視覺技術,爲何後者仍應該學習。首先,我發現了DL常常須要大量數據才能執行的問題。其次,深度學習對於特定任務來講可能會出現過分擬合現象。在這樣的任務中,標準的計算機視覺能夠比DL更有效地解決問題,而且代碼行數更少。第三,認識傳統的計算機視覺實際上可讓你更好地進行深度學習。這是由於你能夠更好地瞭解DL到底正在作什麼,而且你能夠執行某些預處理步驟來改善DL結果。
簡而言之,深度學習只是計算機視覺的工具,固然不是萬能藥。不要只用它,由於它如今是新潮。傳統的計算機視覺技術仍然很是有用,知道它們能夠爲你節省時間和解決許多麻煩。
本文由阿里云云棲社區組織翻譯。
文章原標題《Why Deep Learning Has Not Superseded Traditional Computer Vision》
做者:Zbigniew
更爲詳細的內容,請查看原文