Class Activation Mapping(CAM)
論文《Learning Deep Features for Discriminative Localization 》(2016CVPR)主要介紹了兩個核心技術:
GAP(Global Average Pooling Layer)?和?CAM(Class Activation Mapping)
- GAP(全局平均池化層)
在說全局平均池化之前,我想先談一談池化層。我們都知道,池化層的作用是正則化。比如說,這是一個VGG-16的模型。
我們可以直觀的看到,從卷積層到池化層,深度不變,尺寸變小了。我們使用更小尺寸的特征圖來表示輸入,雖然會丟失一些信息,但是池化層可以防止過擬合,降低維度,保留主要特征的同時減少計算量,減少了參數數量。
全局平均池化也一樣,可以用來正則化。讓我們來看一個容易的例子,我想這個相信可以幫助我們理解全局平均池化。
首先是Max pooling(最大池化)。如圖所示,最大池化是選擇每個子區域的最大值,然后使用子區域的最大值表示該子區域。
Average pooling(平均池化)是指計算出子區域的平均值,用一個平均值來分別表示子區域子區域。
與平均池化類似,Global Average Pooling(全局平均池化)是指計算整個區域的平均值,僅用一個值來表示整個區域。通過下面這個圖,我想我們可以更直觀的理解GAP。
左邊是一個特征圖。高度為6,寬度為6,深度為3。當它經過GAP,我們把每一層的參數用一個值表示,這個特征圖就變成一個1*1*3的特征向量。
第一個提出GAP這個想法的,是一篇叫做《Network in Network》的論文。這篇論文發現用GAP代替全連接層,不僅可以降低維度,防止過擬合,減少大量參數,網絡的性能也很不錯。
GAP怎么代替全連接層呢?讓我們回到一開始的例子。
如果我們使用GAP,我們必須改變網絡的結構。首先我們把最大池化層和全連接層扔掉,只需要將其換成一個尺寸為1*1*512的GAP,之后和原網絡一樣接一個softmax層就可以了。當然這只是我從理論出發舉的一個小小的例子,性能是否改變還沒有做過實驗。
如果我們使用GAP來代替FC,優點是最小化參數數量的同時保持高性能,結構變得簡單,也避免了過擬合。但是缺點是和FC相比,GAP收斂速度較慢。
雖然這個GAP不是新的技術,但是在論文《Learning Deep Features for Discriminative Localization 》中,他們發現了GAP的一個作用,能保留空間信息并且定位(localization)
盡管在圖像級標簽上進行了訓練,它仍能夠區分判別圖像區域。 并且在許多任務中它都可以定位判別圖像區域,盡管只是訓練基于解決分類任務。
- CAM(類激活映射)
那么什么是類激活映射呢?CAM是一個幫助我們可視化CNN的工具。使用CAM,我們可以清楚的觀察到,網絡關注圖片的哪塊區域。比如,我們的網絡識別出這兩幅圖片,一個是在刷牙,一個是在砍樹。通過CAM這個工具,我們可以清楚的看到網絡關注圖片的哪一部分,根據哪一部分得到的這個結果。
The class activation map is simply a weighted linear sum of the presence of these visual patterns at different spatial locations.By simply upsamplingthe class activation map to the size of the input image, we can identify the image regions most relevant to the particular category.
使用論文中的話來說,類激活圖僅僅是在不同空間位置處存在這些視覺圖案的加權線性和。 通過簡單地將類激活映射上采樣到輸入圖像的大小,我們可以識別與特定類別最相關的圖像區域。如果把這段話翻譯成數學語言,就是如下的公式。
但是我想這樣理解起來是很困難的,所以我想通過圖片來解釋它。
這是一個基于分類訓練的CNN網絡,最左邊是輸入,中間是很多卷積層,在最后一層卷積層之后接的是全局平均池化層(GAP),最后接一層softmax,得到輸出。我們剛剛說過,GAP就是把特征圖轉換成特征向量,每一層特征圖用一個值表示,所以如果這個特征圖的深度是512,那么這個特征向量的長度就是512。我們的輸出是Australian terrier,澳大利亞梗。我們用Australian terrier這個類對應的權重乘上特征圖對應的層,用熱力圖歸一化,即下面一排熱力圖:W1*藍色層+W2*紅色層+…+Wn*綠色層=類激活映射(CAM),所以說CAM是一個加權線性和。通常來說,最后一層卷積層的大小是不會等于輸入大小的,所以我們需要把這個類激活映射上采樣到原圖大小,再疊加在原圖上,就可以觀察到網絡得到這個輸出是關注圖片的哪個區域了。這也就是說可以是任意輸入圖片的大小和卷積層的深度。
我還想說一點是,因為CAM基于分類,所以被激活的區域是根據分類決定的,即同一個特征圖,只更新不同的權重。所以即使我們使用同一張input,就像下面這個例子。
示例圖片的地面真值是圓頂。五張類激活映射分別是前五名預測類別和得分。我們可以看到如果輸出是宮殿,網絡關注的是整塊區域的。如果輸出是圓頂,網絡只是關注宮殿頂部。
- CAM的缺陷
這項技術非常有用但是存在一些缺陷的。首先我們必須改變網絡結構,例如把全連接層改成全局平均池化層,這不利于訓練。第二是這是基于分類問題的一種可視化技術,用于回歸問題可能就沒有這么好的效果。
為了解決第一個問題,2017年出現了一種改進的技術叫Grad-CAM,Grad-CAM可以不改變網絡結構進行可視化,詳見這篇論文《Grad-CAM: Visual Explanations from Deep Networks via Gradient-based?Localization》?(2017 ICCV)。
- CAM的應用
CAM也可以應用到很多方面。比如,它可以發現場景中有用的物體:
在弱標記圖像中定位比較抽象的概念:
弱監督文字檢測,它可以關注文字部分即使網絡沒有訓練過文字或者任何注釋框:
關于視覺問答,我們可以看到網絡關注答案區域:
利用CAM的可視化技術,我認為CAM也能幫助我們對比模型,選擇一個更合適的結構:
在日常做實驗的時候也可以利用CAM幫助我們發現問題,改進結構:
這是一個簡單的二分類問題,識別圖片是貓還是狗,通過CAM技術,我們可以看到網絡關注哪里。在第二排第一第二個結果中,網絡錯誤的將貓識別為狗,使用CAM我們可以很快發現錯誤原因是對于兩張圖片網絡忽略了貓,而關注了其他區域。所以CAM可視化這可以幫助我們理解網絡。
CAM使得弱監督學習發展成為可能,可以慢慢減少對人工標注的依賴,能降低網絡訓練的成本。通過可視化,就像往黑箱子里打了一個手電筒,讓人們可以嘗試去理解網絡。
總結
以上是生活随笔為你收集整理的Class Activation Mapping(CAM)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 物理约束相关问题梳理
- 下一篇: 异常检测各类方法