1. 程式人生 > >深度學習——深卷積網絡:實例探究

深度學習——深卷積網絡:實例探究

技術分享 模塊 變化 技術 減少 開始 出了 經典 問題:

1. 三個經典網絡

紅色部分不重要,現在已經不再使用

這篇文章較早,比如現在常用max,而當時用avg,當時也沒有softmax

技術分享圖片

這篇文章讓CV開始重視DL的使用,相對於LeNet-5,它的優點有兩個:更大,使用ReLU

以作者名字命名

same表示使用same過濾器,也就是輸入和輸出維度一致

技術分享圖片

16表示總共有16個CONV和FC,這篇文章指出了信道數和維度變化的規律性(隨網絡增加/減少),缺點是參數實在太多了

技術分享圖片

閱讀論文順序:2-3-1

2. 殘差網絡

殘差網絡由殘差塊組成,它使得網絡可以變得更深

a[l]到a[l+2]的藍色是網絡的主路徑,而紫色部分稱為短路/跳躍連接,直接把a[l]的信息傳遞到下下一層,計算a[l+2]時會加上a[l](殘差),它插入的位置是線性計算後,激活前

技術分享圖片

plain network是一般的網絡

在plain network中隨著深度增加,優化算法更難執行,所以可能會出現錯誤率先降後升的情況

網絡越深越難訓練:梯度消失/爆炸的問題

技術分享圖片

3. 為什麽Residual網絡有用

假設對一個大型網絡再增加兩層(構成殘差塊)

計算a[l+2]時,如果w為0,b也為0,且使用ReLu函數,那麽我們可以得到a[l+2] = a[l],這說明殘差網絡可以很容易學習恒等函數

因此,增加網絡深度不會損害性能,而plain網絡當深度增加時可能連恒等函數都不容易學習??

如果z[l+2]和a[l]維度一致就正好,如果不一樣的話,那麽可以在a[l]前乘以一個矩陣,不需要對矩陣進行處理??

技術分享圖片

殘差網絡的結構圖

技術分享圖片

4. 1x1卷積

1x1卷積做事情是:(以下面32信道為例)

對輸入的32個元素(32個信道)作一個全連接,然後執行ReLU函數,得到一個實數,作為相應位置上的結果。如果有多個過濾器,則進行疊加

這個也稱為網絡中的網絡

為什麽可以用1x1來壓縮?這樣如果采用一樣的過濾器,結果是不一樣的吧????

技術分享圖片

1x1卷積的作用

通過增加一個非線性函數使得信道數減少或保持不變(壓縮信道的方法),以減少計算量

使用32個1x1x192的過濾器

技術分享圖片

5. google Inception網絡

Inception可以幫你決定應該采用什麽樣的過濾器,是否需要pool層等

它的做法是把各種過濾器的結果堆疊在一起

下例中的維度是自己定義的,這樣最後輸出的結果中會有256個信道

下圖是一樣Inception的一個基礎塊

技術分享圖片

Inception的一個最大問題:計算量很大

以上例中5x5過濾器為例,就需要計算120M次乘法

技術分享圖片

解決方法:加一個1x1過濾器,也稱為bottleneck層(瓶頸層,是網絡中是小的層)

下例中計算量就會降成12.4M

技術分享圖片

6. 一個更完整些的Inception模塊

技術分享圖片

論文中的網絡結構

其實就是把上面的模塊重復連接,另外,網絡後面幾層會有一些分支(綠色劃圈部分),它們也是和最後的輸出一樣進行輸出,也就是說隱藏層也參與了最後y hat的輸出,這樣可以避免過擬合的問題

小故事:Inception原名是googlenet,是為了向LeNet致敬,而後引用了Inception(盜夢空間),意在建議更深的網絡

技術分享圖片

6. 遷移學習

在CV中經常會用到遷移學習。一般推薦使用開源的網絡來做,而非從0開始。根據擁有的數據量不同,有不同的處理方式,從上到下數據量遞增

例:要訓練一個識別貓的網絡(3個轉出)

當數據量很小的時候,可以把最後一層softmax替換掉,而把前面所有的層不變(一般有參數如trainable, freeze可以用於設置參數不變),只訓練最後一層

另外,可以把最後的隱藏層的結果保存下來,然後直接將輸入映射。這樣就不用經過中間層的計算

當數據量大一些的時候,可以多訓練幾層,也就是把前幾層freeze,而後面幾層進行訓練

當數據量很大時,可以對整個網絡進行訓練,原來訓練好的結果作為初始化值, 這樣就不用用隨機初始化

技術分享圖片

7. 數據擴充(augmentation)

對於CV應用,一般來說數據越多,網絡性能越好。對於其它應用可能不一定,但是對計算機視覺,數據量是一個重要的因素。數據擴充就是對原有數據進行處理以獲得更多的數據

常用的方法:mirror/random crop 其它幾個可能比較復雜就比較少用

技術分享圖片

第二種方法:改變顏色。有一種方法是PCA(主成分分析),根據原有的顏色比例進行調整,使得修改後的顏色和原來一致

技術分享圖片

data augmentation(增強)的實現

一般是用一個線程從硬盤加載數據進行修改,再把這些數據傳給其它的線程進行訓練。這樣數據處理與網絡訓練可以實現並行

超參數:顏色要改變多少,裁剪什麽位置等

技術分享圖片

8. 計算機視覺現狀

技術分享圖片

用於競賽的tips,一般不推薦用於真實應用上

技術分享圖片

技術分享圖片

深度學習——深卷積網絡:實例探究