日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DL-tudo

發(fā)布時間:2023/12/16 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DL-tudo 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文來自CVer公眾號的深度學(xué)習(xí)面試寶典,mark以便初學(xué)DL時邊查看重難點和備忘錄tudo。

文章目錄

  • 深度學(xué)習(xí)
    • 神經(jīng)網(wǎng)絡(luò)中的Epoch、Iteration、Batchsize
    • 反向傳播(BP)
    • CNN本質(zhì)和優(yōu)勢
    • 鞍點的定義和特點?
    • 神經(jīng)網(wǎng)絡(luò)數(shù)據(jù)預(yù)處理方法有哪些?
    • 神經(jīng)網(wǎng)絡(luò)怎樣進行參數(shù)初始化?
    • 卷積
      • 卷積的反向傳播過程
    • CNN 模型所需的計算力(flops)和參數(shù)(parameters)數(shù)量是怎么計算的?
    • 池化(Pooling)
      • 池化層怎么接收后面?zhèn)鬟^來的損失?
      • 平均池化(average pooling)
      • 最大池化(max pooling)
    • 感受野
      • 感受野計算
      • 卷積神經(jīng)網(wǎng)絡(luò)的感受野
    • 權(quán)重初始化方法
      • Xavier
    • 正則化方法
    • Batch Normalization(BN)
      • BN 原理
      • 手寫 BN
      • BN 可以防止過擬合么?為什么
      • BN 有哪些參數(shù)?
      • BN 的反向傳播推導(dǎo)
      • BN 在訓(xùn)練和測試的區(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ù)時,分類為什么要用交叉熵?fù)p失,而不用均方損失?
      • tanh
      • ReLU
        • ReLU 激活函數(shù)為什么比sigmoid和tanh好?
        • ReLU 激活函數(shù)為什么能解決梯度消失問題?
        • ReLU 有哪些變體?
    • Dropout
      • Dropout 基本原理
      • Dropout 如何實現(xiàn)?
      • Drop 在訓(xùn)練和測試的區(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)絡(luò)越來越深,準(zhǔn)確率會不會提升?
    • 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結(jié)構(gòu)是怎么實現(xiàn)的?
    • FCN
    • U-Net
    • DeepLab 系列
    • 邊框回顧(Bounding-Box Regression)
    • 反卷積(deconv)/轉(zhuǎn)置卷積(trans)
    • 空洞卷積(dilated/Atrous conv)
    • Pooling層原理
    • depthwise卷積加速比推導(dǎo)
    • 為什么降采用使用max pooling,而分類使用average pooling
    • max pooling如何反向傳播
    • 反卷積
    • 組卷積(group convolution)
    • 交錯組卷積(Interleaved group convolutions,IGC)
    • 空洞/擴張卷積(Dilated/Atrous Convolution)
    • 轉(zhuǎn)置卷積(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結(jié)構(gòu)最先是哪個網(wǎng)絡(luò)提出來的?
    • ShuffleNet 系列(V1-V2++)
      • ShuffleNetV1
      • ShuffleNetV2
    • IGC 系列(V1-V3)
    • 深度可分離網(wǎng)絡(luò)(Depth separable convolution)
    • 學(xué)習(xí)率如何調(diào)整
    • 神經(jīng)網(wǎng)絡(luò)的深度和寬度作用
    • 網(wǎng)絡(luò)壓縮與量化
    • Batch Size
    • BN和Dropout在訓(xùn)練和測試時的差別
    • 深度學(xué)習(xí)調(diào)參有哪些技巧?
    • 為什么深度學(xué)習(xí)中的模型基本用3x3和5x5的卷積(奇數(shù)),而不是2x2和4x4的卷積(偶數(shù))?
    • 深度學(xué)習(xí)訓(xùn)練中是否有必要使用L1獲得稀疏解?
    • EfficientNet
    • 如何理解歸一化(Normalization)對于神經(jīng)網(wǎng)絡(luò)(深度學(xué)習(xí))的幫助?
    • 多標(biāo)簽分類怎么解決?
    • TODO
    • Reference

深度學(xué)習(xí)

神經(jīng)網(wǎng)絡(luò)中的Epoch、Iteration、Batchsize

神經(jīng)網(wǎng)絡(luò)中epoch與iteration是不相等的

  • batchsize:中文翻譯為批大小(批尺寸)。在深度學(xué)習(xí)中,一般采用SGD訓(xùn)練,即每次訓(xùn)練在訓(xùn)練集中取batchsize個樣本訓(xùn)練;

  • iteration:中文翻譯為迭代,1個iteration等于使用batchsize個樣本訓(xùn)練一次;一個迭代 = 一個正向通過+一個反向通過

  • epoch:迭代次數(shù),1個epoch等于使用訓(xùn)練集中的全部樣本訓(xùn)練一次;一個epoch = 所有訓(xùn)練樣本的一個正向傳遞和一個反向傳遞

舉個例子,訓(xùn)練集有1000個樣本,batchsize=10,那么:訓(xùn)練完整個樣本集需要:100次iteration,1次epoch。

參考資料

  • 神經(jīng)網(wǎng)絡(luò)中的Epoch、Iteration、Batchsize
  • 神經(jīng)網(wǎng)絡(luò)中epoch與iteration相等嗎

反向傳播(BP)

  • TODO

參考資料

  • 一文搞懂反向傳播算法

CNN本質(zhì)和優(yōu)勢

局部卷積(提取局部特征)

權(quán)值共享(降低訓(xùn)練難度)

Pooling(降維,將低層次組合為高層次的特征)

多層次結(jié)構(gòu)

鞍點的定義和特點?

  • TODO

神經(jīng)網(wǎng)絡(luò)數(shù)據(jù)預(yù)處理方法有哪些?

  • TODO

神經(jīng)網(wǎng)絡(luò)怎樣進行參數(shù)初始化?

  • TODO

卷積

  • TODO

參考資料

  • Feature Extraction Using Convolution

  • convolution

  • 理解圖像卷積操作的意義

  • 關(guān)于深度學(xué)習(xí)中卷積核操作

卷積的反向傳播過程

  • TODO

參考資料

  • Notes on Convolutional Neural Network

  • Deep Learning論文筆記之(四)CNN卷積神經(jīng)網(wǎng)絡(luò)推導(dǎo)和實現(xiàn)

  • 反向傳導(dǎo)算法

  • Deep learning:五十一(CNN的反向求導(dǎo)及練習(xí))

  • 卷積神經(jīng)網(wǎng)絡(luò)(CNN)反向傳播算法

  • 卷積神經(jīng)網(wǎng)絡(luò)(CNN)反向傳播算法公式詳細(xì)推導(dǎo)

  • 全連接神經(jīng)網(wǎng)絡(luò)中反向傳播算法數(shù)學(xué)推導(dǎo)

  • 卷積神經(jīng)網(wǎng)絡(luò)(CNN)反向傳播算法推導(dǎo)

CNN 模型所需的計算力(flops)和參數(shù)(parameters)數(shù)量是怎么計算的?

對于一個卷積層,假設(shè)其大小為 (其中c為#input channel, n為#output channel),輸出的feature map尺寸為 ,則該卷積層的

  • paras =[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-SDrMWW9E-1626030698000)(https://www.zhihu.com/equation?tex=n+%5Ctimes+%28h+%5Ctimes+w+%5Ctimes+c+%2B+1%29)]

  • FLOPs = [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(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中的池化?
  • 深度學(xué)習(xí)筆記(3)——CNN中一些特殊環(huán)節(jié)的反向傳播

池化層怎么接收后面?zhèn)鬟^來的損失?

  • TODO

平均池化(average pooling)

  • TODO

最大池化(max pooling)

  • TODO

感受野

感受野計算

  • TODO

參考資料

  • 卷積神經(jīng)網(wǎng)絡(luò)物體檢測之感受野大小計算
  • 如何計算感受野(Receptive Field)——原理
  • Computing Receptive Fields of Convolutional Neural Networks

卷積神經(jīng)網(wǎng)絡(luò)的感受野

  • TODO

參考資料

  • 卷積神經(jīng)網(wǎng)絡(luò)的感受野

權(quán)重初始化方法

  • TODO

Xavier

  • TODO

正則化方法

  • 參數(shù)范數(shù)懲罰
  • L2參數(shù)正則化
  • L1參數(shù)正則化
  • L1正則化和L2正則化的區(qū)別
  • 數(shù)據(jù)集增強
  • 噪音的魯棒性
  • 向輸出目標(biāo)注入噪聲
  • 半監(jiān)督學(xué)習(xí)
  • 多任務(wù)學(xué)習(xí)
  • 提前終止
  • 參數(shù)綁定和共享
  • 稀疏表示
  • 集成化方法
  • 參考資料

    • 正則化方法

    Batch Normalization(BN)

    BN 原理

    • TODO

    參考資料

    • Batch Normalization原理與實戰(zhàn)

    手寫 BN

    • TODO

    BN 可以防止過擬合么?為什么

    • TODO

    BN 有哪些參數(shù)?

    • TODO

    BN 的反向傳播推導(dǎo)

    • TODO

    BN 在訓(xùn)練和測試的區(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

    參考資料

    • 深度學(xué)習(xí)中的五種歸一化(BN、LN、IN、GN和SN)方法簡介

    • BatchNormalization、LayerNormalization、InstanceNorm、GroupNorm、SwitchableNorm總結(jié)

    優(yōu)化算法

    • 隨機梯度下降(SGD)
    • Mini-Batch
    • 動量(Momentum)
    • Nesterov 動量
    • AdaGrad
    • AdaDelta
    • RMSProp
    • Adam
    • Adamax
    • Nadam
    • AMSGrad
    • AdaBound

    參考資料

    • 《Deep Learning》第八章:深度模型中的優(yōu)化

    • 從 SGD 到 Adam —— 深度學(xué)習(xí)優(yōu)化算法概覽(一)

    • Adam 究竟還有什么問題 —— 深度學(xué)習(xí)優(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算法結(jié)合了Momentum和RMSprop梯度下降法,是一種極其常見的學(xué)習(xí)算法,被證明能有效適用于不同神經(jīng)網(wǎng)絡(luò),適用于廣泛的結(jié)構(gòu)。
    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)絡(luò)激活函數(shù)可視化

    Sigmoid

    • TODO

    Sigmoid用作激活函數(shù)時,分類為什么要用交叉熵?fù)p失,而不用均方損失?

    • TODO

    tanh

    • TODO

    ReLU

    • TODO

    ReLU 相關(guān)變體

    ReLU 激活函數(shù)為什么比sigmoid和tanh好?

    • TODO

    ReLU 激活函數(shù)為什么能解決梯度消失問題?

    • TODO

    ReLU 有哪些變體?

    • TODO

    Dropout

    Dropout 基本原理

    • TODO

    參考資料

    • 理解dropout

    Dropout 如何實現(xiàn)?

    • TODO

    Drop 在訓(xùn)練和測試的區(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ù)和結(jié)構(gòu)圖:

    卷積層: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的組提出的(大家應(yīng)該能看出VGG名字的由來了)。該網(wǎng)絡(luò)是在ILSVRC 2014上的相關(guān)工作,主要工作是證明了增加網(wǎng)絡(luò)的深度能夠在一定程度上影響網(wǎng)絡(luò)最終的性能。VGG有兩種結(jié)構(gòu),分別是VGG16和VGG19,兩者并沒有本質(zhì)上的區(qū)別,只是網(wǎng)絡(luò)深度不一樣。

    VGG16相比AlexNet的一個改進是采用連續(xù)的幾個3x3的卷積核代替AlexNet中的較大卷積核(11x11,7x7,5x5)。對于給定的感受野(與輸出有關(guān)的輸入圖片的局部大小),采用堆積的小卷積核是優(yōu)于采用大的卷積核,因為多層非線性層可以增加網(wǎng)絡(luò)深度來保證學(xué)習(xí)更復(fù)雜的模式,而且代價還比較小(參數(shù)更少)

    簡單來說,在VGG中,使用了3個3x3卷積核來代替7x7卷積核,使用了2個3x3卷積核來代替5*5卷積核,這樣做的主要目的是在保證具有相同感知野的條件下,提升了網(wǎng)絡(luò)的深度,在一定程度上提升了神經(jīng)網(wǎng)絡(luò)的效果。

    比如,3個步長為1的3x3卷積核的一層層疊加作用可看成一個大小為7的感受野(其實就表示3個3x3連續(xù)卷積相當(dāng)于一個7x7卷積),其參數(shù)總量為 3x(9xC^2) ,如果直接使用7x7卷積核,其參數(shù)總量為 49xC^2 ,這里 C 指的是輸入和輸出的通道數(shù)。很明顯,27xC2小于49xC2,即減少了參數(shù);而且3x3卷積核有利于更好地保持圖像性質(zhì)。

    這里解釋一下為什么使用2個3x3卷積核可以來代替5*5卷積核:

    5x5卷積看做一個小的全連接網(wǎng)絡(luò)在5x5區(qū)域滑動,我們可以先用一個3x3的卷積濾波器卷積,然后再用一個全連接層連接這個3x3卷積輸出,這個全連接層我們也可以看做一個3x3卷積層。這樣我們就可以用兩個3x3卷積級聯(lián)(疊加)起來代替一個 5x5卷積。

    具體如下圖所示:

    [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ADLU9Qqw-1626030698005)(imgs/DLIB-0012.png)]

    至于為什么使用3個3x3卷積核可以來代替7*7卷積核,推導(dǎo)過程與上述類似,大家可以自行繪圖理解。

    下面是VGG網(wǎng)絡(luò)的結(jié)構(gòu)(VGG16和VGG19都在):

    [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(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)絡(luò)的結(jié)構(gòu)非常一致,從頭到尾全部使用的是3x3的卷積和2x2的max pooling。

    如果你想看到更加形象化的VGG網(wǎng)絡(luò),可以使用經(jīng)典卷積神經(jīng)網(wǎng)絡(luò)(CNN)結(jié)構(gòu)可視化工具來查看高清無碼的VGG網(wǎng)絡(luò)。

    VGG優(yōu)點:

    • VGGNet的結(jié)構(gòu)非常簡潔,整個網(wǎng)絡(luò)都使用了同樣大小的卷積核尺寸(3x3)和最大池化尺寸(2x2)。
    • 幾個小濾波器(3x3)卷積層的組合比一個大濾波器(5x5或7x7)卷積層好:
    • 驗證了通過不斷加深網(wǎng)絡(luò)結(jié)構(gòu)可以提升性能。

    VGG缺點

    VGG耗費更多計算資源,并且使用了更多的參數(shù)(這里不是3x3卷積的鍋),導(dǎo)致更多的內(nèi)存占用(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讓我們很方便的使用。

    關(guān)于感受野:

    假設(shè)你一層一層地重疊了3個3x3的卷積層(層與層之間有非線性激活函數(shù))。在這個排列下,第一個卷積層中的每個神經(jīng)元都對輸入數(shù)據(jù)體有一個3x3的視野。

    代碼篇:VGG訓(xùn)練與測試

    這里推薦兩個開源庫,訓(xùn)練請參考tensorflow-vgg,快速測試請參考VGG-in TensorFlow。

    代碼我就不介紹了,其實跟上述內(nèi)容一致,跟著原理看code應(yīng)該會很快。我快速跑了一下VGG-in TensorFlow,代碼親測可用,效果很nice,就是model下載比較煩。

    貼心的Amusi已經(jīng)為你準(zhǔn)備好了VGG-in TensorFlow的測試代碼、model和圖像。需要的同學(xué)可以關(guān)注CVer微信公眾號,后臺回復(fù):VGG。

    天道酬勤,還有很多知識要學(xué),想想都刺激~Fighting!

    參考資料

    • 《Very Deep Convolutional Networks for Large-Scale Image Recognition》

    • 深度網(wǎng)絡(luò)VGG理解

    • 深度學(xué)習(xí)經(jīng)典卷積神經(jīng)網(wǎng)絡(luò)之VGGNet

    • VGG16 結(jié)構(gòu)可視化

    • tensorflow-vgg

    • VGG-in TensorFlow

    • 機器學(xué)習(xí)進階筆記之五 | 深入理解VGG\Residual Network

    ResNet

    1.ResNet意義

    隨著網(wǎng)絡(luò)的加深,出現(xiàn)了訓(xùn)練集準(zhǔn)確率下降的現(xiàn)象,我們可以確定這不是由于Overfit過擬合造成的(過擬合的情況訓(xùn)練集應(yīng)該準(zhǔn)確率很高);所以作者針對這個問題提出了一種全新的網(wǎng)絡(luò),叫深度殘差網(wǎng)絡(luò),它允許網(wǎng)絡(luò)盡可能的加深,其中引入了全新的結(jié)構(gòu)如圖1;
    這里問大家一個問題

    殘差指的是什么?

    其中ResNet提出了兩種mapping:一種是identity mapping,指的就是圖1中”彎彎的曲線”,另一種residual mapping,指的就是除了”彎彎的曲線“那部分,所以最后的輸出是 y=F(x)+x
    identity mapping顧名思義,就是指本身,也就是公式中的x,而residual mapping指的是“差”,也就是y?x,所以殘差指的就是F(x)部分。

    為什么ResNet可以解決“隨著網(wǎng)絡(luò)加深,準(zhǔn)確率不下降”的問題?

    理論上,對于“隨著網(wǎng)絡(luò)加深,準(zhǔn)確率下降”的問題,Resnet提供了兩種選擇方式,也就是identity mapping和residual mapping,如果網(wǎng)絡(luò)已經(jīng)到達最優(yōu),繼續(xù)加深網(wǎng)絡(luò),residual mapping將被push為0,只剩下identity mapping,這樣理論上網(wǎng)絡(luò)一直處于最優(yōu)狀態(tài)了,網(wǎng)絡(luò)的性能也就不會隨著深度增加而降低了。

    2.ResNet結(jié)構(gòu)

    它使用了一種連接方式叫做“shortcut connection”,顧名思義,shortcut就是“抄近道”的意思,看下圖我們就能大致理解:

    ResNet的F(x)究竟長什么樣子?

    參考資料

    • ResNet解析

    • ResNet論文筆記

    • 殘差網(wǎng)絡(luò)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]

    • 給妹紙的深度學(xué)習(xí)教學(xué)(4)——同Residual玩耍

    • Residual Networks 理解

    • Identity Mapping in ResNet

    • resnet(殘差網(wǎng)絡(luò))的F(x)究竟長什么樣子?

    • ResNet到底在解決一個什么問題呢?

    ResNet為什么不用Dropout?

    • TODO

    參考資料

    • https://www.zhihu.com/question/325139089
    • https://zhuanlan.zhihu.com/p/60923972

    為什么 ResNet 不在一開始就使用residual block,而是使用一個7×7的卷積?

    先上一下paper里的圖例:

    [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(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ù).

    本質(zhì)上是: 多channels的非線性激活層是非常昂貴的, 在input layer用big kernel換多channels是劃算的

    注意一下, resnet接入residual block前pixel為56x56的layer, channels數(shù)才64, 但是同樣大小的layer, 在vgg-19里已經(jīng)有256個channels了.

    這里要強調(diào)一下, 只有在input layer層, 也就是最靠近輸入圖片的那層, 才用大卷積, 原因如下:

    深度學(xué)習(xí)領(lǐng)域, 有一種廣泛的直覺,即更大的卷積更好,但更昂貴。輸入層中的特征數(shù)量(224x224)是如此之小(相對于隱藏層),第一卷積可以非常大而不會大幅增加實際的權(quán)重數(shù)。如果你想在某個地方進行大卷積,第一層通常是唯一的選擇

    我認(rèn)為神經(jīng)網(wǎng)絡(luò)的第一層是最基本的,因為它基本上只是將數(shù)據(jù)嵌入到一個新的更大的向量空間中。ResNet在第二層之前沒有開始其特征層跳過,所以看起來作者想要在開始整花里胡哨的layers之前盡可能保留圖像里更多的primary features.

    題外話, 同時期的GoogLeNet也在input layer用到了7x7大卷積, 所以resnet作者的靈感來源于GoogLeNet也說不定, 至于非要追問為啥這么用, 也許最直接的理由就是"深度學(xué)習(xí)就像煉丹, 因為這樣網(wǎng)絡(luò)工作得更好, 所以作者就這么用了".

    再說個有趣的例子, 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)絡(luò)越來越深,準(zhǔn)確率會不會提升?

    • TODO

    ResNet v2

    [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(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結(jié)構(gòu)是怎么實現(xiàn)的?

    TODO

    FCN

    一句話概括就是:FCN將傳統(tǒng)網(wǎng)絡(luò)后面的全連接層換成了卷積層,這樣網(wǎng)絡(luò)輸出不再是類別而是 heatmap;同時為了解決因為卷積和池化對圖像尺寸的影響,提出使用上采樣的方式恢復(fù)。

    作者的FCN主要使用了三種技術(shù):

    • 卷積化(Convolutional)

    • 上采樣(Upsample)

    • 跳躍結(jié)構(gòu)(Skip Layer)

    卷積化

    卷積化即是將普通的分類網(wǎng)絡(luò),比如VGG16,ResNet50/101等網(wǎng)絡(luò)丟棄全連接層,換上對應(yīng)的卷積層即可。

    上采樣

    此處的上采樣即是反卷積(Deconvolution)。當(dāng)然關(guān)于這個名字不同框架不同,Caffe和Kera里叫Deconvolution,而tensorflow里叫conv_transpose。CS231n這門課中說,叫conv_transpose更為合適。

    眾所諸知,普通的池化(為什么這兒是普通的池化請看后文)會縮小圖片的尺寸,比如VGG16 五次池化后圖片被縮小了32倍。為了得到和原圖等大的分割圖,我們需要上采樣/反卷積。

    反卷積和卷積類似,都是相乘相加的運算。只不過后者是多對一,前者是一對多。而反卷積的前向和后向傳播,只用顛倒卷積的前后向傳播即可。所以無論優(yōu)化還是后向傳播算法都是沒有問題。

    跳躍結(jié)構(gòu)(Skip Layers)

    (這個奇怪的名字是我翻譯的,好像一般叫忽略連接結(jié)構(gòu))這個結(jié)構(gòu)的作用就在于優(yōu)化結(jié)果,因為如果將全卷積之后的結(jié)果直接上采樣得到的結(jié)果是很粗糙的,所以作者將不同池化層的結(jié)果進行上采樣之后來優(yōu)化輸出。

    上采樣獲得與輸入一樣的尺寸
    文章采用的網(wǎng)絡(luò)經(jīng)過5次卷積+池化后,圖像尺寸依次縮小了 2、4、8、16、32倍,對最后一層做32倍上采樣,就可以得到與原圖一樣的大小

    作者發(fā)現(xiàn),僅對第5層做32倍反卷積(deconvolution),得到的結(jié)果不太精確。于是將第 4 層和第 3 層的輸出也依次反卷積(圖5)

    參考資料

    【總結(jié)】圖像語義分割之FCN和CRF

    圖像語義分割(1)- FCN

    全卷積網(wǎng)絡(luò) FCN 詳解

    U-Net

    本文介紹一種編碼器-解碼器結(jié)構(gòu)。編碼器逐漸減少池化層的空間維度,解碼器逐步修復(fù)物體的細(xì)節(jié)和空間維度。編碼器和解碼器之間通常存在快捷連接,因此能幫助解碼器更好地修復(fù)目標(biāo)的細(xì)節(jié)。U-Net 是這種方法中最常用的結(jié)構(gòu)。

    fcn(fully convolutional natwork)的思想是:修改一個普通的逐層收縮的網(wǎng)絡(luò),用上采樣(up sampling)(??反卷積)操作代替網(wǎng)絡(luò)后部的池化(pooling)操作。因此,這些層增加了輸出的分辨率。為了使用局部的信息,在網(wǎng)絡(luò)收縮過程(路徑)中產(chǎn)生的高分辨率特征(high resolution features) ,被連接到了修改后網(wǎng)絡(luò)的上采樣的結(jié)果上。在此之后,一個卷積層基于這些信息綜合得到更精確的結(jié)果。

    與fcn(fully convolutional natwork)不同的是,我們的網(wǎng)絡(luò)在上采樣部分依然有大量的特征通道(feature channels),這使得網(wǎng)絡(luò)可以將環(huán)境信息向更高的分辨率層(higher resolution layers)傳播。結(jié)果是,擴張路徑基本對稱于收縮路徑。網(wǎng)絡(luò)不存在任何全連接層(fully connected layers),并且,只使用每個卷積的有效部分,例如,分割圖(segmentation map)只包含這樣一些像素點,這些像素點的完整上下文都出現(xiàn)在輸入圖像中。為了預(yù)測圖像邊界區(qū)域的像素點,我們采用鏡像圖像的方式補全缺失的環(huán)境像素。這個tiling方法在使用網(wǎng)絡(luò)分割大圖像時是非常有用的,因為如果不這么做,GPU顯存會限制圖像分辨率。
    我們的訓(xùn)練數(shù)據(jù)太少,因此我們采用彈性形變的方式增加數(shù)據(jù)。這可以讓模型學(xué)習(xí)得到形變不變性。這對醫(yī)學(xué)圖像分割是非常重要的,因為組織的形變是非常常見的情況,并且計算機可以很有效的模擬真實的形變。在[3]中指出了在無監(jiān)督特征學(xué)習(xí)中,增加數(shù)據(jù)以獲取不變性的重要性。

    參考資料

    • U-net翻譯

    DeepLab 系列

    • TODO

    參考資料

    • Semantic Segmentation --DeepLab(1,2,3)系列總結(jié)

    邊框回顧(Bounding-Box Regression)

    如下圖所示,綠色的框表示真實值Ground Truth, 紅色的框為Selective Search提取的候選區(qū)域/框Region Proposal。那么即便紅色的框被分類器識別為飛機,但是由于紅色的框定位不準(zhǔn)(IoU<0.5), 這張圖也相當(dāng)于沒有正確的檢測出飛機。

    [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-rp3vLGxC-1626030698010)(https://www.julyedu.com/Public/Image/Question/1525499418_635.png)]

    如果我們能對紅色的框進行微調(diào)fine-tuning,使得經(jīng)過微調(diào)后的窗口跟Ground Truth 更接近, 這樣豈不是定位會更準(zhǔn)確。 而Bounding-box regression 就是用來微調(diào)這個窗口的。

    邊框回歸是什么?

    對于窗口一般使用四維向量(x,y,w,h)(x,y,w,h) 來表示, 分別表示窗口的中心點坐標(biāo)和寬高。 對于圖2, 紅色的框 P 代表原始的Proposal, 綠色的框 G 代表目標(biāo)的 Ground Truth, 我們的目標(biāo)是尋找一種關(guān)系使得輸入原始的窗口 P 經(jīng)過映射得到一個跟真實窗口 G 更接近的回歸窗口G^。

    [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(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§),對應(yīng)論文中:
    G^w=Pwexp(dw§),(3)
    G^h=Phexp(dh§),(4)

    觀察(1)-(4)我們發(fā)現(xiàn), 邊框回歸學(xué)習(xí)就是dx§,dy§,dw§,dh§這四個變換。

    下一步就是設(shè)計算法那得到這四個映射。

    線性回歸就是給定輸入的特征向量 X, 學(xué)習(xí)一組參數(shù) W, 使得經(jīng)過線性回歸后的值跟真實值 Y(Ground Truth)非常接近. 即Y≈WX。 那么 Bounding-box 中我們的輸入以及輸出分別是什么呢?

    Input:
    RegionProposal→P=(Px,Py,Pw,Ph)這個是什么? 輸入就是這四個數(shù)值嗎?其實真正的輸入是這個窗口對應(yīng)的 CNN 特征,也就是 R-CNN 中的 Pool5 feature(特征向量)。 (注:訓(xùn)練階段輸入還包括 Ground Truth, 也就是下邊提到的t?=(tx,ty,tw,th))

    Output:
    需要進行的平移變換和尺度縮放 dx§,dy§,dw§,dh§,或者說是Δx,Δy,Sw,Sh。我們的最終輸出不應(yīng)該是 Ground Truth 嗎? 是的, 但是有了這四個變換我們就可以直接得到 Ground Truth。

    這里還有個問題, 根據(jù)(1)~(4)我們可以知道, P 經(jīng)過 dx§,dy§,dw§,dh§得到的并不是真實值 G,而是預(yù)測值G^。的確,這四個值應(yīng)該是經(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)

    那么目標(biāo)函數(shù)可以表示為 d?§=wT?Φ5§,Φ5§是輸入 Proposal 的特征向量,w?是要學(xué)習(xí)的參數(shù)(*表示 x,y,w,h, 也就是每一個變換對應(yīng)一個目標(biāo)函數(shù)) , d?§ 是得到的預(yù)測值。

    我們要讓預(yù)測值跟真實值t?=(tx,ty,tw,th)差距最小, 得到損失函數(shù)為:
    Loss=∑iN(ti??w^T??5(Pi))2

    函數(shù)優(yōu)化目標(biāo)為:

    W?=argminw?∑iN(ti??wT??5(Pi))2+λ||w?||2

    利用梯度下降法或者最小二乘法就可以得到 w?。

    參考資料

    • bounding box regression

    • 邊框回歸(Bounding Box Regression)詳解

    • 什么是邊框回歸Bounding-Box regression,以及為什么要做、怎么做

    反卷積(deconv)/轉(zhuǎn)置卷積(trans)

    參考資料

    • 反卷積(Deconvolution)、上采樣(UNSampling)與上池化(UnPooling)
    • Transposed Convolution, Fractionally Strided Convolution or Deconvolution

    空洞卷積(dilated/Atrous conv)

    • TODO

    參考資料

    • 如何理解空洞卷積(dilated convolution)?

    Pooling層原理

    • TODO

    depthwise卷積加速比推導(dǎo)

    • TODO

    為什么降采用使用max pooling,而分類使用average pooling

    • TODO

    max pooling如何反向傳播

    • TODO

    反卷積

    TODO

    組卷積(group convolution)

    • TODO

    在說明分組卷積之前我們用一張圖來體會一下一般的卷積操作。

    [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-6Ttvv9fq-1626030698012)(imgs/DLIB-0014.png)]

    從上圖可以看出,一般的卷積會對輸入數(shù)據(jù)的整體一起做卷積操作,即輸入數(shù)據(jù):H1×W1×C1;而卷積核大小為h1×w1,通道為C1,一共有C2個,然后卷積得到的輸出數(shù)據(jù)就是H2×W2×C2。這里我們假設(shè)輸出和輸出的分辨率是不變的。主要看這個過程是一氣呵成的,這對于存儲器的容量提出了更高的要求。

    但是分組卷積明顯就沒有那么多的參數(shù)。先用圖片直觀地感受一下分組卷積的過程。對于上面所說的同樣的一個問題,分組卷積就如下圖所示。

    [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-zfRZV93I-1626030698013)(imgs/DLIB-0015.png)]

    可以看到,圖中將輸入數(shù)據(jù)分成了2組(組數(shù)為g),需要注意的是,這種分組只是在深度上進行劃分,即某幾個通道編為一組,這個具體的數(shù)量由(C1/g)決定。因為輸出數(shù)據(jù)的改變,相應(yīng)的,卷積核也需要做出同樣的改變。即每組中卷積核的深度也就變成了(C1/g),而卷積核的大小是不需要改變的,此時每組的卷積核的個數(shù)就變成了(C2/g)個,而不是原來的C2了。然后用每組的卷積核同它們對應(yīng)組內(nèi)的輸入數(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ù)。比如當(dāng)輸入通道為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應(yīng)該是以concatenate的方式組合。
    Alex認(rèn)為group conv的方式能夠增加 filter之間的對角相關(guān)性,而且能夠減少訓(xùn)練參數(shù),不容易過擬合,這類似于正則的效果。

    參考資料

    • A Tutorial on Filter Groups (Grouped Convolution)

    • 深度可分離卷積、分組卷積、擴張卷積、轉(zhuǎn)置卷積(反卷積)的理解

    交錯組卷積(Interleaved group convolutions,IGC)

    參考資料

    • 學(xué)界 | MSRA王井東詳解ICCV 2017入選論文:通用卷積神經(jīng)網(wǎng)絡(luò)交錯組卷積
    • 視頻:基于交錯組卷積的高效深度神經(jīng)網(wǎng)絡(luò)

    空洞/擴張卷積(Dilated/Atrous Convolution)

    Dilated convolution/Atrous convolution可以叫空洞卷積或者擴張卷積。

    背景:語義分割中pooling 和 up-sampling layer層。pooling會降低圖像尺寸的同時增大感受野,而up-sampling操作擴大圖像尺寸,這樣雖然恢復(fù)了大小,但很多細(xì)節(jié)被池化操作丟失了。

    需求:能不能設(shè)計一種新的操作,不通過pooling也能有較大的感受野看到更多的信息呢?

    目的:替代pooling和up-sampling運算,既增大感受野又不減小圖像大小。

    簡述:在標(biāo)準(zhǔn)的 convolution map 里注入空洞,以此來增加 reception field。相比原來的正常convolution,dilated convolution 多了一個 hyper-parameter 稱之為 dilation rate 指的是kernel的間隔數(shù)量(e.g. 正常的 convolution 是 dilatation rate 1)。

    空洞卷積誕生于圖像分割領(lǐng)域,圖像輸入到網(wǎng)絡(luò)中經(jīng)過CNN提取特征,再經(jīng)過pooling降低圖像尺度的同時增大感受野。由于圖像分割是pixel?wise預(yù)測輸出,所以還需要通過upsampling將變小的圖像恢復(fù)到原始大小。upsampling通常是通過deconv(轉(zhuǎn)置卷積)完成。因此圖像分割FCN有兩個關(guān)鍵步驟:池化操作增大感受野,upsampling操作擴大圖像尺寸。這兒有個問題,就是雖然圖像經(jīng)過upsampling操作恢復(fù)了大小,但是很多細(xì)節(jié)還是被池化操作丟失了。那么有沒有辦法既增大了感受野又不減小圖像大小呢?Dilated conv橫空出世。

    [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-FkF6OAcF-1626030698014)(imgs/DLIB-0016.png)]

    注意事項:

    1.為什么不直接使用5x5或者7x7的卷積核?這不也增加了感受野么?

    答:增大卷積核能增大感受野,但是只是線性增長,參考答案里的那個公式,(kernel-1)*layer,并不能達到空洞卷積的指數(shù)增長。

    2.2-dilated要在1-dilated的基礎(chǔ)上才能達到7的感受野(如上圖a、b所示)

    關(guān)于空洞卷積的另一種概括:

    Dilated Convolution問題的引出,是因為down-sample之后的為了讓input和output的尺寸一致。我們需要up-sample,但是up-sample會丟失信息。如果不采用pooling,就無需下采樣和上采樣步驟了。但是這樣會導(dǎo)致kernel 的感受野變小,導(dǎo)致預(yù)測不精確。。如果采用大的kernel話,一來訓(xùn)練的參數(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 對空洞卷積(擴張卷積)、感受野的理解

    • 對深度可分離卷積、分組卷積、擴張卷積、轉(zhuǎn)置卷積(反卷積)的理解

    • tf.nn.atrous_conv2d

    轉(zhuǎn)置卷積(Transposed Convolutions/deconvlution)

    轉(zhuǎn)置卷積(transposed Convolutions)又名反卷積(deconvolution)或是分?jǐn)?shù)步長卷積(fractially straced convolutions)。反卷積(Transposed Convolution, Fractionally Strided Convolution or Deconvolution)的概念第一次出現(xiàn)是 Zeiler 在2010年發(fā)表的論文 Deconvolutional networks 中。

    轉(zhuǎn)置卷積和反卷積的區(qū)別

    那什么是反卷積?從字面上理解就是卷積的逆過程。值得注意的反卷積雖然存在,但是在深度學(xué)習(xí)中并不常用。而轉(zhuǎn)置卷積雖然又名反卷積,卻不是真正意義上的反卷積。因為根據(jù)反卷積的數(shù)學(xué)含義,通過反卷積可以將通過卷積的輸出信號,完全還原輸入信號。而事實是,轉(zhuǎn)置卷積只能還原shape大小,而不能還原value。你可以理解成,至少在數(shù)值方面上,轉(zhuǎn)置卷積不能實現(xiàn)卷積操作的逆過程。所以說轉(zhuǎn)置卷積與真正的反卷積有點相似,因為兩者產(chǎn)生了相同的空間分辨率。但是又名反卷積(deconvolutions)的這種叫法是不合適的,因為它不符合反卷積的概念。

    簡單來說,轉(zhuǎn)置矩陣就是一種上采樣過程。

    正常卷積過程如下,利用3x3的卷積核對4x4的輸入進行卷積,輸出結(jié)果為2x2

    [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-QTBvvJRQ-1626030698015)(https://github.com/vdumoulin/conv_arithmetic/blob/master/gif/no_padding_no_strides.gif?raw=true)]

    轉(zhuǎn)置卷積過程如下,利用3x3的卷積核對"做了補0"的2x2輸入進行卷積,輸出結(jié)果為4x4。

    [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-WHy5FR98-1626030698016)(https://github.com/vdumoulin/conv_arithmetic/blob/master/gif/no_padding_no_strides_transposed.gif?raw=true)]

    上述的卷積運算和轉(zhuǎn)置卷積是"尺寸"對應(yīng)的,卷積的輸入大小與轉(zhuǎn)置卷積的輸出大小一致,分別可以看成下采樣和上采樣操作。

    參考資料

    • Transposed Convolution, Fractionally Strided Convolution or Deconvolution
    • 深度學(xué)習(xí) | 反卷積/轉(zhuǎn)置卷積 的理解 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

    論文的動機是從特征通道之間的關(guān)系入手,希望顯式地建模特征通道之間的相互依賴關(guān)系。另外,沒有引入一個新的空間維度來進行特征通道間的融合,而是采用了一種全新的“特征重標(biāo)定”策略。具體來說,就是通過學(xué)習(xí)的方式來自動獲取到每個特征通道的重要程度,然后依照這個重要程度去增強有用的特征并抑制對當(dāng)前任務(wù)用處不大的特征,通俗來講,就是讓網(wǎng)絡(luò)利用全局信息有選擇的增強有益feature通道并抑制無用feature通道,從而能實現(xiàn)feature通道自適應(yīng)校準(zhǔn)。

    [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-fBrdew12-1626030698017)(imgs/DLIB-0017.png)]

    參考資料

    • SENet學(xué)習(xí)筆記

    SKNet

    • TODO

    參考資料

    • SKNet——SENet孿生兄弟篇
    • 后ResNet時代:SENet與SKNet

    GCNet

    • TODO

    參考資料

    • GCNet:當(dāng)Non-local遇見SENet
    • 2019 GCNet(attention機制,目標(biāo)檢測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)方法的基礎(chǔ)上提供了高校模型設(shè)計的兩個選擇:寬度因子(width multiplie)和分辨率因子(resolution multiplier)。深度可分離卷積depthwise separable convolutions(參考Xception)的本質(zhì)是冗余信息更小的稀疏化表達。

    下面介紹兩幅Xception中 depthwise separable convolution的圖示:

    [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-MAXLgKlZ-1626030698017)(imgs/DLIB-0018.png)]

    [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(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ù)。

    注:上述描述與標(biāo)準(zhǔn)的卷積非常的不同,第一點在于使用非1x1卷積核時,是單channel的(可以說是1通道),即上一層輸出的每個channel都有與之對應(yīng)的卷積核。而標(biāo)準(zhǔn)的卷積過程,卷積核是多channel的。第二點在于使用1x1卷積核實現(xiàn)多channel的融合,并利用多個1x1卷積核生成多channel。表達的可能不是很清楚,但結(jié)合圖示其實就容易明白了。

    一般卷積核的channel也常稱為深度(depth),所以叫做深度可分離,即原來為多channel組合,現(xiàn)在變成了單channel分離。

    參考資料

    • 深度解讀谷歌MobileNet
    • 對深度可分離卷積、分組卷積、擴張卷積、轉(zhuǎn)置卷積(反卷積)的理解

    MobileNetv2為什么會加shotcut?

    • TODO

    MobileNet V2中的Residual結(jié)構(gòu)最先是哪個網(wǎng)絡(luò)提出來的?

    • TODO

    ShuffleNet 系列(V1-V2++)

    • TODO

    ShuffleNetV1

    • TODO

    • 輕量級網(wǎng)絡(luò)–ShuffleNet論文解讀

    • 輕量級網(wǎng)絡(luò)ShuffleNet v1

    • CNN模型之ShuffleNet

    ShuffleNetV2

    • TODO

    參考資料

    • ShuffleNetV2:輕量級CNN網(wǎng)絡(luò)中的桂冠
    • 輕量級神經(jīng)網(wǎng)絡(luò)“巡禮”(一)—— ShuffleNetV2
    • ShufflenetV2_高效網(wǎng)絡(luò)的4條實用準(zhǔn)則
    • ShuffNet v1 和 ShuffleNet v2

    IGC 系列(V1-V3)

    • TODO

    參考資料

    • 微軟資深研究員詳解基于交錯組卷積的高效DNN | 公開課筆記

    深度可分離網(wǎng)絡(luò)(Depth separable convolution)

    • TODO

    學(xué)習(xí)率如何調(diào)整

    • TODO

    神經(jīng)網(wǎng)絡(luò)的深度和寬度作用

    • TODO

    網(wǎng)絡(luò)壓縮與量化

    • TODO

    參考資料

    • 網(wǎng)絡(luò)壓縮-量化方法對比

    Batch Size

    • TODO

    參考資料

    • 怎么選取訓(xùn)練神經(jīng)網(wǎng)絡(luò)時的Batch size?

    • 談?wù)勆疃葘W(xué)習(xí)中的 Batch_Size

    BN和Dropout在訓(xùn)練和測試時的差別

    • TODO

    參考資料

    • BN和Dropout在訓(xùn)練和測試時的差別

    深度學(xué)習(xí)調(diào)參有哪些技巧?

    參考資料

    • https://www.zhihu.com/question/25097993/answer/651617880

    為什么深度學(xué)習(xí)中的模型基本用3x3和5x5的卷積(奇數(shù)),而不是2x2和4x4的卷積(偶數(shù))?

    參考資料

    • https://www.zhihu.com/question/321773456

    深度學(xué)習(xí)訓(xùn)練中是否有必要使用L1獲得稀疏解?

    • TODO

    參考資料

    • https://www.zhihu.com/question/51822759

    EfficientNet

    • TODO

    參考資料

    • 如何評價谷歌大腦的EfficientNet?
    • EfficientNet-可能是迄今為止最好的CNN網(wǎng)絡(luò)
    • EfficientNet論文解讀
    • EfficientNet:調(diào)參俠的福音(ICML 2019)

    如何理解歸一化(Normalization)對于神經(jīng)網(wǎng)絡(luò)(深度學(xué)習(xí))的幫助?

    BN最早被認(rèn)為通過降低所謂Internal Covariate Shift,這種想法的出處可考至Understanding the difficulty of training deep feedforward neural networks,想必這也是batch norm作者這么設(shè)計的初衷。但是這種想法并沒有過多實驗支持,比如說去年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)絡(luò)訓(xùn)練效率的。這樣說來故事就變得很有趣了,也就是說我們大概都理解一些BN對BN層之前網(wǎng)絡(luò)噪音的好處,那么能不能研究一下它對它后面layer的影響?所以這些研究從優(yōu)化的角度,有如下幾種觀點。

  • BN通過修改loss function, 可以令loss的和loss的梯度均滿足更強的Lipschitzness性質(zhì)(即函數(shù)f滿足L-Lipschitz和 [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-YzbQwHcU-1626030698019)(https://www.zhihu.com/equation?tex=%5Cbeta)] -smooth,令L和 [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-hkZ13wlA-1626030698020)(https://www.zhihu.com/equation?tex=%5Cbeta)] 更小,后者其實等同于f Hessian的eigenvalue小于 [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-BEUnQWlA-1626030698021)(https://www.zhihu.com/equation?tex=%5Cbeta)] ,可以作為光滑程度的度量,其實吧我覺得,一般convex optimization里拿這個度量算convergence rate是神器,對于non-convex optimization,不懂鴨,paper里好像也沒寫的樣子),這么做的好處是當(dāng)步子邁得大的時候,我們可以更自信地告訴自己計算出來的梯度可以更好地近似實際的梯度,因此也不容易讓優(yōu)化掉進小坑里。有意思的地方來了,是不是我在某些地方插入一個1/1000 layer,把梯度的L-Lipschitz變成1/1000L-Lipschitz就能讓函數(shù)優(yōu)化的更好了呢?其實不是的,因為單純除以函數(shù)會改變整個優(yōu)化問題,而BN做了不僅僅rescale這件事情,還讓原來近似最優(yōu)的點在做完變化之后,仍然保留在原來不遠的位置。這也就是這篇文章的核心論點,BN做的是問題reparametrization而不是簡單的scaling。 [1]
  • BN把優(yōu)化這件事情分解成了優(yōu)化參數(shù)的方向和長度兩個任務(wù),這么做呢可以解耦層與層之間的dependency因此會讓curvature結(jié)構(gòu)更易于優(yōu)化。這篇證了convergence rate,但由于沒有認(rèn)真讀,所以感覺沒太多資格評價。[2]
  • 歸一化手段是否殊途同歸?很可能是的,在[1]的3.3作者也嘗試了Lp normalization,也得到了和BN差不多的效果。至于Layer norm還是weight norm,可能都可以順著這個思路進行研究鴨,無論是通過[1]還是[2],可能今年的paper里就見分曉了,let’s see。

  • How Does Batch Normalization Help Optimization?
  • Exponential convergence rates for Batch Normalization: The power of length-direction decoupling in non-convex optimization
  • 參考資料

    • 如何理解歸一化(Normalization)對于神經(jīng)網(wǎng)絡(luò)(深度學(xué)習(xí))的幫助?

    多標(biāo)簽分類怎么解決?

    • TODO

    TODO

    Reference

    CVer公眾號

    ?

    總結(jié)

    以上是生活随笔為你收集整理的DL-tudo的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。