TShopping

 找回密碼
 註冊
搜索
查看: 79|回復: 0

[教學] 卷積神經網路 CNN : 1×1卷積計算在做什麼

[複製鏈接]
發表於 2021-2-6 13:03:50 | 顯示全部樓層 |閱讀模式
 
Push to Facebook Push to Plurk  

卷積神經網路(Convolutional neural network, CNN)其他相關連結我也一起列上來


NN-2–1 卷積神經網路(Convolutional neural network, CNN) — 卷積運算、池化運算
NN-2–2 卷積神經網路(Convolutional neural network, CNN) — CNN運算流程
NN-2–3 卷積神經網路(Convolutional neural network, CNN):卷積計算的倒傳遞推導與稀疏矩陣觀點來看卷積計算
NN-2–4 卷積神經網路(Convolutional neural network, CNN):卷積計算中的步伐(stride)和填充(padding)
NN-2–5 卷積神經網路(Convolutional neural network, CNN): 1×1卷積計算在做什麼


一般API在跑張量(tensor),通常是一個批次量的資料在執行
假設有100筆資料,每個資料都是10*10的彩色圖片(所以每個資料都是3張圖片,分別為R、G、B三張),此時的輸入資料的大小就是100 ×10 ×10 ×3,解讀方式batch ×height × width × channel,這個解讀很重要,因為除了影像的長跟寬之外,又多了兩個分別是batch和channel名詞。

Channel這個名詞非常重要,你也可以解讀為維度(dimension),但又不完全一樣,因為這個東西在卷積計算後的數量是跟你kernel map設定數量有關係,所以很重要,因為等等會扯到1×1的捲積。

廢話不多說我們先看一張圖,下圖為一般的卷積計算,這張圖是讓讀者在複習一下捲積怎麼做channel之間的融合。
本例子假設輸入一張影像(R, G, B)所以有3個channel的4×4影像輸入,在1st卷積層(Conv. 1)設定2個kernel map (3×3×3(上一層的channel數)),所以1st卷積層(Conv. 1)輸出的影像就會有2張,在2nd卷積層(Conv. 2)設定3個kernel map (3×3×2(上一層的channel數)),所以2nd卷積層(Conv. 2)輸出的影像就會有3張。

所以可以知道卷積後的channel數是依據你設定的kernel map數量決定的。


卷積神經網路 CNN 卷積計算

卷積神經網路 CNN 卷積計算




* 此圖例的主要是要視覺化說明卷積在設定不同filter數量時,kernel map和輸入輸出的feature map變化,所以我是假設輸入和輸出feature map是一樣大,實質上此例的卷積運算pad=1 (因為kernel size=3),這樣卷積後輸出的feature map大小才會跟輸入一樣。pad設定請看此篇文章這篇主要是講1×1的捲積在做什麼

如果單讀只看1×1捲積,就只是把輸入的圖裡面的值做放大或是縮小,感覺沒什麼屁用,的確沒什麼用,但1×1捲積真的用途重點不是在作捲積這件事情。


卷積神經網路 CNN 卷積計算

卷積神經網路 CNN 卷積計算



1×1捲積最大的好處是在作降維或是提高維度用

這邊的維度就是前面提到的channel,(1x1捲積是在Network in network中提出的,我們不去提它在這篇文章在做什麼)。

一般看到介紹1×1捲積都用類似這種圖,其實對不太懂的人很不友善,就看到一推立方體但是看不太懂。


卷積神經網路 CNN 卷積計算

卷積神經網路 CNN 卷積計算




圖片來源1圖片來源2

1×1卷積實際作法(我自認為比較好理解)如下圖:


卷積神經網路 CNN 卷積計算

卷積神經網路 CNN 卷積計算




* 此圖例的主要是要視覺化說明卷積在設定不同filter數量時,kernel map和輸入輸出的feature map變化,所以我是假設輸入和輸出feature map是一樣大,實質上此例的卷積運算pad=1 (因為kernel size=3),這樣卷積後輸出的feature map大小才會跟輸入一樣。pad設定請看此篇文章

所以1×1卷積其實就是作channel之間的合成

然後根據你設定的1×1 kernel map數量(也就是輸出的channel數量),然後輸出一個大小一樣但channel數不同的輸出。

從上例子得知

第一個1×1捲積是提升維度數/提升channel數 (channel從3→6)
原始圖片(4×4×3) → Conv 1 (6個1×1 ×3kernel ) → Conv1輸出圖片(4×4×6) :

第二個1×1捲積是降低維度數/降低channel數 (channel從6→2)
Conv1輸出圖片(4×4×6) → Conv 2 (2個1×1×6 kernel ) → Conv2輸出圖片(4×4×2)

這邊例子你可能沒有什麼感覺,但實際應用可能channel數會到128,此時如果不希望模型繼續大下去就可以用32個1×1捲積做降到32個channel的動作,之後可以在接著用3×3捲積進行特徵萃取的學習。


文章出處

 

臉書網友討論
您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2021-3-1 01:51 , Processed in 0.058567 second(s), 24 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表