Pytorch 中nn.Conv2d的參數用法 channel含義詳解

文章目錄

nn.Conv2d

nn.Conv2d是二維卷積方法,相對應的還有一維卷積方法nn.Conv1d,常用於文本數據的處理,而nn.Conv2d一般用於二維圖像。

先看一下接口定義:

class torch.nn.Conv2d(in_channels,
	out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1,
	bias=True)

參數解釋:
在這裏插入圖片描述

  • stride:步長
  • zero-padding:圖像四周填0
  • dilation:控制 kernel 點之間的空間距離,這個看着定義有點抽象,看下面的圖就理解了

在這裏插入圖片描述

  • groups:分組卷積

Convolution 層的參數中有一個group參數,其意思是將對應的輸入通道與輸出通道數進行分組, 默認值爲1, 也就是說默認輸出輸入的所有通道各爲一組。
比如輸入數據大小爲90x100x100x32,通道數32,要經過一個3x3x48的卷積,group默認是1,就是全連接的卷積層。

如果group是2,那麼對應要將輸入的32個通道分成2個16的通道,將輸出的48個通道分成2個24的通道。對輸出的2個24的通道,第一個24通道與輸入的第一個16通道進行全卷積,第二個24通道與輸入的第二個16通道進行全卷積。

極端情況下,輸入輸出通道數相同,比如爲24,group大小也爲24,那麼每個輸出卷積核,只與輸入的對應的通道進行卷積。

channel

在深度學習的算法學習中,都會提到 channels 這個概念。在一般的深度學習框架的 conv2d 中,如 tensorflow 、mxnet ,channels 都是必填的一個參數。

channels 該如何理解?

一般的RGB圖片,channels 數量是 3 (紅、綠、藍);而monochrome圖片,channels 數量是 1

一般 channels 的含義是**,每個卷積層中卷積核的數量。**
爲什麼這麼說呢,看下面的例子:

如下圖,假設現有一個爲 6×6×3的圖片樣本,使用 3×3×3 的卷積核(filter)進行卷積操作。此時輸入圖片的 channels 爲 3 ,而卷積核中的 in_channels 與 需要進行卷積操作的數據的 channels 一致(這裏就是圖片樣本,爲3)。

在這裏插入圖片描述
接下來,進行卷積操作,卷積核中的27個數字與分別與樣本對應相乘後,再進行求和,得到第一個結果。依次進行,最終得到 4×4 的結果。
在這裏插入圖片描述
上面步驟完成後,由於只有一個卷積核,所以最終得到的結果爲 4×4×1, out_channels 爲 1 。

在實際應用中,都會使用多個卷積核。這裏如果再加一個卷積核,就會得到 4×4×2的結果。
在這裏插入圖片描述
總結一下,我偏好把上面提到的 channels 分爲三種:

  • 最初輸入的圖片樣本的 channels ,取決於圖片類型,比如RGB;
  • 卷積操作完成後輸出的 out_channels ,取決於卷積核的數量。此時的 out_channels 也會作爲下一次卷積時的卷積核的 in_channels;
  • 卷積核中的 in_channels ,剛剛2中已經說了,就是上一次卷積的 out_channels ,如果是第一次做卷積,就是1中樣本圖片的 channels 。

說到這裏,相信已經把 channels 講的很清楚了。在CNN中,想搞清楚每一層的傳遞關係,主要就是 height,width 的變化情況,和 channels 的變化情況。

參考博文:
Con2d
channel

發佈了76 篇原創文章 · 獲贊 8 · 訪問量 7362
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章