尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
热力图可视化 仅标签框内的热力图 去除红色以外区域的热力图
使用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模型modelattempt_load(yolov5_weights.pt,map_locationcpu)# 或 cuda 如果有GPU的话model.eval()步骤 3: 定义Grad-CAM类target_layermodel.model[-1]# 这里假设目标层是最后一个层camGradCAM(modelmodel,target_layertarget_layer,use_cudaTrueiftorch.cuda.is_available()elseFalse)步骤 4: 处理输入图像defpreprocess_image(img_path):imgcv2.imread(img_path)imgcv2.cvtColor(img,cv2.COLOR_BGR2RGB)img_tensorF.to_tensor(img).unsqueeze(0)# 添加batch维度returnimg,img_tensor步骤 5: 获取热力图defget_gradcam_visualization(model,img_tensor,cam_method,target_categoryNone):grayscale_camcam_method(input_tensorimg_tensor,target_categorytarget_category)grayscale_camgrayscale_cam[0,:]visualizationshow_cam_on_image(img/255.0,grayscale_cam,use_rgbTrue)returnvisualization# 普通热力图img,img_tensorpreprocess_image(path_to_your_image.jpg)visualizationget_gradcam_visualization(model,img_tensor,cam)# 显示结果importmatplotlib.pyplotasplt plt.imshow(visualization)plt.show()特定区域热力图仅标签框内的热力图defget_bounding_boxes(model,img_tensor):withtorch.no_grad():outputmodel(img_tensor)boxesoutput.xyxy[0].tolist()returnboxesdefvisualize_bounding_box_heatmap(img,boxes,visualization):forboxinboxes:x1,y1,x2,y2int(box[0]),int(box[1]),int(box[2]),int(box[3])cropped_imgimg[y1:y2,x1:x2]cropped_tensorF.to_tensor(cropped_img).unsqueeze(0)cropped_visualizationget_gradcam_visualization(model,cropped_tensor,cam)img[y1:y2,x1:x2]cropped_visualizationreturnimg boxesget_bounding_boxes(model,img_tensor)heatmap_with_boxesvisualize_bounding_box_heatmap(img,boxes,visualization)plt.imshow(heatmap_with_boxes)plt.show()去除红色以外区域的热力图defremove_non_red_regions(visualization):lower_rednp.array([200,0,0],dtypeuint8)upper_rednp.array([255,100,100],dtypeuint8)maskcv2.inRange(visualization,lower_red,upper_red)visualization[mask0][255,255,255]# 将非红色区域变白或其他颜色returnvisualization heatmap_without_non_redremove_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模型modelattempt_load(yolov5_weights.pt,map_locationcpu)model.eval()# 定义Grad-CAM类target_layermodel.model[-1]camGradCAM(modelmodel,target_layertarget_layer,use_cudaTrueiftorch.cuda.is_available()elseFalse)# 处理输入图像defpreprocess_image(img_path):imgcv2.imread(img_path)imgcv2.cvtColor(img,cv2.COLOR_BGR2RGB)img_tensorF.to_tensor(img).unsqueeze(0)returnimg,img_tensor# 获取热力图defget_gradcam_visualization(model,img_tensor,cam_method,target_categoryNone):grayscale_camcam_method(input_tensorimg_tensor,target_categorytarget_category)grayscale_camgrayscale_cam[0,:]visualizationshow_cam_on_image(img/255.0,grayscale_cam,use_rgbTrue)returnvisualization# 获取边界框defget_bounding_boxes(model,img_tensor):withtorch.no_grad():outputmodel(img_tensor)boxesoutput.xyxy[0].tolist()returnboxes# 可视化边界框内的热力图defvisualize_bounding_box_heatmap(img,boxes,visualization):forboxinboxes:x1,y1,x2,y2int(box[0]),int(box[1]),int(box[2]),int(box[3])cropped_imgimg[y1:y2,x1:x2]cropped_tensorF.to_tensor(cropped_img).unsqueeze(0)cropped_visualizationget_gradcam_visualization(model,cropped_tensor,cam)img[y1:y2,x1:x2]cropped_visualizationreturnimg# 去除非红色区域defremove_non_red_regions(visualization):lower_rednp.array([200,0,0],dtypeuint8)upper_rednp.array([255,100,100],dtypeuint8)maskcv2.inRange(visualization,lower_red,upper_red)visualization[mask0][255,255,255]returnvisualization# 主程序if__name____main__:img_pathpath_to_your_image.jpgimg,img_tensorpreprocess_image(img_path)# 普通热力图visualizationget_gradcam_visualization(model,img_tensor,cam)plt.imshow(visualization)plt.show()# 仅标签框内的热力图boxesget_bounding_boxes(model,img_tensor)heatmap_with_boxesvisualize_bounding_box_heatmap(img,boxes,visualization)plt.imshow(heatmap_with_boxes)plt.show()# 去除红色以外区域的热力图heatmap_without_non_redremove_non_red_regions(visualization)plt.imshow(heatmap_without_non_red)plt.show()展示了如何在YOLOv5中实现三种不同的热力图可视化并且可以用于各种 YOLOv5模型以添加注意力机制和改进模型。仅供参考。
RELATED

相关推荐

从零打造低成本四足机器人:OpenCat开源项目全解析

从零打造低成本四足机器人:OpenCat开源项目全解析

1. 项目概述:为什么我们需要一台“买得起”的四足机器人?如果你对机器人、电子或者编程感兴趣,可能早就被波士顿动力那些动辄几十上百万美元的机器狗视频震撼过。它们能跑能跳,甚至能后空翻,但对我们绝大多数爱好者、学…

📅 2026/9/10 1:06:39
AI检索工具话术设计:提升30%用户接受度的实战方法

AI检索工具话术设计:提升30%用户接受度的实战方法

1. AI检索工具项目话术设计概述 在当今信息爆炸的时代,AI检索工具已经成为企业和个人高效获取信息的重要助手。作为从业者,我经常需要向不同背景的客户介绍这类工具的价值和使用方法。一套好的话术不仅能清晰传达产品价值,还能有效引导用户理…

📅 2026/10/9 4:35:08
电子纸鹤制作指南:从电路设计到编程实现

电子纸鹤制作指南:从电路设计到编程实现

1. 从折纸到电路:电子“纸鹤”的跨界构想最近在逛一些创客社区和硬件论坛时,发现一个挺有意思的词——“Electronic ‘Paper Crane’”,直译过来就是“电子纸鹤”。乍一看,这像是个矛盾体:纸鹤是传统手工折纸的象征&am…

📅 2026/9/8 15:20:55
MORE NEWS

更多资讯

📰

sed流式编辑器原理与高阶实战:从模式空间到跨平台避坑

1. 为什么今天还要认真学 sed?——一个被低估的文本处理“瑞士军刀”很多人第一次听说 sed,是在某次服务器日志排查时,看到同事敲出一行sed -n /ERROR/p app.log,三秒就筛出所有报错行,而你还在用grep配合less滚屏翻找…

📰

车载以太网Switch VLAN设计:高温振动下的TSN硬隔离实战

简介:本资源是一份面向硬件工程师及新能源汽车电子系统开发者的车载以太网VLAN技术深度解析文档,聚焦Switch与VLAN在车载通信架构中的协同原理与工程实现。文档系统梳理了以太网交换机在OSI二层的工作机制(含MAC地址学习、单播/广播转发、地址…

📰

DIY发烧级DAC设计:USB异步传输、I²S时序控制与全平衡模拟输出

简介:这是一份面向电子DIY爱好者与Hi-Fi音响发烧友的专业学习资料,聚焦高性能DAC音频解码器的完整硬件设计与制作实践,解决市售数字音源内置DAC音质生硬、供电简陋、抗干扰弱等痛点,助力动手玩家打造高保真音频重放系统。资源为单…

📰

车载以太网Switch VLAN硬件级调试实战:从供电滤波到帧头验证

简介:本资源是一份面向硬件工程师、车载网络开发人员及新能源汽车电子系统从业者的专业技术文档,聚焦车载以太网中Switch与VLAN的核心原理与工程实践。针对车载通信架构升级中常见的广播域隔离、带宽复用与实时性保障难题,文档系统梳理了二层…

📰

嵌入式开发必备:读懂KEIL、IAR、GCC编译信息

做嵌入式这些年,我见过太多人栽在“编译信息”这道坎上——代码写得看起来没问题,一编译满屏红字,直接就懵了;或者好不容易编译通过,板子跑起来不定时死机,回过来排查才发现,那些被忽略的警告早…

📰

Hadoop高可用集群搭建实战:NameNode HA配置、启动流程与故障排查

1. 高可用集群的核心思路与方案选型 1.1 为什么单点 Namenode 是生产环境的定时炸弹 刚接触 Hadoop 集群那会儿,我最开始搭的是伪分布式和单节点版本,跑跑测试没问题,一旦放到真实业务场景里就原形毕露。单点 NameNode 最大的问题在于&#…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬