論文筆記 Visualizing and Understanding Convolutional Networks


  之前,我知道可以可視化CNN,也只是知道有這么一回事情。至於它是“怎么做的、其原理是什么、給我們的指導意義是什么”,也不清楚。說白了,就是我知道有“CNN可視化”,僅僅停留在“知道”層面!但當自己需要運用、理解其他CNN可視化技術時,才曉得將這篇paper精讀一下。

 

Background

1)在很多分類任務中(如手寫字符識別、人臉識別,以及極具挑戰性的Imagenet Classification),CNN取得了極好的性能。但是,CNN是怎么做到的呢?她內部的工作工作機理是什么?又該如何進一步提升其性能呢?引用論文中的一句話就是“Without clear understanding of how and why they work, the development of better models is reduced to trial-and-error”。

2)在一副圖像當中,它的不同部分對於分類准確率的影響相同嗎?

3)CNN的不同層,它們的泛化能力相同嗎?

作者在這篇論文中提出了一種可視化的技術用以分析CNN的“Why and how they work”,並通過該技術回答了問題2),也對問題3)做了明確的回答!這個可視化技術的要點可以簡單理解如下:

假設 B=f(A),可以將A理解為輸入圖像、B理解為feature map、f理解為CNN(為簡單起見,這里認為A、B都是二維的矩陣,即輸入是灰度圖像、輸出是只有一個channel的feature map,請注意這只是為了陳述問題方便)。一般情況是,給定輸入A,我們得到feature map B。現在我們想了解一下對於B中一個元素Bij,A中的各個元素對其的“貢獻”。我們可以直接令除Bij之外的所有B中元素為0,然后將Bij逆影射到輸入空間,得到A‘(如果這樣不好理解的話,可以認為是由Bij重構出A‘)。這個A‘就反映了A中各個像素對Bij的“貢獻”,或者換句話說,Bij是被A中 “A' pattern”激活的。

 

Main Points

1)首先圖示一下作者提出的可視化技術

Fig 1左側是作者提出的可視化網絡,用來將feature maps上的某個activation影射到輸入空間,對應背景介紹中A‘。右側對傳統的CNN一個小小改進,也就是在做max pooling時進行用“Switches”記錄一下最大值的位置。我們重點分析左側的網絡結構:

 

  • 如何對pool進行“逆操作”,也就是上圖中的Unpooling。其實做法很簡單,在我們進行max pooling的時候,我們通過“Switches”記錄下是哪個位置取得了最大值,在unpooling的時候,按照這個“Switches”將pooling后的結果放回原來的位置(剩余的直接填充0就好了)。Fig 1 Bottom很好的示意了上述過程。
  • 如果我們得到了卷積核的權重,我們是可以進行反卷積的。這個卷積核的權重,我們可以直接從右側的傳統CNN得到。因此,可視化的網絡是不需要訓練的。
  • 上圖左側之所以加上Relu,論文中是這樣解釋的“To obtain valid feature reconstructions at each layer (which also should be positive), we pass the reconstructed signal through a relu non-linearity”

在CNN中,每一層的feature maps有很多個channel,下面我們做的就是從中選擇一個feature map,從該feature map選擇一個activation,然后令除了該activation之外的所有feature map activations為0,之后,用上述選擇重構出A‘。由於每一個activation在輸入圖像中的receptive field有限、確定,因此作者也將該activation對應的image patch裁了出來,組成了下圖(作者是這樣選擇activation的,For a given feature map, we show the top 9 activations)

由該圖可以得出結論

 

2)有了上述可視化的分析工具,我們可以實時追蹤在訓練過程中feature 的 evolution。這一部分請大家參考原始論文,我就不贅述了。

3)有了上述可視化的分析工具,我們還可以將引起最大響應的patch遮住,看看不同patch對分類結果的影響。結論就是“the model is truly identifying the location of the object in the image”。

4)有了上述可視化的分析工具,我們還可以將引起最大響應的patch遮住,看看最大響應的是不是消失了,以此驗證,特定的pattern激活相應的activation。

5)當然了,我們還可以利用上述可視化分析工具,分析一下Alexnet模型的缺點,並且提出改進的辦法,這篇paper也做了這樣的事情。

6)此外,作者做了實驗,通過移除Alexnet的一些層或者改變某一層的width,看看不同層、width對分類精度的影響,結論就是:模型的深度是影響性能一個很重要的因素,增加模型width能夠提升網絡的性能。

7)作者還驗證了,小數據集不太適合訓練大的網絡如Alexnet。

8)網絡的高層feature泛化能力較強,但其在PASCAL數據集上表現不佳,原因可能是:存在data-bias(Imagenet和PASCAL中的圖像差異較大)

 

Summary

1)一個簡單的可視化技術,讓我們能夠從各個角度審視“How and why CNN works”。“小改進、大智慧”,或許這應該成為科研的指導思想吧!

2)作者詳細分析網絡深度、寬度、數據集大小對網絡性能的影響,也分析了網絡輸出特征的泛化能力以及泛化過程中出現的問題(如果另一個數據集與Imagenet差異較大,泛化能力相對較弱出現的原因)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM