快速结论:当你用 RTDetrModel 从检测头 checkpoint(或 SEWDForCTC 从 SEW-D checkpoint)加载权重时,如果日志显示 Loading `RTDetrModel` from a detection checkpoint (or `SEWDForCTC` from a SEW-D checkpoint) gives a model with every weight randomly initial 伴随 “newly initialized” 警告,说明模型全部权重被随机初始化,没有真正读到预训练参数。优先排查 base_model_prefix 与模型内部属性嵌套是否一致。
适用环境:Issue 已确认:transformers 5.18.0.dev0、Python 3.10.20、PyTorch 2.12.0+cu130(CUDA)、huggingface_hub 1.15.0、safetensors 0.8.0、Accelerate 1.13.0、Linux x86_64、NVIDIA GeForce RTX 3060;复现脚本为 CPU 运行,未使用分布式或并行。
最快修复方案:升级到包含 PR #48744 修复的 transformers 版本。该修复将 rt_detr/rt_detr_v2/pp_doclayout_v2/pp_doclayout_v3 的 base_model_prefix 对齐到实际属性 self.model,并修正 sew-d(含连字符)与 self.sew_d 的不一致;验证结果为 RTDetrModel 加载 PekingU/rtdetr_r18vd 时 0 个 missing keys,SEWDForCTC 加载 asapp/sew-d-tiny-100k 时仅 lm_head.* 缺失。
注意事项:该修复影响 RT-DETR 系列、SEW-D 及相关变体的加载映射;Issue 中提到 clipseg、timesfm、CLIP/MetaCLIP-2 的 …WithProjection 包装器、VideoPrism 视频模型也存在同类前缀不匹配,但 PR #48744 明确验证的是 RT-DETR 与 SEW-D 家族。长期方案是修改 TRF002 规则,要求 base_model_prefix 满足 isidentifier() 并与 head 嵌套基模型的属性名一致。若你所在版本尚未包含该 PR,可优先尝试在加载后手动检查 missing_keys/unexpected_keys,不要仅凭“加载成功”就认为权重已正确载入。
问题场景
用户希望在不带检测头的情况下获取 RT-DETR 的 encoder 特征,因此运行 RTDetrModel 文档字符串示例,从 PekingU/rtdetr_r50vd 加载 base model。模型能跑通、输出 shape 正确,但全部 502 个权重都报 missing 并被重新初始化;AutoModel 行为相同。反过来,用 SEWDForCTC 加载预训练 asapp/sew-d-tiny-100k 也得到随机初始化权重,导致 CTC 微调在无声无息中从零开始。该问题同样出现在基于 RT-DETR 构建的多个模型(rt_detr_v2、d_fine、deimv2、pp_doclayout_v2/v3、pp_ocrv5/pp_ocrv6 检测器),以及对 PekingU/rtdetr_v2_r18vd 和 ustc-community/dfine-small-coco 使用 AutoModel 时分别丢失 505/505 和 740/740 权重;此外还涉及 clipseg、timesfm、CLIP 与 MetaCLIP-2 的 …WithProjection 包装器以及 VideoPrism 视频模型。
报错原文
Loading `RTDetrModel` from a detection checkpoint (or `SEWDForCTC` from a SEW-D checkpoint) gives a model with every weight randomly initialized
RTDetrModel <- PekingU/rtdetr_r18vd missing 502/502 unexpected 526 base_model_prefix='rt_detr'
RTDetrModel <- PekingU/rtdetr_r18vd missing 502/502 unexpected 526 base_model_prefix='rt_detr'
SEWDForCTC <- asapp/sew-d-tiny-100k missing 222/222 unexpected 220 base_model_prefix='sew-d'
SEWDModel <- asapp/sew-d-tiny-100k-ft-ls100h missing 220/220 unexpected 222 base_model_prefix='sew-d'
the head stores the base model under: ['model']
原因分析
根因是 base_model_prefix 与 head 内部实际嵌套 base model 的属性名不一致。检测头把 base model 保存为 self.model,却声明 base_model_prefix = "rt_detr";loader 依靠这个前缀在 base checkpoint 与 head checkpoint 之间添加/剥离名称来对齐权重(core_model_loading.py:1473-1480),当前缀匹配不到任何属性时,键名永远无法对齐,于是所有权重在一侧报 missing、在另一侧报 unexpected。SEW-D 声明 "sew-d",连字符甚至不能作为属性名;而 DETR 声明 "model",因此两个方向都能正确加载。该问题自各模型加入以来一直存在,且不抛异常,只输出通常的 “newly initialized” 警告,因此长期未被发现。
环境排查
transformers版本:Issue 中为 5.18.0.dev0,需确认是否为包含 PR #48744 的版本。- Python 版本:Issue 中为 3.10.20。
- PyTorch 版本:Issue 中为 2.12.0+cu130(CUDA)。
huggingface_hub1.15.0、safetensors0.8.0、Accelerate1.13.0。- 显卡:NVIDIA GeForce RTX 3060;但复现为 CPU-only。
- 目标模型与 checkpoint:
RTDetrModel/AutoModel加载PekingU/rtdetr_r18vd、SEWDForCTC加载asapp/sew-d-tiny-100k、SEWDModel加载asapp/sew-d-tiny-100k-ft-ls100h等。 - 是否使用分布式或并行:Issue 中为否。
解决步骤
- 确认问题是否存在:用
from_pretrained(..., output_loading_info=True)加载上述 checkpoint,检查missing_keys是否几乎等于len(model.state_dict()),以及unexpected_keys数量是否对称。 - 检查
type(model).base_model_prefix的值,并与 head 中嵌套 base model 的实际属性名对比(例如RTDetrForObjectDetection下 base model 存放在model属性下)。 - 升级到包含 PR #48744 的
transformers版本;该 PR 将 RT-DETR 系列的前缀对齐为实际属性名,并修正 SEW-D 的连字符前缀。 - 若暂时无法升级,可优先尝试在加载后检查
missing_keys/unexpected_keys,确认权重是否真的载入;Issue 中未给出用户侧的手动映射补丁步骤。 - 若使用
rt_detr_v2、pp_doclayout_v2/v3等同一布局变体,确认所用版本是否包含对应修复;PR #48744 已一并修复这些变体。 - 关注 TRF002 规则变更:要求
base_model_prefix满足isidentifier()且与 head 嵌套基模型的属性一致,以防同类问题再次出现。
验证方法
重新运行 Issue 中的复现脚本,观察 output_loading_info=True 返回的 missing_keys/unexpected_keys:修复后 RTDetrModel 加载 PekingU/rtdetr_r18vd 应为 0 个 missing keys;SEWDForCTC 加载 asapp/sew-d-tiny-100k 应仅 lm_head.* 缺失,其余共享权重均被正确载入。同时可检查 test_correct_missing_keys 相关回归测试是否已重新启用并通过。
参考来源
huggingface/transformers #48722
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。

![[Bug]: annotation list / hit-history has_more uses raw limit while query caps at 100 (missed sibling of #41780/#41776)](https://www.chat-gpts.plus/wp-content/uploads/2026/09/41875-511ce6cc-768x403.jpg)
