yolov8(Ultralytics系列)多模态融合(可见光与红外光)目标检测与分割检测
文章免费
注意:此内容非针对初学者,要求具备一定的知识基础。
前言
随着感知技术的快速发展,多模态融合感知在自动驾驶、安防检测、病理诊断、情感分析等多方面表现出了非常重要的地位。利用不同数据类型的互补优势,多模态数据融合为各个领域实现了高效感知。
可见光图像:具有丰富的色彩和纹理细节,但容易受到光照的影响;
红外图像:不受光照、大雾、大雪等恶劣条件影响,能够高亮显示人和动物,但不具备色彩信息;
LiDRA 点云:提供了精确的深度信息,但成本高,点云数据稀疏;
解剖形态结构影像(CT、MRI)以较高的空间分辨率提供了清晰的解剖结构信息,但其不能提供功能、代谢信息;
功能图像(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
注意
- 通道数变更的影响:由于通道数的变化,直接使用预训练模型将不再适用,而需要采取特殊处理措施。
- 代码版本限制:当前代码为迁移简化版,不支持自定义通道数设置,仅能处理6通道数据(即包含两组3通道数据)。
- 任务针对性:本代码专为目标检测任务(detect)进行了修改,兼容分割segment、姿态pose、方向obb。分类任务无法直接运行。
- 训练示例:训练示例图片不是选择RGB三个通道展示
- 定制需求:如有对上述优化点的特定需求,欢迎联系本人进行定制修改。
- 性能考量:由于采用了多通道数据处理,内存消耗和图片加载时间均有所增加。建议在训练初期先运行几个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