1×1卷積的作用與原理詳解

1×1卷積的作用與原理詳解

文章目錄

  • 1×1卷積的作用與原理詳解
    • 引言
    • 1. 什么是1×1卷積?
    • 2. 1×1卷積的數學表達
    • 3. 1×1卷積的主要作用
      • 3.1 改變通道數(升維/降維)
        • 3.1.1 降維(Dimension Reduction)
        • 3.1.2 升維(Dimension Increase)
      • 3.2 特征融合(Feature Fusion)
      • 3.3 增加非線性
    • 4. 1×1卷積在經典網絡中的應用
      • 4.1 Network in Network (NiN)
      • 4.2 GoogLeNet (Inception)
      • 4.3 ResNet的瓶頸結構
    • 5. 1×1卷積的優勢總結
    • 6. 代碼實現示例
    • 7. 結論
    • 參考文獻

引言

在深度學習特別是卷積神經網絡(CNN)的中,1×1卷積操作看似簡單,卻有著重要的作用。本文將詳細介紹1×1卷積的工作原理及其在深度學習模型中的多種作用,特別是在通道數調整和特征融合方面的應用。

1. 什么是1×1卷積?

1×1卷積,顧名思義,是使用大小為1×1的卷積核進行的卷積操作。與傳統的3×3、5×5等卷積核不同,1×1卷積核在空間維度上不進行擴展,僅在通道維度上進行操作。

假設輸入特征圖的尺寸為 H × W × C i n H \times W \times C_{in} H×W×Cin?(高度×寬度×輸入通道數),1×1卷積層包含 C o u t C_{out} Cout? 個卷積核(也就是說,這個1×1卷積層的尺寸為 1 × 1 × C o u t 1 \times 1 \times C_{out} 1×1×Cout? ),則輸出特征圖的尺寸為 H × W × C o u t H \times W \times C_{out} H×W×Cout?

(敲黑板:希望讀者能夠真正理解上述公式,從而就能夠理解3.1中所述的:1×1卷積為什么能夠改變通道數。)

2. 1×1卷積的數學表達

對于輸入特征圖 X ∈ R H × W × C i n X \in \mathbb{R}^{H \times W \times C_{in}} XRH×W×Cin?,1×1卷積的數學表達式為:

Y ( i , j , n ) = ∑ c = 1 C i n X ( i , j , c ) ? W ( 1 , 1 , c , n ) + b ( n ) Y(i,j,n) = \sum_{c=1}^{C_{in}} X(i,j,c) \cdot W(1,1,c,n) + b(n) Y(i,j,n)=c=1Cin??X(i,j,c)?W(1,1,c,n)+b(n)

其中:

  • Y ( i , j , n ) Y(i,j,n) Y(i,j,n) 是輸出特征圖在位置 ( i , j ) (i,j) (i,j) 處第 n n n 個通道的值
  • X ( i , j , c ) X(i,j,c) X(i,j,c) 是輸入特征圖在位置 ( i , j ) (i,j) (i,j) 處第 c c c 個通道的值
  • W ( 1 , 1 , c , n ) W(1,1,c,n) W(1,1,c,n) 是第 n n n 個卷積核在第 c c c 個輸入通道上的權重
  • b ( n ) b(n) b(n) 是第 n n n 個卷積核的偏置項

3. 1×1卷積的主要作用

3.1 改變通道數(升維/降維)

1×1卷積最直觀的作用是改變特征圖的通道數,這在網絡架構設計中非常有用:

1×1卷積 改變通道數(升維/降維)舉例

3.1.1 降維(Dimension Reduction)

C o u t < C i n C_{out} < C_{in} Cout?<Cin? 時,1×1卷積起到降維的作用。這可以顯著減少參數量和計算量。

例如,假設輸入特征圖尺寸為 56 × 56 × 256 56 \times 56 \times 256 56×56×256,使用64個1×1卷積核后,輸出特征圖尺寸變為 56 × 56 × 64 56 \times 56 \times 64 56×56×64,參數量為 256 × 64 + 64 = 16448 256 \times 64 + 64 = 16448 256×64+64=16448(權重+偏置)。

降維操作可以表示為:

Y r e d u c e d = f ( X ? W 1 × 1 + b ) Y_{reduced} = f(X \cdot W_{1 \times 1} + b) Yreduced?=f(X?W1×1?+b)

其中 f f f 是激活函數,通常是ReLU。

3.1.2 升維(Dimension Increase)

C o u t > C i n C_{out} > C_{in} Cout?>Cin? 時,1×1卷積起到升維的作用,可以增加特征的表達能力。

3.2 特征融合(Feature Fusion)

1×1卷積的另一個重要作用是進行特征融合,這實際上是對通道維度的信息進行重組和整合。

從數學角度看,1×1卷積對每個空間位置 ( i , j ) (i,j) (i,j) 執行的操作可以看作是一個全連接層:

Y ( i , j , : ) = W ? X ( i , j , : ) + b Y(i,j,:) = W \cdot X(i,j,:) + b Y(i,j,:)=W?X(i,j,:)+b

這里 X ( i , j , : ) X(i,j,:) X(i,j,:) 是位置 ( i , j ) (i,j) (i,j) 處所有通道的向量, W W W 是權重矩陣。

通過這種方式,1×1卷積實現了通道間的信息交互和融合,學習通道間的相關性,從而生成新的、更有表達力的特征表示。

3.3 增加非線性

每個1×1卷積后通常會跟隨一個非線性激活函數(如ReLU),這為網絡引入了額外的非線性,增強了模型的表達能力:

Y = f ( X ? W 1 × 1 + b ) Y = f(X * W_{1 \times 1} + b) Y=f(X?W1×1?+b)

其中 f f f 是非線性激活函數, ? * ? 表示卷積操作。

4. 1×1卷積在經典網絡中的應用

4.1 Network in Network (NiN)

1×1卷積最早在Lin等人提出的Network in Network架構中被引入。NiN使用1×1卷積來增強局部模型的抽象能力。[1]

4.2 GoogLeNet (Inception)

GoogLeNetInception模塊中,1×1卷積被用于在3×3和5×5卷積前進行降維,顯著減少了計算復雜度。

例如,對于一個 28 × 28 × 256 28 \times 28 \times 256 28×28×256 的輸入,直接應用64個5×5卷積核需要計算:
28 × 28 × 5 × 5 × 256 × 64 = 51 , 380 , 224 28 \times 28 \times 5 \times 5 \times 256 \times 64 = 51,380,224 28×28×5×5×256×64=51,380,224 次乘法操作

而先使用32個1×1卷積核降維,再應用64個5×5卷積核:

  • 1×1卷積: 28 × 28 × 1 × 1 × 256 × 32 = 6 , 422 , 528 28 \times 28 \times 1 \times 1 \times 256 \times 32 = 6,422,528 28×28×1×1×256×32=6,422,528 次乘法
  • 5×5卷積: 28 × 28 × 5 × 5 × 32 × 64 = 6 , 422 , 528 28 \times 28 \times 5 \times 5 \times 32 \times 64 = 6,422,528 28×28×5×5×32×64=6,422,528 次乘法
  • 總計: 12 , 845 , 056 12,845,056 12,845,056 次乘法,僅為原來的約1/4

4.3 ResNet的瓶頸結構

ResNet的瓶頸(Bottleneck)結構中,使用了1×1-3×3-1×1的連續卷積組合,其中第一個1×1卷積用于降維,最后一個1×1卷積用于升維,大大減少了模型的參數量和計算量。

5. 1×1卷積的優勢總結

  1. 參數效率:通過降維減少參數量和計算復雜度
  2. 特征重組:在通道維度上重組特征,增強特征表達
  3. 增加網絡深度:以較小的計算代價增加網絡深度和非線性
  4. 跨通道信息整合:學習通道間的相關性和依賴關系

6. 代碼實現示例

以PyTorch為例,1×1卷積的實現實例如下所示:

import torch.nn as nn# 定義一個1×1卷積層,將256通道降維到64通道
conv1x1 = nn.Conv2d(in_channels=256, out_channels=64, kernel_size=1)# 在瓶頸結構中的應用
class Bottleneck(nn.Module):def __init__(self, in_channels, bottleneck_channels, out_channels):super(Bottleneck, self).__init__()self.conv1 = nn.Conv2d(in_channels, bottleneck_channels, kernel_size=1)self.bn1 = nn.BatchNorm2d(bottleneck_channels)self.conv2 = nn.Conv2d(bottleneck_channels, bottleneck_channels, kernel_size=3, padding=1)self.bn2 = nn.BatchNorm2d(bottleneck_channels)self.conv3 = nn.Conv2d(bottleneck_channels, out_channels, kernel_size=1)self.bn3 = nn.BatchNorm2d(out_channels)self.relu = nn.ReLU(inplace=True)def forward(self, x):identity = xout = self.conv1(x)out = self.bn1(out)out = self.relu(out)out = self.conv2(out)out = self.bn2(out)out = self.relu(out)out = self.conv3(out)out = self.bn3(out)out += identityout = self.relu(out)return out

7. 結論

1×1卷積雖然在空間維度上看似簡單,但在深度學習模型設計中扮演著至關重要的角色。它不僅能夠有效地調整特征圖的通道數,還能在通道維度上融合特征,增加網絡的非線性,同時保持計算效率。理解和靈活運用1×1卷積,對于設計高效的深度學習模型至關重要。


參考文獻

  1. Lin, M., Chen, Q., & Yan, S. (2013). Network in network. arXiv preprint arXiv:1312.4400. [👉論文PDF鏈接點擊這里👈]
  2. Szegedy, C., et al. (2015). Going deeper with convolutions. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. [👉論文PDF鏈接點擊這里👈]
  3. He, K., Zhang, X., Ren, S., & Sun, J. (2016). Deep residual learning for image recognition. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. [👉論文PDF鏈接點擊這里👈]

以上是關于1×1卷積作用與原理的詳細介紹,相信你已經對1×1卷積在改變通道數和特征融合方面的作用有了一定的理解😊
在實際的深度學習模型設計中,合理利用1×1卷積可以顯著提高模型的效率和性能。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/72282.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/72282.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/72282.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

網絡配置的基本信息

目錄 一、網絡接口信息 1、關閉虛擬化服務 2、配置臨時IP 3、配置靜態IP 4、常見網絡命令 5、安裝Wireshark 一、網絡接口信息 輸入 ip address&#xff0c;會出現下面的內容 網卡名稱及其含義&#xff1a; 網卡名稱說明lo 表示本地回環地址。 ens32 有線網卡&#xff0c…

dify綁定飛書多維表格

dify 綁定飛書和綁定 notion 有差不多的過程&#xff0c;都需要套一層應用的殼子&#xff0c;而沒有直接可以訪問飛書文檔的 API。本文記錄如何在dify工具中使用新增多條記錄工具。 創建飛書應用 在飛書開放平臺創建一個應用&#xff0c;個人用戶創建企業自建應用。 自定義應…

深入解析Crawl4AI:為AI應用量身定制的高效開源爬蟲框架

引言 在當今數據驅動的時代&#xff0c;人工智能&#xff08;AI&#xff09;和大型語言模型&#xff08;LLM&#xff09;的發展對高質量數據的需求日益增長。如何高效地從互聯網上獲取、處理和提取有價值的數據&#xff0c;成為了研究人員和開發者面臨的關鍵挑戰。Crawl4AI作為…

nginx 動態計算攔截非法訪問ip

需求&#xff1a;在Nginx上實現一個動態攔截IP的方法&#xff0c;具體是當某個IP在1分鐘內訪問超過60次時&#xff0c;將其加入Redis并攔截&#xff0c;攔截時間默認1天。 技術選型&#xff1a;使用NginxLuaRedis的方法。這種方案通過Lua腳本在Nginx處理請求時檢查Redis中的黑…

【軟件測試】論壇系統功能測試報告

文章目錄 1.前言2.項目介紹3. 對項目進行測試3.1 設計測試用例3.2 執行測試用例 1.前言 這次測試是我學習階段的練習&#xff0c;由于缺少需求規格說明等文檔&#xff0c;需要我盡可能發散思維去設計更多的測試用例。但無論如何測試至關重要&#xff0c;以下是核心原因&#x…

MyBatis TypeHandler 詳解與實戰:FastJson 實現字符串轉 List

在 MyBatis 中&#xff0c;TypeHandler 是實現 Java 類型與數據庫類型雙向轉換 的核心組件。無論是處理基礎數據類型還是復雜的 JSON、枚舉或自定義對象&#xff0c;它都能通過靈活的擴展機制滿足開發需求。本文將通過一個 將數據庫 JSON 字符串轉換為 List<User> 的案例…

《HelloGitHub》第 107 期

興趣是最好的老師&#xff0c;HelloGitHub 讓你對編程感興趣&#xff01; 簡介 HelloGitHub 分享 GitHub 上有趣、入門級的開源項目。 github.com/521xueweihan/HelloGitHub 這里有實戰項目、入門教程、黑科技、開源書籍、大廠開源項目等&#xff0c;涵蓋多種編程語言 Python、…

【每日一題 | 2025】2.24 ~ 3.2

個人主頁&#xff1a;Guiat 歸屬專欄&#xff1a;每日一題 文章目錄 1. 【2.24】P10424 [藍橋杯 2024 省 B] 好數2. 【2.25】P8665 [藍橋杯 2018 省 A] 航班時間3. 【2.26】P10905 [藍橋杯 2024 省 C] 回文字符串4. 【2.27】P10425 [藍橋杯 2024 省 B] R 格式5. 【2.28】P10426…

【03】STM32F407 HAL 庫框架設計學習

【03】STM32F407 HAL 庫框架設計學習 摘要 本文旨在為初學者提供一個關于STM32F407微控制器HAL&#xff08;Hardware Abstraction Layer&#xff09;庫框架設計的詳細學習教程。通過本文&#xff0c;讀者將從零開始&#xff0c;逐步掌握STM32F407的基本知識、HAL庫的配置步驟…

跟著官方文檔學習UE C++ TArray容器系列 迭代 和 排序

一.首先測試下&#xff0c;官方案例 迭代器的方法&#xff0c;有點不常見。有點像個指針&#xff0c;迭代完還自帶break. oid AWXTArrayActor::WXLoopArray() {FString JoinedStr1;FString JoinedStr2;TArray<FString> StrArr { "Hello","Baby",&q…

C++中的“結界”機制:作用域與變量可見性探秘

一、編程世界的“結界”概念 源自佛學的結界概念&#xff0c;在C中體現為作用域機制。程序中的每個函數都會形成獨立的作用域屏障&#xff0c;如同魔法結界般保護內部變量&#xff0c;使其與外界的同名變量互不干擾。這種機制保證了代碼模塊的獨立性和安全性&#xff0c;但當存…

3-6 WPS JS宏 工作表移動復制實例-1(工作表的拆分操作)學習筆記

************************************************************************************************************** 點擊進入 -我要自學網-國內領先的專業視頻教程學習網站 *******************************************************************************************…

Qt 對象樹詳解:從原理到運用

1. 什么是對象樹&#xff1f; 對象樹是一種基于父子關系的對象管理機制。在 Qt 中&#xff0c;所有繼承自 QObject 的類都可以參與到對象樹中。 當一個對象被設置為另一個對象的父對象時&#xff0c;子對象會被添加到父對象的內部列表中&#xff0c;形成一種樹狀結構。 Qt 提…

使用hutool將json集合對象轉化為對象

集合之間相互轉化 //List轉Json&#xff0c;maps是List類型的參數 String json JSONUtil.toJsonStr(maps); System.out.println("這是json字符串: "json);//Json轉List JSONArray objects JSONUtil.parseArray(json); List<Map> maps1 JSONUtil.toList(objec…

Qt關于平滑滾動的使用QScroller及QScrollerProperties類說明

一、觸控時代的滾動工具&#xff1a;QScroller類設計介紹 1.1 從機械滾輪到數字慣性 在觸控設備普及前&#xff0c;滾動操作如同老式打字機的滾軸&#xff0c;只能通過鼠標滾輪或滾動條進行離散式控制。QScroller的出現如同給數字界面裝上了"慣性飛輪"&#xff0c;…

JavaAPI(網絡編程)

網絡通信協議 通信協議 ?所謂通信協議&#xff0c;是指通信雙方在進行數據交換時必須遵守的規則和約定。?這些規則確保了雙方能夠有效地進行通信&#xff0c;實現信息的交換和資源共享。通信協議定義了傳輸時的數據格式、控制信息以及傳輸順序和速度等&#xff0c;確保雙方…

Java---入門基礎篇(下)---方法與數組

前言 本篇文章主要講解有關方法與數組的知識點 ,是基礎篇的一部分 , 而在下一篇文章我會講解類和對象的知識點 入門基礎篇上的鏈接給大家放在下面啦 ! Java---入門基礎篇(上)-CSDN博客 感謝大家點贊&#x1f44d;&#x1f3fb;收藏?評論?&#x1f3fb; 歡迎各位大佬指點…

Python 爬蟲 – BeautifulSoup

Python 爬蟲&#xff08;Web Scraping&#xff09;是指通過編寫 Python 程序從互聯網上自動提取信息的過程。 爬蟲的基本流程通常包括發送 HTTP 請求獲取網頁內容、解析網頁并提取數據&#xff0c;然后存儲數據。 Python 的豐富生態使其成為開發爬蟲的熱門語言&#xff0c;特…

圖像分類項目1:基于卷積神經網絡的動物圖像分類

一、選題背景及動機 在現代社會中&#xff0c;圖像分類是計算機視覺領域的一個重要任務。動物圖像分類具有廣泛的應用&#xff0c;例如生態學研究、動物保護、農業監測等。通過對動物圖像進行自動分類&#xff0c;可以幫助人們更好地了解動物種類、數量和分布情況&#xff0c;…

物聯網 智慧園區井蓋管理辦法和功能介紹

在園區內實現 智慧井蓋 的定位、內部氣體檢測和紅外監測等頂級功能&#xff0c;可以顯著提升園區的安全管理水平和運維效率。以下是智慧井蓋系統的詳細設計方案和功能實現&#xff1a; 一、系統架構 智慧井蓋系統可以分為以下層次&#xff1a; 1. 感知層 定位模塊&#xff1…