原創 榮君宇
CNN,作為一個經典的神經網絡模型,我們并不陌生。CNN包含若幹個卷積層和池化層。池化層相對簡單,對于減少神經元數量,功不可沒。而卷積層,才是我們了解的一個難點。 我們知道卷積層可以提取不同的特征。對CNN的訓練,重點就是
訓練出來各種各樣的卷積核來提取特征。初學者在學習CNN時,往往會面臨一個問題,知道CNN的輸出是如何計算的,也知道如何利用基于鍊式求導法則的反向傳播算法去訓練網絡,卻不知道為什麼CNN能夠提取圖檔特征,卷積核裡面的那幾個數字背後的意義和原理。 今天,我們就從特征提取來分析一下卷積核的作用。
一 對圖像灰階的求導提取特征,關鍵是要找到特征變化的分界點--
特征的邊緣。想象一下,特征的邊緣具有什麼特點? 邊緣意味着兩側圖像的灰階變化會很大。對數學比較敏感的同學,一提到變化,會想到導數。導數用來衡量變化率的大小,對于圖像也是如此。下面是一個灰階變化的例子。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SN5EjMlZTZ5QDN2UmZkdTMmNmM5YmN2IjZ2cjZmJmM18CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
圖中,原信号代表了原圖象灰階的變化,第二行和第三行分别是對灰階的一階導數和二階導數。對比一階導數圖像和二階導數圖像,可以發現,
二階導數相比于一階導數,對邊緣有着更好的響應。因為對于灰階漸變區域,二階導數可以識别出圖像漸變區域的邊緣。在實際中,我們可以根據實際情況來決定使用一階導數還是二階導數,在這裡,我們用二階導數來舉例子。
當我們把
圖檔的每一部分區域,依次帶入到二階導數時,對于灰階變化較小或者是均勻變化的區域,我們會得到一個接近0的值,而對于灰階變化大的區域,我們則會得到一個較大的值,進而識别出圖檔的邊緣。
二 邊緣提取先看一個檢測垂直邊緣的例子。下圖是一個矩形,我們希望過濾掉水準的上下邊,而提取出垂直邊。根據之前提到的,我們隻需要計算水準方向上的梯度變化就可以。
垂直邊緣提取例子水準方向一階導數:
水準方向二階導數:
與之對應的卷積核:
有時候,為了對應卷積的概念,會将卷積核沿對角線反轉在做運算.在這裡我們直接采用反轉後的卷積核。
如果不明白為什麼這個是與之對應的卷積核,不要慌,接着往下看。我們根據卷積計算的方法,來算一下。
我們首先從圖檔中取出一塊3*3像素的圖像,與卷積核進行運算。把中心點的坐标當作是x,y。那麼四周的像素坐标也可以通過+1,或-1來得到。
卷積後的結果為:
去除掉乘以0的項:
發現什麼了嗎?在與提取垂直邊緣的卷積核運算後,得到的就是圖像水準方向的二階導數。當我們滑動卷積核來對整個圖檔卷積時,水準邊緣就會令二階導數取得一個接近于0的值,其餘部分就會得到一個較大的值,進而突出了垂直邊緣。
垂直結果 同理我們可以根據同時對水準方向與垂直方向,求二階導數,得到可以同時提取水準邊沿和垂直邊沿的卷積核。
與之對應的卷積核:
其實,這就是
拉普拉斯算子。 在進一步擴充,任意方向的邊沿提取
如果我們将提取出來的邊緣,與原圖疊加,實際上就是在原有的二階導數基礎上再疊加一次f(x,y),即卷積核變成:
實際效果:
在實際的應用中,我們不僅僅會隻針對灰階來提取特征,還會用到顔色的變化,去提取不同的特征。當然卷積提取特征隻是卷積核的功能之一,卷積還可以用來平滑圖像噪點。有時候還會通過1*1的卷積核,通過加大step來起到降維的作用。
原文連結
CNN(卷積神經網絡)卷積核的特征提取mp.weixin.qq.com