參考資料:
1凭迹、什么是卷積
卷積是在特征圖上進(jìn)行滑動(dòng)的矩陣,它的參數(shù)是可學(xué)習(xí)的鸡捐,然后計(jì)算矩陣跟被滑動(dòng)到的區(qū)域內(nèi)的像素點(diǎn)進(jìn)行內(nèi)積計(jì)算,再求和麻裁。這種操作可以使得卷積學(xué)習(xí)到局部特征箍镜,并且每個(gè)被滑動(dòng)到的區(qū)域之間都共享了權(quán)重。共享權(quán)重操作使得卷積相比全連接網(wǎng)絡(luò)節(jié)省了大量的參數(shù)煎源。
2色迂、為什么要引入卷積
① 卷積可以通過(guò)共享權(quán)重來(lái)減少大量的參數(shù)量。例如使用全連接層會(huì)導(dǎo)致參數(shù)量太多手销,假如輸入的圖片尺寸大小為 1000*1000*3歇僧,即 3 百萬(wàn)個(gè)像素點(diǎn),假如全連接層有 1000 個(gè)節(jié)點(diǎn)锋拖,則總共有 30 億 1000 個(gè)參數(shù)诈悍。但是換成使用卷積核組數(shù)為 100 的 5*5 的卷積除呵,則僅需 5*5*3*100 + 100馆蠕,即 7600 個(gè)參數(shù)
② 圖片中存在重復(fù)的特征矫渔,卷積可以通過(guò)共享權(quán)重的方式更高效率地將這些特征學(xué)習(xí)出來(lái)
③ 圖片固有的空間特征昂儒,如果使用全連接層或 RNN 來(lái)學(xué)習(xí)臀叙,則會(huì)破壞圖片的空間特征凯力,而卷積則可以不破壞圖片的空間特征
3猖辫、卷積的計(jì)算過(guò)程
① 對(duì)于有多組的卷積組切威,每次使用一組卷積組去計(jì)算
② 每組卷積組內(nèi)有輸入通道數(shù)個(gè)卷積核售貌,每個(gè)卷積核是參數(shù)可學(xué)習(xí)的二維矩陣
③使用一組內(nèi)的卷積核同時(shí)在輸入的每個(gè)通道上给猾,分別按指定步長(zhǎng)從左到右,從上到下在通道上進(jìn)行滑動(dòng)颂跨,然后計(jì)算二維矩陣跟被滑動(dòng)到的區(qū)域的值進(jìn)行內(nèi)積計(jì)算耙册,然后再求和。然后將所有通道上求得的值再求和毫捣,再加上偏置項(xiàng)详拙。如此即可得到一個(gè)二維的輸出矩陣,作為輸出的一個(gè)通道蔓同。
④ 逐次使用每組卷積組饶辙,按 ③ 中的過(guò)程去進(jìn)行計(jì)算,即可得到一個(gè)三維的輸出矩陣斑粱,通道數(shù)等于卷積組數(shù)弃揽。
4、卷積的優(yōu)點(diǎn)
① 通過(guò)共享權(quán)重來(lái)減少參數(shù)量
② 可以學(xué)習(xí)局部特征,更符合應(yīng)用于圖片
③ 具有平移不變性矿微,因?yàn)榫矸e通過(guò)共享權(quán)重和滑動(dòng)處理痕慢,所以即使特征不在同一個(gè)位置,也可以被卷積核學(xué)習(xí)到
5涌矢、卷積的缺點(diǎn)
① 學(xué)習(xí)到的特征受到感受野的影響太大掖举,需要人工設(shè)置卷積核的大小
② 對(duì)序列輸入的提取效果不夠好
6、卷積的變種
① 空洞卷積(擴(kuò)張卷積娜庇、膨脹卷積):指的是在正常的卷積核的點(diǎn)之間插入空洞 塔次,以此在不增加計(jì)算量來(lái)增大卷積核的感受野。
優(yōu)點(diǎn):
a名秀、在不丟失分辨率的情況下增大感受野励负,對(duì)于檢測(cè)大物體效果更好
b、調(diào)整擴(kuò)張率(卷積點(diǎn)之間的空洞個(gè)數(shù))獲得多尺度信息
缺點(diǎn):
a匕得、對(duì)于檢測(cè)小物體效果不好
② 轉(zhuǎn)置卷積(反卷積继榆、逆卷積):轉(zhuǎn)置卷積是相對(duì)于卷積的相反操作,例如 3*3 卷積得到的結(jié)果是 1 個(gè)值汁掠,而轉(zhuǎn)置操作則是將 1 個(gè)值變成 3*3 的大小略吨。不過(guò)轉(zhuǎn)置卷積并不能夠恢復(fù)被卷積前的值,因?yàn)榫矸e是不可逆操作调塌,只能夠恢復(fù)尺寸。
優(yōu)點(diǎn):
a惠猿、可以將小尺寸的特征變成大尺寸的特征羔砾,實(shí)現(xiàn)類似上采樣的效果,可以應(yīng)用于 CNN 可視化偶妖、FCN 全卷積網(wǎng)絡(luò)姜凄、GAN 等
缺點(diǎn):
只能恢復(fù)尺寸,不能恢復(fù)數(shù)值
空間可分離卷積:將一個(gè)卷積核分離成兩個(gè)更小的卷積核趾访,節(jié)省參數(shù)量
深度可分離卷積:將在每個(gè)通道上使用卷積态秧,再將所有的通道卷積結(jié)果相加,再使用每組卷積去重復(fù)上述過(guò)程的步驟拆分成兩個(gè)步驟扼鞋。
(1)只改變特征圖的大小申鱼,但是不改變特征圖的通道數(shù)。在每個(gè)通道上使用卷積云头,但是不將所有的通道卷積結(jié)果相加捐友,而是保持原樣。例如輸入的是 256 通道溃槐,則卷積后的通道數(shù)仍然還是跟輸入通道數(shù) 256 相等匣砖。而原本的卷積輸出通道數(shù)跟組數(shù)相等。
(2)只改變特征圖的通道數(shù),但不改變特征圖的大小猴鲫。在 (1)的基礎(chǔ)上再使用 輸出通道數(shù)*1*1*通道數(shù) 進(jìn)行卷積
深度可分離卷積本質(zhì)上是卷積核組之間共享了第一階段卷積核的參數(shù)
7对人、卷積后的特征尺寸計(jì)算公式
假設(shè) n 為輸入的特征尺寸, f 為卷積核的大小拂共,p 為 padding 的大小牺弄,s 為卷積核移動(dòng)的步長(zhǎng)
8、1*1匣缘、3*3猖闪、5*5、7*7 的卷積核大小的作用和優(yōu)缺點(diǎn)肌厨,以及相互之間的比較
作用:
① 1*1 的作用可以用來(lái)進(jìn)行通道數(shù)變換培慌,以及在部分情況下替代全連接的作用
② 3*3 的作用是使用小核來(lái)替代大核,從而實(shí)現(xiàn)減少參數(shù)量的作用
③ 5*5 的作用是通過(guò)使用較大的卷積核柑爸,來(lái)達(dá)到使卷積核有更大的感受野的作用吵护。也可以被用在圖像金字塔中。
④ 7*7 的作用也是通過(guò)使用較大的卷積核表鳍,來(lái)達(dá)到使卷積核有更大的感受野的作用馅而。也可以被用在圖像金字塔中。
優(yōu)點(diǎn):
① 1*1 跟其他的卷積核可以實(shí)現(xiàn)深度可分離卷積來(lái)進(jìn)一步減少參數(shù)量
② 5*5 跟 7*7 有更大的感受野
9譬圣、卷積核的參數(shù)量計(jì)算
假設(shè)卷積核的大小為 k瓮恭,輸入通道數(shù)為 in_n,輸出通道數(shù)為 out_n厘熟,則卷積核的參數(shù)量為:
out_n*in_n*k*k + out_n
實(shí)例:
k?=?3
in_n?=?4
out_n?=?5
conv2d?=?nn.Conv2d(in_n,?out_n,?k)
print(conv2d.weight.shape)
print(conv2d.bias.shape)
輸出:
torch.Size([5, 4, 3, 3])
torch.Size([5])
故參數(shù)總量為:5*4*3*3 + 5
10屯蹦、pytorch 中的 Conv2d 函數(shù)的作用和參數(shù)詳解
參考資料:
PyTorch學(xué)習(xí)筆記(9)——nn.Conv2d和其中的padding策略
class torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
函數(shù)作用:對(duì)由多個(gè)平面組成的輸入進(jìn)行二維卷積。
輸入:維度 [B, C_in, H, W]
輸出:維度 [B, C_out, H_out, W_out]
參數(shù)詳解
in_channels(int):輸入通道數(shù)
out_channels(int):輸出通道數(shù)
kernel_size([int, tuple(int, int)]):卷積核大小绳姨,當(dāng)輸入為 3 時(shí)登澜,則卷積核的大小為 [3, 3],當(dāng)輸入為 (3, 4) 時(shí)飘庄,則卷積核的大小為 [3, 4] 脑蠕,即第一個(gè)數(shù)值代表卷積核的高,第二個(gè)數(shù)值代表卷積核的寬跪削。
如果考慮 dilation 參數(shù)谴仙,則實(shí)際的卷積核感受野大小為:(dilation - 1) * (kernel_size - 1) + kernel_size,即當(dāng) dilation=2 時(shí)碾盐,3*3 的卷積核的實(shí)際感受野為 5*5
stride([int, tuple], 可選)=1: 卷積核的移動(dòng)步長(zhǎng)
padding([int, tuple(int, int)], 可選)=0: 填充的長(zhǎng)度狞甚,當(dāng)輸入為 0 時(shí),則不進(jìn)行填充廓旬。當(dāng)輸入為 1 時(shí)哼审,則輸入的每一條邊都填充 1 層 0 值谐腰,即上下左右各填充 1 層 0 值。如果輸入為 (1, 2) 時(shí)涩盾,則表示上下各填充 1 層 0 值十气,而左右則各填充 2 層 0 值。但是不能輸入 (1, 2, 3, 4) 四個(gè)元素的 tuple
dilation(int)=1:卷積核元素之間的間距春霍。當(dāng)輸入為 2 時(shí)砸西,卷積核元素之間的空洞個(gè)數(shù)為 1。
groups=1:
bias=True:
例子: