目录

  • 概述
  • requirements
  • 代码实现
    • 1. 计算梯度图
    • 2. 计算热图
    • 3. 批量保存
  • 源代码
  • 参考

概述

跑完计算机视觉模型后,想要看特征图(注意力图)的激活区域对应原图的位置,则需要将激活度大于阈值的特征点标识出来,并将其上采样到原图大小,和原图按一定比例覆盖,可视化效果如下:

requirements

  1. 环境:
  • torch >= 1.6
  • torchvision >= 0.8
  • numpy
  • opencv
  • timm
  • 若版本不对,可参考笔者使用torch = 1.8,torchvison = 0.9
  1. 配置文件

.yaml 格式的config文件
包含内容如下,

  1. 权重

想要验证的 .pth 模型权重,需要和选用的模型匹配

代码实现

1. 计算梯度图

def simple_grad_cam(features, classifier, target_class):# 得到特征图features = nn.Parameter(features) # 计算分类结果logits = torch.matmul(features, classifier)# 回传logits[0, :, :, target_class].sum().backward()# 计算梯度features_grad = features.grad[0].sum(0).sum(0).unsqueeze(0).unsqueeze(0)# relu后归一化gramcam = F.relu(features_grad * features[0])gramcam = gramcam.sum(-1)gramcam = (gramcam - torch.min(gramcam)) / (torch.max(gramcam) - torch.min(gramcam))return gramcam

2. 计算热图

def get_heat(model, img):# 只需要前向传播过程with torch.no_grad():outs = model.forward_backbone(img.unsqueeze(0))# 得到特征features = []for name in outs:features.append(outs[name][0])# 每一层的权重layer_weights = [8, 4, 2, 1]# 初始化热图heatmap = np.zeros([args.data_size, args.data_size, 3])# 预处理每一张特征图for i in range(len(features)):f = features[i]f = f.cpu()if len(f.size()) == 2:S = int(f.size(0) ** 0.5)f = f.view(S, S, -1)# 调用simple_grad_cam计算梯度图gramcam = simple_grad_cam(f.unsqueeze(0), classifier=torch.ones(f.size(-1), 200)/f.size(-1), target_class=args.target_class)gramcam = gramcam.detach().numpy()# resize到原图大小gramcam = cv2.resize(gramcam, (args.data_size, args.data_size))# 热图颜色默认为红色heatmap[:, :, 2] += layer_weights[i] * gramcam# 按权重分配激活度heatmap = heatmap / sum(layer_weights)# 归一化heatmap = (heatmap - heatmap.min()) / (heatmap.max() - heatmap.min())heatmap[heatmap < args.threshold] = 0 # threshold# 从张量图变为RGBheatmap *= 255heatmap = heatmap.astype(np.uint8)return heatmap

3. 批量保存

if args.save_img_path != "":file_n = "mix" + os.path.basename(img_p)cv2.imwrite(os.path.join(args.save_img_path,file_n) , mix)

源代码

源代码

参考

https://github.com/chou141253/FGVC-PIM/

【深度学习】利用python画注意力热点图(heatmap)相关推荐

  1. boxplot用法 python,[Python画图笔记]利用Python画箱型图boxplot

    [Python画图笔记]利用Python画箱型图boxplot [Python画图笔记]利用Python画箱型图boxplot 最近在学习使用Python画图,想用subplot画两幅箱型图,分别用来 ...

  2. python画折线图详解-利用python画出折线图

    本文实例为大家分享了python画折线图的具体代码,供大家参考,具体内容如下 # encoding=utf-8 import matplotlib.pyplot as plt from pylab i ...

  3. python画折线图-利用python画出折线图

    本文实例为大家分享了python画折线图的具体代码,供大家参考,具体内容如下 # encoding=utf-8 import matplotlib.pyplot as plt from pylab i ...

  4. 深度学习-根据日志画loss-acc折线图

    根据训练后的log日志画训练的loss-acc折线图 import matplotlib.pyplot as plt l_n = 0 a_n = 0 loss_x = [] loss_y = [] a ...

  5. 利用Python画随机水墨图

    最近公司的事情忙的一逼,前段时间学的python再不看看等于又还回去了 上次再老婆大人的创意下,做了一个觉得比较好玩的图片出来.没错,就是用python来作图! 原理解释其实就是采用了python中的 ...

  6. 利用python画外汇蜡烛图

    导入本地数据集,进行数据处理,再进行画图 import numpy as np import matplotlib.pyplot as plt import pandas as pd import d ...

  7. 数据挖掘之利用Python画相关性矩阵图

    #导入库 import pandas import seaborn as sns import numpy as np import os import matplotlib.pyplot as pl ...

  8. opencv 计数后不动了 训练模型时_用OpenCV,深度学习和Python进行年龄识别

    (给Python编程开发加星标,提升编程技能.) 在本教程中,您将学习如何使用OpenCV,深度学习和Python执行年龄的自动识别/预测. 学完本教程后,您将能够以相当高的精确度去自动预测静态图像文 ...

  9. python画一颗心_利用python画一颗心的方法示例

    前言 Python一般使用Matplotlib制作统计图形,用它自己的说法是'让简单的事情简单,让复杂的事情变得可能'.用它可以制作折线图,直方图,条形图,散点图,饼图,谱图等等你能想到的和想不到的统 ...

最新文章

  1. 以太坊怎么注册_以太坊2.0将至,牛市即将到来??
  2. 再写顺序表(c语言实现,外加冒泡排序,二分查找)
  3. 【响应式编程的思维艺术】 (3)flatMap背后的代数理论Monad
  4. ansys icem cfd网格划分技术实例详解_新软速递极简的CFD软件in:Flux
  5. 再说过程和结果的关系
  6. tpch测试mysql_MySQL数据库之MySQL-tpch 测试工具简要手册
  7. Unity用GUI绘制Debug/print窗口/控制台-打包后测试
  8. 测试驱动开发(TDD)的理论基础
  9. Quartz 定时任务时间表达式说明
  10. 反编译 APK 的基本步骤
  11. 有向图的拓扑排序算法JAVA实现。
  12. css 效果之并列排列
  13. 计算机主页为什么打不开怎么办,电脑输入192.168.1.1管理页面打不开怎么办
  14. kubeadm安装K8s 1.16集群--问题集锦
  15. 开个什么店赚钱?这5种实体店,妥妥的推荐!
  16. ie不显示html图片不显示,IE浏览器图片显示不出来 IE浏览器图片不显示解决办法...
  17. 学习笔记整理:网络应用技术-计算机网络概论
  18. 2009年9月刊《程序员》算法题之我见——思索之一
  19. 三相逆变器双pi控制器参数如何调节_学术简报︱如何解决并网逆变器的重复控制器积分饱和问题?...
  20. lte接口流程图_LTE--随机接入流程

热门文章

  1. c语言iota函数,C++ iota函数用法详解
  2. 写给自己:入职两个月的收获与变化
  3. TED : Tips to boost your confidence
  4. 同时删除多个 PDF 文档前几页
  5. 友盟推送 php,laravel5.4+umeng(友盟)集成app消息推送功能
  6. Apple 软件产品使用的 TCP 和 UDP 端口
  7. vcenter server安装到第二阶段无法“下一步“问题解决
  8. 乘法计算机公式,在word中乘法的函数公式计算公式
  9. Java回炉学习(一)
  10. MATLAB读取nc数据并显示