神經網絡壓縮(9) WAE-Learning a Wavelet-like Auto-Encoder to Accelerate Deep Neural Networks

轉載自:
http://blog.csdn.net/u011995719/article/details/78900575

WAE(Wavelet-like Auto-Encoder) 是由來自中大、哈工大、桂電等多機構的多名研究人員合作提出的,發表於AAAI-2018(論文地址:
https://arxiv.org/pdf/1712.07493.pdf

github

創新點:
1. WAE藉助小波分解得思想,將原圖分解成兩個低分辨率圖像,以達到網絡加速的目。

(PS:整體思路:下采樣的方法達到網絡加速,但是下采樣會導致的信息損失而降低網絡性能,因此需要一種既能降低圖像分辨率,又不損失信息的方法。於是小波分解閃亮登場,WAE將原圖分解成兩個低分辨率圖像,一個攜帶高頻信息,一個攜帶低頻信息,具體操作往下看 )

感覺這個idea還是挺有意思的,值得學習
———————————————-分割線—————————-
網絡框架
WAE整體框架如下:
這裏寫圖片描述

輸入圖片I ,經過encoder 得到IH(高頻圖)和IL(低頻圖),低頻圖輸入到標準的CNN網絡得到的特徵與高頻圖融合(PS:高頻圖並不是像圖中那樣直接到fusion處的,而是與低頻圖一樣,也要輸入到一個CNN裏面,具體請往下看),最後分類。

目標函數
目標函數比較複雜,得仔細講講,具體訓練階段分爲三個部分,
1.auto-encoder的訓練
2. 分類器的訓練
3. 整體加起來訓練 (PS: 思想和2016-ICML的一篇paper相同

先看1.Auto-encoder主要是看重構誤差,即:
這裏寫圖片描述

由於要獲得“高頻圖”,還需要增加一個約束,用以約束其中一個特徵圖的像素值的大小:
這裏寫圖片描述

auto-encoder訓練整體的loss 爲:
這裏寫圖片描述

lr表示重構,le表示高頻圖的約束,λ是超參,用以權衡連個loss

  1. 分類器的訓練,這個沒啥好說的:
    這裏寫圖片描述

    3.整體訓練的loss:
    這裏寫圖片描述

    其中γ設置爲0.001,用以權衡兩個loss,Lc是分類的loss,Lt是訓練auto-encoder的loss

細節處理
知道了框架和目標函數,但是細節是如何處理的呢:
1. Encoding layer 是如何將I分解成低分辨率的高頻圖和低頻圖呢?
2. IL經過網絡輸出的特徵如何與IH融合呢?
3. Decoding layer 是如何將IL和IH恢復的呢?

先看 1. Encoding layer 是如何將I分解成低分辨率的高頻圖和低頻圖呢?
WAE的Encoding layer採用卷積神經網絡將I“分解”成低分辨率的高頻圖和低頻圖,卷積神經網路如下圖所示,先又3層卷積核大小爲3*3,數量爲16的卷積層對原始圖片進行卷積,之後分別採用兩個卷積層進行卷積,再來一個下采樣,得到分辨率爲原始圖片的1/2。具體網絡如下圖:
這裏寫圖片描述

看到這裏,我把分解改爲了“分解”,用CNN獲得兩個圖片,那麼如何保證一個是高頻,一個是低頻呢?

論文是這樣做的: 首先我們要肯定的是,通過CNN我們是不能得到一張是高頻信息圖,一張是低頻信息圖。作者這裏採用的方式是,對其中一個圖增加約束,即增加一個L2範數的約束,使得其中一張圖的值都很小,然後這張圖就是高頻信息,從而對應的另外一張圖就是低頻信息。 (有熟悉信號處理的同學麼?? 請問這個理論是小波分解的理論還是信號處理的理論?
增加的約束是這個: 這裏寫圖片描述

對圖像像素值的大小進行限制,一張圖像的素值小,就稱之爲高頻信息圖,請問這個是否有理論根據? 知道的朋友請在評論區討論討論

說完了encoding,接着說decoding。 3 . Decoding layer 是如何將IL和IH恢復的呢?
Decoding layer沒啥好講,知道了如何Encoder,所有步驟反過來就好了,具體操作如下圖所示。
這裏寫圖片描述

最後看問題2. IL經過網絡輸出的特徵如何與IH融合呢?
如果只看開篇的WAE框架圖,那肯定是理解不了 IH那條虛線直接到fusion到底做了什麼操作!
看了prototxt才明白,原來是這樣,具體如下圖所示:
先看左半部分,IH和IL分別經過一個VGG的卷積部分,得出特徵FH,FL;
右半部分 分爲上下,先說上邊,FH和FL進行“融合”,也就是按通道concat,然後輸入FC層,得出一個1000維的向量 V1;
下邊,FL直接輸入到FC層得到向量V2;
最終的網絡分類輸入是 V1+V2(element-wise)
這裏寫圖片描述

回答了以上三個問題,WAE網絡的結構已經很清晰了,但是還是存在不少疑問的:

  1. 如何確定經過Encoding layer之後得到的兩張圖,一個是高頻圖,一個是低頻圖?

  2. 圖片經過encoding layer ,之後還要經過兩個VGG,參數確實是少了,但是創新點上,怎麼感覺是單純的CNN的堆疊。有點像inception的思想,原始圖片分成兩個通道,然後輸入到兩個CNN,再把輸出進行相加。

  3. 至於auto-encoder,我一直存在疑問,怎麼能說明 經過encoder得到的特徵(code)再經過decoder得出來的圖像和原始圖像很接近,就可以證明 這個encoder提取出來的特徵(code)是好的!?
    我一直認爲是因爲decoder的“恢復”能力很強,可以恢復出原始圖像,也就是說 decoder已經“學習”到encoder是如何“編碼”的,decoder就可以很好的恢復原始圖像,有decoder這一層因素在這,怎麼就能說encoder提取出的特徵(code)就是好的呢?

胡思亂想:
又是一篇用了 auto-encoder 來“約束”卷積神經網絡提取出的特徵。
雖然是 wavelet-like ,但是小波的思想在論文中沒具體提到呢。。。
目前,從這篇paper沒有啥啓發~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章