反思深度學習與傳統計算機視覺的關係

2021-09-19 18:47:36 字數 4060 閱讀 7936

如今,深度學習在眾多領域都有一席之地,尤其是在計算機視覺領域。儘管許多人都為之深深著迷,然而,深網就相當於乙個黑盒子,我們大多數人,甚至是該領域接受過培訓的科學家,都不知道它們究竟是如何運作的。

大量有關深度學習的成功或失敗事例給我們上了寶貴的一課,教會我們正確處理資料。在這篇文章中,我們將深入剖析深度學習的潛力,深度學習與經典計算機視覺的關係,以及深度學習用於關鍵應用程式的潛在危險。

視覺問題的簡單與複雜

首先,我們需要就視覺/計算機視覺問題提出一些看法。原則上它可以這樣理解,人們給定一幅由攝像機拍攝的影象,並允許計算機回答關於與該影象內容的相關問題。

問題的範圍可以從「影象中是否存在三角形」,「影象中是否有人臉」等簡單問題到更為複雜的問題,例如「影象中是否有狗在追逐貓」。儘管這類的問題看起來很相似,對於人類來說甚至有點微不足道,但事實證明,這些問題所隱藏的複雜性存在巨大差異。   

雖然回答諸如「影象中是否有紅圈」或「影象中有多少亮點」之類的問題相對容易,但其他看似簡單的問題如「影象中是否有乙隻貓」,則要複雜得多。「簡單」視覺問題和「複雜」視覺問題之間的區別難以界限。

這一點值得注意,因為對於人類這種高度視覺化的動物來說,上述所有問題都是不足以成為難題,即便是對孩子們來說,回答上述視覺問題也並不困難。然而,處在變革時期的深度學習卻無法回答這些問題。

傳統計算機視覺v.s.深度學習

傳統計算機視覺是廣泛演算法的集合,允許計算機從影象中提取資訊(通常表示為畫素值陣列)。目前,傳統計算機視覺已有多種用途,例如對不同的物件進行去噪,增強和檢測。

一些用途旨在尋找簡單的幾何原語,如邊緣檢測,形態分析,霍夫變換,斑點檢測,角點檢測,各種影象閾值化技術等。還有一些特徵代表技術,如方向梯度直方圖可以作為機器學習分類器的前端,來構建更複雜的檢測器。

與普遍的看法相反,上面討論的工具結合在一起可以造出針對特定物件的檢測器,這種檢測器效能強,效率高。除此之外,人們還可以構建面部檢測器,汽車檢測器,路標檢測器,在精準度和計算複雜性等方面,這些檢測器很可能優於深度學習。

但問題是,每個檢測器都需要由有能力的人從頭開始構建,這一行為低效又昂貴。因此,從歷史上看,表現優良的探測器只適用於那些必須經常被檢測,並且能夠證明前期投資是明智的物件。

這些探測器中有許多是專有的,不向公眾開放,比如人臉檢測器,車牌識別器等等。但是,沒有乙個心智正常的人會花錢編寫狗探測器或分類器,以便從影象中對狗的品種進行分類。於是,深度學習就派上了用場。

尖子生的啟迪

假設你正在教授計算機視覺課程,在課程的前半部分,你要帶領學生們複習大量的專業知識,然後留時間給學生完成任務,也就是收集影象內容並提問。任務一開始很簡單,例如通過詢問影象中是否有圓形或正方形,再到更複雜的任務,例如區分貓和狗。

學生每週都要編寫電腦程式來完成任務,而你負責檢視學生編寫的**,並執行檢視它們的效果如何。

這個學期,一名新生加入了你的班級。他不愛說話,不愛社交,也沒有提過什麼問題。但是,當他提交自己的第乙個任務方案時,你感到有點意外。這名新生編寫的**讓人難以理解,你從來都沒見過這樣的**。看起來他像是用隨機的過濾器對每幅影象進行卷積,然後再用非常奇怪的邏輯來得到最終的答案。

你執行了這段**,效果非常好。你心想,雖然這個解決方案非同尋常,但只要它有效就足夠了。幾周過去了,學生們需要完成的任務難度越來越高,你也從這名新生那裡得到了越來越複雜的**。他的**出色地完成了難度日益增大的任務,但你無法真正理解其中的內容。

期末的時候,你給學生們布置了一項作業,用一組真實的來區分貓和狗。結果,沒有學生能夠在這項任務上達到超過65%的準確率,但是新生編寫的**準確率高達95%,你大吃一驚。你開始在接下來的幾天中深入分析這些高深莫測的**。你給它新的示例,然後進行修改,試著找出影響程式決策的因素,對其進行反向工程。

最終你得出乙個非常令人驚訝的結論:**會檢測出狗的標籤。如果它能檢測到標籤,那麼它就可以判斷物件的下部是否為棕色。如果是,則返回「cat」,否則返回「dog」。如果不能檢測到標籤,那麼它將檢查物件的左側是否比右側更黃。如果是,則返回「dog」,否則返回「cat」。

你邀請這名新生到辦公室,並把研究結果呈給他。你向他詢問,是否認為自己真的解決了問題?在長時間的沉默之後,他終於喃喃自語道,他解決了資料集顯示的任務,但他並不知道狗長什麼樣,也不知道狗和貓之間有什麼不同……

很明顯,他作弊了,因為他解決任務目的和你想要的目的無關。不過,他又沒有作弊,因為他的解決方案確實是有效的。然而,其他學生的表現都不怎麼樣。他們試圖通過問題來解決任務,而不是通過原始資料集。雖然,他們的程式執行得並不好,倒也沒有犯奇怪的錯誤。

深度學習的祝福和詛咒

深度學習是一種技術,它使用一種稱為梯度反向傳播的優化技術來生成「程式」(也稱為「神經網路」),就像上面故事中學者學生編寫的那些程式一樣。這些「程式」和優化技術對世界一無所知,它所關心的只是構建一組轉換和條件,將正確的標籤分配給資料集中的正確影象。

通過向訓練集新增更多的資料,可以消除虛假的偏差,但是,伴隨著數百萬個引數和數千個條件檢查,反向傳播生成的「程式」會非常大,非常複雜,因此它們可以鎖定更細微偏差的組合。任何通過分配正確標籤,來統計優化目標函式的方法都可以使用,不管是否與任務的「語義精神」有關。

這些網路最終能鎖定「語義正確」的先驗嗎?當然可以。但是現在有大量的證據表明,這並不是這些網路分內之事。相反的例子表明,對影象進行非常微小的、無法察覺的修改就可以改變檢測結果。

研究人員對訓練過的資料集的新示例進行了研究,結果表明,原始資料集之外的泛化要比資料集內的泛化弱得多,因此說明,網路所依賴的給定資料集具有特定的低層特性。在某些情況下,修改單個畫素就足以產生乙個新的深度網路分類器。

在某種程度上,深度學習最大的優勢就是自動建立沒有人會想到的特性能力,這同時也是它最大的弱點,因為大多數這些功能至少在語義上看起來,可以說是「可疑的」。

什麼時候有意義,什麼時候沒有意義?

深度學習對於計算機視覺系統來說無疑是乙個有趣的補充。我們現在可以相對容易地「訓練」探測器來探測那些昂貴且不切實際的物體。我們還可以在一定程度上擴充套件這些檢測器,以使用更多的計算能力。

但我們為這種奢侈付出的代價是高昂的:我們不知道深度學習是如何做出判斷,而且我們確實知道,分類的依據很可能與任務的「語義精神」無關。而且,只要輸入資料違反訓練集中的低水平偏差,檢測器就會出現失效。這些失效條件目前尚且不為人知。

因此,在實踐中,深度學習對於那些錯誤不是很嚴重,並且保證輸入不會與訓練資料集有很大差異的應用程式非常有用,這些應用能夠承受5%以內的錯誤率就沒問題,包括影象搜尋、監視、自動化零售,以及幾乎所有不是「關鍵任務」的東西。

具有諷刺意味的是,大多數人認為深度學習是應用領域的一次革命,因為深度學習的決策具有實時性,錯誤具有重大性,甚至會導致致命的結果,如自動駕駛汽車,自主機械人(例如,最近的研究表明,基於深層神經網路的自主駕駛確實容易受到現實生活中的對抗性攻擊)。我只能將這種信念描述為對「不幸」的誤解。

一些人對深度學習在醫學和診斷中的應用寄予厚望。然而,在這方面也有一些令人擔憂的發現,例如,針對乙個機構資料的模型未能很好地檢測另乙個機構資料。這再次印證了一種觀點:這些模型獲取的資料要比許多研究人員所希望的更淺。

資料比我們想象的要淺

出人意料的是,深度學習教會了我們一些關於視覺資料(通常是高維資料)的東西,這個觀點十分有趣:在某種程度上,資料比我們過去認為的要「淺」得多。

似乎有更多的方法來統計地分離標有高階人類類別的視覺化資料集,然後有更多的方法來分離這些「語義正確」的資料集。換句話說,這組低水平的影象特徵比我們想象的更具「統計意義」。這是深度學習的偉大發現。

如何生成「語義上合理」的方法來分離可視資料集模型的問題仍然存在,事實上,這個問題現在似乎比以前更難回答。

結論 深度學習已經成為計算機視覺系統的重要組成部分。但是傳統的計算機視覺並沒有走到那一步,而且,它仍然可以用來建造非常強大的探測器。這些人工製作的檢測器在某些特定的資料集度量上可能無法實現深度學習的高效能,但是可以保證依賴於輸入的「語義相關」特性集。

深度學習提供了統計效能強大的檢測器,而且不需要犧牲特徵工程,不過仍然需要有大量的標記資料、大量gpu,以及深度學習專家。然而,這些強大的檢測器也會遭遇意外的失敗,因為它們的適用範圍無法輕易地描述(或者更確切地說,根本無法描述)。

需要注意的是,上面的討論都與「人工智慧」中的ai無關。我不認為像深度學習與解決人工智慧的問題有任何關係。但我確實認為,將深度學習、特性工程和邏輯推理結合起來,可以在廣泛的自動化空間中實現非常有趣和有用的技術能力。

雷鋒網注:本文編譯自piekniewski's blog

計算機視覺與深度學習公司

深度學習是大資料下最熱門的趨勢之一。上乙個十年是網際網路的時代,下乙個十年將是人工智慧的時代。國內已經產生大量的人工智慧公司,分布在不同的領域。2016年是人工智慧的元年,2017年將迎來 人工智慧 的春天。未來幾年也是人工智慧在金融 醫療 教育等大資料行業以及感知互動領域全面滲透的時期,我們正迎來...

深度學習與計算機視覺六

1.目標檢測演算法簡介 1.1滑窗法 滑窗法的思路及其簡單,需要乙個已經訓練好的分類器,然後把影象按照一定間隔和不同大小分成乙個個窗戶,在這些窗戶上執行分類器,如果得到較高的分類分數,就被認為是檢測到了物體,把每個視窗都用分類器執行一遍之後,再對得到的分數做一些後處理,比如非極大值抑制等,最後就得到...

深度學習與計算機視覺八

1.滑窗法 思路很簡單,首先需要乙個已經訓練好的分類器,然後把影象按照一定間隔和不同的大小分成乙個個視窗,在這些視窗上執行分類器,如果得到較高的分類分數,就認為是檢測到了物體,把每個視窗都用分類器執行一遍之後,再對得到的分數做一些後處理的操作。2.pascal voc map和iou簡介 他是一套用...