談談1 1的卷積核

2021-10-11 08:44:21 字數 1986 閱讀 6002

最近在看yolo3,發現對於1×1的卷積核的理解有些遺忘,藉此強化一下記憶。

最早我對此有些疑惑,1×1卷積核不會改變高(height)和寬(width)(在stride和padding等其他引數為預設狀態時), 但**通道數(channel)**可以隨意變化,例如在pytorch中:

nn. conv2d(

256,

256, kernel_size=

1)

nn. conv2d(

256,

512, kernel_size=

1)

nn. conv2d(

256,

128, kernel_size=

1)

可以理解為加入了非線性的一些因素,對通道進行非線性重組,使得不同通道內的資訊能夠互動(例如從64層縮小到32層),因為卷積運算不同於普通運算。

一般1×1都是用來做bottleneck的,先做1×1縮小,再做3×3放大。經過bottleneck可以有效縮小引數的規模,從而減少計算量,且在降維之後對資料的訓練和特徵提取將更加有效。

在yolo3中是這樣出現的:

def

conv2d

(filter_in, filter_out, kernel_size)

:#該函式與本文主要內容無關

pad =

(kernel_size -1)

//2if kernel_size else

0return nn.sequential(ordereddict([(

"conv"

, nn.conv2d(filter_in, filter_out, kernel_size=kernel_size, stride=

1, padding=pad, bias=

false))

,("bn"

, nn.batchnorm2d(filter_out)),

("relu"

, nn.leakyrelu(

0.1)),

]))# 例如:in_filters = 1024, filters_list = [512, 1024], out_filters = 75

defmake_last_layers

(filters_list, in_filters, out_filter)

: m = nn.modulelist(

[# 通過來來回回的自定義conv2d函式縮小引數規模

conv2d(in_filters, filters_list[0]

,1),

#先縮小,1*1的卷積核

conv2d(filters_list[0]

, filters_list[1]

,3),

#再放大,3*3的卷積核

conv2d(filters_list[1]

, filters_list[0]

,1),

#先縮小,1*1的卷積核

conv2d(filters_list[0]

, filters_list[1]

,3),

#再放大,3*3的卷積核

conv2d(filters_list[1]

, filters_list[0]

,1),

#最後縮小,1*1的卷積核(達到通道數為512的目標)

conv2d(filters_list[0]

, filters_list[1]

,3),

nn.conv2d(filters_list[1]

, out_filter, kernel_size=1,

stride=

1, padding=

0, bias=

true)]

)return m

(yolo3**引用自

卷積核引數的計算及1 1卷積核

首先,明確乙個概念 卷積並不只是乙個二維的過程,實際上對於輸入的一般而言是三個通道的 r g b 那為什麼輸出的結果可以是128個通道呢?實際上經過卷積過後的通道數是由卷積核的個數來決定的,整個的卷積過程二維情況下也就是在每個通道下發生的卷積過程為 在多通道情況下的卷積情況如下 其實濾波器的維度應該...

1 1卷積核的作用

如何理解跨通道的資訊互動和整合呢?首先還得從三維卷積的計算開始。如圖所示,藍色部分是乙個7 7 n 維數 的feature map,黃色塊為3 3 3的卷積核,將卷積核對應到藍色特徵中可以得到乙個紅色陰影區域,舉個具體的例子 假設卷積核所有的引數都為1。那麼紅色部分的數值 1 1 4 1 3 1 2...

卷積神經網路 1 1 卷積核

卷積神經網路中卷積核的作用是提取影象更高維的特徵,乙個卷積核代表一種特徵提取方式,對應產生乙個特徵圖,卷積核的尺寸對應感受野的大小。經典的卷積示意圖如下 5 5的影象使用3 3的卷積核進行卷積,結果產生3 3 5 3 1 的特徵影象。卷積核的大小一般是 2n 1 2n 1 的奇數乘奇數大小 n 1 ...