卷積神經(jīng)網(wǎng)絡(luò)如何進(jìn)行圖像識(shí)別
什么是圖像識(shí)別?為什么要進(jìn)行圖像識(shí)別?
在機(jī)器視覺的概念中,圖像識(shí)別是指軟件具有分辨圖片中的人物、位置、物體、動(dòng)作以及筆跡的能力。計(jì)算機(jī)可以應(yīng)用機(jī)器視覺技巧,結(jié)合人工智能以及攝像機(jī)來進(jìn)行圖像識(shí)別。
對(duì)于人類和動(dòng)物的大腦來說,識(shí)別物體是很簡(jiǎn)單的,但是同樣的任務(wù)對(duì)計(jì)算機(jī)來說卻是很難完成的。當(dāng)我們看到一個(gè)東西像樹、或者汽車、或者我們的朋友,我們?cè)诜直嫠鞘裁粗?,通常不需要下意識(shí)的去研究他。然而,對(duì)于計(jì)算機(jī)來說,辨別任何事物(可能是鐘表、椅子、人或者動(dòng)物)都是非常難的問題,并且找到問題解決方法的代價(jià)很高。
圖像識(shí)別算法一般采用機(jī)器學(xué)習(xí)方法,模擬人腦進(jìn)行識(shí)別的方式。根據(jù)這種方法,我們可以教會(huì)計(jì)算機(jī)分辨圖像中的視覺元素。計(jì)算機(jī)依靠大型數(shù)據(jù)庫,通過對(duì)數(shù)據(jù)呈現(xiàn)的模式進(jìn)行識(shí)別,可以對(duì)圖像進(jìn)行理解,然后形成相關(guān)的標(biāo)簽和類別。
圖像識(shí)別技術(shù)的普及應(yīng)用
圖像識(shí)別技術(shù)有許多應(yīng)用。其中最常見的就是圖像識(shí)別技術(shù)助力的人物照片分類。誰不想更好地根據(jù)視覺主題來管理巨大的照片庫呢?小到特定的物品,大到廣泛的風(fēng)景。
圖片識(shí)別技術(shù)賦予了照片分類應(yīng)用的用戶體驗(yàn)新感受。除了提供照片存儲(chǔ),應(yīng)用程序也可以更進(jìn)一步,為人們提供更好的發(fā)現(xiàn)和搜索功能。有了通過機(jī)器學(xué)習(xí)進(jìn)行自動(dòng)圖像管理的功能,它們就可以做到這一點(diǎn)。在應(yīng)用程序中整合的圖像識(shí)別程序界面可以根據(jù)機(jī)器所鑒定的特征對(duì)圖像進(jìn)行分類,并且根據(jù)主題將照片分組。
圖像識(shí)別的其他應(yīng)用包括存儲(chǔ)照片和視頻網(wǎng)站、互動(dòng)營銷以及創(chuàng)意活動(dòng),社交網(wǎng)絡(luò)的人臉和圖像識(shí)別,以及具有大型視覺圖像庫網(wǎng)站的圖像分類。
圖像識(shí)別是一項(xiàng)艱巨的任務(wù)
圖像識(shí)別不是一項(xiàng)容易的任務(wù),一個(gè)好的方法是將元數(shù)據(jù)應(yīng)用到非結(jié)構(gòu)數(shù)據(jù)上。聘請(qǐng)專家對(duì)音樂和電影庫進(jìn)行人工標(biāo)注或許是一個(gè)令人生畏的艱巨任務(wù),然而有的挑戰(zhàn)幾乎是不可能完成的,諸如教會(huì)無人駕駛汽車的導(dǎo)航系統(tǒng)將過馬路的行人與各種各樣的機(jī)動(dòng)車分辨出來,或者將用戶每天傳到社交媒體上的數(shù)以百萬計(jì)的視頻或照片進(jìn)行標(biāo)注以及分類。
解決這個(gè)問題的一個(gè)方法是使用神經(jīng)網(wǎng)絡(luò)。理論上,我們可以使用傳統(tǒng)神經(jīng)網(wǎng)絡(luò)對(duì)圖像進(jìn)行分析,但是實(shí)際上從計(jì)算角度來看代價(jià)很高。舉個(gè)例子,一個(gè)傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)在處理一張很小的圖片時(shí)(假設(shè)30*30像素)仍然需要50萬個(gè)參數(shù)以及900個(gè)輸入神經(jīng)元。一個(gè)相當(dāng)強(qiáng)大的機(jī)器可以運(yùn)行這個(gè)網(wǎng)絡(luò),但是一旦圖片變大了(例如500*500像素),參數(shù)以及輸入的數(shù)目就會(huì)達(dá)到非常高的數(shù)量級(jí)。
神經(jīng)網(wǎng)絡(luò)應(yīng)用于圖像識(shí)別的另一個(gè)會(huì)出現(xiàn)的問題是:過擬合。簡(jiǎn)單地說,過擬合一般發(fā)生在模型過于貼合訓(xùn)練數(shù)據(jù)的情況下。一般而言,這會(huì)導(dǎo)致參數(shù)增加(進(jìn)一步增加了計(jì)算成本)以及模型對(duì)于新數(shù)據(jù)的結(jié)果在總體表現(xiàn)中有所下降。
卷積神經(jīng)網(wǎng)絡(luò)
卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)模型
根據(jù)神經(jīng)網(wǎng)絡(luò)的構(gòu)建方式,一個(gè)相對(duì)簡(jiǎn)單的改變就可以讓較大的圖像變得更好處理。改變的結(jié)果就是我們所見到的卷積神經(jīng)網(wǎng)絡(luò)(CNNs,ConvNets)。
神經(jīng)網(wǎng)絡(luò)的廣適性是他們的優(yōu)點(diǎn)之一,但是在處理圖像時(shí),這個(gè)優(yōu)點(diǎn)就變成了負(fù)擔(dān)。卷積神經(jīng)網(wǎng)絡(luò)對(duì)此專門進(jìn)行了折衷:如果一個(gè)網(wǎng)絡(luò)專為處理圖像而設(shè)計(jì),有些廣適性需要為更可行的解決方案做出讓步。
對(duì)于任意圖像,像素之間的距離與其相似性有很強(qiáng)的關(guān)系,而卷積神經(jīng)網(wǎng)絡(luò)的設(shè)計(jì)正是利用了這一特點(diǎn)。這意味著,對(duì)于給定圖像,兩個(gè)距離較近的像素相比于距離較遠(yuǎn)的像素更為相似。然而,在普通的神經(jīng)網(wǎng)絡(luò)中,每個(gè)像素都和一個(gè)神經(jīng)元相連。在這種情況下,附加的計(jì)算負(fù)荷使得網(wǎng)絡(luò)不夠精確。
卷積神經(jīng)網(wǎng)絡(luò)通過消除大量類似的不重要的連接解決了這個(gè)問題。技術(shù)上來講,卷積神經(jīng)網(wǎng)絡(luò)通過對(duì)神經(jīng)元之間的連接根據(jù)相似性進(jìn)行過濾,使圖像處理在計(jì)算層面可控。對(duì)于給定層,卷積神經(jīng)網(wǎng)絡(luò)不是把每個(gè)輸入與每個(gè)神經(jīng)元相連,而是專門限制了連接,這樣任意神經(jīng)元只能接受來自前一層的一小部分的輸入(例如3*3或5*5)。因此,每個(gè)神經(jīng)元只需要負(fù)責(zé)處理一張圖像的一個(gè)特定部分。(順便提一下,這基本就是人腦的獨(dú)立皮質(zhì)神經(jīng)元工作的方式。每個(gè)神經(jīng)元只對(duì)完整視野的一小部分進(jìn)行響應(yīng))。
卷積神經(jīng)網(wǎng)絡(luò)的工作過程
上圖從左到右可以看出:
- 網(wǎng)絡(luò)對(duì)輸入的真實(shí)圖像進(jìn)行掃描提取特征。傳遞特征的濾波器由淺色方塊表示。
- 激活圖由堆棧形式排列,每一個(gè)對(duì)應(yīng)所用的濾波器。較大的方形是要進(jìn)行下采樣的塊。
- 激活圖通過下采樣進(jìn)行壓縮。
- 下采樣后的激活圖經(jīng)過濾波器產(chǎn)生新的一組激活圖。
- 第二次下采樣——對(duì)第二組激活圖進(jìn)行壓縮。
- 全連接層為每個(gè)節(jié)點(diǎn)的輸出指定一個(gè)標(biāo)簽。
卷積神經(jīng)網(wǎng)絡(luò)的濾波器如何對(duì)連接根據(jù)相似性進(jìn)行濾波?訣竅在于新加的兩種層結(jié)構(gòu):池化層和卷積層。我們下面將步驟進(jìn)行分解。用為了只完成一件事情而設(shè)計(jì)的網(wǎng)絡(luò)實(shí)例進(jìn)行介紹,即決定一張圖片中是否含有一個(gè)老爺爺。
過程的***步是卷積層,它自己本身就包含幾個(gè)小步驟。
- 首先,我們要將包含老爺爺?shù)膱D片分解為一系列有重疊的3*3的像素塊。
- 在這之后,我們將每個(gè)像素塊輸入一個(gè)簡(jiǎn)單的、單層的神經(jīng)網(wǎng)路,保持權(quán)重不變。這一步將像素塊集轉(zhuǎn)化成一個(gè)矩陣。只要我們保持每塊像素塊都比較小(這里是3*3),處理它們所需的網(wǎng)絡(luò)也可以保持可控以及小型。
- 下一步,輸出值會(huì)被排成矩陣,以數(shù)據(jù)形式表示照片中每個(gè)區(qū)域的內(nèi)容,不同軸分別代表顏色、寬度、和高度通道。對(duì)于每一個(gè)圖像塊,都有一個(gè)3*3*3的表示。(如果要處理視頻,可以加入第四維度代表時(shí)間)。
接下來是池化層。池化層對(duì)這些3或4維的矩陣在空間維度上進(jìn)行下采樣。處理結(jié)果是池化陣列,其中只包含重要部分圖像,并且丟棄了其他部分,這樣一來最小化了計(jì)算成本,同時(shí)也能避免過擬合問題。
經(jīng)過下采樣的矩陣作為全連接層的輸入。由于經(jīng)過了池化和卷積操作,輸入的尺寸被大幅減小,我們現(xiàn)在有了正常網(wǎng)絡(luò)能處理的,同時(shí)能保持?jǐn)?shù)據(jù)最重要特性的東西。***一步的輸出代表系統(tǒng)對(duì)于圖片中有老爺爺這一判斷的確信度。
在實(shí)際應(yīng)用中,卷積神經(jīng)網(wǎng)絡(luò)的工作過程很復(fù)雜,包括大量的隱藏、池化和卷積層。除此之外,真實(shí)的卷積神經(jīng)網(wǎng)絡(luò)一般會(huì)涉及上百甚至上千個(gè)標(biāo)簽,而不只是樣例中的一個(gè)。
如何搭建卷積神經(jīng)網(wǎng)絡(luò)
從頭開始構(gòu)建一個(gè)卷積神經(jīng)網(wǎng)絡(luò)是很費(fèi)時(shí)費(fèi)力的工作。目前已經(jīng)有了許多API能夠?qū)崿F(xiàn)關(guān)于卷積神經(jīng)網(wǎng)絡(luò)的想法,而不需要工程師去了解機(jī)器學(xué)習(xí)的原理或者計(jì)算機(jī)視覺的專業(yè)知識(shí)。
Google云視覺
Google云視覺是使用REST API搭建的視覺識(shí)別API。它基于開源的TensorFlow框架。它可以檢測(cè)到獨(dú)立的人臉或物體,并且包含十分全面的標(biāo)簽集。
IBM Watson 視覺識(shí)別
IBM Watson 視覺識(shí)別是Waston Developer Cloud服務(wù)的一部分,并且自帶大量?jī)?nèi)置類別,但它實(shí)際是為訓(xùn)練基于你提供圖片的自定義類別而打造的。同時(shí),和Google云視覺一樣,它也提供了大量花哨的特性,包括NSFW以及OCR檢測(cè)。
Clarif.ai
Clarif.ai也是一個(gè)使用REST API的初創(chuàng)圖像識(shí)別服務(wù)。關(guān)于Clarif.ai有趣的一點(diǎn)是,它自帶的一系列模塊可以用于修改算法,將其應(yīng)用到特定的主題上,例如食物、旅游和結(jié)婚。
盡管上述的API適合一些一般的應(yīng)用,但***還是針對(duì)特定問題開發(fā)一個(gè)自定義的解決方案。幸運(yùn)的是,大量可用的庫解決了優(yōu)化和計(jì)算方面的問題,開發(fā)人員和數(shù)據(jù)科學(xué)家可以只關(guān)注訓(xùn)練模型,這樣一來他們的工作便輕松了一些。這些庫包括Theano、 Torch、 DeepLearning4J以及TensorFlow,已成功地運(yùn)用在各種各樣的應(yīng)用程序中。
卷積神經(jīng)網(wǎng)絡(luò)的有趣小應(yīng)用:自動(dòng)為無聲電影添加聲音
要為無聲電影添加匹配的聲音,系統(tǒng)必須在這個(gè)任務(wù)中自動(dòng)合成聲音。該系統(tǒng)使用上千個(gè)視頻樣例進(jìn)行訓(xùn)練,視頻帶有鼓棍敲打不同表面產(chǎn)生的不同聲音。一個(gè)深度學(xué)習(xí)模型將視頻的幀和預(yù)錄的聲音建立聯(lián)系,然后選擇能夠***匹配場(chǎng)景的音頻進(jìn)行播放。系統(tǒng)會(huì)通過圖靈測(cè)試進(jìn)行評(píng)估,讓人來決定那個(gè)視頻是合成的,哪個(gè)是真實(shí)的聲音。這是卷積神經(jīng)網(wǎng)絡(luò)和LSTM循環(huán)神經(jīng)網(wǎng)絡(luò)的一個(gè)很潮的應(yīng)用。