網站首頁 編程語言 正文
經典神經網絡的改進點
名稱 | 改進點 |
---|---|
VGG16 | 1、使用非常多的3*3卷積串聯,利用小卷積代替大卷積,該操作使得其擁有更少的參數量,同時會比單獨一個卷積層擁有更多的非線性變換。2、探索了卷積神經網絡的深度與其性能之間的關系,成功構建16層網絡(還有VGG19的19層網絡)。 |
ResNet50 | 1、使用殘差網絡,其可以解決由于網絡深度加深而產生的學習效率變低與準確率無法有效提升的問題。2、采用bottleneck design結構,在3x3網絡結構前利用1x1卷積降維,在3x3網絡結構后,利用1x1卷積升維,相比直接使用3x3網絡卷積效果更好,參數更少。 |
InceptionV3 | 1、Inception系列通用的改進點是使用不同大小的卷積核,使得存在不同大小的感受野,最后實現拼接達到不同尺度特征的融合。2、利用1x7的卷積和7x1的卷積代替7x7的卷積,這樣可以只使用約(1x7 + 7x1) / (7x7) = 28.6%的計算開銷;利用1x3的卷積和3x1的卷積代替3x3的卷積,這樣可以只使用約(1x3 + 3x1) / (3x3) = 67%的計算開銷。 |
Xception | 1、開始采用殘差網絡,其可以解決由于網絡深度加深而產生的學習效率變低與準確率無法有效提升的問題。2、采用SeparableConv2D層,利用深度可分離卷積減少參數量。 |
MobileNet | 1、是一種輕量級的深層神經網絡,為一定設備設計。 2、采用depthwise separable convolution結構,3x3卷積核厚度只有一層,然后在輸入張量上一層一層地滑動,所以一個卷積核就對應了一個輸出通道,當卷積完成后,在利用1x1的卷積調整厚度,實現參數減少。 |
經典神經網絡的結構匯總
1、VGG16
1、一張原始圖片被resize到(224,224,3)。
2、conv1兩次[3,3]卷積網絡,輸出的特征層為64,輸出為(224,224,64),再2X2最大池化,輸出net為(112,112,64)。
3、conv2兩次[3,3]卷積網絡,輸出的特征層為128,輸出net為(112,112,128),再2X2最大池化,輸出net為(56,56,128)。
4、conv3三次[3,3]卷積網絡,輸出的特征層為256,輸出net為(56,56,256),再2X2最大池化,輸出net為(28,28,256)。
5、conv3三次[3,3]卷積網絡,輸出的特征層為256,輸出net為(28,28,512),再2X2最大池化,輸出net為(14,14,512)。
6、conv3三次[3,3]卷積網絡,輸出的特征層為256,輸出net為(14,14,512),再2X2最大池化,輸出net為(7,7,512)。
7、利用卷積的方式模擬全連接層,效果等同,輸出net為(1,1,4096)。共進行兩次。
8、利用卷積的方式模擬全連接層,效果等同,輸出net為(1,1,1000)。
最后輸出的就是每個類的預測。
具體實現代碼可以看我的博文神經網絡學習——VGG16模型的復現及其詳解(包含如何預測)
2、ResNet50
ResNet50最大的特點是使用了殘差網絡。
殘差網絡的特點是將靠前若干層的某一層數據輸出直接跳過多層引入到后面數據層的輸入部分。
意味著后面的特征層的內容會有一部分由其前面的某一層線性貢獻。
其結構如下:
ResNet50有兩個基本的塊,分別名為Conv Block和Identity Block,其中Conv Block輸入和輸出的維度是不一樣的,所以不能連續串聯,它的作用是改變網絡的維度;
Identity Block輸入維度和輸出維度相同,可以串聯,用于加深網絡的。
Conv Block的結構如下:
Identity Block的結構如下:
這兩個都是殘差網絡結構。
總的網絡結構如下:
具體實現代碼可以看我的博文神經網絡學習——ResNet50模型的復現詳解
3、InceptionV3
Inception系列的網絡的特點是采用不同大小的卷積核,使得存在不同大小的感受野,最后實現拼接達到不同尺度特征的融合。
對于InceptionV3而言,其網絡中存在著如下的結構。
這個結構使用不同大小的卷積核對輸入進行卷積(這個結構主要在代碼中的block1使用)。
還存在著這樣的結構,利用1x7的卷積和7x1的卷積代替7x7的卷積,這樣可以只使用約(1x7 + 7x1) / (7x7) = 28.6%的計算開銷;
利用1x3的卷積和3x1的卷積代替3x3的卷積,這樣可以只使用約(1x3 + 3x1) / (3x3) = 67%的計算開銷。
下圖利用1x7的卷積和7x1的卷積代替7x7的卷積(這個結構主要在代碼中的block2使用)。
下圖利用1x3的卷積和3x1的卷積代替3x3的卷積(這個結構主要在代碼中的block3使用)。
具體實現代碼可以看我的博文神經網絡學習——InceptionV3模型的復現詳解
4、Xception
Xception是谷歌公司繼Inception后,提出的InceptionV3的一種改進模型,其改進的主要內容為采用depthwise separable convolution來替換原來Inception v3中的多尺寸卷積核特征響應操作。
在講Xception模型之前,首先要講一下什么是depthwise separable convolution(深度可分離卷積塊)。
深度可分離卷積塊由兩個部分組成,分別是深度可分離卷積和1x1普通卷積,深度可分離卷積的卷積核大小一般是3x3的,便于理解的話我們可以把它當作是特征提取,1x1的普通卷積可以完成通道數的調整。
下圖為深度可分離卷積塊的結構示意圖:
深度可分離卷積塊的目的是使用更少的參數來代替普通的3x3卷積。
我們可以進行一下普通卷積和深度可分離卷積塊的對比:
假設有一個3×3大小的卷積層,其輸入通道為16、輸出通道為32。具體為,32個3×3大小的卷積核會遍歷16個通道中的每個數據,最后可得到所需的32個輸出通道,所需參數為16×32×3×3=4608個。
應用深度可分離卷積,用16個3×3大小的卷積核分別遍歷16通道的數據,得到了16個特征圖譜。在融合操作之前,接著用32個1×1大小的卷積核遍歷這16個特征圖譜,所需參數為16×3×3+16×32×1×1=656個。
可以看出來depthwise separable convolution可以減少模型的參數。
通俗地理解深度可分離卷積結構塊,就是3x3的卷積核厚度只有一層,然后在輸入張量上一層一層地滑動,每一次卷積完生成一個輸出通道,當卷積完成后,再利用1x1的卷積調整厚度。
Xception使用的深度可分離卷積塊SeparableConv2D也就是先深度可分離卷積再進行1x1卷積。
對于Xception模型而言,其一共可以分為3個flow,分別是Entry flow、Middle flow、Exit flow;
分為14個block,其中Entry flow中有4個、Middle flow中有8個、Exit flow中有2個。
具體結構如下:
其內部主要結構就是殘差卷積網絡搭配SeparableConv2D層實現一個個block,在Xception模型中,常見的兩個block的結構如下。
這個主要在Entry flow和Exit flow中:
這個主要在Middle flow中:
具體實現代碼可以看我的博文神經網絡學習——Xception模型的復現詳解
5、MobileNet
MobileNet模型是Google針對手機等嵌入式設備提出的一種輕量級的深層神經網絡,其使用的核心思想便是depthwise separable convolution。
對于一個卷積點而言:
假設有一個3×3大小的卷積層,其輸入通道為16、輸出通道為32。
具體為,32個3×3大小的卷積核會遍歷16個通道中的每個數據,最后可得到所需的32個輸出通道,所需參數為16×32×3×3=4608個。
應用深度可分離卷積,用16個3×3大小的卷積核分別遍歷16通道的數據,得到了16個特征圖譜。在融合操作之前,接著用32個1×1大小的卷積核遍歷這16個特征圖譜,所需參數為16×3×3+16×32×1×1=656個。
可以看出來depthwise separable convolution可以減少模型的參數。
如下這張圖就是depthwise separable convolution的結構
在建立模型的時候,可以使用Keras中的DepthwiseConv2D層實現深度可分離卷積,然后再利用1x1卷積調整channels數。
通俗地理解就是3x3的卷積核厚度只有一層,然后在輸入張量上一層一層地滑動,每一次卷積完生成一個輸出通道,當卷積完成后,在利用1x1的卷積調整厚度。
如下就是MobileNet的結構,其中Conv dw就是分層卷積,在其之后都會接一個1x1的卷積進行通道處理,
具體實現代碼可以看我的博文神經網絡學習——MobileNet模型的復現詳解
原文鏈接:https://blog.csdn.net/weixin_44791964/article/details/102824592
相關推薦
- 2023-01-27 React?useEffect的理解與使用_React
- 2022-04-20 iOS實現多控制器切換效果_IOS
- 2022-11-27 VsCode運行html界面的實戰步驟_其它綜合
- 2022-04-15 Go?interface{}?轉切片類型的實現方法_Golang
- 2023-12-09 SpringBoot自定義異常處理機制
- 2022-01-30 h5 uniapp history模式下刷新頁面404
- 2022-12-05 Python最長回文子串問題_python
- 2023-11-16 nvidia jetson設備(Jetson Nano, TX1/TX2,Xavier NX/AGX
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支