深度學習與傳統圖像識別
概述
傳統方法中特征提取主要依賴人工設計的提取器,需要有專業知識及復雜的調參過程,同時每個方法都是針對具體應用,泛化能力及魯棒性較差。
深度學習主要是數據驅動進行特征提取,根據大量樣本的學習能夠得到深層的、數據集特定的特征表示,其對數據集的表達更高效和准確,所提取的抽象特征魯棒性更強,泛化能力更好,並且可以是端到端的。缺點是樣本集影響較大,算力要求較高。
(1)大量冗余的proposal生成,導致學習效率低下,容易在分類出現大量的假正樣本。(2)特征描述子都是基於低級特征進行手工設計的,難以捕捉高級語義特征和復雜內容。(3)檢測的每個步驟是獨立的,缺乏一種全局的優化方案進行控制。
隨着卷積神經網絡,計算機能力及計算機視覺等方向的發展,基於深度學習的圖像識別已經在精度和實時性方面,遠遠趕超傳統圖像。
兩種都有優點,都有弊端,深度學習做識別,精度高,不然大佬們還再搞傳統的一些辦法,特征提取的過程是自學習的,泛化能力比較強,但是需要大量的訓練標注數據,對硬件要求高。傳統方法實現相對簡單,對硬件要求低,但是往往精度差,泛化能力弱。個人認為兩手抓,不要什么都是深度學習,摒棄傳統辦法,在產品中往往兩種方式結合的較多。
深度學習也不是萬能的,具體效果還是要根據具體情況。深度學習的優勢在於從萬千數據中自動找尋特征。對於零件質檢領域,由於背景固定且簡單,傳統方法通過邊緣檢測,梯度直方圖等方法也能實現很不錯的效果。但是對於諸如識別一只貓這種圖像識別任務,傳統方法很難找到一種魯棒性特征去恰當的描述貓,這時候深度學習就可以上場了。
深度學習能夠解決更多高級的、語義級別的、只能抽象描述的圖像識別、檢測、風格、創造性的問題。優點是效果優異、泛化更好、可端到端訓練、無需復雜調參,仍處於蓬勃發展的時期;但算力、數據消耗大,可解釋性目前很弱。
傳統圖像算法能解決某些特定場景的、可人工定義、設計、理解的圖像任務。特定場景效果好,但普遍泛化性弱,可解釋性更強,性能一般更好,但調參依賴專業知識和經驗。目前在某些極端低算力場景、特定海量處理場景仍有一定應用價值。
總體來講,一種是人工認知驅動的方法,一種是數據驅動的方法。應用的話看場景,只不過深度學習一直在不斷拓展其應用的場景,傳統方法在某些時候扔具有一定價值。
1. 簡單與復雜
首先,需要就視覺/計算機視覺問題提出一些看法。原則上它可以這樣理解,人們給定一幅由攝像機拍攝的圖像,並允許計算機回答關於與該圖像內容的相關問題。
問題的范圍可以從“圖像中是否存在三角形”,“圖像中是否有人臉”等簡單問題到更為復雜的問題,例如“圖像中是否有狗在追逐貓”。盡管這類的問題看起來很相似,對於人類來說甚至有點微不足道,但事實證明,這些問題所隱藏的復雜性存在巨大差異。
雖然回答諸如“圖像中是否有紅圈”或“圖像中有多少亮點”之類的問題相對容易,但其看似簡單的問題如“圖像中是否有一只貓”,則要復雜得多。“簡單”視覺問題和“復雜”視覺問題之間的區別難以界限。
這一點值得注意,因為對於人類這種高度視覺化的動物來說,上述所有問題都是不足以成為難題,即便是對孩子們來說,回答上述視覺問題也並不困難。然而,處在變革時期的深度學習卻無法回答這些問題。
2. 傳統計算機視覺V.S.深度學習
傳統計算機視覺是廣泛算法的集合,允許計算機從圖像中提取信息(通常表示為像素值數組)。目前,傳統計算機視覺已有多種用途,例如對不同的對象進行去噪,增強和檢測。
一些用途旨在尋找簡單的幾何原語,如邊緣檢測,形態分析,霍夫變換,斑點檢測,角點檢測,各種圖像閾值化技術等。還有一些特征代表技術,如方向梯度直方圖可以作為機器學習分類器的前端,來構建更復雜的檢測。
與普遍的看法相反,上面討論的工具結合在一起可以造出針對特定對象的檢測,這種檢測性能強,效率高。除此之外,人們還可以構建面部檢測,汽車檢測,路標檢測,在精准度和計算復雜性等方面,這些檢測很可能優於深度學習。
但問題是,每個檢測都需要由有能力的人從頭開始構建,這一行為低效又昂貴。因此,從歷史上看,表現優良的探測器只適用於那些必須經常被檢測,並且能夠證明前期投資是明智的對象。
這些探測器中有許多是專有的,不向公眾開放,比如人臉檢測,車牌識別器等等。但是,沒有一個心智正常的人會花錢編寫狗探測器或分類器,以便從圖像中對狗的品種進行分類。於是,深度學習就派上了用場。
3. 優秀學生的啟迪
假設正在教授計算機視覺課程,在課程的前半部分,要帶領學生們復習大量的專業知識,然后留時間給學生完成任務,也就是收集圖像內容並提問。任務一開始很簡單,例如通過詢問圖像中是否有圓形或正方形,再到更復雜的任務,例如區分貓和狗。
學生每周都要編寫計算機程序來完成任務,而負責查看學生編寫的代碼,並運行查看它們的效果如何。
一名新生加入了班級。不愛說話,不愛社交,也沒有提過什么問題。但是,當提交自己的第一個任務方案時,感到有點意外。這名新生編寫的代碼讓人難以理解,從來都沒見過這樣的代碼。看起來像是用隨機的過濾器對每幅圖像進行卷積,然后再用非常奇怪的邏輯來得到最終的答案。
運行了這段代碼,效果非常好。心想,雖然這個解決方案非同尋常,但只要它有效就足夠了。幾周過去了,學生們需要完成的任務難度越來越高,也從這名新生那里得到了越來越復雜的代碼。代碼出色地完成了難度日益增大的任務,但無法真正理解其中的內容。
期末的時候,給學生們布置了一項作業,用一組真實的圖片來區分貓和狗。結果,沒有學生能夠在這項任務上達到超過65%的准確率,但是新生編寫的代碼准確率高達95%,大吃一驚。開始在接下來的幾天中深入分析這些高深莫測的代碼。給它新的示例,然后進行修改,試着找出影響程序決策的因素,對其進行反向工程。
最終得出一個非常令人驚訝的結論:代碼會檢測出狗的標簽。如果它能檢測到標簽,那么它就可以判斷對象的下部是否為棕色。如果是,則返回“cat”,否則返回“dog”。如果不能檢測到標簽,那么它將檢查對象的左側是否比右側更黃。如果是,則返回“dog”,否則返回“cat”。
邀請這名新生到辦公室,並把研究結果呈給他。詢問是否認為自己真的解決了問題?在長時間的沉默之后,終於喃喃自語道,解決了數據集顯示的任務,但並不知道狗長什么樣,也不知道狗和貓之間有什么不同……
很明顯,作弊了,因為解決任務目的和想要的目的無關。不過,又沒有作弊,因為解決方案確實是有效的。然而,其學生的表現都不怎么樣。試圖通過問題來解決任務,而不是通過原始數據集。雖然程序運行得並不好,倒也沒有犯奇怪的錯誤。
4. 深度學習的祝福和詛咒
深度學習是一種技術,它使用一種稱為梯度反向傳播的優化技術來生成“程序”(也稱為“神經網絡”),就像上面故事中學者學生編寫的那些程序一樣。這些“程序”和優化技術對世界一無所知,它所關心的只是構建一組轉換和條件,將正確的標簽分配給數據集中的正確圖像。
通過向訓練集添加更多的數據,可以消除虛假的偏差,但是,伴隨着數百萬個參數和數千個條件檢查,反向傳播生成的“程序”會非常大,非常復雜,因此它們可以鎖定更細微偏差的組合。任何通過分配正確標簽,來統計優化目標函數的方法都可以使用,不管是否與任務的“語義精神”有關。
這些網絡最終能鎖定“語義正確”的先驗嗎?當然可以。但是現在有大量的證據表明,這並不是這些網絡分內之事。相反的例子表明,對圖像進行非常微小的、無法察覺的修改就可以改變檢測結果。
研究人員對訓練過的數據集的新示例進行了研究,結果表明,原始數據集之外的泛化要比數據集內的泛化弱得多,因此說明,網絡所依賴的給定數據集具有特定的低層特性。在某些情況下,修改單個像素就足以產生一個新的深度網絡分類器。
在某種程度上,深度學習最大的優勢就是自動創建沒有人會想到的特性能力,這同時也是它最大的弱點,因為大多數這些功能至少在語義上看起來,可以說是“可疑的”。
5. 什么時候有意義,什么時候沒有意義?
深度學習對於計算機視覺系統來說無疑是一個有趣的補充。現在可以相對容易地“訓練”探測器來探測那些昂貴且不切實際的物體。還可以在一定程度上擴展這些檢測,以使用更多的計算能力。
但為這種奢侈付出的代價是高昂的:不知道深度學習是如何做出判斷,而且確實知道,分類的依據很可能與任務的“語義精神”無關。而且,只要輸入數據違反訓練集中的低水平偏差,檢測就會出現失效。這些失效條件目前尚且不為人知。
因此,在實踐中,深度學習對於那些錯誤不是很嚴重,並且保證輸入不會與訓練數據集有很大差異的應用程序非常有用,這些應用能夠承受5%以內的錯誤率就沒問題,包括圖像搜索、監視、自動化零售,以及幾乎所有不是“關鍵任務”的東西。
具有諷刺意味的是,大多數人認為深度學習是應用領域的一次革命,因為深度學習的決策具有實時性,錯誤具有重大性,甚至會導致致命的結果,如自動駕駛汽車,自主機器人(例如,最近的研究表明,基於深層神經網絡的自主駕駛確實容易受到現實生活中的對抗性攻擊)。只能將這種信念描述為對“不幸”的誤解。
一些人對深度學習在醫學和診斷中的應用寄予厚望。然而,在這方面也有一些令人擔憂的發現,例如,針對一個機構數據的模型未能很好地檢測另一個機構數據。這再次印證了一種觀點:這些模型獲取的數據要比許多研究人員所希望的更淺。
6. 數據比想象的要淺
出人意料的是,深度學習教會了一些關於視覺數據(通常是高維數據)的東西,這個觀點十分有趣:在某種程度上,數據比過去認為的要“淺”得多。
似乎有更多的方法來統計地分離標有高級人類類別的可視化數據集,然后有更多的方法來分離這些“語義正確”的數據集。換句話說,這組低水平的圖像特征比想象的更具“統計意義”。這是深度學習的偉大發現。
如何生成“語義上合理”的方法來分離可視數據集模型的問題仍然存在,事實上,這個問題現在似乎比以前更難回答。
7. 結論
深度學習已經成為計算機視覺系統的重要組成部分。但是傳統的計算機視覺並沒有走到那一步,而且,它仍然可以用來建造非常強大的探測器。這些人工制作的檢測在某些特定的數據集度量上可能無法實現深度學習的高性能,但是可以保證依賴於輸入的“語義相關”特性集。
深度學習提供了統計性能強大的檢測,而且不需要犧牲特征工程,不過仍然需要有大量的標記數據、大量GPU,以及深度學習專家。然而,這些強大的檢測也會遭遇意外的失敗,因為它們的適用范圍無法輕易地描述(或者更確切地說,根本無法描述)。
需要注意的是,上面的討論都與“人工智能”中的AI無關。不認為像深度學習與解決人工智能的問題有任何關系。但確實認為,將深度學習、特性工程和邏輯推理結合起來,可以在廣泛的自動化空間中實現非常有趣和有用的技術能力。