【圖像識別】告訴你機器如何看見這個世界

原標題:揭祕圖像識別,告訴你機器如何“看見”這個世界
看懂一個東西對人類來說很容易,但是對機器來說卻是很難的,這個時候圖像識別技術就應運而生。今天我們就爲大家揭祕圖像識別技術原理,告訴你機器如何利用卷積神經網絡進行圖像識別,從而“看見”這個世界。

什麼是圖像識別技術

對人類來說,描述我們眼睛所看到的事物,即視覺世界,看起來太微不足道了,以至於我們根本沒有意識到那正是我們時時刻刻在做的事情。在看到某件事物時,不管是汽車、大樹,還是一個人,我們通常都不需要過多的思考就能立刻叫出名字。然而對於一臺計算機來說,區分識別“人類對象”(比如:在小狗、椅子或是鬧鐘這些“非人類對象”中識別出“奶奶”這一“人類對象”)卻是相當困難的。

能解決這一問題可以帶來非常高的收益。圖像識別技術,更寬泛地說是“計算機視覺”技術,是許多新興技術的基礎。從無人駕駛汽車到面部識別軟件,從那些看似簡單但十分重要的發展成果——從能夠監測流水線缺陷和違規的“智能工廠”,到保險公司用來分類和處理索賠照片的自動化軟件。這些新興科技是都離不開圖像識別技術的。

在接下來的內容裏,我們將要探究圖像識別技術所面臨的問題和挑戰,探尋圖像識別技術原理並分析科學家是如何用一種特殊的神經網絡來解決圖像識別技術這一挑戰的。

圖像識別是一項高難度、高成本的技術

着手解決圖像識別技術難題,我們讓專人來對電影和音樂進行人工圖像識別分類和圖像識別標記,但這是一項艱鉅的任務。有些任務不僅艱鉅,甚至是不可能完成的。比如訓練無人駕駛汽車裏的導航系統,讓其能夠將其他車輛與正在過馬路的行人區分開來;或者是每天對社交網站上用戶上傳的千千萬萬張的照片和視頻進行標記、分類和篩查,這些是圖像識別技術的基礎。唯一能夠解決這一圖像識別技術難題的方法就是神經網絡。

理論上我們可以用常規的神經網絡來進行圖像識別,但在實際操作中,從計算角度看,使用這種方法的成本非常高。舉例來說,一個常規的神經網絡,就算是處理一個非常小的圖像,假設是3030像素的圖像,仍需要900個數據輸入和五十多萬個參數。這樣的處理加工對一個相對強大的機器來說還是可行的;但是,如果需要處理更大的圖像,假設是500500像素的圖像,那麼機器所需的數據輸入和參數數量就會大大增加,增加到難以想象的地步。

除此之外,將神經網絡用於圖像識別還可能會導致另一個問題——過度擬合。簡單來說,過度擬合指的是圖像識別系統訓練的數據過於接近圖像識別定製的數據模型的現象。這不僅會在大體上導致圖像識別技術參數數量的增加(也就是進一步計算支出的增加),還將削弱圖像識別技術在面臨新數據時其他常規功能的正常發揮。

真正的解決方案——卷積神經網絡

幸運的是,我們發現,只要在神經網絡的結構方式上做一個小小的改變,就能使大型圖像識別任務的處理更具可操作性。改造後的神經網絡被稱作卷積神經網絡,也叫CNNs或ConvNets。

神經網絡的優勢之一在於它的普遍適應性。但是,就像我們剛剛看到的,神經網絡的這一優勢在圖像識別技術上實際上是一種不利因素。而卷積神經網絡能夠對此作出一種有意識的權衡——爲了得到一個更可行的解決方案,我們犧牲了神經網絡的其他普遍性功能,設計出了一個專門用於圖像識別技術的神經網絡。

在任何一張圖像中,接近度與相似度的關聯性都是非常強的,卷積神經網絡就是利用了這一原理。具體而言就是,在一張圖像中的兩個相鄰像素,比圖像中兩個分開的像素更具有關聯性。但是,在一個常規的神經網絡中,每個像素都被連接到了單獨的神經元。這樣一來,計算負擔自然加重了,而加重的計算負擔實際上是在削弱神經網絡的準確程度。

卷積神經網絡通過削減許多不必要的連接來解決圖像識別技術中的這一問題。運用圖像識別技術中的術語來說就是,卷積神經網絡按照關聯程度篩選不必要的連接,進而使圖像識別過程在計算上更具有可操作性。卷積神經網絡有意地限制了圖像識別時候的連接,讓一個神經元只接受來自之前圖層的小分段的輸入(假設是3×3或5×5像素),避免了過重的計算負擔。因此,每一個神經元只需要負責處理圖像的一小部分。

卷積神經網絡的內在祕密
卷積神經網絡究竟是如何篩選出不必要的圖像連接的呢?祕密就在於兩個新添的新型圖層——卷積層和匯聚層。我們接下來將會通過一個實操案例:讓卷積神經網絡判斷照片中是否有“奶奶”這一對象,把卷積神經網絡的圖像識別操作進行分解,逐一描述。
第一步,卷積層
卷積層本身實際上也包含了幾個步驟:

1.首先,我們會將奶奶的照片分解成一些3×3像素的、重疊着的拼接圖塊。

2.然後,我們把每一個圖塊運行於一個簡單的、單層的卷積神經網絡,保持權衡不變。這一操作會使我們的拼接圖塊變成一個圖組。由於我們一開始就將原始圖像分解成了小的圖像(在這個案例中,我們是將其分解成了3×3像素的圖像),所以,用於圖像識別的卷積神經網絡也是比較好操作的。

3.接下來,我們將會把這些輸出值排列在圖組中,用數字表示照片中各個區域的內容,數軸分別代表高度、寬度和顏色。那麼,我們就得到了每一個圖塊的三維數值表達。(如果我們討論的不是奶奶的照片,而是視頻,那麼我們就會得到一個四維的數值表達了。)

第二步,匯聚層
匯聚層是將這個三維(或是四維)圖組的空間維度與採樣函數結合起來,輸出一個僅包含了圖像中相對重要的部分的聯合數組。這一聯合數組不僅能使卷積神經網絡計算負擔最小化,還能有效避免過度擬合的問題。

最後,我們會把從匯聚層中得出的採樣數組作爲常規的、全方位連接的卷積神經網絡來使用。通過卷積層和匯聚層,我們大幅度地縮減了輸入的數量,因此,我們這時候得到的數組大小是一個正常普通網絡完全能夠處理的,不僅如此,這一數組還能保留原始數據中最重要的部分。這最後一步的輸出結果將最終顯示出系統有多少把握作出“照片中有奶奶”的判斷。

以上只是對卷積神經網絡工作過程的簡單描述,現實中,其工作過程是更加複雜的。另外,跟我們這裏的案例不同,現實中的卷積神經網絡處理的內容一般包含了上百個,甚至上千個標籤。

卷積神經網絡的實施
重新開始建立一個卷積神經網絡是一項非常耗時且昂貴的工作。不過,許多API已經實現了在沒有內部計算機視覺或機器學習專家的幫助下,完成圖像識別的收集工作。
谷歌雲視覺是谷歌的視覺識別API,它是以開源式TensorFlow框架爲基礎的,採用了一個REST API。谷歌雲視覺包含了一組相當全面的標籤,能夠檢測單個的對象和人臉。
IBM沃森視覺識別技術是沃森雲開發者的重要組成部分。它雖然涵蓋了大量的內置類集,但實際上,它是根據你所提供的圖像來進行定製類集的訓練的。
Clarif.ai是圖像識別服務的後起之秀,它採用了一個REST API。值得一提的是,Clarif.ai包含了大量的單元,能夠根據特定的情境定製不同的圖像識別算法。
上面的這些API更適用於一些普通的圖像識別技術,但對於一些特殊的圖像識別任務,可能還是需要對症下藥,制定專門的解決方案。不過值得慶幸的是,有許多數據庫可以處理卷積神經網絡計算和優化方面的工作,這或多或少地減輕了數據科學家和開發人員的壓力,讓他們有更多精力關注於圖像識別模型訓練。其中,大部分的數據庫,包括TensorFlow,深度學習4J和Theano,都已經得到了廣泛、成功的應用。更多關於圖像識別技術詳見商業新知-圖像識別

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章