【YOLOv3-v11 RGBT多模态图像目标检测实战入门:权重测试、热力图可视化与FPS计算】
本文介绍了基于YOLOv3-YOLOv11框架的多模态RGBT图像目标检测测试流程。主要内容包括:1)利用训练生成的best.pt权重文件进行目标检测,生成带标注框的可见光和红外图像结果;2)通过修改heamap_RGBT.py文件参数绘制模型热力图,展示不同层级的特征响应;3)使用get_FPS.py脚本计算模型推理速度,获取关键的FPS性能指标。文章详细解析了各测试环节的核心代码参数设置,为多
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 path
model.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的计算。相信同学们通过学习上一篇和这一篇的博客,能够基本入门使用多模态图像的框架,从而快速入门多模态图像领域。如有疑问,请在评论区交流。欢迎大家点赞和关注,博主会持续更新相关知识。
更多推荐
所有评论(0)