1x1卷積核,又稱為網中網(Network in Network):NIN
卷積的本質是有效提取相鄰像素間的相關特征,而1×1的卷積顯然沒有此作用。它失去了卷積層的特有能力——在高度和寬度維度上,識別相鄰元素間相互作用的能力。
但是,它的唯一計算發生在通道上,具有融合不同通道的信息的能力。
例如:
減少通道數(降維):將輸入特征圖的通道數減少,從而降低計算復雜度。
增加通道數(升維):將輸入特征圖的通道數增加,從而提供更多的特征表示能力。
沒有空間信息,相當于 ==> 把輸入的二維信息拉成了一個一維向量信息。
其實這就更像是逐像素的共享權重,類似于全連接層。
相當于一個全連接層。
通常用于調整網絡層的通道數量和控制模型復雜性。
多尺度特征融合:
在一些網絡架構中,1×1卷積可以用來融合不同尺度的特征圖。
例如,可以將不同大小的特征圖轉換為相同的通道數,然后進行融合,以便更好地利用多尺度信息。
經典應用:
降維:在應用3×3或5×5卷積之前,使用1×1卷積減少輸入通道數,從而降低計算量。
升維:將不同大小卷積核的輸出轉換為相同的通道數,以便進行特征融合。
增加非線性:1*1卷積核,可以在保持feature map尺度不變的(即不損失分辨率)的前提下大幅增加非線性特性(利用后接的非線性激活函數),把網絡做的很deep。
def corr2d_multi_in_out_1x1(X, K):c_i, h, w = X.shapec_o = K.shape[0]X = X.reshape((c_i, h * w))K = K.reshape((c_o, c_i))# 全連接層中的矩陣乘法Y = torch.matmul(K, X)return Y.reshape((c_o, h, w))X = torch.normal(0, 1, (3, 3, 3))
K = torch.normal(0, 1, (2, 3, 1, 1))Y1 = corr2d_multi_in_out_1x1(X, K)
Y2 = corr2d_multi_in_out(X, K)
assert float(torch.abs(Y1 - Y2).sum()) < 1e-6