news 2026/8/18 20:33:45

热力图可视化 仅标签框内的热力图 去除红色以外区域的热力图

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
热力图可视化 仅标签框内的热力图 去除红色以外区域的热力图

使用Grad-CAM方法建立YOLOv5中实现三种不同的热力图可视化(普通热力图、仅标签框内的热力图、去除红色以外区域的热力图

文章目录

  • 使用Grad-CAM方法建立YOLOv5中实现三种不同的热力图可视化(普通热力图、仅标签框内的热力图、去除红色以外区域的热力图
      • 步骤 1: 导入必要的库
      • 步骤 2: 加载YOLOv5模型
      • 步骤 3: 定义Grad-CAM类
      • 步骤 4: 处理输入图像
      • 步骤 5: 获取热力图
      • 特定区域热力图
        • 仅标签框内的热力图
        • 去除红色以外区域的热力图
      • 完整代码

YOLOv5热力图grad-cam
建立目标:3种热力图可视化:普通的,仅标签框内的,去除红色以外区域的
用于YOLOv5添加注意力机制、改进模型等

YOLOv5中实现三种不同的热力图可视化(普通热力图、仅标签框内的热力图、去除红色以外区域的热力图),我们可以使用Grad-CAM方法。

代码示例,仅供参考。

如何加载模型、处理图像、生成热力图以及展示结果。

步骤 1: 导入必要的库

importcv2importnumpyasnpimporttorchfromtorchvision.transformsimportfunctionalasFfrompytorch_grad_camimportGradCAM,ScoreCAM,GradCAMPlusPlus,AblationCAM,XGradCAM,EigenCAM,EigenGradCAM,LayerCAMfrompytorch_grad_cam.utils.imageimportshow_cam_on_imagefrommodels.experimentalimportattempt_load# 假设这是加载YOLOv5模型的方式

步骤 2: 加载YOLOv5模型

model=attempt_load('yolov5_weights.pt',map_location='cpu')# 或 'cuda' 如果有GPU的话model.eval()

步骤 3: 定义Grad-CAM类

target_layer=model.model[-1]# 这里假设目标层是最后一个层cam=GradCAM(model=model,target_layer=target_layer,use_cuda=Trueiftorch.cuda.is_available()elseFalse)

步骤 4: 处理输入图像

defpreprocess_image(img_path):img=cv2.imread(img_path)img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)img_tensor=F.to_tensor(img).unsqueeze(0)# 添加batch维度returnimg,img_tensor

步骤 5: 获取热力图

defget_gradcam_visualization(model,img_tensor,cam_method,target_category=None):grayscale_cam=cam_method(input_tensor=img_tensor,target_category=target_category)grayscale_cam=grayscale_cam[0,:]visualization=show_cam_on_image(img/255.0,grayscale_cam,use_rgb=True)returnvisualization# 普通热力图img,img_tensor=preprocess_image('path_to_your_image.jpg')visualization=get_gradcam_visualization(model,img_tensor,cam)# 显示结果importmatplotlib.pyplotasplt plt.imshow(visualization)plt.show()

特定区域热力图

仅标签框内的热力图
defget_bounding_boxes(model,img_tensor):withtorch.no_grad():output=model(img_tensor)boxes=output.xyxy[0].tolist()returnboxesdefvisualize_bounding_box_heatmap(img,boxes,visualization):forboxinboxes:x1,y1,x2,y2=int(box[0]),int(box[1]),int(box[2]),int(box[3])cropped_img=img[y1:y2,x1:x2]cropped_tensor=F.to_tensor(cropped_img).unsqueeze(0)cropped_visualization=get_gradcam_visualization(model,cropped_tensor,cam)img[y1:y2,x1:x2]=cropped_visualizationreturnimg boxes=get_bounding_boxes(model,img_tensor)heatmap_with_boxes=visualize_bounding_box_heatmap(img,boxes,visualization)plt.imshow(heatmap_with_boxes)plt.show()
去除红色以外区域的热力图
defremove_non_red_regions(visualization):lower_red=np.array([200,0,0],dtype="uint8")upper_red=np.array([255,100,100],dtype="uint8")mask=cv2.inRange(visualization,lower_red,upper_red)visualization[mask==0]=[255,255,255]# 将非红色区域变白或其他颜色returnvisualization heatmap_without_non_red=remove_non_red_regions(visualization)plt.imshow(heatmap_without_non_red)plt.show()

完整代码

importcv2importnumpyasnpimporttorchfromtorchvision.transformsimportfunctionalasFfrompytorch_grad_camimportGradCAM,ScoreCAM,GradCAMPlusPlus,AblationCAM,XGradCAM,EigenCAM,EigenGradCAM,LayerCAMfrompytorch_grad_cam.utils.imageimportshow_cam_on_imagefrommodels.experimentalimportattempt_load# 加载YOLOv5模型model=attempt_load('yolov5_weights.pt',map_location='cpu')model.eval()# 定义Grad-CAM类target_layer=model.model[-1]cam=GradCAM(model=model,target_layer=target_layer,use_cuda=Trueiftorch.cuda.is_available()elseFalse)# 处理输入图像defpreprocess_image(img_path):img=cv2.imread(img_path)img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)img_tensor=F.to_tensor(img).unsqueeze(0)returnimg,img_tensor# 获取热力图defget_gradcam_visualization(model,img_tensor,cam_method,target_category=None):grayscale_cam=cam_method(input_tensor=img_tensor,target_category=target_category)grayscale_cam=grayscale_cam[0,:]visualization=show_cam_on_image(img/255.0,grayscale_cam,use_rgb=True)returnvisualization# 获取边界框defget_bounding_boxes(model,img_tensor):withtorch.no_grad():output=model(img_tensor)boxes=output.xyxy[0].tolist()returnboxes# 可视化边界框内的热力图defvisualize_bounding_box_heatmap(img,boxes,visualization):forboxinboxes:x1,y1,x2,y2=int(box[0]),int(box[1]),int(box[2]),int(box[3])cropped_img=img[y1:y2,x1:x2]cropped_tensor=F.to_tensor(cropped_img).unsqueeze(0)cropped_visualization=get_gradcam_visualization(model,cropped_tensor,cam)img[y1:y2,x1:x2]=cropped_visualizationreturnimg# 去除非红色区域defremove_non_red_regions(visualization):lower_red=np.array([200,0,0],dtype="uint8")upper_red=np.array([255,100,100],dtype="uint8")mask=cv2.inRange(visualization,lower_red,upper_red)visualization[mask==0]=[255,255,255]returnvisualization# 主程序if__name__=="__main__":img_path='path_to_your_image.jpg'img,img_tensor=preprocess_image(img_path)# 普通热力图visualization=get_gradcam_visualization(model,img_tensor,cam)plt.imshow(visualization)plt.show()# 仅标签框内的热力图boxes=get_bounding_boxes(model,img_tensor)heatmap_with_boxes=visualize_bounding_box_heatmap(img,boxes,visualization)plt.imshow(heatmap_with_boxes)plt.show()# 去除红色以外区域的热力图heatmap_without_non_red=remove_non_red_regions(visualization)plt.imshow(heatmap_without_non_red)plt.show()

展示了如何在YOLOv5中实现三种不同的热力图可视化,并且可以用于各种 YOLOv5模型以添加注意力机制和改进模型。

仅供参考。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/18 20:33:15

三维图形渲染的预算管理

三维图形渲染的预算管理 3D 页面卡顿通常不是并发问题,而是单帧做了太多工作。先设定帧预算,再决定模型、材质和后处理的取舍。 1. 先明确问题边界 60 FPS 的总帧预算约为 16.7 ms。重复物体使用实例化,静态几何体按需合并,并检查…

作者头像 李华
网站建设 2026/8/18 20:32:02

提示词工程实战指南:从核心原理到工程化应用

在实际工作中,无论是使用 ChatGPT、Midjourney 还是 Claude,很多人都会遇到一个瓶颈:为什么别人用同样的模型能生成高质量内容,而自己得到的却是平庸甚至错误的回复?问题的核心往往不在于模型本身,而在于你…

作者头像 李华
网站建设 2026/8/18 20:31:19

SaaS建站平台有哪些选择?适合中小企业的官网工具分层盘点

SaaS建站平台有哪些选择?适合中小企业的官网工具分层盘点SaaS建站平台不是一种固定形态,有的偏轻量展示,有的偏企业官网,有的偏设计自由度,有的偏营销自动化。中小企业选型时,先分层比直接问“哪家好”更准…

作者头像 李华
网站建设 2026/8/18 20:25:20

为什么有的游戏优化那么差?从底层给你讲明白

一、前言(深度扩写) 大量玩家、DIY 硬件爱好者存在固化认知:游戏帧率低、高速移动卡顿、贴图闪烁、画面微抖动,第一解决方案就是更换更高规格显卡,从 RTX4090 升级 RTX5090、RTX5080,但实操中经常出现顶配显…

作者头像 李华