yolov8(Ultralytics系列)多模态融合(可见光与红外光)目标检测与分割检测

yolov8(Ultralytics系列)多模态融合(可见光与红外光)目标检测与分割检测

文章免费

注意:此内容非针对初学者,要求具备一定的知识基础。

前言

​ 随着感知技术的快速发展,多模态融合感知在自动驾驶、安防检测、病理诊断、情感分析等多方面表现出了非常重要的地位。利用不同数据类型的互补优势,多模态数据融合为各个领域实现了高效感知。

在这里插入图片描述

  1. 可见光图像:具有丰富的色彩和纹理细节,但容易受到光照的影响;

  2. 红外图像:不受光照、大雾、大雪等恶劣条件影响,能够高亮显示人和动物,但不具备色彩信息;

  3. LiDRA 点云:提供了精确的深度信息,但成本高,点云数据稀疏;

  4. 解剖形态结构影像(CT、MRI)以较高的空间分辨率提供了清晰的解剖结构信息,但其不能提供功能、代谢信息;

  5. 功能图像(SPECT、PET)分辨率较差,难以得到精确的解剖结构和定位信息,但它能反映脏器的功能、代谢信息;

每个模态的数据有着各自独特的优缺点,利用多个模态的数据进行信息互补,对于AI任务来说涨点非常明显!

多模态感知具有无限可能!
在这里插入图片描述

多模态融合方式介绍

​ 目前,多模态数据融合主要有三种融合方式:前端融合(early-fusion)或数据水平融合(data-level fusion)、后端融合(late-fusion)或决策水平融合(decision-level fusion)和中间融合(intermediate-fusion)。

​ 前端融合将多个独立的数据集融合成一个单一的特征向量,然后输入到机器学习分类器中。由于多模态数据的前端融合往往无法充分利用多个模态数据间的互补性,且前端融合的原始数据通常包含大量的冗余信息。因此,多模态前端融合方法常常与特征提取方法相结合以剔除冗余信息,如主成分分析(PCA)、最大相关最小冗余算法(mRMR)、自动解码器(Autoencoders)等。

​ 后端融合则是将不同模态数据分别训练好的分类器输出打分(决策)进行融合。这样做的好处是,融合模型的错误来自不同的分类器,而来自不同分类器的错误往往互不相关、互不影响,不会造成错误的进一步累加。常见的后端融合方式包括最大值融合(max-fusion)、平均值融合(averaged-fusion)、 贝叶斯规则融合(Bayes’rule based)以及集成学习(ensemble learning)等。其中集成学习作为后端融合方式的典型代表,被广泛应用于通信、计算机识别、语音识别等研究领域。

​ 中间融合是指将不同的模态数据先转化为高维特征表达,再于模型的中间层进行融合。以神经网络为例,中间融合首先利用神经网络将原始数据转化成高维 特征表达,然后获取不同模态数据在高维空间上的共性。中间融合方法的一大优势是可以灵活的选择融合的位置。

视频效果

yolov8(Ultralytics系列)多模态融合(可见光与红外光)目标检测与分割检测

模型训练

本项目采用了中间融合的方式

定义数据

数据集结构
|--data  # 数据根目录
	|--train  # 训练数据(RGB图片与labels)
		|--images  # RGB图片
		|--labels  # 标注信息
	|--train_multi_channel  # 训练数据(红外图片)
		|--images  # 红外图片
	|--val  # 验证数据(RGB图片与labels)
		|--images  # RGB图片
		|--labels  # 标注信息
	|--val_multi_channel  # 验证数据(红外图片)
		|--images  # 红外图片
	|--test  # 测试数据(RGB图片)
		|--images  # RGB图片
	|--test_multi_channel  # 测试数据(红外图片)
		|--images  # 红外图片

如下图所示,分别定义红外光与可见光的数据,images文件夹下存放图像 labels图像存放标注结果(.txt)

在这里插入图片描述

定义数据配置文件data.yaml

在这里插入图片描述

运行方法

官网相关运行方式

相关代码并未修改,都可使用

项目新增的统一入口方式

根据个人习惯新增项目统一入口

run_main.py 里面的 train方法
在这里插入图片描述

运行效果

在这里插入图片描述

关键参数

关键参数详解:

cfg:填写网络结构的yaml文件路径

data: 填写定义数据集的yaml文件路径

epoch: 模型每轮训练的批次,增加轮数有助于提升模型性能,但同时也会增加训练时间

batch-size: 模型每轮训练的批次,可根据实际显存大小进行调整

workers: 设置数据加载进程数,一般根据cpu核心数量设置;linux、windows都可,windows系统无需设置为0

注意

  1. 通道数变更的影响:由于通道数的变化,直接使用预训练模型将不再适用,而需要采取特殊处理措施。
  2. 代码版本限制:当前代码为迁移简化版,不支持自定义通道数设置,仅能处理6通道数据(即包含两组3通道数据)。
  3. 任务针对性:本代码专为目标检测任务(detect)进行了修改,兼容分割segment、姿态pose、方向obb。分类任务无法直接运行。
  4. 训练示例:训练示例图片不是选择RGB三个通道展示
  5. 定制需求:如有对上述优化点的特定需求,欢迎联系本人进行定制修改。
  6. 性能考量:由于采用了多通道数据处理,内存消耗和图片加载时间均有所增加。建议在训练初期先运行几个Epoch,根据实际效果调整参数设置。

模型验证

训练结束后会在最后一轮输出模型的完整指标,但如果想要单独评估一下模型,可以通过如下命令来进行

运行方法

官网相关运行方式

相关代码并未修改,都可使用

项目新增的统一入口方式

根据个人习惯新增项目统一入口

run_main.py 里面的 val方法

关键参数

关键参数详解:

weights: 填写想要评估模型的路径

batch-size: 用于评估的批次,一般是训练时的2倍,可根据实际显存大小进行调整

iou-thres: nms阈值,设置的越小保存的目标框越精确,同理目标数量会减小,可根据实际需求进行调整

conf-thres: 置信度阈值,设置的越大保存的目标框越精确,同理目标数量会减小,评估阶段是默认设置为0.001,可根据实际需求进行调整

模型推理

运行方法

官网相关运行方式

相关代码并未修改,都可使用

项目新增的统一入口方式

根据个人习惯新增项目统一入口

run_main.py 里面的 predict方法

关键参数

关键参数详解:

weights: 指定用于推理的模型路径,可通过更改此路径来加载不同的权重文件

在这里插入图片描述

运行效果

在这里插入图片描述
在这里插入图片描述

其他

完整代码
https://mall.bilibili.com/neul-next/detailuniversal/detail.html?isMerchant=1&page=detailuniversal_detail&saleType=10&itemsId=12077218&loadingShow=1&noTitleBar=1&msource=merchant_share
数据集
https://mall.bilibili.com/neul-next/detailuniversal/detail.html?isMerchant=1&page=detailuniversal_detail&saleType=10&itemsId=12077217&loadingShow=1&noTitleBar=1&msource=merchant_share

### 比较YOLOv11和YOLOv5在双模态目标检测中的精度 对于双模态目标检测任务而言,模型架构的设计以及其鲁棒性和泛化能力至关重要。YOLO系列算法经历了多个版本的发展,在不同方面进行了优化。 #### YOLOv5的特点 YOLOv5引入了一系列改进措施来提升性能,包括但不限于更有效的特征提取机制、更好的数据增强策略以及更加精细的损失函数设计[^1]。这些特性有助于提高模型对复杂场景的理解能力和适应性。 #### YOLOv11的特点 尽管具体细节可能因官方文档未完全公开而有所保留,但从已知信息来看,YOLOv11进一步增强了网络结构,并采用了分布稳健优化方法以改善模型训练过程中的稳定性和最终效果。然而,这并不意味着YOLOv11必然会在所有应用场景下都优于前代产品;实际表现取决于特定任务需求及实现方式等因素的影响。 #### 双模态目标检测下的精度差异分析 当应用于双模态目标检测时,如果发现YOLOv11相比YOLOv5存在较低的表现,则可能是由于以下几个因素造成的: - **多源数据融合效率**:处理来自不同类型传感器的数据并将其有效结合起来是一个挑战。即使是最先进的单目视觉识别技术也可能难以直接迁移至跨域感知环境中。 - **领域自适应能力不足**:即便是在同一类物体上训练良好的模型也可能会因为测试集训练集中样本分布的不同而导致预测偏差增大。因此,缺乏足够的针对新环境调整参数的能力会影响整体准确性。 为了提高YOLOv11在此类任务上的精度,可以考虑采取如下几种手段之一或组合应用: - 实施更强力的数据预处理流程,确保输入到神经网络之前已经尽可能消除噪声干扰; - 利用迁移学习原理预先在一个大规模通用图像库上完成初步权重初始化后再转训专有类别; - 探索新的正则项加入损失计算环节从而促使解空间向更具代表性的方向收敛。 ```python import torch.nn as nn class CustomLoss(nn.Module): def __init__(self, base_loss_fn=nn.CrossEntropyLoss()): super(CustomLoss, self).__init__() self.base_loss = base_loss_fn def forward(self, output, target): # 基础损失加上额外的正则项 loss = self.base_loss(output, target) + custom_regularization_term() return loss ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值