〖想觀看更多中文論文導讀,至[論文速速讀]系列文章介紹可以看到目前已發布的所有文章!〗
前言
paper: https://arxiv.org/pdf/1512.04150.pdf
會寫這篇主要是因為,CNN雖然厲害,對大多數人來說他還是一個人黑盒子,有時候我們根本不知道模型學到了什麼,如果模型沒學好就拿出來用就可能會發生如下悲劇: [新聞] 蘇格蘭AI誤把裁判的光頭當成足球跟拍轉播
將科技應用在運動比賽上是一件很棒的事情,但有的時候,即使是最偉大的發明也有出錯的可能。上週末在蘇格蘭的一場足球比賽中就發生了這樣的事情,一個由 AI 控制的攝影機,不小心把邊審的光頭誤認是足球。
由程式控制的攝影機會自動追蹤球在哪、並且嘗試跟拍,不再需要真人攝像師去控制。除了這會搶走一個人的工作之外,理論上聽起來還蠻有道理的。問題是──攝影機無法分辨足球和光頭的區別,它不斷的聚焦在邊審這個沒太大動作的人身上,而不是場上的球員。
…
所以解釋性AI就很重要,我們想試著去了解模型學到或看到了什麼。
本文介紹CNN可視化的一種技術,Classification Activaion Mapping (CAM),透過heatmap的方式顯示模型分類時認為圖片重要的依據為何。概念不難但卻非常好用,而且很酷。
在跟老闆介紹時,如果只跟他說模型有多猛架構多炫…老闆可能還是無法理解,有了這個技術就可以拿去跟老闆說”看看我的CNN模型都學到了什麼玩意兒~”
相信老闆看到圖片的效果一定會眼前為之一亮!
Abstract
While this technique was previously proposed as a means for regularizing training, we find that it actually builds a generic localizable deep representation that can be applied to a variety of tasks
這篇論文的貢獻是重新審視Network in Network中提出的Global Average Pooling (GAP),並提出用它來做物件定位(localization)的想法。
- 再說一遍,走在CNN的浪潮上,你不可不知道的一篇論文: [論文速速讀]Network In Network
當初GAP只被用來作為regularization training的一項技術,但實際上發現GAP具有能建構出一種好的localizable deep representation的能力,這能夠幫助模型去很好的定位出不同類別的物體。
Introduction
CNN各層的Conv Layer已經被證明是一個物體檢測器(Object detector),透過卷積能夠很好的定位出物體在圖片中的位置。但這項能力在接上全連階層Fully connected Layer後就會喪失,因為FC將每個neuron連接的做法抹消了位置的information。
- 因此有些Model已經在嘗試不要在最後一層接上FC,例如NIN和GoogleNet
In our experiments, we found that the advantages of this global average pooling layer extend beyond simply acting as a regularizer - In fact, with a little
tweaking, the network can retain its remarkable localization ability until the final layer
GAP當初在NIN被提出來的時候最早是作為一個正則化技術的應用,用來防止overfitting。但文章的作者發現,透過一些小設計就能夠讓使用GAP的網路模型在不用特別訓練定位任務下,同樣具備良好的定位能力。
作者把他提出的方法稱作Class activation mapping (CAM),透過CAM + GAP,就能夠讓模型再分類分的好的同時也學到良好的定位能力。
Related Work
作者原本把Related Work歸類在Introduction怪怪的…摁…不管他xD
大致回顧了兩種技術:
- 弱監督物體定位
- 可視化CNN
Weakly-supervised object localization
弱監督學習是什麼?
監督式學習(Supervised Learning)是給予data和label的情況下去對模型建模,而現實情況下label往往不夠大量,不論是礙於成本考量或是取得難度。
因此弱監督學習的概念就是: 在不增加label的情況下,使用不同的技術來對模型訓練,他有很多不同的類別,例如大家耳熟能詳的主動學習(Active Learning)與半監督學習(Semi-Supervisied Learning)就是其中的分支。
- 有興趣的可以參考浅谈弱监督学习(Weakly Supervised Learning)
- 在弱監督對物體定位這塊已經有不少方法,例如可以將圖片的隨機區域Mask掉,然後去觀察分類的準確度,那影響準確度最大的部分是不是就是最接近該物體的定位區域了呢?
而這些方法都不夠泛化及實用(因為不能做到End-to-End,或者有不少需要前處理的部份),但作者提出的方法卻沒有這問題。
We believe that while the max and average functions are rather similar, the use of average pooling encourages the network to identify the complete extent of the object. The basic intuition behind this is that the loss for average pooling benefits when the network identifies all discriminative regions of an object as compared to max pooling
此外,也探討了為何是GAP和不是Global Maximun Pooling? 作者提出的想法相較於GMP,GAP在辨別物體區域上的loss更小,詳細的內容可以看論文的Section 3.2或者本文後面的實驗結果
Visualizing CNNs
在CNN可視化的研究方便也有不少,但大多都是提出某一層卷積來分析他的activation,並沒有對最後的FC層做研究,所以還不夠全面。
- 題外話,CNN可視化的開山始祖ZFNet,有興趣的可以去看看 [論文速速讀]Visualizing and Understanding Convolutional Networks
沒關係,把FC層移除掉就不用做研究了!,在使用GAP提升regularization的同時也能夠更好的去解析模型不是更棒嗎~
Class Activation Mapping
CAM的意思代表模型區別某一個類別時所看重的最重要區域在哪裏,生成CAM的過程如下,這張圖懂了就全懂了:
在CNN模型最後一層,也就是Output Lyaer的前一層使用GAP,並且使用FC將GAP Layer跟Output Layer做映射。如此一來,我們可以很直觀的去解釋這個模型的架構:
- 首先,對於神經網路通常越後面的層代表越高級的深層特徵
- 對於最後一層Conv的Feature Map做GAP得到的每個point可以作為最後一層Feature Map的重要性分數
- 這些代表點透過全連接和對應的Label關聯後,連接邊的權重就可以想成該特徵對於模型分類到這個物體所佔的重要性
基於此架構,我們把Conv最後一層每個map都取出來,也取出他們GAP後與label的權重($w_{1}, w_{2}…w_{n}$),然後把他們加權平均起來,以heatmap的形式呈現就可以代表模型分類這個類別時所看重的區域了
這邊我沒有照著論文介紹,而是採用了我認為比較直觀的理解方式,有興趣看原文的人可以再去看一下原文的介紹。
總而言之,在這架構下,只要模型訓練的好,我們就可以取出Output Layer的每個類別點,反推回去看說模型看這個類別時都在看那裡了,如下圖所示
Weakly-supervised Object Localization
這邊針對以前的網路,拔呀拔把最後的FC都拔掉換成GAP然後看看是否會造成不良的影響,並探討他們能否有一樣甚至更好的定位能力。
Results
Classification
- 在這邊發現使用作者方法的模型再分類上效果會差一點點,但並沒有下降太多,都還在可接受的範圍
Localization
這邊只是想介紹他們是怎麼用CAM來做定位的,畢竟CAM他並不是一個框框。
作者他們的方法是: 最大CAM值的20%作為一個threshold來畫框,並用此來做localization和其他方法比較,結果如下
- 可以發現GoogLeNet-GAP的方法比以往沒有用GAP的模型定位準確度都來得好
- 這裡也有比較GAP和GMP,發現GAP的效果是比GMP好的
- 值得一提的是這並沒有特別做object detection的training,單純是train classification後把結果拿來用而已,也就是說做你也可以用這方法在沒有bounding box的情況下做到object detection
接下來看圖比較有感覺,下圖的上面兩張是使用GoogLeNet-GAP搭配threshold所框出的框框(紅色部分),下半部分的兩張是AlexNet的框框(紅色部分),而綠色框框是Ground truth。可以看出用GAP的效果有著比較好的定位能力
礙於現在工作因素,之後的論文沒辦法每篇都看得那麼仔細。不過原文的後續仍然對不同領域的task做了許多實驗,有興趣的讀者歡迎前往觀看!
Conclusion
本文就介紹到這邊,主要介紹了CAM的想法以及一些比較重要的實驗結果。
有了這種概念後,我們就知道可以透過這種技術去
- 跟老闆解釋模型到底學到了什麼
- 在沒有提供bounding box information下,一樣可以做到object detection的task(透過CAM with threshold)
當然,這一切的前提是你的模型必須訓練得夠好,分類準確的前提下才有意義。
最後,如果有耐心看到這邊的讀者或許會有一個疑問:
“CAM要求CNN模型最後一層必須是GAP,那以前那些最後一層不是GAP的模型不都要通通重新改架構才能用這套方法了嗎?”
這個問題後來被其他研究學家解決了,新的方法可以適用任何模型,他就叫做Grad-CAM
- 概念和CAM很像,但並不是使用GAP來取得每一個feautre map的權重
- 該篇論文就不另外介紹了,有興趣的讀者可以參考[ML]Explainable ML介紹(CAM、Grad-CAM)