日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

可视化卷及神经网络热力图

發(fā)布時(shí)間:2025/4/16 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 可视化卷及神经网络热力图 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我們這里介紹的一種可視化方法,它有助于了解一張圖像的哪一部分讓卷積神經(jīng)網(wǎng)絡(luò)做出了最終的分類(lèi)決策。這有助于對(duì)卷積神經(jīng)網(wǎng)絡(luò)的決策過(guò)程進(jìn)行調(diào)試,特別是分類(lèi)錯(cuò)誤的情況下。這種方法可以定位圖像中的特定目標(biāo)。

我們使用預(yù)訓(xùn)練的VGG網(wǎng)絡(luò)來(lái)演示這種方法。

from keras.applications.vgg16 import VGG16K.clear_session() model = VGG16(weights='imagenet')


如圖所示,這是兩只非洲象的圖片。我們將這張圖片轉(zhuǎn)換為VGG16能夠讀取的格式:模型大小為224224的圖像上進(jìn)行訓(xùn)練,這些訓(xùn)練圖像都根據(jù)keras.applications.vgg16.preprocess_input函數(shù)中的內(nèi)置的規(guī)則進(jìn)行預(yù)處理。因此,我們需要加載圖像,將其大小調(diào)整為224224,然后將其轉(zhuǎn)化為float32格式的Numpy張量,并應(yīng)用這些預(yù)處理規(guī)則。

from keras.preprocessing import image from keras.applications.vgg16 import preprocess_input, decode_predictions import numpy as npimg_path = '/Users/fchollet/Downloads/creative_commons_elephant.jpg'img = image.load_img(img_path, target_size=(224, 224)) # 大小為224*224的Python圖像庫(kù)圖像x = image.img_to_array(img) # 形狀為(224, 224, 3)的float32格式Numpy數(shù)組x = np.expand_dims(x, axis=0) # 添加一個(gè)維度,將數(shù)組轉(zhuǎn)化為(1, 224, 224, 3)的形狀批量x = preprocess_input(x) #按批量進(jìn)行預(yù)處理(按通道顏色進(jìn)行標(biāo)準(zhǔn)化)

可以在圖像上運(yùn)行預(yù)訓(xùn)練的VGG16網(wǎng)絡(luò),并將預(yù)測(cè)向量解碼為我們可以讀的形式。

preds = model.predict(x) print('Predicted:', decode_predictions(preds, top=3)[0])

Predicted: [(‘n02504458’, ‘African_elephant’, 0.90942144), (‘n01871265’, ‘tusker’, 0.08618243), (‘n02504013’, ‘Indian_elephant’, 0.0043545929)]

對(duì)這個(gè)圖像預(yù)測(cè)的前三個(gè)類(lèi)別分別是:

  • 非洲象:92.5%的概率
  • 長(zhǎng)牙動(dòng)物:7%的概率
  • 印度象:0.4%的概率

網(wǎng)絡(luò)認(rèn)為預(yù)測(cè)向量中最大激活的元素對(duì)應(yīng)是“非洲象”類(lèi)別的元素,索引編號(hào)386

np.argmax(preds[0])

386

為了展示圖像中哪些部分最像非洲象,我們使用Grad-CAM算法:

african_elephant_output = model.output[:, 386] # 預(yù)測(cè)向量中的非洲象元素last_conv_layer = model.get_layer('block5_conv3') # block5_conv3層的輸出特征圖,它是VGG16的最后一個(gè)卷積層grads = K.gradients(african_elephant_output, last_conv_layer.output)[0] # 非洲象類(lèi)別相對(duì)于block5_conv3輸出特征圖的梯度pooled_grads = K.mean(grads, axis=(0, 1, 2)) # 形狀是(512, )的向量,每個(gè)元素是特定特征圖通道的梯度平均大小iterate = K.function([model.input], [pooled_grads, last_conv_layer.output[0]]) # 這個(gè)函數(shù)允許我們獲取剛剛定義量的值:對(duì)于給定樣本圖像,pooled_grads和block5_conv3層的輸出特征圖pooled_grads_value, conv_layer_output_value = iterate([x]) # 給我們兩個(gè)大象樣本圖像,這兩個(gè)量都是Numpy數(shù)組for i in range(512):conv_layer_output_value[:, :, i] *= pooled_grads_value[i] # 將特征圖數(shù)組的每個(gè)通道乘以這個(gè)通道對(duì)大象類(lèi)別重要程度heatmap = np.mean(conv_layer_output_value, axis=-1) # 得到的特征圖的逐通道的平均值即為類(lèi)激活的熱力圖 heatmap = np.maximum(heatmap, 0) heatmap /= np.max(heatmap) plt.matshow(heatmap) plt.show()

最后,我們可以用OpenCV來(lái)生成一張圖像,將原始圖像疊加在剛剛得到的熱力圖上

import cv2img = cv2.imread(img_path) # 用cv2加載原始圖像heatmap = cv2.resize(heatmap, (img.shape[1], img.shape[0])) # 將熱力圖的大小調(diào)整為與原始圖像相同heatmap = np.uint8(255 * heatmap) # 將熱力圖轉(zhuǎn)換為RGB格式heatmap = cv2.applyColorMap(heatmap, cv2.COLORMAP_JET) # 將熱力圖應(yīng)用于原始圖像superimposed_img = heatmap * 0.4 + img # 這里的0.4是熱力圖強(qiáng)度因子cv2.imwrite('/Users/fchollet/Downloads/elephant_cam.jpg', superimposed_img) # 將圖像保存到硬盤(pán)

更多精彩內(nèi)容,歡迎關(guān)注我的微信公眾號(hào):數(shù)據(jù)瞎分析

總結(jié)

以上是生活随笔為你收集整理的可视化卷及神经网络热力图的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。