基于YOLO11的多模态(可见光+红外光)实现 LLVIP数据集涨点可行性验证

简介: 本文介绍可见光与红外光多模态目标检测,分析前期、中期、后期融合策略,实验证明中期融合效果最优;基于YOLO11实现RGB-T中期特征融合,在LLVIP数据集上取得mAP50达0.879的优异性能,后续将优化模型提升多模态检测能力。

    💡💡💡本文主要内容:介绍了多模态的现状,以及复现至YOLO11,实现基于YOLO11的中期融合,下一步计划打算魔改提升多模态的性能。

image.png

1. 多模态(可见光+红外光)介绍

       红外光与可见光之间具有极佳的互补性。可见光不仅在夜间展现出的特征不明显,白天条件下逆光拍摄、树荫等图像部分较暗的环境也会大幅度影响图像特征。相反,红外光在光照条件不足的情况下可以展现出更加明显的图像特征,但是没有色彩信息相关的特征。所以如何设计好一种红外光与可见光的模态融合机制实现模态之间的互补,依旧具有挑战性。

image.gif

LLVIP是北京邮电大学采集的一个用于微光视觉的可见光-红外光数据集。该数据集包含16836对图像,其中大部分是在夜晚昏暗的场景中拍摄,所有图像均在时间和空间上严格对齐。作者将该数据集与其他可见光和红外数据集进行了比较,并评估了一些流行的视觉算法的性能,包括图像融合和行人检测。

1.1 多模态融合算法

在目标检测(object detection)领域,数据融合策 略至关重要,尤其是在整合多模态数据和提升检测性 能方面。根据数据整合的时间点和方式,融合策略可 分为前期融合(early fusion)、中期融合(mid fusion) 和后期融合(late fusion)。每种策略在目标检测任务 中都有其独特的应用和优势。多模态融合算法类型如 图 1 所示。

image.gif

如图 1 所示,根据检测网络中融合位置的不同, 多模态目标检测方法可以分为 3 类:前期融合、中期 融合(特征级融合)和后期融合。如图 1(a)为前期融 合,前期融合在特征提取之前进行图像融合。前期融 合方法首先将红外图像和可见光图像进行初步融合, 然后将融合后的图像输入到检测模型中。这种方法允 许模型在最初的特征提取阶段就同时处理所有输入 数据,从而捕捉到不同数据源之间的复杂关系。图 1(b) 为中期融合,中期融合方法通过分别提取红外图像和 可见光图像的特征,再将这些特征在检测网络中进行 融合。这种方法不仅允许不同数据源的独立特征提取, 还可以在特征级别上捕捉到更高层次的交互。图 1(c) 为后期融合,后期融合在目标检测中意味着各个数据 源经过独立的模型处理后,将输出结果在最终决策层 面进行整合。3 种融合方式各有其优缺点,为充分满 足本文研究的需要,本文在对 3 种融合方式进行实验 对比,并在较好的融合方式上进行算法改进。

实验对比:由表 3 可以看出,在三种融合方式中,在召回率, 精确率和平均精度三种指标中,中期融合的结构都要优于前期融合和后期融合,因此本文在中期融合的基础上对模型进行改进

image.gif

红外检测效果:

image.gif

参考文献:

崔家礼,王涵,郑瀚,胡征慧.基于 BPP-YOLO v8 的多模态目标检测算法 [J/OL].红外技术. https://link.cnki.net/urlid/53.1053.TN.20240830.1105.002

2.如何复现至YOLO11

2.1  数据集格式要求

|-datasets
    |-LLVIP
        |-images #  RGB
        |-image  # 红外图
        |-labels # RGB和红外图公用同一份标签

image.gif

数据集分布情况:

image.gif

2.2 基于YOLO11的中期融合可视化

yolo11n-RGBT-midfusion.yaml

# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# Ultralytics YOLO11 object detection model with P3/8 - P5/32 outputs
# Model docs: https://docs.ultralytics.com/models/yolo11
# Task docs: https://docs.ultralytics.com/tasks/detect
# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolo11n.yaml' will call yolo11.yaml with scale 'n'
  # [depth, width, max_channels]
  n: [0.50, 0.25, 1024] # summary: 319 layers, 2624080 parameters, 2624064 gradients, 6.6 GFLOPs
  s: [0.50, 0.50, 1024] # summary: 319 layers, 9458752 parameters, 9458736 gradients, 21.7 GFLOPs
  m: [0.50, 1.00, 512] # summary: 409 layers, 20114688 parameters, 20114672 gradients, 68.5 GFLOPs
  l: [1.00, 1.00, 512] # summary: 631 layers, 25372160 parameters, 25372144 gradients, 87.6 GFLOPs
  x: [1.00, 1.50, 512] # summary: 631 layers, 56966176 parameters, 56966160 gradients, 196.0 GFLOPs
ch: 4
# YOLOv8.0n backbone
backbone:
  # [from, repeats, module, args]
  - [-1, 1, Silence, []]  # 0-P1/2
    # visible
  - [0, 1, SilenceChannel, [0,3]]  # 1-P1/2
  - [-1, 1, Conv, [64, 3, 2]] # 2-P1/2
  - [-1, 1, Conv, [128, 3, 2]] # 3-P2/4
  - [-1, 2, C3k2, [256, False, 0.25]]
  - [-1, 1, Conv, [256, 3, 2]] # 5-P3/8
  - [-1, 2, C3k2, [512, False, 0.25]]
  - [-1, 1, Conv, [512, 3, 2]] # 7-P4/16
  - [-1, 2, C3k2, [512, True]]
  - [-1, 1, Conv, [1024, 3, 2]] # 9-P5/32
  - [-1, 2, C3k2, [1024, True]] # 10
  # infrared
  - [ 0, 1, SilenceChannel, [ 3,4 ] ]  # 11-P1/2
  - [ -1, 1, Conv, [ 64, 3, 2 ] ] # 12-P1/2
  - [ -1, 1, Conv, [ 128, 3, 2 ] ] # 13-P2/4
  - [ -1, 2, C3k2, [ 256, False, 0.25 ] ]
  - [ -1, 1, Conv, [ 256, 3, 2 ] ] # 15-P3/8
  - [ -1, 2, C3k2, [ 512, False, 0.25 ] ]
  - [ -1, 1, Conv, [ 512, 3, 2 ] ] # 17-P4/16
  - [ -1, 2, C3k2, [ 512, True ] ]
  - [ -1, 1, Conv, [ 1024, 3, 2 ] ] # 19-P5/32
  - [ -1, 2, C3k2, [ 1024, True ] ]  #20
  - [[6, 16], 1, Concat, [1]]  # cat backbone P3   21
  - [[8, 18], 1, Concat, [1]]  # cat backbone P4   22
  - [[10, 20], 1, Concat, [1]]  # cat backbone P5   23
  - [ -1, 1, SPPF, [ 1024, 5 ] ] # 24
  - [ -1, 2, C2PSA, [ 1024 ] ] # 25
# YOLO11n head
head:
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 22], 1, Concat, [1]] # cat backbone P4
  - [-1, 2, C3k2, [512, False]] # 28
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 21], 1, Concat, [1]] # cat backbone P3
  - [-1, 2, C3k2, [256, False]] # 31 (P3/8-small)
  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 28], 1, Concat, [1]] # cat head P4
  - [-1, 2, C3k2, [512, False]] # 34 (P4/16-medium)
  - [-1, 1, Conv, [512, 3, 2]]
  - [[-1, 25], 1, Concat, [1]] # cat head P5
  - [-1, 2, C3k2, [1024, True]] # 37 (P5/32-large)
  - [[31, 34, 37], 1, Detect, [nc]] # Detect(P3, P4, P5)

image.gif

2.3 训练可视化结果

YOLO11n-RGBT-midfusion summary (fused): 324 layers, 3,784,883 parameters, 0 gradients, 9.30 GFLOPs
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 109/109 [00:52<00:00,  2.07it/s]
                   all       3463       8302      0.895      0.816      0.879      0.482
Speed: 0.3ms preprocess, 2.6ms inference, 0.0ms loss, 1.4ms postprocess per image

image.gif

F1_curve.png:F1分数与置信度(x轴)之间的关系。F1分数是分类的一个衡量标准,是精确率和召回率的调和平均函数,介于0,1之间。越大越好。

TP:真实为真,预测为真;

FN:真实为真,预测为假;

FP:真实为假,预测为真;

TN:真实为假,预测为假;

精确率(precision)=TP/(TP+FP)

召回率(Recall)=TP/(TP+FN)

F1=2*(精确率*召回率)/(精确率+召回率)

image.gif

PR_curve.png :PR曲线中的P代表的是precision(精准率)R代表的是recall(召回率),其代表的是精准率与召回率的关系。

image.gif

预测结果:

image.gif


目录
相关文章
|
5月前
|
机器学习/深度学习 编解码 算法
SPMamba-YOLO:多尺度增强+全局建模,水下目标检测精度飙升4.9%!
本文提出SPMamba-YOLO水下目标检测模型:创新融合SPPELAN(增强多尺度特征与感受野)、PSA注意力(抑制背景、提升小目标判别)及Mamba状态空间模块(建模长程依赖),在URPC2022上mAP@0.5达82.5%,超越YOLOv8n 4.9%。
682 2
|
机器学习/深度学习 数据可视化 测试技术
YOLO26如何训练自己的数据集 | (NEU-DET为案列)
本文详解YOLO26全新架构:移除DFL、端到端无NMS推理、ProgLoss+STAL损失策略及MuSGD优化器;并以NEU-DET数据集为例,详述训练全流程(含预训练/优化器选择/模型缩放对比),附结构图、代码与可视化结果。
565 1
|
7月前
|
机器学习/深度学习 计算机视觉 网络架构
YOLO26改进 - 注意力机制 |融合HCF-Net维度感知选择性整合模块DASI 增强小目标显著性
本文介绍将HCF-Net中的维度感知选择性融合(DASI)模块集成至YOLO26检测头,通过通道分区与Sigmoid自适应加权,融合高/低维及当前层特征,显著提升红外小目标检测精度,在SIRST数据集上超越主流方法。(239字)
|
5月前
|
机器学习/深度学习 编解码 运维
红外小目标检测新突破!异常感知检测头AA-YOLO:节俭又鲁棒,小样本也能精准识别
本文提出AA-YOLO:首个将统计异常检验嵌入YOLO检测头的方法,通过指数分布建模背景,显式识别小目标为统计异常,显著降低误报率;仅需10%数据即达90%全量性能,参数比EFLNet少6倍,轻量高效;在噪声、跨域、跨模态下鲁棒性强,且可无缝适配各类YOLO及实例分割网络。
745 5
|
7月前
|
机器学习/深度学习 编解码 算法
YOLO26改进 - C2PSA | C2PSA融合TSSA(Token Statistics Self-Attention)令牌统计自注意力,优化遮挡目标感知
本文提出Token统计自注意力(TSSA),通过动态分组与低秩投影实现线性复杂度注意力机制。基于MCR²目标推导,摒弃传统成对相似度计算,显著提升效率。集成于YOLO26的C2PSA模块后,实验验证其在目标检测中性能优越,代码已开源。
|
5月前
|
机器学习/深度学习 人工智能 数据可视化
基于YOLO11的交通违规检测系统(Python源码+数据集+Pyside6界面)
本文基于YOLO11构建交通违规检测系统,涵盖23类目标(车辆、信号灯、标志等),详解数据制作(ROI裁剪优化尺度)、模型改进(C3k2、C2PSA、轻量Detect头)及训练可视化全过程,并集成PySide6实现GUI应用,助力工业落地。
891 12
|
2月前
|
机器学习/深度学习 人工智能 数据可视化
YOLO26如何涨点系列篇(NEU-DET缺陷检测) | CVPR2026 DEGConv方向引导边缘门控,破解细长裂缝检测难题 ,实现涨点
在NEU-DET数据集下验证:原始mAP50原始为 0.722提升至 0.732 , R 原始为 0.643 提升至 0.682 , mAP50-95原始为0.407提升至0.413
389 6
|
2月前
|
机器学习/深度学习 数据可视化 测试技术
YOLO26如何涨点系列篇(NEU-DET缺陷检测) | CVPR2026 FAAFusion 解决Neck跨尺度方向冲突,实现涨点1.2%
在NEU-DET数据集下验证:原始mAP50原始为 0.722提升至 0.734 ,P 原始为  0.745 提升至   0.749, R 原始为 0.643 提升至0.665 , mAP50-95原始为0.407提升至 0.41
371 3
|
机器学习/深度学习 算法 数据可视化
YOLO26如何训练自己的分割数据集 | (裂缝分割为案列)
YOLO26全新发布!本文详解其核心创新:移除DFL、端到端无NMS推理、ProgLoss+STAL损失策略、MuSGD优化器,并附结构框图;同时以裂缝分割为例,手把手演示自定义数据集训练全流程(含预训练与非预训练对比)。
640 0
|
机器学习/深度学习 机器人 测试技术
源码级解读:YOLO26的新架构与创新设计(原理介绍+代码详见+结构框图)
YOLO26是面向边缘设备的最新实时目标检测模型,核心创新包括:移除DFL简化架构、端到端无NMS推理、ProgLoss+STAL提升小目标检测、MuSGD优化器加速收敛,并支持检测/分割/姿态等多任务。CPU推理速度较前代提升最高43%,已在Jetson等平台实现实时部署。
1360 1