【YOLOv3-v11 RGBT多模态图像目标检测实战入门:权重测试、热力图可视化与FPS计算】
文章目录
- 1. 文章主要内容
- 2. 多模态RGBT图像YOLO框架
- 2.1 权重测试生成带目标框的图片
- 2.2 模型热力图绘制
- 2.3 FPS计算
- 3. 总结
1. 文章主要内容
本篇博客将分析使用YOLOv3-YOLOv11 RGBT多模态图像目标检测框架进行测试,内容包括:利用已训练生成的权重进行图片目标检测、绘制热力图以及计算FPS速度。目标是帮助读者快速掌握整个流程,轻松入门多模态图像目标检测,预计阅读时间约15分钟。若需了解该框架的使用方法及核心源码解析,请参考我的上一篇博客:【YOLO多模态图像目标检测实战指南:核心框架解析与快速应用技巧,带你快速入门多模态领域,支持YOLOv3-v11】
2. 多模态RGBT图像YOLO框架
从上一篇论文读懂并完成训练后,我们将得到与数据集对应的训练权重。接着,利用该权重执行测试任务:进行目标检测并生成结果图片、绘制热力图以及计算FPS速度,这些是撰写学术论文中必备的内容。
2.1 权重测试生成带目标框的图片
与单模态YOLO框架类似,多模态YOLO框架训练完成后同样会生成一个 best.pt
文件。我们将利用此权重文件,结合源码中的 detect-6C.py
脚本执行模型测试。请注意:若采用RGBT四通道融合方式,则需使用 detect-4C.py
文件。接下来,我们将详细解析 detect-6C.py 文件中各变量的作用,以熟悉整个测试推理流程。源码如下所示。
import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO
if __name__ == '__main__':model = YOLO("best.pt") # select your model.pt pathmodel.predict(source='/data/xx/images/visible/val',imgsz=640,project='runs/detect',name='xx',show=False,save_frames=False,use_simotm="RGBRGB6C",channels=6,save=True,show_conf=False,# conf=0.2,# visualize=True # visualize model features maps)
1
.YOLO()括号中为best.pt的权重文件路径,请根据自己的路径进行修改(下同)。
2
.source
需设置为待推理图片的根目录。请注意:此处必须指定可见光(visible
)图像路径,框架将自动匹配对应的红外(infrared
)图像。
3
.project + name
定义了结果图像的输出路径。该路径下通常包含一个文件夹:可见光检测结果和红外检测结果(均已标注目标框)。
4
. use_simotm
和 channels
参数已预设为 RGBRGB 六通道的默认值无需修改。show_conf
参数控制检测框上是否显示置信度信息。
接下来,下图展示了推理生成的可视化结果(以DroneVehicle数据集为例) 。可见,同一套标注框同时显示在对应的可见光与红外图像上。至此,权重推理测试完成。
2.2 模型热力图绘制
训练权重生成后,为了丰富模型的可视化,一般学术论文都会对模型预测图片的热力图进行绘制,从而直观地显示模型的对比效果。接着,直接通过一段源码进行分析,让大家快速上手;源码文件在heamap_RGBT.py
文件中。
def get_params():params = {'weight': 'best.pt','device': 'cuda:0','method': 'GradCAMPlusPlus', # GradCAMPlusPlus, GradCAM, XGradCAM, EigenCAM, HiResCAM, LayerCAM, RandomCAM, EigenGradCAM, KPCA_CAM'layer': [10, 12, 14, 16, 18],#[10, 12, 14, 16, 18], [30, 33, 36, 39, 42]'backward_type': 'all', # detect:<class, box, all> segment:<class, box, segment, all> pose:<box, keypoint, all> obb:<box, angle, all> classify:<all>'conf_threshold': 0.2, # 0.2'ratio': 0.02, # 0.02-0.1'show_result': True, # 不需要绘制结果请设置为False'renormalize': False, # 需要把热力图限制在框内请设置为True(仅对detect,segment,pose有效)'task':'detect', # 任务(detect,segment,pose,obb,classify)'img_size':640, # 图像尺寸'channels':6,'use_simotm': 'RGBRGB6C', # RGBRGB6C RGB RGBT}return params# pip install grad-cam==1.5.4 --no-deps
if __name__ == '__main__':model = yolo_heatmap(**get_params())model("xx", 'heat_map_result')
1
.上述源码是源文件中最关键的部分,也是需要自定义修改的地方。在main函数的model()中
,路径的拼接就是最终保存生成热力图的文件夹路径。
2
.在get_params
函数中:weight
是训练后生成的权重文件,与推理部分一致。device
指定使用的GPU型号,如果只有一块GPU,默认使用cuda:0。layer
表示热力图可视化的层数,与yaml文件中的层数对应。热力图默认输出这些层的平均值。
3
.channel和use_simotm
遵循六通道范式;如果使用四通道,请自行修改。其他变量均为字面意思,无需修改。另外,下面为热力图的一个可视化例子,仅供参考。
2.3 FPS计算
FPS
指标的计算在YOLO中至关重要,因为YOLO的核心优势包括轻量化和高速处理。因此,通过分析源码中的get_FPS.py
文件,可以快速熟悉如何获取多模态目标检测的FPS值,源码如下所示。
if __name__ == '__main__':parser = argparse.ArgumentParser()parser.add_argument('--weights', type=str, default='best.pt', help='trained weights path')parser.add_argument('--batch', type=int, default=1, help='total batch size for all GPUs')parser.add_argument('--imgs', nargs='+', type=int, default=[640, 640], help='[height, width] image sizes')parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')parser.add_argument('--warmup', default=200, type=int, help='warmup time')parser.add_argument('--testtime', default=1000, type=int, help='test time')parser.add_argument('--channels', default=6, type=int, help='channels')parser.add_argument('--half', action='store_true', default=False, help='fp16 mode.')opt = parser.parse_args()device = select_device(opt.device, batch=opt.batch)
1
.main
函数是源码中最为重要且需要修改的部分。首先,weights
参数指定训练结束后的权重文件路径。
2
.batch
参数表示批处理大小,在测试FPS时应默认设置为1,无需更改。
3
.imgs
参数定义输入图片的分辨率,应选择与模型输入分辨率尺寸一致。其他参数可保持默认值,无需修改。
3. 总结
基于多模态图像YOLO框架源码,本篇博客分析了如何通过权重进行推理测试、热力图的生成和FPS的计算。相信同学们通过学习上一篇和这一篇的博客,能够基本入门使用多模态图像的框架,从而快速入门多模态图像领域。如有疑问,请在评论区交流。欢迎大家点赞和关注,博主会持续更新相关知识。