【Pytorch神经网络理论篇】 11 卷积网络模型+Sobel算子原理
1 視覺角度理解卷積神經網絡
1.1 卷積神經網絡與生物視覺系統的關系
卷積神經網絡的工作流程與生物大腦的處理視覺信號的流程相似,即:將圖像從基礎像素到局部信息再到整體信息的轉化。大腦在對圖像進行分級處理時,圖片由低級特征到高級特征進行逐級計算。
1.2 微積分
大腦處理視覺時,本質是先微分再積分的過程
1.3 離散微分與離散積分
在微積分中,無限細分的條件是,被細分的對象必須是連續的,例如直線可以無限細分為點、但是若干個點則無法進行細分。
1.3.1 離散微分
將離散的對象進行細分的過程,稱為離散微分,例如圖7-3右,虛線段分成四個點的過程。
1.3.2 離散積分
- 圖7-3左可以理解為連續細分的線段進行積分的結果,把所有任意小的線段合在一起。
- 圖7-3右的虛線段可以理解為4個點的積分結果,即把4個點組合在一起。
- 對離散微分結果進行積分的操作即為離散積分。
1.4 視覺神經網絡中的離散積分
1.4.1 計算機視覺的數字化形式
每個矩陣的值為0~255,用來代表像素點
1.4.2 計算機的圖片處理/離散微積分的工作模型
①利用卷積操作對局部信息進行處理,生成低級特征。
②對低級特征進行多次卷積操作,生成中級特征,高級特征。
③將多個局部信息的高級特征組合在一起,生成最終的解釋結果
2 卷積神經網絡的結構
對數據區域進行小規模的計算,使用更小的權重完成分類任務,改善難收斂的情況,提高泛化能力。
2.1 卷積神經網絡的工作過程
以全連接網絡為例子,進行卷積神經網絡的介紹:
?卷積過程:
卷積核(又稱濾波器),該卷積核有三個輸入節點,一個輸出節點。經過卷積操作做得到的節點稱為特征圖。每次移動一定的步長,其輸出的全部結果即為卷積的結果。
2.1.1 卷積神經網絡與全連接網絡的區別
- 卷積網絡輸出的每個節點都是原數據中局部區域節點經過神經元計算后得到的結果。
- 全連接網絡輸出的每個節點都是原數據中全部節點經過神經元計算后得到的結果。
- 卷積神經網絡所輸出的結果中含有的局部信息更為明顯。由于卷積的這一特性,卷積神經網絡在計算機視覺領域被廣泛應用。
2.2 1D卷積、2D卷積、3D卷積
1D/2D/3D卷積計算方式都是一樣的,其中2D卷積應用范圍最廣。與全連接層相比,卷積層的主要優點是參數共享和稀疏連接,這使得卷積操作所需要學習的參數數量大大減少。
卷積計算方式如下:
n:原始圖像尺寸 n ? n
p:即padding,原始圖像邊緣的填充像素列數
f:即 filter 的kernel 尺寸,這里需要強調下,因為原始圖像只有一個通道,所以這個卷積filter 只用了一個kernel。
s:即stride,filter 在圖像上每次的移動步長。
計算方式的推導過程:
卷積就是對相鄰的一片數據進行加權求和得到一個數的一種“合并”操作,將此操作對輸入張量進行滑動掃描以得到輸出張量。循著這個過程,我們很容易推導出卷積輸出尺寸的計算公式。
(1)padding指的是兩邊同時補零,所以補零后輸入尺寸相當于變成了i+2p;
(2)用卷積核掃描的時候,想象一把尺子在桌子上從左移動到右,受到左右邊框的界限,它的移動范圍只有i+2p-f大小。
(3)如果每次移動的步長是s,實際上移動的步數就是 (i+2p-f)/s,但移動的步數必須是整數,因為不能出界,如果最后一步哪怕還差一點也不能算,所以必須要向下取整。
(4)即使一步不移動,也會在原位得到一個輸出點,所以最后得到的輸出尺寸是移動的總步數再加上1。
2.2.2?AI面試題之(反)卷積輸出尺寸計算
【input+2*padding】這個就是原來的圖片,外面加了一圈padding,因為padding是一圈,所以左右、上下都有,所以是兩倍的。
【input+2?padding?kernel】是計算,這個要走多少步。
來舉個例子就好理解了:
圖中是input為7,然后kernel_size為3,podding是1的一個例子。
從下圖中可以看出來,kernel總共要走6步
這個六步,就是input+2?padding?kernel的含義,kernel要滑動的步數。
那么stride就是步長,如果是2的話,那么kernel移動就是這樣的(如下圖):
就變成3步了。那么為什么計算公式最后還要加上1呢?就是在kernel還沒有邁出步子的時候,最開始的處于左上角的那個位置,也是一個點。
【總結:卷積輸出尺寸計算的時候,前面的分式,就是計算卷積核可以走幾步,然后再加上卷積核的初始位置,就是輸出尺寸了】
來看個正經的例子:
?【這個例子展示了,如果輸入尺寸是一個偶數,卷積核是奇數的情況,如何計算——向下取整】
2.2.3? 反卷積推導計算
兩個反卷積例題
輸入尺寸input=2,kernel_size=3,stride=1,padding=2,計算反卷積的輸出尺寸?
?【答案:output=4】
輸入尺寸input=3,kernel=3,stride=2,padding=1,計算反卷積的輸出尺寸?
?【答案:output=5】
2.2.4?1D卷積
計算方式
1、圖中的輸入的數據維度為8,過濾器的維度為5。與二維卷積類似,卷積后輸出的數據維度為8?5+1=4。
2、如果過濾器數量仍為1,輸入數據的channel數量變為16,即輸入數據維度為8×16。這里channel的概念相當于自然語言處理中的embedding,而該輸入數據代表8個單詞,其中每個單詞的詞向量維度大小為16。在這種情況下,過濾器的維度由5變為5×16,最終輸出的數據維度仍為4。
3、如果過濾器數量為n,那么輸出的數據維度就變為4×n。
應用領域
一維卷積常用于序列模型,自然語言處理領域
2.2.5?2D卷積
計算方式
1、圖中的輸入的數據維度為14×14,過濾器大小為5×5,二者做卷積,輸出的數據維度為10×10(14?5+1=10)。
2、上述內容沒有引入channel的概念,也可以說channel的數量為1。如果將二維卷積中輸入的channel的數量變為3,即輸入的數據維度變為(14×14×3)。由于卷積操作中過濾器的channel數量必須與輸入數據的channel數量相同,過濾器大小也變為5×5×3。在卷積的過程中,過濾器與數據在channel方向分別卷積,之后將卷積后的數值相加,即執行10×10次3個數值相加的操作,最終輸出的數據維度為10×10。
3、以上都是在過濾器數量為1的情況下所進行的討論。如果將過濾器的數量增加至16,即16個大小為10×10×3的過濾器,最終輸出的數據維度就變為10×10×16。可以理解為分別執行每個過濾器的卷積操作,最后將每個卷積的輸出在第三個維度(channel 維度)上進行拼接。
應用領域
二維卷積常用于計算機視覺、圖像處理領域
2.2.6?3D卷積
計算方式
1、假設輸入數據的大小為a1×a2×a3,channel數為c,過濾器大小為f×f×f×c(一般不寫channel的維度),過濾器數量為n。
2、基于上述情況,三維卷積最終的輸出為(a1?f+1)×(a2?f+1)×(a3?f+1)×n。
應用領域
三維卷積常用于醫學領域(CT影響),視頻處理領域(檢測動作及人物行為)
3 實例分析:Sobel算子原理
Sobel算子是卷積操作中經典例子,利用手動配置好的卷積核對圖片進行卷積操作,實現圖片的邊緣檢測,生成只包括輪廓的圖片。
Sobel邊緣檢測算法比較簡單,實際應用中效率比canny邊緣檢測效率要高,但是邊緣不如Canny檢測的準確,但是很多實際應用的場合,sobel邊緣卻是首選,Sobel算子是高斯平滑與微分操作的結合體,所以其抗噪聲能力很強,用途較多。尤其是效率要求較高,而對細紋理不太關心的時候。
3.1 方法
假設要處理的圖像為I,在兩個方向求導:
-
水平變化: 將圖像I與奇數大小的模版進行卷積,結果為Gx。比如,當模板大小為3時, Gx為:
-
垂直變化: 將圖像I與奇數大小的模板進行卷積,結果為Gy。比如,當模板大小為3時, 則Gy為:
在圖像的每一點,結合以上兩個結果求出:
統計極大值所在的位置,就是圖像的邊緣。
注意:當內核大小為3時, 以上Sobel內核可能產生比較明顯的誤差, 為解決這一問題,我們使用Scharr函數,但該函數僅作用于大小為3的內核。該函數的運算與Sobel函數一樣快,但結果卻更加精確,其計算方法為:
?3.3 Sobel算子的計算過程
Sobel算子計算過程圖7-10左邊的5×5淺色矩陣可以理解為原始圖片。中間的3x3矩陣便是Sobe1算子。圖7-10右邊的5×5矩陣可以理解的輪廓圖片。
3.3.1 計算過程的描述。
1、在原始圖片的外面補了一圈0,這個過程稱為padding,填充操作目的是生同樣大的矩陣。
2、將補0后矩陣中,左上角的3×3矩陣中的每個元素分別與Sobel算子矩陣中對應位置上的元素相乘,然后相加,所得到的值作為最右邊的第一個元素。
3、把圖7-10中左上角的3×3矩陣向右移動一個格,這可以理解為步長為1。
4、將矩陣中的每個元素分別與中間的3×3矩陣對應位置上的元素相乘,然后再將相乘的結果加在一起,算出的值填到圖7-0右側矩陣的第二個元素里。
5、一直重復這個操作將右邊的值都填滿。完成整個計算過程。
新生成的圖片里面的每個像素值并不能保證在0~256。對于在區間外的像素點,會導致灰度圖無法顯示,因此還需要做一次歸一化,然后每個元素都乘上256,將所有的值映射到0~256這個區間,注意歸一化算法:x=(c-Mim)/Max-Mim)。其中,Max與Mi血為整體數據里的最大值和最小值,x是當前要轉換的像素值。歸一化可以使每個x都在[0,1]區間內。
3.4 Sobel算子原理
如下圖所示,該圖片經過Sobel算子卷積后的數據本質上是該圖片中相隔像素之間的差值而已。如果將這個像素差值數據用圖片的方式顯示出來,就變成了輪廓圖片。
Sobel算子第二行權重值的原理與第1行相同,只不過將差值放大為2倍,這樣做是為了增強的效果。
它的思想是:(1)對卷積核的3行像素差值再做加權處理;(2)以中間的第2行像素差值為中心;(3)按照離中心點越近,對結果影響越大的原理,對第2行像素差值進行加強(值設為2),使其在生成最終的結果中產生主要影響。
4 深層神經網絡中的卷積核
????????在深層網絡中,有很多類似于Sobel算子的卷積核,與Sobel算子不同的是,他們的權重值是模型經過大量的樣本訓練之后算出來的。
????????在模型訓練過程中,會根據最終的輸出結果調節卷積核的權重,最終生成了若干個有特定功能的卷積核,有的可以計算出圖片中的像素差值,從而提取背景紋理等。卷積后所生成的特征數據還可以被繼續卷積處理。在深度神經網絡中,這些卷積處理是通過多個卷積層來實現的。
????????深層卷積網絡中的卷積核也不再是簡單地處理輪廓、紋理等基礎像素,而是對已有的能廓、紋理等特征更進一步地推理和疊加。被多次卷積后的特征數據會有更具象的局部表征,如可以識別出眼睛、耳朵和鼻子等信息。再配合其他結構的神經網絡對局部信息的推理和疊加,最終完成對整個圖片的識別。
5 理解卷積的數學意義--卷積分
總結
以上是生活随笔為你收集整理的【Pytorch神经网络理论篇】 11 卷积网络模型+Sobel算子原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python长沙_长沙python
- 下一篇: 【Pytorch神经网络实战案例】24