跳转至
4 选 2 专家路由

给 Ultralytics YOLO 装上稀疏专家混合

一个调用接进官方 ultralytics,路由的平衡项进入反向传播。站内每个数字都对应 results/ 里的一条实验记录。

每张图从 4 个专家里选 2 个
  • 一个调用装上equip 把块接进配置、重编号层引用、接好损失;YOLOv5 至 YOLO26 七代官方主干与 YOLO-Master 分支都能用。
  • 辅助损失进入反向传播训练表里 esmoe_aux 自成一列,由单元测试与 scripts/verify.py 的十项真训练检查断言。
  • 与 YOLO-Master 作用一致同一个 yolo-master-n、同一份协议:块在上游分支上加 +0.0104,在官方 ultralytics 加本包上加 +0.0095(FP32,各 3/3),两者之差落在等效档。
142次满协议训练,600 卡时
7代官方主干,另有 yolo-master-n
335项测试,含与上游、论文的数值对照
11次先于结果提交的预登记

在 Colab 里打开快速上手:安装、接入、训练,在日志里看到 esmoe_aux 列,全程在免费 GPU 上完成。

安装

pip install esmoe

分发名、导入名与命令行名都是 esmoe

使用

import esmoe

model = esmoe.equip("yolo11n.yaml", weight=0.01)   # 注册 + 嫁接 + 构建 + 接损失
model.train(data="coco8.yaml", epochs=10)

分步调用、命令行与手写配置见教程

兼容性

主干 构建与前向 嫁接进配置 训练中的辅助损失 满协议运行
YOLOv5
YOLOv8
YOLOv9
YOLOv10
YOLO11
YOLO12
YOLO26
YOLO-Master(分支)

tests/test_ultralytics.py 在 ultralytics 8.4.101 与最新发布版上验证(CI 矩阵),两者的 loss items 形态不同,均已处理。训练一列由四代主干上真实的 1-epoch VisDrone 训练与七代主干上 120 epoch 的协议运行共同支撑,日志里 train/esmoe_aux 均非零;每一行的嫁接与前向都在 CI 里跑。YOLO-Master 一行跑在该分支自带的 ultralytics 上:scripts/fork_smoke.py 嫁接进它的 yolo-master-n.yaml、真实训练一轮且 esmoe_aux 非零,它自己的 ES_MOE 配置与本块共存。分支上的同配置对照训练的是上游自己的块,本包的块在官方 ultralytics 上训练 yolo-master-n,所以最后一列为否。

默认配置

ESMoE(num_experts=4, top_k=2)attach_aux_loss(weight=0.01)。在 25% 训练集、640 像素、20 epoch 的统一预算下,它胜过 2 专家、8 专家、top-1 与关掉辅助损失的变体;在全量 VisDrone 上以同样的 20 epoch、640 像素、三个 seed 确认:配对 3/3 胜,mAP50 +0.0021,YOLOv8n 上参数增加 10.4%。协议预算(800 像素、120 epoch)下,YOLOv8n 默认接法为 +0.0025、2/3。论证见选型