AttributeError: ‘FeatureGetterNet’ object has no attribute ‘return_layers’

这个报错通常出现在使用 TimmBackbone 并把 timm 模型当骨干网络(如 Mask2Former、ViT 等)时,旧版 Transformers 会强制读取被包装模型的 return_layers 属性,而 timm 新引入的 FeatureGetterNet 并没有该属性。优先排查 T

快速结论:这个报错通常出现在使用 TimmBackbone 并把 timm 模型当骨干网络(如 Mask2Former、ViT 等)时,旧版 Transformers 会强制读取被包装模型的 return_layers 属性,而 timm 新引入的 FeatureGetterNet 并没有该属性。优先排查 Transformers 版本是否已包含从 feature_info 推导层映射的修复(v4.41.0 起)。

适用环境:Issue 中已确认的工具为 Transformers,涉及 timm 的 forward_intermediates 特性;帖子未提供操作系统、Python、CUDA、显卡等具体版本信息。

最快修复方案:升级 Transformers 到 v4.41.0 或更高版本(对应 #29038),使 TimmBackbonefeature_info 派生根层映射,而不再从被包装模型读取 return_layers

注意事项:升级后,output_hidden_states=True 对这些骨干仍可能抛出 IndexError,因为 FeatureGetterNet 上的 return_layers 赋值是空操作;该遗留问题需要单独 issue 跟进。

问题场景

用户在使用 Transformers 的 Mask2FormerModel(通过 Mask2FormerConfig(use_timm_backbone=True, backbone="vit_small_patch16_224"))或任何依赖 TimmBackbone 的模型时触发此报错。原因在于 TimmBackbone 假设包裹的 timm 模型实现过 return_layers,而 timm 新推出的 forward_intermediates 特征提取封装(如 FeatureGetterNet)并未提供该属性。

报错原文

AttributeError: 'FeatureGetterNet' object has no attribute 'return_layers'

原因分析

旧版 TimmBackbone__init__/forward 中直接读取 self._backbone.return_layers,用于构建 _return_layers_all_layers 并控制隐藏状态输出。timm 的新封装(如 FeatureGetterNet,由 forward_intermediates 特性引入)不暴露 return_layers,因此访问该属性时抛出 AttributeError。维护者确认的修复方向是:不再从被包装模型读取 return_layers,改为从 feature_info 推导层映射。

环境排查

  • 确认当前 Transformers 版本:需要 ≥ v4.41.0(包含 #29038 的修复)。
  • 确认 timm 版本:若使用 forward_intermediates 相关封装,需为新版 timm;Issue 中讨论过可能需要从 timm 的 main 分支安装,直到新版本发布。
  • 确认使用的模型/节点:是否通过 use_timm_backbone=TrueTimmBackbone 加载骨干。
  • 确认是否设置 output_hidden_states=True:该场景即使升级后仍已知会抛 IndexError
  • Issue 未提供 Python、PyTorch、CUDA、显卡等具体版本,无需补写。

解决步骤

  1. 升级 Transformers 到 v4.41.0 或更新版本,以获取 #29038 中对 TimmBackbone 的修复(改为从 feature_info 派生层映射)。
  2. 若仍报错,检查 timm 是否为包含 forward_intermediates 的较新版本;在 Issue 讨论中曾建议安装 timm 的 main 分支,直到新版发布(可优先尝试)。
  3. 重新运行引发报错的代码,例如 Mask2FormerModel(config=Mask2FormerConfig(use_timm_backbone=True, backbone="vit_small_patch16_224")),验证是否已不再出现 return_layers 缺失。
  4. 若使用了 output_hidden_states=True,请暂时关闭该选项;该场景下的 IndexError 属于未解决的遗留问题,需单独开 issue 跟进。

验证方法

在升级后的环境里重新运行原先失败的 Mask2FormerModel 构造代码。若不再出现 AttributeError: 'FeatureGetterNet' object has no attribute 'return_layers',即视为修复生效。维护者确认在 current main 上该代码片段可以正常运行。

参考来源

huggingface/transformers #30307

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 24906

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注