YOLO26 多光谱输入支持改造:从数据管道到模型导出的完整实现
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 已具备部分多通道基础设施,但链路未贯通。
已具备的部分:
- 数据集 YAML 支持
channels字段; - 各任务训练器的
get_model均将ch参数传递给模型构造函数,首层卷积可按指定通道数构建; imread补丁对多页 TIFF 的解码是无损的;- HSV 增强、Albumentations 均带有仅作用于三通道图像的守卫判断。
缺失的部分(本次改造内容):
| 序号 | 问题 | 影响 |
|---|---|---|
| 1 | 分类任务的ClassificationDataset 经 cv2.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 均开放。
更多推荐


所有评论(0)