跳至内容

行为克隆

行为克隆 (BC) 是一种通过对专家演示中的观察-动作对使用监督学习直接学习策略的技术。Schola 提供在 Unreal Engine 中收集轨迹数据的工具,并通过与 Stable Baselines 3 和 Ray RLLib 集成来促进克隆过程。在本指南中,我们将解释如何使用 Schola 收集轨迹数据和进行行为克隆。

创建轨迹记录器

在 Schola 中,轨迹数据由一系列 observationsactionsrewardsepisode termination 标志组成。要记录这些数据,您需要创建一个 UTrajectoryRecorder 类的蓝图子类,该子类将通过其 UInteractionManager 记录观察和动作,并通过重写 ComputeReward 和 IsEpisodeComplete 函数来记录奖励和回合结束标志。创建蓝图子类后,您可以将其添加到 Unreal Engine 中的关卡中,并配置它以开始记录轨迹数据。

Trajectory recorder creation

配置轨迹记录器

可以通过将 UTrajectoryRecorder 子类附加到 AAbstractTrainerIInferenceAgent 类来分别在训练或推理期间使用此子类收集数据。在子类的蓝图详细信息面板的“轨迹记录”下,您可以配置记录器,方法是切换“记录轨迹”复选框以启用或禁用轨迹记录,设置 OutputDataFileNameOutputDirectory 来指定保存轨迹数据的文件名和目录,以及设置 StepsToRecord 来指定停止前要记录的步数。

Trajectory recorder confguration

创建 InferencePlayerController

要收集人类轨迹数据,您还需要创建 AInferencePlayerController 的子类。此类实现了 IInferenceAgent 接口,因此您将 UTrajectoryRecorder 子类附加到它,并可以选择添加任何观察器和执行器。

InferencePlayerController creation

但是,与其他推理代理不同,您需要在“强化学习”组下重写 DoDiscreteActionDoContinuousActionDoBinaryAction 函数,以处理将玩家的输入映射到 Schola 中的执行器动作。一种方便这种映射的方法是创建变量,在按键事件时更改它们的值,然后在重写的函数中读取并返回这些变量的值,这些函数会将它们传递给执行器。

Overrideable functions in InferencePlayerController

要开始收集轨迹数据,您需要将您想要控制的 Pawn 在细节面板中的“AI Controller Class”设置为您新创建的 AInferencePlayerController 子类。

运行行为克隆

收集完轨迹数据后,您就可以使用它来进行行为克隆。操作方法如下:

  1. 在 Unreal Engine 中运行游戏(点击绿色三角形)。

  2. 打开一个终端或命令提示符,然后运行以下 Python 脚本:

终端窗口
schola-bc-sb3 -p <PORT_NUMBER> --expert-path <EXPERT_PATH>

其中 <PORT_NUMBER> 应替换为您启动 Unreal Engine 游戏时使用的端口号,<EXPERT_PATH> 应替换为您之前收集的轨迹数据文件的路径。命令行界面还有其他可选参数,允许您指定训练步数、学习率、是否保存为 onnx 以及其他参数。有关这些选项的更多信息,请参阅相应命令行界面的文档。

© . This site is unofficial and not affiliated with AMD.