美文网首页深度学习
2020 机器是如何认识世界的(3)

2020 机器是如何认识世界的(3)

作者: zidea | 来源:发表于2020-08-19 20:10 被阅读0次
computer_vision.png

今天我们介绍另一种可视化技术帮助你理解卷积神经网是如何做到读取图片来进行图像识别分类。准备用一张热力图将机器通过对图片那部分区域感兴趣来实现对图片识别的。

我们为 vgg16 输入一张图片,vgg16 输出一个 14 \times 14 \times 512 特征图,然后根据这张特征图就可以获取足够信息对图片进行分类。

\frac{\partial class}{\partial channel}

我们通过变动特征图,然后最终 VGG16 对图片识别结果影响有多大。然后在对同一个位置 215 通道的值进行平均就可以得到哪些位置对机器作出决定影响的程度。

最后我们用热力图来表示我们模型关注哪些部分得到最后结果。

cat_heatmap.jpg

一起看看代码。

from tensorflow.keras.applications.vgg16 import preprocess_input
from tensorflow.keras.preprocessing.image import load_img
from tensorflow.keras.models import load_model

from tensorflow.keras import preprocessing
from tensorflow.keras import backend as K
from tensorflow.keras import models

import tensorflow as tf
import numpy as np

import matplotlib.pyplot as plt
import cv2
image_size = 224

# Load pre-trained Keras model and the image to classify
model = tf.keras.applications.vgg16.VGG16()
# image = np.random.random((image_size, image_size, 3))
img_path = 'cat.jpeg'
image = load_img(img_path,target_size=(224,224))

img_tensor = preprocessing.image.img_to_array(image)
img_tensor = np.expand_dims(img_tensor, axis=0)
img_tensor = preprocess_input(img_tensor)

conv_layer = model.get_layer("block5_conv3")
heatmap_model = models.Model([model.inputs], [conv_layer.output, model.output])

# Get gradient of the winner class w.r.t. the output of the (last) conv. layer
with tf.GradientTape() as gtape:
    conv_output, predictions = heatmap_model(img_tensor)
    loss = predictions[:, np.argmax(predictions[0])]
    grads = gtape.gradient(loss, conv_output)
    pooled_grads = K.mean(grads, axis=(0, 1, 2))

heatmap = tf.reduce_mean(tf.multiply(pooled_grads, conv_output), axis=-1)
heatmap = np.maximum(heatmap, 0)
max_heat = np.max(heatmap)
if max_heat == 0:
    max_heat = 1e-10
heatmap /= max_heat

# heatmap = np.mean(conv_layer_output_value,axis=-1)

# heatmap = np.maximum(heatmap,0)
# heatmap/=np.max(heatmap)

heatmap = heatmap.reshape(14,14)
# print(heatmap)
plt.matshow(heatmap)
plt.savefig("cat_heatmap.jpg")

# print(heatmap.shape)

img = cv2.imread(img_path)
heatmap = cv2.resize(heatmap,(img.shape[1],img.shape[0]))
heatmap = np.uint8(255 * heatmap)
heatmap = cv2.applyColorMap(heatmap,cv2.COLORMAP_JET)
superimposed_img = heatmap * 0.4 + img

cv2.imwrite('vis_cat_res_01.jpg',superimposed_img)

cat.jpeg vis_cat_res_01.jpg

相关文章

  • 2020 机器是如何认识世界的(3)

    今天我们介绍另一种可视化技术帮助你理解卷积神经网是如何做到读取图片来进行图像识别分类。准备用一张热力图将机器通过对...

  • 2020 机器是如何认识世界的(1)

    甜点 深度学习中神经网推动计算机视觉,在分类和目标检测上取得优益成绩。打了一个漂亮翻身战,再次推动机器学习向前迈出...

  • 凯文·凯利《失控》小记

    未来的世界将是一个生物与机器联姻的时代。在这个全新的时代,我们人类该如何理解他?又如何认识我们自己?该如何在这个时...

  • AI前景分析

    序言 前面写的机器学习系列对加深AI的认识很有帮助,它有助于我们了解AI的底层技术原理,理解AI如何认识和改造世界...

  • 《西部世界》呈现的是未来文明?错!是创世纪!|【闲剧】

    《西部世界》真的是一部描写未来人类和机器人如何相处,机器人如何发展的美剧吗? 错! 《西部世界》(以下简称《西》)...

  • 2020-03-11

    时光机器转眼就穿越到了2020年3月份,2020年不管是对于个人还是对于这个世界,必定都是难忘的一年。19年年底开...

  • 看完这十五部顶级金融类电影,你赚不到钱过来打我!

    废话不多说,直接上干货: 1、经济机器是如何运行的 2、货币崛起:世界金融简史 3、百万美金交易员 4、货币 5、...

  • 面试题

    1、谈谈你对跨域的认识,或者两台机器,a机器请求b机器上的数据,如何处理? 对于这样的问题,我是这样看的,由于多台...

  • 你是如何认识这个世界的?

    我几乎不想再看以前的文章,说起来是真的,我不知道我那时候到底要表达什么? 即使思想上的改变看不出来,今年五月份以来...

  • TensorFlow实战(三)-简介和开发环境搭建

    3-1 什么是tensorflow 3-2 tensorflow和其他机器学习库的对比 3-3 如何学习tenso...

网友评论

    本文标题:2020 机器是如何认识世界的(3)

    本文链接:https://www.haomeiwen.com/subject/nsfhtktx.html