網站首頁 編程語言 正文
為什么要使用3×3卷積?
常見的卷積核大小有1×1、3×3、5×5、7×7,有時也會看到11×11,若在卷積層提取特征,我們通常選用3×3大小的卷積。
我們知道,兩個3×3卷積核一個5×5卷積的感受野相同,三個3×3卷積和一個7×7卷積的感受野相同(通俗來講,感受野就是可以提取到周圍鄰居個數的特征)
假設輸入輸出channel均為C,使用7×7卷積核所需參數為
7
×
7
×
C
×
C
=
49
C
2
7×7×C×C = 49C^{2}
7×7×C×C=49C2 使用3×3卷積核所需參數為
3
×
3
×
C
×
C
+
3
×
3
×
C
×
C
+
3
×
3
×
C
×
C
=
27
C
2
3×3×C×C + 3×3×C×C + 3×3×C×C = 27C^{2}
3×3×C×C+3×3×C×C+3×3×C×C=27C2
可見在感受野相同的情況下,三個3×3卷積比一個7×7卷積所需參數要少很多,這無疑減少了模型的復雜度,加快了訓練速度。
而且雖然感受野一樣,但是3×3卷積的非線性程度更高,可以表示更復雜的函數;小的卷積核可以提取細小的特征,由小而大到比較抽象的特征。
但層數加深了,會產生有一串連鎖效應,可能會效果提升,但也有可能變差,例如梯度消失。
ResNet 網絡結構
ResNet結構如圖所示
可見,在輸入階段使用了7x7卷積,作用實際上是用來直接對輸入圖片降采樣(early downsampling),那為什么不使用3個3×3卷積呢?
原因:
在進入ResidualBlock訓練之前盡可能保留原圖更多的信息。
注意像7x7這樣的大卷積核一般只可能出現在input layer層,這種情況下通常圖像的分辨率很高,圖像的像素值的方差較小。
具體問題具體分析,也有實驗表面在此使用三個3×3卷積比一個7×7卷積效果好。
為什么卷積通道數逐層增加,而不是逐層減少
vgg網絡的設計也是如此。
我們對神經網絡的認識是:把像素空間的信息轉化為語義信息。
卷積核和池化使得圖像長寬方向的信息逐漸減小,而卷積通道數逐層增加通道信息逐漸增加,這符合我們的認知。
下圖vgg結構可以更好的幫助我們理解
ResidualBlock
左邊就是一個典型的ResidualBlock,通過兩個3×3的空間卷積,輸入通道數等于輸出通道數,相加即可,不需要做處理。
在右邊我們看到了1×1卷積,它的作用是什么呢?
右圖的ResidualBlock代表我們先對數據降維一次(通道數從256降維到64)、再對其進行空間卷積(3×3卷積核,通道數不變),再投影回256通道數,使得輸入和輸出維度匹配以便相加。
那為什么不直接使用一個3×3通道數為256的卷積?
為什么使用1×1卷積來降維
如果不適用1×1卷積,直接使用一個3×3通道數為256的卷積,改成的參數量為
3
×
3
×
256
×
256
=
589824
3×3×256×256 = 589824
3×3×256×256=589824 而使用1×1卷積降維后構建ResidualBlock有
1
×
1
×
64
×
256
+
3
×
3
×
64
×
64
+
1
×
1
×
64
×
256
=
69632
1×1×64×256+3×3×64×64+1×1×64×256 = 69632
1×1×64×256+3×3×64×64+1×1×64×256=69632
由此可見,如果不增加1×1的卷積來降維,后續3×3卷積核所需的參數量會急劇增加。
1*1卷積的應用
殘差連接如何處理輸入、輸出維度不同的情況?
①在輸入、輸出上添加額外的0,使得兩個形狀對應起來然后相加。(即以0填充擴展的維度,這種方法不需要添加額外的參數,但通常有些蠻力,效果不佳)
②在上述情況下可以使用1*1卷積來匹配維度。
原文鏈接:https://blog.csdn.net/weixin_45928096/article/details/122502882
相關推薦
- 2022-08-18 Flutter中關于angle的踩坑記錄_Android
- 2023-02-07 C++實現字符串和整數的相互轉換_C 語言
- 2022-10-22 Kotlin線程的橋接與切換使用介紹_Android
- 2024-02-01 springboot @spring.active@啟動報錯
- 2022-11-21 Android?Jetpack系列之App?Startup使用詳解_Android
- 2022-04-09 如何利用python提取字符串中的數字_python
- 2023-01-02 Python利用socket實現多進程的端口掃描器_python
- 2022-11-30 詳解Python如何輕松實現定時執行任務_python
- 最近更新
-
- 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同步修改后的遠程分支