① 如何使用tensorflow實現卷積神經網路
沒有卷積神經網路的說法,只有卷積核的說法。
電腦圖像處理的真正價值在於:一旦圖像存儲在電腦上,就可以對圖像進行各種有效的處理。如減小像素的顏色值,可以解決曝光過度的問題,模糊的圖像也可以進行銳化處理,清晰的圖像可以使用模糊處理模擬攝像機濾色鏡產生的柔和效果。
用Photoshop等圖像處理,施展的魔法幾乎是無止境的。四種基本圖像處理效果是模糊、銳化、浮雕和水彩。?這些效果是不難實現的,它們的奧妙部分是一個稱為卷積核的小矩陣。這個3*3的核含有九個系數。為了變換圖像中的一個像素,首先用卷積核中心的系數乘以這個像素值,再用卷積核中其它八個系數分別乘以像素周圍的八個像素,最後把這九個乘積相加,結果作為這個像素的值。對圖像中的每個像素都重復這一過程,對圖像進行了過濾。採用不同的卷積核,就可以得到不同的處理效果。?用PhotoshopCS6,可以很方便地對圖像進行處理。
模糊處理——模糊的卷積核由一組系數構成,每個系數都小於1,但它們的和恰好等於1,每個像素都吸收了周圍像素的顏色,每個像素的顏色分散給了它周圍的像素,最後得到的圖像中,一些刺目的邊緣變得柔和。
銳化卷積核中心的系數大於1,周圍八個系數和的絕對值比中間系數小1,這將擴大一個像素與之周圍像素顏色之間的差異,最後得到的圖像比原來的圖像更清晰。
浮雕卷積核中的系數累加和等於零,背景像素的值為零,非背景像素的值為非零值。照片上的圖案好像金屬表面的浮雕一樣,輪廓似乎凸出於其表面。
要進行水彩處理,首先要對圖像中的色彩進行平滑處理,把每個像素的顏色值和它周圍的二十四個相鄰的像素顏色值放在一個表中,然後由小到大排序,把表中間的一個顏色值作為這個像素的顏色值。然後用銳化卷積核對圖像中的每個像素進行處理,以使得輪廓更加突出,最後得到的圖像很像一幅水彩畫。
我們把一些圖像處理技術結合起來使用,就能產生一些不常見的光學效果,例如光暈等等。
希望我能幫助你解疑釋惑。
② 卷積層在神經網路中如何運算
卷積神經網路(Convolutional Neural Networks, CNN)的核心是進行卷積運算操作。在實際應用中往往採用多層網路結構,因此又被稱為深度卷積神經網路。本文將從單個卷積的計算出發,帶大家掌握卷積層在神經網路中的運算方法。
2.1 單個卷積的計算
要想了解卷積層在神經網路中的計算過程,我們首先需要了解單個「卷積」是如何運作的。
想必大家在學習CNN的過程中都見過下圖( 出處在此 ,這上面有各種各樣的卷積gif圖):
input_shape=(5,5),kernelsize=(3,3),padding=『same』,stride=1,output_shape=(5,5)
在此圖中:
在此次計算中:
Ps: 在實際應用中,每一個輸出的特徵圖還會配備一個偏置s,在上圖中無表示。
2.2 卷積層在神經網路中的運算
了解完單個卷積是如何計算的之後,我們就可以從神經網路的角度來看『卷積層』的運算過程了。下圖展示的是輸入三通圖像(8*8*3)經一層卷積結構,輸出兩通特徵圖(8*8*2)的計算過程:
卷積參數:input_shape=(8,8,3),kernelsize=(3,3),padding=『same』,stride=1,output_shape=(8,8,2)
在此圖中:
在此次卷積層的運算中:
首先我們來關注一下輸入和輸出,他倆的尺度都是(8*8),而輸入是3通道,輸出是2通道(深度學習中不管幹啥一定要先看輸入輸出,對一層是這樣,對整個模型也是這樣)。
其次就准備進入我們最熟悉的卷積核計算了,可是在此之前我們得知道,這個運算過程中到底發生了幾次卷積核計算呢?有的朋友可能要說,卷積的一大特性就是『權值共享』,有幾通輸出就有幾個卷積核,每個卷積核把輸入特徵圖從頭掃到尾。然而這個其實是不對的!
實際上,在卷積核計算數量問題上,應該是「 有幾通道的輸出就有幾套卷積核,每套內的卷積核數量與輸入通道數相等 」,就像我在上圖中所畫的:
至此,這一個卷積層的運算就全部完成了。
2.3 「可訓練參數」驗證
畢竟空口無憑,下面我來通過「 可訓練參數 」的數量,來為大家驗證一下卷積層是不是按我說的這么運算的。大家應該知道,一個卷積層內的「可訓練參數」,其實就是指的卷積核里的那些值,以及要加的偏置量,那麼如果按照前面描述的計算方法來看,一個卷積層內的「可訓練參數有多少呢」?我們可知:
由此可得到:
那麼按理說可訓練參數量應為:
讓我們用keras的summary()來驗證一下:
很棒!
記住,普通卷積層的可訓練參數量為:
Ps: 還有一個衡量模型大小、復雜度的量叫做「理論計算量FLOPs」(floating point operations)。它通常只考慮Conv、FC等參數層的乘、加操作的數量,並且「純加」操作也會被忽略(例如bias)。卷積層運算中的FLOPs計算公式為:
Ps: 這里還要為大家明確一個「感受野」的概念,簡單來講就是卷積神經網路中的某一層特徵圖上的一個點,對應到原圖上可以關聯到多少個點,我們用一張圖來解釋一下:
上圖展示的是一個3層一維卷積,kernel_size=3,我們可以看到:頂層左一的像素與底層左起7個像素值有關,這時候就代表它的感受野有7。我們可以顯而易見的得出以下兩個結論:
這個感受野在後續的卷積的拆分講解中還要用到。
③ 卷積神經網路通俗理解
卷積神經網路(Convolutional Neural Networks, CNN)是一類包含卷積計算且具有深度結構的前饋神經網路(Feedforward Neural Networks),是深度學習(deep learning)的代表演算法之一。卷積神經網路具有表徵學習(representation learning)能力,能夠按其階層結構對輸入信息進行平移不變分類(shift-invariant classification),因此也被稱為「平移不變人工神經網路
④ 卷積神經網路(CNN)基礎
在七月初七情人節,牛郎織女相見的一天,我終於學習了CNN(來自CS231n),感覺感觸良多,所以趕快記下來,別忘了,最後祝大家情人節快樂5555555.正題開始!
CNN一共有卷積層(CONV)、ReLU層(ReLU)、池化層(Pooling)、全連接層(FC(Full Connection))下面是各個層的詳細解釋。
卷積,尤其是圖像的卷積,需要一個濾波器,用濾波器對整個圖像進行遍歷,我們假設有一個32*32*3的原始圖像A,濾波器的尺寸為5*5*3,用w表示,濾波器中的數據就是CNN的參數的一部分,那麼在使用濾波器w對A進行濾波的話,可以用下面的式子表示:
其中x為原始圖像的5*5*3的一部分,b是偏置項置為1。在對A進行濾波之後,產生的是一個28*28*1的數據。那麼假設我們存在6個濾波器,這六個濾波器之間彼此是獨立的,也就是他們內部的數據是不同的且沒有相關性的。可以理解為一個濾波器查找整幅圖像的垂直邊緣,一個查找水平邊緣,一個查找紅色,一個查找黑色這樣。那麼我就可以產生6個28*28*1的數據,將它們組合到一起就可以產生28*28*6的數據,這就是卷積層主要做的工作。
CNN可以看作一系列的卷積層和ReLU層對原始數據結構進行處理的神經網路,處理的過程可以用下面這幅圖表示
特別要注意的是濾波器的深度一定要與上一層傳來的數據的深度相同,就像上圖的第二個卷積層在處理傳來的28*28*6的數據時要使用5*5*6的濾波器.
濾波器在圖像上不斷移動對圖像濾波,自然存在步長的問題,在上面我們舉的例子都是步長為1的情況,如果步長為3的話,32*32*3的圖像經過5*5*3的濾波器卷積得到的大小是(32-5)/3+1=10, 註:步長不能為2因為(32-5)/2+1=14.5是小數。
所以當圖像大小是N,濾波器尺寸為F時,步長S,那麼卷積後大小為(N-F)/S+1
我們從上面的圖中可以看到圖像的長和寬在逐漸的減小,在經過超過5層之後極可能只剩下1*1的空間尺度,這樣是十分不好的,而且也不利於我們接下來的計算,所以我們想讓卷積層處理完之後圖像在空間尺度上大小不變,所以我們引入了pad the border的操作。pad其實就是在圖像周圍補0,擴大圖像的尺寸,使得卷積後圖像大小不變。在CNN中,主要存在4個超參數,濾波器個數K,濾波器大小F,pad大小P和步長S,其中P是整數,當P=1時,對原始數據的操作如圖所示:
那麼在pad操作後卷積後的圖像大小為:(N-F+2*P)/S+1
而要想讓卷積層處理後圖像空間尺度不變,P的值可以設為P=(F-1)/2
卷積層輸入W 1 *H 1 *D 1 大小的數據,輸出W 2 *H 2 *D 2 的數據,此時的卷積層共有4個超參數:
K:濾波器個數
P:pad屬性值
S:濾波器每次移動的步長
F:濾波器尺寸
此時輸出的大小可以用輸入和超參計算得到:
W 2 =(W 1 -F+2P)/S+1
H 2 =(H 1 -F+2P)/S+1
D 2 =D 1
1*1的濾波器也是有意義的,它在深度方向做卷積,例如1*1*64的濾波器對56*56*64的數據卷積得到56*56的數據
F通常是奇數,這樣可以綜合考慮上下左右四個方向的數據。
卷積層從神經元的角度看待可以有兩個性質: 參數共享和局域連接 。對待一個濾波器,例如5*5*3的一個濾波器,對32*32*3的數據卷積得到28*28的數據,可以看作存在28*28個神經元,每個對原圖像5*5*3的區域進行計算,這28*28個神經元由於使用同一個濾波器,所以參數相同,我們稱這一特性為 參數共享 。
針對不同的濾波器,我們可以看到他們會看到同一區域的圖像,相當於在深度方向存在多個神經元,他們看著相同區域叫做 局域連接
參數共享減少了參數的數量,防止了過擬合
局域連接為查找不同特徵更豐富的表現圖像提供了可能。
卷積就像是對原圖像的另一種表達。
激活函數,對於每一個維度經過ReLU函數輸出即可。不改變數據的空間尺度。
通過pad操作,輸出圖像在控制項上並沒有變化,但是深度發生了變化,越來越龐大的數據給計算帶來了困難,也出現了冗餘的特徵,所以需要進行池化操作,池化不改變深度,只改變長寬,主要有最大值和均值兩種方法,一般的池化濾波器大小F為2步長為2,對於最大值池化可以用下面的圖像清晰的表示:
卷積層輸入W 1 *H 1 *D 1 大小的數據,輸出W 2 *H 2 *D 2 的數據,此時的卷積層共有2個超參數:
S:濾波器每次移動的步長
F:濾波器尺寸
此時輸出的大小可以用輸入和超參計算得到:
W 2 =(W 1 -F)/S+1
H 2 =(H 1 -F)/S+1
D 2 =D 1
將最後一層(CONV、ReLU或Pool)處理後的數據輸入全連接層,對於W 2 *H 2 *D 2 數據,我們將其展成1*1*W 2 *H 2 *D 2 大小的數據,輸入層共有W 2 *H 2 *D 2 個神經元,最後根據問題確定輸出層的規模,輸出層可以用softmax表示。也就是說,全連接層就是一個常見的BP神經網路。而這個網路也是參數最多的部分,是接下來想要去掉的部分。完整的神經網路可以用下面的圖表示:
[(CONV-ReLU)*N-POOL?]*M-(FC-RELU)*K,SoftMax
1.更小的濾波器與更深的網路
2.只有CONV層而去掉池化與全鏈接
最早的CNN,用於識別郵編,結構為:
CONV-POOL-CONV-POOL-CONV-FC
濾波器大小5*5,步長為1,池化層2*2,步長為2
2012年由於GPU技術所限,原始AlexNet為兩個GPU分開計算,這里介紹合起來的結構。
輸入圖像為227*227*3
1.首次使用ReLU
2.使用Norm layers,現在已經拋棄,因為效果不大
3.數據經過預處理(例如大小變化,顏色變化等)
4.失活比率0.5
5.batch size 128
6.SGD Momentum 參數0.9(SGD和Momentum見我的其他文章)
7.學習速率 0.01,准確率不在提升時減少10倍,1-2次後達到收斂
8.L2權重減少0.0005
9.錯誤率15.4%
改進自AlexNet,主要改變:
1.CONV1的濾波器從11*11步長S=4改為7*7步長為2.
2.CONV3,4,5濾波器數量有384,384,256改為512,1024,512(濾波器數量為2的n次冪有利於計算機計算可以提高效率)
錯誤率:14.8%後繼續改進至11.2%
當前最好的最易用的CNN網路,所有卷積層濾波器的大小均為3*3,步長為1,pad=1,池化層為2*2的最大值池化,S=2。
主要參數來自全連接層,這也是想要去掉FC的原因。
具有高度的統一性和線性的組合,易於理解,十分方便有VGG-16,VGG-19等多種結構。
錯誤率7.3%
完全移除FC層,參數只有500萬,使用Inception模塊(不太理解,有時間繼續看)
准確率6.67%
准確率3.6%
擁有極深的網路結構,且越深准確率越高。是傳統CNN不具備的特點,傳統CNN並非越深越准確。需要訓練時間較長但是快於VGG
1.每個卷積層使用Batch Normalization
2.Xavier/2初始化
3.SGD+Momentum(0.9)
4.Learning rate:0.1,准確率不變減小10倍(因為Batch Normalization所以比AlexNet大)
5.mini-batch size 256
6.Weight decay of 0.00001
7.不適用失活(因為Batch Normalization)
具體的梯度過程學完ResNet再說吧。
⑤ 卷積神經網路cnn究竟是怎樣一步一步工作的
用一個卷積核滑動圖片來提取某種特徵(比如某個方向的邊),然後激活函數用ReLU來壓制梯度彌散。對得到的結果用另一個卷積核繼續提取+reLU,然後池化(保留區域最大或者用區域平均來替換整個局部區域的值,保證平移不變性和一定程度上對過擬合的壓制)
之後「深度」的話,就會需要對池化後的結果繼續用不同的卷積核進行 「卷積+relu」再池化的工作。最後得到的實質是一個圖片的深度特徵,然後實際分類需要另外加一層,一般是softmax。
(也就是說如果對一個現成的已經訓練完畢的卷積神經網路模型,只保留除了最後一層之外的部分,然後輸入訓練圖片,把網路的輸出重新送入一個多類的SVM再訓練,最後也能得到差不多的結果,取決於svm的參數。)
⑥ 怎樣用python構建一個卷積神經網路
用keras框架較為方便
首先安裝anaconda,然後通過pip安裝keras
⑦ 卷積神經網路演算法是什麼
一維構築、二維構築、全卷積構築。
卷積神經網路(Convolutional Neural Networks, CNN)是一類包含卷積計算且具有深度結構的前饋神經網路(Feedforward Neural Networks),是深度學習(deep learning)的代表演算法之一。
卷積神經網路具有表徵學習(representation learning)能力,能夠按其階層結構對輸入信息進行平移不變分類(shift-invariant classification),因此也被稱為「平移不變人工神經網路(Shift-Invariant Artificial Neural Networks, SIANN)」。
卷積神經網路的連接性:
卷積神經網路中卷積層間的連接被稱為稀疏連接(sparse connection),即相比於前饋神經網路中的全連接,卷積層中的神經元僅與其相鄰層的部分,而非全部神經元相連。具體地,卷積神經網路第l層特徵圖中的任意一個像素(神經元)都僅是l-1層中卷積核所定義的感受野內的像素的線性組合。
卷積神經網路的稀疏連接具有正則化的效果,提高了網路結構的穩定性和泛化能力,避免過度擬合,同時,稀疏連接減少了權重參數的總量,有利於神經網路的快速學習,和在計算時減少內存開銷。
卷積神經網路中特徵圖同一通道內的所有像素共享一組卷積核權重系數,該性質被稱為權重共享(weight sharing)。權重共享將卷積神經網路和其它包含局部連接結構的神經網路相區分,後者雖然使用了稀疏連接,但不同連接的權重是不同的。權重共享和稀疏連接一樣,減少了卷積神經網路的參數總量,並具有正則化的效果。
在全連接網路視角下,卷積神經網路的稀疏連接和權重共享可以被視為兩個無限強的先驗(pirior),即一個隱含層神經元在其感受野之外的所有權重系數恆為0(但感受野可以在空間移動);且在一個通道內,所有神經元的權重系數相同。
⑧ 九大卷積神經網路 ( CNN ) 的 PyTorch 實現
典型的卷積神經網路包括: AlexNet、VGG、ResNet; InceptionV1、InceptionV2、InceptionV3、InceptionV4、Inception-ResNet 。
輕量級網路包括: GhostNet、MobileNets、MobileNetV2、MobileNetV3、ShuffleNet、ShuffleNet V2、SqueezeNet Xception MixNet GhostNet 。
目標檢測網路包括: SSD、YOLO、YOLOv2、YOLOv3、FCOS、FPN、RetinaNet Objects as Points、FSAF、CenterNet FoveaBox 。
語義分割網路包括: FCN、Fast-SCNN、LEDNet、LRNNet、FisheyeMODNet 。
實例分割網路包括:PolarMask。
PolarMask : Single Shot Instance Segmentation with Polar Representation ,2019
人臉檢測和識別網路包括:FaceBoxes、LFFD、VarGFaceNet。
人體姿態識別網路包括:Stacked Hourglass、Networks Simple Baselines、LPN。
StackedHG: Stacked Hourglass Networks for Human Pose Estimation ,2016
Simple Baselines :Simple Baselines for Human Pose Estimation and Tracking
LPN: Simple and Lightweight Human Pose Estimation
注意力機制網路包括:SE Net、scSE、NL Net、GCNet、CBAM。
人像分割網路包括:SINet。