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

DETR模型中Pandas绘图报错的修复方案咨询

修复DETR中Pandas绘图的Object类型报错问题

问题根源

报错源于util/plot_utils.py的else分支中,DataFrame包含test_coco_eval_bbox这类存储list/嵌套结构的object类型字段,Pandas的plot函数无法直接处理该类型;同时新版本Pandas要求先调用infer_objects()明确数据类型,触发FutureWarning。

具体修复方案

1. 定位目标代码

找到util/plot_utils.py中触发报错的else分支,通常是如下绘图逻辑:

else:
    df.plot(x='epoch', y=value, ax=ax, label=run_name)

2. 选择适配的修改方式

方式一:提取list字段中的有效数值(需绘制该字段时用)

如果需要绘制test_coco_eval_bbox这类评估结果字段,可提取list/dict中的具体指标(比如COCO的mAP值),同时处理数据类型:

else:
    df_processed = df.copy()
    # 针对test_coco_eval_bbox字段提取有效数值(根据实际存储结构调整逻辑)
    if 'test_coco_eval_bbox' in df_processed.columns:
        # 示例:假设字段是存储评估结果的dict,提取bbox的AP值
        df_processed['test_coco_eval_bbox'] = df_processed['test_coco_eval_bbox'].apply(
            lambda x: x['bbox']['AP'] if isinstance(x, dict) else (x[0] if isinstance(x, list) else x)
        )
    
    # 调用infer_objects解决FutureWarning,明确数据类型
    df_processed = df_processed.infer_objects()
    df_processed.plot(x='epoch', y=value, ax=ax, label=run_name)

方式二:过滤非数值型字段(无需绘制该类字段时用)

如果不需要绘制包含list的object字段,直接筛选数值型列进行绘图:

else:
    # 筛选所有数值型列,保留epoch作为x轴
    df_numeric = df.select_dtypes(include=['number']).assign(epoch=df['epoch'])
    
    # 调用infer_objects消除FutureWarning
    df_numeric = df_numeric.infer_objects()
    df_numeric.plot(x='epoch', y=value, ax=ax, label=run_name)

3. 验证修复

修改代码后重新运行DETR的绘图流程,确认报错和FutureWarning消失,图表正常生成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 04:45:53