162、SimOTA 最优传输分配替换 TAL 的代码实现:cost matrix 到 dynamic k 到 supplier-demander

📅 2026/7/9 23:44:52
162、SimOTA 最优传输分配替换 TAL 的代码实现:cost matrix 到 dynamic k 到 supplier-demander
162、SimOTA 最优传输分配替换 TAL 的代码实现:cost matrix 到 dynamic k 到 supplier-demander从一次诡异的mAP震荡说起上个月调YOLOv11的CSP模块,发现换了SimOTA之后验证集mAP在50-55之间来回跳,训练曲线像心电图。排查三天,最后发现是cost matrix里分类损失和回归损失的权重没归一化——这玩意儿在TAL里不明显,因为TAL的topk策略对数值范围不敏感,但SimOTA的dynamic k机制会放大这种偏差。今天就把这个坑填上,顺便把整套替换逻辑拆开揉碎。为什么放弃TALTAL(Task Alignment Learning)在YOLOv11里默认用,核心是计算每个anchor与gt的对齐度,然后选topk。问题在于topk是硬阈值,遇到密集小目标场景,比如VisDrone数据集,topk=10可能把背景anchor也拉进来,topk=7又可能漏掉真值。SimOTA的dynamic k会根据cost分布自动调整每个gt分配的正样本数量,本质上是把分配问题建模成最优传输——每个gt是supplier,每个anchor是demander,cost matrix就是运输成本。代码实现:从cost matrix到dynamic k第一步:重写co