卷积神经网络CNN常用的几个模型
文章目錄
- 0??LeNet5
- 🏵LeNet-5的訓練算法
- 🏵卷積神經網絡的優點
- 🏵總結
- 1??AlexNet
- 🏵特點
- 🏵代碼
- 🏵主要貢獻
- 🌺ReLU激活函數的引入
- 🌺層疊池化操作
- 🌺Dropout操作
- 🌺網絡層數的增加
- 2??VGGNet(Visual Geometry Group)
- 🏵要點
- 3??Google Inception Net
- 🏵1x1卷積的作用
- 🏵要點
- 4??ResNet
- 🏵要點
- 5??ResNeXt
- 🏵網絡結構
- 6??SENet
- 🏵SE Block設計
- 7??基于區域的CNNs (R-CNN - 2013, Fast R-CNN - 2015, Faster R-CNN - 2015)
- 🏵RCNN
- 🏵Fast R-CNN
- 🏵Faster R-CNN
- Inference
0??LeNet5
論文:http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf
LeNet-5:是Yann LeCun在1998年設計的用于手寫數字識別的卷積神經網絡,當年美國大多數銀行就是用它來識別支票上面的手寫數字的,它是早期卷積神經網絡中最有代表性的實驗系統之一。
LenNet-5共有7層(不包括輸入層),每層都包含不同數量的訓練參數,如下圖所示。
LeNet-5中主要有2個卷積層、2個下抽樣層(池化層)、3個全連接層3種連接方式
🏵LeNet-5的訓練算法
訓練算法與傳統的BP算法差不多。主要包括4步,這4步被分為兩個階段:
第一階段,向前傳播階段:
a)從樣本集中取一個樣本(X,Yp),將X輸入網絡;
b)計算相應的實際輸出Op。
在此階段,信息從輸入層經過逐級的變換,傳送到輸出 層。這個過程也是網絡在完成訓練后正常運行時執行的過程。在此過程中,網絡執行的是計算(實際上就是輸入與每層的權值矩陣相點乘,得到最后的輸出結果):
Op=Fn(…(F2(F1(XpW(1))W(2))…)W(n))
第二階段,向后傳播階段
a)算實際輸出Op與相應的理想輸出Yp的差;
b)按極小化誤差的方法反向傳播調整權矩陣。
🏵卷積神經網絡的優點
卷積網絡較一般神經網絡在圖像處理方面有 如下優點
a)輸入圖像和網絡的拓撲結構能很好的吻合;
b)特征提取和模式分類同時進行,并同時在訓練中產生;
c)權重共享可以減少網絡的訓練參數,使神經網絡結構變得更簡單,適應性更強。
🏵總結
卷積網絡在本質上是一種輸入到輸出的映射,它能夠學習大量的輸入與輸出之間的映射關系,而不需要任何輸入和輸出之間的精確的數學表達式。
通過對LeNet-5的網絡結構的分析,可以直觀地了解一個卷積神經網絡的構建方法,可以為分析、構建更復雜、更多層的卷積神經網絡做準備。
LaNet-5的局限性
CNN能夠得出原始圖像的有效表征,這使得CNN能夠直接從原始像素中,經過極少的預處理,識別視覺上面的規律。然而,由于當時缺乏大規模訓練數據,計算機的計算能力也跟不上,LeNet-5 對于復雜問題的處理結果并不理想。
1??AlexNet
論文:http://vision.stanford.edu/teaching/cs231b_spring1415/slides/alexnet_tugce_kyunghee.pdf
AlexNet于2012年由Alex Krizhevsky, Ilya Sutskever 和 Geoffrey Hinton等人提出,并在2012 ILSVRC (ImageNet Large-Scale Visual Recognition Challenge)中取得了最佳的成績。這也是第一次CNN取得這么好的成績,并且把第二名遠遠地甩在了后面,因此震驚了整個領域,從此CNNs才開始被大眾所熟知。
這里簡單地說一下這個ILSVRC,它是一個ImageNet發起的挑戰,是計算機視覺領域的奧運會。全世界的團隊帶著他們的模型來對ImageNet中的數以千萬的共1000個類別的圖片進行分類、定位、識別。這個是一個相當有難度的工作,1000個類別啊。
那我們來看看這個AlexNet的結構把:
🏵特點
關于AlexNet有如下要點:
1、在ImageNet數據上對網絡進行了培訓,該數據包含來自22,000多個類別的超過1500萬個帶注釋的圖像。
2、使用ReLU進行非線性函數(發現減少訓練時間,因為ReLU比傳統的tanh函數快幾倍)。
3、使用的數據增強技術包括圖像轉換,水平反射和補丁提取。
4、實施了dropout層,以解決過度擬合訓練數據的問題。
5、使用mini-batch SGD訓練模型,具有動量和重量衰減的特定值。
6、在兩個GTX 580 GPU上訓練五到六天。
7、每一層權重均初始化為0均值0.01標準差的高斯分布,在第二層、第四層和第五層卷積的偏置被設置為1.0,而其他層的則為0,目的是為了加速早期學習的速率(因為激活函數是ReLU,1.0的偏置可以讓大部分輸出為正)。
8、學習速率初始值為0.01,在訓練結束前共減小3次,每次減小都出現在錯誤率停止減少的時候,每次減小都是把學習速率除以10 。
9、局部響應歸一化。在使用飽和型的激活函數時,通常需要對輸入進行歸一化處理,以利用激活函數在0附近的線性特性與非線性特性,并避免飽和,但對于ReLU函數,不需要輸入歸一化。然而,Alex等人發現通過LRN這種歸一化方式可以幫助提高網絡的泛化性能。LRN的作用就是,對位置(x, y)處的像素計算其與幾個相鄰的kernel maps的像素值的和,并除以這個和來歸一化。
🏵代碼
import time import torch from torch import nn, optim import torchvision device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')class AlexNet(nn.Module):def __init__(self, num_classes=1000):super(AlexNet, self).__init__()self.conv = nn.Sequential(# 卷積層C1nn.Conv2d(3, 96, 11, 4),nn.ReLU(),nn.MaxPool2d(3, 2),# 卷積層C2nn.Conv2d(96, 256, 5, 1, 2),nn.ReLU(),nn.MaxPool2d(3, 2),# 卷積層C3nn.Conv2d(256, 384, 3, 1, 1),nn.ReLU(),# 卷積層C4nn.Conv2d(384, 384, 3, 1, 1),nn.ReLU(),# 卷積層C5nn.Conv2d(384, 256, 3, 1, 1),nn.ReLU(),nn.MaxPool2d(3, 2))self.avgpool = nn.AdaptiveAvgPool2d((6, 6)) # [b,256,6,6], 為了使輸出特征圖大小為6x6,自動求一個合適的核大小self.fc = nn.Sequential(# 全連接層FC6nn.Dropout(),nn.Linear(256*6*6, 4096),nn.ReLU(inplace=True),# 全連接層FC7nn.Dropout(0.5),nn.Linear(4096, 4096),nn.ReLU(),# 全連接層FC8nn.Linear(4096, num_classes),)def forward(self, img):feature = self.conv(img)feature = self.avgpool(feature) # torch.Size([b, 256, 6, 6])output = self.fc(feature.view(img.shape[0], -1)) # torch.Size([1, 1000])return output🏵主要貢獻
🌺ReLU激活函數的引入
采用修正線性單元(ReLU)的深度卷積神經網絡訓練時間比等價的tanh單元要快幾倍。而時間開銷是進行模型訓練過程中很重要的考量因素之一。同時,ReLU有效防止了過擬合現象的出現。由于ReLU激活函數的高效性與實用性,使得它在深度學習框架中占有重要地位。
🌺層疊池化操作
以往池化的大小PoolingSize與步長stride一般是相等的,例如:圖像大小為256*256,PoolingSize=2×2,stride=2,這樣可以使圖像或是FeatureMap大小縮小一倍變為128,此時池化過程沒有發生層疊。但是AlexNet采用了層疊池化操作,即PoolingSize > stride。這種操作非常像卷積操作,可以使相鄰像素間產生信息交互和保留必要的聯系。論文中也證明,此操作可以有效防止過擬合的發生。
🌺Dropout操作
Dropout操作會將概率小于0.5的每個隱層神經元的輸出設為0,即去掉了一些神經節點,達到防止過擬合。那些“失活的”神經元不再進行前向傳播并且不參與反向傳播。這個技術減少了復雜的神經元之間的相互影響。在論文中,也驗證了此方法的有效性。
🌺網絡層數的增加
與原始的LeNet相比,AlexNet網絡結構更深,LeNet為5層,AlexNet為8層。在隨后的神經網絡發展過程中,AlexNet逐漸讓研究人員認識到網絡深度對性能的巨大影響。當然,這種思考的重要節點出現在VGG網絡(下文中將會講到),但是很顯然從AlexNet為起點就已經開始了這項工作。
2??VGGNet(Visual Geometry Group)
論文:https://arxiv.org/pdf/1409.1556.pdf
這個網絡于2014年被牛津大學的Karen Simonyan 和Andrew Zisserman提出,主要特點是 “簡潔,深度”。 深, 是因為VGG有19層,遠遠超過了它的前輩; 而簡潔,則是在于它的結構上,一律采用stride為1的3×3filter,以及stride為2的2×2MaxPooling。所以雖然深,但是結構大家一眼就可以記住。
VggNet一共有六種不同的網絡結構,但是每種結構都有含有5組卷積,每組卷積都使用3x3的卷積核,每組卷積后進行一個2x2最大池化,接下來是三個全連接層.在訓練高級別的網絡時,可以先訓練低級別的網絡,用前者獲得的權重初始化高級別的網絡,可以加速網絡的收斂.
圖下所示,其中,網絡結構D就是著名的VGG16,網絡結構E就是著名的VGG19。
VGGNet在訓練時有一個小技巧,先訓練級別A的簡單網絡,再復用A網絡的權重來初始化后面的幾個復雜模型,這樣訓練收斂的速度更快。在預測時,VGG采用Multi-Scale的方法,將圖像scale到一個尺寸Q,并將圖片輸入卷積網絡計算。然后在最后一個卷積層使用滑窗的方式進行分類預測,將不同窗口的分類結果平均,再將不同尺寸Q的結果平均得到最后結果,這樣可提高圖片數據的利用率并提升預測準確率。在訓練中,VGGNet還使用了Multi-Scale的方法做數據增強,將原始圖像縮放到不同尺寸S,然后再隨機裁切224′224的圖片,這樣能增加很多數據量,對于防止模型過擬合有很不錯的效果。
在訓練的過程中,比AlexNet收斂的要快一些,原因為:
- 使用小卷積核和更深的網絡進行的正則化;
- 在特定的層使用了預訓練得到的數據進行參數的初始化。
🏵要點
1、僅使用3x3尺寸的filter與AlexNet的第一層11x11 filter 和ZF Net的7x7 filter 完全不同。作者的推理是兩個3x3 conv層的組合具有5x5的有效感受野。這又可以模擬更大的 filter,同時保持較小filter尺寸的優勢。其中一個好處是減少了參數的數量。此外,使用兩個轉換層,我們可以使用兩個ReLU層而不是一個。
2、3個背對背的conv層具有7x7的有效感受區域。
3、隨著每層輸入卷的空間大小減小(轉換層和池層的結果),當您沿著網絡向下時,由于filter數量的增加,卷的深度會增加。
4、有趣的是注意到每個maxpool層之后過濾器的數量翻倍。這加強了縮小空間尺寸的想法,但增加了深度。
5、在圖像分類和本地化任務方面都做得很好。作者使用一種本地化形式作為回歸。
6、使用Caffe工具箱構建模型。
7、在訓練期間使用scale jittering比例抖動作為一種數據增強技術。
8、在每個轉換層之后使用ReLU層并使用批量梯度下降進行訓練。
9、在4個Nvidia Titan Black GPU上訓練了兩到三周。
10、LRN層作用不大(VGGNet不使用局部響應標準化(LRN),這種標準化并不能在ILSVRC數據集上提升性能,卻導致更多的內存消耗和計算時間。
3??Google Inception Net
論文:https://www.cs.unc.edu/~wliu/papers/GoogLeNet.pdf
inception(也稱GoogLeNet)是2014年Christian Szegedy提出的一種全新的深度學習結構,在這之前的AlexNet、VGG等結構都是通過增大網絡的深度(層數)來獲得更好的訓練效果,但層數的增加會帶來很多負作用,比如overfit、梯度消失、梯度爆炸等。inception的提出則從另一種角度來提升訓練結果:能更高效的利用計算資源,在相同的計算量下能提取到更多的特征,從而提升訓練結果。
🏵1x1卷積的作用
可以看到圖1中有多個黃色的1x1卷積模塊,這樣的卷積有什么用處呢?
作用1:在相同尺寸的感受野中疊加更多的卷積,能提取到更豐富的特征。這個觀點來自于Network in Network(NIN, https://arxiv.org/pdf/1312.4400.pdf),上圖里三個1x1卷積都起到了該作用。
圖2:線性卷積和NIN結構對比
圖2左側是是傳統的卷積層結構(線性卷積),在一個尺度上只有一次卷積;右圖是Network in Network結構(NIN結構),先進行一次普通的卷積(比如3x3),緊跟再進行一次1x1的卷積,對于某個像素點來說1x1卷積等效于該像素點在所有特征上進行一次全連接的計算,所以右側圖的1x1卷積畫成了全連接層的形式,需要注意的是NIN結構中無論是第一個3x3卷積還是新增的1x1卷積,后面都緊跟著激活函數(比如relu)。將兩個卷積串聯,就能組合出更多的非線性特征。舉個例子,假設第1個3x3卷積+激活函數近似于f1(x)=ax2+bx+c,第二個1x1卷積+激活函數近似于f2(x)=mx2+nx+q,那f1(x)和f2(f1(x))比哪個非線性更強,更能模擬非線性的特征?答案是顯而易見的。NIN的結構和傳統的神經網絡中多層的結構有些類似,后者的多層是跨越了不同尺寸的感受野(通過層與層中間加pool層),從而在更高尺度上提取出特征;NIN結構是在同一個尺度上的多層(中間沒有pool層),從而在相同的感受野范圍能提取更強的非線性。
作用2:使用1x1卷積進行降維,降低了計算復雜度。圖2中間3x3卷積和5x5卷積前的1x1卷積都起到了這個作用。當某個卷積層輸入的特征數較多,對這個輸入進行卷積運算將產生巨大的計算量;如果對輸入先進行降維,減少特征數后再做卷積計算量就會顯著減少。下圖是優化前后兩種方案的乘法次數比較,同樣是輸入一組有192個特征、32x32大小,輸出256組特征的數據,第一張圖直接用3x3卷積實現,需要192x256x3x3x32x32=452984832次乘法;第二張圖先用1x1的卷積降到96個特征,再用3x3卷積恢復出256組特征,需要192x96x1x1x32x32+96x256x3x3x32x32=245366784次乘法,使用1x1卷積降維的方法節省了一半的計算量。有人會問,用1x1卷積降到96個特征后特征數不就減少了么,會影響最后訓練的效果么?答案是否定的,只要最后輸出的特征數不變(256組),中間的降維類似于壓縮的效果,并不影響最終訓練的結果。
🏵要點
1、在整個架構中使用了9個Inception模塊,總共超過100層!現在這很深…
2、沒有使用完全連接的層!他們使用平均水池,從7x7x1024 volume到1x1x1024 volume。這節省了大量參數。
3、使用的參數比AlexNet少12倍。
4、在測試過程中,創建了相同圖像的多個作物,并將其輸入網絡,并對softmax概率進行平均,以便為我們提供最終解決方案。
5、利用R-CNN的概念來檢測它們的檢測模型。
6、Inception模塊有更新版本(版本6和7)。
7、接受“一周內幾個高端GPU”的訓練。
4??ResNet
論文:https://arxiv.org/pdf/1512.03385.pdf
最后要介紹的就是ResNet,于2015年由微軟亞洲研究院的學者們提出。
前面講了,CNN面臨的一個問題就是,隨著層數的增加,CNN的效果會遇到瓶頸,甚至會不增反降。這往往是梯度爆炸或者梯度消失引起的。
ResNet就是為了解決這個問題而提出的,因而幫助我們訓練更深的網絡。 它引入了一個 residual block(殘差塊):
想要了解更多,歡迎查看我的另外一篇文章
🏵要點
1、152層,“超深”
2、有趣的是,在僅前兩層之后,空間大小從224x224的輸入體積壓縮到56x56體積。
3、作者聲稱,普通網中層數的單純增加會導致更高的訓練和測試誤差。
4、該小組嘗試了1202層網絡,但測試精度較低,可能是由于過度擬合。
5、在8 GPU機器上訓練兩到三周。
6、ResNet模型是我們目前擁有的最佳CNN架構,是殘差學習理念的重大創新。
5??ResNeXt
a是ResNeXt基本單元,如果把輸出那里的1x1合并到一起,得到等價網絡b擁有和Inception-ResNet相似的結構,而進一步把輸入的1x1也合并到一起,得到等價網絡c則和通道分組卷積的網絡有相似的結構。
到這里,可以看到本文的野心很大,相當于在說,Inception-ResNet和通道分組卷積網絡,都只是ResNeXt這一范式的特殊形式而已,進一步說明了split-transform-merge的普遍性和有效性,以及抽象程度更高,更本質一點。
🏵網絡結構
6??SENet
🏵SE Block設計
基于即插即用,論文給出下面兩種結構(Inception 和 ResNet)
實驗都基于ImageNet dataset(with 8 GPUs),backbone為ResNet-50。實驗表明,降維比例r取16、Squeeze算子采用平均值池化、Excitation算子使用 Sigmoid 、與殘差跳接并行和全局采用SE Block下,性能最好。
7??基于區域的CNNs (R-CNN - 2013, Fast R-CNN - 2015, Faster R-CNN - 2015)
🏵RCNN
R-CNN的目的是解決物體檢測問題。給定某個圖像,我們希望能夠在所有對象上繪制邊界框。該過程可以分為兩個通用組件,即區域建議步驟和分類步驟。
作者指出,任何類別不可知區域提案方法都應該適合。選擇性搜索特別用于RCNN。選擇性搜索執行生成具有包含對象的概率最高的2000個不同區域的功能。在我們提出一組區域提議之后,這些提議然后被“扭曲”成圖像大小,該圖像大小可以被饋送到訓練有素的CNN(在這種情況下為AlexNet),其為每個區域提取特征向量。然后將該向量用作一組線性SVM的輸入,這些線性SVM針對每個類進行訓練并輸出分類。矢量也被送入邊界框回歸器以獲得最準確的坐標。
🏵Fast R-CNN
由于3個主要問題,對原始模型進行了改進。 訓練需要多個階段(將SVM轉換為邊界框回歸器),計算成本很高,而且速度極慢(RCNN每張圖像需要53秒)。 快速R-CNN能夠通過基本上共享不同提議之間的轉換層的計算并交換生成區域提議和運行CNN的順序來解決速度問題。 在這個模型中,圖像首先通過ConvNet提供,區域提議的特征是從ConvNet的最后一個特征圖獲得的,最后我們還有完全連接的圖層。 作為我們的回歸和分類頭。
🏵Faster R-CNN
更快的R-CNN可以抗衡R-CNN和快速R-CNN展示出來的的有些復雜的訓練管道。 作者在最后一個卷積層之后插入區域提議網絡(RPN)。 該網絡只能查看最后一個卷積特征圖并從中生成區域提議。 從該階段開始,使用與R-CNN相同的管道(ROI池,FC,然后是分類和回歸頭)。
Inference
[0] https://blog.csdn.net/guzhao9901/article/details/118552085
[1] https://blog.csdn.net/m0_37870649/article/details/80547167
[2] https://zhuanlan.zhihu.com/p/32913695
[] https://zhuanlan.zhihu.com/p/374803891
總結
以上是生活随笔為你收集整理的卷积神经网络CNN常用的几个模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于利用常见战斗机机载雷达进行食物烹制可
- 下一篇: 聚焦和增强卷积神经网络