给 Ultralytics YOLO 装上稀疏专家混合¶
一个调用接进官方 ultralytics,路由的平衡项进入反向传播。站内每个数字都对应 results/ 里的一条实验记录。
- 一个调用装上
equip把块接进配置、重编号层引用、接好损失;YOLOv5 至 YOLO26 七代官方主干与 YOLO-Master 分支都能用。 - 辅助损失进入反向传播训练表里
esmoe_aux自成一列,由单元测试与scripts/verify.py的十项真训练检查断言。 - 与 YOLO-Master 作用一致同一个 yolo-master-n、同一份协议:块在上游分支上加 +0.0104,在官方 ultralytics 加本包上加 +0.0095(FP32,各 3/3),两者之差落在等效档。
在 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。论证见选型。