You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Detectron2自定义模型在CPU环境报‘配置键不存在’错误,配置项已存在

解决Detectron2自定义模型CPU环境KeyError问题

针对自定义Detectron2模型在CPU环境报错KeyError: 'Non-existent config key: MODEL.ROI_BOX_HEAD.FED_LOSS_FREQ_WEIGHT_POWER'、但GPU环境和预训练模型正常运行的问题,可按以下方案解决:

1. 对齐Detectron2版本

该报错最常见原因是训练环境(GPU)与推理环境(CPU)的Detectron2版本不一致。MODEL.ROI_BOX_HEAD.FED_LOSS_FREQ_WEIGHT_POWER是较新版本Detectron2新增的配置项,若CPU环境版本偏旧,会无法识别该键。

  • 查看GPU训练环境的Detectron2版本:
    pip show detectron2
    
  • 在CPU环境安装完全相同的版本:
    pip install detectron2==<训练时的版本号>
    

2. 手动注册缺失的配置项

若无法统一版本(比如CPU环境有依赖限制),可在加载配置前,手动给对应配置类添加缺失的键:

from detectron2.config import CfgNode as CN

# 初始化基础配置结构,添加缺失的配置项
cfg = CN()
cfg.MODEL = CN()
cfg.MODEL.ROI_BOX_HEAD = CN()
cfg.MODEL.ROI_BOX_HEAD.FED_LOSS_FREQ_WEIGHT_POWER = 0.5

# 加载自定义配置文件
cfg.merge_from_file("config.yaml")

# 后续正常加载模型
cfg.MODEL.WEIGHTS = "outputs/model_final.pth"
cfg.MODEL.DEVICE = "cpu"  # 显式指定CPU设备

或贴合Detectron2配置体系,修改Box Head的默认配置:

from detectron2.modeling.roi_heads.box_head import FastRCNNConvFCHead
from detectron2.config import get_cfg

# 给Box Head默认配置添加缺失项
default_box_head_config = FastRCNNConvFCHead.default_config
default_box_head_config.FED_LOSS_FREQ_WEIGHT_POWER = 0.5

# 正常加载配置和模型
cfg = get_cfg()
cfg.merge_from_file("config.yaml")
cfg.MODEL.DEVICE = "cpu"

3. 安全加载自定义配置

若上述方法无效,可手动解析YAML配置,递归设置配置项以避免KeyError:

from detectron2.config import get_cfg
import yaml

# 初始化基础配置(需与训练时使用的基础配置一致)
cfg = get_cfg()
# 示例:若训练基于faster_rcnn_R_50_FPN_3x,先加载该基础配置
# cfg.merge_from_file(model_zoo.get_config_file("COCO-Detection/faster_rcnn_R_50_FPN_3x.yaml"))

# 加载自定义配置文件
with open("config.yaml", "r") as f:
    custom_config = yaml.safe_load(f)

# 递归设置配置项,自动添加缺失的键
def update_config(cfg_node, config_dict):
    for key, value in config_dict.items():
        if isinstance(value, dict):
            if not hasattr(cfg_node, key):
                setattr(cfg_node, key, CN())
            update_config(getattr(cfg_node, key), value)
        else:
            setattr(cfg_node, key, value)

update_config(cfg, custom_config)

# 配置CPU设备并加载模型
cfg.MODEL.DEVICE = "cpu"
cfg.MODEL.WEIGHTS = "outputs/model_final.pth"

4. 训练时导出兼容配置

在GPU训练完成后,确保保存的配置包含所有必要项:

# 训练结束后,确认所有配置项正确后再保存
cfg.freeze()
with open("outputs/config.yaml", "w") as f:
    f.write(cfg.dump())

使用该导出的配置文件在CPU环境加载,可避免配置项缺失问题。

内容的提问来源于stack exchange,提问作者rudyoactiv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 13:33:15