【Grad-Cam】pycaffe实现

2024-08-27 17:18
文章标签 实现 cam grad pycaffe

本文主要是介绍【Grad-Cam】pycaffe实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 python获取梯度脚本

# -*- coding: UTF-8 -*-
import sys
import shutil
import os
sys.path.insert(0, "caffe/python")
import caffe
import numpy as np
import dicom
import cv2
from scipy.misc import bytescale
from matplotlib import pyplot as plt
from PIL import Image
import matplotlib.cm as cmdef process(source, IMAGE_SIZE=227):ds = dicom.read_file(source)pixel_array = ds.pixel_arrayheight, width = pixel_array.shapeif height < width:pixel_array = pixel_array[:, int((width - height) / 2):int((width + height) / 2)]else:pixel_array = pixel_array[int((height - width) / 2):int((width + height) / 2), :]im = cv2.resize(pixel_array, (IMAGE_SIZE, IMAGE_SIZE))im = bytescale(im)# im = im / 256im = np.dstack((im, im, im))im = im[:, :, [2, 1, 0]]input_im = im.transpose((2, 0, 1))return im, input_imcaffe.set_mode_cpu()net = caffe.Net("bone/alexnet_deploy.prototxt", "bone/all_alexnet_train_iter_8000.caffemodel", caffe.TEST)
net.blobs['data'].reshape(1, 3, 227, 227)## output layer
final_layer = 'my-fc8' #这是你的输出层,比如最后一层经过softmax一般喜欢叫prob,就改为prob即可
### the last conv layer or any else you want to visualize
layer_name = 'conv1'def visualize(input_im):net.blobs['data'].data[...] = input_imoutput = net.forward()predict_age = output['my-fc8'][0][0]label = np.zeros(net.blobs[final_layer].shape)label[0, 0] = predict_ageimdiff = net.backward(diffs=['data', layer_name], **{net.outputs[0]: label})gradients = imdiff[layer_name]vis_grad = np.squeeze(gradients)mean_grads = np.mean(vis_grad, axis=(1, 2))activations = net.blobs[layer_name].dataactivations = np.squeeze(activations)n_nodes = activations.shape[0] # number of nodelsvis_size = activations.shape[1:] #visualization shapevis = np.zeros(vis_size, dtype=np.float32)#generating saliency imagefor i in xrange(n_nodes):activation = activations[i, :, :]weight = mean_grads[i]weighted_activation = activation*weightvis += weighted_activation# We select only those activation which has positively contributed in prediction of given classvis = np.maximum(vis, 0)   # reluvis_img = Image.fromarray(vis, None)vis_img = vis_img.resize((227,227),Image.BICUBIC)vis_img = vis_img / np.max(vis_img)vis_img = Image.fromarray(np.uint8(cm.jet(vis_img) * 255))vis_img = vis_img.convert('RGB') # dropping alpha channelreturn vis_img### for one image
# im, input_im = process('/Users/hzzone/Downloads/data/male/11.00-11.99/15696275')
# vis_img = visualize(input_im)
# im = Image.fromarray(im)
#
# heat_map = Image.blend(im, vis_img, 0.3)
# heat_map = np.array(heat_map)
#
# plt.imsave('h1.jpg', heat_map)
# plt.imshow(heat_map)
# plt.axis('off')
# plt.show()### For a foldersave_dir = './data'
data_dir = u'/Volumes/Seagate Backup Plus Drive/深度学习数据集/盆骨'for root, dirs, files in os.walk(data_dir):for file_name in files:dicom_file = os.path.join(root, file_name)im, input_im = process(dicom_file)vis_img = visualize(input_im)im = Image.fromarray(im)heat_map = Image.blend(im, vis_img, 0.3)heat_map = np.array(heat_map)save_path = os.path.join(save_dir, root.strip(data_dir))if not os.path.exists(save_path):os.makedirs(save_path)save_path = os.path.join(save_path, file_name)print(save_path)plt.imsave(save_path, heat_map)

prototxt文件

关键:force_backward: true

name: "AlexNet"
input: "data"
input_dim: 1
input_dim: 3
input_dim: 227
input_dim: 227
force_backward: true

 参考

GitHub - Hzzone/grad-CAM-pycaffe: grad-CAM visulization technique of pycaffe, regression task of Medical Image.
https://github.com/gautamMalu/caffe-gradCAM

这篇关于【Grad-Cam】pycaffe实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1112278

相关文章

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

Go Mongox轻松实现MongoDB的时间字段自动填充

《GoMongox轻松实现MongoDB的时间字段自动填充》这篇文章主要为大家详细介绍了Go语言如何使用mongox库,在插入和更新数据时自动填充时间字段,从而提升开发效率并减少重复代码,需要的可以... 目录前言时间字段填充规则Mongox 的安装使用 Mongox 进行插入操作使用 Mongox 进行更

MySQL修改密码的四种实现方式

《MySQL修改密码的四种实现方式》文章主要介绍了如何使用命令行工具修改MySQL密码,包括使用`setpassword`命令和`mysqladmin`命令,此外,还详细描述了忘记密码时的处理方法,包... 目录mysql修改密码四种方式一、set password命令二、使用mysqladmin三、修改u

Java实现状态模式的示例代码

《Java实现状态模式的示例代码》状态模式是一种行为型设计模式,允许对象根据其内部状态改变行为,本文主要介绍了Java实现状态模式的示例代码,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来... 目录一、简介1、定义2、状态模式的结构二、Java实现案例1、电灯开关状态案例2、番茄工作法状态案例

一文教你使用Python实现本地分页

《一文教你使用Python实现本地分页》这篇文章主要为大家详细介绍了Python如何实现本地分页的算法,主要针对二级数据结构,文中的示例代码简洁易懂,有需要的小伙伴可以了解下... 在项目开发的过程中,遇到分页的第一页就展示大量的数据,导致前端列表加载展示的速度慢,所以需要在本地加入分页处理,把所有数据先放

SpringMVC前后端传值的几种实现方式

《SpringMVC前后端传值的几种实现方式》本文主要介绍了SpringMVC前后端传值的方式实现,包括使用HttpServletRequest、HttpSession、Model和ModelAndV... 目录一、从Controller层到JSP界面1、使用HttpServletRequest的方式2、使

树莓派启动python的实现方法

《树莓派启动python的实现方法》本文主要介绍了树莓派启动python的实现方法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、RASPBerry系统设置二、使用sandroidsh连接上开发板Raspberry Pi三、运

SpringBoot定制JSON响应数据的实现

《SpringBoot定制JSON响应数据的实现》本文主要介绍了SpringBoot定制JSON响应数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录前言一、如何使用@jsonView这个注解?二、应用场景三、实战案例注解方式编程方式总结 前言

SpringBoot整合DeepSeek实现AI对话功能

《SpringBoot整合DeepSeek实现AI对话功能》本文介绍了如何在SpringBoot项目中整合DeepSeekAPI和本地私有化部署DeepSeekR1模型,通过SpringAI框架简化了... 目录Spring AI版本依赖整合DeepSeek API key整合本地化部署的DeepSeek

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表