多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > CS231n 卷積神經網絡與計算機視覺 9 卷積神經網絡結構分析

CS231n 卷積神經網絡與計算機視覺 9 卷積神經網絡結構分析

來源:程序員人生   發布時間:2016-06-01 17:27:08 閱讀次數:3871次

終究進入我們的主題了ConvNets或CNNs,它的結構和普通神經網絡都1樣,之前我們學習的各種技能方法都適用,其主要不同的地方在于:
ConvNet假定輸入的是圖片,我們根據圖片的特性對網絡進行設定以到達提高效力,減少計算參數量的目的。

1. 結構總覽

首先我們分析下傳統神經網絡對圖片的處理,如果還是用CIFAR⑴0上的圖片,共3072個特點,如果普通網絡結構輸入那末第1層的每個神經單元都會有3072個權重,如果更大的像素的圖片進入后參數更多,而且用于圖片處理的網絡1般深度達10層之上,加在1起參數的量實在太大,參數過量也會造成過擬合,而且圖片也有本身的特點,我們需要利用這些特點,將傳統網絡改革,加快處理速度和精確度。
我們注意到圖片的像素是由3個通道構成的,我們就利用了這個特點將其神經元安置到了3維空間(width, height, depth),分別對應著圖片的32x32x3(以CIFAR為例)以下圖:
這里寫圖片描述
紅色是輸入層這里的深度是3,輸出層是1x1x10的結構。其他幾層的含義后面會介紹,現在先知道每層都是height × width × depth結構

2. 卷積神經網絡的層

卷積神經網絡有3種層:卷積層、池化層和全連接層(Convolutional Layer, Pooling Layer, 及 Fully-Connected Layer)。
以處理CIFAR⑴0的卷積神經網絡為例,簡單的網絡應包括這幾層:
[INPUT - CONV - RELU - POOL - FC]也就是[輸入-卷積-激活-池化-分類得分],各層分述以下:

  • INPUT [32x32x3] 輸入長32寬32帶有3個通道的圖片
  • CONV :計算圖片的局部區域,如果我們想要使用12個過濾器fliters,他的體積將是 [32x32x12].
  • RELU :還是1個鼓勵層max(0,x) ,尺寸還是 ([32x32x12]).
  • POOL: 沿著圖片的(width, height)采樣, 減小長寬的維度,例如得到的結果是 [16x16x12].
  • FC (i.e. fully-connected) 計算分類得分終究尺寸是 [1x1x10], 這層是全連接的,每個單元都與前1層的各個單元連接。

注意:
1. 卷及神經網絡包括不同的層 (e.g. CONV/FC/RELU/POOL 也是最受歡迎的)
2. 每層都輸入輸出3d結構的數據,除最后1層
3. 有些層可能沒有參數,有些層可能有參數 (e.g. CONV/FC do, RELU/POOL don’t)
4. 有些層可能有超參數有些層也可能沒有超參數(e.g. CONV/FC/POOL do, RELU doesn’t)
下圖是1個例子,沒法用3維表示只能展成1列的情勢了。
這里寫圖片描述
下面展開討論各層具體細節:

2.1 卷積層

卷積層是卷積神經網絡的核心層,大大提高了計算效力。
卷積層由很多過濾器組成,每一個過濾器都只有1小部份,每次只與原圖象上的1小部份連接,UFLDL上的圖:
這里寫圖片描述
這是1個過濾器不停滑動的結果,
我們這里要更深入些,我們輸入的圖象是1個3維的,那末每一個過濾器也是有3個維度,假定我們的過濾器是5x5x3的那末我們也會得到1個類似于上圖的激活值的映照也就是convolved feature 下圖中叫作 activion map,其計算方法是wT×x+b其中w是5x5x3=75個數據,也就是權重,他是可以調理的。
我們可以有多個過濾器:

這里寫圖片描述
更深入1些,當我們滑動的時候有3個超參數:
1. 深度,depth,這是過濾器的數量決定的。
2. 步長,stride,每次滑動的間隔,上面的動畫每次只滑動1個數,也就是步長為1.
3. 補零數, zero-padding,有時候根據需要,會用零來拓展圖象的面積,如果補零數為1,變長就+2,以下圖中灰色的部份就是補的0
這里寫圖片描述
下面是1個1維的例子:
這里寫圖片描述
其輸出的空間維度計算公式是

(W?F+2P)/S+1

其中w是輸入的尺寸,f是過濾器的尺寸,p是補零的尺寸,s是步長,圖中如果補零為1那末輸出為5個數,步長為2輸出為3個數。
到現在為止我們好像都沒有觸及到神經這個概念哇,現在我們就從神經角度來理解:
上面提到每個激活值都是:wT×x+b,這個公式我們熟習哇,這就是神經元的得分公式呀,所以我們可以將每個 activation map 其看作是nxn個神經元的杰作,他們始終與1部份局部連接,如果有5個過濾器,就會有5個不同的神經元同時連接1個部份。
卷積神經網絡還有1個重要的特點:權重同享:在同1個filter上的不同的神經單元的權重是相同的。這樣以來大大減少了權重的數量。
這樣每層權重相同,每個過濾器計算的結果都是1個卷積(后來還會加1個偏差b):
這里寫圖片描述
這也是卷積神經網絡的名字的來源。
現在看這張圖片應當可以看懂了:
這里寫圖片描述
(gif來自寒小陽的博客)
雖然這里吧每個filter的權重w變成而來3部份,但是在神經元里還是用了wx+b的情勢。
- 反向傳播:這類卷積的反向傳播還是卷積,計算進程也比較簡便
- 1x1 convolution:1些文章用了1*1的卷積, 比如最開始的Network in Network. 這樣可以有效的做多個內積, 輸入有3層,那末每層最少要有3個w,也就是把上面的動態圖的filter變成1x1x3.
-Dilated convolutions.最近又有研究(e.g. see paper by Fisher Yu and Vladlen Koltun) 對卷積層添加了1個超參數:dilation。這是對filter的進1步控制,我們開1下效果:dilation等于0時,這樣計算卷積w[0]x[0] + w[1]x[1] + w[2]x[2];dilation =1時變成了這樣w[0]x[0] + w[1]x[2] + w[2]x[4];也就是我們要處理的圖象中每一個隔了個1. 這就允許了利用更少的層來融會空間信息. 例如我們用了兩個 3x3 CONV layers在最頂層 ,這是第2層起到了 感受5x5 ( effective receptive field)的作用. 如果使用dilated convolutions 那末這個effective receptive field會以指數情勢增長.

2.2 池化層

上面可以知道在卷積層以后得到的結果還是挺多,而且由于滑動窗口的存在,很多信息也有重合,因而有了池化pooling 層,他是將卷積層得到的結果無重合的分來幾部份,然后選擇每部份的最大值,或平均值,或2范數,或其他你喜歡的值,我們以取最大值的max pool為例:
這里寫圖片描述
- 反向傳播:最大值的梯度我們之前在反向傳播的時候就已學習過了,這里1般都跟蹤最大的激活值,這樣在反向傳播的時候會提高效力.
- Getting rid of pooling. 1些人認為pooling是沒有必要的,如The All Convolutional Net ,很多人認為沒有池層對生成式模型(generative models)很重要,仿佛以后的發展中,池層可能會逐步減少或消失。

2.3 其他層

  1. Normalization Layer,之前的時候用normalization 層的摹擬人腦的抑制作用,但是逐步認為沒有多大的幫助,因而用的少了,這篇論文里有介紹其作用 Alex Krizhevsky’s cuda-convnet library API.
  2. Fully-connected layer,這個全連接層和之前學過的1樣,前面提到過最后的分類層是全連接層。

2.4 Converting FC layers to CONV layers

全連接層和卷積層除連接方式不1樣,其計算方式都是內積,可以相互轉換:
1. FC如果做CONV layer 的工作就相當于其矩陣的多數位置都是0(稀疏矩陣)。
2. FC layer 如果被轉變成 CONV layer. 相當于每層的局部連接變成了全部鏈接如FC layer with K=4096的輸入是7×7×512那末對應的卷積層為 F=7,P=0,S=1,K=4096輸出為1×1×4096。
例子:
假定1個cnn輸入 224x224x3圖象,經過若干變化以后某1層輸出 7x7x512 到這里以后使用兩4096的FC layer及最后1個1000的FC計算分類得分下面是把這3層fc轉化為Conv 的進程:
1. 使用 F=7的conv layer 輸出為 [1x1x4096];
2. 使用F=1的過濾器,輸出為 [1x1x4096];
3. 使用F=1的卷積層,輸出為 [1x1x1000]。

每次轉化都會將FC的參數轉變成conv的參數情勢. 如果在轉變后的系統中傳入更大的圖片,也會非常快速的向前運算。例如將384x384的圖象輸入上面的系統,會在最后3層之前得到[12x12x512]的輸出, 經過上面轉化的conv 層會得到 [6x6x1000], ((12 - 7)/1 + 1 = 6). 我們1下就得出了6x6的分類結果。
這樣1次得到的比原來使用迭代36次得到的要快。這是實際利用中的技能。
另外我們可以用兩次步長16的卷積層代替1次步長為32的卷積層來輸入上面的圖片,提高效力。

3 搭建卷積神經網絡

下面我們就用CONV, POOL,FC ,RELU 搭建1個卷積神經網絡:

3.1 層次結構

我們依照以下結構搭建

INPUT -> [[CONV -> RELU]*N -> POOL?]*M -> [FC -> RELU]*K -> FC

其中N >= 0 (1般N <= 3), M >= 0, K >= 0 (1般K < 3).
這里要注意:我們更偏向于使用多層小size的CONV。
為何呢?
比如3個3x3的和1個7x7的conv層,他們都可以 得到7x7的receptive fields.但是3x3的有以下優點:
1. 3層的非線性組合要比1層線性組合表達能力強;
2. 3層小尺寸的卷積層的參數數量要少,3x3x3<7x7;
3. 反向傳播中我們需要使用更多的內存來貯存中間層結果。

值得注意的是Google’s Inception architectures 及Residual Networks from Microsoft Research Asia. Both 等創造了相比以上結構更加復雜的連接結構。

3.2 層的大小

  1. 輸入層:輸入層1般是2的指數情勢比如 32 (e.g. CIFAR⑴0), 64, 96 (e.g. STL⑴0), or 224 (e.g. common ImageNet ConvNets), 384, 512等.
  2. 卷積層:1般是小的過濾器比如3x3或最大 5x5,步長設為1,當加入補零時卷積層可能不會改變輸入的尺寸,如果必須使用大的過濾器,那末常常在第1層使用補零的方法P=(F?1)/2。
  3. 池化層:常見的設置是使用2x2的最大池化層,很少有超過3x3的最大池化層。
  4. 如果我們的步長大于1或沒有補零,我們需要非常注意看是不是我們的步長和顧慮器是不是足夠硬朗,我們的網絡是不是均勻對稱連接。
  5. 步長為1表現更好,對池化也更有兼容新.
  6. 補零的好處:如果不補零那末邊沿的信息會很快被拋棄
  7. 要斟酌到電腦的內存限制。例如輸入 224x224x3 圖片,過濾器為 3x3 共64 filters,padding 為1 這樣每張圖片需要72MB 內存 ,但是GPU上運行的話,內存可能不夠所以可能會調劑下參數比如 filter為 7x7,stride 為 2 (ZF net). 或filer11x11 , stride of 4.(AlexNet)

3.3 案例

  1. LeNet. 第1個成功利用的cnn( Yann LeCun in 1990’s). 他的強項是杜zip codes, digits, etc.
  2. AlexNet. 第1個廣泛的利用于計算機視覺, (by Alex Krizhevsky, Ilya Sutskever and Geoff Hinton). ImageNet ILSVRC challenge in 2012 大放異彩,與LeNet結構類似不過更深更大,多層卷積層疊加。
  3. ZF Net. The ILSVRC 2013 winner ( Matthew Zeiler and Rob Fergus). It became known as the ZFNet (short for Zeiler & Fergus Net).調劑了Alexnet的結構參數, 擴大了中間卷積層 使第1層的過濾器和步長都減小了.
  4. GoogLeNet. The ILSVRC 2014 winner(Szegedy et al. from Google.) 極大的減少了參數數量 (由 60M到4M). 使用Average Pooling代替了 ConvNet的第1個FC層, 消除大量的參數,有很多的變體如:Inception-v4.
  5. VGGNet. The runner-up in ILSVRC 2014 ( Karen Simonyan and Andrew Zisserman )證明了深度的好處. 可以在Caffe上使用. 但是參數太多,(140M),計算量大 . 不過現在已正實有很多不需要的參數可以去除。
  6. ResNet. (Kaiming He et al).winner of ILSVRC 2015. 截止2016年5月10,這是1種最早進的模型. 現在也有了改進版 Identity Mappings in Deep Residual Networks (published March 2016).
    其中VGG的計算花費為:
INPUT: [224x224x3] memory: 224*224*3=150K weights: 0 CONV3-64: [224x224x64] memory: 224*224*64=3.2M weights: (3*3*3)*64 = 1,728 CONV3-64: [224x224x64] memory: 224*224*64=3.2M weights: (3*3*64)*64 = 36,864 POOL2: [112x112x64] memory: 112*112*64=800K weights: 0 CONV3-128: [112x112x128] memory: 112*112*128=1.6M weights: (3*3*64)*128 = 73,728 CONV3-128: [112x112x128] memory: 112*112*128=1.6M weights: (3*3*128)*128 = 147,456 POOL2: [56x56x128] memory: 56*56*128=400K weights: 0 CONV3-256: [56x56x256] memory: 56*56*256=800K weights: (3*3*128)*256 = 294,912 CONV3-256: [56x56x256] memory: 56*56*256=800K weights: (3*3*256)*256 = 589,824 CONV3-256: [56x56x256] memory: 56*56*256=800K weights: (3*3*256)*256 = 589,824 POOL2: [28x28x256] memory: 28*28*256=200K weights: 0 CONV3-512: [28x28x512] memory: 28*28*512=400K weights: (3*3*256)*512 = 1,179,648 CONV3-512: [28x28x512] memory: 28*28*512=400K weights: (3*3*512)*512 = 2,359,296 CONV3-512: [28x28x512] memory: 28*28*512=400K weights: (3*3*512)*512 = 2,359,296 POOL2: [14x14x512] memory: 14*14*512=100K weights: 0 CONV3-512: [14x14x512] memory: 14*14*512=100K weights: (3*3*512)*512 = 2,359,296 CONV3-512: [14x14x512] memory: 14*14*512=100K weights: (3*3*512)*512 = 2,359,296 CONV3-512: [14x14x512] memory: 14*14*512=100K weights: (3*3*512)*512 = 2,359,296 POOL2: [7x7x512] memory: 7*7*512=25K weights: 0 FC: [1x1x4096] memory: 4096 weights: 7*7*512*4096 = 102,760,448 FC: [1x1x4096] memory: 4096 weights: 4096*4096 = 16,777,216 FC: [1x1x1000] memory: 1000 weights: 4096*1000 = 4,096,000 TOTAL memory: 24M * 4 bytes ~= 93MB / image (only forward! ~*2 for bwd) TOTAL params: 138M parameters

注意到內存使用最多的時候在開始幾個CONV layers, 參數基本都在最后幾個FC層第1個FC有100M個!

3.4 內存使用

內存主要在以下幾個方面消耗較多
1. 大量的激活值和梯度值。測試時可以只貯存當前的激活值拋棄之前的在下方幾層激活值會大大減少激活值的貯存量。
2. 參數的貯存,在反向傳播時的梯度及使用 momentum, Adagrad, or RMSProp時的緩存都會占用貯存,所以估計參數使用的內存時1般最少要乘以3倍
3. 每次網絡運行都要記住各種信息比如圖形數據的批量等
如果估計網絡需要的內存太大,可以適當減小圖片的batch,畢竟激活值占用了大量的內存空間。

其他資料

  1. Soumith benchmarks for CONV performance
  2. ConvNetJS CIFAR⑴0 demo 閱讀器的ConvNets實時演示.
  3. Caffe,流行的ConvNets工具
  4. State of the art ResNets in Torch7

總結

  • 結構總覽
  • 卷積神經網絡的層
  • 1 卷積層
    • 2 池化層
    • 3 其他層
    • 4 Converting FC layers to CONV layers
  • 搭建卷積神經網絡
    • 1 層次結構
    • 2 層的大小
    • 3 案例
    • 4 內存使用
  • 其他資料

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲人xxx | 456亚洲人成在线播放网站 | 亚洲国产欧美日韩一区二区三区 | 欧美精品亚洲精品日韩一区 | 波多野结衣手机在线视频 | 免费视频www | 最近最新中文字幕免费高清1 | 伊人网视频在线 | 黄色的网站免费观看 | 欧美激情伦妇在线观看 | 国产乱通伦 | 亚洲精品一区二区三区不卡 | 欧美又粗又长又爽做受 | www.免费黄色 | 黑人群姣中国妞在线观看 | 精品日韩欧美一区二区三区在线播放 | 日本一本视频 | 最近最新中文字幕大全手机在线 | 中文字幕乱码在线 | 麻豆精品不卡国产免费看 | 波多野结衣一区2区3区 | 色婷婷影院在线视频免费播放 | 国产精品精品 | 亚洲欧美精品一区天堂久久 | 欧美一级性视频 | 波多野结衣一区免费作品 | japanesexxx在线播放 | 免费jlzzjlzz在线播放视频 | 熟妇毛片| 加勒比一道本综合 | 精品国产一区二区三区免费看 | 欧美 亚洲 中文字幕 | 国产h肉在线视频免费观看 国产h视频 | 麻豆19禁国产青草精品 | 日本特黄特色大片免费播放视频 | 伊人成人久久 | 中文字幕35页 | 亚洲国产欧美在线人网站 | 免费观看又污又黄网站日本 | 波多野结衣手机视频一区 | www.欧美黄色|