卷積神經網路(Convolutional neural network, CNN) — 卷積運算、池化運算

Tommy Huang
6 min readMar 26, 2018

--

這篇文章主要是要先介紹卷積神經網路(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)就是在說明,如果像素越高,影像越清晰。

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

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

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

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

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

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

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

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

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

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

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

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

Note:

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

CNN基礎介紹-池化(Pooling)

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

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

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

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

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

Note:

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

--

--

Tommy Huang

怕老了忘記這些吃飯的知識,開始寫文章記錄機器/深度學習相關內容。Medium現在有打賞功能(每篇文章最後面都有連結),如果覺得寫的文章不錯,也可以Donate給個Tipping吧。黃志勝 Chih-Sheng Huang (Tommy), mail: chih.sheng.huang821@gmail.com