CNN視覺化技術總結(三)--類視覺化
CNN視覺化技術總結(一)-特徵圖視覺化
CNN視覺化技術總結(二)--卷積核可視化
導言:
前面我們介紹了兩種視覺化方法,特徵圖視覺化和卷積核可視化,這兩種方法在論文中都比較常見,這兩種更多的是用於分析模型在某一層學習到的東西。在理解這兩種視覺化方法,很容易理解影象是如何經過神經網路後得到識別分類。
然而,上次我在知乎看到一個通過yolov3做跌倒檢測,希望加上人臉識別進行多工學習從而提高準確率的提問。這明顯提問者並不理解神經網路是如何對這種帶有時間維度的視訊進行分析從而實現行為識別,從本質上來講,這其實是不理解神經網路具體是如何識別一個類的。因此,當在這一點上理解錯誤後,所進行的模型選擇、方案設計和改進,就都是不合理的。
(我在知乎上回答了這個問題正確的跌倒檢測思路應該是什麼,感興趣的可以去看看,我的知乎id是彷彿若有光)
因此,在本文中,我們將介紹一種對於不同的類,如何知道模型根據哪些資訊來識別的方法,即對類進行視覺化,通俗一點來說就是熱力圖。這個方法主要是CAM系列,目前有CAM, Grad-CAM, Grad-CAM++。
CAM(Class Activation Map)
如上圖所示,CAM的結構由CNN特徵提取網路,全域性平均池化GAP,全連線層和Softmax組成。
實現原理:一張圖片在經過CNN特徵提取網路後得到feature maps, 再對每一個feature map進行全域性平均池化,變成一維向量,再經過全連線層與softmax得到類的概率。
假定在GAP前是n個通道,則經過GAP後得到的是一個長度為1x n的向量,假定類別數為m,則全連線層的權值為一個n x m的張量。(注:這裡先忽視batch-size)
對於某一個類別C, 現在想要視覺化這個模型對於識別類別C,原影象的哪些區域起主要作用,換句話說模型是根據哪些資訊得到該影象就是類別C。
做法是取出全連線層中得到類別C的概率的那一維權值,用W表示,即上圖的下半部分。然後對GAP前的feature map進行加權求和,由於此時feature map不是原影象大小,在加權求和後還需要進行上取樣,即可得到Class Activation Map。
用公式表示如下:(k表示通道,c表示類別,fk(x,y)表示feature map)
效果圖:
CAM的分析
CAM有個很致命的缺陷,它的結構是由CNN + GAP + FC + Softmax組成,也就是說如果想要視覺化某個現有的模型,但大部分現有的模型沒有GAP這個操作,此時想要視覺化便需要修改原模型結構,並重新訓練,相當麻煩,且如果模型很大,在修改後重新訓練不一定能達到原效果,視覺化也就沒有意義了。
因此,針對這個缺陷,其後續有了改進版Grad-CAM。
Grad-CAM
Grad-CAM的最大特點就是不再需要修改現有的模型結構了,也不需要重新訓練了,直接在原模型上即可視覺化。
原理:同樣是處理CNN特徵提取網路的最後一層feature maps。Grad-CAM對於想要視覺化的類別C,使最後輸出的類別C的概率值通過反向傳播到最後一層feature maps,得到類別C對該feature maps的每個畫素的梯度值,對每個畫素的梯度值取全域性平均池化,即可得到對feature maps的加權係數alpha,論文中提到這樣獲取的加權係數跟CAM中的係數幾乎是等價的。接下來對特徵圖加權求和,使用ReLU進行修正,再進行上取樣。
使用ReLU的原因是對於那些負值,可認為與識別類別C無關,這些負值可能是與其他類別有關,而正值才是對識別C有正面影響的。
用公式表示如下:
Grad-CAM的結構圖如上圖所示,對於Guided Backpropagation不瞭解的讀者,可看CNN視覺化技術總結的第一篇文章。
效果圖如下:
Grad-CAM後續還有改進版Grad-CAM++,其主要的改進效果是定位更準確,更適合同類多目標的情況,所謂同類多目標是指一張影象中對於某個類出現多個目標,例如七八個人。
改進方法是對加權係數的獲取提出新的方法,該方法複雜到不忍直視。因此這裡就不介紹了,感興趣的讀者可通過文章末尾的連結獲取該論文。
下一篇將對所有的一些視覺化工具進行總結。內容將放在CV技術總結部分。
CAM: https://arxiv.org/pdf/1512.04150.pdf
Grad-CAM: https://arxiv.org/pdf/1610.02391v1.pdf
Grad-CAM++: https://arxiv.org/pdf/1710.11063.pdf
參考論文:
1. Learning Deep Features for Discriminative Localization
2.Grad-CAM: Why did you say that?Visual Explanations from Deep Networks via Gradient-based Localization
3. Grad-cam++: Generalized gradient-based visual explanations for deep convolutional networks
本文來源於公眾號《CV技術指南》的技術總結部分,更多相關技術總結請掃描文末二維碼關注公眾號。
相關推薦
CNN視覺化技術總結(三)--類視覺化
CNN視覺化技術總結(一)-特徵圖視覺化 CNN視覺化技術總結(二)--卷積核可視化 導言: 前面我們介紹了兩種視覺化方法,特徵圖視覺化和卷積核可視化,這兩種方法在論文中都比較常見,這兩種更多的是用於分析模型在某一層學習到的東西。在理解這兩種視覺化方法,很容易理
CNN視覺化技術總結(一)--特徵圖視覺化
導言: 在CV很多方向所謂改進模型,改進網路,都是在按照人的主觀思想在改進,常常在說CNN的本質是提取特徵,但並不知道它提取了什麼特徵,哪些區域對於識別真正起作用,也不知道網路是根據什麼得出了分類結果。 &nbs
CNN視覺化技術總結(四)--視覺化工具與專案
CNN視覺化技術總結(一)-特徵圖視覺化 CNN視覺化技術總結(二)--卷積核可視化 CNN視覺化技術總結(三)--類視覺化 導言: 前面介紹了視覺化的三種方法--特徵圖視覺化,卷積核可視化,類視覺化,這三種方法在很多提出新模型或新方法的論文中很常見,其主要作用
c++學習總結(三)——類與物件
一、心得感悟 c語言的課程學習後,開始c++的學習,首先就是學習類。在學習類時,類的使用與c語言有著極大的差別,一開始學習十分別扭。c語言的學習直接定義幾個形參、函式就可以寫程式了;而到了c++學習,關於類,首先必須定義類。具有相同性質和功能的東西構成的集合,通常歸成一
SLAM學習基礎(二)——《視覺SLAM十四講》讀後感、SLAM核心技術總結(部分)
(1)《視覺SLAM十四講》_高翔 第一遍學習: 《視覺SLAM十四講》這本書,很詳細的從幾何學的角度講述了SLAM的各種核心技術。是成為一名SLAM技術的邊緣OB者的不二選擇。 本書的前六講主要是在安裝庫(當然,順道介紹書數學基礎知識),SLAM執行需要的各種庫,因為我是在ub
池化方法總結(Pooling) 和卷積 。 第三部分講的很好
影象大小與引數個數: 前面幾章都是針對小影象塊處理的,這一章則是針對大影象進行處理的。兩者在這的區別還是很明顯的,小影象(如8*8,MINIST的28*28)可以採用全連線的方式(即輸入層和隱含層直接相連)。但是大影象,這個將會變得很耗時:比如96*96的影象,若採用全連線方式,需要96*96個
solr全文檢索技術學習(三)-搭建SolrCloud叢集問題總結
什麼是SolrCloud SolrCloud(solr 雲)是Solr提供的分散式搜尋方案,當你需要大規模,容錯,分散式索引和檢索能力時使用 SolrCloud。當一個系統的索引資料量少的時候是不需要使用SolrCloud的,當索引量很大,搜尋請求併發
C++ STL開發溫習與總結(三): 3.C++函式技術
C++ STL開發溫習與總結(三): 3.C++函式技術 幾乎所有的C++類都有一個或多個建構函式,一個解構函式和一個賦值操作符。 對於任何一個類A,如果不想編寫上述函式,C++編譯器將自動為A產生4個預設的函式,如下:
學好Spark/Kafka必須要掌握的Scala技術點(三)高階函式、方法、柯里化、隱式轉換
5. 高階函式 Scala中的高階函式包含:作為值的函式、匿名函式、閉包、柯里化等,可以把函式作為引數傳遞給方法或函式。 5.1 作為值的函式 定義函式時格式: val 變數名 = (輸入引數型別和個數) => 函式實現和返回值型別和個數。 =:表示將函式賦給一個變數 =>:左面表示輸入引數名稱、
CNN結構演變總結(三)設計原則
CNN結構演變總結(一)經典模型 CNN結構演變總結(二)輕量化模型 前言: 前兩篇對一些經典模型和輕量化模型關於結構設計方面的一些創新進行了總結,在本文將對前面的一些結構設計的原則,作用進行總結。 本文將介紹兩種提升模型的表示能力的結構或方式,模型的五條設計原則,輕量化模型的四個設計方式。 &
遠程協助開發總結(三)
線程終止 判斷 call 主動 exce div 一個 解釋 tex 這裏主要總結一下這段時間對Socket編程的總結 1.如何正確的接收數據和如何正確的關閉連接 接收數據要配合正確的關閉連接來使用,關閉連接的時候要先Shutdown本地套接字,這樣遠程套接字就會Recei
css基礎知識的復習總結(三)
網頁 元素 ati 塊元素 isp 方式 一半 浮動 .cn 1.定位的盒子居中顯示 案例一:(定位的盒子居中顯示) 預期效果 實現步驟: 設置父盒子為相對定位 設置子盒子left值為父盒子寬度一半設置子盒子左邊距為自己寬度一半 總結:margin:0 auto 只能讓在
jmeter(三)參數化
ace names spa 名稱 .cn recycle 參數化 filename Coding 參數化:錄制腳本中有登錄操作,需要輸入用戶名和密碼,假如系統不允許相同的用戶名和密碼同時登錄,或者想更好的模擬多個用戶來登錄系統。 這個時候就需要對用戶名和密碼進行參數化,使每
I/O流操做總結(三)
div nta 利用 buffer 實現 als 覆蓋 字符 not 說實話,其實我並不是很喜歡Java這門語言,盡管它很強大,有很多現成的API可以調用 但我總感覺它把簡單的事情弄得太過復雜,甚至有時候會讓人迷失 弄不清到底是為了寫出東西,還是為了語言本身 我學習的第一門
基於大數據的電影網站項目開發之階段性總結(三)
字符 crc -c ... chown root per edi 第一個字符 一、基礎講解 1. 主機ping不同虛擬機 虛擬機要設置IP地址,ip段是vmware 編輯菜單-->虛擬網絡編輯器 網段, 網關:192.168.XXX.2
[轉載] java多線程總結(三)
java多線程 home gif 結果 訪問 關系 .com mon 問題 轉載自: http://www.cnblogs.com/lwbqqyumidi/p/3821389.html 作者:Windstep 本文主要接著前面多線程的兩篇文章總結Java多線程中的線程安全問
JSP學習總結(三)
vol actor time 為什麽 pso ack sta instance 9.png 四、為什麽jsp就是servlet? 打開Tomcat服務器的work目錄,找到jsp文件翻譯的java文件。類聲明如下 package org.apache.jsp; im
ADO.NET復習總結(3)--參數化SQL語句
輸入 net connect varchar 學生表 sap style text 執行過程 1、SQL 註入 2、使用參數化的方式,可以有效防止SQL註入,使用類parameter的實現類SqlParameter Command的屬性parameters是一個
springMVC學習總結(三)數據綁定
springmvc core nts 循環 ack sta attribute servle 設置 springMVC學習總結(三)數據綁定 一、springMVC的數據綁定,常用綁定類型有: 1、servlet三大域對象: HttpServletRequest Http
linux基礎知識總結(三)
界面 當前日期 ech sed文本處理 時間 sed 簡單的 編寫 代碼 第三周學習總結 目錄 一.知識脈絡圖二.shell腳本三.shell登錄方式四.文件查找和壓縮及tar五.簡單的sed文本處理 一.知識脈絡圖 二.shell腳本 1.shell腳本簡介