BEVFormer报错(预测场景与真值场景的sample_token不匹配) ...

打印 上一主题 下一主题

主题 998|帖子 998|积分 2994

在运行test.py时报错:

BEVFormer/projects/mmdet3d_plugin/datasets/nuscnes_eval.py: init()函数报错
  1. assert set(self.pred_boxes.sample_tokens) == set(self.gt_boxes.sample_tokens), \
  2.     "Samples in split doesn't match samples in predictions."
复制代码

一、评估流程:

   整体流程:
  数据预处理:CustomNuScenesDataset (projects/mmdet3d_plugin/datasets/nuscenes_dataset.py)加载多帧数据,支持点云和图像的团结输入,增长了夜晚场景的专项处理。
评估流程:NuScenesEval_custom (projects/mmdet3d_plugin/datasets/nuscnes_eval.py) 提供机动的评估框架,支持按可见性、场景重叠等条件过滤数据,计算指标并可视化效果。


  • 从 results_nusc.json 加载检测效果,包含6019个样本
  • 通过 get_night_scenes() 获取val子会合的15个夜晚场景
  • 过滤检测效果,只保留这15个夜晚场景的602帧数据
  • 将过滤后的效果生存为新的json文件:filtered_results_nusc.json
  • 使用 NuScenesEval_custom 举行评估:

    • 加载真值(GT)数据
    • 计算检测指标(mAP、NDS等)
    • 生成评估陈诉

results_nusc.json 文件中的内容

test/bevformer_base/Fri_Mar_21_01_24_36_2025/pts_bbox/results_nusc.json:
  1. {
  2.     "meta": {
  3.         "use_lidar": false,
  4.         "use_camera": true,
  5.         "use_radar": false,
  6.         "use_map": false,
  7.         "use_external": true
  8.     },
  9.     "results": {
  10.         "sample_token_1": [
  11.             {
  12.                 "sample_token": "xxx",
  13.                 "translation": [x, y, z],
  14.                 "size": [l, w, h],
  15.                 "rotation": [w, x, y, z],
  16.                 "velocity": [vx, vy],
  17.                 "detection_name": "car",
  18.                 "detection_score": 0.9,
  19.                 "attribute_name": "vehicle.parked"
  20.             },
  21.             // ... 更多检测结果
  22.         ],
  23.         // ... 更多样本
  24.     }
  25. }
复制代码

二、错误缘故原由分析

NuScenesEval_custom 的 load_gt函数加载了整个 eval_set**(这里是 val)**的 ground truth 数据,而不是只加载与过滤后预测效果对应的样本
效果是预测数据只有 602 个样本的 token,而 ground truth 有 6019 个样本的 token,导致断言失败。
三、办理方案

修改 NuScenesEval_custom 的初始化逻辑,确保 ground truth 只加载与预测效果匹配的样本 token,而不是整个 eval_set 的所有样本。可以通过以下步调实现:

  • 获取预测效果的样本 token: 在加载预测效果后,提取 self.pred_boxes.sample_tokens。
  • 过滤Ground Truth: 修改load_gt调用,使用预测效果的样本 token 集合来过滤 ground truth 数据。
  • 更新 _evaluate_single: 将过滤后的样本 token 传递给 NuScenesEval_custom,确保评估只针对这602 个样本。
  1. 在projects/mmdet3d_plugin/datasets/nuscnes_eval.py中的__init__中加入:
  2.         # 只加载与预测结果匹配的 ground truth
  3.         pred_sample_tokens = set(self.pred_boxes.sample_tokens)
  4.         if verbose:
  5.             print(f"Loading ground truth for {len(pred_sample_tokens)} predicted samples...")
  6.         self.gt_boxes = load_gt(self.nusc, self.eval_set, DetectionBox_modified, verbose=verbose)
  7.         self.gt_boxes = filter_by_sample_token(self.gt_boxes, pred_sample_tokens, verbose=verbose)
  8.         # 验证样本 token 匹配
  9.         assert set(self.pred_boxes.sample_tokens) == set(self.gt_boxes.sample_tokens), \
  10.             "Samples in split don't match samples in predictions after filtering."
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

道家人

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表