結構雖簡單,但效能強悍 3個小型卷積神經網路簡介

2021-08-19 23:40:48 字數 2772 閱讀 5605

摘要: 本文介紹了三種小型結構的卷積神經網路,在降低計算複雜度的前提下,其效能也不錯。此外,無需使用高效能計算機就可以進行**,適合初學者**體驗。

mobilenet使用深度可分離卷積(depthwise separable convolutions),這種卷積塊結構首先由xception引入。深度可分離卷積由兩部分組成,分別為深度卷積(depthwise convolution)和逐點卷積(pointwise convolution)。

假設二維特徵圖(feature map)進行標準卷積操作,輸入特徵圖經過卷積操作後進行輸出,如圖所示,其計算複雜度為d2f

∗m∗n

∗d2k

df2∗m∗n∗dk2

。其中輸入特徵圖的維度為dfdf

,mm和nn

分別表示輸入通道數以及輸出通道數,dkdk

是卷積核大小。

深度卷積在每個輸入通道上分別對映乙個卷積。因此,其輸出通道數與輸入通道數相同,其計算成本是 df

最後的操作是逐點卷積。它是1×1核心大小的卷積,它將由深度卷積建立的特徵簡單地結合起來,其計算成本是 m∗

深度可分離卷積的計算代價是由深度卷積和逐點卷積兩部分代價組成。與一般的卷積操作相比,深度可分離卷積降低了原始計算複雜度的 (1

/n+1

/d2k

)(1/n+1/dk2)

。假設卷積核大小為3x3,則**運算量降低了8倍。

mobilenet同時也提供了兩個引數以允許進一步減少運算量。其中乙個引數為

**乘子(width multiplier)其取值範圍為0~1,用來減少網路的通道數,每一層減少 al

pha∗

nalpha∗n

個通道,該引數能被用來權衡模型效能與**等待時間。另外乙個引數為

解析度乘子(resolution multiplier),該引數將縮放輸入影象的尺寸,尺寸範圍為224~128之間。由於mobilenet使用全域性平均池化代替全連線,你可以使用224x22$影象訓練該網路,並將訓練好的的網路應用於128x128大小的影象上!

shufflenet原創了三種混洗單元(shuffle unit),如下圖所示每個單元都是由逐群卷積(pointwise group convolution)和通道混洗(channel shuffle)組成。

乙個組卷積包含幾個卷積,每一組獲取部分輸入通道。下圖是乙個組卷積過程,有3組,每一組有3個輸入通道。

這種結構極大的降低了計算代價。假設,如果有4個輸入通道和8個輸出通道,從中選擇2組,每組有2個輸入通道和4個輸出通道。當只有一組時,其計算代價為 d2

f∗d2

k∗4∗

8df2∗dk2∗4∗8

;當有2組時,其計算代價為 d2

f∗d2

k∗2∗

4df2∗dk2∗2∗4

或者 d2f

∗d2k

∗4∗4

df2∗dk2∗4∗4

。至少是減少了2倍的計算代價。在作者的文章中,當組數為8時取得了最好的結果,因此降低計算量是非常重要的。

effnet為空間可分離卷積(spatial separable convolutions),這與mobilenet的深度可分離卷積非常相似。

如圖所示,可分離深度卷積以藍色矩形塊表示,它是由乙個行核心(1x3)、可分類池化以及列核心(3x1)的深度卷積組成。

正常深度為3x3的卷積核的計算代價為 32

∗d2f

∗m32∗df2∗m

。第乙個深度為1x3卷積核的計算代價為 3∗

d2f∗

m3∗df2∗m

,可分離池化操作將特徵圖高度減半,具有邊際成本。第二個深度為3x1的卷積核的計算代價為 3∗

d2f/

2∗m3∗df2/2∗m

。這樣一來,總的計算代價為

1.5∗(

3∗d2

f∗m)

1.5∗(3∗df2∗m)

,是原先的一半!

此外,effnet相較於mobilenet和shufflenet的乙個優化操作是在開始時沒有「標準卷積」。

mobilenet和shufflenet都避免更換第一層,因為它們覺得該層的計算量已經很小了。雖然我尊重這種說法,但我認為每乙個優化都是重要的。在優化了網路的其它層之後,第一層適當地變大。實驗結果表明,用effnet塊替換第一層後,降低了每個層計算量的30%。

mobilenet、shufflenet以及effnet這三種卷積神經網路結構都是通過優化計算量構想出來的。每個都用自己的版本取代了經典卷積結構。

實驗 3 簡單的分支與迴圈結構

目的 熟悉c語言基本分支與迴圈結構,了解問題的分析和程式設計解決思路 1.編寫求圓面積的程式,要求當輸入的半徑r 0時,提示輸入錯誤,要求r為浮點型,r的數值是動態的由鍵盤輸入 題目分割線 2.利用迴圈計算n個圓柱體體積。要求 1.當輸入的半徑r或h 0時,提示輸入錯誤,重新輸入 2.r和h為整形 ...

資料結構3 雙鏈表的簡單實現

package com.zejian.structures.linkedlist.mylinked 雙鏈表的工具類 public class dnode 建立乙個前指標 後指標為空的值 param data public dnode t data 建立乙個空值 public dnode overri...

資料結構與演算法 3 簡單排序

氣泡排序的api設計 class bubble 兩個數之間換位置 private static void exch comparable a,int i,int j 適用於輸入規模比較少的時候 選擇排序的api設計 public class testselection selection.sort ...