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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人工智能 > pytorch >内容正文

pytorch

【深度学习】基础知识--CNN:图像分类(上)

發(fā)布時(shí)間:2025/3/12 pytorch 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【深度学习】基础知识--CNN:图像分类(上) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者信息:

華校專,曾任阿里巴巴資深算法工程師、智易科技首席算法研究員,現(xiàn)任騰訊高級(jí)研究員,《Python 大戰(zhàn)機(jī)器學(xué)習(xí)》的作者。

編者按:

算法工程師必備系列更新啦!繼上次推出了算法工程師必備的數(shù)學(xué)基礎(chǔ)后,小編繼續(xù)整理了必要的機(jī)器學(xué)習(xí)知識(shí),全部以干貨的內(nèi)容呈現(xiàn),哪里不會(huì)學(xué)哪里,老板再也不用擔(dān)心你的基礎(chǔ)問(wèn)題!

CNN:圖像分類

  • ImageNet 數(shù)據(jù)集:一個(gè)開源的圖片數(shù)據(jù)集,包含超過(guò) 1400萬(wàn)張圖片和圖片對(duì)應(yīng)的標(biāo)簽,包含2萬(wàn)多個(gè)類別。

    自從2010 年以來(lái),ImageNet 每年舉辦一次比賽,即:ImageNet 大規(guī)模視覺識(shí)別挑戰(zhàn)賽ILSVRC ,比賽使用 1000 個(gè)類別圖片。

    2017年7月,ImageNet 宣布ILSVRC 于2017 年正式結(jié)束,因?yàn)閳D像分類、物體檢測(cè)、物體識(shí)別任務(wù)中計(jì)算機(jī)的正確率都遠(yuǎn)超人類,計(jì)算機(jī)視覺在感知方面的問(wèn)題基本得到解決,后續(xù)將專注于目前尚未解決的問(wèn)題。

  • ImageNet 中使用兩種錯(cuò)誤率作為評(píng)估指標(biāo):

    • top-5 錯(cuò)誤率:對(duì)一個(gè)圖片,如果正確標(biāo)記在模型輸出的前 5 個(gè)最佳預(yù)測(cè)(即:概率最高的前5個(gè))中,則認(rèn)為是正確的,否則認(rèn)為是錯(cuò)誤的。

      最終錯(cuò)誤預(yù)測(cè)的樣本數(shù)占總樣本數(shù)的比例就是 top-5 錯(cuò)誤率。

    • top-1 錯(cuò)誤率:對(duì)一個(gè)圖片,如果正確標(biāo)記等于模型輸出的最佳預(yù)測(cè)(即:概率最高的那個(gè)),則認(rèn)為是正確的,否則認(rèn)為是錯(cuò)誤的。

      最終錯(cuò)誤預(yù)測(cè)的樣本數(shù)占總樣本數(shù)的比例就是 top-1 錯(cuò)誤率。

    注:feature map 的描述有兩種:channel first,如256x3x3;channel last,如3x3x256 。這里如果未說(shuō)明,則默認(rèn)采用channel last描述。另外也可以顯式指定,如:3x3@256 。

    一、LeNet

  • 1998年LeCun 推出了LeNet 網(wǎng)絡(luò),它是第一個(gè)廣為流傳的卷積神經(jīng)網(wǎng)絡(luò)。

  • LeNet 網(wǎng)絡(luò)包含了卷積層、池化層、全連接層,這些都是現(xiàn)代CNN 網(wǎng)絡(luò)的基本組件。

    網(wǎng)絡(luò)層核/池大小核數(shù)量步長(zhǎng)輸入尺寸輸出尺寸
    INPUT----1@32x32
    C15x5611@32x326@28x28
    S22x2-26@28x286@14x14
    C35x51616@14x1416@10x10
    S42x2-216@10x1016@5x5
    C55x5120116@5x5120@1x1
    F6---12084
    OUTPUT---8410
    • 輸入層:二維圖像,尺寸為32x32。

    • C1、C3、C5 層:二維卷積層。

      其中C5 將輸入的 feature map(尺寸 16@5x5 )轉(zhuǎn)化為尺寸為120x1x1 的 feature map,然后轉(zhuǎn)換為長(zhǎng)度為120 的一維向量。

      這是一種常見的、將卷積層的輸出轉(zhuǎn)換為全連接層的輸入的一種方法。

    • S2、S4 層:池化層。使用sigmoid 函數(shù)作為激活函數(shù)。

      后續(xù)的 CNN 都使用ReLU 作為激活函數(shù)。

    • F6 層:全連接層。

    • 輸出層:由歐式徑向基函數(shù)單元組成。

      后續(xù)的CNN 使用softmax 輸出單元。

      上表中,@ 分隔了通道數(shù)量和feature map 的寬、高。

    二、AlexNet

  • 2012年Hinton 和他的學(xué)生推出了AlexNet 。在當(dāng)年的ImageNet 圖像分類競(jìng)賽中,AlexeNet 以遠(yuǎn)超第二名的成績(jī)奪冠,使得深度學(xué)習(xí)重回歷史舞臺(tái),具有重大歷史意義。

  • 2.1 網(wǎng)絡(luò)結(jié)構(gòu)

  • AlexNet 有5個(gè)廣義卷積層和3個(gè)廣義全連接層。

    • 廣義的卷積層:包含了卷積層、池化層、ReLU、LRN 層等。

    • 廣義全連接層:包含了全連接層、ReLU、Dropout 層等。

    網(wǎng)絡(luò)結(jié)構(gòu)如下表所示:

    編號(hào)網(wǎng)絡(luò)層子層核/池大小核數(shù)量步長(zhǎng)激活函數(shù)輸入尺寸輸出尺寸
    第0層輸入層------3@224x224
    第1層廣義卷積層卷積11x11964ReLU3@227x22796@55x55
    第1層廣義卷積層池化3x3-2-96@55x5596@27x27
    第1層廣義卷積層LRN----96@27x2796@27x27
    第2層廣義卷積層卷積5x52561ReLU96@27x27256@27x27
    第2層廣義卷積層池化3x3-2-256@27x27256@13x13
    第2層廣義卷積層LRN----256@13x13256@13x13
    第3層廣義卷積層卷積3x33841ReLU256@13x13384@13x13
    第4層廣義卷積層卷積3x33841ReLU384@13x13384@13x13
    第5層廣義卷積層卷積3x32561ReLU384@13x13256@13x13
    第5層廣義卷積層池化3x3-2-256@13x13256@6x6
    第6層廣義連接層卷積6x640961ReLU256@6x64096@1x1
    第6層廣義連接層dropout----4096@1x14096@1x1
    第7層廣義連接層全連接---ReLU40964096
    第7層廣義連接層dropout----40964096
    第8層廣義連接層全連接----40961000
    • 輸入層會(huì)將3@224x224 的三維圖片預(yù)處理變成3@227x227 的三維圖片。

    • 第二層廣義卷積層、第四層廣義卷積層、第五層廣義卷積層都是分組卷積,僅采用本GPU 內(nèi)的通道數(shù)據(jù)進(jìn)行計(jì)算。

      第一層廣義卷積層、第三層廣義卷積層、第六層連接層、第七層連接層、第八層連接層執(zhí)行的是全部通道數(shù)據(jù)的計(jì)算。

    • 第二層廣義卷積層的卷積、第三層廣義卷積層的卷積、第四層廣義卷積層的卷積、第五層廣義卷積層的卷積均采用same 填充。

      當(dāng)卷積的步長(zhǎng)為1,核大小為3x3 時(shí),如果不填充0,則feature map 的寬/高都會(huì)縮減 2 。因此這里填充0,使得輸出feature map 的寬/高保持不變。

      其它層的卷積,以及所有的池化都是valid 填充(即:不填充 0 )。

    • 第六層廣義連接層的卷積之后,會(huì)將feature map 展平為長(zhǎng)度為 4096 的一維向量。

    網(wǎng)絡(luò)參數(shù)數(shù)量:總計(jì)約 6237萬(wàn)。

    編號(hào)網(wǎng)絡(luò)層子層輸出 Tensor size權(quán)重個(gè)數(shù)偏置個(gè)數(shù)參數(shù)數(shù)量
    第0層輸入層-227x227x3000
    第1層廣義卷積層卷積55x55x96348489634944
    第1層廣義卷積層池化27x27x96000
    第1層廣義卷積層LRN27x27x96000
    第2層廣義卷積層卷積27x27x256614400256614656
    第2層廣義卷積層池化13x13x256000
    第2層廣義卷積層LRN13x13x256000
    第3層廣義卷積層卷積13x13x384884736384885120
    第4層廣義卷積層卷積13x13x38413271043841327488
    第5層廣義卷積層卷積13x13x256884736256884992
    第5層廣義卷積層池化6x6x256000
    第6層廣義連接層卷積4096×137748736409637752832
    第6層廣義連接層dropout4096×1000
    第7層廣義連接層全連接4096×116777216409616781312
    第7層廣義連接層dropout4096×1000
    第8層廣義連接層全連接1000×1409600010004097000
    總計(jì)-----62,378,344
    • 輸出Tensor size 采用channel last 風(fēng)格描述。即227x227x3 等價(jià)于前文的 3@227x227 。

    • 第6層廣義連接層的卷積的參數(shù)數(shù)量最多,約3770萬(wàn),占整體六千萬(wàn)參數(shù)的 60%。

      原因是該子層的卷積核較大、輸入通道數(shù)量較大、輸出通道數(shù)量太多。該卷積需要的參數(shù)數(shù)量為: 。

    2.2 設(shè)計(jì)技巧

  • AlexNet 成功的主要原因在于:

    • 使用ReLU 激活函數(shù)。

    • 使用dropout、數(shù)據(jù)集增強(qiáng) 、重疊池化等防止過(guò)擬合的方法。

    • 使用百萬(wàn)級(jí)的大數(shù)據(jù)集來(lái)訓(xùn)練。

    • 使用GPU訓(xùn)練,以及的LRN 使用。

    • 使用帶動(dòng)量的 mini batch 隨機(jī)梯度下降來(lái)訓(xùn)練。

    2.2.1 數(shù)據(jù)集增強(qiáng)

  • AlexNet 中使用的數(shù)據(jù)集增強(qiáng)手段:

    • 隨機(jī)裁剪、隨機(jī)水平翻轉(zhuǎn):原始圖片的尺寸為256xx256,裁剪大小為224x224。

    • 每一個(gè)epoch 中,對(duì)同一張圖片進(jìn)行隨機(jī)性的裁剪,然后隨機(jī)性的水平翻轉(zhuǎn)。理論上相當(dāng)于擴(kuò)充了數(shù)據(jù)集 倍。

    • 在預(yù)測(cè)階段不是隨機(jī)裁剪,而是固定裁剪圖片四個(gè)角、一個(gè)中心位置,再加上水平翻轉(zhuǎn),一共獲得 10 張圖片。

      用這10張圖片的預(yù)測(cè)結(jié)果的均值作為原始圖片的預(yù)測(cè)結(jié)果。

    • PCA 降噪:對(duì)RGB空間做PCA 變換來(lái)完成去噪功能。同時(shí)在特征值上放大一個(gè)隨機(jī)性的因子倍數(shù)(單位1 加上一個(gè) 的高斯繞動(dòng)),從而保證圖像的多樣性。

    • 每一個(gè)epoch 重新生成一個(gè)隨機(jī)因子。

    • 該操作使得錯(cuò)誤率下降1% 。

    AlexNet 的預(yù)測(cè)方法存在兩個(gè)問(wèn)題:

    • 這種固定裁剪四個(gè)角、一個(gè)中心的方式,把圖片的很多區(qū)域都給忽略掉了。很有可能一些重要的信息就被裁剪掉。

    • 裁剪窗口重疊,這會(huì)引起很多冗余的計(jì)算。

      改進(jìn)的思路是:

    • 執(zhí)行所有可能的裁剪方式,對(duì)所有裁剪后的圖片進(jìn)行預(yù)測(cè)。將所有預(yù)測(cè)結(jié)果取平均,即可得到原始測(cè)試圖片的預(yù)測(cè)結(jié)果。

    • 減少裁剪窗口重疊部分的冗余計(jì)算。

      具體做法為:將全連接層用等效的卷積層替代,然后直接使用原始大小的測(cè)試圖片進(jìn)行預(yù)測(cè)。將輸出的各位置處的概率值按每一類取平均(或者取最大),則得到原始測(cè)試圖像的輸出類別概率。

      下圖中:上半圖為AlexNet 的預(yù)測(cè)方法;下半圖為改進(jìn)的預(yù)測(cè)方法。

    2.2.2 局部響應(yīng)規(guī)范化

  • 局部響應(yīng)規(guī)范層LRN:目地是為了進(jìn)行一個(gè)橫向抑制,使得不同的卷積核所獲得的響應(yīng)產(chǎn)生競(jìng)爭(zhēng)。

    • LRN 層現(xiàn)在很少使用,因?yàn)樾Ч皇呛苊黠@,而且增加了內(nèi)存消耗和計(jì)算時(shí)間。

    • 在AlexNet 中,該策略貢獻(xiàn)了1.2% 的貢獻(xiàn)率。

    LRN 的思想:輸出通道 i 在位置 (x,y) 處的輸出會(huì)受到相鄰?fù)ǖ涝谙嗤恢幂敵龅挠绊憽?/p>

    為了刻畫這種影響,將輸出通道 i 的原始值除以一個(gè)歸一化因子。

    其中: 為輸出通道 i 在位置 處的原始值, 為歸一化之后的值。n 為影響第 i 通道的通道數(shù)量(分別從左側(cè)、右側(cè) 個(gè)通道考慮)。 為超參數(shù)。

    一般考慮 。

    2.2.3 多GPU 訓(xùn)練

  • AlexNet 使用兩個(gè)GPU訓(xùn)練。網(wǎng)絡(luò)結(jié)構(gòu)圖由上、下兩部分組成:一個(gè)GPU運(yùn)行圖上方的通道數(shù)據(jù),一個(gè)GPU 運(yùn)行圖下方的通道數(shù)據(jù),兩個(gè)GPU 只在特定的網(wǎng)絡(luò)層通信。即:執(zhí)行分組卷積。

    • 第二、四、五層卷積層的核只和同一個(gè)GPU 上的前一層的feature map 相連。

    • 第三層卷積層的核和前一層所有GPU 的feature map 相連。

    • 全連接層中的神經(jīng)元和前一層中的所有神經(jīng)元相連。

    2.2.4 重疊池化

  • 一般的池化是不重疊的,池化區(qū)域的大小與步長(zhǎng)相同。Alexnet 中,池化是可重疊的,即:步長(zhǎng)小于池化區(qū)域的大小。

    重疊池化可以緩解過(guò)擬合,該策略貢獻(xiàn)了0.4% 的錯(cuò)誤率。

  • 為什么重疊池化會(huì)減少過(guò)擬合,很難用數(shù)學(xué)甚至直觀上的觀點(diǎn)來(lái)解答。一個(gè)稍微合理的解釋是:重疊池化會(huì)帶來(lái)更多的特征,這些特征很可能會(huì)有利于提高模型的泛化能力。

  • 2.2.5 優(yōu)化算法

  • AlexNet 使用了帶動(dòng)量的mini-batch 隨機(jī)梯度下降法。

  • 標(biāo)準(zhǔn)的帶動(dòng)量的mini-batch 隨機(jī)梯度下降法為:

    而論文中,作者使用了修正:

    402 Payment Required

    • 其中 ,, 為學(xué)習(xí)率。

    • 為權(quán)重衰減。論文指出:權(quán)重衰減對(duì)于模型訓(xùn)練非常重要,不僅可以起到正則化效果,還可以減少訓(xùn)練誤差。

    三、VGG-Net

  • VGG-Net 是牛津大學(xué)計(jì)算機(jī)視覺組和DeepMind公司共同研發(fā)一種深度卷積網(wǎng)絡(luò),并且在2014年在ILSVRC比賽上獲得了分類項(xiàng)目的第二名和定位項(xiàng)目的第一名。

  • VGG-Net 的主要貢獻(xiàn)是:

    • 證明了小尺寸卷積核(3x3 )的深層網(wǎng)絡(luò)要優(yōu)于大尺寸卷積核的淺層網(wǎng)絡(luò)。

    • 證明了深度對(duì)網(wǎng)絡(luò)的泛化性能的重要性。

    • 驗(yàn)證了尺寸抖動(dòng)scale jittering 這一數(shù)據(jù)增強(qiáng)技術(shù)的有效性。

    VGG-Net 最大的問(wèn)題在于參數(shù)數(shù)量,VGG-19 基本上是參數(shù)數(shù)量最多的卷積網(wǎng)絡(luò)架構(gòu)。

    3.1 網(wǎng)絡(luò)結(jié)構(gòu)

  • VGG-Net 一共有五組結(jié)構(gòu)(分別表示為:A~E ), 每組結(jié)構(gòu)都類似,區(qū)別在于網(wǎng)絡(luò)深度上的不同。

    • 結(jié)構(gòu)中不同的部分用黑色粗體給出。

    • 卷積層的參數(shù)為convx-y,其中x 為卷積核大小,y 為卷積核數(shù)量。

      如:conv3-64 表示 64 個(gè) 3x3 的卷積核。

    • 卷積層的通道數(shù)剛開始很小(64通道),然后在每個(gè)池化層之后的卷積層通道數(shù)翻倍,直到512。

    • 每個(gè)卷積層之后都跟隨一個(gè)ReLU激活函數(shù),表中沒有標(biāo)出。

    通用結(jié)構(gòu):

    • 輸入層:固定大小的224x224 的RGB 圖像。

    • 卷積層:卷積步長(zhǎng)均為1。

    • 填充方式:填充卷積層的輸入,使得卷積前后保持同樣的空間分辨率。

    • 3x3 卷積:same 填充,即:輸入的上下左右各填充1個(gè)像素。

    • 1x1 卷積:不需要填充。

    • 卷積核尺寸:有3x3 和1x1 兩種。

    • 3x3 卷積核:這是捕獲左右、上下、中心等概念的最小尺寸。

    • 1x1 卷積核:用于輸入通道的線性變換。

      在它之后接一個(gè)ReLU 激活函數(shù),使得輸入通道執(zhí)行了非線性變換。

    • 池化層:采用最大池化。

    • 池化層連接在卷積層之后,但并不是所有的卷積層之后都有池化。

    • 池化窗口為2x2,步長(zhǎng)為 2 。

    • 網(wǎng)絡(luò)最后四層為::三個(gè)全連接層 + 一個(gè)softmax 層。

    • 前兩個(gè)全連接層都是 4096個(gè)神經(jīng)元,第三個(gè)全連接層是 1000 個(gè)神經(jīng)元(因?yàn)閳?zhí)行的是 1000 類的分類)。

    • 最后一層是softmax 層用于輸出類別的概率。

    • 所有隱層都使用ReLU 激活函數(shù)。

    VGG-Net 網(wǎng)絡(luò)參數(shù)數(shù)量:

    其中第一個(gè)全連接層的參數(shù)數(shù)量為:7x7x512x4096=1.02億 ,因此網(wǎng)絡(luò)絕大部分參數(shù)來(lái)自于該層。

    與AlexNet 相比,VGG-Net 在第一個(gè)全連接層的輸入feature map 較大:7x7 vs 6x6,512 vs 256 。

    網(wǎng)絡(luò)A , A-LRNBCDE
    參數(shù)數(shù)量1.13億1.33億1.34億1.38億1.44

    3.2 設(shè)計(jì)技巧

  • 輸入預(yù)處理:通道像素零均值化。

    • 先統(tǒng)計(jì)訓(xùn)練集中全部樣本的通道均值:所有紅色通道的像素均值 、所有綠色通道的像素均值 、所有藍(lán)色通道的像素均值 。

      其中:假設(shè)紅色通道為通道0,綠色通道為通道1,藍(lán)色通道為通道2 ;n 遍歷所有的訓(xùn)練樣本,i,j 遍歷圖片空間上的所有坐標(biāo)。

    • 對(duì)每個(gè)樣本:紅色通道的每個(gè)像素值減去 ,綠色通道的每個(gè)像素值減去 ,藍(lán)色通道的每個(gè)像素值減去 。

    多尺度訓(xùn)練:將原始的圖像縮放到最小的邊 ,然后在整副圖像上截取224x224 的區(qū)域來(lái)訓(xùn)練。

    有兩種方案:

    • 在所有圖像上固定 S :用 S=256 來(lái)訓(xùn)練一個(gè)模型,用 S=384 來(lái)訓(xùn)練另一個(gè)模型。最后使用兩個(gè)模型來(lái)評(píng)估。

    • 對(duì)每個(gè)圖像,在 之間隨機(jī)選取一個(gè) S ,然后進(jìn)行裁剪來(lái)訓(xùn)練一個(gè)模型。最后使用單個(gè)模型來(lái)評(píng)估。

    • 該方法只需要一個(gè)單一的模型。

    • 該方法相當(dāng)于使用了尺寸抖動(dòng)(scale jittering) 的數(shù)據(jù)增強(qiáng)。

    多尺度測(cè)試:將測(cè)試的原始圖像等軸的縮放到預(yù)定義的最小圖像邊,表示為 Q (Q 不一定等于 S ),稱作測(cè)試尺度。

    在一張測(cè)試圖像的幾個(gè)歸一化版本上運(yùn)行模型,然后對(duì)得到的結(jié)果進(jìn)行平均。

    該方法相當(dāng)于在測(cè)試時(shí)使用了尺寸抖動(dòng)。實(shí)驗(yàn)結(jié)果表明:測(cè)試時(shí)的尺寸抖動(dòng)導(dǎo)致了更好的性能。

    • 不同版本對(duì)應(yīng)于不同的 Q 值。

    • 所有版本都執(zhí)行通道像素歸一化。注意:采用訓(xùn)練集的統(tǒng)計(jì)量。

    評(píng)估有三種方案:

    • single-crop:對(duì)測(cè)試圖片沿著最短邊縮放,然后選擇其中的 center crop 來(lái)裁剪圖像,選擇這個(gè)圖像的預(yù)測(cè)結(jié)果作為原始圖像的預(yù)測(cè)結(jié)果。

      該方法的缺點(diǎn)是:僅僅保留圖片的中央部分可能會(huì)丟掉圖片類別的關(guān)鍵信息。因此該方法很少在實(shí)際任務(wù)中使用,通常用于不同模型之間的性能比較。

    • multi-crop:類似AlexNet 的做法,對(duì)每個(gè)測(cè)試圖像獲取多個(gè)裁剪圖像,平均每個(gè)裁剪圖像的預(yù)測(cè)結(jié)果為原始圖像的預(yù)測(cè)結(jié)果。

      該方法的缺點(diǎn)是:需要網(wǎng)絡(luò)重新計(jì)算每個(gè)裁剪圖像,效率較低。

    • dense:將最后三個(gè)全連接層用等效的卷積層替代,成為一個(gè)全卷積網(wǎng)絡(luò)。其中:第一個(gè)全連接層用7x7 的卷積層替代,后面兩個(gè)全連接層用1x1 的卷積層替代。

      該全卷積網(wǎng)絡(luò)應(yīng)用到整張圖片上(無(wú)需裁剪),得到一個(gè)多位置的、各類別的概率字典。通過(guò)原始圖片、水平翻轉(zhuǎn)圖片的各類別預(yù)測(cè)的均值,得到原始圖片的各類別概率。

      該方法的優(yōu)點(diǎn)是:不需要裁剪圖片,支持多尺度的圖片測(cè)試,計(jì)算效率較高。

      實(shí)驗(yàn)結(jié)果表明:multi-crop 評(píng)估方式要比dense 評(píng)估方式表現(xiàn)更好。另外,二者是互補(bǔ)的,其組合要優(yōu)于任何單獨(dú)的一種。下表中,S=[256;512],Q={256,384,512} 。

      還有一種評(píng)估策略:ensemble error 。即:同時(shí)訓(xùn)練同一種網(wǎng)絡(luò)的多個(gè)不同的模型,然后用這幾個(gè)模型的預(yù)測(cè)結(jié)果的平均誤差作為最終的 ensemble error 。

      有一種術(shù)語(yǔ)叫single-model error。它是訓(xùn)練一個(gè)模型,然后采用上述的多種crop/dense 評(píng)估的組合,這些組合的平均輸出作為預(yù)測(cè)結(jié)果。

    權(quán)重初始化:由于網(wǎng)絡(luò)深度較深,因此網(wǎng)絡(luò)權(quán)重的初始化很重要,設(shè)計(jì)不好的初始化可能會(huì)阻礙學(xué)習(xí)。

    • 論文的權(quán)重初始化方案為:先訓(xùn)練結(jié)構(gòu)A 。當(dāng)訓(xùn)練更深的配置時(shí),使用結(jié)構(gòu)A 的前四個(gè)卷積層和最后三個(gè)全連接層來(lái)初始化網(wǎng)絡(luò),網(wǎng)絡(luò)的其它層被隨機(jī)初始化。

    • 作者后來(lái)指出:可以通過(guò) Xavier均勻初始化來(lái)直接初始化權(quán)重而不需要進(jìn)行預(yù)訓(xùn)練。

    實(shí)驗(yàn)結(jié)果表明:

    • 分類誤差隨著網(wǎng)絡(luò)深度的增加而減小。

    • 從A-LRN 和 A 的比較發(fā)現(xiàn):局部響應(yīng)歸一化層LRN 對(duì)于模型沒有任何改善。

    四、Inception

  • Inception 網(wǎng)絡(luò)是卷積神經(jīng)網(wǎng)絡(luò)的一個(gè)重要里程碑。在Inception 之前,大部分流行的卷積神經(jīng)網(wǎng)絡(luò)僅僅是把卷積層堆疊得越來(lái)越多,使得網(wǎng)絡(luò)越來(lái)越深。這使得網(wǎng)絡(luò)越來(lái)越復(fù)雜,參數(shù)越來(lái)越多,從而導(dǎo)致網(wǎng)絡(luò)容易出現(xiàn)過(guò)擬合,增加計(jì)算量。

    而Inception 網(wǎng)絡(luò)考慮的是多種卷積核的并行計(jì)算,擴(kuò)展了網(wǎng)絡(luò)的寬度。

  • Inception Net 核心思想是:稀疏連接。因?yàn)樯锷窠?jīng)連接是稀疏的。

  • Inception 網(wǎng)絡(luò)的最大特點(diǎn)是大量使用了Inception 模塊。

  • 4.1 Inception v1

    4.1.1 網(wǎng)絡(luò)結(jié)構(gòu)

  • InceptionNet V1 是一個(gè)22層的深度網(wǎng)絡(luò)。如果考慮池化層,則有29層。如下圖中的depth 列所示。

    網(wǎng)絡(luò)具有三組Inception 模塊,分別為:inception(3a)/inception(3b)、inception(4a)/inception(4b)/inception(4c)/inception(4d)/inception(4e)、inception(5a)、inception(5b)。三組Inception 模塊被池化層分隔。

  • 下圖給出了網(wǎng)絡(luò)的層次結(jié)構(gòu)和參數(shù),其中:


    • type 列:給出了每個(gè)模塊/層的類型。

    • patch size/stride 列:給出了卷積層/池化層的尺寸和步長(zhǎng)。

    • output size 列:給出了每個(gè)模塊/層的輸出尺寸和輸出通道數(shù)。

    • depth列:給出了每個(gè)模塊/層包含的、含有訓(xùn)練參數(shù)層的數(shù)量。

    • #1x1列:給出了每個(gè)模塊/層包含的1x1 卷積核的數(shù)量,它就是1x1 卷積核的輸出通道數(shù)。

    • #3x3 reduce列:給出了每個(gè)模塊/層包含的、放置在3x3 卷積層之前的1x1 卷積核的數(shù)量,它就是1x1 卷積核的輸出通道數(shù)。

    • #3x3列:給出了每個(gè)模塊/層包含的3x3 卷積核的數(shù)量,它就是3x3 卷積核的輸出通道數(shù)。

    • #5x5 reduce列:給出了每個(gè)模塊/層包含的、放置在5x5 卷積層之前的1x1 卷積核的數(shù)量,它就是1x1 卷積核的輸出通道數(shù)。

    • #5x5列:給出了每個(gè)模塊/層包含的5x5 卷積核的數(shù)量,它就是5x5卷積核的輸出通道數(shù)。

    • pool proj列:給出了每個(gè)模塊/層包含的、放置在池化層之后的1x1 卷積核的數(shù)量,它就是1x1 卷積核的輸出通道數(shù)。

    • params列:給出了每個(gè)模塊/層的參數(shù)數(shù)量。

    • ops列:給出了每個(gè)模塊/層的計(jì)算量。

    Inception V1 的參數(shù)數(shù)量為 697.7 萬(wàn),其參數(shù)數(shù)量遠(yuǎn)遠(yuǎn)小于AlexNet(6千萬(wàn))、VGG-Net(超過(guò)1億)。

    Inception V1 參數(shù)數(shù)量能縮減的一個(gè)主要技巧是:在inception(5b)輸出到linear之間插入一個(gè)平均池化層avg pool。

    • 如果沒有平均池化層,則inception(5b) 到 linear 之間的參數(shù)數(shù)量為:7x7x1024x1024,約為 5 千萬(wàn)。

    • 插入了平均池化層之后,inception(5b) 到 linear 之間的參數(shù)數(shù)量為:1x1x1024x1024,約為 1百萬(wàn)。

    4.1.2 Inception 模塊

  • 原始的Inception 模塊對(duì)輸入同時(shí)執(zhí)行:3個(gè)不同大小的卷積操作(1x1、3x3、5x5)、1個(gè)最大池化操作(3x3 )。所有操作的輸出都在深度方向拼接起來(lái),向后一級(jí)傳遞。

    • 三種不同大小卷積:通過(guò)不同尺寸的卷積核抓取不同大小的對(duì)象的特征。

      使用1x1、3x3、5x5 這些具體尺寸僅僅是為了便利性,事實(shí)上也可以使用更多的、其它尺寸的濾波器。

    • 1個(gè)最大池化:提取圖像的原始特征(不經(jīng)過(guò)過(guò)濾器)。

    原始Inception 模塊中,模塊的輸出通道數(shù)量為四個(gè)子層的輸出通道數(shù)的疊加。這種疊加不可避免的使得Inception 模塊的輸出通道數(shù)增加,這就增加了Inception 模塊中每個(gè)卷積的計(jì)算量。因此在經(jīng)過(guò)若干個(gè)模塊之后,計(jì)算量會(huì)爆炸性增長(zhǎng)。

    解決方案是:在3x3 和 5x5 卷積層之前額外添加1x1 卷積層,來(lái)限制輸入給卷積層的輸入通道的數(shù)量。

    注意:

    • 1x1 卷積是在最大池化層之后,而不是之前。這是因?yàn)?#xff1a;池化層是為了提取圖像的原始特征,一旦它接在1x1 卷積之后就失去了最初的本意。

    • 1x1 卷積在3x3、5x5 卷積之前。這是因?yàn)?#xff1a;如果1x1 卷積在它們之后,則3x3 卷積、5x5 卷積的輸入通道數(shù)太大,導(dǎo)致計(jì)算量仍然巨大。

    4.1.3 輔助分類器

  • 為了緩解梯度消失的問(wèn)題,InceptionNet V1 給出了兩個(gè)輔助分類器。這兩個(gè)輔助分類器被添加到網(wǎng)絡(luò)的中間層,它們和主分類器共享同一套訓(xùn)練數(shù)據(jù)及其標(biāo)記。其中:

    • 第一個(gè)輔助分類器位于Inception(4a) 之后,Inception(4a) 模塊的輸出作為它的輸入。

    • 第二個(gè)輔助分類器位于Inception(4d) 之后,Inception(4d) 模塊的輸出作為它的輸入。

    • 兩個(gè)輔助分類器的結(jié)構(gòu)相同,包括以下組件:

    • 一個(gè)尺寸為5x5、步長(zhǎng)為3的平均池化層。

    • 一個(gè)尺寸為1x1、輸出通道數(shù)為128 的卷積層。

    • 一個(gè)具有1024 個(gè)單元的全連接層。

    • 一個(gè)drop rate = 70%的 dropout 層。

    • 一個(gè)使用softmax 損失的線性層作為輸出層。

    在訓(xùn)練期間,兩個(gè)輔助分類器的損失函數(shù)的權(quán)重是0.3,它們的損失被疊加到網(wǎng)絡(luò)的整體損失上。在推斷期間,這兩個(gè)輔助網(wǎng)絡(luò)被丟棄。

    在Inception v3 的實(shí)驗(yàn)中表明:輔助網(wǎng)絡(luò)的影響相對(duì)較小,只需要其中一個(gè)就能夠取得同樣的效果。

    事實(shí)上輔助分類器在訓(xùn)練早期并沒有多少貢獻(xiàn)。只有在訓(xùn)練接近結(jié)束,輔助分支網(wǎng)絡(luò)開始發(fā)揮作用,獲得超出無(wú)輔助分類器網(wǎng)絡(luò)的結(jié)果。

    兩個(gè)輔助分類器的作用:提供正則化的同時(shí),克服了梯度消失問(wèn)題。

    4.2 Inception v2

  • Inception v2 的主要貢獻(xiàn)是提出了Batch Normalization 。論文指出,使用了Batch Normalization 之后:

    • 可以加速網(wǎng)絡(luò)的學(xué)習(xí)。

      相比Inception v1,訓(xùn)練速度提升了14倍。因?yàn)閼?yīng)用了BN 之后,網(wǎng)絡(luò)可以使用更高的學(xué)習(xí)率,同時(shí)刪除了某些層。

    • 網(wǎng)絡(luò)具有更好的泛化能力。

      在ImageNet 分類問(wèn)題的top5 上達(dá)到4.8%,超過(guò)了人類標(biāo)注 top5 的準(zhǔn)確率。

    Inception V2 網(wǎng)絡(luò)訓(xùn)練的技巧有:

    • 使用更高的學(xué)習(xí)率。

    • 刪除dropout層、LRN 層。

    • 減小L2 正則化的系數(shù)。

    • 更快的衰減學(xué)習(xí)率。學(xué)習(xí)率以指數(shù)形式衰減。

    • 更徹底的混洗訓(xùn)練樣本,使得一組樣本在不同的epoch 中處于不同的mini batch 中。

    • 減少圖片的形變。

    Inception v2 的網(wǎng)絡(luò)結(jié)構(gòu)比Inception v1 有少量改動(dòng):

    • 5x5 卷積被兩個(gè)3x3 卷積替代。

      這使得網(wǎng)絡(luò)的最大深度增加了 9 層,同時(shí)網(wǎng)絡(luò)參數(shù)數(shù)量增加 25%,計(jì)算量增加 30%。

    • 28x28 的inception 模塊從2個(gè)增加到3個(gè)。

    • 在inception 模塊中,有的采用最大池化,有的采用平均池化。

    • 在inception 模塊之間取消了用作連接的池化層。

    • inception(3c),inception(4e) 的子層采用步長(zhǎng)為 2 的卷積/池化。

      Pool+proj 列給出了inception 中的池化操作。

      avg+32 意義為:平均池化層后接一個(gè)尺寸1x1、輸出通道32 的卷積層。

      max+pass through 意義為:最大池化層后接一個(gè)尺寸1x1、輸出通道數(shù)等于輸入通道數(shù)的卷積層。

    Inception V2 的網(wǎng)絡(luò)參數(shù)約為1126 萬(wàn)。

    層參數(shù)數(shù)量
    conv19408
    conv2114688
    inception-3a218094
    inception-3b259072
    inception-3c384000
    inception-4a608193
    inception-4b663552
    inception-4c912384
    inception-4d1140736
    inception-4e1447936
    inception-5a2205696
    inception-5b2276352
    fc1024000
    11264111

    Inception V2 在ImageNet 測(cè)試集上的誤差率:

    4.3 Inception v3

  • 雖然Inception v1 的參數(shù)較少,但是它的結(jié)構(gòu)比較復(fù)雜,難以進(jìn)行修改。原因有以下兩點(diǎn):

    因此Inception v3 的論文重點(diǎn)探討了網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)的原則。

    • 如果單純的放大網(wǎng)絡(luò)(如增加Inception 模塊的數(shù)量、擴(kuò)展Inception 模塊的大小),則參數(shù)的數(shù)量會(huì)顯著增長(zhǎng),計(jì)算代價(jià)太大。

    • Inception v1 結(jié)構(gòu)中的各種設(shè)計(jì),其對(duì)最終結(jié)果的貢獻(xiàn)尚未明確。

    4.3.1 網(wǎng)絡(luò)結(jié)構(gòu)

  • Inception v3 的網(wǎng)絡(luò)深度為42層,它相對(duì)于Inception v1 網(wǎng)絡(luò)主要做了以下改動(dòng):

    • 7x7 卷積替換為3個(gè)3x3 卷積。

    • 3個(gè)Inception模塊:模塊中的5x5 卷積替換為2個(gè)3x3 卷積,同時(shí)使用后面描述的網(wǎng)格尺寸縮減技術(shù)。

    • 5個(gè)Inception 模塊:模塊中的5x5 卷積替換為2個(gè)3x3 卷積之后,所有的nxn 卷積進(jìn)行非對(duì)稱分解,同時(shí)使用后面描述的網(wǎng)格尺寸縮減技術(shù)。

    • 2個(gè)Inception 模塊:結(jié)構(gòu)如下。它也使用了卷積分解技術(shù),以及網(wǎng)格尺寸縮減技術(shù)。

    Inception v3 的網(wǎng)絡(luò)結(jié)構(gòu)如下所示:

    • 3xInception 表示三個(gè)Inception 模塊,4xInception 表示四個(gè)Inception 模塊,5xInception 表示五個(gè)Inception 模塊。

    • conv padded 表示使用0填充的卷積,它可以保持feature map 的尺寸。

      在Inception 模塊內(nèi)的卷積也使用0填充,所有其它的卷積/池化不再使用填充。

    在3xInception 模塊的輸出之后設(shè)有一個(gè)輔助分類器。其結(jié)構(gòu)如下:

    Inception v3 整體參數(shù)數(shù)量約 23,626,728萬(wàn)(論文Xception: Deep Learning with Depthwise Separable Convolutions)。

    4.3.2 設(shè)計(jì)技巧

  • Inception v3 總結(jié)出網(wǎng)絡(luò)設(shè)計(jì)的一套通用設(shè)計(jì)原則:

    representation 大小通常指的是feature map 的容量,即feature map 的width x height x channel 。

    • 空間聚合:可以通過(guò)空間聚合來(lái)完成低維嵌入,而不會(huì)在表達(dá)能力上有較大的損失。因此通常在nxn 卷積之前,先利用1x1 卷積來(lái)降低輸入維度。

      猜測(cè)的原因是:空間維度之間的強(qiáng)相關(guān)性導(dǎo)致了空間聚合過(guò)程中的信息丟失較少。

    • 平衡網(wǎng)絡(luò)的寬度和深度:增加網(wǎng)絡(luò)的寬度或者深度都可以提高網(wǎng)絡(luò)的泛化能力,因此計(jì)算資源需要在網(wǎng)絡(luò)的深度和寬度之間取得平衡。

    • 避免representation 瓶頸:representation 的大小應(yīng)該從輸入到輸出緩緩減小,避免極端壓縮。在縮小feature map 尺寸的同時(shí),應(yīng)該增加feature map 的通道數(shù)。

    4.3.2.1 卷積尺寸分解
  • 大卷積核的分解:將大卷積核分解為多個(gè)小的卷積核。

    如:使用2個(gè)3x3 卷積替換5x5 卷積,則其參數(shù)數(shù)量大約是1個(gè)5x5 卷積的 72% 。

  • nxn 卷積核的非對(duì)稱分解:將nxn 卷積替換為1xn 卷積和nx1 卷積。


    • 這種非對(duì)稱分解的參數(shù)數(shù)量是原始卷積數(shù)量的 。隨著n 的增加,計(jì)算成本的節(jié)省非常顯著。

    • 論文指出:對(duì)于較大的feature map ,這種分解不能很好的工作;但是對(duì)于中等大小的 feature map (尺寸在12~20 之間),這種分解效果非常好。

    4.3.2.2 網(wǎng)格尺寸縮減
  • 假設(shè)輸入的feature map 尺寸為dxd,通道數(shù)為k。如果希望輸出的feature map 尺寸為d/2 x d/2,通道數(shù)為2k。則有以下的兩種方式:

    事實(shí)上每個(gè)Inception 模塊都會(huì)使得feature map 尺寸縮半、通道翻倍,因此在這個(gè)過(guò)程中需要仔細(xì)設(shè)計(jì)網(wǎng)絡(luò),使得既能夠保證網(wǎng)絡(luò)的表征能力,又不至于計(jì)算代價(jià)太大。

    • 首先使用2k 個(gè) 1x1 的卷積核,執(zhí)行步長(zhǎng)為1的卷積。然后執(zhí)行一個(gè)2x2 的、步長(zhǎng)為2的池化操作。

      該方式需要執(zhí)行 2d^2k^2 次乘-加操作,計(jì)算代價(jià)較大。

    • 直接使用2k 個(gè)1x1 的卷積核,執(zhí)行步長(zhǎng)為2的卷積。

      該方式需要執(zhí)行 次乘-加操作,計(jì)算代價(jià)相對(duì)較小。但是表征能力下降,產(chǎn)生了表征瓶頸。

    解決方案是:采用兩個(gè)模塊P 和 C 。

    將模塊P 和模塊C 的輸出按照通道數(shù)拼接,產(chǎn)生最終的輸出feature map 。

    • 模塊P :使用k 個(gè)1x1 的卷積核,執(zhí)行步長(zhǎng)為2的卷積。其輸出feature map 尺寸為d/2 x d/2,通道數(shù)為k。

    • 模塊C:使用步長(zhǎng)為2的池化。其輸出feature map 尺寸為d/2 x d/2,通道數(shù)為k。

    4.3.2.3 標(biāo)簽平滑正則化
  • 標(biāo)簽平滑正則化的原理:假設(shè)樣本的真實(shí)標(biāo)記存在一定程度上的噪聲。即:樣本的真實(shí)標(biāo)記不一定是可信的。

    對(duì)給定的樣本 ,其真實(shí)標(biāo)記為 y 。在普通的訓(xùn)練中,該樣本的類別分布為一個(gè) 函數(shù):。記做 。

    采用標(biāo)簽平滑正則化(LSR:Label Smoothing Regularization)之后,該樣本的類別分布為:

    402 Payment Required

    其中 是一個(gè)很小的正數(shù)(如 0.1),其物理意義為:樣本標(biāo)簽不可信的比例。

    該類別分布的物理意義為:

    • 樣本 的類別為 y 的概率為 。

    • 樣本 的類別為 的概率均 。

    論文指出:標(biāo)簽平滑正則化對(duì)top-1 錯(cuò)誤率和top-5 錯(cuò)誤率提升了大約 0.2% 。

    4.4 Inception v4 & Inception - ResNet

  • Inception v4 和 Inception-ResNet 在同一篇論文中給出。論文通過(guò)實(shí)驗(yàn)證明了:結(jié)合殘差連接可以顯著加速Inception 的訓(xùn)練。

  • 性能比較:(綜合采用了 144 crops/dense 評(píng)估的結(jié)果,數(shù)據(jù)集:ILSVRC 2012 的驗(yàn)證集 )

    網(wǎng)絡(luò)cropsTop-1 ErrorTop-5 Error
    ResNet-151dense19.4%4.5%
    Inception-v314418.9%4.3%
    Inception-ResNet-v114418.8%4.3%
    Inception-v414417.7%3.8%
    Inception-ResNet-v214417.8%3.7%
  • Inception-ResNet-v2 參數(shù)數(shù)量約為 5500萬(wàn),Inception-ResNet-v1/Inception-v4 的參數(shù)數(shù)量也在該量級(jí)。

  • 4.4.1 Inception v4

  • 在Inception v4 結(jié)構(gòu)的主要改動(dòng):

    • 修改了 stem 部分。

    • 引入了Inception-A、Inception-B、Inception-C 三個(gè)模塊。這些模塊看起來(lái)和Inception v3 變體非常相似。

      Inception-A/B/C 模塊中,輸入feature map 和輸出feature map 形狀相同。而Reduction-A/B 模塊中,輸出feature map 的寬/高減半、通道數(shù)增加。

    • 引入了專用的“縮減塊”(reduction block),它被用于縮減feature map 的寬、高。

      早期的版本并沒有明確使用縮減塊,但是也實(shí)現(xiàn)了其功能。

    Inception v4 結(jié)構(gòu)如下:(沒有標(biāo)記V 的卷積使用same填充;標(biāo)記V 的卷積使用valid 填充)

    網(wǎng)絡(luò)klmn
    Inception-v4192224256384
    Inception-ResNet-v1192192256384
    Inception-ResNet-v2256256256384
    • Reduction-B模塊:

    • stem 部分的結(jié)構(gòu):

    • Inception-A模塊(這樣的模塊有4個(gè)):

    • Inception-B模塊(這樣的模塊有7個(gè)):

    • Inception-C模塊(這樣的模塊有3個(gè)):

    • Reduction-A模塊:(其中 k,l,m,n 分別表示濾波器的數(shù)量)

    4.4.2 Inception-ResNet

  • 在Inception-ResNet 中,使用了更廉價(jià)的Inception 塊:inception 模塊的池化運(yùn)算由殘差連接替代。

    在Reduction 模塊中能夠找到池化運(yùn)算。

  • Inception ResNet 有兩個(gè)版本:v1 和 v2 。

    • v1 的計(jì)算成本和Inception v3 的接近,v2 的計(jì)算成本和Inception v4 的接近。

    • v1 和v2 具有不同的stem 。

    • 兩個(gè)版本都有相同的模塊A、B、C 和縮減塊結(jié)構(gòu),唯一不同在于超參數(shù)設(shè)置。

    Inception-ResNet-v1 結(jié)構(gòu)如下:

    • stem 部分的結(jié)構(gòu):

    • Inception-ResNet-A模塊(這樣的模塊有5個(gè)):

    • Inception-B模塊(這樣的模塊有10個(gè)):

    • Inception-C模塊(這樣的模塊有5個(gè)):

    • Reduction-A模塊:同inception_v4 的 Reduction-A模塊

    • Reduction-B模塊:

    Inception-ResNet-v2 結(jié)構(gòu)與Inception-ResNet-v1 基本相同 :

    • Inception-ResNet-A模塊(這樣的模塊有5個(gè)):它的結(jié)構(gòu)與Inception-ResNet-v1 的Inception-ResNet-A相同,只是通道數(shù)發(fā)生了改變。

    • Inception-B模塊(這樣的模塊有10個(gè)):它的結(jié)構(gòu)與Inception-ResNet-v1 的Inception-ResNet-B相同,只是通道數(shù)發(fā)生了改變。

    • Inception-C模塊(這樣的模塊有5個(gè)):它的結(jié)構(gòu)與Inception-ResNet-v1 的Inception-ResNet-C相同,只是通道數(shù)發(fā)生了改變。

    • Reduction-A模塊:同inception_v4 的 Reduction-A模塊。

    • Reduction-B模塊:它的結(jié)構(gòu)與Inception-ResNet-v1 的Reduction-B相同,只是通道數(shù)發(fā)生了改變。

    • stem 部分的結(jié)構(gòu):同inception_v4 的 stem 部分。Inception-ResNet-v2?使用了inception v4?的?stem?部分,因此后續(xù)的通道數(shù)量與Inception-ResNet-v1?不同。

    如果濾波器數(shù)量超過(guò)1000,則殘差網(wǎng)絡(luò)開始出現(xiàn)不穩(wěn)定,同時(shí)網(wǎng)絡(luò)會(huì)在訓(xùn)練過(guò)程早期出現(xiàn)“死亡”:經(jīng)過(guò)成千上萬(wàn)次迭代之后,在平均池化之前的層開始只生成 0 。

    解決方案:在殘差模塊添加到activation 激活層之前,對(duì)其進(jìn)行縮放能夠穩(wěn)定訓(xùn)練。降低學(xué)習(xí)率或者增加額外的BN都無(wú)法避免這種狀況。

    這就是Inception ResNet 中的 Inception-A,Inception-B,Inception-C 為何如此設(shè)計(jì)的原因。

    • 將Inception-A,Inception-B,Inception-C 放置在兩個(gè)Relu activation 之間。

    • 通過(guò)線性的1x1 Conv(不帶激活函數(shù))來(lái)執(zhí)行對(duì)殘差的線性縮放。

    4.5 Xception

  • 一個(gè)常規(guī)的卷積核嘗試在三維空間中使用濾波器抽取特征,包括:兩個(gè)空間維度(寬度和高度)、一個(gè)通道維度。因此單個(gè)卷積核的任務(wù)是:同時(shí)映射跨通道的相關(guān)性和空間相關(guān)性。

    Inception 將這個(gè)過(guò)程明確的分解為一系列獨(dú)立的相關(guān)性的映射:要么考慮跨通道相關(guān)性,要么考慮空間相關(guān)性。Inception 的做法是:

    一個(gè)典型的Inception 模塊(Inception V3 )如下

  • 可以簡(jiǎn)化為:

    • 首先通過(guò)一組1x1 卷積來(lái)查看跨通道的相關(guān)性,將輸入數(shù)據(jù)映射到比原始輸入空間小的三個(gè)或者四個(gè)獨(dú)立空間。

    • 然后通過(guò)常規(guī)的3x3 或者 5x5 卷積,將所有的相關(guān)性(包含了跨通道相關(guān)性和空間相關(guān)性)映射到這些較小的三維空間中。

    Xception 將這一思想發(fā)揮到極致:首先使用1x1 卷積來(lái)映射跨通道相關(guān)性,然后分別映射每個(gè)輸出通道的空間相關(guān)性,從而將跨通道相關(guān)性和空間相關(guān)性解耦。因此該網(wǎng)絡(luò)被稱作Xception:Extreme Inception ,其中的Inception 塊被稱作 Xception 塊。

    Xception 塊類似于深度可分離卷積,但是它與深度可分離卷積之間有兩個(gè)細(xì)微的差異:

    其中第二個(gè)差異更為重要。

    • 操作順序不同:

    • 深度可分離卷積通常首先執(zhí)行channel-wise 空間卷積,然后再執(zhí)行1x1 卷積。

    • Xception 塊首先執(zhí)行1x1 卷積,然后再進(jìn)行channel-wise 空間卷積。

    • 第一次卷積操作之后是否存在非線性:

    • 深度可分離卷積只有第二個(gè)卷積(1x1 )使用了ReLU 非線性激活函數(shù),channel-wise 空間卷積不使用非線性激活函數(shù)。

    • Xception 塊的兩個(gè)卷積(1x1 和 3x3 )都使用了ReLU 非線性激活函數(shù)。

    對(duì)Xception 進(jìn)行以下的修改,都可以加快網(wǎng)絡(luò)收斂速度,并獲取更高的準(zhǔn)確率:

    • 引入類似ResNet 的殘差連接機(jī)制。

    • 在1x1 卷積和3x3 卷積之間不加入任何非線性。

    Xception 的參數(shù)數(shù)量與Inception V3 相同,但是性能表現(xiàn)顯著優(yōu)于Inception V3 。這表明Xception 更加高效的利用了模型參數(shù)。

    模型top-1 accuracytop-5 accuracy
    VGG-1671.5%90.1%
    ResNet-15277.0%93.3%
    Inception V378.2%94.1%
    Xception79.0%94.5%
    • 根據(jù)論文Xception: Deep Learning with Depthwise Separable Convolutions,Inception V3 參數(shù)數(shù)量為 23626728,Xception 參數(shù)數(shù)量為 22855952 。

    • 在ImageNet 上的benchmark 為(單個(gè)模型,單次crop ):

    五、ResNet

  • ResNet 提出了一種殘差學(xué)習(xí)框架來(lái)解決網(wǎng)絡(luò)退化問(wèn)題,從而訓(xùn)練更深的網(wǎng)絡(luò)。這種框架可以結(jié)合已有的各種網(wǎng)絡(luò)結(jié)構(gòu),充分發(fā)揮二者的優(yōu)勢(shì)。

  • ResNet以三種方式挑戰(zhàn)了傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)架構(gòu):

    • ResNet 通過(guò)引入跳躍連接來(lái)繞過(guò)殘差層,這允許數(shù)據(jù)直接流向任何后續(xù)層。

      這與傳統(tǒng)的、順序的pipeline 形成鮮明對(duì)比:傳統(tǒng)的架構(gòu)中,網(wǎng)絡(luò)依次處理低級(jí)feature 到高級(jí)feature 。

    • ResNet 的層數(shù)非常深,高達(dá)1202層。而ALexNet 這樣的架構(gòu),網(wǎng)絡(luò)層數(shù)要小兩個(gè)量級(jí)。

    • 通過(guò)實(shí)驗(yàn)發(fā)現(xiàn),訓(xùn)練好的 ResNet 中去掉單個(gè)層并不會(huì)影響其預(yù)測(cè)性能。而訓(xùn)練好的AlexNet 等網(wǎng)絡(luò)中,移除層會(huì)導(dǎo)致預(yù)測(cè)性能損失。

    在ImageNet分類數(shù)據(jù)集中,擁有152層的殘差網(wǎng)絡(luò),以3.75% top-5 的錯(cuò)誤率獲得了ILSVRC 2015 分類比賽的冠軍。

    很多證據(jù)表明:殘差學(xué)習(xí)是通用的,不僅可以應(yīng)用于視覺問(wèn)題,也可應(yīng)用于非視覺問(wèn)題。

    5.1 網(wǎng)絡(luò)退化問(wèn)題

  • 學(xué)習(xí)更深的網(wǎng)絡(luò)的一個(gè)障礙是梯度消失/爆炸,該問(wèn)題可以通過(guò)Batch Normalization 在很大程度上解決。

  • ResNet 論文作者發(fā)現(xiàn):隨著網(wǎng)絡(luò)的深度的增加,準(zhǔn)確率達(dá)到飽和之后迅速下降,而這種下降不是由過(guò)擬合引起的。這稱作網(wǎng)絡(luò)退化問(wèn)題。

    如果更深的網(wǎng)絡(luò)訓(xùn)練誤差更大,則說(shuō)明是由于優(yōu)化算法引起的:越深的網(wǎng)絡(luò),求解優(yōu)化問(wèn)題越難。如下所示:更深的網(wǎng)絡(luò)導(dǎo)致更高的訓(xùn)練誤差和測(cè)試誤差。

  • 理論上講,較深的模型不應(yīng)該比和它對(duì)應(yīng)的、較淺的模型更差。因?yàn)檩^深的模型是較淺的模型的超空間。較深的模型可以這樣得到:先構(gòu)建較淺的模型,然后添加很多恒等映射的網(wǎng)絡(luò)層。

    實(shí)際上我們的較深的模型后面添加的不是恒等映射,而是一些非線性層。因此,退化問(wèn)題表明:通過(guò)多個(gè)非線性層來(lái)近似橫等映射可能是困難的。

  • 解決網(wǎng)絡(luò)退化問(wèn)題的方案:學(xué)習(xí)殘差。

  • 5.2 殘差塊

  • 假設(shè)需要學(xué)習(xí)的是映射 ,殘差塊使用堆疊的非線性層擬合殘差: 。

    其中:

    • 和 是塊的輸入和輸出向量。

    • 是要學(xué)習(xí)的殘差映射。因?yàn)? ,因此稱 F 為殘差。

    • + :通過(guò)快捷連接逐個(gè)元素相加來(lái)執(zhí)行。快捷連接 指的是那些跳過(guò)一層或者更多層的連接。

    • 快捷連接簡(jiǎn)單的執(zhí)行恒等映射,并將其輸出添加到堆疊層的輸出。

    • 快捷連接既不增加額外的參數(shù),也不增加計(jì)算復(fù)雜度。

    • 相加之后通過(guò)非線性激活函數(shù),這可以視作對(duì)整個(gè)殘差塊添加非線性,即 。

    前面給出的殘差塊隱含了一個(gè)假設(shè): 和 的維度相等。如果它們的維度不等,則需要在快捷連接中對(duì) 執(zhí)行線性投影來(lái)匹配維度: 。

    事實(shí)上當(dāng)它們維度相等時(shí),也可以執(zhí)行線性變換。但是實(shí)踐表明:使用恒等映射足以解決退化問(wèn)題,而使用線性投影會(huì)增加參數(shù)和計(jì)算復(fù)雜度。因此 僅在匹配維度時(shí)使用。

    殘差函數(shù) F 的形式是可變的。

    如果F 只有一層,則殘差塊退化線性層: 。此時(shí)對(duì)網(wǎng)絡(luò)并沒有什么提升。

    此時(shí) x 也是一個(gè)feature map,而不再是一個(gè)向量。

    • 連接形式可變:不僅可用于全連接層,可也用于卷積層。此時(shí) F 代表多個(gè)卷積層的堆疊,而最終的逐元素加法+ 在兩個(gè)feature map 上逐通道進(jìn)行。

    • 層數(shù)可變:論文中的實(shí)驗(yàn)包含有兩層堆疊、三層堆疊,實(shí)際任務(wù)中也可以包含更多層的堆疊。

    殘差學(xué)習(xí)成功的原因:學(xué)習(xí)殘差 比學(xué)習(xí)原始映射 要更容易。

    當(dāng)原始映射 H 就是一個(gè)恒等映射時(shí),F 就是一個(gè)零映射。此時(shí)求解器只需要簡(jiǎn)單的將堆疊的非線性連接的權(quán)重推向零即可。

    實(shí)際任務(wù)中原始映射 H 可能不是一個(gè)恒等映射:

    • 如果 H 更偏向于恒等映射(而不是更偏向于非恒等映射),則F 就是關(guān)于恒等映射的抖動(dòng),會(huì)更容易學(xué)習(xí)。

    • 如果原始映射 H 更偏向于零映射,那么學(xué)習(xí) H 本身要更容易。但是在實(shí)際應(yīng)用中,零映射非常少見,因?yàn)樗鼤?huì)導(dǎo)致輸出全為0。

    • 如果原始映射 H 是一個(gè)非恒等映射,則可以考慮對(duì)殘差模塊使用縮放因子。如Inception-Resnet 中:在殘差模塊與快捷連接疊加之前,對(duì)殘差進(jìn)行縮放。注意:ResNet?作者在隨后的論文中指出:不應(yīng)該對(duì)恒等映射進(jìn)行縮放。因此Inception-Resnet對(duì)殘差模塊進(jìn)行縮放。

    • 可以通過(guò)觀察殘差 F 的輸出來(lái)判斷:如果 F 的輸出均為0附近的、較小的數(shù),則說(shuō)明原始映射 H 更偏向于恒等映射;否則,說(shuō)明原始映射 H 更偏向于非橫等映射。

    5.3 ResNet 分析

  • Veit et al. 認(rèn)為ResNet 工作較好的原因是:一個(gè)ResNet 網(wǎng)絡(luò)可以看做是一組較淺的網(wǎng)絡(luò)的集成模型。

    但是ResNet 的作者認(rèn)為這個(gè)解釋是不正確的。因?yàn)榧赡P鸵竺總€(gè)子模型是獨(dú)立訓(xùn)練的,而這組較淺的網(wǎng)絡(luò)是共同訓(xùn)練的。

  • 論文《Residual Networks Bahave Like Ensemble of Relatively Shallow Networks》 對(duì)ResNet 進(jìn)行了深入的分析。

    • 通過(guò)分解視圖表明:ResNet 可以被視作許多路徑的集合。

    • 通過(guò)研究ResNet 的梯度流表明:網(wǎng)絡(luò)訓(xùn)練期間只有短路徑才會(huì)產(chǎn)生梯度流,深的路徑不是必須的。

    • 通過(guò)破壞性實(shí)驗(yàn),表明:

    • 即使這些路徑是共同訓(xùn)練的,它們也不是相互依賴的。

    • 這些路徑的行為類似集成模型,其預(yù)測(cè)準(zhǔn)確率平滑地與有效路徑的數(shù)量有關(guān)。

    5.3.1 分解視圖

  • 考慮從輸出 到 的三個(gè)ResNet 塊構(gòu)建的網(wǎng)絡(luò)。根據(jù):

    下圖中:左圖為原始形式,右圖為分解視圖。分解視圖中展示了數(shù)據(jù)從輸入到輸出的多條路徑。

    對(duì)于嚴(yán)格順序的網(wǎng)絡(luò)(如VGG?),這些網(wǎng)絡(luò)中的輸入總是在單個(gè)路徑中從第一層直接流到最后一層。如下圖所示。

  • 分解視圖中, 每條路徑可以通過(guò)二進(jìn)制編碼向量 來(lái)索引:如果流過(guò)殘差塊 ,則 ;如果跳過(guò)殘差塊 ,則 。

    因此ResNet 從輸入到輸出具有 條路徑,第 i 個(gè)殘差塊 的輸入?yún)R聚了之前的 個(gè)殘差塊的 條路徑。

  • 普通的前饋神經(jīng)網(wǎng)絡(luò)也可以在單個(gè)神經(jīng)元(而不是網(wǎng)絡(luò)層)這一粒度上運(yùn)用分解視圖,這也可以將網(wǎng)絡(luò)分解為不同路徑的集合。

    它與ResNet 分解的區(qū)別是:

    • 普通前饋神經(jīng)網(wǎng)絡(luò)的神經(jīng)元分解視圖中,所有路徑都具有相同的長(zhǎng)度。

    • ResNet 網(wǎng)絡(luò)的殘差塊分解視圖中,所有路徑具有不同的路徑長(zhǎng)度。

    5.3.2 路徑長(zhǎng)度分析

  • ResNet 中,從輸入到輸出存在許多條不同長(zhǎng)度的路徑。這些路徑長(zhǎng)度的分布服從二項(xiàng)分布。對(duì)于 n 層深的ResNet,大多數(shù)路徑的深度為 。

    下圖為一個(gè) 54 個(gè)塊的ResNet 網(wǎng)絡(luò)的路徑長(zhǎng)度的分布 ,其中95% 的路徑只包含 19~35個(gè)塊。

  • 5.3.3 路徑梯度分析

  • ResNet 中,路徑的梯度幅度隨著它在反向傳播中經(jīng)過(guò)的殘差塊的數(shù)量呈指數(shù)減小。因此,訓(xùn)練期間大多數(shù)梯度來(lái)源于更短的路徑。

  • 對(duì)于一個(gè)包含 54 個(gè)殘差塊的ResNet 網(wǎng)絡(luò):

    • 下圖表示:單條長(zhǎng)度為 k 的路徑在反向傳播到 input 處的梯度的幅度的均值,它刻畫了長(zhǎng)度為 k 的單條路徑的對(duì)于更新的影響。

      因?yàn)殚L(zhǎng)度為 k 的路徑有多條,因此取其平均。

    • 下圖表示:長(zhǎng)度為 k 的所有路徑在反向傳播到 input 處的梯度的幅度的和。它刻畫了長(zhǎng)度為 k 的所有路徑對(duì)于更新的影響。

      它不僅取決于長(zhǎng)度為 k 的單條路徑的對(duì)于更新的影響,還取決于長(zhǎng)度為 k 的單條路徑的數(shù)量。

    有效路徑:反向傳播到 input 處的梯度幅度相對(duì)較大的路徑。

    ResNet 中有效路徑相對(duì)較淺,而且有效路徑數(shù)量占比較少。在一個(gè)54 個(gè)塊的ResNet 網(wǎng)絡(luò)中:

    • 幾乎所有的梯度更新都來(lái)自于長(zhǎng)度為 5~17 的路徑。

    • 長(zhǎng)度為 5~17 的路徑占網(wǎng)絡(luò)所有路徑的 0.45% 。

    論文從頭開始重新訓(xùn)練ResNet,同時(shí)在訓(xùn)練期間只保留有效路徑,確保不使用長(zhǎng)路徑。實(shí)驗(yàn)結(jié)果表明:相比于完整模型的 6.10% 的錯(cuò)誤率,這里實(shí)現(xiàn)了 5.96% 的錯(cuò)誤率。二者沒有明顯的統(tǒng)計(jì)學(xué)上的差異,這表明確實(shí)只需要有效路徑。

    因此,ResNet 不是讓梯度流流通整個(gè)網(wǎng)絡(luò)深度來(lái)解決梯度消失問(wèn)題,而是引入能夠在非常深的網(wǎng)絡(luò)中傳輸梯度的短路徑來(lái)避免梯度消失問(wèn)題。

    和ResNet 原理類似,隨機(jī)深度網(wǎng)絡(luò)起作用有兩個(gè)原因:

    • 訓(xùn)練期間,網(wǎng)絡(luò)看到的路徑分布會(huì)發(fā)生變化,主要是變得更短。

    • 訓(xùn)練期間,每個(gè)mini-batch 選擇不同的短路徑的子集,這會(huì)鼓勵(lì)各路徑獨(dú)立地產(chǎn)生良好的結(jié)果。

    5.3.4 路徑破壞性分析

  • 在ResNet 網(wǎng)絡(luò)訓(xùn)練完成之后,如果隨機(jī)丟棄單個(gè)殘差塊,則測(cè)試誤差基本不變。因?yàn)橐瞥粋€(gè)殘差塊時(shí),ResNet 中路徑的數(shù)量從 減少到 ,留下了一半的路徑。

    在VGG 網(wǎng)絡(luò)訓(xùn)練完成之后,如果隨機(jī)丟棄單個(gè)塊,則測(cè)試誤差急劇上升,預(yù)測(cè)結(jié)果就跟隨機(jī)猜測(cè)差不多。因?yàn)橐瞥粋€(gè)塊時(shí),VGG 中唯一可行的路徑被破壞。

  • 刪除ResNet 殘差塊通常會(huì)刪除長(zhǎng)路徑。

    當(dāng)刪除了 k 個(gè)殘差塊時(shí),長(zhǎng)度為 x 的路徑的剩余比例由下式給定: 。

    下圖中:

    • 刪除10個(gè)殘差模塊,一部分有效路徑(路徑長(zhǎng)度為5~17)仍然被保留,模型測(cè)試性能會(huì)部分下降。

    • 刪除20個(gè)殘差模塊,絕大部分有效路徑(路徑長(zhǎng)度為5~17)被刪除,模型測(cè)試性能會(huì)大幅度下降。

    ResNet 網(wǎng)絡(luò)中,路徑的集合表現(xiàn)出一種類似集成模型的效果。一個(gè)關(guān)鍵證據(jù)是:它們的整體表現(xiàn)平穩(wěn)地取決于路徑的數(shù)量。隨著網(wǎng)絡(luò)刪除越來(lái)越多的殘差塊,網(wǎng)絡(luò)路徑的數(shù)量降低,測(cè)試誤差平滑地增加(而不是突變)。

    如果在測(cè)試時(shí)重新排序網(wǎng)絡(luò)的殘差塊,這意味著交換了低層映射和高層映射。采用Kendall Tau rank 來(lái)衡量網(wǎng)絡(luò)結(jié)構(gòu)被破壞的程度,結(jié)果表明:隨著 Kendall Tau rank 的增加,預(yù)測(cè)錯(cuò)誤率也在增加。

    5.4 網(wǎng)絡(luò)性能

  • plain 網(wǎng)絡(luò):一些簡(jiǎn)單網(wǎng)絡(luò)結(jié)構(gòu)的疊加,如下圖所示。圖中給出了四種plain 網(wǎng)絡(luò),它們的區(qū)別主要是網(wǎng)絡(luò)深度不同。其中,輸入圖片尺寸 224x224 。

    ResNet 簡(jiǎn)單的在plain 網(wǎng)絡(luò)上添加快捷連接來(lái)實(shí)現(xiàn)。

    FLOPs:floating point operations 的縮寫,意思是浮點(diǎn)運(yùn)算量,用于衡量算法/模型的復(fù)雜度。

    FLOPS:floating point per second的縮寫,意思是每秒浮點(diǎn)運(yùn)算次數(shù),用于衡量計(jì)算速度。

  • 相對(duì)于輸入的feature map,殘差塊的輸出feature map 尺寸可能會(huì)發(fā)生變化:

    有兩種擴(kuò)充方式:

    • 直接通過(guò) 0 來(lái)填充需要擴(kuò)充的維度,在圖中以實(shí)線標(biāo)識(shí)。

    • 通過(guò)1x1 卷積來(lái)擴(kuò)充維度,在圖中以虛線標(biāo)識(shí)。

    • 輸出 feature map 的尺寸減半。此時(shí)需要對(duì)快捷連接執(zhí)行步長(zhǎng)為 2 的池化/卷積:如果快捷連接已經(jīng)采用 1x1 卷積,則該卷積步長(zhǎng)為2 ;否則采用步長(zhǎng)為 2 的最大池化 。

    • 輸出 feature map 的通道數(shù)增加,此時(shí)需要擴(kuò)充快捷連接的輸出feature map 。否則快捷連接的輸出 feature map 無(wú)法和殘差塊的feature map 累加。

    計(jì)算復(fù)雜度:


    VGG-1934層 plain 網(wǎng)絡(luò)Resnet-34
    計(jì)算復(fù)雜度(FLOPs)19.6 billion3.5 billion3.6 billion

    模型預(yù)測(cè)能力:在ImageNet 驗(yàn)證集上執(zhí)行10-crop 測(cè)試的結(jié)果。

    模型top-1 誤差率top-5 誤差率
    VGG-1628.07%9.33%
    GoogleNet-9.15%
    PReLU-net24.27%7.38%
    plain-3428.54%10.02%
    ResNet-34 A25.03%7.76%
    ResNet-34 B24.52%7.46%
    ResNet-34 C24.19%7.40%
    ResNet-5022.85%6.71%
    ResNet-10121.75%6.05%
    ResNet-15221.43%5.71%
    • A 類模型:快捷連接中,所有需要擴(kuò)充的維度的填充 0 。

    • B 類模型:快捷連接中,所有需要擴(kuò)充的維度通過(guò)1x1 卷積來(lái)擴(kuò)充。

    • C 類模型:所有快捷連接都通過(guò)1x1 卷積來(lái)執(zhí)行線性變換。

      可以看到C 優(yōu)于B,B 優(yōu)于A。但是 C 引入更多的參數(shù),相對(duì)于這種微弱的提升,性價(jià)比較低。所以后續(xù)的ResNet 均采用 B 類模型。

    本文福利

    可以在?公眾號(hào)后臺(tái)?回復(fù)關(guān)鍵詞:“?DS?獲取大量由我平臺(tái)編輯精心整理的學(xué)習(xí)資料,如果覺得有用,?請(qǐng)勿吝嗇你的留言和贊哦!

    ——?完?——

    文章作者:華校專?

    責(zé)任編輯:周巖?Logic?破繭

    審核編輯:阿春

    微信編輯:破繭

    本文由『運(yùn)籌OR帷幄』原創(chuàng)發(fā)布

    如需轉(zhuǎn)載請(qǐng)?jiān)诠娞?hào)后臺(tái)獲取轉(zhuǎn)載須知

    原文鏈接:http://www.huaxiaozhuan.com/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/chapters/5_CNN_1_classfication.html

    往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載(圖文+視頻)機(jī)器學(xué)習(xí)入門系列下載中國(guó)大學(xué)慕課《機(jī)器學(xué)習(xí)》(黃海廣主講)機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印《統(tǒng)計(jì)學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯 AI基礎(chǔ)下載機(jī)器學(xué)習(xí)交流qq群955171419,加入微信群請(qǐng)掃碼:

    總結(jié)

    以上是生活随笔為你收集整理的【深度学习】基础知识--CNN:图像分类(上)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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