卷積神經(jīng)網(wǎng)絡(luò)經(jīng)典模型及其改進(jìn)點(diǎn)學(xué)習(xí)匯總
經(jīng)典神經(jīng)網(wǎng)絡(luò)的改進(jìn)點(diǎn)
名稱 | 改進(jìn)點(diǎn) |
---|---|
VGG16 | 1、使用非常多的3*3卷積串聯(lián),利用小卷積代替大卷積,該操作使得其擁有更少的參數(shù)量,同時(shí)會(huì)比單獨(dú)一個(gè)卷積層擁有更多的非線性變換。2、探索了卷積神經(jīng)網(wǎng)絡(luò)的深度與其性能之間的關(guān)系,成功構(gòu)建16層網(wǎng)絡(luò)(還有VGG19的19層網(wǎng)絡(luò))。 |
ResNet50 | 1、使用殘差網(wǎng)絡(luò),其可以解決由于網(wǎng)絡(luò)深度加深而產(chǎn)生的學(xué)習(xí)效率變低與準(zhǔn)確率無(wú)法有效提升的問(wèn)題。2、采用bottleneck design結(jié)構(gòu),在3x3網(wǎng)絡(luò)結(jié)構(gòu)前利用1x1卷積降維,在3x3網(wǎng)絡(luò)結(jié)構(gòu)后,利用1x1卷積升維,相比直接使用3x3網(wǎng)絡(luò)卷積效果更好,參數(shù)更少。 |
InceptionV3 | 1、Inception系列通用的改進(jìn)點(diǎn)是使用不同大小的卷積核,使得存在不同大小的感受野,最后實(shí)現(xiàn)拼接達(dá)到不同尺度特征的融合。2、利用1x7的卷積和7x1的卷積代替7x7的卷積,這樣可以只使用約(1x7 + 7x1) / (7x7) = 28.6%的計(jì)算開(kāi)銷;利用1x3的卷積和3x1的卷積代替3x3的卷積,這樣可以只使用約(1x3 + 3x1) / (3x3) = 67%的計(jì)算開(kāi)銷。 |
Xception | 1、開(kāi)始采用殘差網(wǎng)絡(luò),其可以解決由于網(wǎng)絡(luò)深度加深而產(chǎn)生的學(xué)習(xí)效率變低與準(zhǔn)確率無(wú)法有效提升的問(wèn)題。2、采用SeparableConv2D層,利用深度可分離卷積減少參數(shù)量。 |
MobileNet | 1、是一種輕量級(jí)的深層神經(jīng)網(wǎng)絡(luò),為一定設(shè)備設(shè)計(jì)。 2、采用depthwise separable convolution結(jié)構(gòu),3x3卷積核厚度只有一層,然后在輸入張量上一層一層地滑動(dòng),所以一個(gè)卷積核就對(duì)應(yīng)了一個(gè)輸出通道,當(dāng)卷積完成后,在利用1x1的卷積調(diào)整厚度,實(shí)現(xiàn)參數(shù)減少。 |
經(jīng)典神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)匯總
1、VGG16
1、一張?jiān)紙D片被resize到(224,224,3)。
2、conv1兩次[3,3]卷積網(wǎng)絡(luò),輸出的特征層為64,輸出為(224,224,64),再2X2最大池化,輸出net為(112,112,64)。
3、conv2兩次[3,3]卷積網(wǎng)絡(luò),輸出的特征層為128,輸出net為(112,112,128),再2X2最大池化,輸出net為(56,56,128)。
4、conv3三次[3,3]卷積網(wǎng)絡(luò),輸出的特征層為256,輸出net為(56,56,256),再2X2最大池化,輸出net為(28,28,256)。
5、conv3三次[3,3]卷積網(wǎng)絡(luò),輸出的特征層為256,輸出net為(28,28,512),再2X2最大池化,輸出net為(14,14,512)。
6、conv3三次[3,3]卷積網(wǎng)絡(luò),輸出的特征層為256,輸出net為(14,14,512),再2X2最大池化,輸出net為(7,7,512)。
7、利用卷積的方式模擬全連接層,效果等同,輸出net為(1,1,4096)。共進(jìn)行兩次。
8、利用卷積的方式模擬全連接層,效果等同,輸出net為(1,1,1000)。
最后輸出的就是每個(gè)類的預(yù)測(cè)。
具體實(shí)現(xiàn)代碼可以看我的博文神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)——VGG16模型的復(fù)現(xiàn)及其詳解(包含如何預(yù)測(cè))
2、ResNet50
ResNet50最大的特點(diǎn)是使用了殘差網(wǎng)絡(luò)。
殘差網(wǎng)絡(luò)的特點(diǎn)是將靠前若干層的某一層數(shù)據(jù)輸出直接跳過(guò)多層引入到后面數(shù)據(jù)層的輸入部分。
意味著后面的特征層的內(nèi)容會(huì)有一部分由其前面的某一層線性貢獻(xiàn)。
其結(jié)構(gòu)如下:
ResNet50有兩個(gè)基本的塊,分別名為Conv Block和Identity Block,其中Conv Block輸入和輸出的維度是不一樣的,所以不能連續(xù)串聯(lián),它的作用是改變網(wǎng)絡(luò)的維度;
Identity Block輸入維度和輸出維度相同,可以串聯(lián),用于加深網(wǎng)絡(luò)的。
Conv Block的結(jié)構(gòu)如下:
Identity Block的結(jié)構(gòu)如下:
這兩個(gè)都是殘差網(wǎng)絡(luò)結(jié)構(gòu)。
總的網(wǎng)絡(luò)結(jié)構(gòu)如下:
具體實(shí)現(xiàn)代碼可以看我的博文神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)——ResNet50模型的復(fù)現(xiàn)詳解
3、InceptionV3
Inception系列的網(wǎng)絡(luò)的特點(diǎn)是采用不同大小的卷積核,使得存在不同大小的感受野,最后實(shí)現(xiàn)拼接達(dá)到不同尺度特征的融合。
對(duì)于InceptionV3而言,其網(wǎng)絡(luò)中存在著如下的結(jié)構(gòu)。
這個(gè)結(jié)構(gòu)使用不同大小的卷積核對(duì)輸入進(jìn)行卷積(這個(gè)結(jié)構(gòu)主要在代碼中的block1使用)。
還存在著這樣的結(jié)構(gòu),利用1x7的卷積和7x1的卷積代替7x7的卷積,這樣可以只使用約(1x7 + 7x1) / (7x7) = 28.6%的計(jì)算開(kāi)銷;
利用1x3的卷積和3x1的卷積代替3x3的卷積,這樣可以只使用約(1x3 + 3x1) / (3x3) = 67%的計(jì)算開(kāi)銷。
下圖利用1x7的卷積和7x1的卷積代替7x7的卷積(這個(gè)結(jié)構(gòu)主要在代碼中的block2使用)。
下圖利用1x3的卷積和3x1的卷積代替3x3的卷積(這個(gè)結(jié)構(gòu)主要在代碼中的block3使用)。
具體實(shí)現(xiàn)代碼可以看我的博文神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)——InceptionV3模型的復(fù)現(xiàn)詳解
4、Xception
Xception是谷歌公司繼Inception后,提出的InceptionV3的一種改進(jìn)模型,其改進(jìn)的主要內(nèi)容為采用depthwise separable convolution來(lái)替換原來(lái)Inception v3中的多尺寸卷積核特征響應(yīng)操作。
在講Xception模型之前,首先要講一下什么是depthwise separable convolution(深度可分離卷積塊)。
深度可分離卷積塊由兩個(gè)部分組成,分別是深度可分離卷積和1x1普通卷積,深度可分離卷積的卷積核大小一般是3x3的,便于理解的話我們可以把它當(dāng)作是特征提取,1x1的普通卷積可以完成通道數(shù)的調(diào)整。
下圖為深度可分離卷積塊的結(jié)構(gòu)示意圖:
深度可分離卷積塊的目的是使用更少的參數(shù)來(lái)代替普通的3x3卷積。
我們可以進(jìn)行一下普通卷積和深度可分離卷積塊的對(duì)比:
假設(shè)有一個(gè)3×3大小的卷積層,其輸入通道為16、輸出通道為32。具體為,32個(gè)3×3大小的卷積核會(huì)遍歷16個(gè)通道中的每個(gè)數(shù)據(jù),最后可得到所需的32個(gè)輸出通道,所需參數(shù)為16×32×3×3=4608個(gè)。
應(yīng)用深度可分離卷積,用16個(gè)3×3大小的卷積核分別遍歷16通道的數(shù)據(jù),得到了16個(gè)特征圖譜。在融合操作之前,接著用32個(gè)1×1大小的卷積核遍歷這16個(gè)特征圖譜,所需參數(shù)為16×3×3+16×32×1×1=656個(gè)。
可以看出來(lái)depthwise separable convolution可以減少模型的參數(shù)。
通俗地理解深度可分離卷積結(jié)構(gòu)塊,就是3x3的卷積核厚度只有一層,然后在輸入張量上一層一層地滑動(dòng),每一次卷積完生成一個(gè)輸出通道,當(dāng)卷積完成后,再利用1x1的卷積調(diào)整厚度。
Xception使用的深度可分離卷積塊SeparableConv2D也就是先深度可分離卷積再進(jìn)行1x1卷積。
對(duì)于Xception模型而言,其一共可以分為3個(gè)flow,分別是Entry flow、Middle flow、Exit flow;
分為14個(gè)block,其中Entry flow中有4個(gè)、Middle flow中有8個(gè)、Exit flow中有2個(gè)。
具體結(jié)構(gòu)如下:
其內(nèi)部主要結(jié)構(gòu)就是殘差卷積網(wǎng)絡(luò)搭配SeparableConv2D層實(shí)現(xiàn)一個(gè)個(gè)block,在Xception模型中,常見(jiàn)的兩個(gè)block的結(jié)構(gòu)如下。
這個(gè)主要在Entry flow和Exit flow中:
這個(gè)主要在Middle flow中:
具體實(shí)現(xiàn)代碼可以看我的博文神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)——Xception模型的復(fù)現(xiàn)詳解
5、MobileNet
MobileNet模型是Google針對(duì)手機(jī)等嵌入式設(shè)備提出的一種輕量級(jí)的深層神經(jīng)網(wǎng)絡(luò),其使用的核心思想便是depthwise separable convolution。
對(duì)于一個(gè)卷積點(diǎn)而言:
假設(shè)有一個(gè)3×3大小的卷積層,其輸入通道為16、輸出通道為32。
具體為,32個(gè)3×3大小的卷積核會(huì)遍歷16個(gè)通道中的每個(gè)數(shù)據(jù),最后可得到所需的32個(gè)輸出通道,所需參數(shù)為16×32×3×3=4608個(gè)。
應(yīng)用深度可分離卷積,用16個(gè)3×3大小的卷積核分別遍歷16通道的數(shù)據(jù),得到了16個(gè)特征圖譜。在融合操作之前,接著用32個(gè)1×1大小的卷積核遍歷這16個(gè)特征圖譜,所需參數(shù)為16×3×3+16×32×1×1=656個(gè)。
可以看出來(lái)depthwise separable convolution可以減少模型的參數(shù)。
如下這張圖就是depthwise separable convolution的結(jié)構(gòu)
在建立模型的時(shí)候,可以使用Keras中的DepthwiseConv2D層實(shí)現(xiàn)深度可分離卷積,然后再利用1x1卷積調(diào)整channels數(shù)。
通俗地理解就是3x3的卷積核厚度只有一層,然后在輸入張量上一層一層地滑動(dòng),每一次卷積完生成一個(gè)輸出通道,當(dāng)卷積完成后,在利用1x1的卷積調(diào)整厚度。
如下就是MobileNet的結(jié)構(gòu),其中Conv dw就是分層卷積,在其之后都會(huì)接一個(gè)1x1的卷積進(jìn)行通道處理,
具體實(shí)現(xiàn)代碼可以看我的博文神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)——MobileNet模型的復(fù)現(xiàn)詳解
以上就是卷積神經(jīng)網(wǎng)絡(luò)經(jīng)典模型及其改進(jìn)點(diǎn)學(xué)習(xí)匯總的詳細(xì)內(nèi)容,更多關(guān)于卷積神經(jīng)網(wǎng)絡(luò)模型改進(jìn)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解Python和Rust中內(nèi)存管理機(jī)制的實(shí)現(xiàn)與對(duì)比
Python和Rust都采用了垃圾收集(Garbage?Collection)機(jī)制來(lái)管理內(nèi)存,但它們各自的實(shí)現(xiàn)方式有很大的不同,下面就跟隨小編一起來(lái)深入了解下二者的區(qū)別吧2024-03-03Python 遠(yuǎn)程開(kāi)關(guān)機(jī)的方法
這篇文章主要介紹了Python 遠(yuǎn)程開(kāi)關(guān)機(jī)的方法,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-11-11python實(shí)現(xiàn)列表中最大最小值輸出的示例
今天小編就為大家分享一篇python實(shí)現(xiàn)列表中最大最小值輸出的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07Python實(shí)現(xiàn)斐波那契數(shù)列的示例代碼
斐波那契數(shù)列是一種經(jīng)典的數(shù)學(xué)問(wèn)題,在計(jì)算機(jī)科學(xué)和編程中經(jīng)常被用來(lái)演示算法和遞歸的概念,本文將詳細(xì)介紹斐波那契數(shù)列的定義、計(jì)算方法以及如何在Python中實(shí)現(xiàn)它,需要的可以參考下2024-01-01解決python繪圖使用subplots出現(xiàn)標(biāo)題重疊的問(wèn)題
這篇文章主要介紹了python繪圖使用subplots出現(xiàn)標(biāo)題重疊的問(wèn)題及解決方法,本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04Python 批量驗(yàn)證和添加手機(jī)號(hào)碼為企業(yè)微信聯(lián)系人
你是否也有過(guò)需要添加很多微信好友的時(shí)候,一個(gè)個(gè)輸入添加太麻煩了,本篇文章手把手教你用Python替我們完成這繁瑣的操作,大家可以在過(guò)程中查缺補(bǔ)漏,看看自己掌握程度怎么樣2021-10-10python搭建簡(jiǎn)易服務(wù)器分析與實(shí)現(xiàn)
本文將介紹python搭建簡(jiǎn)易服務(wù)器實(shí)現(xiàn)步驟,需要了解的朋友可以參考下2012-12-12python數(shù)字圖像處理之估計(jì)噪聲參數(shù)
這篇文章主要介紹了python數(shù)字圖像處理之估計(jì)噪聲參數(shù),圖像復(fù)原與重建,想了解圖像處理的同學(xué),一定要好好看看2021-04-04