-
當(dāng)前位置:首頁(yè) > 創(chuàng)意學(xué)院 > 營(yíng)銷推廣 > 專題列表 > 正文
resnet參數(shù)量(resnet參數(shù)量計(jì)算)
大家好!今天讓創(chuàng)意嶺的小編來(lái)大家介紹下關(guān)于resnet參數(shù)量的問(wèn)題,以下是小編對(duì)此問(wèn)題的歸納整理,讓我們一起來(lái)看看吧。
開(kāi)始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,有小程序、在線網(wǎng)頁(yè)版、PC客戶端和批量生成器
問(wèn)友Ai官網(wǎng):https://ai.de1919.com。
本文目錄:
resnet數(shù)據(jù)尺寸為單數(shù)
ResNet論文:https://arxiv.org/abs/1512.03385
本文主要參考視頻:https://www.bilibili.com/video/BV1T7411T7wa
https://www.bilibili.com/video/BV14E411H7Uw
結(jié)構(gòu)概況
ResNet的網(wǎng)絡(luò)結(jié)構(gòu)圖如圖所示:
這是ResNet不同層數(shù)的網(wǎng)絡(luò) 結(jié)構(gòu)圖。
可以看到,結(jié)構(gòu)大差不差。不論是18層、34層、50層、還是101層、152層。
上來(lái)都是一個(gè)7x7的卷積層,然后是一個(gè)3x3的最大池化下采樣。
然后就是按照?qǐng)D中的conv2_x、conv3_x、conv4_x、conv5_x中的殘差結(jié)構(gòu)。
最后再跟一個(gè)平均池化下采樣,和全連接層,sofmax輸出。
conv1與池化層
我們先看一下前兩層。
首先呢,ResNet使用ImagesNet數(shù)據(jù)集,采用的默認(rèn)輸入尺寸是224x224,RGB圖像,三通道
按照表中,我們可以看到,圖片輸入之后,首先是一個(gè)7x7,64,stride 2
也就是一個(gè)卷積層,卷積核大小為7x7,輸出通道為64(也就是卷積核個(gè)數(shù)),stride=2。
沒(méi)說(shuō)padding,我們需要自己算一下,表里寫(xiě)了這一層的輸出是112x112
補(bǔ)充一點(diǎn)知識(shí):
假設(shè)輸入圖片為 W x W 卷積核大小為F x F,步長(zhǎng)stride=S,padding=P(填充的像素?cái)?shù))
則輸出圖像的大小 W2 =(W - F +2P)/S +1
可以注意到這個(gè)公式中有除法,一般我們做卷積時(shí)除不盡的時(shí)候都向下取整
可以參考pytorch官方文檔:https://pytorch.org/docs/stable/generated/torch.nn.Conv2d.html#torch.nn.Conv2d
但是我們做池化的時(shí)候,也可以采用向上取整
參看pytorch官方文檔:https://pytorch.org/docs/stable/generated/torch.nn.MaxPool2d.html#torch.nn.MaxPool2d
有一個(gè)參數(shù)ceil_mode,默認(rèn)是floor是向下取整,可以設(shè)置為T(mén)rue,向上取整
ceil_mode – when True, will use ceil instead of floor to compute the output shape
有的時(shí)候池化會(huì)選擇向上取整(最大池化和平均池化有時(shí)取整方式不同)
那就是說(shuō) 112 = (224 - 7 + 2P)/ 2 + 1
化簡(jiǎn)后就是 111 = (217 + 2P)/2 = 108.5+P
所以P=3 所以Padding是3
所以我們輸入圖片進(jìn)來(lái),第一層是in_channel=3,out_channel=64,kernel_size=7,stride=2,padding=3
沒(méi)有偏置bias。經(jīng)過(guò)這一層我們會(huì)得到大小為112x112的尺寸,通道數(shù)為64
然后經(jīng)過(guò)一個(gè)3x3的最大池化下采樣,stride=2
W o u t = ( W i n − F + 2 P ) / S + 1 W_{out}= (W_{in} - F + 2P)/S + 1 W
out
=(W
in
−F+2P)/S+1
池化層也采用向下取整。所以 56=(112 - 3 + 2P)/2 +1 計(jì)算出來(lái)P=1
所以第二層池化層是in_channel=64,out_channel=64,kernel_size=3,stride=2,padding=1
經(jīng)過(guò)池化層,我們會(huì)得到一個(gè)56x56,64通道的輸出,緊接著就是conv2_x中對(duì)應(yīng)的一系列殘差結(jié)構(gòu)
殘差結(jié)構(gòu)
經(jīng)過(guò)前面兩層,我們得到一個(gè)56x56,64通道的輸出
緊接著是conv2_x
這就是殘差塊,殘差塊大致有兩種類型,一種是兩層卷積的,一種的三層卷積的,就是途中紅框畫(huà)的。
比如如果是ResNet34,那么池化層之后,就是兩個(gè)3x3,64的卷積層,這兩個(gè)組成一個(gè)殘差塊。
如果是ResNet50,那么池化層之后就是1x1,64的卷積層 + 3x3,64的卷積層 + 1x1,256的卷積層,三個(gè)組成一個(gè)殘差塊。
后面寫(xiě)的x3就代表有三個(gè)這樣的殘差塊連接一起
如下圖所示,關(guān)于殘差結(jié)構(gòu)的原理,不多說(shuō)了,這里主要講實(shí)現(xiàn)。
有幾個(gè)點(diǎn)需要注意:
以ResNet34為例,按照表格里面寫(xiě)的,池化之后,我們的大小是56x56x64,那么經(jīng)過(guò)conv2_x之后我們的輸出還是56x56x64
輸入和輸出特征矩陣的大小一樣,那么就說(shuō)明stride=1,padding=1
因?yàn)楣?W o u t = ( W i n − F + 2 P ) / S + 1 W_{out}= (W_{in} - F + 2P)/S + 1 W
out
=(W
in
−F+2P)/S+1
要保證一樣,那就S=1,不然的話,大于1就沒(méi)法一樣,然后計(jì)算padding可知,也是1
所以經(jīng)過(guò)這兩層之后呢,得到的還是56x56x64的特征圖,可以直接與殘差塊那個(gè)分支相加。
但是呢這里需要注意,我們看conv3_x,是3x3,128通道,也就是說(shuō)經(jīng)過(guò)conv2_x后得到的56x56,64通道
到conv3_x里面升維了,并且大小也變了,變成28x28了
這時(shí)候要注意一個(gè)問(wèn)題,分支與主分支的結(jié)果就無(wú)法相加了,大小不一致,維度不一致啊
怎么辦呢,所以還有一種虛線連接的殘差塊,如圖
在分支里面做了一個(gè)1x1的卷積層,1x1的卷積層主要是用來(lái)升維和降維的。同時(shí)通過(guò)設(shè)置stride可以改變尺寸
所以就通過(guò)這個(gè)卷積層得到了28x28,128通道的特征圖,可以與主分支直接相加了
并且我們通過(guò)計(jì)算可以算出來(lái),殘差塊主分支padding=1,右邊的分支padding=2
對(duì)于ResNet50和101,深層次的ResNet也是按照這樣的方法處理的
但是注意啊,這種虛線結(jié)構(gòu)只是為了解決尺寸不一樣無(wú)法相加的情況
什么情況下需要用這個(gè)呢?
對(duì)于ResNet18和ResNet34而言,conv3_x,conv4_x和conv5_x的第一層才需要虛線結(jié)構(gòu)。
可以看到表里面,ResNet34的conv3_x的第一層會(huì)輸出28x28,128通道的,但是輸入是56x56,64通道的,所以需要虛線結(jié)構(gòu),而conv2_x不需要,因?yàn)檩斎胼敵鍪且粯拥摹?br/>而對(duì)于ResNet50和ResNet101,ResNet152而言,conv2_x和conv3_x,conv4_x和conv5_x的第一層都需要虛線結(jié)構(gòu)
因?yàn)镽esNet50從conv2_x開(kāi)始,輸入56x56,64通道,輸出是56x56,256通道的,所以conv2_x也需要虛線結(jié)構(gòu),不過(guò)這個(gè)虛線結(jié)構(gòu)只調(diào)整通道數(shù)即可。
所以,我們根據(jù)表格可以看到ResNet50中,conv3_x有四個(gè)殘差塊,這其中只有第一個(gè)會(huì)遇到尺寸不一樣的問(wèn)題,需要用虛線結(jié)構(gòu),別的都不需要。
同樣的,conv4_x和conv5_x的第一層也需要
另外再注意一個(gè)改進(jìn):
Batch Normalization
Batch Normalization的目的是使我們的一批(Batch)feature map滿足均值為0,方差為1的分布規(guī)律。
這里關(guān)于BN層的原理就不寫(xiě)了,可以看這個(gè)視頻和博客
https://www.bilibili.com/video/BV1T7411T7wa
https://blog.csdn.net/qq_37541097/article/details/104434557
我們需要知道的是
建議將bn層放在卷積層(Conv)和激活層(例如Relu)之間,且卷積層不要使用偏置bias
所以說(shuō),我們實(shí)際上的殘差網(wǎng)絡(luò)塊應(yīng)該是如圖,這個(gè)樣子的
總結(jié)
至此,整個(gè)ResNet的網(wǎng)絡(luò)結(jié)構(gòu)就清晰了。其中需要注意的點(diǎn)主要就是:
計(jì)算卷積過(guò)程中的參數(shù) W o u t = ( W i n − F + 2 P ) / S + 1 W_{out}= (W_{in} - F + 2P)/S + 1 W
out
=(W
in
−F+2P)/S+1
ResNet18層和34層conv3_x、conv4_x、conv5_x中的第一層需要用虛線結(jié)構(gòu)
ResNet50層、101層和152層中的conv2_x、conv3_x、conv4_x、conv5_x中的第一層都需要用虛線結(jié)構(gòu)
BN層放在卷積層(Conv)和Relu之間,且卷積層不要使用偏置bias
以上就是關(guān)于resnet參數(shù)量相關(guān)問(wèn)題的回答。希望能幫到你,如有更多相關(guān)問(wèn)題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。
推薦閱讀:
wordpress修改數(shù)據(jù)庫(kù)關(guān)聯(lián)(wordpress更換數(shù)據(jù)庫(kù))
怎么用coreldraw設(shè)計(jì)vi(怎么用coreldraw設(shè)計(jì)logo)
如何為企業(yè)進(jìn)行營(yíng)銷策劃(如何為企業(yè)進(jìn)行營(yíng)銷策劃工作)