TShopping

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

[教學] 卷積神經網路 CNN — 卷積運算、池化運算

[複製鏈接]
發表於 2021-2-6 11:57:02 | 顯示全部樓層 |閱讀模式
 
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卷積計算在做什麼

這篇文章主要是要先介紹卷積神經網路(Convolutional neural network, CNN)會用到的運算方式-卷積運算(Convolution)、池化運算(Pooling)。

廢話篇

現今的數位影像在電子產品的程現就是由很多的小點(像素pixel)一起組成,在此不多說影像的取得是如何生成的。以下針對影像像素和產生來說明,因為卷積神經網路(Convolutional neural network, CNN)一開始就是提在影像上的模型,裡面用到的卷積部份(Convolution)和池化部份(Pooling)會和像素有相關。

大家應該都聽過八百萬畫素,一千萬畫素,這幾百萬幾千萬就代表影像解析度,當然越高的畫素解析度越好。

計算公式: 影像寬度像素值 x 影像高度像素值 = 影像總像素值

八百萬3,360 x 2,460=8,265,600

一千萬3,648 x 2,736=9,980,928

這邊只決定影像的清晰程度,色彩豐富程度跟此無關。

下圖的例子(左圖18*18=324,右圖50*70=3500)就是在說明,如果像素越高,影像越清晰。

卷積神經網路 CNN 卷積運算 池化運算

卷積神經網路 CNN 卷積運算 池化運算



所以當我們在對影像作處理或是影像作辨識時,我們都需要從每個像素中去取得這張圖的特徵,除了每個像素的值之外,還需要考慮像素和像素之間的關連。

其中將影像進行特徵萃取的方法就是將影像進行濾波(filter),得到更有用的資訊,比如用在邊緣(Edge Detection)偵測的derivative mask(遮罩)有Prewitt operator,其遮罩設計出來後,利用卷積運算達到濾波影像的功能,得到只有邊的圖片,下圖就是我用Prewitt operator水平和垂直邊緣偵測用卷積運算得到的結果。


卷積神經網路 CNN 卷積運算 池化運算

卷積神經網路 CNN 卷積運算 池化運算



CNN基礎介紹-卷積運算(Convolution)

假設大家知道什麼是灰階影像(8位元)。

下圖是一個數字0(像素值為10*10=100),人的眼睛看到的是左圖,電腦看到的是右圖。


卷積神經網路 CNN 卷積運算 池化運算

卷積神經網路 CNN 卷積運算 池化運算



濾波影像 = 影像*Operator mask (note: * 不是乘號是卷積運算)

我這邊亂設計一個Operator mask(大小3x3)


卷積神經網路 CNN 卷積運算 池化運算

卷積神經網路 CNN 卷積運算 池化運算




這邊開始對每個像素做卷積運算,圖片中紅色框起來的部份會和Operator mask進行點跟點相乘,最後在全部相加得到結果,這個步驟就是卷積運算。


卷積神經網路 CNN 卷積運算 池化運算

卷積神經網路 CNN 卷積運算 池化運算




整張圖的濾波就是每個位置都會運算到,運算方式一般都是從左上角開始計算,然後橫向向右邊移動運算,到最右邊後在往下移一格,繼續向右邊移動運算,直到整張圖都完成,如下圖。


卷積神經網路 CNN 卷積運算 池化運算

卷積神經網路 CNN 卷積運算 池化運算



下圖是大家常見卷積運算的圖,和上面是做一樣的事情,只是為了讓大家清楚知道卷積運算怎麼執行的,所以做了上面兩張圖。


卷積神經網路 CNN 卷積運算 池化運算

卷積神經網路 CNN 卷積運算 池化運算




最左邊是原始影像,經由中間的mask去做卷積後,可以得到最右邊那張圖。


卷積神經網路 CNN 卷積運算 池化運算

卷積神經網路 CNN 卷積運算 池化運算




剛剛0的那張圖做完卷積運算後得到的結果。

Note:

  • 大家有沒有意識到整張圖掃過一遍後,圖的大小會變小,從原本的10x10變成8x8。如果你不想濾波完,圖變小,當然還有很多技巧(關鍵字: zero padding),比如先將圖擴大到12x12其他部份先塞0進去,在進行一次卷積運算得到10x10的圖。
  • 從來沒有人說mask在移動的時候只能移動一格,所以在用開源模組時,Convolution部份會有一個參數叫strides可以設定,看你一次想移動幾格。




CNN基礎介紹-池化(Pooling)

池化目的只是在將圖片資料量減少並保留重要資訊的方法,把原本的資料做一個最大化或是平均化的降維計算。本文取一個2x2的最大池化法(max pooling)當作例子。


卷積神經網路 CNN 卷積運算 池化運算

卷積神經網路 CNN 卷積運算 池化運算



所以整個圖片做池化的方式如下圖,原本8x8的圖片因為我取2x2的池化,所以會變成4x4。


卷積神經網路 CNN 卷積運算 池化運算

卷積神經網路 CNN 卷積運算 池化運算



當然池化法除了最大化池化法外,也可以做平均池化法(取最大部份改成取平均)、最小化池化法(取最大部份改成取最小化)等。


卷積神經網路 CNN 卷積運算 池化運算

卷積神經網路 CNN 卷積運算 池化運算


此圖為取平均池化法、最大化池化法,最小化池化法後的結果。

從上圖可知max pooling後整張圖等於白的,所以此例就比較不適合用max pooling的方式。

Note:

圖的大小很容易因為pooling變得很小,2x2的Pooling會讓圖小一半,3x3的pooling小3分之1。所以跟卷積運算一樣,Pooling也可以用zero padding和strides的方式,讓圖不要一次變太小。



文章出處

 

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

本版積分規則



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

GMT+8, 2021-3-5 17:58 , Processed in 0.060296 second(s), 24 queries .

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

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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