網(wǎng)站首頁 編程語言 正文
卷積神經(jīng)網(wǎng)絡(luò)經(jīng)典模型及其改進(jìn)點(diǎn)學(xué)習(xí)匯總_python
作者:Bubbliiiing ? 更新時間: 2022-06-30 編程語言經(jīng)典神經(jīng)網(wǎng)絡(luò)的改進(jìn)點(diǎn)
名稱 | 改進(jìn)點(diǎn) |
---|---|
VGG16 | 1、使用非常多的3*3卷積串聯(lián),利用小卷積代替大卷積,該操作使得其擁有更少的參數(shù)量,同時會比單獨(dú)一個卷積層擁有更多的非線性變換。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)確率無法有效提升的問題。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%的計算開銷;利用1x3的卷積和3x1的卷積代替3x3的卷積,這樣可以只使用約(1x3 + 3x1) / (3x3) = 67%的計算開銷。 |
Xception | 1、開始采用殘差網(wǎng)絡(luò),其可以解決由于網(wǎng)絡(luò)深度加深而產(chǎn)生的學(xué)習(xí)效率變低與準(zhǔn)確率無法有效提升的問題。2、采用SeparableConv2D層,利用深度可分離卷積減少參數(shù)量。 |
MobileNet | 1、是一種輕量級的深層神經(jīng)網(wǎng)絡(luò),為一定設(shè)備設(shè)計。 2、采用depthwise separable convolution結(jié)構(gòu),3x3卷積核厚度只有一層,然后在輸入張量上一層一層地滑動,所以一個卷積核就對應(yīng)了一個輸出通道,當(dāng)卷積完成后,在利用1x1的卷積調(diào)整厚度,實(shí)現(xiàn)參數(shù)減少。 |
經(jīng)典神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)匯總
1、VGG16
1、一張原始圖片被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)。
最后輸出的就是每個類的預(yù)測。
具體實(shí)現(xiàn)代碼可以看我的博文神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)——VGG16模型的復(fù)現(xiàn)及其詳解(包含如何預(yù)測)
2、ResNet50
ResNet50最大的特點(diǎn)是使用了殘差網(wǎng)絡(luò)。
殘差網(wǎng)絡(luò)的特點(diǎn)是將靠前若干層的某一層數(shù)據(jù)輸出直接跳過多層引入到后面數(shù)據(jù)層的輸入部分。
意味著后面的特征層的內(nèi)容會有一部分由其前面的某一層線性貢獻(xiàn)。
其結(jié)構(gòu)如下:
ResNet50有兩個基本的塊,分別名為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)如下:
這兩個都是殘差網(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á)到不同尺度特征的融合。
對于InceptionV3而言,其網(wǎng)絡(luò)中存在著如下的結(jié)構(gòu)。
這個結(jié)構(gòu)使用不同大小的卷積核對輸入進(jìn)行卷積(這個結(jié)構(gòu)主要在代碼中的block1使用)。
還存在著這樣的結(jié)構(gòu),利用1x7的卷積和7x1的卷積代替7x7的卷積,這樣可以只使用約(1x7 + 7x1) / (7x7) = 28.6%的計算開銷;
利用1x3的卷積和3x1的卷積代替3x3的卷積,這樣可以只使用約(1x3 + 3x1) / (3x3) = 67%的計算開銷。
下圖利用1x7的卷積和7x1的卷積代替7x7的卷積(這個結(jié)構(gòu)主要在代碼中的block2使用)。
下圖利用1x3的卷積和3x1的卷積代替3x3的卷積(這個結(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來替換原來Inception v3中的多尺寸卷積核特征響應(yīng)操作。
在講Xception模型之前,首先要講一下什么是depthwise separable convolution(深度可分離卷積塊)。
深度可分離卷積塊由兩個部分組成,分別是深度可分離卷積和1x1普通卷積,深度可分離卷積的卷積核大小一般是3x3的,便于理解的話我們可以把它當(dāng)作是特征提取,1x1的普通卷積可以完成通道數(shù)的調(diào)整。
下圖為深度可分離卷積塊的結(jié)構(gòu)示意圖:
深度可分離卷積塊的目的是使用更少的參數(shù)來代替普通的3x3卷積。
我們可以進(jìn)行一下普通卷積和深度可分離卷積塊的對比:
假設(shè)有一個3×3大小的卷積層,其輸入通道為16、輸出通道為32。具體為,32個3×3大小的卷積核會遍歷16個通道中的每個數(shù)據(jù),最后可得到所需的32個輸出通道,所需參數(shù)為16×32×3×3=4608個。
應(yīng)用深度可分離卷積,用16個3×3大小的卷積核分別遍歷16通道的數(shù)據(jù),得到了16個特征圖譜。在融合操作之前,接著用32個1×1大小的卷積核遍歷這16個特征圖譜,所需參數(shù)為16×3×3+16×32×1×1=656個。
可以看出來depthwise separable convolution可以減少模型的參數(shù)。
通俗地理解深度可分離卷積結(jié)構(gòu)塊,就是3x3的卷積核厚度只有一層,然后在輸入張量上一層一層地滑動,每一次卷積完生成一個輸出通道,當(dāng)卷積完成后,再利用1x1的卷積調(diào)整厚度。
Xception使用的深度可分離卷積塊SeparableConv2D也就是先深度可分離卷積再進(jìn)行1x1卷積。
對于Xception模型而言,其一共可以分為3個flow,分別是Entry flow、Middle flow、Exit flow;
分為14個block,其中Entry flow中有4個、Middle flow中有8個、Exit flow中有2個。
具體結(jié)構(gòu)如下:
其內(nèi)部主要結(jié)構(gòu)就是殘差卷積網(wǎng)絡(luò)搭配SeparableConv2D層實(shí)現(xiàn)一個個block,在Xception模型中,常見的兩個block的結(jié)構(gòu)如下。
這個主要在Entry flow和Exit flow中:
這個主要在Middle flow中:
具體實(shí)現(xiàn)代碼可以看我的博文神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)——Xception模型的復(fù)現(xiàn)詳解
5、MobileNet
MobileNet模型是Google針對手機(jī)等嵌入式設(shè)備提出的一種輕量級的深層神經(jīng)網(wǎng)絡(luò),其使用的核心思想便是depthwise separable convolution。
對于一個卷積點(diǎn)而言:
假設(shè)有一個3×3大小的卷積層,其輸入通道為16、輸出通道為32。
具體為,32個3×3大小的卷積核會遍歷16個通道中的每個數(shù)據(jù),最后可得到所需的32個輸出通道,所需參數(shù)為16×32×3×3=4608個。
應(yīng)用深度可分離卷積,用16個3×3大小的卷積核分別遍歷16通道的數(shù)據(jù),得到了16個特征圖譜。在融合操作之前,接著用32個1×1大小的卷積核遍歷這16個特征圖譜,所需參數(shù)為16×3×3+16×32×1×1=656個。
可以看出來depthwise separable convolution可以減少模型的參數(shù)。
如下這張圖就是depthwise separable convolution的結(jié)構(gòu)
在建立模型的時候,可以使用Keras中的DepthwiseConv2D層實(shí)現(xiàn)深度可分離卷積,然后再利用1x1卷積調(diào)整channels數(shù)。
通俗地理解就是3x3的卷積核厚度只有一層,然后在輸入張量上一層一層地滑動,每一次卷積完生成一個輸出通道,當(dāng)卷積完成后,在利用1x1的卷積調(diào)整厚度。
如下就是MobileNet的結(jié)構(gòu),其中Conv dw就是分層卷積,在其之后都會接一個1x1的卷積進(jìn)行通道處理,
具體實(shí)現(xiàn)代碼可以看我的博文神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)——MobileNet模型的復(fù)現(xiàn)詳解
原文鏈接:https://blog.csdn.net/weixin_44791964/article/details/102824592
相關(guān)推薦
- 2022-04-18 C語言數(shù)組全面總結(jié)梳理_C 語言
- 2022-05-02 numpy中np.dstack()、np.hstack()、np.vstack()用法_python
- 2022-03-20 C++學(xué)習(xí)筆記之類與對象詳解_C 語言
- 2022-07-26 ES對比兩個索引的數(shù)據(jù)差
- 2022-05-26 Android?Flutter實(shí)現(xiàn)3D動畫效果示例詳解_Android
- 2022-04-08 Android如何使用GestureDetector進(jìn)行手勢檢測詳解_Android
- 2022-06-14 C#獲取指定目錄下指定文件的方法_C#教程
- 2022-10-22 Python中的list.sort()方法和函數(shù)sorted(list)_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支