(17-7-05)基于强化学习的自动驾驶系统:评估自动驾驶模型的性能
发布时间
阅读量:
阅读量
17.8.6 评估自动驾驶模型的性能
编写一个名为test_agent.py的Python文件用于评估一个已有的自动驾驶智能体模型性能。该脚本允许用户通过标准输入指定测试路线、模型文件以及其他配置信息以执行测试任务。与之前介绍的训练脚本不同,则是为了评估已有的智能体性能而非进行新的模型训练工作。以下展示了具体实现代码:
def test_agent(env, weather_list, agent, route_id, nb_episodes):
ep_rewards = []
success_rate = 0
avg_steps = 0
for episode in range(nb_episodes):
weather = weather_list[episode%len(weather_list)]
env.set_weather(weather)
obs = env.reset(route_id)
done = False
episode_reward = 0
nb_steps = 0
while not done:
act = agent.select_action(obs, noise=False)
print(act)
obs_t1, reward, done, _ = env.step(act)
obs = obs_t1
episode_reward += reward
nb_steps += 1
if done:
if reward > 450:
success_rate += 1
avg_steps += nb_steps
ep_rewards.append(episode_reward)
print('Evaluation episode %3d | Steps: %4d | Reward: %4d | Success: %r' % (episode + 1, nb_steps, episode_reward, reward>450))
ep_rewards = np.array(ep_rewards)
avg_reward = np.average(ep_rewards)
std_reward = np.std(ep_rewards)
success_rate /= nb_episodes
avg_steps /= nb_episodes
print('Average Reward: %.2f, Reward Deviation: %.2f | Average Steps: %.2f, Success Rate: %.2f' % (avg_reward, std_reward, avg_steps, success_rate))
print('%.2f/%.2f/%.2f' % (success_rate, avg_reward, std_reward))
return avg_reward, std_reward, success_rate
if __name__=='__main__':
argparser = ArgumentParser()
argparser.add_argument('--world-port', type=int, default=config.WORLD_PORT)
argparser.add_argument('--host', type=str, default=config.WORLD_HOST)
argparser.add_argument('--cam_height', type=int, default=config.CAM_HEIGHT, help="Camera height")
argparser.add_argument('--cam_width', type=int, default=config.CAM_WIDTH, help="Camera width")
argparser.add_argument('--fov', type=int, default=config.CAM_FOV, help="Camera field of view")
argparser.add_argument('--tick', type=float, default=config.TICK, help="Sensor tick length")
argparser.add_argument('--model', type=str, default=config.AE_MODEL, help='model',
choices=['Autoencoder', 'AutoencoderSEM', 'VAE'])
argparser.add_argument('--autoencoder_model', type=str, help="Autoencoder model path", default=config.AE_PRETRAINED)
argparser.add_argument('--device', type=str, default='cpu', help="Device to use for testing", choices=['cuda', 'cpu'])
argparser.add_argument('--nb_episodes', type=int, default=20, help="Number of episodes of testing")
argparser.add_argument('--route_id', type=int, required=True, help="Route id to use for testing")
argparser.add_argument('--agent_model', type=str, required=True, help="Trained agent file")
argparser.add_argument('--type', type=str, default='test', choices=['test', 'train'], help="Type of evaluation")
argparser.add_argument('-exo_vehicles', action='store_true', help="Use exo vehicles")
args = argparser.parse_args()
if not os.path.exists(args.autoencoder_model):
raise Exception('Autoencoder model not found')
if not os.path.exists(args.agent_model):
raise Exception('Agent model not found')
if args.model=='AutoencoderSEM':
autoencoder = AutoencoderSEM.load_from_checkpoint(args.autoencoder_model)
elif args.model=='VAE':
autoencoder = VAE.load_from_checkpoint(args.autoencoder_model)
elif args.model=='Autoencoder':
autoencoder = Autoencoder.load_from_checkpoint(args.autoencoder_model)
else:
raise ValueError(f"Unknown model {args.model}")
autoencoder.freeze()
autoencoder.eval()
map_name = config.TRAIN_MAP if args.type=='train' else config.TEST_MAP
print(map_name)
env = CarlaEnv(autoencoder, args.world_port, args.host, map_name, 'ClearNoon',
args.cam_height, args.cam_width, args.fov, args.tick, 500, exo_vehicles=args.exo_vehicles)
num_routes = len(Route.get_possibilities(config.TRAIN_MAP))
weather_list = config.TRAIN_WEATHER if args.type=='train' else config.TEST_WEATHER
with open(args.agent_model, 'rb') as f:
agent = pickle.load(f)
try:
test_agent(env, weather_list, agent, args.route_id, args.nb_episodes)
finally:
env.reset_settings()
上述代码的主要目的是进行性能评估,并全面了解该智能体在指定路线和不同环境条件下运行的表现情况。通过命令行参数可以选择需要测试的具体路线、相应的智能体模型文件以及其他必要的配置信息来启动测试过程。详细的具体步骤如下:首先设置好所需测试的路径与文件路径;其次输入所需的关键参数;最后运行代码即可完成测试任务并输出结果分析
- 通过解析命令行参数获取配置信息包, 其中包含Carla仿真环境的具体设置、使用的Autoencoder/AutoencoderSEM/VAE模型类型、测试路线(route_id)以及自动驾驶智能体(agent_model)的路径等关键信息。
- 调用预训练好的图像特征提取模型(Autoencoder/AutoencoderSEM/VAE)进行后续操作。
- 基于命令行参数设置Carla仿真环境的具体属性, 包括世界端口数值、主机地址、摄像头配置参数、天气模式选择以及时间间隔tick值等。
- 读取并加载已训练完成的自动驾驶智能体模型, 该模型包含了策略网络等关键组件和权重参数。
- 在指定测试路线中运行自动驾驶智能体, 并根据仿真环境反馈执行相应的动作以测试性能。
- 在每个测试回合中持续记录回报值(reward)、执行步数(steps)以及任务完成与否的信息。
- 最后汇总并输出该回合的各项测试指标数据, 包括平均回报值、回报标准差数值、平均步长统计和成功率百分比等关键指标。
- 测试结束后, 将仿真环境设置恢复到初始状态以便下次使用。
**注意:**相较于之前介绍的训练脚本,《这个脚本》的主要目的是评估已有的智能体系而非开发新模型。
全部评论 (0)
还没有任何评论哟~
