<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          基礎(chǔ)教程|卷積神經(jīng)網(wǎng)絡(luò)(CNN)是什么?

          共 5412字,需瀏覽 11分鐘

           ·

          2021-06-18 11:20

          ↑ 點(diǎn)擊藍(lán)字 關(guān)注極市平臺(tái)

          作者丨郭必?fù)P
          來(lái)源丨SimpleAI
          編輯丨極市平臺(tái)

          極市導(dǎo)讀

           

          本文詳細(xì)講解了CNN各個(gè)基礎(chǔ)知識(shí)。 >>加入極市CV技術(shù)交流群,走在計(jì)算機(jī)視覺(jué)的最前沿

          從今天起,正式開(kāi)始講解卷積神經(jīng)網(wǎng)絡(luò)。這是一種曾經(jīng)讓我無(wú)論如何也無(wú)法弄明白的東西,主要是名字就太“高級(jí)”了,網(wǎng)上的各種各樣的文章來(lái)介紹“什么是卷積”尤為讓人受不了。聽(tīng)了吳恩達(dá)的網(wǎng)課之后,豁然開(kāi)朗,終于搞明白了這個(gè)東西是什么和為什么。我這里大概會(huì)用6~7篇文章來(lái)講解CNN并實(shí)現(xiàn)一些有趣的應(yīng)用。看完之后大家應(yīng)該可以自己動(dòng)手做一些自己喜歡的事兒了。

          一、引子————邊界檢測(cè)

          我們來(lái)看一個(gè)最簡(jiǎn)單的例子:“邊界檢測(cè)(edge detection)”,假設(shè)我們有這樣的一張圖片,大小8×8:

          圖片中的數(shù)字代表該位置的像素值,我們知道,像素值越大,顏色越亮,所以為了示意,我們把右邊小像素的地方畫(huà)成深色。圖的中間兩個(gè)顏色的分界線就是我們要檢測(cè)的邊界。

          怎么檢測(cè)這個(gè)邊界呢?我們可以設(shè)計(jì)這樣的一個(gè) 濾波器(filter,也稱為kernel),大小3×3:

          然后,我們用這個(gè)filter,往我們的圖片上“蓋”,覆蓋一塊跟filter一樣大的區(qū)域之后,對(duì)應(yīng)元素相乘,然后求和。計(jì)算一個(gè)區(qū)域之后,就向其他區(qū)域挪動(dòng),接著計(jì)算,直到把原圖片的每一個(gè)角落都覆蓋到了為止。這個(gè)過(guò)程就是 “卷積”
          (我們不用管卷積在數(shù)學(xué)上到底是指什么運(yùn)算,我們只用知道在CNN中是怎么計(jì)算的。)

          這里的“挪動(dòng)”,就涉及到一個(gè)步長(zhǎng)了,假如我們的步長(zhǎng)是1,那么覆蓋了一個(gè)地方之后,就挪一格,容易知道,總共可以覆蓋6×6個(gè)不同的區(qū)域。

          那么,我們將這6×6個(gè)區(qū)域的卷積結(jié)果,拼成一個(gè)矩陣:

          誒?!發(fā)現(xiàn)了什么?
          這個(gè)圖片,中間顏色淺,兩邊顏色深,這說(shuō)明咱們的原圖片中間的邊界,在這里被反映出來(lái)了!

          從上面這個(gè)例子中,我們發(fā)現(xiàn),我們可以通過(guò)設(shè)計(jì)特定的filter,讓它去跟圖片做卷積,就可以識(shí)別出圖片中的某些特征,比如邊界。

          上面的例子是檢測(cè)豎直邊界,我們也可以設(shè)計(jì)出檢測(cè)水平邊界的,只用把剛剛的filter旋轉(zhuǎn)90°即可。對(duì)于其他的特征,理論上只要我們經(jīng)過(guò)精細(xì)的設(shè)計(jì),總是可以設(shè)計(jì)出合適的filter的。

          我們的CNN(convolutional neural network),主要就是通過(guò)一個(gè)個(gè)的filter,不斷地提取特征,從局部的特征到總體的特征,從而進(jìn)行圖像識(shí)別等等功能。

          那么問(wèn)題來(lái)了,我們?cè)趺纯赡苋ピO(shè)計(jì)這么多各種各樣的filter呀?首先,我們都不一定清楚對(duì)于一大推圖片,我們需要識(shí)別哪些特征,其次,就算知道了有哪些特征,想真的去設(shè)計(jì)出對(duì)應(yīng)的filter,恐怕也并非易事,要知道,特征的數(shù)量可能是成千上萬(wàn)的。

          其實(shí)學(xué)過(guò)神經(jīng)網(wǎng)絡(luò)之后,我們就知道,這些filter,根本就不用我們?nèi)ピO(shè)計(jì),每個(gè)filter中的各個(gè)數(shù)字,不就是參數(shù)嗎,我們可以通過(guò)大量的數(shù)據(jù),來(lái) 讓機(jī)器自己去“學(xué)習(xí)”這些參數(shù)嘛。這,就是CNN的原理。

          二、CNN的基本概念

          1.padding 填白

          從上面的引子中,我們可以知道,原圖像在經(jīng)過(guò)filter卷積之后,變小了,從(8,8)變成了(6,6)。假設(shè)我們?cè)倬硪淮危谴笮【妥兂闪?4,4)了。

          這樣有啥問(wèn)題呢?

          主要有兩個(gè)問(wèn)題:

          • 每次卷積,圖像都縮小,這樣卷不了幾次就沒(méi)了;

          • 相比于圖片中間的點(diǎn),圖片邊緣的點(diǎn)在卷積中被計(jì)算的次數(shù)很少。這樣的話,邊緣的信息就易于丟失。

          為了解決這個(gè)問(wèn)題,我們可以采用padding的方法。我們每次卷積前,先給圖片周圍都補(bǔ)一圈空白,讓卷積之后圖片跟原來(lái)一樣大,同時(shí),原來(lái)的邊緣也被計(jì)算了更多次。

          比如,我們把(8,8)的圖片給補(bǔ)成(10,10),那么經(jīng)過(guò)(3,3)的filter之后,就是(8,8),沒(méi)有變。

          我們把上面這種“讓卷積之后的大小不變”的padding方式,稱為 “Same” 方式,把不經(jīng)過(guò)任何填白的,稱為 **“Valid”**方式。這個(gè)是我們?cè)谑褂靡恍┛蚣艿臅r(shí)候,需要設(shè)置的超參數(shù)。

          2.stride 步長(zhǎng)

          前面我們所介紹的卷積,都是默認(rèn)步長(zhǎng)是1,但實(shí)際上,我們可以設(shè)置步長(zhǎng)為其他的值。

          比如,對(duì)于(8,8)的輸入,我們用(3,3)的filter,
          如果stride=1,則輸出為(6,6);
          如果stride=2,則輸出為(3,3);(這里例子舉得不大好,除不斷就向下取整)

          3.pooling 池化

          這個(gè)pooling,是為了提取一定區(qū)域的主要特征,并減少參數(shù)數(shù)量,防止模型過(guò)擬合。

          比如下面的MaxPooling,采用了一個(gè)2×2的窗口,并取stride=2:

          除了MaxPooling,還有AveragePooling,顧名思義就是取那個(gè)區(qū)域的平均值。

          4.對(duì)多通道(channels)圖片的卷(重要!)

          這個(gè)需要單獨(dú)提一下。彩色圖像,一般都是RGB三個(gè)通道(channel)的,因此輸入數(shù)據(jù)的維度一般有三個(gè):(長(zhǎng),寬,通道)

          比如一個(gè)28×28的RGB圖片,維度就是(28,28,3)。

          前面的引子中,輸入圖片是2維的(8,8),filter是(3,3),輸出也是2維的(6,6)。

          如果輸入圖片是三維的呢(即增多了一個(gè)channels),比如是(8,8,3),這個(gè)時(shí)候,我們的filter的維度就要變成(3,3,3)了,它的 最后一維要跟輸入的channel維度一致。

          這個(gè)時(shí)候的卷積,是三個(gè)channel的所有元素對(duì)應(yīng)相乘后求和,也就是之前是9個(gè)乘積的和,現(xiàn)在是27個(gè)乘積的和。因此,輸出的維度并不會(huì)變化。還是(6,6)。

          但是,一般情況下,我們會(huì) 使用多了filters同時(shí)卷積,比如,如果我們同時(shí)使用4個(gè)filter的話,那么 輸出的維度則會(huì)變?yōu)?6,6,4)

          我特地畫(huà)了下面這個(gè)圖,來(lái)展示上面的過(guò)程:

          圖中的輸入圖像是(8,8,3),filter有4個(gè),大小均為(3,3,3),得到的輸出為(6,6,4)。我覺(jué)得這個(gè)圖已經(jīng)畫(huà)的很清晰了,而且給出了3和4這個(gè)兩個(gè)關(guān)鍵數(shù)字是怎么來(lái)的,所以我就不啰嗦了(這個(gè)圖畫(huà)了我起碼40分鐘)。

          其實(shí),如果套用我們前面學(xué)過(guò)的神經(jīng)網(wǎng)絡(luò)的符號(hào)來(lái)看待CNN的話,

          • 我們的輸入圖片就是X,shape=(8,8,3);

          • 4個(gè)filters其實(shí)就是第一層神金網(wǎng)絡(luò)的參數(shù)W1,,shape=(3,3,3,4),這個(gè)4是指有4個(gè)filters;

          • 我們的輸出,就是Z1,shape=(6,6,4);

          • 后面其實(shí)還應(yīng)該有一個(gè)激活函數(shù),比如relu,經(jīng)過(guò)激活后,Z1變?yōu)锳1,shape=(6,6,4);

          所以,在前面的圖中,我加一個(gè)激活函數(shù),給對(duì)應(yīng)的部分標(biāo)上符號(hào),就是這樣的:

          【個(gè)人覺(jué)得,這么好的圖不收藏,真的是可惜了】

          三、CNN的結(jié)構(gòu)組成

          上面我們已經(jīng)知道了卷積(convolution)、池化(pooling)以及填白(padding)是怎么進(jìn)行的,接下來(lái)我們就來(lái)看看CNN的整體結(jié)構(gòu),它包含了3種層(layer):

          1. Convolutional layer(卷積層—CONV)

          由濾波器filters和激活函數(shù)構(gòu)成。

          一般要設(shè)置的超參數(shù)包括filters的數(shù)量、大小、步長(zhǎng),以及padding是“valid”還是“same”。當(dāng)然,還包括選擇什么激活函數(shù)。

          2. Pooling layer (池化層—POOL)

          這里里面沒(méi)有參數(shù)需要我們學(xué)習(xí),因?yàn)檫@里里面的參數(shù)都是我們?cè)O(shè)置好了,要么是Maxpooling,要么是Averagepooling。

          需要指定的超參數(shù),包括是Max還是average,窗口大小以及步長(zhǎng)。

          通常,我們使用的比較多的是Maxpooling,而且一般取大小為(2,2)步長(zhǎng)為2的filter,這樣,經(jīng)過(guò)pooling之后,輸入的長(zhǎng)寬都會(huì)縮小2倍,channels不變。

          3. Fully Connected layer(全連接層—FC)

          這個(gè)前面沒(méi)有講,是因?yàn)檫@個(gè)就是我們最熟悉的家伙,就是我們之前學(xué)的神經(jīng)網(wǎng)絡(luò)中的那種最普通的層,就是一排神經(jīng)元。因?yàn)檫@一層是每一個(gè)單元都和前一層的每一個(gè)單元相連接,所以稱之為“全連接”。

          這里要指定的超參數(shù),無(wú)非就是神經(jīng)元的數(shù)量,以及激活函數(shù)。

          接下來(lái),我們隨便看一個(gè)CNN的模樣,來(lái)獲取對(duì)CNN的一些感性認(rèn)識(shí):

          上面這個(gè)CNN是我隨便拍腦門想的一個(gè)。它的結(jié)構(gòu)可以用:
          X→CONV(relu)→MAXPOOL→CONV(relu)→FC(relu)→FC(softmax)→Y 來(lái)表示。

          這里需要說(shuō)明的是,在經(jīng)過(guò)數(shù)次卷積和池化之后,我們 最后會(huì)先將多維的數(shù)據(jù)進(jìn)行“扁平化”, 也就是把 (height,width,channel) 的數(shù)據(jù)壓縮成長(zhǎng)度為 height × width × channel 的一維數(shù)組,然后再與 FC層連接,這之后就跟普通的神經(jīng)網(wǎng)絡(luò)無(wú)異了

          可以從圖中看到,隨著網(wǎng)絡(luò)的深入,我們的圖像(嚴(yán)格來(lái)說(shuō)中間的那些不能叫圖像了,但是為了方便,還是這樣說(shuō)吧)越來(lái)越小,但是channels卻越來(lái)越大了。在圖中的表示就是長(zhǎng)方體面對(duì)我們的面積越來(lái)越小,但是長(zhǎng)度卻越來(lái)越長(zhǎng)了。

          四、卷積神經(jīng)網(wǎng)絡(luò) VS. 傳統(tǒng)神經(jīng)網(wǎng)絡(luò)

          其實(shí)現(xiàn)在回過(guò)頭來(lái)看,CNN跟我們之前學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò),也沒(méi)有很大的差別。

          傳統(tǒng)的神經(jīng)網(wǎng)絡(luò),其實(shí)就是多個(gè)FC層疊加起來(lái)

          CNN,無(wú)非就是把FC改成了CONV和POOL,就是把傳統(tǒng)的由一個(gè)個(gè)神經(jīng)元組成的layer,變成了由filters組成的layer。

          那么,為什么要這樣變?有什么好處?

          具體說(shuō)來(lái)有兩點(diǎn):

          1.參數(shù)共享機(jī)制(parameters sharing)

          我們對(duì)比一下傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的層和由filters構(gòu)成的CONV層:
          假設(shè)我們的圖像是8×8大小,也就是64個(gè)像素,假設(shè)我們用一個(gè)有9個(gè)單元的全連接層:

          那這一層我們需要多少個(gè)參數(shù)呢?需要 64×9 = 576個(gè)參數(shù)(先不考慮偏置項(xiàng)b)。因?yàn)槊恳粋€(gè)鏈接都需要一個(gè)權(quán)重w。

          那我們看看 同樣有9個(gè)單元的filter是怎么樣的:

          其實(shí)不用看就知道,有幾個(gè)單元就幾個(gè)參數(shù),所以總共就9個(gè)參數(shù)

          因?yàn)椋瑢?duì)于不同的區(qū)域,我們都共享同一個(gè)filter,因此就共享這同一組參數(shù)。這也是有道理的,通過(guò)前面的講解我們知道,filter是用來(lái)檢測(cè)特征的,那一個(gè)特征一般情況下很可能在不止一個(gè)地方出現(xiàn),比如“豎直邊界”,就可能在一幅圖中多出出現(xiàn),那么 我們共享同一個(gè)filter不僅是合理的,而且是應(yīng)該這么做的。

          由此可見(jiàn),參數(shù)共享機(jī)制,讓我們的網(wǎng)絡(luò)的參數(shù)數(shù)量大大地減少。這樣,我們可以用較少的參數(shù),訓(xùn)練出更加好的模型,典型的事半功倍,而且可以有效地 避免過(guò)擬合

          同樣,由于filter的參數(shù)共享,即使圖片進(jìn)行了一定的平移操作,我們照樣可以識(shí)別出特征,這叫做 “平移不變性”。因此,模型就更加穩(wěn)健了。

          2.連接的稀疏性(sparsity of connections)

          由卷積的操作可知,輸出圖像中的任何一個(gè)單元,只跟輸入圖像的一部分有關(guān)系:

          而傳統(tǒng)神經(jīng)網(wǎng)絡(luò)中,由于都是全連接,所以輸出的任何一個(gè)單元,都要受輸入的所有的單元的影響。這樣無(wú)形中會(huì)對(duì)圖像的識(shí)別效果大打折扣。比較,每一個(gè)區(qū)域都有自己的專屬特征,我們不希望它受到其他區(qū)域的影響。

          正是由于上面這兩大優(yōu)勢(shì),使得CNN超越了傳統(tǒng)的NN,開(kāi)啟了神經(jīng)網(wǎng)絡(luò)的新時(shí)代。

          好了,今天的文章到此結(jié)束!今天是我畫(huà)圖最累的一次,不過(guò)也畫(huà)的最有成就感的一次!沒(méi)想到用PowerPoint也可以畫(huà)出這么好看的圖hhh,讓我自己得意一下~~

          如果覺(jué)得有用,就請(qǐng)分享到朋友圈吧!

          △點(diǎn)擊卡片關(guān)注極市平臺(tái),獲取最新CV干貨

          公眾號(hào)后臺(tái)回復(fù)“長(zhǎng)尾”獲取長(zhǎng)尾特征學(xué)習(xí)資源~


          極市干貨
          YOLO教程:一文讀懂YOLO V5 與 YOLO V4大盤點(diǎn)|YOLO 系目標(biāo)檢測(cè)算法總覽全面解析YOLO V4網(wǎng)絡(luò)結(jié)構(gòu)
          實(shí)操教程:PyTorch vs LibTorch:網(wǎng)絡(luò)推理速度誰(shuí)更快?只用兩行代碼,我讓Transformer推理加速了50倍PyTorch AutoGrad C++層實(shí)現(xiàn)
          算法技巧(trick):深度學(xué)習(xí)訓(xùn)練tricks總結(jié)(有實(shí)驗(yàn)支撐)深度強(qiáng)化學(xué)習(xí)調(diào)參Tricks合集長(zhǎng)尾識(shí)別中的Tricks匯總(AAAI2021
          最新CV競(jìng)賽:2021 高通人工智能應(yīng)用創(chuàng)新大賽CVPR 2021 | Short-video Face Parsing Challenge3D人體目標(biāo)檢測(cè)與行為分析競(jìng)賽開(kāi)賽,獎(jiǎng)池7萬(wàn)+,數(shù)據(jù)集達(dá)16671張!


          CV技術(shù)社群邀請(qǐng)函 #

          △長(zhǎng)按添加極市小助手
          添加極市小助手微信(ID : cvmart2)

          備注:姓名-學(xué)校/公司-研究方向-城市(如:小極-北大-目標(biāo)檢測(cè)-深圳)


          即可申請(qǐng)加入極市目標(biāo)檢測(cè)/圖像分割/工業(yè)檢測(cè)/人臉/醫(yī)學(xué)影像/3D/SLAM/自動(dòng)駕駛/超分辨率/姿態(tài)估計(jì)/ReID/GAN/圖像增強(qiáng)/OCR/視頻理解等技術(shù)交流群


          每月大咖直播分享、真實(shí)項(xiàng)目需求對(duì)接、求職內(nèi)推、算法競(jìng)賽、干貨資訊匯總、與 10000+來(lái)自港科大、北大、清華、中科院、CMU、騰訊、百度等名校名企視覺(jué)開(kāi)發(fā)者互動(dòng)交流~



          覺(jué)得有用麻煩給個(gè)在看啦~  
          瀏覽 81
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲无码蜜桃传媒 | 网站18禁看黄 | 天天做天天爱天天综合 | 天天爽天天干成人av一区二区三区 | 一级a片欧美 |