1. 目标检测中的标签分配演进史
在目标检测领域,标签分配(Label Assignment)一直是个核心问题。简单来说,它要解决的是"哪些anchor/point该负责预测哪个目标"的问题。传统方法像RetinaNet用的固定IoU阈值(如0.5),Fast R-CNN用的Max-IoU,都存在明显的局限性——它们都是静态策略,无法适应不同场景中目标的尺度、形状变化。
2019年出现的ATSS(Adaptive Training Sample Selection)首次提出根据目标特性动态调整正负样本阈值,但真正引发变革的是2020年旷视提出的OTA(Optimal Transport Assignment)。OTA将标签分配建模为最优传输问题,考虑全局信息来寻找最优匹配。随后出现的SimOTA是其简化版本,在速度和精度间取得更好平衡。而2022年的Task-Aligned Assigner则进一步引入分类-检测任务对齐机制,让分配过程与最终任务目标更一致。
注:这三种策略已成为当前主流检测器(如YOLOv6/v7、RTMDet等)的标准配置,理解它们对调优模型至关重要
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. OTA:最优传输视角的全局优化
2.1 数学建模过程
OTA的核心思想是将标签分配看作最优传输问题——把K个gt(目标)分配给N个anchor,每个gt需要一定数量的正样本(通常取top-k),传输成本由分类+回归损失共同决定。数学上可表述为:
code复制minπ ∑(i=1~N)∑(j=1~K) Cij·πij
s.t. ∑(i=1~N) πij = kj, ∑(j=1~K) πij = 1, πij ∈ [0,1]
其中Cij = Lcls(pi, gj) + α·Lreg(ai, gj),α是平衡系数,kj是第j个gt需要的正样本数。
2.2 Sinkhorn-Knopp迭代解法
实际实现时采用Sinkhorn-Knopp算法进行近似求解:
python复制# 伪代码示例
def OTA_assignment(cls_scores, reg_preds, gt_boxes):
cost = cls_cost + alpha * reg_cost # 计算NxK成本矩阵
cost_matrix = -cost #
