快速结论:此报错发生在 Transformers 框架的 RT-DETR 损失计算中,当成本矩阵(cost matrix)因 AMP(自动混合精度)训练产生 `inf` 值,传入 `scipy.optimize.linear_sum_assignment` 时触发。优先排查并替换成本矩阵中的非有限值(`inf`/`NaN`)。
适用环境:Transformers 5.13.0.dev0,Python 3.12.3,PyTorch 2.8.0+cu128,CUDA 12.8,NVIDIA RTX 500 Ada Generation Laptop GPU,Linux (WSL2)。使用 AMP 训练自定义模型,每张图像包含约 100 个小框。
最快修复方案:暂无确认的一步修复方案。社区推荐的修复补丁(PR #47016)已在 RT-DETR 中应用,核心做法是在调用 `linear_sum_assignment` 前,将成本矩阵中的 `NaN` 和正负无穷值替换为该数据类型的最大值。
注意事项:该修复补丁已合入主分支,但 Issue 讨论中明确指出,相同的未受保护模式仍存在于 DETR、Deformable DETR、Grounding DINO 等其他匹配器中(相关修复 PR #47048 已在 CI 中通过)。如果你使用的是这些模型,需要另行升级或应用补丁。
问题场景
用户在训练使用 RTDetrHungarianMatcher(来自 loss_rt_detr.py)的模型时,数据集每张图像包含大量小目标框(约 100 个),并启用了 AMP(自动混合精度)训练。训练经过几个 epoch 后崩溃并抛出 ValueError。该匹配器是 RT-DETR 模型目标检测损失函数的一部分,用于将预测框与真实框进行最优匹配。
报错原文
File "/.../transformers/loss/loss_rt_detr.py", line 118, in forward
indices = [linear_sum_assignment(c[i]) for i, c in enumerate(cost_matrix.split(sizes, -1))]
ValueError: cost matrix is infeasible
原因分析
可能原因是在 RTDetrHungarianMatcher.forward 中启用 use_focal_loss 后,pos_cost_class/neg_cost_class 计算涉及 log() 项,在 AMP(fp16)训练下这些值可能溢出为 inf。与 Mask2Former 等其他模型不同,计算出的最终成本矩阵在传递给 scipy.optimize.linear_sum_assignment 前没有经过任何防护处理,导致无穷值使线性规划问题无解,继而上抛此错误。
环境排查
- 确认 Transformers 版本是否为 5.13.0.dev0 或更高(修复版本需包含 PR #47016)。
- 确认 Python 版本为 3.12.3,PyTorch 版本为 2.8.0+cu128。
- 检查是否启用了 AMP(自动混合精度)训练,这类训练更容易触发浮点溢出。
- 如果使用其他基于 DETR 的模型(如 DETR、Deformable DETR、Grounding DINO 等),需要检查相关损失文件是否同样缺少对
inf/NaN的防护处理(参见 PR #47048)。
解决步骤
- 升级 Transformers 版本:将 transformers 升级到包含 PR #47016 修复的主分支或后续发布版本。
- 如果无法升级,可优先尝试手动补丁:在
src/transformers/loss/loss_rt_detr.py中,找到调用linear_sum_assignment的位置,在其上方加入以下代码:
# 消除成本矩阵中的非有限值,以避免 "ValueError: cost matrix is infeasible" 错误
max_value = torch.finfo(cost_matrix.dtype).max
cost_matrix = torch.nan_to_num(cost_matrix, nan=max_value, posinf=max_value, neginf=max_value)
- 检查同类问题:检查
loss_for_object_detection.py与loss_grounding_dino.py中的HungarianMatcher和GroundingDinoHungarianMatcher,这两处存在相同模式,相关修复在 PR #47048 中(已包含回归测试)。该 PR 也指出loss_deformable_detr.py和loss_lw_detr.py存在相同模式。 - 尝试替代方案(可优先尝试):如果不想改动源码,可以尝试在训练配置中禁用 AMP 或将损失计算改为 fp32 精度,但此方案未经 Issue 验证,仅作为排查手段。
验证方法
确认修复有效的方法是:使用相同的数据集和训练配置(特别是 AMP 设置)重新启动训练,观察是否能通过之前导致崩溃的 epoch 数。社区提供的回归测试会在成本矩阵包含 inf 时正常运行,而不会抛出 ValueError。建议同时运行相关的单元测试来确认修复没有破坏其他功能。
参考来源
huggingface/transformers #47000
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。

![[Bug] Gmail trigger silently stops after 7 days: subscription expires_at is persisted as -1](https://www.chat-gpts.plus/wp-content/uploads/2026/09/41162-d3216684-768x403.jpg)
