網站首頁 編程語言 正文
學習前言
看了好多代碼呀,看了后面忘了前面,這個BLOG主要是記錄一些神經網絡的改進結構,比如殘差結構那種,記錄下來有助于自己設計一些輕且好的網絡。
1、殘差網絡
這個網絡主要源自于Resnet網絡,其作用是:
將靠前若干層的某一層數據輸出直接跳過多層引入到后面數據層的輸入部分。
意味著后面的特征層的內容會有一部分由其前面的某一層線性貢獻。
實驗表明,殘差網絡更容易優化,并且能夠通過增加相當的深度來提高準確率。
最終可以使得網絡越來越深,Resnet152就是一個很深很深的網絡。
殘差網絡的典型結構如下:
2、不同大小卷積核并行卷積
這個結構主要是在Inception網絡結構中出現。
Inception網絡采用不同大小的卷積核,使得存在不同大小的感受野,最后實現拼接達到不同尺度特征的融合。
不同大小卷積核并行卷積的典型結構如下:
3、利用(1,x),(x,1)卷積代替(x,x)卷積
這種結構主要利用在InceptionV3中。
利用1x7的卷積和7x1的卷積代替7x7的卷積,這樣可以只使用約(1x7 + 7x1) / (7x7) = 28.6%的計算開銷;
利用1x3的卷積和3x1的卷積代替3x3的卷積,這樣可以只使用約(1x3 + 3x1) / (3x3) = 67%的計算開銷。
下圖利用1x7的卷積和7x1的卷積代替7x7的卷積。
下圖利用1x3的卷積和3x1的卷積代替3x3的卷積。
4、采用瓶頸(Bottleneck)結構
這個結構在Resnet里非常常見,其它網絡也有用到。
所謂Bottleneck結構就是首先利用1x1卷積層進行特征壓縮,再利用3x3卷積網絡進行特征提取,再利用1x1卷積層進行特征擴張。
該結構相比于直接對輸入進行3x3卷積減少了許多參數量。
當輸入為26,26,512時,直接使用3x3、filter為512的卷積網絡的參數量為512x3x3x512=2,359,296?。
采用Bottleneck結構的話,假設其首先利用1x1、filter為128卷積層進行特征壓縮,再利用3x3、filter為128的卷積網絡進行特征提取,再利用1x1、filter為512的卷積層進行特征擴張,則參數量為 512×1×1×128 + 128×3×3×128 + 128×1×1×512 =? 278,528。
可以看出來確實時下降了很多呀。
5、深度可分離卷積
深度可分離卷積主要在MobileNet模型上應用。
其特點是3x3的卷積核厚度只有一層,然后在輸入張量上一層一層地滑動,每一次卷積完生成一個輸出通道,當卷積完成后,在利用1x1的卷積調整厚度。
假設有一個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個。
6、改進版深度可分離卷積+殘差網絡
這種結構主要存在在Xception網絡中。
改進版深度可分離卷積就是調換了一下深度可分離的順序,先進行1x1卷積調整通道,再利用3x3卷積提取特征。
和普通的深度可分離卷積相比,參數量也會有一定的變化。
改進版深度可分離卷積加上殘差網絡的結構其實和它的名字是一樣的,很好理解。
如下圖所示:
7、倒轉殘差(Inverted residuals)結構
在ResNet50里我們認識到一個結構,bottleneck design結構,在3x3網絡結構前利用1x1卷積降維,在3x3網絡結構后,利用1x1卷積升維,相比直接使用3x3網絡卷積效果更好,參數更少,先進行壓縮,再進行擴張。
而Inverted residuals結構,在3x3網絡結構前利用1x1卷積升維,在3x3網絡結構后,利用1x1卷積降維,先進行擴張,再進行壓縮。
這種結構主要用在MobilenetV2中。
其主要結構如下:
8、并行空洞卷積
這個結構出現在Deeplabv3語義分割中。
其經過并行的空洞卷積,分別用不同rate的空洞卷積進行特征提取,再進行合并,再進行1x1卷積壓縮特征。
空洞卷積可以在不損失信息的情況下,加大了感受野,讓每個卷積輸出都包含較大范圍的信息**。如下就是空洞卷積的一個示意圖,所謂空洞就是特征點提取的時候會跨像素。
原文鏈接:https://blog.csdn.net/weixin_44791964/article/details/103042733
相關推薦
- 2022-11-30 Python?fire模塊(最簡化命令行生成工具)的使用教程詳解_python
- 2022-09-30 Python3中map()、reduce()、filter()的用法詳解_python
- 2022-11-18 詳解SFTP命令_linux shell
- 2022-08-13 IDEA快速展開和折疊方法代碼快捷鍵
- 2022-09-05 C語言如何實現頭插法建立單鏈表_C 語言
- 2022-10-17 Go使用select切換協程入門詳解_Golang
- 2022-10-11 在NVIDIA Jetson Xavier NX上使用tensorflow-gpu
- 2022-05-28 Entity?Framework?Core種子數據Data-Seeding_實用技巧
- 最近更新
-
- 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同步修改后的遠程分支