日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

1X1 convolution layers

發(fā)布時(shí)間:2025/3/21 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1X1 convolution layers 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一文讀懂卷積神經(jīng)網(wǎng)絡(luò)中的1x1卷積核

Amusi

微信公眾號(hào):CVer

552 人贊同了該文章

前言

在介紹卷積神經(jīng)網(wǎng)絡(luò)中的1x1卷積之前,首先回顧卷積網(wǎng)絡(luò)的基本概念[1]。

?

1. 卷積核(convolutional kernel):可以看作對(duì)某個(gè)局部的加權(quán)求和;它是對(duì)應(yīng)局部感知,它的原理是在觀察某個(gè)物體時(shí)我們既不能觀察每個(gè)像素也不能一次觀察整體,而是先從局部開始認(rèn)識(shí),這就對(duì)應(yīng)了卷積。卷積核的大小一般有1x1,3x3和5x5的尺寸(一般是奇數(shù)x奇數(shù))。

?

卷積核的個(gè)數(shù)就對(duì)應(yīng)輸出的通道數(shù)(channels),這里需要說明的是對(duì)于輸入的每個(gè)通道,輸出每個(gè)通道上的卷積核是不一樣的。比如輸入是28x28x192(WxDxK,K代表通道數(shù)),然后在3x3的卷積核,卷積通道數(shù)為128,那么卷積的參數(shù)有3x3x192x128,其中前兩個(gè)對(duì)應(yīng)的每個(gè)卷積里面的參數(shù),后兩個(gè)對(duì)應(yīng)的卷積總的個(gè)數(shù)(一般理解為,卷積核的權(quán)值共享只在每個(gè)單獨(dú)通道上有效,至于通道與通道間的對(duì)應(yīng)的卷積核是獨(dú)立不共享的,所以這里是192x128)。

?

2. 池化(pooling):卷積特征往往對(duì)應(yīng)某個(gè)局部的特征。要得到global的特征需要將全局的特征執(zhí)行一個(gè)aggregation(聚合)。池化就是這樣一個(gè)操作,對(duì)于每個(gè)卷積通道,將更大尺寸(甚至是global)上的卷積特征進(jìn)行pooling就可以得到更有全局性的特征。這里的pooling當(dāng)然就對(duì)應(yīng)了cross region。

與1x1的卷積相對(duì)應(yīng),而1x1卷積可以看作一個(gè)cross channel的pooling操作。pooling的另外一個(gè)作用就是升維或者降維,后面我們可以看到1x1的卷積也有相似的作用。

?

下面從一般卷積過程介紹1x1的卷積,下面圖像來表示卷積的過程:

convolution

1x1卷積核

1x1卷積核,又稱為網(wǎng)中網(wǎng)(Network in Network)[2]。

?

這里通過一個(gè)例子來直觀地介紹1x1卷積。輸入6x6x1的矩陣,這里的1x1卷積形式為1x1x1,即為元素2,輸出也是6x6x1的矩陣。但輸出矩陣中的每個(gè)元素值是輸入矩陣中每個(gè)元素值x2的結(jié)果。

?

上述情況,并沒有顯示1x1卷積的特殊之處,那是因?yàn)樯厦孑斎氲木仃嘽hannel為1,所以1x1卷積的channel也為1。這時(shí)候只能起到升維的作用。這并不是1x1卷積的魅力所在。

?

讓我們看一下真正work的示例。當(dāng)輸入為6x6x32時(shí),1x1卷積的形式是1x1x32,當(dāng)只有一個(gè)1x1卷積核的時(shí)候,此時(shí)輸出為6x6x1。此時(shí)便可以體會(huì)到1x1卷積的實(shí)質(zhì)作用:降維。當(dāng)1x1卷積核的個(gè)數(shù)小于輸入channels數(shù)量時(shí),即降維[3]。

?

注意,下圖中第二行左起第二幅圖像中的黃色立方體即為1x1x32卷積核,而第二行左起第一幅圖像中的黃色立方體即是要與1x1x32卷積核進(jìn)行疊加運(yùn)算的區(qū)域。

?

其實(shí)1x1卷積,可以看成一種全連接(full connection)。

?

第一層有6個(gè)神經(jīng)元,分別是a1—a6,通過全連接之后變成5個(gè),分別是b1—b5,第一層的六個(gè)神經(jīng)元要和后面五個(gè)實(shí)現(xiàn)全連接,本圖中只畫了a1—a6連接到b1的示意,可以看到,在全連接層b1其實(shí)是前面6個(gè)神經(jīng)元的加權(quán)和,權(quán)對(duì)應(yīng)的就是w1—w6,到這里就很清晰了。

?

第一層的6個(gè)神經(jīng)元其實(shí)就相當(dāng)于輸入特征里面那個(gè)通道數(shù):6,而第二層的5個(gè)神經(jīng)元相當(dāng)于1*1卷積之后的新的特征通道數(shù):5。

?

w1—w6是一個(gè)卷積核的權(quán)系數(shù),若要計(jì)算b2—b5,顯然還需要4個(gè)同樣尺寸的卷積核[4]。

?

?

上述列舉的全連接例子不是很嚴(yán)謹(jǐn),因?yàn)閳D像的一層相比于神經(jīng)元還是有區(qū)別的,圖像是2D矩陣,而神經(jīng)元就是一個(gè)數(shù)字,但是即便是一個(gè)2D矩陣(可以看成很多個(gè)神經(jīng)元)的話也還是只需要一個(gè)參數(shù)(1*1的核),這就是因?yàn)閰?shù)的權(quán)值共享。

?

注:1x1卷積一般只改變輸出通道數(shù)(channels),而不改變輸出的寬度和高度

1x1卷積核作用

?

降維/升維

由于 1×1 并不會(huì)改變 height 和 width,改變通道的第一個(gè)最直觀的結(jié)果,就是可以將原本的數(shù)據(jù)量進(jìn)行增加或者減少。這里看其他文章或者博客中都稱之為升維、降維。但我覺得維度并沒有改變,改變的只是 height × width × channels 中的 channels 這一個(gè)維度的大小而已[5]。

圖像來自知乎ID: YJango的回答[6]

增加非線性

1*1卷積核,可以在保持feature map尺度不變的(即不損失分辨率)的前提下大幅增加非線性特性(利用后接的非線性激活函數(shù)),把網(wǎng)絡(luò)做的很deep。

?

備注:一個(gè)filter對(duì)應(yīng)卷積后得到一個(gè)feature map,不同的filter(不同的weight和bias),卷積以后得到不同的feature map,提取不同的特征,得到對(duì)應(yīng)的specialized neuron[7]。

?

跨通道信息交互(channal 的變換)

例子:使用1x1卷積核,實(shí)現(xiàn)降維和升維的操作其實(shí)就是channel間信息的線性組合變化,3x3,64channels的卷積核后面添加一個(gè)1x1,28channels的卷積核,就變成了3x3,28channels的卷積核,原來的64個(gè)channels就可以理解為跨通道線性組合變成了28channels,這就是通道間的信息交互[7]。

?

注意:只是在channel維度上做線性組合,W和H上是共享權(quán)值的sliding window

?

1x1卷積應(yīng)用

?

Inception

?

1. 這一點(diǎn)孫琳鈞童鞋講的很清楚。1×1的卷積層(可能)引起人們的重視是在NIN的結(jié)構(gòu)中,論文中林敏師兄的想法是利用MLP代替?zhèn)鹘y(tǒng)的線性卷積核,從而提高網(wǎng)絡(luò)的表達(dá)能力。文中同時(shí)利用了跨通道pooling的角度解釋,認(rèn)為文中提出的MLP其實(shí)等價(jià)于在傳統(tǒng)卷積核后面接cccp層,從而實(shí)現(xiàn)多個(gè)feature map的線性組合,實(shí)現(xiàn)跨通道的信息整合。而cccp層是等價(jià)于1×1卷積的,因此細(xì)看NIN的caffe實(shí)現(xiàn),就是在每個(gè)傳統(tǒng)卷積層后面接了兩個(gè)cccp層(其實(shí)就是接了兩個(gè)1×1的卷積層)。

?

2. 進(jìn)行降維和升維引起人們重視的(可能)是在GoogLeNet里。對(duì)于每一個(gè)Inception模塊(如下圖),原始模塊是左圖,右圖中是加入了1×1卷積進(jìn)行降維的。雖然左圖的卷積核都比較小,但是當(dāng)輸入和輸出的通道數(shù)很大時(shí),乘起來也會(huì)使得卷積核參數(shù)變的很大,而右圖加入1×1卷積后可以降低輸入的通道數(shù),卷積核參數(shù)、運(yùn)算復(fù)雜度也就跟著降下來了。

?

以GoogLeNet的3a模塊為例,輸入的feature map是28×28×192,3a模塊中1×1卷積通道為64,3×3卷積通道為128,5×5卷積通道為32,如果是左圖結(jié)構(gòu),那么卷積核參數(shù)為1×1×192×64+3×3×192×128+5×5×192×32,而右圖對(duì)3×3和5×5卷積層前分別加入了通道數(shù)為96和16的1×1卷積層,這樣卷積核參數(shù)就變成了1×1×192×64+(1×1×192×96+3×3×96×128)+(1×1×192×16+5×5×16×32),參數(shù)大約減少到原來的三分之一。

?

同時(shí)在并行pooling層后面加入1×1卷積層后也可以降低輸出的feature map數(shù)量,左圖pooling后feature map是不變的,再加卷積層得到的feature map,會(huì)使輸出的feature map擴(kuò)大到416,如果每個(gè)模塊都這樣,網(wǎng)絡(luò)的輸出會(huì)越來越大。

?

而右圖在pooling后面加了通道為32的1×1卷積,使得輸出的feature map數(shù)降到了256。GoogLeNet利用1×1的卷積降維后,得到了更為緊湊的網(wǎng)絡(luò)結(jié)構(gòu),雖然總共有22層,但是參數(shù)數(shù)量卻只是8層的AlexNet的十二分之一(當(dāng)然也有很大一部分原因是去掉了全連接層)[8]。

Inception

?

ResNet

?

ResNet同樣也利用了1×1卷積,并且是在3×3卷積層的前后都使用了,不僅進(jìn)行了降維,還進(jìn)行了升維,參數(shù)數(shù)量進(jìn)一步減少,如下圖的結(jié)構(gòu)[8]。

其中右圖又稱為”bottleneck design”,目的一目了然,就是為了降低參數(shù)的數(shù)目,第一個(gè)1x1的卷積把256維channel降到64維,然后在最后通過1x1卷積恢復(fù),整體上用的參數(shù)數(shù)目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,而不使用bottleneck的話就是兩個(gè)3x3x256的卷積,參數(shù)數(shù)目: 3x3x256x256x2 = 1179648,差了16.94倍。

對(duì)于常規(guī)ResNet,可以用于34層或者更少的網(wǎng)絡(luò)中,對(duì)于Bottleneck Design的ResNet通常用于更深的如101這樣的網(wǎng)絡(luò)中,目的是減少計(jì)算和參數(shù)量(實(shí)用目的)[9]。

?

ResNet

參考

?

[1]?1*1的卷積核與Inception

[2]?《Network in network》

[3]https://www.coursera.org/lecture/convolutional-neural-networks/networks-in-networks-and-1x1-convolutions-ZTb8x)

[4]?如何理解卷積神經(jīng)網(wǎng)絡(luò)中的1*1卷積

[5]【CNN】卷積神經(jīng)網(wǎng)絡(luò)中的 1*1 卷積 的作用

[6]?https://www.zhihu.com/question/56024942/answer/194997553

[7]?1×1 卷積核的作用?(附實(shí)例):

[8]?1X1卷積核到底有什么作用呢?ResNet解析 - CSDN博客?blog.csdn.net[8]?1X1卷積核到底有什么作用呢?

[9]?ResNet解析 - CSDN博客

擴(kuò)展知乎話題:卷積神經(jīng)網(wǎng)絡(luò)中用1*1 卷積有什么作用或者好處呢?

?

微信搜索:CVer或者CVerNews,即可關(guān)注CVer公眾號(hào)

總結(jié)

以上是生活随笔為你收集整理的1X1 convolution layers的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。