成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何可視化卷積網絡分類圖像時關注的焦點

開發 開發工具
在我們使用 CNN 進行圖片分類時,模型到底關注的是圖像的哪個區域?Grad-CAM 利用卷積網絡最后一個特征圖的信息,并加權對應的梯度而構建模型分類的熱力圖,通過該熱力圖,我們可以清楚地了解哪一塊區域對于類別是最重要的。

你在訓練神經網絡進行圖片分類時,有沒有想過網絡是否就是像人類感知信息一樣去理解圖像?這個問題很難回答,因為多數情況下深度神經網絡都被視作黑箱。我們喂給它輸入數據進而得到輸出。整個流程如果出現問題很難去調試。盡管預測的已經相當精準,但這并不能說明他們足以和人類感知的方式媲美。

[[222327]]

為何會這樣?

假設你需要對大象和企鵝進行二分類(我知道這個任務十分簡單)。現在你已經獲取了數據集,訓好了模型并完成部署。這個模型想必是適用于絕大多數數據的,但是總有可能會出現誤判。有人可能會把它看作是一個極端情況,但是你覺得對于 CNN 來說,什么時候物體才是明確可辨的?

結合上述內容,顯然在圖像中,大象常伴著草木出現,企鵝常伴著冰雪出現。所以,實際上模型已經學會了分辨草木與冰雪的顏色/形狀,而不是真的學會了按對象分類。

由上文案例知,如顏色通道統計那樣的簡單圖像處理技術,與訓練模型是一樣的。因為在沒有智能的情況下,模型只能依靠顏色辯物。現在你或許會問,如何知道 CNN 究竟在尋找什么?答案就是,Grad-CAM。

加權梯度類激活映射(Grad-CAM)

我們在本篇博客中實現了加權梯度類激活映射。首先,我們要知道這不是唯一的解決方案。原作說,

加權梯度類激活映射 (Grad-CAM) 通過任意目標概念的梯度(比如說類別「狗」的分對數甚至是「狗」這個字),將這些知識傳遞到***的卷積層進而產生一張粗略的定位圖,用于凸顯圖像中對于預測相關概念至關重要的區域。

通俗點講,我們只取最終卷積層的特征圖,然后將該特征中的每個通道通過與該通道相關的類的梯度進行加權。這種方法只不過是輸入圖像如何通過每個通道對于類的重要性來激活不同的通道,最重要的是它不需要對現有架構進行任何重訓練或更改。

特定類的特征空間得分就是對應類的輸出值 y^c 關于特征圖 A_ij 的偏導在 i 和 j 維上的特征進行全局平均池化操作。然后,我們將結果與特征圖沿其通道軸 k 相乘。***,將結果在通道維度 k 上求平均/池化。因此,特征空間的得分凸的大小是 i×j。Σ 符號用于描述池化和平均操作。

ReLU 激活函數用于得分圖,隨后被歸一化以便輸出正區域預測

ReLU 激活函數用于得分圖,隨后被歸一化以便輸出正區域預測

實現

為了達到本篇博客的目的,我們套用一個預訓練好的 VGG 模型,并導入一些必要包開始實現代碼。

  1. from keras.applications.vgg16 import VGG16, preprocess_input, decode_predictions 
  2. from keras.preprocessing import image 
  3. import keras.backend as K 
  4. import numpy as np 
  5. import cv2 
  6. import sys 

我們使用 Keras 自帶的 VGG16 模型。并加載一些有助于加載和處理圖像的函數。

  1. model = VGG16(weights="imagenet"
  2. img_path = sys.argv[1] 
  3. img = image.load_img(img_path, target_size=(224, 224)) 
  4. x = image.img_to_array(img) 
  5. x = np.expand_dims(x, axis=0
  6. x = preprocess_input(x) 

我們先初始化模型并通過命令行參數加載圖片。VGG 網絡只接受 (224×224×3) 大小的圖片,所以我們要把圖片放縮到指定大小。由于我們只通過網絡傳遞一個圖像,因此需要擴展***個維度,將其擴展為一個大小為 1 的批量。然后,我們通過輔助函數 preprocess_input 從輸入圖像中減去平均 RGB 值來實現圖像的歸一化。

  1. preds = model.predict(x) 
  2. class_idx = np.argmax(preds[0]) 
  3. class_output = model.output[:, class_idx] 
  4. last_conv_layer = model.get_layer("block5_conv3") 

此處,我們來看看頂部預測的特征圖。所以我們得到圖像的預測,并給得分靠前的類做個索引。請記住,我們可以為任意類計算特征圖。然后,我們可以取出 VGG16 中***一個卷積層的輸出 block5_conv3。得到的特征圖大小應該是 14×14×512。

  1. grads = K.gradients(class_output, last_conv_layer.output)[0] 
  2. pooled_grads = K.mean(grads, axis=(0, 1, 2)) 
  3. iterate = K.function([model.input], [pooled_grads, last_conv_layer.output[0]]) 
  4. pooled_grads_value, conv_layer_output_value = iterate([x]) 
  5. for i in range(512): 
  6.  conv_layer_output_value[:, :, i] *= pooled_grads_value[i] 

如上所述,我們計算相類輸出值關于特征圖的梯度。然后,我們沿著除了通道維度之外的軸對梯度進行池化操作。***,我們用計算出的梯度值對輸出特征圖加權。

  1. heatmap = np.mean(conv_layer_output_value, axis=-1) 
  2. heatmap = np.maximum(heatmap, 0) 
  3. heatmap /= np.max(heatmap) 

然后,我們沿著通道維度對加權的特征圖求均值,從而得到大小為 14*14 的熱力圖。***,我們對熱力圖進行歸一化處理,以使其值在 0 和 1 之間。

  1. img = cv2.imread(img_path) 
  2. heatmap = cv2.resize(heatmap, (img.shape[1], img.shape[0])) 
  3. heatmap = np.uint8(255 * heatmap) 
  4. heatmap = cv2.applyColorMap(heatmap, cv2.COLORMAP_JET) 
  5. superimposed_img = cv2.addWeighted(img, 0.6, heatmap, 0.4, 0) 
  6. cv2.imshow("Original", img) 
  7. cv2.imshow("GradCam", superimposed_img) 
  8. cv2.waitKey(0) 

***,我們使用 OpenCV 來讀圖片,將獲取的熱力圖放縮到原圖大小。我們將原圖和熱力圖混合,以將熱力圖疊加到圖像上。

從上面的圖片可以清楚地看到 CNN 在圖像中尋找的是區分這些類的地方。這種技術不僅適用于定位,還可用于視覺問答、圖像標注等。

此外,它在調試建立精確模型的數據需求方面非常有幫助。雖然此技術并未過多涉及調參,但我們可以使用額外的數據和數據增強技術更好地泛化模型。

原文鏈接:http://www.hackevolve.com/where-cnn-is-looking-grad-cam/

【本文是51CTO專欄機構“機器之心”的原創譯文,微信公眾號“機器之心( id: almosthuman2014)”】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2018-04-03 14:42:46

Python神經網絡深度學習

2022-06-16 10:29:33

神經網絡圖像分類算法

2018-08-28 16:45:38

圖像識別神經網絡人工智能

2010-06-09 15:09:57

IP網絡

2025-02-21 10:09:44

DINOv2圖像分類開發

2022-06-06 21:46:32

Kubernetes網絡

2020-03-11 14:39:26

數據可視化地圖可視化地理信息

2017-09-11 13:33:44

大數據數據可視化決策樹

2017-02-16 09:30:04

數據可視化信息

2021-07-21 12:00:41

數據可視化人工智能

2017-10-14 13:54:26

數據可視化數據信息可視化

2022-08-26 09:15:58

Python可視化plotly

2013-12-06 10:05:29

數據中心網絡操作可視化

2009-04-21 14:26:41

可視化監控IT管理摩卡

2015-11-06 14:19:03

博科網絡可視化

2020-10-26 15:33:13

可視化數據項目

2016-07-29 13:22:09

2022-06-29 08:28:58

數據可視化數據可視化平臺

2014-02-18 10:19:44

2021-04-09 10:42:03

數據可視化框架大數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美精品在欧美一区二区 | 国产亚洲一区二区精品 | 国产午夜精品视频 | 极品的亚洲 | 欧美精品欧美精品系列 | 欧美性受xxxx白人性爽 | 亚洲黄色一级毛片 | 久久久久久久综合 | 久草免费在线 | www97影院| 91五月天 | 欧美日韩视频在线第一区 | 日韩中文字幕一区 | 久久久涩 | 久久久久国产精品 | 一级毛片在线播放 | 日韩午夜电影 | 久久久久久精 | 精品欧美一区二区中文字幕视频 | 在线色| 日韩欧美二区 | 欧洲亚洲一区二区三区 | 欧美福利视频一区 | 91文字幕巨乱亚洲香蕉 | 午夜寂寞影院列表 | 亚洲综合国产精品 | 久久精彩 | 亚洲情综合五月天 | 亚洲成人一区二区三区 | 午夜视频在线免费观看 | 日韩在线一区二区三区 | 国产一区h | av在线电影网 | av免费网站在线观看 | 黄片毛片在线观看 | 日韩一区二区三区视频在线观看 | 91精品国产色综合久久不卡98口 | 一区在线观看 | 国产乱码精品一品二品 | 龙珠z在线观看 | 欧美一a |