使用YOLOv8和Grad-CAM技术生成图像热图
目录
yolov8导航
YOLOv8(附带各种任务详细说明链接)
概述
环境准备
代码解读
导入库
定义letterbox函数
调整尺寸和比例
计算填充
应用填充
yolov8_heatmap类定义和初始化
后处理函数
绘制检测结果
类的调用函数
热图生成细节
参数解释
weight
cfg
device
method
layer
backward_type
conf_threshold
ratio
热力图解读
程序源码下载地址
计算机视觉YOLOv8模型热图可视化工具
yolov8导航
如果大家想要了解关于yolov8的其他任务和相关内容可以点击这个链接,我这边整理了许多其他任务的说明博文,后续也会持续更新,包括yolov8模型优化、sam等等的相关内容。
YOLOv8(附带各种任务详细说明链接)
概述
在深度学习和计算机视觉的领域,了解模型如何解读图像是至关重要的。本文将介绍如何使用YOLOv8模型结合Grad-CAM(梯度加权类激活映射)技术生成图像的热图。这种方法可以帮助我们可视化和理解模型在图像识别过程中关注的区域。后续我会把源码的下载链接附到最后。
环境准备
首先,确保您的环境中已安装以下库:torch, yaml, cv2, numpy, matplotlib, PIL, tqdm,以及ultralytics和pytorch_grad_cam。这些库对于运行和理解接下来的代码至关重要。
代码解读
导入库
import warnings
warnings.filterwarnings('ignore') # 忽略警告,保持输出清洁
# 导入必要的库
import torch, yaml, cv2, os, shutil
import numpy as np
np.random.seed(0) # 设置随机种子
import matplotlib.pyplot as plt
from tqdm import trange
from PIL import Image
# 导入YOLOv8和Grad-CAM相关的库
from ultralytics.nn.tasks import RTDETRDetectionModel as Model
from ultralytics.utils.torch_utils import intersect_dicts
from ultralytics.utils.ops import xywh2xyxy
from pytorch_grad_cam import GradCAMPlusPlus, GradCAM, XGradCAM
from pytorch_grad_cam.utils.image import show_cam_on_image
from pytorch_grad_cam.activations_and_gradients import ActivationsAndGradients
定义letterbox函数
这段代码定义了一个名为 letterbox 的函数,它主要用于调整图像大小和进行填充处理,以便使图像适配于深度学习模型的输入要求。现在我将详细解释这个函数的每一部分:
def letterbox(im, new_shape=(640, 640), color=(114, 114, 114), auto=True, scaleFill=False, scaleup=True, stride=32):
im: 输入图像。new_shape: 目标图像的新尺寸,默认为 640x640。color: 用于边缘填充的颜色,默认为灰色(114, 114, 114)。auto: 是否自动调整填充大小以满足步长约束。scaleFill: 是否拉伸图像以填充新形状。scaleup: 是否允许放大图像。stride: 模型步长,用于确保输出尺寸是该数值的倍数。
调整尺寸和比例
shape = im.shape[:2] # 当前图像的形状 [高度, 宽度]
if isinstance(new_shape, int):new_shape = (new_shape, new_shape)# 计算缩放比例 (新尺寸 / 旧尺寸)
r = min(new_shape[0] / shape[0], new_shape[1] / shape[1])
if not scaleup: # 仅缩小图像,不放大(为了更好的验证mAP)r = min(r, 1.0)
这部分代码首先获取图像的原始尺寸,然后根据new_shape和原始尺寸计算缩放比例。
计算填充
ratio = r, r # 宽度、高度比例
new_unpad = int(round(shape[1] * r)), int(round(shape[0] * r))
dw, dh = new_shape[1] - new_unpad[0], new_shape[0] - new_unpad[1] # 宽高填充
if auto: # 最小矩形dw, dh = np.mod(dw, stride), np.mod(dh, stride) # 宽高填充
elif scaleFill: # 拉伸填充dw, dh = 0.0, 0.0new_unpad = (new_shape[1], new_shape[0])ratio = new_shape[1] / shape[1], new_shape[0] / shape[0] # 宽度、高度比例
这段代码计算了在缩放后的图像周围需要添加多少填充,以达到目标尺寸。auto模式下,填充被调整以满足步长约束。scaleFill模式下,图像被拉伸以填充整个目标尺寸。
应用填充
dw /= 2 # 将填充分成两边
dh /= 2if shape[::-1] != new_unpad: # 如果需要调整大小im = cv2.resize(im, new_unpad, interpolation=cv2.INTER_LINEAR)
top, bottom = int(round(dh - 0.1)), int(round(dh + 0.1))
left, right = int(round(dw - 0.1)), int(round(dw + 0.1))
im = cv2.copyMakeBorder(im, top, bottom, left, right, cv2.BORDER_CONSTANT, value=color) # 添加边框
最后,这部分代码将计算出的填充应用到图像上。首先,如果需要,会将图像缩放到new_unpad指定的尺寸。接着,使用cv2.copyMakeBorder函数在图像的四周添加计算出的填充。 然后直接定义返回值:return im, ratio, (dw, dh) 函数返回调整大小并填充后的图像,以及相关的缩放比例和填充维度。
letterbox函数是深度学习中常用的图像预处理手段之一。它通过调整图像的尺寸和添加填充,确保图像能够适配神经网络的输入要求,同时保持了图像的原始比例,避免了可能的形变。这在目标检测等需要精确空间定位的任务中尤为重要。
yolov8_heatmap类定义和初始化
class yolov8_heatmap:def __init__(self, weight, cfg, device, method, layer, backward_type, conf_threshold, ratio):...
- 初始化函数接收多个参数,包括模型权重(
weight)、配置文件(cfg)、运行设备(device)、Grad-CAM方法(method)、目标层(layer)、反向类型(backward_type)、置信度阈值(conf_threshold)和处理比例(ratio)。 - 加载YOLOv8模型,并根据提供的配置和权重设置模型。
- 随机生成颜色映射,用于不同类别的可视化。
- 初始化的参数被存储在类的属性中。
后处理函数
def post_process(self, result):...
post_process函数处理模型的输出。它将模型输出分离为逻辑值(logits_)和边界框(boxes_)。- 该函数还对输出进行排序,并转换边界框格式。
绘制检测结果
def draw_detections(self, box, color, name, img):...
draw_detections函数用于在图像上绘制检测到的边界框和类别名称。- 它调整边界框大小以适应原始图像尺寸,并在图像上绘制边界框和类别名称。
类的调用函数
def __call__(self, img_path, save_path):...
- 当实例被当作函数调用时,执行图像处理和热图生成的主要流程。
- 加载并预处理图像,将其转换为模型可以处理的格式。
- 使用
ActivationsAndGradients对象从指定的层中获取激活和梯度。 - 使用Grad-CAM方法生成热图,这涉及到计算重要性权重和应用它们到激活图上。
- 将生成的热图叠加到原始图像上,并保存结果。
热图生成细节
- 类的核心功能是使用Grad-CAM技术从指定层生成热图。
- 根据
backward_type,可以选择对类别、边界框或两者进行反向传播,以生成针对不同目标的热图。 - 生成的热图反映了模型在做出预测时关注图像的哪些区域。
参数解释
def get_params():params = {'weight': 'rtdetr-l.pt','cfg': 'ultralytics/cfg/models/rt-detr/rtdetr-l.yaml','device': 'cuda:0','method': 'GradCAM', # GradCAMPlusPlus, GradCAM, XGradCAM'layer': 'model.model[10]','backward_type': 'all', # class, box, all'conf_threshold': 0.3, # 0.3'ratio': 0.5 # 0.5-1.0}return params
这段代码定义了一个名为 get_params 的函数,它用于设置并返回一个字典,包含了一系列参数,这些参数是用于配置和运行 yolov8_heatmap 类的。现在我将逐个解释这些参数的含义和作用:
weight
'rtdetr-l.pt': 这个参数指定了模型的权重文件。在这种情况下,它是一个预先训练的YOLOv8模型的权重文件。这个文件包含了模型的所有训练参数,是模型运行的基础。
cfg
'ultralytics/cfg/models/rt-detr/rtdetr-l.yaml': 这是模型的配置文件路径。配置文件定义了模型的架构和其他相关设置。这里指定的是使用YOLOv8模型的具体配置。
device
'cuda:0': 这个参数指定了模型运行的设备。在这里,'cuda:0'表明模型将在第一个NVIDIA GPU上运行。如果没有GPU或希望在CPU上运行,可以将其更改为'cpu'。
method
'GradCAM': 此参数指定了用于生成热图的Grad-CAM(梯度加权类激活映射)变体。'GradCAM'是一种常用的方法,其他选项如'GradCAMPlusPlus'和'XGradCAM'提供了不同的热图生成算法。
layer
'model.model[10]': 这个参数指定了用于生成热图的网络层。'model.model[10]'指的是YOLOv8模型中的特定层。选择的层会影响热图的细节和质量。
backward_type
'all': 这个参数决定了反向传播的类型。它可以是'class'、'box'或'all'。'class'仅关注类别预测,'box'仅关注边界框预测,而'all'结合了两者。
conf_threshold
0.3: 这是一个置信度阈值,用于过滤模型的预测。仅当模型对其预测的置信度高于0.3时,这些预测才会被考虑。
ratio
0.5: 这个参数指定了在生成热图时考虑的顶部预测的比例。0.5表示只考虑置信度最高的50%的预测。
热力图解读

-
颜色解释:
- 热图中的颜色通常代表一个量级的标量,其中热色调(如红色、黄色)表示高活跃度或高重要性区域,冷色调(如蓝色、绿色)表示低活跃度或低重要性区域。
-
区域关注:
- 热图上明亮的区域表明了模型在做出预测或决策时,这些区域对模型的输出贡献度较高。例如,在目标检测任务中,如果热图中某个物体的轮廓区域亮度很高,这可能意味着模型正将注意力集中在这个物体上。
-
模型解释性:
- 热图可以用来理解和解释模型的行为。例如,在图像分类任务中,热图可以显示模型认为图像的哪些部分对于识别特定类别最重要。
程序源码下载地址
计算机视觉YOLOv8模型热图可视化工具
如果有哪里写的不够清晰,小伙伴本可以给评论或者留言,我这边会尽快的优化博文内容,另外如有需要,我这边可支持技术答疑与支持。另外这个程序并非我的原创,如有侵权告知必删。
相关文章:
使用YOLOv8和Grad-CAM技术生成图像热图
目录 yolov8导航 YOLOv8(附带各种任务详细说明链接) 概述 环境准备 代码解读 导入库 定义letterbox函数 调整尺寸和比例 计算填充 应用填充 yolov8_heatmap类定义和初始化 后处理函数 绘制检测结果 类的调用函数 热图生成细节 参数解释 we…...
Vue: 多个el-select不能重复选择相同属性
一、场景 1.需求: 用户可自由选择需要修改的对象并同时修改多个属性,需要校验修改对象不能重复选择,但是可供修改属性是固定的 2.目标效果: 二、实现 1.主要代码: <template><el-selectv-model"se…...
金色麦芒的2023
2023年即将过去,回首这一年,我深感自己在技术和职业生涯中取得了巨大的进步。这一年里,我不仅在技术层面有了更深入的掌握,也在个人成长和职业规划上有了更明确的方向。 首先,在技术层面,我今年最大的收获是…...
java设计模式学习之【策略模式】
文章目录 引言策略模式简介定义与用途实现方式 使用场景优势与劣势在Spring框架中的应用计算示例代码地址 引言 设想你正在玩一个策略游戏,每一个决策都会导致不同的游戏结局。同样地,在软件开发中,我们常常需要根据不同的场景或条件选择不同…...
Mybatis SQL构建器类 - SqlBuilder and SelectBuilder (已经废弃)
在3.2版本之前,我们采用了一种略有不同的方法,通过利用ThreadLocal变量来掩盖一些使Java DSL有点繁琐的语言限制。然而,这种方法现在已被弃用,因为现代框架已经普及了使用构建器模式和匿名内部类的概念。因此,SelectBu…...
【Linux】不常用命令记录
查看开启的网络端口 1、使用netstat命令“netstat -tuln”,该命令将显示所有当前监听的TCP和UDP端口; 2、使用ss命令“ss -tuln”,用于显示当前监听的TCP和UDP端口; 3、使用lsof命令“lsof -i”,将显示当前打开的网络…...
【docker】安装docker环境并启动容器
一、安装docker 这里以centos系统为例安装docker环境 # 删除已有安装包 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-enginesudo yum install -y yum-utils # 设置源 y…...
AIOps探索 | 基于大模型构建高效的运维知识及智能问答平台(2)案例分享
原作者:擎创科技产品专家 布博士 案例分享 所需要的软件列表 本次案例的实现,全部采用开源或SAAS的产品来提供,并不涉及到私有化部署的软件产品。软件列表如下所示,如何申请apikey请自行研究,在这里不再详细说明&…...
【ESP32接入国产大模型之文心一言】
1. 怎样接入文心一言 随着人工智能技术的不断发展,自然语言处理领域也得到了广泛的关注和应用。在这个领域中,文心一言作为一款强大的自然语言处理工具,具有许多重要的应用价值。本文将重点介绍如何通过ESP32接入国产大模型之文心一言api&am…...
保湿剂,预计2026年市场规模将达到约230亿美元
全球市场分析 从全球市场来看,保湿剂市场规模正在快速增长。主要集中在欧美和亚太地区的市场,据市场调研机构的数据显示,预计2026年,全球保湿剂市场规模将达到约230亿美元。保湿剂的应用领域不断拓展,包括从化妆品到个…...
CodeWhisperer:编码世界中的声音启迪者
人烟 导语: 在数字化时代,编码已经成为了一种不可或缺的技能。而 CodeWhisperer(编码世界中的声音启迪者)则以其卓越的技术和深厚的知识为人们带来了独特的启发和指导。本文将介绍 CodeWhisperer 的背景和成就,探讨他是…...
golang学习专栏
GOLANG专栏 Golang基础教程 Golang基础教程 Golang练手算法 Golang练手算法 Golang设计模式 Golang设计模式 Golang数据结构和算法 Golang数据结构和算法 Golang并发编程 Golang并发编程 ORM框架Gorm Golang ORM框架gorm Golang源码分析 Golang源码分析 MySQL教程 MySQ…...
el-table表格动态添加列。多组数据拼接和多层级数据的处理
提示:el-table表格动态添加列 文章目录 前言一、多组数据拼接二、多层级处理三、实际应用中,为避免闪屏,可以表格数据统一渲染总结 前言 需求:富文本编辑器 一、多组数据拼接 <template><div class"test">…...
ThinkPHP6.0任意文件上传 PHPSESSION 已亲自复现
ThinkPHP6.0任意文件上传 PHPSESSION 已亲自复现 漏洞名称漏洞描述影响版本 漏洞复现环境搭建安装thinkphp6漏洞信息配置 漏洞利用 修复建议 漏洞名称 漏洞描述 2020年1月10日,ThinkPHP团队发布一个补丁更新,修复了一处由不安全的SessionId导致的任意文…...
短说社区运营的使用工具分享(一)
本文是一篇针对短说社区运营的使用工具分享帖,是小编结合日常使用,总结的一些可以帮助网站管理员和运营人员进行日常操作和管理的工具。 1. 想天工作台之运营面板 想天工作台可以将桌面划分不同的类型来辅助办公,我分享下我当前的桌面情况&…...
关于.gitignore文件
.gitignore文件用于忽略git同步文件。 git上创建项目时,默认的.gitignore文件配置比较少,不太适合于windows下vs的开发设置。 下面是vs中.gitignore条目样例: # Prerequisites *.d# Compiled Object files *.slo *.lo *.o *.obj*.iobj *.V…...
Cell 文章图复现
多组差异火山图复现 参考文章: A Spatiotemporal Organ-Wide Gene Expression and Cell Atlas of the Developing Human Heart Figure 2. H 图里主要是单细胞数据不同cluster之间的差异火山图, 所以说白了就是散点图和柱状图的结合, 散点图用差异基因绘制, 柱状图利用logFC最…...
只需一招彻底解决SOLIDWORKS不显示缩略图预览
SOLIDWORKS缩略图能够让工程师便于识别想要打开的模型,但经常会有用户遇到在资源管理器中查看SOLIDWORKS文件时,仅显示SOLIDWORKS的图标,而没有相关文件的预览缩略图。 Windows文件夹选项设置 首先确保Windows文件夹选项设置,显…...
nccl 源码分析 从 ncclAllReduce 的执行开始认识nccl源代码
文字没有提及的代码内容,不需要太在意,当然也可以瞟两眼; 首先,总体而言函数 ncclAllReduce 的功能在于将携带了一个操作的info结构体,放入了队列中,待后面执行; 排队的函数调用是 ncclEnqueue…...
仿照AirDrop(隔空投送)优雅地在局域网中传输文件
基于WebRTC的局域网文件传输 在前一段时间,我想在手机上向电脑发送文件,因为要发送的文件比较多,所以我想直接通过USB连到电脑上传输,等我将手机连到电脑上之后,我发现手机竟然无法被电脑识别,能够充电但是…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...
土建施工员考试:建筑施工技术重点知识有哪些?
《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目,核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容,附学习方向和应试技巧: 一、施工组织与进度管理 核心目标: 规…...
