DL-tudo
本文來自CVer公眾號的深度學習面試寶典,mark以便初學DL時邊查看重難點和備忘錄tudo。
文章目錄
- 深度學習
- 神經(jīng)網(wǎng)絡中的Epoch、Iteration、Batchsize
- 反向傳播(BP)
- CNN本質和優(yōu)勢
- 鞍點的定義和特點?
- 神經(jīng)網(wǎng)絡數(shù)據(jù)預處理方法有哪些?
- 神經(jīng)網(wǎng)絡怎樣進行參數(shù)初始化?
- 卷積
- 卷積的反向傳播過程
- CNN 模型所需的計算力(flops)和參數(shù)(parameters)數(shù)量是怎么計算的?
- 池化(Pooling)
- 池化層怎么接收后面?zhèn)鬟^來的損失?
- 平均池化(average pooling)
- 最大池化(max pooling)
- 感受野
- 感受野計算
- 卷積神經(jīng)網(wǎng)絡的感受野
- 權重初始化方法
- Xavier
- 正則化方法
- Batch Normalization(BN)
- BN 原理
- 手寫 BN
- BN 可以防止過擬合么?為什么
- BN 有哪些參數(shù)?
- BN 的反向傳播推導
- BN 在訓練和測試的區(qū)別?
- Weight Normalization(WN)
- Layer Normalization(LN)
- Instance Normalization(IN)
- Group Normalization(GN)
- BN、LN、WN、IN和GN的區(qū)別
- 優(yōu)化算法
- 梯度下降法
- mini-batch梯度下降法
- 隨機梯度下降法(SGD)
- SGD每步做什么,為什么能online learning?
- 動量梯度下降法(Momentum)
- RMSprop
- Adagrad
- Adam
- Adam 優(yōu)化器的迭代公式
- 激活函數(shù)
- Sigmoid
- Sigmoid用作激活函數(shù)時,分類為什么要用交叉熵損失,而不用均方損失?
- tanh
- ReLU
- ReLU 激活函數(shù)為什么比sigmoid和tanh好?
- ReLU 激活函數(shù)為什么能解決梯度消失問題?
- ReLU 有哪些變體?
- Dropout
- Dropout 基本原理
- Dropout 如何實現(xiàn)?
- Drop 在訓練和測試的區(qū)別
- 損失函數(shù)(Loss)
- Cross Entropy Loss(CE)
- Hinge Loss
- Focal Loss
- 1*1 卷積有什么作用?
- AlexNet
- VGG
- ResNet
- ResNet為什么不用Dropout?
- 為什么 ResNet 不在一開始就使用residual block,而是使用一個7×7的卷積?
- 什么是Bottlenet layer?
- ResNet如何解決梯度消失?
- ResNet網(wǎng)絡越來越深,準確率會不會提升?
- ResNet v2
- ResNet v1 與 ResNet v2的區(qū)別
- ResNet v2 的 ReLU 激活函數(shù)有什么不同?
- ResNeXt
- Inception系列(V1-V4)
- InceptionV1
- InceptionV2
- InceptionV3
- InceptionV4
- DenseNet
- 為什么 DenseNet 比 ResNet 好?
- 為什么 DenseNet 比 ResNet 更耗顯存?
- SE-Net
- Squeeze-Excitation結構是怎么實現(xiàn)的?
- FCN
- U-Net
- DeepLab 系列
- 邊框回顧(Bounding-Box Regression)
- 反卷積(deconv)/轉置卷積(trans)
- 空洞卷積(dilated/Atrous conv)
- Pooling層原理
- depthwise卷積加速比推導
- 為什么降采用使用max pooling,而分類使用average pooling
- max pooling如何反向傳播
- 反卷積
- 組卷積(group convolution)
- 交錯組卷積(Interleaved group convolutions,IGC)
- 空洞/擴張卷積(Dilated/Atrous Convolution)
- 轉置卷積(Transposed Convolutions/deconvlution)
- Group Normalization
- Xception
- SENet
- SKNet
- GCNet
- Octave Convolution
- MobileNet 系列(V1-V3)
- MobileNetV1
- MobileNetV2
- MobileNetV3
- MobileNet系列為什么快?各有多少層?多少參數(shù)?
- MobileNetV1、MobileNetV2和MobileNetV3有什么區(qū)別
- MobileNetv2為什么會加shotcut?
- MobileNet V2中的Residual結構最先是哪個網(wǎng)絡提出來的?
- ShuffleNet 系列(V1-V2++)
- ShuffleNetV1
- ShuffleNetV2
- IGC 系列(V1-V3)
- 深度可分離網(wǎng)絡(Depth separable convolution)
- 學習率如何調整
- 神經(jīng)網(wǎng)絡的深度和寬度作用
- 網(wǎng)絡壓縮與量化
- Batch Size
- BN和Dropout在訓練和測試時的差別
- 深度學習調參有哪些技巧?
- 為什么深度學習中的模型基本用3x3和5x5的卷積(奇數(shù)),而不是2x2和4x4的卷積(偶數(shù))?
- 深度學習訓練中是否有必要使用L1獲得稀疏解?
- EfficientNet
- 如何理解歸一化(Normalization)對于神經(jīng)網(wǎng)絡(深度學習)的幫助?
- 多標簽分類怎么解決?
- TODO
- Reference
深度學習
神經(jīng)網(wǎng)絡中的Epoch、Iteration、Batchsize
神經(jīng)網(wǎng)絡中epoch與iteration是不相等的
-
batchsize:中文翻譯為批大小(批尺寸)。在深度學習中,一般采用SGD訓練,即每次訓練在訓練集中取batchsize個樣本訓練;
-
iteration:中文翻譯為迭代,1個iteration等于使用batchsize個樣本訓練一次;一個迭代 = 一個正向通過+一個反向通過
-
epoch:迭代次數(shù),1個epoch等于使用訓練集中的全部樣本訓練一次;一個epoch = 所有訓練樣本的一個正向傳遞和一個反向傳遞
舉個例子,訓練集有1000個樣本,batchsize=10,那么:訓練完整個樣本集需要:100次iteration,1次epoch。
參考資料
- 神經(jīng)網(wǎng)絡中的Epoch、Iteration、Batchsize
- 神經(jīng)網(wǎng)絡中epoch與iteration相等嗎
反向傳播(BP)
- TODO
參考資料
- 一文搞懂反向傳播算法
CNN本質和優(yōu)勢
局部卷積(提取局部特征)
權值共享(降低訓練難度)
Pooling(降維,將低層次組合為高層次的特征)
多層次結構
鞍點的定義和特點?
- TODO
神經(jīng)網(wǎng)絡數(shù)據(jù)預處理方法有哪些?
- TODO
神經(jīng)網(wǎng)絡怎樣進行參數(shù)初始化?
- TODO
卷積
- TODO
參考資料
-
Feature Extraction Using Convolution
-
convolution
-
理解圖像卷積操作的意義
-
關于深度學習中卷積核操作
卷積的反向傳播過程
- TODO
參考資料
-
Notes on Convolutional Neural Network
-
Deep Learning論文筆記之(四)CNN卷積神經(jīng)網(wǎng)絡推導和實現(xiàn)
-
反向傳導算法
-
Deep learning:五十一(CNN的反向求導及練習)
-
卷積神經(jīng)網(wǎng)絡(CNN)反向傳播算法
-
卷積神經(jīng)網(wǎng)絡(CNN)反向傳播算法公式詳細推導
-
全連接神經(jīng)網(wǎng)絡中反向傳播算法數(shù)學推導
-
卷積神經(jīng)網(wǎng)絡(CNN)反向傳播算法推導
CNN 模型所需的計算力(flops)和參數(shù)(parameters)數(shù)量是怎么計算的?
對于一個卷積層,假設其大小為 (其中c為#input channel, n為#output channel),輸出的feature map尺寸為 ,則該卷積層的
-
paras =[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-SDrMWW9E-1626030698000)(https://www.zhihu.com/equation?tex=n+%5Ctimes+%28h+%5Ctimes+w+%5Ctimes+c+%2B+1%29)]
-
FLOPs = [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-8TYfp2Z6-1626030698002)(https://www.zhihu.com/equation?tex=H%27+%5Ctimes+W%27+%5Ctimes+n+%5Ctimes%28h+%5Ctimes+w+%5Ctimes+c+%2B+1%29)]
-
TODO
參考資料
- CNN 模型所需的計算力(flops)和參數(shù)(parameters)數(shù)量是怎么計算的?
- CNN中parameters和FLOPs計算
- FLOPS理解
- PyTorch-OpCounter
池化(Pooling)
平均池化(Mean Pooling)
mean pooling的前向傳播就是把一個patch中的值求取平均來做pooling,那么反向傳播的過程也就是把某個元素的梯度等分為n份分配給前一層,這樣就保證池化前后的梯度(殘差)之和保持不變,還是比較理解的,圖示如下
最大池化(Max Pooling)
max pooling也要滿足梯度之和不變的原則,max pooling的前向傳播是把patch中最大的值傳遞給后一層,而其他像素的值直接被舍棄掉。那么反向傳播也就是把梯度直接傳給前一層某一個像素,而其他像素不接受梯度,也就是為0。所以max pooling操作和mean pooling操作不同點在于需要記錄下池化操作時到底哪個像素的值是最大,也就是max id,這個可以看caffe源碼的pooling_layer.cpp,下面是caffe框架max pooling部分的源碼
// If max pooling, we will initialize the vector index part.if (this->layer_param_.pooling_param().pool() == PoolingParameter_PoolMethod_MAX && top.size() == 1){max_idx_.Reshape(bottom[0]->num(), channels_, pooled_height_,pooled_width_);}參考資料
- 如何理解CNN中的池化?
- 深度學習筆記(3)——CNN中一些特殊環(huán)節(jié)的反向傳播
池化層怎么接收后面?zhèn)鬟^來的損失?
- TODO
平均池化(average pooling)
- TODO
最大池化(max pooling)
- TODO
感受野
感受野計算
- TODO
參考資料
- 卷積神經(jīng)網(wǎng)絡物體檢測之感受野大小計算
- 如何計算感受野(Receptive Field)——原理
- Computing Receptive Fields of Convolutional Neural Networks
卷積神經(jīng)網(wǎng)絡的感受野
- TODO
參考資料
- 卷積神經(jīng)網(wǎng)絡的感受野
權重初始化方法
- TODO
Xavier
- TODO
正則化方法
參考資料
- 正則化方法
Batch Normalization(BN)
BN 原理
- TODO
參考資料
- Batch Normalization原理與實戰(zhàn)
手寫 BN
- TODO
BN 可以防止過擬合么?為什么
- TODO
BN 有哪些參數(shù)?
- TODO
BN 的反向傳播推導
- TODO
BN 在訓練和測試的區(qū)別?
- TODO
Weight Normalization(WN)
- TODO
Layer Normalization(LN)
- TODO
Instance Normalization(IN)
- TODO
Group Normalization(GN)
- TODO
BN、LN、WN、IN和GN的區(qū)別
- TODO
參考資料
-
深度學習中的五種歸一化(BN、LN、IN、GN和SN)方法簡介
-
BatchNormalization、LayerNormalization、InstanceNorm、GroupNorm、SwitchableNorm總結
優(yōu)化算法
- 隨機梯度下降(SGD)
- Mini-Batch
- 動量(Momentum)
- Nesterov 動量
- AdaGrad
- AdaDelta
- RMSProp
- Adam
- Adamax
- Nadam
- AMSGrad
- AdaBound
參考資料
-
《Deep Learning》第八章:深度模型中的優(yōu)化
-
從 SGD 到 Adam —— 深度學習優(yōu)化算法概覽(一)
-
Adam 究竟還有什么問題 —— 深度學習優(yōu)化算法概覽(二)
-
An overview of gradient descent optimization algorithms
梯度下降法
- TODO
mini-batch梯度下降法
- TODO
隨機梯度下降法(SGD)
SGD每步做什么,為什么能online learning?
- TODO
動量梯度下降法(Momentum)
- TODO
參考資料
- 簡述動量Momentum梯度下降
RMSprop
SdW=βSdW+(1?β)dW2S_{dW}=\beta S_{dW}+\left ( 1-\beta \right )dW^{2} SdW?=βSdW?+(1?β)dW2
Sdb=βSdb+(1?β)db2S_{db}=\beta S_{db}+\left ( 1-\beta \right )db^{2} Sdb?=βSdb?+(1?β)db2
W=W?αdWSdW,b=b?αdbSdbW=W-\alpha\frac{dW}{\sqrt{S_{dW}}}, b=b-\alpha\frac{db}{\sqrt{S_{db}}} W=W?αSdW??dW?,b=b?αSdb??db?
- TODO
Adagrad
- TODO
Adam
Adam算法結合了Momentum和RMSprop梯度下降法,是一種極其常見的學習算法,被證明能有效適用于不同神經(jīng)網(wǎng)絡,適用于廣泛的結構。
vdW=β1vdW+(1?β1)dWv_{dW}=\beta_{1} v_{dW}+\left ( 1-\beta_{1} \right )dW vdW?=β1?vdW?+(1?β1?)dW
vdb=β1vdb+(1?β1)dbv_{db}=\beta_{1} v_{db}+\left ( 1-\beta_{1} \right )db vdb?=β1?vdb?+(1?β1?)db
SdW=β2SdW+(1?β2)dW2S_{dW}=\beta_{2} S_{dW}+\left ( 1-\beta_{2} \right )dW^{2} SdW?=β2?SdW?+(1?β2?)dW2
Sdb=β2Sdb+(1?β2)db2S_{db}=\beta_{2} S_{db}+\left ( 1-\beta_{2} \right )db^{2} Sdb?=β2?Sdb?+(1?β2?)db2
vdWcorrected=vdW1?β1tv_{dW}^{corrected}=\frac{v_{dW}}{1-\beta_{1}^{t}} vdWcorrected?=1?β1t?vdW??
vdbcorrected=vdb1?β1tv_{db}^{corrected}=\frac{v_{db}}{1-\beta_{1}^{t}} vdbcorrected?=1?β1t?vdb??
SdWcorrected=SdW1?β2tS_{dW}^{corrected}=\frac{S_{dW}}{1-\beta_{2}^{t}} SdWcorrected?=1?β2t?SdW??
Sdbcorrected=Sdb1?β2tS_{db}^{corrected}=\frac{S_{db}}{1-\beta_{2}^{t}} Sdbcorrected?=1?β2t?Sdb??
W:=W?avdWcorrectedSdWcorrected+εW:=W-\frac{av_{dW}^{corrected}}{\sqrt{S_{dW}^{corrected}}+\varepsilon } W:=W?SdWcorrected??+εavdWcorrected??
超參數(shù):
α,β1,β2,ε\alpha ,\beta _{1},\beta_{2},\varepsilon α,β1?,β2?,ε
α,β1,β2,ε\alpha ,\beta _{1},\beta_{2},\varepsilon α,β1?,β2?,ε
- TODO
Adam 優(yōu)化器的迭代公式
- TODO
激活函數(shù)
- TODO
參考資料
- What is activate function?
- 資源 | 從ReLU到Sinc,26種神經(jīng)網(wǎng)絡激活函數(shù)可視化
Sigmoid
- TODO
Sigmoid用作激活函數(shù)時,分類為什么要用交叉熵損失,而不用均方損失?
- TODO
tanh
- TODO
ReLU
- TODO
ReLU 相關變體
ReLU 激活函數(shù)為什么比sigmoid和tanh好?
- TODO
ReLU 激活函數(shù)為什么能解決梯度消失問題?
- TODO
ReLU 有哪些變體?
- TODO
Dropout
Dropout 基本原理
- TODO
參考資料
- 理解dropout
Dropout 如何實現(xiàn)?
- TODO
Drop 在訓練和測試的區(qū)別
- TODO
損失函數(shù)(Loss)
- TODO
Cross Entropy Loss(CE)
- TODO
Hinge Loss
- TODO
Focal Loss
- TODO
1*1 卷積有什么作用?
- TODO
AlexNet
- 使用ReLU激活函數(shù)
- Dropout
- 數(shù)據(jù)增廣
先給出AlexNet的一些參數(shù)和結構圖:
卷積層:5層
全連接層:3層
深度:8層
參數(shù)個數(shù):60M
神經(jīng)元個數(shù):650k
分類數(shù)目:1000類
參考資料
AlexNet
VGG
《Very Deep Convolutional Networks for Large-Scale Image Recognition》
- arXiv:https://arxiv.org/abs/1409.1556
- intro:ICLR 2015
- homepage:http://www.robots.ox.ac.uk/~vgg/research/very_deep/
VGG 是Oxford的Visual Geometry Group的組提出的(大家應該能看出VGG名字的由來了)。該網(wǎng)絡是在ILSVRC 2014上的相關工作,主要工作是證明了增加網(wǎng)絡的深度能夠在一定程度上影響網(wǎng)絡最終的性能。VGG有兩種結構,分別是VGG16和VGG19,兩者并沒有本質上的區(qū)別,只是網(wǎng)絡深度不一樣。
VGG16相比AlexNet的一個改進是采用連續(xù)的幾個3x3的卷積核代替AlexNet中的較大卷積核(11x11,7x7,5x5)。對于給定的感受野(與輸出有關的輸入圖片的局部大小),采用堆積的小卷積核是優(yōu)于采用大的卷積核,因為多層非線性層可以增加網(wǎng)絡深度來保證學習更復雜的模式,而且代價還比較小(參數(shù)更少)。
簡單來說,在VGG中,使用了3個3x3卷積核來代替7x7卷積核,使用了2個3x3卷積核來代替5*5卷積核,這樣做的主要目的是在保證具有相同感知野的條件下,提升了網(wǎng)絡的深度,在一定程度上提升了神經(jīng)網(wǎng)絡的效果。
比如,3個步長為1的3x3卷積核的一層層疊加作用可看成一個大小為7的感受野(其實就表示3個3x3連續(xù)卷積相當于一個7x7卷積),其參數(shù)總量為 3x(9xC^2) ,如果直接使用7x7卷積核,其參數(shù)總量為 49xC^2 ,這里 C 指的是輸入和輸出的通道數(shù)。很明顯,27xC2小于49xC2,即減少了參數(shù);而且3x3卷積核有利于更好地保持圖像性質。
這里解釋一下為什么使用2個3x3卷積核可以來代替5*5卷積核:
5x5卷積看做一個小的全連接網(wǎng)絡在5x5區(qū)域滑動,我們可以先用一個3x3的卷積濾波器卷積,然后再用一個全連接層連接這個3x3卷積輸出,這個全連接層我們也可以看做一個3x3卷積層。這樣我們就可以用兩個3x3卷積級聯(lián)(疊加)起來代替一個 5x5卷積。
具體如下圖所示:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ADLU9Qqw-1626030698005)(imgs/DLIB-0012.png)]
至于為什么使用3個3x3卷積核可以來代替7*7卷積核,推導過程與上述類似,大家可以自行繪圖理解。
下面是VGG網(wǎng)絡的結構(VGG16和VGG19都在):
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-z1GxyWm1-1626030698007)(https://d2mxuefqeaa7sj.cloudfront.net/s_8C760A111A4204FB24FFC30E04E069BD755C4EEFD62ACBA4B54BBA2A78E13E8C_1491022251600_VGGNet.png)]
- VGG16包含了16個隱藏層(13個卷積層和3個全連接層),如上圖中的D列所示
- VGG19包含了19個隱藏層(16個卷積層和3個全連接層),如上圖中的E列所示
VGG網(wǎng)絡的結構非常一致,從頭到尾全部使用的是3x3的卷積和2x2的max pooling。
如果你想看到更加形象化的VGG網(wǎng)絡,可以使用經(jīng)典卷積神經(jīng)網(wǎng)絡(CNN)結構可視化工具來查看高清無碼的VGG網(wǎng)絡。
VGG優(yōu)點:
- VGGNet的結構非常簡潔,整個網(wǎng)絡都使用了同樣大小的卷積核尺寸(3x3)和最大池化尺寸(2x2)。
- 幾個小濾波器(3x3)卷積層的組合比一個大濾波器(5x5或7x7)卷積層好:
- 驗證了通過不斷加深網(wǎng)絡結構可以提升性能。
VGG缺點:
VGG耗費更多計算資源,并且使用了更多的參數(shù)(這里不是3x3卷積的鍋),導致更多的內存占用(140M)。其中絕大多數(shù)的參數(shù)都是來自于第一個全連接層。VGG可是有3個全連接層啊!
PS:有的文章稱:發(fā)現(xiàn)這些全連接層即使被去除,對于性能也沒有什么影響,這樣就顯著降低了參數(shù)數(shù)量。
注:很多pretrained的方法就是使用VGG的model(主要是16和19),VGG相對其他的方法,參數(shù)空間很大,最終的model有500多m,AlexNet只有200m,GoogLeNet更少,所以train一個vgg模型通常要花費更長的時間,所幸有公開的pretrained model讓我們很方便的使用。
關于感受野:
假設你一層一層地重疊了3個3x3的卷積層(層與層之間有非線性激活函數(shù))。在這個排列下,第一個卷積層中的每個神經(jīng)元都對輸入數(shù)據(jù)體有一個3x3的視野。
代碼篇:VGG訓練與測試
這里推薦兩個開源庫,訓練請參考tensorflow-vgg,快速測試請參考VGG-in TensorFlow。
代碼我就不介紹了,其實跟上述內容一致,跟著原理看code應該會很快。我快速跑了一下VGG-in TensorFlow,代碼親測可用,效果很nice,就是model下載比較煩。
貼心的Amusi已經(jīng)為你準備好了VGG-in TensorFlow的測試代碼、model和圖像。需要的同學可以關注CVer微信公眾號,后臺回復:VGG。
天道酬勤,還有很多知識要學,想想都刺激~Fighting!
參考資料
-
《Very Deep Convolutional Networks for Large-Scale Image Recognition》
-
深度網(wǎng)絡VGG理解
-
深度學習經(jīng)典卷積神經(jīng)網(wǎng)絡之VGGNet
-
VGG16 結構可視化
-
tensorflow-vgg
-
VGG-in TensorFlow
-
機器學習進階筆記之五 | 深入理解VGG\Residual Network
ResNet
1.ResNet意義
隨著網(wǎng)絡的加深,出現(xiàn)了訓練集準確率下降的現(xiàn)象,我們可以確定這不是由于Overfit過擬合造成的(過擬合的情況訓練集應該準確率很高);所以作者針對這個問題提出了一種全新的網(wǎng)絡,叫深度殘差網(wǎng)絡,它允許網(wǎng)絡盡可能的加深,其中引入了全新的結構如圖1;
這里問大家一個問題
殘差指的是什么?
其中ResNet提出了兩種mapping:一種是identity mapping,指的就是圖1中”彎彎的曲線”,另一種residual mapping,指的就是除了”彎彎的曲線“那部分,所以最后的輸出是 y=F(x)+x
identity mapping顧名思義,就是指本身,也就是公式中的x,而residual mapping指的是“差”,也就是y?x,所以殘差指的就是F(x)部分。
為什么ResNet可以解決“隨著網(wǎng)絡加深,準確率不下降”的問題?
理論上,對于“隨著網(wǎng)絡加深,準確率下降”的問題,Resnet提供了兩種選擇方式,也就是identity mapping和residual mapping,如果網(wǎng)絡已經(jīng)到達最優(yōu),繼續(xù)加深網(wǎng)絡,residual mapping將被push為0,只剩下identity mapping,這樣理論上網(wǎng)絡一直處于最優(yōu)狀態(tài)了,網(wǎng)絡的性能也就不會隨著深度增加而降低了。
2.ResNet結構
它使用了一種連接方式叫做“shortcut connection”,顧名思義,shortcut就是“抄近道”的意思,看下圖我們就能大致理解:
ResNet的F(x)究竟長什么樣子?
參考資料
-
ResNet解析
-
ResNet論文筆記
-
殘差網(wǎng)絡ResNet筆記
-
Understand Deep Residual Networks?—?a simple, modular learning framework that has redefined state-of-the-art
-
An Overview of ResNet and its Variants
-
譯文
-
Understanding and Implementing Architectures of ResNet and ResNeXt for state-of-the-art Image Classification: From Microsoft to Facebook [Part 1]
-
給妹紙的深度學習教學(4)——同Residual玩耍
-
Residual Networks 理解
-
Identity Mapping in ResNet
-
resnet(殘差網(wǎng)絡)的F(x)究竟長什么樣子?
-
ResNet到底在解決一個什么問題呢?
ResNet為什么不用Dropout?
- TODO
參考資料
- https://www.zhihu.com/question/325139089
- https://zhuanlan.zhihu.com/p/60923972
為什么 ResNet 不在一開始就使用residual block,而是使用一個7×7的卷積?
先上一下paper里的圖例:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-px8LdFjr-1626030698008)(F:/Projects/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8%E8%B5%84%E6%96%99%E5%A4%A7%E5%85%A8/GitHub/Deep-Learning-Interview-Book/docs/imgs/DLIB-0023.jpg)]
原因: 7x7卷積實際上是用來直接對輸入圖片降采樣(early downsampling), 注意像7x7這樣的大卷積核一般只出現(xiàn)在input layer
目的是: 盡可能保留原始圖像的信息, 而不需要增加channels數(shù).
本質上是: 多channels的非線性激活層是非常昂貴的, 在input layer用big kernel換多channels是劃算的
注意一下, resnet接入residual block前pixel為56x56的layer, channels數(shù)才64, 但是同樣大小的layer, 在vgg-19里已經(jīng)有256個channels了.
這里要強調一下, 只有在input layer層, 也就是最靠近輸入圖片的那層, 才用大卷積, 原因如下:
深度學習領域, 有一種廣泛的直覺,即更大的卷積更好,但更昂貴。輸入層中的特征數(shù)量(224x224)是如此之小(相對于隱藏層),第一卷積可以非常大而不會大幅增加實際的權重數(shù)。如果你想在某個地方進行大卷積,第一層通常是唯一的選擇。
我認為神經(jīng)網(wǎng)絡的第一層是最基本的,因為它基本上只是將數(shù)據(jù)嵌入到一個新的更大的向量空間中。ResNet在第二層之前沒有開始其特征層跳過,所以看起來作者想要在開始整花里胡哨的layers之前盡可能保留圖像里更多的primary features.
題外話, 同時期的GoogLeNet也在input layer用到了7x7大卷積, 所以resnet作者的靈感來源于GoogLeNet也說不定, 至于非要追問為啥這么用, 也許最直接的理由就是"深度學習就像煉丹, 因為這樣網(wǎng)絡工作得更好, 所以作者就這么用了".
再說個有趣的例子, resnet模型是實驗先于理論, 實驗證明有效, 后面才陸續(xù)有人研究為啥有效, 比如The Shattered Gradients Problem: If resnets are the answer, then what is the question? 可不就是煉丹么?
參考資料
- 為什么resnet不在一開始就使用residual block,而是使用一個7×7的卷積?
什么是Bottlenet layer?
- TODO
ResNet如何解決梯度消失?
- TODO
ResNet網(wǎng)絡越來越深,準確率會不會提升?
- TODO
ResNet v2
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-z4Du2Huj-1626030698009)(F:/Projects/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8%E8%B5%84%E6%96%99%E5%A4%A7%E5%85%A8/GitHub/Deep-Learning-Interview-Book/docs/imgs/DLIB-0013.png)]
參考資料
- 《Identity Mappings in Deep Residual Networks》
- Feature Extractor[ResNet v2]
- ResNetV2:ResNet深度解析
- ResNet v2論文筆記
- [ResNet系] 002 ResNet-v2
ResNet v1 與 ResNet v2的區(qū)別
- TODO
ResNet v2 的 ReLU 激活函數(shù)有什么不同?
- TODO
ResNeXt
- TODO
參考資料
- ResNeXt算法詳解
Inception系列(V1-V4)
InceptionV1
- TODO
InceptionV2
- TODO
InceptionV3
- TODO
InceptionV4
- TODO
參考資料
- 一文概覽Inception家族的「奮斗史」
- inception-v1,v2,v3,v4----論文筆記
DenseNet
- TODO
為什么 DenseNet 比 ResNet 好?
- TODO
為什么 DenseNet 比 ResNet 更耗顯存?
- TODO
SE-Net
- TODO
Squeeze-Excitation結構是怎么實現(xiàn)的?
TODO
FCN
一句話概括就是:FCN將傳統(tǒng)網(wǎng)絡后面的全連接層換成了卷積層,這樣網(wǎng)絡輸出不再是類別而是 heatmap;同時為了解決因為卷積和池化對圖像尺寸的影響,提出使用上采樣的方式恢復。
作者的FCN主要使用了三種技術:
-
卷積化(Convolutional)
-
上采樣(Upsample)
-
跳躍結構(Skip Layer)
卷積化
卷積化即是將普通的分類網(wǎng)絡,比如VGG16,ResNet50/101等網(wǎng)絡丟棄全連接層,換上對應的卷積層即可。
上采樣
此處的上采樣即是反卷積(Deconvolution)。當然關于這個名字不同框架不同,Caffe和Kera里叫Deconvolution,而tensorflow里叫conv_transpose。CS231n這門課中說,叫conv_transpose更為合適。
眾所諸知,普通的池化(為什么這兒是普通的池化請看后文)會縮小圖片的尺寸,比如VGG16 五次池化后圖片被縮小了32倍。為了得到和原圖等大的分割圖,我們需要上采樣/反卷積。
反卷積和卷積類似,都是相乘相加的運算。只不過后者是多對一,前者是一對多。而反卷積的前向和后向傳播,只用顛倒卷積的前后向傳播即可。所以無論優(yōu)化還是后向傳播算法都是沒有問題。
跳躍結構(Skip Layers)
(這個奇怪的名字是我翻譯的,好像一般叫忽略連接結構)這個結構的作用就在于優(yōu)化結果,因為如果將全卷積之后的結果直接上采樣得到的結果是很粗糙的,所以作者將不同池化層的結果進行上采樣之后來優(yōu)化輸出。
上采樣獲得與輸入一樣的尺寸
文章采用的網(wǎng)絡經(jīng)過5次卷積+池化后,圖像尺寸依次縮小了 2、4、8、16、32倍,對最后一層做32倍上采樣,就可以得到與原圖一樣的大小
作者發(fā)現(xiàn),僅對第5層做32倍反卷積(deconvolution),得到的結果不太精確。于是將第 4 層和第 3 層的輸出也依次反卷積(圖5)
參考資料
【總結】圖像語義分割之FCN和CRF
圖像語義分割(1)- FCN
全卷積網(wǎng)絡 FCN 詳解
U-Net
本文介紹一種編碼器-解碼器結構。編碼器逐漸減少池化層的空間維度,解碼器逐步修復物體的細節(jié)和空間維度。編碼器和解碼器之間通常存在快捷連接,因此能幫助解碼器更好地修復目標的細節(jié)。U-Net 是這種方法中最常用的結構。
fcn(fully convolutional natwork)的思想是:修改一個普通的逐層收縮的網(wǎng)絡,用上采樣(up sampling)(??反卷積)操作代替網(wǎng)絡后部的池化(pooling)操作。因此,這些層增加了輸出的分辨率。為了使用局部的信息,在網(wǎng)絡收縮過程(路徑)中產(chǎn)生的高分辨率特征(high resolution features) ,被連接到了修改后網(wǎng)絡的上采樣的結果上。在此之后,一個卷積層基于這些信息綜合得到更精確的結果。
與fcn(fully convolutional natwork)不同的是,我們的網(wǎng)絡在上采樣部分依然有大量的特征通道(feature channels),這使得網(wǎng)絡可以將環(huán)境信息向更高的分辨率層(higher resolution layers)傳播。結果是,擴張路徑基本對稱于收縮路徑。網(wǎng)絡不存在任何全連接層(fully connected layers),并且,只使用每個卷積的有效部分,例如,分割圖(segmentation map)只包含這樣一些像素點,這些像素點的完整上下文都出現(xiàn)在輸入圖像中。為了預測圖像邊界區(qū)域的像素點,我們采用鏡像圖像的方式補全缺失的環(huán)境像素。這個tiling方法在使用網(wǎng)絡分割大圖像時是非常有用的,因為如果不這么做,GPU顯存會限制圖像分辨率。
我們的訓練數(shù)據(jù)太少,因此我們采用彈性形變的方式增加數(shù)據(jù)。這可以讓模型學習得到形變不變性。這對醫(yī)學圖像分割是非常重要的,因為組織的形變是非常常見的情況,并且計算機可以很有效的模擬真實的形變。在[3]中指出了在無監(jiān)督特征學習中,增加數(shù)據(jù)以獲取不變性的重要性。
參考資料
- U-net翻譯
DeepLab 系列
- TODO
參考資料
- Semantic Segmentation --DeepLab(1,2,3)系列總結
邊框回顧(Bounding-Box Regression)
如下圖所示,綠色的框表示真實值Ground Truth, 紅色的框為Selective Search提取的候選區(qū)域/框Region Proposal。那么即便紅色的框被分類器識別為飛機,但是由于紅色的框定位不準(IoU<0.5), 這張圖也相當于沒有正確的檢測出飛機。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-rp3vLGxC-1626030698010)(https://www.julyedu.com/Public/Image/Question/1525499418_635.png)]
如果我們能對紅色的框進行微調fine-tuning,使得經(jīng)過微調后的窗口跟Ground Truth 更接近, 這樣豈不是定位會更準確。 而Bounding-box regression 就是用來微調這個窗口的。
邊框回歸是什么?
對于窗口一般使用四維向量(x,y,w,h)(x,y,w,h) 來表示, 分別表示窗口的中心點坐標和寬高。 對于圖2, 紅色的框 P 代表原始的Proposal, 綠色的框 G 代表目標的 Ground Truth, 我們的目標是尋找一種關系使得輸入原始的窗口 P 經(jīng)過映射得到一個跟真實窗口 G 更接近的回歸窗口G^。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-yGIDKdzk-1626030698011)(https://www.julyedu.com/Public/Image/Question/1525499529_241.png)]
所以,邊框回歸的目的即是:給定(Px,Py,Pw,Ph)尋找一種映射f, 使得f(Px,Py,Pw,Ph)=(Gx,Gy,Gw,Gh)并且(Gx,Gy,Gw,Gh)≈(Gx,Gy,Gw,Gh)
邊框回歸怎么做的?
那么經(jīng)過何種變換才能從圖2中的窗口 P 變?yōu)榇翱贕^呢? 比較簡單的思路就是: 平移+尺度放縮
先做平移(Δx,Δy),Δx=Pwdx§,Δy=Phdy§這是R-CNN論文的:
G^x=Pwdx§+Px,(1)
G^y=Phdy§+Py,(2)
然后再做尺度縮放(Sw,Sh), Sw=exp(dw§),Sh=exp(dh§),對應論文中:
G^w=Pwexp(dw§),(3)
G^h=Phexp(dh§),(4)
觀察(1)-(4)我們發(fā)現(xiàn), 邊框回歸學習就是dx§,dy§,dw§,dh§這四個變換。
下一步就是設計算法那得到這四個映射。
線性回歸就是給定輸入的特征向量 X, 學習一組參數(shù) W, 使得經(jīng)過線性回歸后的值跟真實值 Y(Ground Truth)非常接近. 即Y≈WX。 那么 Bounding-box 中我們的輸入以及輸出分別是什么呢?
Input:
RegionProposal→P=(Px,Py,Pw,Ph)這個是什么? 輸入就是這四個數(shù)值嗎?其實真正的輸入是這個窗口對應的 CNN 特征,也就是 R-CNN 中的 Pool5 feature(特征向量)。 (注:訓練階段輸入還包括 Ground Truth, 也就是下邊提到的t?=(tx,ty,tw,th))
Output:
需要進行的平移變換和尺度縮放 dx§,dy§,dw§,dh§,或者說是Δx,Δy,Sw,Sh。我們的最終輸出不應該是 Ground Truth 嗎? 是的, 但是有了這四個變換我們就可以直接得到 Ground Truth。
這里還有個問題, 根據(jù)(1)~(4)我們可以知道, P 經(jīng)過 dx§,dy§,dw§,dh§得到的并不是真實值 G,而是預測值G^。的確,這四個值應該是經(jīng)過 Ground Truth 和 Proposal 計算得到的真正需要的平移量(tx,ty)和尺度縮放(tw,th)。
這也就是 R-CNN 中的(6)~(9):
tx=(Gx?Px)/Pw,(6)
ty=(Gy?Py)/Ph,(7)
tw=log(Gw/Pw),(8)
th=log(Gh/Ph),(9)
那么目標函數(shù)可以表示為 d?§=wT?Φ5§,Φ5§是輸入 Proposal 的特征向量,w?是要學習的參數(shù)(*表示 x,y,w,h, 也就是每一個變換對應一個目標函數(shù)) , d?§ 是得到的預測值。
我們要讓預測值跟真實值t?=(tx,ty,tw,th)差距最小, 得到損失函數(shù)為:
Loss=∑iN(ti??w^T??5(Pi))2
函數(shù)優(yōu)化目標為:
W?=argminw?∑iN(ti??wT??5(Pi))2+λ||w?||2
利用梯度下降法或者最小二乘法就可以得到 w?。
參考資料
-
bounding box regression
-
邊框回歸(Bounding Box Regression)詳解
-
什么是邊框回歸Bounding-Box regression,以及為什么要做、怎么做
反卷積(deconv)/轉置卷積(trans)
參考資料
- 反卷積(Deconvolution)、上采樣(UNSampling)與上池化(UnPooling)
- Transposed Convolution, Fractionally Strided Convolution or Deconvolution
空洞卷積(dilated/Atrous conv)
- TODO
參考資料
- 如何理解空洞卷積(dilated convolution)?
Pooling層原理
- TODO
depthwise卷積加速比推導
- TODO
為什么降采用使用max pooling,而分類使用average pooling
- TODO
max pooling如何反向傳播
- TODO
反卷積
TODO
組卷積(group convolution)
- TODO
在說明分組卷積之前我們用一張圖來體會一下一般的卷積操作。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-6Ttvv9fq-1626030698012)(imgs/DLIB-0014.png)]
從上圖可以看出,一般的卷積會對輸入數(shù)據(jù)的整體一起做卷積操作,即輸入數(shù)據(jù):H1×W1×C1;而卷積核大小為h1×w1,通道為C1,一共有C2個,然后卷積得到的輸出數(shù)據(jù)就是H2×W2×C2。這里我們假設輸出和輸出的分辨率是不變的。主要看這個過程是一氣呵成的,這對于存儲器的容量提出了更高的要求。
但是分組卷積明顯就沒有那么多的參數(shù)。先用圖片直觀地感受一下分組卷積的過程。對于上面所說的同樣的一個問題,分組卷積就如下圖所示。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-zfRZV93I-1626030698013)(imgs/DLIB-0015.png)]
可以看到,圖中將輸入數(shù)據(jù)分成了2組(組數(shù)為g),需要注意的是,這種分組只是在深度上進行劃分,即某幾個通道編為一組,這個具體的數(shù)量由(C1/g)決定。因為輸出數(shù)據(jù)的改變,相應的,卷積核也需要做出同樣的改變。即每組中卷積核的深度也就變成了(C1/g),而卷積核的大小是不需要改變的,此時每組的卷積核的個數(shù)就變成了(C2/g)個,而不是原來的C2了。然后用每組的卷積核同它們對應組內的輸入數(shù)據(jù)卷積,得到了輸出數(shù)據(jù)以后,再用concatenate的方式組合起來,最終的輸出數(shù)據(jù)的通道仍舊是C2。也就是說,分組數(shù)g決定以后,那么我們將并行的運算g個相同的卷積過程,每個過程里(每組),輸入數(shù)據(jù)為H1×W1×C1/g,卷積核大小為h1×w1×C1/g,一共有C2/g個,輸出數(shù)據(jù)為H2×W2×C2/g。
舉個例子:
Group conv本身就極大地減少了參數(shù)。比如當輸入通道為256,輸出通道也為256,kernel size為3×3,不做Group conv參數(shù)為256×3×3×256。實施分組卷積時,若group為8,每個group的input channel和output channel均為32,參數(shù)為8×32×3×3×32,是原來的八分之一。而Group conv最后每一組輸出的feature maps應該是以concatenate的方式組合。
Alex認為group conv的方式能夠增加 filter之間的對角相關性,而且能夠減少訓練參數(shù),不容易過擬合,這類似于正則的效果。
參考資料
-
A Tutorial on Filter Groups (Grouped Convolution)
-
深度可分離卷積、分組卷積、擴張卷積、轉置卷積(反卷積)的理解
交錯組卷積(Interleaved group convolutions,IGC)
參考資料
- 學界 | MSRA王井東詳解ICCV 2017入選論文:通用卷積神經(jīng)網(wǎng)絡交錯組卷積
- 視頻:基于交錯組卷積的高效深度神經(jīng)網(wǎng)絡
空洞/擴張卷積(Dilated/Atrous Convolution)
Dilated convolution/Atrous convolution可以叫空洞卷積或者擴張卷積。
背景:語義分割中pooling 和 up-sampling layer層。pooling會降低圖像尺寸的同時增大感受野,而up-sampling操作擴大圖像尺寸,這樣雖然恢復了大小,但很多細節(jié)被池化操作丟失了。
需求:能不能設計一種新的操作,不通過pooling也能有較大的感受野看到更多的信息呢?
目的:替代pooling和up-sampling運算,既增大感受野又不減小圖像大小。
簡述:在標準的 convolution map 里注入空洞,以此來增加 reception field。相比原來的正常convolution,dilated convolution 多了一個 hyper-parameter 稱之為 dilation rate 指的是kernel的間隔數(shù)量(e.g. 正常的 convolution 是 dilatation rate 1)。
空洞卷積誕生于圖像分割領域,圖像輸入到網(wǎng)絡中經(jīng)過CNN提取特征,再經(jīng)過pooling降低圖像尺度的同時增大感受野。由于圖像分割是pixel?wise預測輸出,所以還需要通過upsampling將變小的圖像恢復到原始大小。upsampling通常是通過deconv(轉置卷積)完成。因此圖像分割FCN有兩個關鍵步驟:池化操作增大感受野,upsampling操作擴大圖像尺寸。這兒有個問題,就是雖然圖像經(jīng)過upsampling操作恢復了大小,但是很多細節(jié)還是被池化操作丟失了。那么有沒有辦法既增大了感受野又不減小圖像大小呢?Dilated conv橫空出世。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-FkF6OAcF-1626030698014)(imgs/DLIB-0016.png)]
注意事項:
1.為什么不直接使用5x5或者7x7的卷積核?這不也增加了感受野么?
答:增大卷積核能增大感受野,但是只是線性增長,參考答案里的那個公式,(kernel-1)*layer,并不能達到空洞卷積的指數(shù)增長。
2.2-dilated要在1-dilated的基礎上才能達到7的感受野(如上圖a、b所示)
關于空洞卷積的另一種概括:
Dilated Convolution問題的引出,是因為down-sample之后的為了讓input和output的尺寸一致。我們需要up-sample,但是up-sample會丟失信息。如果不采用pooling,就無需下采樣和上采樣步驟了。但是這樣會導致kernel 的感受野變小,導致預測不精確。。如果采用大的kernel話,一來訓練的參數(shù)變大。二來沒有小的kernel疊加的正則作用,所以kernel size變大行不通。
由此Dilated Convolution是在不改變kernel size的條件下,增大感受野。
參考資料
-
《Multi-Scale Context Aggregation by Dilated Convolutions》
-
《Rethinking Atrous Convolution for Semantic Image Segmentation》
-
如何理解空洞卷積(dilated convolution)?
-
Dilated/Atrous conv 空洞卷積/多孔卷積
-
Multi-Scale Context Aggregation by Dilated Convolution 對空洞卷積(擴張卷積)、感受野的理解
-
對深度可分離卷積、分組卷積、擴張卷積、轉置卷積(反卷積)的理解
-
tf.nn.atrous_conv2d
轉置卷積(Transposed Convolutions/deconvlution)
轉置卷積(transposed Convolutions)又名反卷積(deconvolution)或是分數(shù)步長卷積(fractially straced convolutions)。反卷積(Transposed Convolution, Fractionally Strided Convolution or Deconvolution)的概念第一次出現(xiàn)是 Zeiler 在2010年發(fā)表的論文 Deconvolutional networks 中。
轉置卷積和反卷積的區(qū)別
那什么是反卷積?從字面上理解就是卷積的逆過程。值得注意的反卷積雖然存在,但是在深度學習中并不常用。而轉置卷積雖然又名反卷積,卻不是真正意義上的反卷積。因為根據(jù)反卷積的數(shù)學含義,通過反卷積可以將通過卷積的輸出信號,完全還原輸入信號。而事實是,轉置卷積只能還原shape大小,而不能還原value。你可以理解成,至少在數(shù)值方面上,轉置卷積不能實現(xiàn)卷積操作的逆過程。所以說轉置卷積與真正的反卷積有點相似,因為兩者產(chǎn)生了相同的空間分辨率。但是又名反卷積(deconvolutions)的這種叫法是不合適的,因為它不符合反卷積的概念。
簡單來說,轉置矩陣就是一種上采樣過程。
正常卷積過程如下,利用3x3的卷積核對4x4的輸入進行卷積,輸出結果為2x2
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-QTBvvJRQ-1626030698015)(https://github.com/vdumoulin/conv_arithmetic/blob/master/gif/no_padding_no_strides.gif?raw=true)]
轉置卷積過程如下,利用3x3的卷積核對"做了補0"的2x2輸入進行卷積,輸出結果為4x4。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-WHy5FR98-1626030698016)(https://github.com/vdumoulin/conv_arithmetic/blob/master/gif/no_padding_no_strides_transposed.gif?raw=true)]
上述的卷積運算和轉置卷積是"尺寸"對應的,卷積的輸入大小與轉置卷積的輸出大小一致,分別可以看成下采樣和上采樣操作。
參考資料
- Transposed Convolution, Fractionally Strided Convolution or Deconvolution
- 深度學習 | 反卷積/轉置卷積 的理解 transposed conv/deconv
Group Normalization
- [ ]
Xception
- TODO
SENet
SENet
論文:《Squeeze-and-Excitation Networks》
論文鏈接:https://arxiv.org/abs/1709.01507
代碼地址:https://github.com/hujie-frank/SENet
論文的動機是從特征通道之間的關系入手,希望顯式地建模特征通道之間的相互依賴關系。另外,沒有引入一個新的空間維度來進行特征通道間的融合,而是采用了一種全新的“特征重標定”策略。具體來說,就是通過學習的方式來自動獲取到每個特征通道的重要程度,然后依照這個重要程度去增強有用的特征并抑制對當前任務用處不大的特征,通俗來講,就是讓網(wǎng)絡利用全局信息有選擇的增強有益feature通道并抑制無用feature通道,從而能實現(xiàn)feature通道自適應校準。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-fBrdew12-1626030698017)(imgs/DLIB-0017.png)]
參考資料
- SENet學習筆記
SKNet
- TODO
參考資料
- SKNet——SENet孿生兄弟篇
- 后ResNet時代:SENet與SKNet
GCNet
- TODO
參考資料
- GCNet:當Non-local遇見SENet
- 2019 GCNet(attention機制,目標檢測backbone性能提升)論文閱讀筆記
Octave Convolution
- TODO
參考資料
- 如何評價最新的Octave Convolution?
MobileNet 系列(V1-V3)
- TODO
MobileNetV1
參考資料
- 深度解讀谷歌MobileNet
MobileNetV2
- TODO
MobileNetV3
-
TODO
-
如何評價google Searching for MobileNetV3?
MobileNet系列為什么快?各有多少層?多少參數(shù)?
- TODO
MobileNetV1、MobileNetV2和MobileNetV3有什么區(qū)別
MobileNetv1:在depthwise separable convolutions(參考Xception)方法的基礎上提供了高校模型設計的兩個選擇:寬度因子(width multiplie)和分辨率因子(resolution multiplier)。深度可分離卷積depthwise separable convolutions(參考Xception)的本質是冗余信息更小的稀疏化表達。
下面介紹兩幅Xception中 depthwise separable convolution的圖示:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-MAXLgKlZ-1626030698017)(imgs/DLIB-0018.png)]
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-g5Me6dli-1626030698018)(imgs/DLIB-0019.png)]
深度可分離卷積的過程是①用16個3×3大小的卷積核(1通道)分別與輸入的16通道的數(shù)據(jù)做卷積(這里使用了16個1通道的卷積核,輸入數(shù)據(jù)的每個通道用1個3×3的卷積核卷積),得到了16個通道的特征圖,我們說該步操作是depthwise(逐層)的,在疊加16個特征圖之前,②接著用32個1×1大小的卷積核(16通道)在這16個特征圖進行卷積運算,將16個通道的信息進行融合(用1×1的卷積進行不同通道間的信息融合),我們說該步操作是pointwise(逐像素)的。這樣我們可以算出整個過程使用了3×3×16+(1×1×16)×32 =656個參數(shù)。
注:上述描述與標準的卷積非常的不同,第一點在于使用非1x1卷積核時,是單channel的(可以說是1通道),即上一層輸出的每個channel都有與之對應的卷積核。而標準的卷積過程,卷積核是多channel的。第二點在于使用1x1卷積核實現(xiàn)多channel的融合,并利用多個1x1卷積核生成多channel。表達的可能不是很清楚,但結合圖示其實就容易明白了。
一般卷積核的channel也常稱為深度(depth),所以叫做深度可分離,即原來為多channel組合,現(xiàn)在變成了單channel分離。
參考資料
- 深度解讀谷歌MobileNet
- 對深度可分離卷積、分組卷積、擴張卷積、轉置卷積(反卷積)的理解
MobileNetv2為什么會加shotcut?
- TODO
MobileNet V2中的Residual結構最先是哪個網(wǎng)絡提出來的?
- TODO
ShuffleNet 系列(V1-V2++)
- TODO
ShuffleNetV1
-
TODO
-
輕量級網(wǎng)絡–ShuffleNet論文解讀
-
輕量級網(wǎng)絡ShuffleNet v1
-
CNN模型之ShuffleNet
ShuffleNetV2
- TODO
參考資料
- ShuffleNetV2:輕量級CNN網(wǎng)絡中的桂冠
- 輕量級神經(jīng)網(wǎng)絡“巡禮”(一)—— ShuffleNetV2
- ShufflenetV2_高效網(wǎng)絡的4條實用準則
- ShuffNet v1 和 ShuffleNet v2
IGC 系列(V1-V3)
- TODO
參考資料
- 微軟資深研究員詳解基于交錯組卷積的高效DNN | 公開課筆記
深度可分離網(wǎng)絡(Depth separable convolution)
- TODO
學習率如何調整
- TODO
神經(jīng)網(wǎng)絡的深度和寬度作用
- TODO
網(wǎng)絡壓縮與量化
- TODO
參考資料
- 網(wǎng)絡壓縮-量化方法對比
Batch Size
- TODO
參考資料
-
怎么選取訓練神經(jīng)網(wǎng)絡時的Batch size?
-
談談深度學習中的 Batch_Size
BN和Dropout在訓練和測試時的差別
- TODO
參考資料
- BN和Dropout在訓練和測試時的差別
深度學習調參有哪些技巧?
參考資料
- https://www.zhihu.com/question/25097993/answer/651617880
為什么深度學習中的模型基本用3x3和5x5的卷積(奇數(shù)),而不是2x2和4x4的卷積(偶數(shù))?
參考資料
- https://www.zhihu.com/question/321773456
深度學習訓練中是否有必要使用L1獲得稀疏解?
- TODO
參考資料
- https://www.zhihu.com/question/51822759
EfficientNet
- TODO
參考資料
- 如何評價谷歌大腦的EfficientNet?
- EfficientNet-可能是迄今為止最好的CNN網(wǎng)絡
- EfficientNet論文解讀
- EfficientNet:調參俠的福音(ICML 2019)
如何理解歸一化(Normalization)對于神經(jīng)網(wǎng)絡(深度學習)的幫助?
BN最早被認為通過降低所謂Internal Covariate Shift,這種想法的出處可考至Understanding the difficulty of training deep feedforward neural networks,想必這也是batch norm作者這么設計的初衷。但是這種想法并沒有過多實驗支持,比如說去年NeurlPS這篇paper作者做了實驗,在batch norm之后加上一些隨機擾動(non-zero mean and non-unit variance,人為引入covariate shift),發(fā)現(xiàn)效果仍然比不加好很多。為什么放在batch norm layer之后而不是之前?因為為了證偽batch norm通過forward pass這一步降低covariate shift來提升網(wǎng)絡訓練效率的。這樣說來故事就變得很有趣了,也就是說我們大概都理解一些BN對BN層之前網(wǎng)絡噪音的好處,那么能不能研究一下它對它后面layer的影響?所以這些研究從優(yōu)化的角度,有如下幾種觀點。
歸一化手段是否殊途同歸?很可能是的,在[1]的3.3作者也嘗試了Lp normalization,也得到了和BN差不多的效果。至于Layer norm還是weight norm,可能都可以順著這個思路進行研究鴨,無論是通過[1]還是[2],可能今年的paper里就見分曉了,let’s see。
參考資料
- 如何理解歸一化(Normalization)對于神經(jīng)網(wǎng)絡(深度學習)的幫助?
多標簽分類怎么解決?
- TODO
TODO
Reference
CVer公眾號
?
總結
- 上一篇: 暴力枚举Gmail邮箱地址的新姿势
- 下一篇: python range 小数_pyth