揭祕“圖像識別”的工作原理

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

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

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

學會“看”是一項高難度、高成本的任務

着手解決這個難題,我們可以首先將元數據應用於非結構化數據。在之前的文章裏,我們曾描述過在元數據稀缺或元數據不存在的情況下,進行文本內容分類和搜索遇到的一些問題和挑戰。讓專人來對電影和音樂進行人工分類和標記,確實是一項艱鉅的任務。但有些任務不僅艱鉅,甚至是幾乎不可能完成的。比如訓練無人駕駛汽車裏的導航系統,讓其能夠將其他車輛與正在過馬路的行人區分開來;或者是每天對社交網站上用戶上傳的千千萬萬張的照片和視頻進行標記、分類和篩查。

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

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

真正的解決方案——卷積

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

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

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

卷積網絡通過削減許多不必要的連接來解決這一問題。運用科技術語來說就是,“卷積網絡”按照關聯程度篩選不必要的連接,進而使圖像處理過程在計算上更具有可操作性。“卷積網絡”有意地限制了連接,讓一個神經元只接受來自之前圖層的小分段的輸入(假設是3×3或5×5像素),避免了過重的計算負擔。因此,每一個神經元只需要負責處理圖像的一小部分(這與我們人類大腦皮質層的工作原理十分相似——大腦中的每一個神經元只需要迴應整體視覺領域中的一小部分)。

“卷積神經網絡”的內在祕密

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

第一步,“卷積層”。“卷積層”本身實際上也包含了幾個步驟:

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

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

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

說完“卷積層”,下一步是“匯聚層”。

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

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

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

“卷積神經網絡”的實施

重新開始建立一個“卷積神經網絡”是一項非常耗時且昂貴的工作。不過,許多API最近已經實現了——讓組織在沒有內部計算機視覺或機器學習專家的幫助下,完成圖像分析的收集工作。

◾“谷歌雲視覺”是谷歌的視覺識別API,它是以開源式TensorFlow框架爲基礎的,採用了一個REST API。“谷歌雲視覺”包含了一組相當全面的標籤,能夠檢測單個的對象和人臉。除此之外,它還具備一些附加功能,包括OCR和“谷歌圖像搜索”。


◾“IBM沃森視覺識別”技術是“沃森雲開發者”的重要組成部分。它雖然涵蓋了大量的內置類集,但實際上,它是根據你所提供的圖像來進行定製類集的訓練的。與“谷歌雲視覺”一樣,“IBM沃森視覺識別”也具備許多極好的功能,比如OCR和NSFW檢測功能。


◾Clarif.ai是圖像識別服務的“後起之秀”,它採用了一個REST API。值得一提的是,Clarif.ai包含了大量的單元,能夠根據特定的情境定製不同的算法。像婚禮、旅遊甚至食物。


上面的這些API更適用於一些普通的程序,但對於一些特殊的任務,可能還是需要“對症下藥”,制定專門的解決方案。不過值得慶幸的是,許多數據庫可以處理計算和優化方面的工作,這或多或少地減輕了數據科學家和開發人員的壓力,讓他們有更多精力關注於模型訓練。其中,大部分的數據庫,包括TensorFlow,深度學習4J和Theano,都已經得到了廣泛、成功的應用

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