0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

CNN是怎么幫助進行圖像分類的

zhKF_jqr_AI ? 來源:未知 ? 作者:李倩 ? 2018-06-30 11:07 ? 次閱讀

編者按:最近小編在搜集CNN卷積計算方面的資料,希望能出一份清晰明了的圖文列表,但即便是在CNN介紹已經(jīng)泛濫的今天,一篇好的、簡單易懂的博客文章都是那么稀缺。今天,小編就先編譯加州大學(xué)洛杉磯分校學(xué)生Adit Deshpande的幾篇入門文章,希望能給新手讀者帶來幫助。

簡介

單從字面上看,卷積神經(jīng)網(wǎng)絡(luò)這個詞聽起來就像是生物學(xué)和數(shù)學(xué)的詭異組合,里面可能還摻了一點計算機科學(xué)的意味,但這種神經(jīng)網(wǎng)絡(luò)一直在為計算機視覺領(lǐng)域默默貢獻著最具影響力的創(chuàng)新。2012年是神經(jīng)網(wǎng)絡(luò)蓬勃發(fā)展的第一年,Alex Krizhevsky利用它們在當(dāng)年的ImageNet競賽中贏得了勝利,把分類錯誤率從原來的26%降低到了15%,這在當(dāng)時簡直是驚天之舉。

從那之后,許多公司開始把深度學(xué)習(xí)納入自家的核心產(chǎn)品中:Facebook把神經(jīng)網(wǎng)絡(luò)用于自動標(biāo)記算法,Google把神經(jīng)網(wǎng)絡(luò)用于圖像搜索,亞馬遜把它們用于商品推薦Pinterest把它們用于主頁的個性化,而Instagram則開始用神經(jīng)網(wǎng)絡(luò)改進搜索架構(gòu)。

而在這些神經(jīng)網(wǎng)絡(luò)中,應(yīng)用最為廣泛的就是今天我們要聊的CNN。以圖像處理為例,我們來看看CNN是怎么幫助進行圖像分類的。

輸入和輸出

圖像分類指的是輸入一張圖像后,神經(jīng)網(wǎng)絡(luò)輸出一個關(guān)于這個圖像的類,或是圖像屬于某類的概率的任務(wù)。對于人類而言,這是我們從出生那一刻起就開始不斷學(xué)習(xí)的技能之一,而且隨著年齡的增長,人們處理這種任務(wù)會越來越輕松自然。

無需二次思考,我們就能快速無縫識別身處的環(huán)境和周圍的所有物體。當(dāng)看到一幅圖或是觀察周圍環(huán)境時,我們幾乎是下意識地調(diào)用以往學(xué)習(xí)的所有知識,為場景中的各個對象一一打上標(biāo)簽

我們看到的 vs. 計算機看到的

但計算機不同。我們把圖像輸入計算機后,它“看”到的其實是一組像素值。這些像素值的數(shù)量會根據(jù)圖像的大小和分辨率發(fā)生改變,如果輸入圖像是一張JPG格式的彩色圖像,它的像素為480×480,那么計算機得到的數(shù)組就是480×480×3(這里3表示RGB值)。

這個數(shù)組里的每一個值都介于0—225之間,描述了對應(yīng)像素的強度。雖然這些值對分類任務(wù)來說毫無意義,但它們是計算機可以用的唯一輸入。這就帶出了另一個更直白的圖像分類任務(wù)描述:它其實是把像素值數(shù)組作為輸入,然后輸出圖像屬于某一類的具體概率,如80%(貓)、15%(狗)、5%(鳥)。

我們想讓計算機做什么

既然知道了理想的輸入和輸出,那我們面臨的下一個問題就是如何讓計算機解決這個任務(wù)。我們希望它能區(qū)分所有圖像,然后找出狗之所以是狗、貓之所以是貓的獨特特征。這是人類的本能反應(yīng)。當(dāng)我們看到包含狗的圖像時,如果圖像里出現(xiàn)了一些明確的識別特征,如狗爪子和四條小短腿,我們可以迅速將其歸類。

同樣的,計算機分辨貓狗的做法是觀察邊緣、曲線等低層次特征,然后把這些放進一系列卷積層中進一步提取更多抽象概念。當(dāng)然,這只是CNN進行圖像分類的一般概述,在下一節(jié)中我們會具體說明。

在開始正題前,我們先來探討一下“卷積神經(jīng)網(wǎng)絡(luò)”這個詞。當(dāng)你第一次接觸這個術(shù)語時,你會不會覺得這應(yīng)該是神經(jīng)科學(xué)或生物學(xué)方面的東西?其實這種感覺是正確的,CNN是生物學(xué)家對動物的視覺研究成果的一個衍生物。

視覺皮層中存在一塊對視野特定區(qū)域尤為敏感的細胞。1962年,Hubel和Wiesel對視覺神經(jīng)細胞做了一個實驗,實驗表結(jié)果明,只有在存在特定方向邊緣的情況下,大腦中的一些神經(jīng)細胞個體才會響應(yīng)。他們發(fā)現(xiàn)所有這些神經(jīng)細胞都位于一個柱狀結(jié)構(gòu)中,而且能產(chǎn)生視覺感知。這種在特定任務(wù)的系統(tǒng)內(nèi)部尋找特定組件的思想正是如今許多計算機任務(wù)的核心,它也是CNN背后的基礎(chǔ)。

讓我們回到CNN,簡而言之,它的一般流程就是:輸入圖像——卷積層、非線性層、池化層(下采樣)、完全連接層——輸出分類/概率。那么這些層分別都做了什么呢?

第一層 - 數(shù)學(xué)視角

CNN的第一層是一個卷積層。我會假裝你還記得神經(jīng)網(wǎng)絡(luò)的輸入和輸出分別是什么,所以在這里我們假設(shè)輸入圖像是一張像素為32×32的彩色JPG,相應(yīng)的,CNN的輸入就是一個32×32×3的像素值數(shù)組。那么作為第一層的卷積層究竟有什么用?如下圖所示,我們可以把卷積層想象成一個發(fā)光的手電筒,它從左上角開始檢查,光照范圍是5×5?,F(xiàn)在,想象一下用手電筒一塊塊檢查完所有區(qū)域。

機器學(xué)習(xí)術(shù)語中,這個手電筒是filter(neuron/kernel),每次照亮的這塊5×5的區(qū)域是receptive field(感受野)。filter也是一個數(shù)組(權(quán)重/參數(shù)),而且深度必須和輸入圖像深度一致,這樣才能確保計算。在我們的例子中,filter的具體尺寸就是5×5×3。

隨著手電筒從左上角開始逐漸照亮周圍區(qū)域,圖像正在卷積,這時filter的數(shù)組會與原圖像像素值數(shù)組相乘(計算點積),在我們的例子中,它需要進行75次乘法運算,然后把這些乘積相加得到一個值。檢查完第一塊5×5后,讓我們把手電筒往右挪一個像素繼續(xù)計算點積,之后繼續(xù)往右挪一個像素,以此類推。

已知原輸入是32×32×3,filter尺寸5×5×3,當(dāng)手電筒掃完整片區(qū)域后,最后我們在隱藏層獲得的是一個28×28×1的數(shù)組(窗口逐格挪動,邊界少2;3個顏色通道合并成1個)。它也被稱為activation map(加激活函數(shù))或feature map。

注:如果這里我們用了兩個5×5×3的filter,那最后的映射結(jié)果會是28×28×2。filter越多,空間維度保留地越好。

第一層 - 高層次的視角

知道了具體的數(shù)學(xué)計算步驟后,我們似乎還是不清楚卷積層的作用,所以這里我們從高層次的視角再看一遍。

每個filter都可以被看作是特征標(biāo)識符( feature identifiers),這里的特征指的是直線邊緣、曲線、黑白等,它們是每個圖像的都具備的最簡單的特征。假設(shè)我們有一個7×7×3的能檢測曲線的filter,它會給帶有曲線像素結(jié)構(gòu)的區(qū)域更高數(shù)值。(請忽略filter的深度,只把它看成一個數(shù)組)

上圖就是這個filter的可視化,它在曲線區(qū)域賦予了更高的權(quán)重,因此當(dāng)圖像感受野和它相乘時,相應(yīng)區(qū)域的值會很高。

假設(shè)輸入圖像是一只小老鼠的簡筆畫。當(dāng)filter從左上角開始卷積時,窗口先接觸到老鼠尾部。請記住一點,我們必須計算filter與圖像原始像素數(shù)組和乘積。

這個圓潤的曲線和filter的理想曲線形狀相似,相乘后,它們產(chǎn)生了一個很大的值。

但是,如果這時我們把窗口移到老鼠頭部,輸出結(jié)果就很差了。我們要注意一點,就是filter的輸出是個activation map(必定要ReLu一下),所以在這個只包含一個filter的簡單示例中,第一個卷積層在圖像左上角的區(qū)域得到了高值,而對右上角不會有激活反應(yīng)。這就起到了“過濾”的效果。

當(dāng)然這只是一個filter,一個只能分辨向右彎曲的曲線的filter,在真實實踐中,我們可以設(shè)置大量不同的filter來獲得更全面的activation map,如檢測直線的、色彩的。

注:這里的曲線、直線、色彩都是假設(shè),事實上我們并不清楚CNN捕捉的特征是什么,我們只能從數(shù)據(jù)中看出它有沒有得到新特征,切勿認為計算機看到的就等同于人眼看到的。

CS 231N課程

越來越深的網(wǎng)絡(luò)

現(xiàn)在在一些經(jīng)典CNN架構(gòu)中,卷積層之間偶爾也會出現(xiàn)一些其他層,感興趣的讀者可以去了解一下這些層分別是什么,或者分別有什么作用,但總的來說,它們的出現(xiàn)都是為了增強神經(jīng)網(wǎng)絡(luò)的穩(wěn)定性并控制過擬合。從某種角度上說,CNN一般長這樣:

常規(guī)的CNN包含兩個卷積層就夠了,一些更高級的可能會存在多個卷積層的情況。就上圖而言,最后一個完全連接層是非常重要的,但我們把它放到下一節(jié)再介紹,先聊聊之前的各個步驟。把圖像輸入神經(jīng)網(wǎng)絡(luò)后,第一個卷積層輸出的是activation map,這時網(wǎng)絡(luò)提取到了圖像中的一些低層次特征,就像人類眼中的邊緣和曲線。

用ReLu激活后,CNN把activation map輸入第二個卷積層,在這里,filter過濾的就是activation map中的特征,這是一個從低層次特征中提取高層次特征的過程,雖然我們不知道計算機看到了什么,但如果拿人類學(xué)習(xí)來類比,這一步可以被理解為從之前看到的邊緣、曲線中找出能組成半圓、正方形的線條組合。

卷積層越多,我們能提取到的高層次特征就越多,神經(jīng)網(wǎng)絡(luò)對像素空間就越敏感。反過來看,這時網(wǎng)絡(luò)復(fù)雜度也高了,容易產(chǎn)生過擬合。

全連接層

有了高層次特征,現(xiàn)在我們就能品嘗CNN的精華——全連接層了。無論之前是卷積層的輸出還是ReLu、池化層的輸出,全連接層基本只接受一個輸入,并輸出一個N維向量,其中N是必須從中選擇的分類數(shù)。如果你想要分類手寫數(shù)字,這時N就是10,因為有10個數(shù)字。

這個N維向量中的每個數(shù)字代表屬于某個類別的概率。例如,如果全連接層的輸出是[0 .1 .1 .75 0 0 0 0 .05],那么圖像是1的概率就是10%,圖像是2概率是10%,圖像是3的概率是75%,圖像是9的概率則是5%(注意:還有其他方法可以表示輸出,這里只展示softmax方法)。

簡而言之,全連接層的作用就是觀察前一層的輸出(一般是包含高層次特征的activation map),然后確定哪些特征與特定類最相關(guān)。以人類類比,如果要辨別圖像里的是不是狗,我們會注意里面有沒有爪子、四肢;如果要辨別是不是鳥,翅膀和喙就特別重要。全連接層會賦予這些相關(guān)性更強的特征更多權(quán)重,以便當(dāng)我們計算權(quán)重和上一層之間的乘積時,我們可以得到圖像屬于不同類別的正確概率。

訓(xùn)練

最后就到了CNN最重要的部分——訓(xùn)練了。在閱讀前文時,我們可能有諸多疑惑:filter是怎么知道自己要找哪些低層次特征的?全連接層又是怎么篩選activation map的?計算機能自動選取filter中的權(quán)重嗎?很顯然,這一切都是由經(jīng)典的反向傳播來實現(xiàn)的。

在我們剛出生的時候,一切都是新的,我們不知道什么是狗,也不知道什么是鳥。同樣的,當(dāng)一個CNN被剛寫出來的時候,它的世界也才剛起步,所有數(shù)值都是隨機選取的,filter不知道自己要篩選什么特征,全連接層也無法在activation map里放大有效信息。而隨著年齡的增長,我們的父母和老師逐漸向我們展示了這個多彩的世界,以及和它緊密相關(guān)的諸多標(biāo)簽。訓(xùn)練就是CNN學(xué)習(xí)的過程,通過查看數(shù)據(jù)集中成千上萬的圖片,神經(jīng)網(wǎng)絡(luò)也能慢慢從中捕捉到特征,并學(xué)會正確分類。

反向傳播由4個不同步驟組成:正向傳遞、損失函數(shù)、反向傳遞和權(quán)重更新。

正向傳遞時,我們輸入一張圖像,一個尺寸為32×32×3的像素值數(shù)組,然后將其傳遞給整個網(wǎng)絡(luò)。在我們的第一個訓(xùn)練示例中,由于所有權(quán)重/filter值都是隨機初始化的,因此輸出結(jié)果可能類似[.1 .1 .1 .1 .1 .1 .1 .1 .1],它在分類上“不偏不倚”。

損失函數(shù)開啟了“反向”的第一步。當(dāng)網(wǎng)絡(luò)現(xiàn)有權(quán)重?zé)o法提取低層次特征時,這就意味著它沒法得出合理的分類結(jié)果。但是記住一點,我們用的是訓(xùn)練數(shù)據(jù),它包含圖像和標(biāo)簽兩種信息,這就意味著我們能用損失函數(shù)計算預(yù)測標(biāo)簽和真實標(biāo)簽的差異,差異越小,CNN預(yù)測正確的可能性就越大,性能也越好。損失函數(shù)有很多,但其中最常用的MSE(均方誤差):

既然目的是把損失值降到最低,那這就成了一個優(yōu)化問題——找出對輸出影響最大的輸入,也就是dL / dW,其中W是特定層的權(quán)重。

現(xiàn)在,我們要做的是通過網(wǎng)絡(luò)進行反向傳遞,確定哪些權(quán)重對損失影響最大,并找到調(diào)整它們的方法從而減少損失。一旦我們計算出這個導(dǎo)數(shù),我們就會進入最后一步,權(quán)重更新。

學(xué)習(xí)率(learning rate)是一個可以自定義調(diào)整的超參數(shù),它影響著著CNN的收斂速度。如果學(xué)習(xí)率過大,權(quán)重更新的幅度就很大,這時CNN能快速收斂,但它也帶來一個問題,就是權(quán)重的精度不夠,無法得出最優(yōu)解。

正向傳遞、損失函數(shù)、反向傳遞和權(quán)重更新的過程構(gòu)成一輪訓(xùn)練迭代。CNN會對參與訓(xùn)練的每組圖像(batch)進行進行固定次數(shù)的迭代。一旦你完成了最后一個訓(xùn)練樣本的參數(shù)更新,這時網(wǎng)絡(luò)的性能更好了,各層的權(quán)值也終于調(diào)整正確了。

下期預(yù)告

本文介紹了CNN的一些基礎(chǔ)知識,包括filter的作用、各層的作用等,但還未介紹網(wǎng)絡(luò)架構(gòu)、批量歸一化、損失函數(shù)選擇、數(shù)據(jù)增強、正則化方法等內(nèi)容。新人可以依靠本文對CNN建立初步認識,部分重要內(nèi)容我們會在下一篇文章中詳談。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 神經(jīng)網(wǎng)絡(luò)

    關(guān)注

    42

    文章

    4771

    瀏覽量

    100777
  • 機器學(xué)習(xí)
    +關(guān)注

    關(guān)注

    66

    文章

    8418

    瀏覽量

    132654
  • cnn
    cnn
    +關(guān)注

    關(guān)注

    3

    文章

    352

    瀏覽量

    22217

原文標(biāo)題:面向新手的CNN入門指南(一)

文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    使用Python卷積神經(jīng)網(wǎng)絡(luò)(CNN)進行圖像識別的基本步驟

    Python 卷積神經(jīng)網(wǎng)絡(luò)(CNN)在圖像識別領(lǐng)域具有廣泛的應(yīng)用。通過使用卷積神經(jīng)網(wǎng)絡(luò),我們可以讓計算機從圖像中學(xué)習(xí)特征,從而實現(xiàn)對圖像分類
    的頭像 發(fā)表于 11-20 11:20 ?6203次閱讀

    TensorFlow的CNN文本分類

    在TensorFlow中實現(xiàn)CNN進行文本分類(譯)
    發(fā)表于 10-31 09:27

    討論紋理分析在圖像分類中的重要性及其在深度學(xué)習(xí)中使用紋理分析

    紋理就能被更準(zhǔn)確地捕捉和分類?! ≡诨诩y理的分類任務(wù)重,紋理分析對于深度學(xué)習(xí)的重要性  由于紋理基于局部模式,而傳統(tǒng)的深度學(xué)習(xí)方法強調(diào)復(fù)雜的特征,對紋理分類沒有幫助,因此,傳統(tǒng)的
    發(fā)表于 10-26 16:57

    如何將DS_CNN_S.pb轉(zhuǎn)換為ds_cnn_s.tflite?

    用于圖像分類(eIQ tensflowlite 庫)。從廣義上講,我正在尋找該腳本,您可能已經(jīng)使用該腳本將 DS_CNN_S.pb 轉(zhuǎn)換為 ds_cnn_s.tflite我能夠查看兩個
    發(fā)表于 04-19 06:11

    一文詳解CNN

    1 CNN簡介 CNN即卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks),是一類包含卷積計算的神經(jīng)網(wǎng)絡(luò),是深度學(xué)習(xí)(deep learning)的代表算法之一,在圖像
    發(fā)表于 08-18 06:56

    圖像分類的方法之深度學(xué)習(xí)與傳統(tǒng)機器學(xué)習(xí)

    實際情況非常復(fù)雜,傳統(tǒng)的分類方法不堪重負?,F(xiàn)在,我們不再試圖用代碼來描述每一個圖像類別,決定轉(zhuǎn)而使用機器學(xué)習(xí)的方法處理圖像分類問題。 目前,許多研究者使用
    發(fā)表于 09-28 19:43 ?0次下載

    簡單好上手的圖像分類教程!

    簡單好上手的圖像分類教程!構(gòu)建圖像分類模型的一個突破是發(fā)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)(CNN)可以用來逐步地提取圖像
    的頭像 發(fā)表于 05-31 16:36 ?8243次閱讀
    簡單好上手的<b class='flag-5'>圖像</b><b class='flag-5'>分類</b>教程!

    全卷積網(wǎng)絡(luò)FCN進行圖像分割

    CNN能夠?qū)D片進行分類,可是怎么樣才能識別圖片中特定部分的物體,在2015年之前還是一個世界難題。神經(jīng)網(wǎng)絡(luò)大神Jonathan Long發(fā)表了《Fully Convolutional
    發(fā)表于 09-26 17:22 ?627次閱讀

    如何使用CNN對可穿戴傳感器進行數(shù)據(jù)分類

    本文使用 CNN 來對可穿戴傳感器收集的大規(guī)模運動數(shù)據(jù)進行分類,同時對傳感器數(shù)據(jù)轉(zhuǎn)換為不同的圖像格式輸入做出了比較。最佳性能配置以 92.1%的準(zhǔn)確率將 50 種健身房運動
    發(fā)表于 12-25 03:39 ?15次下載
    如何使用<b class='flag-5'>CNN</b>對可穿戴傳感器<b class='flag-5'>進行</b>數(shù)據(jù)<b class='flag-5'>分類</b>

    基于特征交換的卷積神經(jīng)網(wǎng)絡(luò)圖像分類算法

    針對深度學(xué)習(xí)在圖像識別任務(wù)中過分依賴標(biāo)注數(shù)據(jù)的問題,提岀一種基于特征交換的卷積神經(jīng)網(wǎng)絡(luò)(CNN圖像分類算法。結(jié)合CNN的特征提取方式與全卷
    發(fā)表于 03-22 14:59 ?27次下載
    基于特征交換的卷積神經(jīng)網(wǎng)絡(luò)<b class='flag-5'>圖像</b><b class='flag-5'>分類</b>算法

    《自動化學(xué)報》:基于小樣本學(xué)習(xí)的圖像分類技術(shù)綜述

    , 二是如何學(xué)習(xí)好的分類參數(shù). 隨著卷積神經(jīng)網(wǎng)絡(luò)(Convolutional neural networks, CNN)的設(shè)計越來越深層化, 圖像特征的表示能力越來越強, 同時也能對圖像
    發(fā)表于 11-10 09:43 ?3732次閱讀
    《自動化學(xué)報》:基于小樣本學(xué)習(xí)的<b class='flag-5'>圖像</b><b class='flag-5'>分類</b>技術(shù)綜述

    使用CNN進行2D路徑規(guī)劃

    卷積神經(jīng)網(wǎng)絡(luò)(CNN)是解決圖像分類、分割、目標(biāo)檢測等任務(wù)的流行模型。本文將CNN應(yīng)用于解決簡單的二維路徑規(guī)劃問題。主要使用Python, PyTorch, NumPy和OpenCV。
    的頭像 發(fā)表于 02-13 14:30 ?727次閱讀

    CNN圖像分類策略

    在深度學(xué)習(xí)出現(xiàn)之前,自然圖像中的對象識別過程相當(dāng)粗暴簡單:定義一組關(guān)鍵視覺特征(“單詞”),識別每個視覺特征在圖像中的存在頻率(“包”),然后根據(jù)這些數(shù)字對圖像進行
    發(fā)表于 12-25 11:36 ?296次閱讀
    <b class='flag-5'>CNN</b><b class='flag-5'>圖像</b><b class='flag-5'>分類</b>策略

    cnn卷積神經(jīng)網(wǎng)絡(luò)分類有哪些

    卷積神經(jīng)網(wǎng)絡(luò)(CNN)是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像分類、目標(biāo)檢測、語義分割等領(lǐng)域。本文將詳細介紹CNN分類任務(wù)中的應(yīng)用,包括基本結(jié)構(gòu)
    的頭像 發(fā)表于 07-03 09:28 ?628次閱讀

    使用卷積神經(jīng)網(wǎng)絡(luò)進行圖像分類的步驟

    使用卷積神經(jīng)網(wǎng)絡(luò)(CNN進行圖像分類是一個涉及多個步驟的過程。 1. 問題定義 確定目標(biāo) :明確你想要分類
    的頭像 發(fā)表于 11-15 15:01 ?302次閱讀