官术网_书友最值得收藏!

1.3 網絡的基本塊

在對目標領域的網絡結構進行總結之后,我們需要對網絡進行抽象,得到多個更小的基本塊。圖像領域的神經網絡一般包括如表1-1所示的幾種基本塊。

表1-1 網絡基本塊

下面簡要介紹其中幾種基本塊。

1.殘差塊

如圖1-4所示,殘差塊(residual block)是殘差網絡的基本組成單元,是為了緩解隨著網絡層數增加導致的梯度消失問題而引入的。

在實際網絡中,為了解決特定的問題,殘差塊出現了很多變種。如圖1-5所示,在殘差結構中使用1×1的卷積進行降維和升維。

圖1-4 殘差塊

圖1-5 在殘差結構中使用1×1的卷積進行降維和升維

當殘差結構與主干之間的維度不一致時,在殘差結構中使用1×1的卷積進行維度調整,如圖1-6所示。

圖1-6 在殘差結構中使用1×1的卷積進行維度調整

在基本殘差塊的基礎上,還可以調整直連的位置,如圖1-7所示。

圖1-7 調整直連的位置

對于殘差分支,可以采用不同的操作,以滿足特定目的。如圖1-8所示,分別對應的操作是固定比例(constant scale)、專用通道(exclusive gating)、直連通道(shortcut-only gating)、丟棄直連(dropout shortcut)。

圖1-8 殘差塊的其他變形

圖1-8 殘差塊的其他變形(續)

2.初端塊

初端塊(inception block)是GoogLeNet的基本組成單元。GoogLeNet已經演進了好幾個版本,每個版本的初端塊結構不盡相同。第一版的初端塊由1×1、3×3、5×5的卷積層和3×3的池化層組成,目的是從一個相同的層中提取不同尺寸的特征,增強單層特征的提取能力,結構如圖1-9所示。

圖1-9 第一版初端塊的結構

在基本初端塊的基礎上,可以增加額外的層來達到降低計算量的目的,如圖1-10所示。

圖1-10 給初端塊增加額外的層

為了進一步減少計算量和參數量,在第三版初端塊GoogLeNet中,對卷積核的尺寸進行了調整,如圖1-11、圖1-12所示。

GoogleNet在后續版本中調整了初端塊的具體實現細節,但是初端塊的結構沒有很大變化。

圖1-11 第三版初端塊的更多變形

圖1-12 第三版初端塊結構

3.殘初塊

殘初塊(inception_residual block)是將殘差塊和初端塊結合在一起使用,以獲得雜交優勢。圖1-13所示是在inception_resnet(在初端塊中引入ResNet的殘差結構的網絡結構)中使用的殘初塊。

圖1-13 在inception_resnet中使用的殘初塊

4.跳塊

跳塊(skip block)是指在網絡中跳著對不同的層進行卷積運算,通過上池化和下池化操作得到相同尺寸的特征圖并拼接在一起。圖1-14是一個采用跳塊的網絡。

5.組卷積塊

組卷積塊(depthwise separable block)是為了降低參數量和運算量,將輸入特征圖分成多個組,卷積運算限制在對應的組內進行。在AlexNet中,特征圖被分成了兩組,而MobileNet將分組做到了極致,每組僅包含一個通道的特征圖。組卷積塊可以顯著降低參數量和運算量,使神經網絡部署在嵌入式設備上成為可能。圖1-15是MobileNet中使用的組卷積塊。

圖1-14 跳塊示意圖

圖1-15 MobileNet中使用的組卷積塊

6.融合塊

融合塊(feature cascade chaining)常用于網絡中多個子網絡數據的融合,融合一般通過對應元素的乘法、加法運算來實現。圖1-16是Multipath中使用的融合塊。

圖1-16 Multipath中使用的融合塊

7.多并行塊

多并行塊是某些網絡為了提高檢測精度,引入少數服從多數的投票機制,即最后由多個全連接層組成。圖1-17是Parallel FC中使用的多并行塊(multistep net path feature maxout block)。

圖1-17 Parallel FC中使用的多并行塊

基于類似的思路,某些網絡將少數服從多數的機制發揚光大,引入多個卷積層,甚至引入多個網絡。圖1-18是MultiStep Net中使用的多并行塊。

圖1-18 MultiStep Net中使用的多并行塊

除了以上介紹的基本塊,還有很多奇異的網絡中使用的奇異的結構。算法研究者為了提高檢測精度,在深度學習拓荒時代進行硬件架構的設計時,要求架構師不僅把已有的算法理解透徹,還要判斷未來的趨勢。再加上芯片項目周期較長,如何保證芯片上市時仍然具有競爭力,對任何架構師都是不小的挑戰。

主站蜘蛛池模板: 绿春县| 玉龙| 峨眉山市| 三原县| 呼伦贝尔市| 隆林| 晋州市| 根河市| 五台县| 怀来县| 崇明县| 巫溪县| 巩义市| 霞浦县| 铜陵市| 昭平县| 门头沟区| 鄂托克前旗| 阿拉尔市| 霸州市| 通州区| 千阳县| 信丰县| 开阳县| 丽水市| 南郑县| 兴宁市| 仙居县| 察隅县| 宁阳县| 正蓝旗| 洪雅县| 菏泽市| 安宁市| 通化县| 射洪县| 介休市| 垫江县| 广灵县| 西充县| 临澧县|