获得YOLOv8系列热力图的方法

1.配置相关环境,这里就不过赘述了

2.导入以下代码

3.主要参数修改如下:

weight: 'xxxxxx',  训练出来的权重文件路径
cfg: 'xxxxxx',  训练权重对应的yaml配置文件
device: 'cuda:0', 代表使用一张显卡
method: 'GradCAM',   GradCAMPlusPlus, GradCAM, XGradCAM , 使用的热力图库文件不同的效果不一样可以多尝试
layer: 'model.model[9]',   对应网络结构中的某某层
backward_type': 'all',   class, box, all
conf_threshold': 0.0000001, (我这里设置的很低,可以自行修改) # 0.6  # 置信度阈值,有的时候你的进度条到一半就停止了就是因为没有高于此值的了
ratio: 0.02  # 0.02-0.1

最底下切换检测图片的路径 和保存文件夹的位置

4.单击运行即可

目前应该只适用于YOLOv8 其他系列运行此代码可能会报错


import warnings

warnings.filterwarnings('ignore')
warnings.simplefilter('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
from ultralytics.nn.tasks import DetectionModel 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


def letterbox(im, new_shape=(640, 640), color=(114, 114, 114), auto=True, scaleFill=False, scaleup=True, stride=32):
    # Resize and pad image while meeting stride-multiple constraints
    shape = im.shape[:2]  # current shape [height, width]
    if isinstance(new_shape, int):
        new_shape = (new_shape, new_shape)

        # Scale ratio (new / old)
    r = min(new_shape[0] / shape[0], new_shape[1] / shape[1])
    if not scaleup:  # only scale down, do not scale up (for better val mAP)
        r = min(r, 1.0)

        
### 使用YOLOv11生成热力 对于YOLOv11模型而言,生成热力的过程遵循类似的逻辑:将模型预测的结果转化为可视化的形式以便于理解和分析。具体来说,这一过程涉及几个关键技术环节。 #### 转换预测结果至热力格式 为了使YOLOv11的输出能够被直观展示,在获得目标检测框之后,需要计算这些边界框中心点的位置分布情况,并以此为基础构建度矩阵[^1]。此步骤可以通过统计各个区域内的对象数量并映射到特定的颜色强度上来完成。 ```python import numpy as np from PIL import Image, ImageDraw def create_heatmap(detections, image_size=(640, 640)): heatmap = np.zeros(image_size[::-1], dtype=np.float32) for detection in detections: box_center_x = (detection['xmin'] + detection['xmax']) / 2 box_center_y = (detection['ymin'] + detection['ymax']) / 2 # Normalize coordinates to fit the heatmap size x = int(box_center_x * heatmap.shape[1]) y = int(box_center_y * heatmap.shape[0]) if 0 <= x < heatmap.shape[1] and 0 <= y < heatmap.shape[0]: heatmap[y][x] += 1 max_value = np.max(heatmap) if max_value != 0: heatmap /= max_value return heatmap ``` #### 叠加热力与原始片 一旦得到了基于YOLOv11预测结果制作而成的热力数据,下一步就是将其融合回源像之上形成最终视觉效果。这通常涉及到调整透明度以及选择合适的色彩方案使得重叠后的形既清晰又具有良好的对比度。 ```python def overlay_heatmap_on_image(original_img_path, heatmap_array): img = Image.open(original_img_path).convert('RGBA') # Convert heatmap array into an RGB image with a colormap applied. cmap = plt.get_cmap('jet') # Choose any matplotlib colormap here. rgba_heatmap = cmap(heatmap_array) heat_map_pil = Image.fromarray((rgba_heatmap[:, :, :3]*255).astype(np.uint8)).resize(img.size) result = Image.blend(img, heat_map_pil.convert("RGB"), alpha=0.7) return result ``` 上述代码片段展示了如何利用Python中的PIL库和Matplotlib库来处理像文件,并实现了基本的功能需求——即创建一个可以反映物体密集程度的地并与实际拍摄的照片相结合。 请注意,由于当前关于YOLOv11的具体实现细节尚未公开广泛讨论,因此这里提供的指导主要依据已知版本(如YOLOv8)的工作流程进行了合理推测和改编。如果存在官方文档或其他权威资料,则应优先参照那些资源来进行开发工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值