1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        CNN卷積神經(jīng)網(wǎng)絡(luò)入門超詳細(xì)解析

        共 4951字,需瀏覽 10分鐘

         ·

        2021-12-13 18:34

        點(diǎn)擊下方卡片,關(guān)注“新機(jī)器視覺”公眾號

        視覺/圖像重磅干貨,第一時(shí)間送達(dá)

        來源:CSDN

        作者:越前浩波


        一、神經(jīng)網(wǎng)絡(luò)

        首先了解什么是神經(jīng)網(wǎng)絡(luò),大家可以先看下以下兩篇博客,一篇為純理論講解,一篇為實(shí)戰(zhàn)加理論,在此就不過多詳細(xì)介紹。

        • 機(jī)器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)及其模型(https://blog.csdn.net/weixin_44023658/article/details/105691321)

        • 入門講解:使用numpy實(shí)現(xiàn)簡單的神經(jīng)網(wǎng)絡(luò)(BP算法)

          (https://blog.csdn.net/weixin_44023658/article/details/105694079)


        二、卷積神經(jīng)網(wǎng)絡(luò)之層級結(jié)構(gòu)

        要了解卷積神經(jīng)網(wǎng)絡(luò)首先要了解它的各個(gè)層級結(jié)構(gòu),如下圖
        上圖中CNN要做的事情是:給定一張圖片,是車還是馬未知,是什么車也未知,現(xiàn)在需要模型判斷這張圖片里具體是一個(gè)什么東西,總之輸出一個(gè)結(jié)果:如果是車 那是什么車
        所以

        上圖從左到右依次為→

        • 數(shù)據(jù)輸入層:對數(shù)據(jù)做一些處理,比如去均值(把輸入數(shù)據(jù)各個(gè)維度都中心化為0,避免數(shù)據(jù)過多偏差,影響訓(xùn)練效果)、歸一化(把所有的數(shù)據(jù)都?xì)w一到同樣的范圍)、PCA/白化等等。CNN只對訓(xùn)練集做“去均值”這一步。

        • CONV:卷積計(jì)算層,線性乘積 求和。

        • RELU:激勵(lì)層,上文2.2節(jié)中有提到:ReLU是激活函數(shù)的一種

        • POOL:池化層,簡言之,即取區(qū)域平均或最大

        • FC:全連接層

        這幾個(gè)部分中,卷積計(jì)算層是CNN的核心,下文將重點(diǎn)闡述此部分。


        三、CNN之卷積計(jì)算層

        1、 CNN如何進(jìn)行識別
        簡言之,當(dāng)我們給定一個(gè)"X"的圖案,計(jì)算機(jī)如何識別這個(gè)圖案就是“X”呢?一個(gè)可能的辦法就是計(jì)算機(jī)存儲一張標(biāo)準(zhǔn)的“X”圖案,然后把需要識別的未知圖案跟標(biāo)準(zhǔn)"X"圖案進(jìn)行比對,如果二者一致,則判定未知圖案即是一個(gè)"X"圖案。

        這樣即便未知圖案可能有一些平移或稍稍變形,依然能辨別出它是一個(gè)X圖案。所以,CNN是把未知圖案和標(biāo)準(zhǔn)X圖案一個(gè)局部一個(gè)局部的對比,如下圖所示
        而未知圖案的局部和標(biāo)準(zhǔn)X圖案的局部一個(gè)一個(gè)比對時(shí)的計(jì)算過程,便是卷積操作。卷積計(jì)算結(jié)果為1表示匹配,否則不匹配。

        具體來說,為了確定一幅圖像是包含有"X"還是"O",我們需要判斷它是否含有"X"或者"O",并且假設(shè)必須兩者選其一,不是"X"就是"O"。
        理想的情況如下圖所示:
        標(biāo)準(zhǔn)的"X"和"O",字母位于圖像的正中央,并且比例合適,無變形

        對于計(jì)算機(jī)來說,只要圖像稍稍有一點(diǎn)變化,不是標(biāo)準(zhǔn)的,那在識別過程中就會遇到困難:
        計(jì)算機(jī)要解決上面這個(gè)問題,一個(gè)比較直接的做法就是先保存一張"X"和"O"的標(biāo)準(zhǔn)圖像(就像前面給出的例子),然后將其他的新給出的圖像來和這兩張標(biāo)準(zhǔn)圖像進(jìn)行對比,看看到底和哪一張圖更匹配,就判斷為哪個(gè)字母。

        但是這么做的話,精準(zhǔn)度較低,因?yàn)樵谠谟?jì)算機(jī)的“視覺”中,一幅圖看起來就像是一個(gè)二維的像素?cái)?shù)組(可以想象成一個(gè)棋盤),每一個(gè)位置對應(yīng)一個(gè)數(shù)字。在我們這個(gè)例子當(dāng)中,像素值"1"代表白色,像素值"-1"代表黑色。
        當(dāng)比較兩幅圖的時(shí)候,如果有任何一個(gè)像素值不匹配,那么這兩幅圖就不匹配,至少對于計(jì)算機(jī)來說是這樣的。

        所以,上述事例中,計(jì)算機(jī)認(rèn)為兩幅圖中的白色像素除了中間的3*3的小方格里面是相同的,其他四個(gè)角上都不同:

        從表面上看,計(jì)算機(jī)會判別右邊那幅圖不是"X",兩幅圖不同,則得出結(jié)論:
        但是這么做,顯得太不合理,理想的狀況下,我們希望對于那些僅僅只是做了一些像平移,縮放,旋轉(zhuǎn),微變形等簡單變換的圖像,計(jì)算機(jī)仍然能夠識別出圖中的"X"和"O"。

        如下圖所示,我們希望計(jì)算機(jī)依然能夠很快并且很準(zhǔn)的識別出圖像:
        于是就有了CNN。

        2、特征提取不同于計(jì)算機(jī),對于CNN來說,是通過一塊一塊地來進(jìn)行比對,比對的這個(gè)“小塊”我們稱之為Features(特征)。在兩幅圖中大致相同的位置找到一些粗糙的特征進(jìn)行匹配,相比傳統(tǒng)的整幅圖逐一比對的方法,CNN能夠更好的看到兩幅圖的相似性。

        每一個(gè)feature就像是一個(gè)小圖(就是一個(gè)比較小的有值的二維數(shù)組)。不同的Feature匹配圖像中不同的特征。在字母"X"的例子中,那些由對角線和交叉線組成的features基本上能夠識別出大多數(shù)"X"所具有的重要特征。
        這些features很有可能就是匹配任何含有字母"X"的圖中字母X的四個(gè)角和它的中心。那么具體到底是怎么匹配的呢?如下所示:

        看到這里是不是已經(jīng)有了一些頭緒,但其實(shí)目前只是第一步,現(xiàn)在知道了這些Features是怎么在原圖上面進(jìn)行匹配的,但是還不知道如何通過Features進(jìn)行數(shù)學(xué)計(jì)算,比如這個(gè)下面3*3的小塊到底如何計(jì)算的。這里面的數(shù)學(xué)操作,就是我們常說的“卷積”操作。

        下面會介紹卷積操作的詳細(xì)步驟。


        2、什么是卷積
        對圖像(不同的數(shù)據(jù)窗口數(shù)據(jù))和濾波矩陣(一組固定的權(quán)重:因?yàn)槊總€(gè)神經(jīng)元的多個(gè)權(quán)重固定,所以又可以看做一個(gè)恒定的濾波器filter)做內(nèi)積(逐個(gè)元素相乘再求和)的操作就是所謂的『卷積』操作,也是卷積神經(jīng)網(wǎng)絡(luò)的名字來源。

        非嚴(yán)格意義上來講,下圖中紅框框起來的部分便可以理解為一個(gè)濾波器,即帶著一組固定權(quán)重的神經(jīng)元。多個(gè)濾波器疊加成了卷積層。

        舉個(gè)具體的例子,比如下圖中,圖中左邊部分是原始輸入數(shù)據(jù),圖中中間部分是濾波器filter,圖中右邊是輸出的新的二維數(shù)據(jù)。
        中間濾波器filter與數(shù)據(jù)窗口做內(nèi)積,其具體計(jì)算過程則是:40 + 00 + 00 + 00 + 01 + 01 + 00 + 01 + -4*2 = -8

        3、 圖像上的卷積

        在下圖對應(yīng)的計(jì)算過程中,輸入是一定區(qū)域大小(width*height)的數(shù)據(jù),和濾波器filter(帶著一組固定權(quán)重的神經(jīng)元)做內(nèi)積后等到新的二維數(shù)據(jù)。

        左邊是圖像輸入,中間部分就是濾波器filter(帶著一組固定權(quán)重的神經(jīng)元),不同的濾波器filter會得到不同的輸出數(shù)據(jù),比如顏色深淺、輪廓。相當(dāng)于如果想提取圖像的不同特征,則用不同的濾波器filter,提取想要的關(guān)于圖像的特定信息:顏色深淺或輪廓。

        如下圖所示:

        4、 動態(tài)卷積圖演示
        在CNN中,濾波器filter(帶著一組固定權(quán)重的神經(jīng)元)對局部輸入數(shù)據(jù)進(jìn)行卷積計(jì)算。每計(jì)算完一個(gè)數(shù)據(jù)窗口內(nèi)的局部數(shù)據(jù)后,數(shù)據(jù)窗口不斷平移滑動,直到計(jì)算完所有數(shù)據(jù)。這個(gè)過程中,有這么幾個(gè)參數(shù):

        • a. 深度depth:神經(jīng)元個(gè)數(shù),決定輸出的depth厚度。同時(shí)代表濾波器個(gè)數(shù)。

        • b. 步長stride:決定滑動多少步可以到邊緣。

        • c.填充值zero-padding:在外圍邊緣補(bǔ)充若干圈0,方便從初始位置以步長為單位可以剛好滑倒末尾位置,通俗地講就是為了總長能被步長整除。

        cs231n課程中有一張卷積動圖,如下圖所示:
        通過上圖我們可以看到:

        兩個(gè)神經(jīng)元,即depth=2,意味著有兩個(gè)濾波器。數(shù)據(jù)窗口每次移動兩個(gè)步長取3*3的局部數(shù)據(jù),即stride=2;zero-padding=1,然后分別以兩個(gè)濾波器filter為軸滑動數(shù)組進(jìn)行卷積計(jì)算,得到兩組不同的結(jié)果。


        如果初看上圖,可能不一定能馬上理解,但結(jié)合上文的內(nèi)容后,便可以更清晰的理解其含義。

        左邊是輸入(773中,7*7代表圖像的像素/長寬,3代表R、G、B 三個(gè)顏色通道),中間部分是兩個(gè)不同的濾波器Filter w0、Filter w1,最右邊則是兩個(gè)不同的輸出。

        隨著左邊數(shù)據(jù)窗口的平移滑動,濾波器Filter w0 / Filter w1對不同的局部數(shù)據(jù)進(jìn)行卷積計(jì)算。值得一提的是,左邊數(shù)據(jù)在變化,每次濾波器都是針對某一局部的數(shù)據(jù)窗口進(jìn)行卷積,這就是所謂的CNN中的局部感知機(jī)制。

        舉個(gè)例子,濾波器就像一雙眼睛,人類視角有限,一眼望去,只能看到這世界的局部。如果一下子接受全世界所有信息,大腦會接收不過來。當(dāng)然,即便是看局部,針對局部里的信息人類雙眼也是有偏重、偏好的,會根據(jù)自己的興趣愛好進(jìn)行輸入的權(quán)重的分配。

        與此同時(shí),數(shù)據(jù)窗口滑動,導(dǎo)致輸入在變化,但中間濾波器Filter w0的權(quán)重(即每個(gè)神經(jīng)元連接數(shù)據(jù)窗口的權(quán)重)是固定不變的,這個(gè)權(quán)重不變即所謂的CNN中的參數(shù)(權(quán)重)共享機(jī)制。

        再舉個(gè)例子,某人環(huán)游全世界,所看到的信息在變,但采集信息的雙眼不變,另外不同人的雙眼 看同一個(gè)局部信息
        所感受到的不同,即一千個(gè)讀者有一千個(gè)哈姆雷特,所以不同的濾波器 就像不同的雙眼,不同的人有著不同的反饋結(jié)果。

        我第一次看到上面這個(gè)動態(tài)圖的時(shí)候,只覺得很炫,另外就是只初步了解計(jì)算過程是“相乘后相加”,但到底具體是個(gè)怎么相乘后相加的計(jì)算過程變不得而知,后續(xù)通過學(xué)習(xí)后才有了更深入的了解。

        下面我們就來詳細(xì)說明下其計(jì)算步驟。

        • 首先,我們將上述動圖進(jìn)行分解,如下圖

        • 其次,我們細(xì)究下上圖的具體計(jì)算過程。即上圖中的輸出結(jié)果1具體是怎么計(jì)算得到,其原理類似wx + b,w對應(yīng)濾波器Filter w0,x對應(yīng)不同的數(shù)據(jù)窗口,b對應(yīng)Bias b0,相當(dāng)于濾波器Filter w0與一個(gè)個(gè)數(shù)據(jù)窗口相乘再求和后,最后加上Bias b0得到輸出結(jié)果1,具體過程如下過程所示:







        • 然后濾波器Filter w0固定不變,數(shù)據(jù)窗口向右移動2步,繼續(xù)做內(nèi)積計(jì)算,得到0的輸出結(jié)果

        • 最后,換做另外一個(gè)不同的濾波器Filter w1、不同的偏置Bias b1,再跟圖中最左邊的數(shù)據(jù)窗口做卷積,可得到另外一個(gè)不同的輸出。

        以上就是CNN在圖像上進(jìn)行的卷積的整個(gè)計(jì)算過程。


        四、 CNN之激勵(lì)層,池化層,全連接層

        1、 ReLU激勵(lì)層
        第一節(jié)倆篇博客介紹了激活函數(shù)sigmoid,但實(shí)際梯度下降中,sigmoid容易飽和、造成終止梯度傳遞,且沒有0中心化。咋辦呢,可以嘗試另外一個(gè)激活函數(shù):ReLU,其圖形表示如下圖所示:

         對于輸入的負(fù)值,輸出全為0,對于正值,原樣輸出。

        下圖演示了本文的例子中relu激活函數(shù)具體操作:


        我們將上面所提到的卷積,池化,激活放在一起,于是形成下面這個(gè)樣子:然后,我們加大網(wǎng)絡(luò)的深度,增加更多的層,就可以得到深度神經(jīng)網(wǎng)絡(luò)了:

        2、 池化pool層
        前面提到,池化,簡言之,即取區(qū)域平均或最大,如下圖所示,CNN中使用的另一個(gè)有效的工具被稱為“池化(Pooling)”。池化可以將一幅大的圖像縮小,同時(shí)又保留其中的重要信息。池化就是將輸入圖像進(jìn)行縮小,減少像素信息,只保留重要信息。通常情況下,池化都是22大小,比如對于max-pooling來說,就是取輸入圖像中22大小的塊中的最大值,作為結(jié)果的像素值,相當(dāng)于將原始圖像縮小了4倍。(注:同理,對于average-pooling來說,就是取2*2大小塊的平均值作為結(jié)果的像素值。)

        上圖所展示的是取區(qū)域最大,即上圖左邊部分中 左上角2x2的矩陣中6最大,右上角2x2的矩陣中8最大,左下角2x2的矩陣中3最大,右下角2x2的矩陣中4最大,所以得到上圖右邊部分的結(jié)果:6 8 3 4。


        3、全連接層(Fully connected layers)

        全連接層(fully connected layers,F(xiàn)C)在整個(gè)卷積神經(jīng)網(wǎng)絡(luò)中起到“分類器”的作用。如果說卷積層、池化層和激活函數(shù)層等操作是將原始數(shù)據(jù)映射到隱層特征空間的話,全連接層則起到將學(xué)到的分布式特征映射到樣本標(biāo)記空間的作用。

        全連接層計(jì)算過程中,首先需要在前層的卷積層中采樣下來,并把分布式特征進(jìn)行分類

        然后在這些特征中找到與x和o強(qiáng)相關(guān)的特征進(jìn)行分類,

        通過卷積計(jì)算分別得出x、o對應(yīng)的結(jié)果:

        從下圖中可以看出,根據(jù)以上計(jì)算可了解到最終判定為"X",所以最終結(jié)果為X:

        在這個(gè)過程中,我們定義這一系列操作為”全連接層“(Fully connected layers):全連接層可以通過增加寬度和長度影響模型的參數(shù),如下圖所示:

        所有的層級以及計(jì)算得出結(jié)果的過程便是卷積神經(jīng)網(wǎng)絡(luò)的基本原理。



        —版權(quán)聲明—

        僅用于學(xué)術(shù)分享,版權(quán)屬于原作者。

        若有侵權(quán),請聯(lián)系微信號:yiyang-sy 刪除或修改!


        —THE END—
        瀏覽 102
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            999sesese | 亚洲av三区 | 黄色AV免费在线观看 | 97国产视频在线 | 亚洲黄片免费看 | freesexvideos喷水 | 日韩AAA视频 | 国产精品偷伦视频免费观看了软件 | 欧美三四区| 免费在线一级片 |