最近斯坦福大學一篇論文《Deep neural networks are more accurate than humans at detecting sexual orientation from facial images》一出,輿論嘩然,該論文研究指出,計算機算法可以從面相判斷一個人的性取向,引發了對隐私、道德、倫理問題的争議。然而回過頭去看,這原本是一個卷積神經網絡應用的技術文章,在人工智能領域,它是圖像識别和機器人視覺的核心部分。
圖像識别技術,是人工智能道路上的一座高峰,如今你可以看到包括個人相冊圖檔管理、刷臉解鎖手機、刷臉上班打卡等廣泛應用。你一定好奇,圖像識别是什麼?如何讓機器了解一張圖甚至一個動态的生物?背後又用到了哪些技術?
今天,我們就從源頭挖一挖圖像識别的概念、技術和應用。
從概念來看,圖像識别是指利用計算機對圖像進行處理、分析和了解,以識别不同模式的目标和對像(人物、場景、位置、物體、動作等)的技術。
而圖像識别算法一般采用機器學習方法,模拟人腦看圖,随後計算機依靠大量的資料,了解圖像,最後建立相關的标簽和類别。整個識别過程的核心,就是神經網絡,經過優勝劣汰,目前已經發展到卷積神經網絡(CNN或ConvNets)。
據不完全統計,科學家們從神經網絡研究到卷積神經網絡,就花了從20世紀60年代末到20世紀80年代末的時間。
我們先來看,人如何辨識物體。人腦的神經細胞(神經元)包括很多彼此相鄰并相連的層,層數越多,網絡越“深”。單個神經元從其他神經元接收信号——可能高達10萬個,當其他神經元被觸發時,它們會對相連的神經元施加興奮或抑制作用,如果我們的第一個神經元輸入加起來達到一定門檻值電壓(threshold voltage)時,它也會被觸發。
也就是說,人不但可以用眼看字,當别人在他背上寫字時,他也認得出這個字來。就好比下圖,人一眼看過去,就能感覺到圖檔中存在某種層級(hierarchy)或者概念結構(conceptual structure),一層一層的:
地面是由草和水泥組成,圖中有一個小孩,小孩在騎彈簧木馬,彈簧木馬在草地上。
關鍵點是,我們知道這是小孩,無論小孩在哪種環境都認識,是以人類不需要重新學習小孩這個概念。
但機器不同,它需要經過多次反複的學習過程。我們再來看,機器如何辨識物體。在人工神經網絡中,信号也在“神經元”之間傳播,但是,神經網絡不是發射電信号,而是為各種神經元配置設定權重。 和權重較小的神經元相比,權重更大的神經元會對下一層神經元産生更多的作用,最後一層将這些權重輸入放在一起,以得出答案。
比如,要想讓一個計算機認出“貓”,需要建立一組資料庫,包含數千張貓的圖像和數千張不含貓的圖像,分别标記“貓”和“不是貓”,然後,将圖像資料提供給神經網絡,最終輸出層将所有資訊——尖耳朵、圓臉、胡須、黑鼻子、長尾巴——放在一起,并給出一個答案:貓。這種訓練技術被稱為監督學習(supervised learning)。
還有一種技術叫做無監督學習(Unsupervised learning),就是使用未标記的資料,計算機必須自己看圖識物,比如從“尖耳朵”辨識這是一隻貓而不是其他動物。然而這些方法容易誤導機器,誤把“尖耳朵”貓識别成狗,或者把浣熊貓誤認為暹羅貓。
但是,如果圖檔是這樣的呢?
一個3歲小孩都能識别出貓的照片,計算機科學家們卻花了多年時間教會計算機看圖識物。關鍵就是自主訓練量。
直到20世紀80年代,來自加拿大多倫多大學的“神經網絡先驅”Geoff Hinton上司的小組,提出了一種訓練神經網絡的方法,叫做卷積神經網絡,意味着它不會陷入局部陷阱。
于是強大的圖形處理單元或GPU出現了,研究人員是以可以在桌上型電腦上運作、操縱和處理圖像,而不用超級計算機了。
同時大資料的加持,讓卷積神經網絡應用越來越廣泛。2007年,美國斯坦福大學計算機科學系副教授李飛飛推出了ImageNet——一個來自網際網路的數百萬帶有标簽圖像的資料庫。ImageNet為神經網絡提供了約1000萬張圖像和1000個不同的标簽。
一直到現在,神經網絡成為機器人視覺的核心工具。盡管現代神經網絡包含許多層次——Google Photos有大約30層——但卷積神經網絡的出現,仍然是前進了一大步。
與傳統神經網絡一樣,卷積神經網絡也是由權重神經元層組成。但是,它們不僅僅是模仿人腦的運作,而是非常恰到好處地從視覺系統本身獲得了靈感。
卷積神經網絡中的每個層,都在圖像上使用過濾器拾取特定的圖案或特征。前幾層檢測到較大的特征,例如下圖斜線,而後面的層拾取更細的細節,并将其組織成諸如“耳朵”的複雜特征。
圖:典型的卷積神經網絡架構
最終輸出層像普通神經網絡一樣是完全連接配接的(也就是說,該層中的所有神經元都連接配接到上一層的所有神經元)。它集合高度具體的特征——其中可能包括貓的狹縫狀瞳孔、杏仁形眼睛、眼睛到鼻子的距離——并産生超精确的分類:貓。
在2012年,谷歌用數千個未标記的YouTube剪輯縮略圖教育訓練了一個卷積神經網絡,看看會出現什麼。毫不奇怪,它變得擅長尋找貓視訊。
卷積神經網絡如何進行圖檔處理?基本上有三個步驟,卷積層、池化層、采用下采樣陣列作為正常全連接配接神經網絡的輸入。
譬如,從剛剛那張“小孩騎馬圖”可以分解出,卷積神經網絡辨識物體的五個步驟:
于是圖檔被分解成了 77 塊同樣大小的小圖塊。
重複這個步驟 77 次,每次判斷一張小圖塊
然而,有一個非常重要的不同:對于每個小圖塊,我們會使用同樣的神經網絡權重,也就是說,如果哪個小圖塊不一樣,我們就認為這個圖塊是“異常”(interesting)的。
我們不想并不想打亂小圖塊的順序,是以就把每個小圖塊按照圖檔上的順序輸入并儲存結果,就像這樣:
第三步的結果是一個數組,這個數組對應着原始圖檔中最異常的部分。但是這個數組依然很大:
為了減小這個數組的大小,我們利用一種叫做最大池化(max pooling)的函數來降采樣(downsample)。但這依然不夠!
讓我們先來看每個 2×2 的方陣數組,并且留下最大的數:
這裡,一旦我們找到組成 2×2 方陣的 4 個輸入中任何異常的部分,但我們就隻保留這一個數。這樣一來我們的數組大小就縮減了,同時最重要的部分也保留住了。
到現在為止,我們已經把一個很大的圖檔縮減到了一個相對較小的數組。
數組就是一串數字而已,是以我們我們可以把這個數組輸入到另外一個神經網絡裡面去。最後的這個神經網絡會決定這個圖檔是否比對。為了區分它和卷積的不同,我們把它稱作“全連接配接”網絡(“Fully Connected” Network)。
是以從開始到結束,我們的五步就像管道一樣被連接配接了起來:
整個過程中,你可以把這些步驟任意組合、堆疊多次,卷積層越多,網絡就越能識别出複雜的特征。當你想要縮小資料大小時,也随時可以調用最大池化函數。而深層卷積網絡(Convolutional Neural Networks)就是使用了多次卷積、最大池化和多個全連接配接層。為了實作卷積神經網絡應用,機器學習需要反複學習測試。
從零開始建構卷積神經網絡,費錢又耗時,業内開放了一些API(Application Programming Interface,應用程式程式設計接口),使開發者無需自己研究機器學習或計算機視覺專業知識。
GoogleCloud Vision是谷歌的視覺識别API,使用REST API。它基于開源的TensorFlow架構。它檢測單個面部和物體,并包含一個相當全面的标簽集。
另外,谷歌圖像搜尋可以說是一個巨大的圖像資料庫,基本上改變了我們處理圖像的方式。

這裡有一張谷歌圖像搜尋的時間表。
IBM沃森視覺識别是沃森開發者雲(Watson Developer Cloud)的一部分,并附帶了一大批内置的類别,但實際上是為根據你提供的圖像來訓練自定義定制類而建構的。它還支援一些很棒的功能,包括NSFW和OCR檢測,如Google Cloud Vision。
Facebook AI Research(FAIR)認為,深度卷積神經網絡讓我們已經看到圖像分類(圖像中有什麼)以及對象檢測(對象在哪裡?)上的巨大進步(見下圖a和b),但這隻是一個開始,目标是設計一種識别和分割圖像中每個對象的技術,如下圖c。
于是Facebook想将機器視覺推向下一個階段——在像素級别上了解圖像和對象。推動的主要新算法是DeepMask 1分段架構以及SharpMask 2細分子產品。它們共同使FAIR的機器視覺系統,能夠檢測并精确地描繪圖像中的每個物體。識别流水線的最後階段使用一個專門的卷積網絡,稱之為MultiPathNet 3,以其包含的對象類型(例如人,狗,羊),為每個對象掩碼标記。
Clarif.ai是一個新興的圖像識别服務,也使用REST API。關于Clarif.ai的一個有趣的方面是它附帶了一些子產品,有助于将其算法定制到特定主題,如食物、旅行和婚禮。
盡管上述API适用于少數一般應用程式,但你可能仍然需要為特定任務開發自定義解決方案。幸運的是,許多庫可以通過處理優化和計算方面來使開發人員和資料科學家的生活變得更加容易,進而使他們專注于訓練模型。有許多庫,包括Theano、Torch、DeepLearning4J和TensorFlow已經成功應用于各種應用。
-END-
原文出處:科技行者
轉載請與作者聯系,同時請務必标明文章原始出處和原文連結及本聲明。