python批量将jpg图片转换成热力图保存并显示

import cv2
import matplotlib.pyplot as plt
import os

path ="jpg文件地址/"
dir = os.listdir(path)
for a in dir:
    stem, suffix = os.path.splitext(a
### 实现和应用 Grad-CAM 力图进行模型可视化 #### 什么是 Grad-CAM? Grad-CAM (Gradient-weighted Class Activation Mapping) 是一种用于解释卷积神经网络决策过程的技术,能够生成力图显示哪些区域对于特定分类结果最为重要[^1]。 #### 如何实现 Grad-CAM? 为了实现 Grad-CAM 将其应用于 YOLOv5 或其他计算机视觉任务中的模型上,可以遵循如下方法: 1. **准备环境** 需要安装 PyTorch 和 torchvision 库以及 Jacob Gil 的 `pytorch-grad-cam` GitHub 项目。这可以通过克隆仓库按照说明设置虚拟环境完成[^3]。 2. **加载预训练模型** 对于YOLOv5这样的目标检测器来说,通常会先加载一个已经训练好的权重文件。确保所使用的框架版本与保存的权重兼容。 3. **定义 Grad-CAM 类** 使用 `pytorch-grad-cam` 提供的功能创建自定义类实例化对象,指定想要分析的目标层(通常是最后几个卷积层之一)。以下是 Python 中的一个简单例子: ```python from pytorch_grad_cam import GradCAM target_layers = [model.model[-2]] # 假设最后一层之前的是我们感兴趣的层 cam = GradCAM(model=model, target_layers=target_layers) ``` 4. **获取输入图像及其预测标签** 准备好待处理的数据集图片路径列表,读取每张测试图片作为输入给定至模型中得到其对应的类别得分向量。 5. **计算梯度加权 CAM 图像** 调用 `cam(input_tensor)` 方法传入经过适当预处理后的批量数据 tensor 来获得相应大小的空间分布矩阵表示形式的结果;这些数值反映了不同位置的重要性程度。 6. **渲染力图与原始图像叠加** 将上述步骤产生的二维数组转换成 RGB 彩色编码格式之后再与原按一定透明度混合在一起形成最终效果展示出来。 7. **保存显示结果** 可视化的输出可以直接在屏幕上查看也可以另存为新的 PNG 文件以便后续分享交流之用。 ```python import cv2 from PIL import Image import numpy as np def show_cam_on_image(img: np.ndarray, mask: np.ndarray, use_rgb: bool = False, colormap: int = cv2.COLORMAP_JET) -> np.ndarray: heatmap = cv2.applyColorMap(np.uint8(255 * mask), colormap) if use_rgb: heatmap = cv2.cvtColor(heatmap, cv2.COLOR_BGR2RGB) heatmap = np.float32(heatmap) / 255 img = np.float32(img)/255. cam = heatmap + img cam = cam / np.max(cam) return np.uint8(255 * cam) image_path = 'path_to_your_test_image.jpg' img = Image.open(image_path).convert('RGB') input_tensor = preprocess_transforms(img).unsqueeze_(0) grayscale_cam = cam(input_tensor=input_tensor)[0, :] visualization = show_cam_on_image(cv2.imread(image_path, 1)[:, :, ::-1], grayscale_cam) cv2.imwrite(f"{output_dir}/result.png", visualization) ``` 通过以上流程即可成功地利用 Grad-CAM 技术对任意基于 CNN 构建的对象识别系统做出更深入的理解和支持进一步优化改进工作提供了有力依据[^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值