YOLO26 多光谱输入支持改造:从数据管道到模型导出的完整实现

本文记录对 Ultralytics YOLO26 的一次完整改造,使其原生支持任意通道数的图像输入。全部改动已在七类视觉任务上完成端到端验证,代码开源。

一、背景

多光谱成像设备(如农业遥感的 RGB+NIR+RedEdge 多波段相机、工业检测中的可见光与热红外融合系统)输出的图像通常包含 4 至 7 个波段,存储为多页 TIFF 格式。将此类数据直接输入 YOLO 系列模型会产生如下错误:

RuntimeError: expected input[2, 7, 640, 640] to have 3 channels, but got 7 channels instead

常见的替代方案是将前三个波段组合为 RGB 训练、其余波段另行处理,或直接舍弃多余波段。然而多光谱数据的核心价值在于不同地物在各波段的反射特性差异,丢弃或拆分波段会损失判别信息,联合建模才是合理的技术路线。

二、官方代码现状分析

经源码分析,Ultralytics YOLO26 已具备部分多通道基础设施,但链路未贯通。

已具备的部分:

  1. 数据集 YAML 支持 channels 字段;
  2. 各任务训练器的 get_model 均将 ch 参数传递给模型构造函数,首层卷积可按指定通道数构建;
  3. imread 补丁对多页 TIFF 的解码是无损的;
  4. HSV 增强、Albumentations 均带有仅作用于三通道图像的守卫判断。

缺失的部分(本次改造内容):

序号 问题 影响
1 分类任务的ClassificationDatasetcv2.imread 转 PIL 加载,且数据描述字典硬编码 channels: 3 多光谱样本在颜色空间转换处崩溃,模型亦按错误通道数构建
2 BaseModel 缺少 channels 属性,预测器无法获知模型输入波段数 大于三通道的模型推理被按三通道处理
3 save_crop 依赖 PIL 编码裁剪图 PIL 不支持七通道数组,调用即崩溃
4 跟踪器全局运动补偿(GMC)仅处理三通道帧 多光谱帧传入特征算法抛异常,运动补偿退化为恒等矩阵
5 torch.compile 预热输入硬编码为 (1, 3, H, W) 开启编译加速的多光谱训练必然失败
6 TensorRT 性能基准的假输入硬编码三通道 对多光谱导出引擎执行 benchmark 时崩溃
7 各任务预测器的后处理无条件执行 BGR 与 RGB 的相互转换 以张量方式输入时多光谱波段顺序被打乱

三、TIFF 存储格式的兼容性验证

多通道 TIFF 存在多种写法,与 OpenCV 解码链路的兼容性差异显著。以下结论均来自实际读写往返测试:

写法 测试结果
cv2.imwritemulti(path, img.transpose(2, 0, 1)),多页 uint8 通过,读取结果与原始数组一致
tifffile.imwrite(path, arr),多页 uint8(arr 形状为 (C, H, W)) 通过,读取结果与原始数组一致
tifffile 写入单页多波段 TIFF 失败,读回维度错乱
float32 类型多页 TIFF 失败,读回维度错乱

因此推荐统一采用 uint8 多页格式,每个波段作为一页。此外需保证全数据集波段顺序一致:框架按文件内的波段顺序原样传输数据,训练与推理阶段均不进行语义层面的顺序纠正。

四、预训练权重的迁移策略

由 COCO 预训练权重微调多光谱模型时,首层卷积因输入通道数不同而无法整体迁移。本方案保留部分迁移逻辑:预训练的三波段卷积核按对应位置拷贝至新层的前三个输入通道(通常前三波段仍具有红绿蓝的物理含义),其余波段核随机初始化参与训练。实测收敛过程无异常。

五、使用方法

数据集配置与常规配置的唯一区别是增加 channels 字段:

path: dataset_root
train: images/train
val: images/val
nc: 2
names: ['class_a', 'class_b']
channels: 7

训练与推理示例:

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.train(data="ms.yaml", epochs=100, imgsz=640)

results = YOLO("best.pt")("image.tiff")
results[0].orig_img.shape   # (H, W, 7),波段顺序与文件一致

detect、segment、obb、pose、classify、semantic、depth 七类任务均已通过完整的训练、验证、推理流程测试,ONNX 导出逐一验证通过。

六、若干设计决策说明

数据增强的取舍。 几何类增强(mosaic、mixup、翻转、透视变换)与通道数无关,全部保留;HSV 抖动等色彩类操作对非 RGB 数据不具备物理意义,框架自动跳过。如需波段级扰动,可在自定义 Dataset 中扩展亮度缩放类增强。

可视化处理。 JPG 与 PNG 格式本身最多支持四通道,因此标注图、验证网格图取前三个波段渲染;完整波段数据通过 results[0].orig_img 提供,不做任何删减。

导出支持范围。 ONNX、TensorRT、OpenVINO、TorchScript、Ascend、LiteRT 均按实际通道数生成输入与元数据;CoreML 因 coremltools 图像输入上限为三通道而不在支持范围内,超限时会显式报错。

七、结语

本项目旨在使多波段联合检测无需使用者修改源码即可完成。适用于农业遥感巡检、可见光与热红外融合检测等波段数不等于三的视觉任务场景。

项目地址:https://github.com/Xiaoguaiyaya/YOLO-multi-channel (遵循 AGPL-3.0 协议开源)

当前端到端验证基于合成多光谱数据完成,欢迎在实际数据上试用并反馈问题,Issues 与 Pull Request 均开放。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐