導言:
在CV很多方向所謂改進模型,改進網絡,都是在按照人的主觀思想在改進,常常在說CNN的本質是提取特征,但并不知道它提取了什麼特征,哪些區域對于識别真正起作用,也不知道網絡是根據什麼得出了分類結果。
如在上次解讀的一篇論文《Feature Pyramid Transformer》(簡稱FPT)中,作者提出背景資訊對于識别目标有重要作用,因為電腦肯定是在桌上,而不是水裡,大街上,背景中的鍵盤滑鼠的存在也能輔助區分電腦與電視機,是以作者提出要使用特征金字塔融合背景資訊。從人的主觀判斷來看,這點非常合理。但對于神經網絡來說,FPT真的有融合背景資訊,而普通CNN網絡沒有融合背景資訊?又或者說,一般而言,除了提出的新模型,還會加上主觀設計的各種tricks,确定最後是因為融合了背景資訊而精度提高了,還是說背景确實融合了,但實際上對精度沒有影響,而是各種tricks起了作用?這一切并不确定,因為并不确定CNN到底學到了什麼。
解決這個問題的辦法有很多,一個是想辦法看看CNN内部學到了什麼,一個是控制變量法。提到這個控制變量法,在某一篇論文中(我對不起我的讀者,論文累積量太大,忘記是哪一篇,隻記得該論文的一些新穎之處),在設計了一個新的模型後,通過改變卷積層的某些通道,來看最後模型的精度的變化,進而确定哪些通道對這個模型是真正起作用的,而哪些是備援的。按照這個思路,我們或許可以在資料預處理時,故意裁剪掉人主觀認為有用的背景資訊,例如裁剪輔助識别電腦的桌子,鍵盤滑鼠,重新訓練FPT,進而看最終精度有沒有影響。很明顯,這種方法理論上是可行的,但實際上工作量巨大,不現實。而CNN可視化是值得考慮的方法。
除了上面提到的一點,CNN的作用還有哪些?
在少數提出新模型或新methods的論文中,往往會給出這個模型的一些可視化圖來證明這個模型或這個新methods對于任務的作用,這一點不僅能增加新模型或新methods可信度,也能起到增加工作量,增加論文字數的作用,如研究者想到一個method,一兩頁就介紹加推理加證明完了,效果明顯,但作為一篇論文卻字數太少,工作量不夠多,就可以考慮可視化使用了這個methods的網絡與沒有使用這個methods的網絡,進行對比,分析分析,就可以變成一篇完整的論文了。此外,CNN可視化還有一個作用,根據可視化某個網絡的結果分析其不足之處,進而提出新的改進方法。例如:ZFNet正是對AlexNet進行可視化後改進而來,獲得了ILSVRC2014的冠軍。
CNN可視化方法
一、特征圖可視化。特征圖可視化有兩類方法,一類是直接将某一層的feature map映射到0-255的範圍,變成圖像,但這樣。另一類是使用一個反卷積網絡(反卷積、反池化)将feature map變成圖像,進而達到可視化feature map的目的。
二、卷積核可視化。
三、類激活可視化。這個主要用于确定圖像哪些區域對識别某個類起主要作用。如常見的熱力圖(Heat Map),在識别貓時,熱力圖可直覺看出圖像中每個區域對識别貓的作用大小。這個目前主要用的方法有CAM系列(CAM、Grad-CAM、Grad-CAM++)。
四、一些技術工具。通過一些研究人員開源出來的工具可視化CNN模型某一層。
CNN技術總結将按照這四個方法,分成四個部分總結CNN可視化技術。對于以後出現新的技術,或者補充,将更新在公衆号CV技術指南的技術總結部分。在本文,主要介紹第一類方法,特征圖可視化。
直接可視化
單通道特征圖可視化,由于feature map并不是在0-255範圍,是以需要将其進行歸一化。以pytorch為例,使用torchvision.utils.make_grid()函數實作歸一化
def make_grid(tensor, nrow=8, padding=2,
normalize=True, range=None,
scale_each=False,pad_value=0):
多通道特征圖的顯示,即對某一層所有通道上的特征圖融合顯示,在使用make_grid函數後,pytorch環境下可使用tensorboardX下的SummerWriterh中的add_image函數。
本部分内容參考連結:https://zhuanlan.zhihu.com/p/607539
反卷積網絡deconvnet
feature map可視化的另一種方式是通過反卷積網絡從feature map變成圖像。反卷積網絡在論文《Visualizing and Understanding Convolutional Networks》中提出,論文中提出圖像像素經過神經網絡映射到特征空間,而反卷積網絡可以将feature map映射回像素空間。
如下圖所示,反卷積網絡的用途是對一個訓練好的神經網絡中任意一層feature map經過反卷積網絡後重構出像素空間,主要操作是反池化unpooling、修正rectify、濾波filter,換句話說就是反池化,反激活,反卷積。

由于不可能擷取标簽資料,是以反卷積網絡是一個無監督的,不具備學習能力的,就像一個訓練好的網絡的檢測器,或者說是一個複雜的映射函數。
反池化Unpooling
在上一篇文章《池化技術總結》中提到最大池化會記錄最大值的坐标,在上圖中就是switches,而反池化就隻需要将最大值放到原位置,而其他位置的值并不知道,直接置零。如下圖所示。
修正Rectification
CNN使用ReLU確定feature map上的值都是正的,是以在反卷積中也使用ReLU。這裡所謂Rectification其實就是讓unpooling後的值都是正的,換句話說就是使用ReLU。
Filtering
Filtering指的是反卷積,具體操作就是使用原網絡的卷積核的轉置作為卷積核,對Rectification後的輸出進行卷積。
注:在以上重構過程中沒有使用對比歸一化操作。
反卷積網絡特征可視化結果
導向反向傳播
在論文《Striving for Simplicity:The All Convolutional Net》中提出使用導向反向傳播(Guided- backpropagation),導向反向傳播與反卷積網絡的差別在于對ReLU的處理方式。在反卷積網絡中使用ReLU處理梯度,隻回傳梯度大于0的位置,而在普通反向傳播中隻回傳feature map中大于0的位置,在導向反向傳播中結合這兩者,隻回傳輸入和梯度都大于0的位置,這相當于在普通反向傳播的基礎上增加了來自更高層的額外的指導信号,這阻止了負梯度的反傳流動,梯度小于0的神經元降低了正對應更高層單元中我們想要可視化的區域的激活值。
使用導向反向傳播與反卷積網絡的效果對比
明顯使用導向反向傳播比反卷積網絡效果更好。
總結:分析反卷積網絡的對各層feature map可視化的結果可知,CNN中會學到圖像中的一些主要特征,如狗頭,鼻子眼睛,紋理,輪廓等内容。但對特征圖可視化有個明顯的不足,即無法可視化圖像中哪些區域對識别具體某個類别的作用,這個主要是使用CAM系列的方法,會在第三篇文章中介紹。下一篇将介紹可視化卷積核的方法。将放在公衆号的技術總結部分。
參考論文:
《Visualizing and Understanding Convolutional Networks》
《Striving for Simplicity:The All Convolutional Net》
歡迎關注公衆号 CV技術指南 ,專注于計算機視覺的技術總結、最新技術跟蹤、經典論文解讀。
在公衆号中回複關鍵字 “入門指南“可擷取計算機視覺入門所有必備資料。
其它文章
ML2021 | PatrickStar:通過基于塊的記憶體管理實作預訓練模型的并行訓練
ICCV2021 | PnP-DETR:用Transformer進行高效的視覺分析
ICCV2021 | 醫學影像等小資料集的非自然圖像領域能否用transformer?
ICCV2021 | Vision Transformer中相對位置編碼的反思與改進
ICCV2021 | TransFER:使用Transformer學習關系感覺的面部表情表征
2021-視訊監控中的多目标跟蹤綜述
統一視角了解目标檢測算法:最新進展分析與總結
全面了解目标檢測中的anchor | 姿态估計綜述
目标檢測中回歸損失函數總結 | 小目标檢測常用方法總結
視覺Transformer綜述 | 2021年小目标檢測最新研究綜述
Siamese network綜述 | 小目标檢測的一些問題,思路和方案
視訊了解綜述:動作識别、時序動作定位、視訊Embedding
從CVPR 2021的論文看計算機視覺的現狀
ICCV2021 | MicroNet:以極低的 FLOPs 改進圖像識别
ICCV2021 | 重新思考視覺transformers的空間次元
CVPR2021 | TransCenter: transformer用于多目标跟蹤算法
CVPR2021 | 開放世界的目标檢測
CVPR2021 | TimeSformer-視訊了解的時空注意模型
CVPR2021 | 一個高效的金字塔切分注意力子產品PSA
CVPR2021 | 特征金字塔的新方式YOLOF
經典論文系列 | 重新思考在ImageNet上的預訓練
經典論文系列 | Group Normalization & BN的缺陷
經典論文系列 | 目标檢測--CornerNet & anchor boxes的缺陷
經典論文系列 | 縮小Anchor-based和Anchor-free檢測之間差距的方法:自适應訓練樣本選擇