自2012年AlexNet在CNN的發展以來,科學家們發明了各種CNN模型,一種更深,一種更準確,一種更輕。我將簡要回顧一下近年來的一些革命性工作,並從這些創新工作中探討CNN未來變革的方向。
1.卷積只能在同一組中進行嗎?
組卷積分組卷積首次出現在AlexNet中。由於當時硬體資源有限,訓練AlexNet中的卷積操作無法在同一GPU中進行處理,因此作者將功能對映分配給多個GPU進行單獨處理,最後融合多個GPU的結果。
2.卷積核心越大越好? - 3 x 3卷積核心
AlexNet使用一些非常大的卷積核心,例如11 * 11和5 * 5卷積核心。以前,人們認為卷積核越大,感受野越大,他們看到的圖片資訊越多,他們得到的特徵就越好。然而,大的卷積核將導致計算複雜度的大幅增加,這不利於模型深度的增加和計算效能的降低。因此,在VGG和Inception網路中,兩個3 * 3卷積核心的組合優於一個5 * 5卷積核心。同時,引數(3 * 3 * 2 + 1 VS 5 * 5 * 1 + 1)減小,因此3 * 3卷積核被廣泛用於各種模型中。
3.每層卷積只能使用一個大小的卷積核心嗎? - 初始結構
傳統的級聯網路基本上是一堆卷積層,每層只使用一個大小的卷積核心,例如使用大量3 * 3卷積層的VGG結構。事實上,同一層特徵對映可以使用不同大小的幾個卷積核心來獲得不同的特徵尺度,然後結合這些特徵來獲得比使用單個卷積核心更好的特徵。Google的Google Net或Inception系列網路使用多個卷積核心的結構。:
Inception結構的初始版本
如上圖所示,輸入特徵圖由1 x 1,3 x 3和5 x 5的卷積核同時處理,並且所獲得的特徵被組合以獲得更好的特徵。然而,在這種結構中存在嚴重的問題:引數的數量遠多於單個卷積核心的數量。如此大量的計算將使模型效率低下。這導致了一個新的結構:
4.我們如何減少卷積層的引數? - 瓶頸
發明Google Net的團隊發現,只引入多種尺寸的卷積核心會帶來許多額外的引數,這些引數受到Network In Network中的1 * 1卷積核心的啟發。為了解決這個問題,他們在Inception結構中添加了一些1 * 1卷積核心,如圖所示:
具有1 * 1卷積核的初始結構
根據上圖,假設輸入特徵對映的維數為256,輸出維數為256,我們進行比較計算。有兩個操作:
256維的輸入直接透過3 x 3 x 256的卷積層,並輸出256維的特徵圖。引數是256 x 3 x 3 x 256 = 589,824。
256維的輸入透過1 * 1 * 64的卷積層,然後透過3 * 3 * 64的卷積層,最後透過1 * 1 * 256的卷積層。256維的輸出是256 * 1 * 64 + 64 * 3 * 64 + 64 * 1 * 256 = 69,632。將第一次操作的引數減少到九分之一!
1 * 1卷積核心也被認為是一項影響深遠的操作。為了減少大型網路中的引數數量,將來會應用1 * 1卷積核心。
5.網路越深,訓練越難嗎? Resnet殘留網路
傳統的卷積級聯網路將遇到問題。當層數加深時,網路的效能變得越來越差。在很大程度上,因為當層數加深時,梯度消失得越來越嚴重,因此反向傳播很難訓練到淺層網路。為了解決這個問題,何開明發明瞭一種“殘餘網路”,使梯度流更容易進入淺層網路,這種“跳過連線”可以帶來更多的好處。在這裡我們可以參考PPT:非常深的網路。
6.卷積運算必須同時考慮渠道和地區嗎? - DepthWise操作
標準卷積過程可以在上圖中看到。當2 * 2卷積核心被卷積時,相應影象區域中的所有通道被同時考慮。問題是,為什麼我們必須同時考慮影象區域和通道?為什麼我們不能將通道與空間區域分開?Xception網路是在上述問題的基礎上發明的。首先,我們對每個通道進行卷積運算,並且存在與通道一樣多的濾波器。在獲得新的通道特徵對映之後,對這些新的通道特徵對映執行標準的1 * 1跨通道卷積操作。該操作稱為“深度明智卷積”或“DW”。
因此,與標準卷積運算相比,深度運算減少了許多引數。同時,論文指出該模型具有更好的分類效果。
7.分組卷積可以隨機分組通道嗎? - ShuffleNet
在AlexNet Group Convolution中,特徵通道被均勻地分成不同的組,然後透過兩個完整的連線層融合特徵。這樣,不同組之間的特徵只能在最後時刻融合,這對於模型的推廣是非常不利的。為了解決這個問題,ShuffleNet在該組轉換層的每個堆疊之前執行一次通道混洗,並且透過其將shuffle傳遞的通道分配給不同的組。在組conv之後,通道再次進行shuffle,然後將其分成下一組卷積迴圈。
通道隨機播放後,組轉換輸出功能可以考慮更多通道,輸出功能自然更具代表性。此外,AlexNet的分組卷積實際上是一個標準的卷積運算,而在ShuffleNet中,分組卷積運算是深度卷積。因此,結合頻道改組和深度卷積分組,ShuffleNet可以獲得極少數的引數以及超越行動網路和競爭對手AlexNet的精度。
8.渠道之間的特徵是否相等? - SEnet
無論是在Inception,DenseNet還是ShuffleNet,我們都可以直接組合所有通道的特性,而不管重量如何。為什麼我們認為所有渠道的特徵對模型都有相同的影響?這是一個很好的問題,因此ImageNet 2017冠軍SEnet問世。
在上層輸出一組特徵。這時,有兩條路線。第一個直接透過。第二個首先執行擠壓操作(全域性平均合併),其將每個通道的二維特徵壓縮成一維特徵向量(每個數字代表相應通道的特徵)。然後執行激勵操作以將特徵通道向量輸入到兩個完整連線層和S形模型中以模擬特徵通道之間的相關性。輸出實際上是每個通道的相應權重。這些權重透過Scale乘法通道加權到原始特徵(第一條路徑),這就完成了。特徵通道的重量分配。
9.固定大小的卷積核可以看到更廣泛的區域嗎? - 擴張卷積
標準的3 * 3卷積核心只能用於
上面的圖B可以理解為卷積核心大小仍然是3 * 3,但每個卷積點之間有一個洞,也就是說,在綠色的7 * 7區域,只有9個紅點已被捲曲,並且重量為 其餘的點為0.因此即使卷積核心大小相同,它看到的區域也會變大。詳細解釋顯示答案:如何理解擴張卷積?
10.卷積核心的形狀是否必須是矩形?可變形卷積可變形卷積核心
傳統的卷積核通常是矩形或正方形,但MSRA提出了一種相反的直觀觀點,即卷積核的形狀可以改變,變形卷積核只能檢視感興趣的影象區域,因此識別特徵更好。
啟蒙與反思
如今,越來越多的CNN模型逐步從巨型網路發展到輕量級網路,模型的準確性也在不斷提高。現在行業的焦點不是提高準確性(因為它們已經非常高),它們都專注於速度和準確性之間的交易,他們都希望模型快速準確。所以從AlexNet和VGGnet到尺寸較小的Inception和Resnet系列,移植網和ShuffleNet都可以移植到移動終端(體積可以減少到0.5mb!)。我們可以看到這樣的趨勢:
卷積核心:
大卷積核心被小卷積核心取代。
單尺寸卷積核心被多尺寸卷積核心取代。
固定形狀卷積核心傾向於使用可變形卷積核心。
使用瓶頸結構。
卷積頻道:
標準卷積由深度卷積代替。
使用分組卷積;
在資料包卷積之前使用通道混洗。
頻道加權計算。
卷積層連線:
Skp連線用於使模型更深入。
密集連線,使每一層融合另一層的特徵輸出(DenseNet)
啟發
透過類比通道加權操作,卷積層跨層連線是否也可以加權?瓶頸+ Group conv + channel shuffle + depthwise的組合是否會成為未來減少引數的標準配置?
自2012年AlexNet在CNN的發展以來,科學家們發明了各種CNN模型,一種更深,一種更準確,一種更輕。我將簡要回顧一下近年來的一些革命性工作,並從這些創新工作中探討CNN未來變革的方向。
1.卷積只能在同一組中進行嗎?
組卷積分組卷積首次出現在AlexNet中。由於當時硬體資源有限,訓練AlexNet中的卷積操作無法在同一GPU中進行處理,因此作者將功能對映分配給多個GPU進行單獨處理,最後融合多個GPU的結果。
2.卷積核心越大越好? - 3 x 3卷積核心
AlexNet使用一些非常大的卷積核心,例如11 * 11和5 * 5卷積核心。以前,人們認為卷積核越大,感受野越大,他們看到的圖片資訊越多,他們得到的特徵就越好。然而,大的卷積核將導致計算複雜度的大幅增加,這不利於模型深度的增加和計算效能的降低。因此,在VGG和Inception網路中,兩個3 * 3卷積核心的組合優於一個5 * 5卷積核心。同時,引數(3 * 3 * 2 + 1 VS 5 * 5 * 1 + 1)減小,因此3 * 3卷積核被廣泛用於各種模型中。
3.每層卷積只能使用一個大小的卷積核心嗎? - 初始結構
傳統的級聯網路基本上是一堆卷積層,每層只使用一個大小的卷積核心,例如使用大量3 * 3卷積層的VGG結構。事實上,同一層特徵對映可以使用不同大小的幾個卷積核心來獲得不同的特徵尺度,然後結合這些特徵來獲得比使用單個卷積核心更好的特徵。Google的Google Net或Inception系列網路使用多個卷積核心的結構。:
Inception結構的初始版本
如上圖所示,輸入特徵圖由1 x 1,3 x 3和5 x 5的卷積核同時處理,並且所獲得的特徵被組合以獲得更好的特徵。然而,在這種結構中存在嚴重的問題:引數的數量遠多於單個卷積核心的數量。如此大量的計算將使模型效率低下。這導致了一個新的結構:
4.我們如何減少卷積層的引數? - 瓶頸
發明Google Net的團隊發現,只引入多種尺寸的卷積核心會帶來許多額外的引數,這些引數受到Network In Network中的1 * 1卷積核心的啟發。為了解決這個問題,他們在Inception結構中添加了一些1 * 1卷積核心,如圖所示:
具有1 * 1卷積核的初始結構
根據上圖,假設輸入特徵對映的維數為256,輸出維數為256,我們進行比較計算。有兩個操作:
256維的輸入直接透過3 x 3 x 256的卷積層,並輸出256維的特徵圖。引數是256 x 3 x 3 x 256 = 589,824。
256維的輸入透過1 * 1 * 64的卷積層,然後透過3 * 3 * 64的卷積層,最後透過1 * 1 * 256的卷積層。256維的輸出是256 * 1 * 64 + 64 * 3 * 64 + 64 * 1 * 256 = 69,632。將第一次操作的引數減少到九分之一!
1 * 1卷積核心也被認為是一項影響深遠的操作。為了減少大型網路中的引數數量,將來會應用1 * 1卷積核心。
5.網路越深,訓練越難嗎? Resnet殘留網路
傳統的卷積級聯網路將遇到問題。當層數加深時,網路的效能變得越來越差。在很大程度上,因為當層數加深時,梯度消失得越來越嚴重,因此反向傳播很難訓練到淺層網路。為了解決這個問題,何開明發明瞭一種“殘餘網路”,使梯度流更容易進入淺層網路,這種“跳過連線”可以帶來更多的好處。在這裡我們可以參考PPT:非常深的網路。
6.卷積運算必須同時考慮渠道和地區嗎? - DepthWise操作
標準卷積過程可以在上圖中看到。當2 * 2卷積核心被卷積時,相應影象區域中的所有通道被同時考慮。問題是,為什麼我們必須同時考慮影象區域和通道?為什麼我們不能將通道與空間區域分開?Xception網路是在上述問題的基礎上發明的。首先,我們對每個通道進行卷積運算,並且存在與通道一樣多的濾波器。在獲得新的通道特徵對映之後,對這些新的通道特徵對映執行標準的1 * 1跨通道卷積操作。該操作稱為“深度明智卷積”或“DW”。
因此,與標準卷積運算相比,深度運算減少了許多引數。同時,論文指出該模型具有更好的分類效果。
7.分組卷積可以隨機分組通道嗎? - ShuffleNet
在AlexNet Group Convolution中,特徵通道被均勻地分成不同的組,然後透過兩個完整的連線層融合特徵。這樣,不同組之間的特徵只能在最後時刻融合,這對於模型的推廣是非常不利的。為了解決這個問題,ShuffleNet在該組轉換層的每個堆疊之前執行一次通道混洗,並且透過其將shuffle傳遞的通道分配給不同的組。在組conv之後,通道再次進行shuffle,然後將其分成下一組卷積迴圈。
通道隨機播放後,組轉換輸出功能可以考慮更多通道,輸出功能自然更具代表性。此外,AlexNet的分組卷積實際上是一個標準的卷積運算,而在ShuffleNet中,分組卷積運算是深度卷積。因此,結合頻道改組和深度卷積分組,ShuffleNet可以獲得極少數的引數以及超越行動網路和競爭對手AlexNet的精度。
8.渠道之間的特徵是否相等? - SEnet
無論是在Inception,DenseNet還是ShuffleNet,我們都可以直接組合所有通道的特性,而不管重量如何。為什麼我們認為所有渠道的特徵對模型都有相同的影響?這是一個很好的問題,因此ImageNet 2017冠軍SEnet問世。
在上層輸出一組特徵。這時,有兩條路線。第一個直接透過。第二個首先執行擠壓操作(全域性平均合併),其將每個通道的二維特徵壓縮成一維特徵向量(每個數字代表相應通道的特徵)。然後執行激勵操作以將特徵通道向量輸入到兩個完整連線層和S形模型中以模擬特徵通道之間的相關性。輸出實際上是每個通道的相應權重。這些權重透過Scale乘法通道加權到原始特徵(第一條路徑),這就完成了。特徵通道的重量分配。
9.固定大小的卷積核可以看到更廣泛的區域嗎? - 擴張卷積
標準的3 * 3卷積核心只能用於
上面的圖B可以理解為卷積核心大小仍然是3 * 3,但每個卷積點之間有一個洞,也就是說,在綠色的7 * 7區域,只有9個紅點已被捲曲,並且重量為 其餘的點為0.因此即使卷積核心大小相同,它看到的區域也會變大。詳細解釋顯示答案:如何理解擴張卷積?
10.卷積核心的形狀是否必須是矩形?可變形卷積可變形卷積核心
傳統的卷積核通常是矩形或正方形,但MSRA提出了一種相反的直觀觀點,即卷積核的形狀可以改變,變形卷積核只能檢視感興趣的影象區域,因此識別特徵更好。
啟蒙與反思
如今,越來越多的CNN模型逐步從巨型網路發展到輕量級網路,模型的準確性也在不斷提高。現在行業的焦點不是提高準確性(因為它們已經非常高),它們都專注於速度和準確性之間的交易,他們都希望模型快速準確。所以從AlexNet和VGGnet到尺寸較小的Inception和Resnet系列,移植網和ShuffleNet都可以移植到移動終端(體積可以減少到0.5mb!)。我們可以看到這樣的趨勢:
卷積核心:
大卷積核心被小卷積核心取代。
單尺寸卷積核心被多尺寸卷積核心取代。
固定形狀卷積核心傾向於使用可變形卷積核心。
使用瓶頸結構。
卷積頻道:
標準卷積由深度卷積代替。
使用分組卷積;
在資料包卷積之前使用通道混洗。
頻道加權計算。
卷積層連線:
Skp連線用於使模型更深入。
密集連線,使每一層融合另一層的特徵輸出(DenseNet)
啟發
透過類比通道加權操作,卷積層跨層連線是否也可以加權?瓶頸+ Group conv + channel shuffle + depthwise的組合是否會成為未來減少引數的標準配置?