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_simotmchannels 参数已预设为 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的计算。相信同学们通过学习上一篇和这一篇的博客,能够基本入门使用多模态图像的框架,从而快速入门多模态图像领域。如有疑问,请在评论区交流。欢迎大家点赞和关注,博主会持续更新相关知识。

Logo

立足具身智能前沿赛道,致力于搭建全球化、开源化、全栈式技术交流与实践共创平台。

更多推荐