智晨爱代码 2024-04-22 14:52 采纳率: 71.4%
浏览 4

AssertionError: ego action in ObjectDetectionScenario should be a dict

这个是我的报错:


WARNING: No InMemoryMap cache found. Setting up local map. This may take a while... 
Traceback (most recent call last):
  File "scripts/run.py", line 78, in <module>
    runner.run()
  File "/home/wang/Desktop/wjl-project/safebench/safebench/carla_runner.py", line 333, in run
    self.eval(data_loader)
  File "/home/wang/Desktop/wjl-project/safebench/safebench/carla_runner.py", line 266, in eval
    obs, rewards, _, infos = self.env.step(ego_actions=ego_actions, scenario_actions=scenario_actions)
  File "/home/wang/Desktop/wjl-project/safebench/safebench/gym_carla/env_wrapper.py", line 94, in step
    self.env_list[e_i].step_before_tick(processed_action, scenario_actions[action_idx])
  File "/home/wang/Desktop/wjl-project/safebench/safebench/gym_carla/env_wrapper.py", line 181, in step_before_tick
    self._env.step_before_tick(ego_action=ego_action, scenario_action=scenario_action)
  File "/home/wang/Desktop/wjl-project/safebench/safebench/gym_carla/envs/carla_env.py", line 296, in step_before_tick
    assert isinstance(ego_action, dict), 'ego action in ObjectDetectionScenario should be a dict'
AssertionError: ego action in ObjectDetectionScenario should be a dict
basic.yaml object_detection_stopsign.yaml failed!
Traceback (most recent call last):
  File "scripts/run.py", line 78, in <module>
    runner.run()
  File "/home/wang/Desktop/wjl-project/safebench/safebench/carla_runner.py", line 333, in run
    self.eval(data_loader)
  File "/home/wang/Desktop/wjl-project/safebench/safebench/carla_runner.py", line 266, in eval
    obs, rewards, _, infos = self.env.step(ego_actions=ego_actions, scenario_actions=scenario_actions)
  File "/home/wang/Desktop/wjl-project/safebench/safebench/gym_carla/env_wrapper.py", line 94, in step
    self.env_list[e_i].step_before_tick(processed_action, scenario_actions[action_idx])
  File "/home/wang/Desktop/wjl-project/safebench/safebench/gym_carla/env_wrapper.py", line 181, in step_before_tick
    self._env.step_before_tick(ego_action=ego_action, scenario_action=scenario_action)
  File "/home/wang/Desktop/wjl-project/safebench/safebench/gym_carla/envs/carla_env.py", line 296, in step_before_tick
    assert isinstance(ego_action, dict), 'ego action in ObjectDetectionScenario should be a dict'
AssertionError: ego action in ObjectDetectionScenario should be a dict

这是我跳转到最后一条报错代码的位置代码:

img

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-22 14:52
    关注

    引自免费微信小程序:皆我百晓生

    根据错误信息,看起来你在使用一个基于Carla(一个开源的虚拟城市驾驶环境)的强化学习框架,并且遇到了一个类型检查的问题。具体来说,在step_before_tick函数中,程序期望 ego action 是一个字典,但实际接收到的可能是一个不同的数据类型。

    为了解决这个问题,你需要确保在调用 env.step() 函数时传入的 ego_actions 参数是字典格式,特别是当你的场景类别是'perception'时。这通常意味着你应该在执行此步骤前正确地构建 ego action。

    考虑到你的代码片段中提到的 ego action 应该包含一个名为 'ego action' 的键,所以我建议在调用 env.step() 之前,检查并确保 ego_actions 是一个字典,且包含正确的键值对。如果它不是一个字典,或者缺少 'ego action' 键,那么你需要创建一个满足要求的字典。

    这是一个示例,展示了如何创建一个符合预期格式的 ego action 字典:

    ego_action_dict = {}
    ego_action_dict['ego action'] = your_ego_action_value  # 将你的 ego action 值赋给对应的键
    
    # 确保 ego_action_dict 是字典且包含 'ego action' 键
    assert isinstance(ego_action_dict, dict), 'ego action should be a dictionary'
    assert 'ego action' in ego_action_dict, 'ego action key missing from the dictionary'
    
    obs, rewards, _, infos = self.env.step(ego_actions=ego_action_dict, scenario_actions=scenario_actions)
    

    这里 your_ego_action_value 应该是你从强化学习算法或其他地方得到的实际动作值。确保替换为你的实际逻辑来生成这个值。

    如果你已经在其他地方处理了 ego action 并确保它是正确的字典格式,那么问题可能在于 ego action 在传递到 env.step() 之前的某个环节被改变了。在这种情况下,你需要审查代码的上下文,找出 ego action 数据类型的改变是在哪里发生的。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月22日

悬赏问题

  • ¥15 远程访问linux主机超时
  • ¥15 odoo17存货管理优势于中国国内该行业传统ERP或MES的详细解读和举例
  • ¥15 CPU卡指令整合指令数据都在图片上
  • ¥15 odoo17处理受托加工产品
  • ¥15 如何用MATLAB编码图三的积分
  • ¥15 圆孔衍射光强随孔径变化
  • ¥15 MacBook pro m3max上用vscode运行c语言没有反应
  • ¥15 ESP-PROG配置错误,ALL ONES
  • ¥15 结构功能耦合指标计算
  • ¥50 AI大模型精调(百度千帆、飞浆)