日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

经典网络DenseNet介绍

發布時間:2023/12/15 综合教程 59 生活家
生活随笔 收集整理的這篇文章主要介紹了 经典网络DenseNet介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

經典網絡DenseNet(Dense Convolutional Network)由Gao Huang等人于2017年提出,論文名為:《Densely Connected Convolutional Networks》,論文見:https://arxiv.org/pdf/1608.06993.pdf

DenseNet以前饋的方式(feed-forward fashion)將每個層與其它層連接起來。在傳統卷積神經網絡中,對于L層的網絡具有L個連接,而在DenseNet中,會有L(L+1)/2個連接。每一層的輸入來自前面所有層的輸出。

DenseNet網絡:

(1).減輕梯度消失(vanishing-gradient)。

(2).加強feature傳遞。

(3).鼓勵特征重用(encourage feature reuse)。

(4).較少的參數數量。

Dense Block:像GoogLeNet網絡由Inception模塊組成、ResNet網絡由殘差塊(Residual Building Block)組成一樣,DenseNet網絡由Dense Block組成,論文截圖如下所示:每個層從前面的所有層獲得額外的輸入,并將自己的特征映射傳遞到后續的所有層,使用級聯(Concatenation)方式,每一層都在接受來自前幾層的”集體知識(collective knowledge)”。增長率(growth rate)是每個層的額外通道數。

Growth rate:如果每個函數產生個feature-maps,那么第層產生個feature-maps。是輸入層的通道數。將超參數稱為網絡的增長率。

DenseNet Basic Composition Layer:BatchNorm(BN)-ReLu-3*3 Conv

DenseNet-B(Bottleneck Layers):在BN-ReLu-3*3 Conv之前進行BN-ReLU-1*1 Conv操作,減少feature maps size。

Transition Layer(過渡層):采用1*1 Conv和2*2平均池化作為相鄰Dense Block之間的轉換層,減少feature map數和縮小feature map size,size指width*height。在相鄰Dense Block中輸出的feature map size是相同的,以便它們能夠很容易的連接在一起。

DenseNet-BC:如果Dense Block包含個feature-maps,則Transition Layer生成輸出feature maps,其中<img src="https://img.api-racing.com/2023/02/20230214101956328.png" title="" alt="0<\theta <img onload="Wpfcll.r(this,true);" src="https://javaforall.cn/wp-content/plugins/wp-fastest-cache-premium/pro/images/blank.gif" class="j-lazy" data-wpfc-original-src="http://javaforall.cn/wp-content/uploads/2020/11/2020110816061913.jpg" data-original="https://img.api-racing.com/2023/02/20230214101956328.png" title="" alt="0<\theta 稱為壓縮因子。當時,通過Transition Layers的feature-maps數保持不變。當<img src="https://img.api-racing.com/2023/02/20230214101956328.png" title="" alt="\theta <img onload="Wpfcll.r(this,true);" src="https://javaforall.cn/wp-content/plugins/wp-fastest-cache-premium/pro/images/blank.gif" class="j-lazy" data-wpfc-original-src="http://javaforall.cn/wp-content/uploads/2020/11/2020110816061913.jpg" data-original="https://img.api-racing.com/2023/02/20230214101956328.png" title="" alt="\theta 時,稱為DenseNet-C,在實驗中。當同時使用Bottleneck和<img src="https://img.api-racing.com/2023/02/20230214101956328.png" title="" alt="\theta <img onload="Wpfcll.r(this,true);" src="https://javaforall.cn/wp-content/plugins/wp-fastest-cache-premium/pro/images/blank.gif" class="j-lazy" data-wpfc-original-src="http://javaforall.cn/wp-content/uploads/2020/11/2020110816061913.jpg" data-original="https://img.api-racing.com/2023/02/20230214101956328.png" title="" alt="\theta 的Transition Layers時,稱為DenseNet-BC。

下圖是一個DenseNet結構圖,來自于論文:使用了3個Dense Blocks。DenseNet由多個Desne Block組成。每個Dense Block中的feature-map size相同。兩個相鄰Dense Block之間的層稱為Transition Layers。通過卷積和池化來更改feature-map size。

論文中給出了4種層數的DenseNet,論文截圖如下所示:所有網絡的增長率是32,表示每個Dense Block中每層輸出的feature map個數。

DenseNet-121、DenseNet-169等中的數字121、169是如何計算出來的:以121為例,1個卷積(Convolution)+6個Dense Block*2個卷積(1*1、3*3)+1個Transition Layer(1*1 conv)+12個Dense Block*2個卷積(1*1、3*3)+ 1個Transition Layer(1*1 conv)+24個Dense Block*2個卷積(1*1、3*3)+ 1個Transition Layer(1*1 conv)+ 16個Dense Block*2個卷積(1*1、3*3)+最后的1個全連接層=121。這里的層僅指卷積層和全連接層,其它類型的層并沒有計算在內

公式表示:其中表示非線性轉換函數

(1).傳統的網絡在層的輸出為:

(2).ResNet在l層的輸出為:

(3).DenseNet在l層的輸出為:

假如輸入圖像大小為n*n,過濾器(filter)為f*f,padding為p,步長(stride)為s,則輸出大小為:計算卷積層大小,如果商不是整數,向下取整,即floor函數;計算池化層大小,如果商不是整數,向上取整,即ceil函數。參考:https://blog.csdn.net/fengbingchun/article/details/80262495

在https://github.com/fengbingchun/Caffe_Test/tree/master/test_data/Net/DenseNet 上整理了DenseNet prototxt文件。

這里描述下DenseNet-121架構:k=32,與上表中”DenseNet-121″有所差異

(1).輸入層(Input):圖像大小為224*224*3。

(2).卷積層Convolution+BatchNorm+Scale+ReLU:使用64個7*7的filter,stride為2,padding為3,輸出為112*112*64,64個feature maps。

(3).Pooling:最大池化,filter為3*3,stride為2,padding為1,輸出為57*57*64,64個feature maps。

(4).Dense Block1:輸出為57*57*(64+32*6)=57*57*256,256個feature maps。

連續6個Dense Block,每個Dense Block包含2層卷積,卷積kernel大小依次為1*1、3*3,在卷積前進行BatchNorm+Scale+ReLU操作,第1、2個卷積輸出feature maps分別為128、32。因為k=32,所以每個Dense Block輸出feature maps數會比上一個Dense Block多32。每個Dense Block后做Concat操作。

(5).Transition Layer1:輸出為29*29*128,128個feature maps。

A.BatchNorm+Scale+ReLU+1*1 conv,輸出57*57*128。

B.平均池化,filter為2*2,stride為2,輸出29*29*128。

(6).Dense Block2:輸出為29*29*(128+32*12)=29*29*512,512個feature maps。

連續12個Dense Block,每個Dense Block包含2層卷積,卷積kernel大小依次為1*1、3*3,在卷積前進行BatchNorm+Scale+ReLU操作,第1、2個卷積輸出feature maps分別為128、32。因為k=32,所以每個Dense Block輸出feature maps數會比上一個Dense Block多32。每個Dense Block后做Concat操作。

(7).Transition Layer2:輸出為15*15*256,256個feature maps。

A.BatchNorm+Scale+ReLU+1*1 conv,輸出29*29*256。

B.平均池化,filter為2*2,stride為2,輸出15*15*256。

(8).Dense Block3:輸出為15*15*(256+32*24)=15*15*1024,1024個feature maps。

連續24個Dense Block,每個Dense Block包含2層卷積,卷積kernel大小依次為1*1、3*3,在卷積前進行BatchNorm+Scale+ReLU操作,第1、2個卷積輸出feature maps分別為128、32。因為k=32,所以每個Dense Block輸出feature maps數會比上一個Dense Block多32。每個Dense Block后做Concat操作。

(9).Transition Layer3:輸出為8*8*512,512個feature maps。

A.BatchNorm+Scale+ReLU+1*1 conv,輸出15*15*512。

B.平均池化,filter為2*2,stride為2,輸出8*8*512。

(10).Dense Block4:輸出為8*8*(512+32*16)=8*8*1024,1024個feature maps。

連續16個Dense Block,每個Dense Block包含2層卷積,卷積kernel大小依次為1*1、3*3,在卷積前進行BatchNorm+Scale+ReLU操作,第1、2個卷積輸出feature maps分別為128、32。因為k=32,所以每個Dense Block輸出feature maps數會比上一個Dense Block多32。每個Dense Block后做Concat操作。

(11).Classification Layer:

A.平均池化:filter為8*8,stride為1,padding為0,輸出為1*1*1024,1024個feature maps。

B.卷積:kernel大小為1*1,輸出1000個feature maps。

C.輸出層(Softmax):輸出分類結果,看它究竟是1000個可能類別中的哪一個。

可視化結果如下圖所示:

GitHub:https://github.com/fengbingchun/NN_Test

總結

以上是生活随笔為你收集整理的经典网络DenseNet介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。