
3步跑通YOLO多光谱检测从数据准备到模型调优【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics无人机回传的8通道TIFF直接喂给YOLO第一反应大概是这模型只认3通道RGB吧其实不用改网络。Ultralytics YOLO通过数据集yaml里的一个channels参数原生支持多光谱输入训练、验证、推理流程和RGB完全一致。下面直接过一遍完整流程用官方自带的coco8-multispectral小数据集跑通demo再拆一下框架内部是怎么处理波段数的最后按波段数给你调优决策。快速跑通10分钟跑起第一个多光谱demo第1步训练数据集会自动下载框架内置了coco8-multispectral数据集ultralytics/cfg/datasets/coco8-multispectral.yaml4张图、10个波段由RGB图像沿波长插值生成约20MB不需要自己找数据yolo train datacoco8-multispectral.yaml modelyolov8n.pt epochs3 imgsz32跑通后你会看到训练结束日志outputs目录里生成best.pt和训练曲线results.png。第2步验证确认多光谱链路没断yolo val datacoco8-multispectral.yaml modelruns/detect/train/weights/best.pt预期输出是一张包含mAP50-95、Precision、Recall的指标表。因为只是3个epoch指标很低这里只证明验证流程能正常读取10通道TIFF。第3步推理看自动降维的可视化from ultralytics import YOLO model YOLO(runs/detect/train/weights/best.pt) results model(path/to/your_multispectral.tif) results[0].show()多光谱输入在show()时会自动截取前3通道渲染所以你看到的框画在类RGB预览上原始波段数据并不丢。核心机制拆解一张图从进到出网络输入层按channels自动适配这一步框架在做什么构建模型时第一个卷积层的输入通道数直接取yaml里的channels字段而不是写死3。Conv模块ultralytics/nn/modules/conv.py:51的c1参数就是这个值def __init__(self, c1, c2, k1, s1, pNone, g1, d1, actTrue):为什么这么设计卷积核本身不关心通道数只要c1对得上3通道和10通道走的是同一套架构你换波段数不用重新搭网络。数据增强按通道数分流训练时每个增强算子都会先判断通道数。以LetterBox的填充逻辑为例只有恰好3通道才走cv2的快速路径其余含多光谱用全通道填充ultralytics/data/augment.py:1800-1807if c 3: img cv2.copyMakeBorder(...) else: # multispectral pad_img np.full((h top bottom, w left right, c), fill_value...)HSV颜色扰动也是同样的保护ultralytics/data/augment.py:1471 里非3通道图像直接跳过——色相、饱和度对波段3/波段4没有物理意义动了反而破坏光谱一致性。可视化在显示时降维结果渲染时PILImageMorphOps对通道数大于3的输入截取前3通道PIL侧非RGB模式再转一次RGBultralytics/utils/plotting.py:313-318elif im.shape[2] 3: # multispectral im np.ascontiguousarray(im[..., :3])这样设计是为了让show()和拼图结果永远能正常显示而模型内部拿到的是完整波段。想看其他波段组合比如农业常用的NIR-红-绿假彩色自己在绘制前切片即可。没有真实数据插值生成一份框架还内置了RGB转多光谱的工具ultralytics/data/converter.py:727按450-700nm波长对RGB做线性插值输出多通道TIFFfrom ultralytics.data.converter import convert_to_multispectral convert_to_multispectral(path/to/rgb_dataset, n_channels10)注意它是模拟数据适合验证流程和调参数不适合评估真实场景效果。调优决策波段数不同改什么不一样核心逻辑就一条channels参数决定一切改它不需要碰模型代码。如果波段数不超过8把yaml里的channels改成实际值选n或m规格yolov8n/m起步即可。第一层卷积参数量随通道数线性增长但整体占比很小推理速度基本无感path: ../datasets/my_ms_dataset train: images/train val: images/val channels: 8 # 与TIFF实际波段数一致 nc: 3 names: [0: object]如果波段数在9-16之间channels照改但建议把规格升到m/l因为第一层卷积的算力占比开始变得可观小模型容易在浅层就把波段信息压丢。同时用convert_to_multispectral先拿模拟数据跑一版超参再切真实数据微调省算力。如果波段数超过16先别急着上更深模型。更实际的做法是先用ultralytics/data/converter.py的思路做波段筛选把信息量最大的波段挑出来降到16以下再训练确需全波段输入时再考虑l/x规格并在ultralytics/engine/exporter.py:854 关注的导出环节验证channels是否正确写进了模型元数据。波段范围推荐规格推理速度变化需要改动的文件4-8n / m基本无感数据集yaml的channels9-16m / l略降首层卷积yaml 换model权重16l / x先做波段筛选明显变慢yaml 导出配置验证场景速查场景典型波段数关键波段推荐数据增强策略注意事项农业监测NDVI等指数4-8红、近红外几何类增强为主颜色增强保持关闭框架自动跳过近红外常是低动态范围检查灰度分布遥感解译4-13短波红外、近红外Mosaic 几何翻转原图分辨率高先下采样到模型尺度再训练工业检测红外/低光照1-3长波红外常规增强即可1通道按灰度处理单通道走灰度分支勿与2通道混淆医疗影像辅助筛查3-10依设备而定仅用几何与强度类避免合成增强波段与波长需一一对应记录便于后处理三个通用陷阱一是可视化默认只显示前3通道汇报结果前先确认看的是不是你关心的波段二是模拟数据集coco8-multispectral、dota8-multispectral的波段是插值出来的mAP数字只说明流程通不代表真实场景水平三是多光谱TIFF必须用框架的加载链路读自己写cv2.imread很容易踩坑见下节。常见坑与解法坑cv2.imread读多通道TIFF返回None报空指针。 →解法框架走的是imreadmulti路径读全部波段你自己写脚本预处理时也用cv2.imreadmulti别用imread。坑手动开了HSV增强训练曲线异常。 →解法其实ultralytics/data/augment.py:1471已对非3通道自动跳过如果你的增强代码是自己写的加一行shape判断if img.shape[-1] ! 3: return。坑letterbox填充后多通道图像出现黑边伪影。 →解法框架已用np.full全通道填充处理ultralytics/data/augment.py:1804确保走官方训练入口别在外部预拼batch。坑results[0].show()画出来的颜色不对劲。 →解法那是前3通道的预览取完整波段用results[0].orig_img需要哪种假彩色合成自己切片。坑导出的ONNX/OpenVINO模型只接受3通道输入。 →解法确认训练时yaml里channels已改对导出走ultralytics/engine/exporter.py它会把channels写进模型元数据ultralytics/engine/exporter.py:955。上面从数据准备、机制、调优到坑位过了一遍YOLO多光谱检测的完整链路核心就一句话channels参数对齐其余流程与RGB训练推理完全通用。更细的参数说明和更多多光谱数据集如dota8-multispectral在仓库文档docs/en/datasets/detect/coco8-multispectral.md里有维护遇到具体报错先查那里。【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考