评测算法的自研proto接口
背景
Octopus内置一套评测算法,用于对自动驾驶系统的性能表现进行多维度评测。内置评测算法的评测结果按照eva.proto中的定义,序列化成pb文件保存起来。
Octopus仿真平台的前端通过解析评测pb对评测结果进行展示,目前控制台展示主要分为两大方面:
- 各个评测指标的通过/未通过/无效的结果展示。
- 仿真过程中关键数据的时间序列曲线图展示。
另外,对于用户自研的评测算法的评测结果,也可以按照eva.proto,序列化成pb文件保存起来,这样Octopus的仿真平台前端能够展示用户自研评测算法的评测结果。
eva.proto的关键字段解释
在利用Octopus仿真平台进行批量仿真时,每个场景都会有一个评测结果,单个场景的评测结果全部保存在如数据类图所示的Evaluation类中。
Evaluation类包含以下的7个字段。
字段 |
说明 |
---|---|
version |
用于表示当前Octopus_eva.proto的版本。 |
score |
用户保存批量仿真中单个场景下评测算法计算出的评测得分,Octopus的评分取值为[0, 100]。 |
avg_speed |
单个场景下自动驾驶算法控制下主车的平均车速,单位m/s。 |
distance |
单个场景下自动驾驶算法控制下主车的行驶里程,单位m。 |
vis |
主车关键状态量的(如速度、加速度)的时间序列数据,用于前端进行可视化曲线展示。 |
metrics |
Octopus内置了一批大类评测指标,并且每个大类评测指标下会多个子类指标。 该字段用于保存每个大类和子类评测指标的通过/未通过/无效的结果状态。 其中无效状态表示该指标在特定场景下是没意义的,如在没有交通灯的场景下,主车在交通灯前的行为检测是没有意义的。 |
source |
是一个Source枚举类型,表示该评测算法的结果来源类型。 source共有6种类型,具体参考source。 |
字段 |
说明 |
---|---|
SOURCE_UNSPECIFIED |
表示评测算法类型未定义。 |
SOURCE_CUSTOMIZED_REALTIME |
用户自定义实时评测算法结果。 |
SOURCE_CUSTOMIZED_OFFLINE |
用户自定义延时评测算法结果。 |
SOURCE_DEFAULT_REALTIME |
八爪鱼内置实时评测算法结果。 |
SOURCE_DEFAULT_OFFLINE |
八爪鱼内置延时评测结果。 |
SOURCE_MERGED |
融合后的评测结果。 |
Evaluation中两个比较关键且复杂的字段是vis和metrics,其中vis字段类型是Visualization,metrics字段的类型是repeated Metric。
Visualization和Metric的成员组成如上数据类图所示,各个关键成员的含义如下所示。
Visualization类型包含的各个字段及其含义如下所示。
字段 |
说明 |
---|---|
sim_times |
仿真过程的时间序列点,以仿真开始时刻(t0)为0点,相邻时刻的时间间隔为仿真器的周期,单位为秒(s)。 |
frame_nums |
每个仿真时刻对应的数据帧数,表明这是第几帧的数据。 |
stats |
统计类型的数据值,是指某数据在一段时间内统计值才有展示分析的意义,如加速度均方根值(arms),随着仿真时刻不断后移,需要不断计算初始时刻(t0)到当前仿真时刻(t)的arms值。 stats字段的类型是Statistic,Statistic类型的成员具体参考stats。 |
vector |
向量类型的数据值,是指每个时刻都会有一个对应的数据值,如加速度、速度等物理量。 vector字段的类型是Vector,Vector类型的成员具体参考vector。 |
字段 |
说明 |
---|---|
type |
是一个Type的枚举类型,表示该数据是哪种Octopus内置的Statistic类型。 |
value |
该数据在每个仿真时刻对应的数值。 |
display_name |
存储用户自定义的Statistic类型名称,用户自定义的数据无需对type赋值。 |
source |
表示该数据的评测结果来源类型。 |
importance |
表示该数据是重要类型还是次要类型。 |
module |
表示该数据是来源于哪个算法模块。 |
performance |
表示该数据是表示的哪个类别的算法性能。 |
字段 |
说明 |
---|---|
type |
是一个Type的枚举类型,表示该数据是哪种Octopus内置的Vector类型。 |
value |
该数据在每个仿真时刻对应的数值。 |
display_name |
存储用户自定义的Vector类型名称,用户自定义的数据无需对type赋值。 |
source |
表示该数据的评测结果来源类型。 |
importance |
表示该数据是重要类型还是次要类型。 |
module |
表示该数据是来源于哪个算法模块。 |
performance |
表示该数据是表示的哪个类别的算法性能。 |
Metric类型包含的各个字段及其含义如下所示。
字段 |
说明 |
---|---|
type |
是一个Enum类型,表示该数据是哪种Octopus内置的大类指标类型。 |
status |
是一个Result的枚举类型,用于表示该大类指标的评测结果。 其中Result有三种类型,分别为:
|
anomalies |
用于保存每个大类指标下对应的子类指标发生异常的时间点,其数据类型为repeated Anomaly,其中Anomaly类型成员如下所示:
|
display_name |
存储用户自定义的Anomaly类型名称,表示其自定义的子类指标,用户自定义的数据无需对sub_type赋值。 |
importance |
表示该指标的重要程度。具体参考importance。 |
source |
表示该数据的评测结果来源类型。 |
module |
表示该数据是来源于哪个算法模块。具体参考module。 |
performance |
表示该数据是表示的哪个类别的算法性能。具体参考performance。 |
字段 |
说明 |
---|---|
POINT_TYPE_UNSPECIFIED |
未定义的类型,遵循proto定义格式,Octopus未使用该类型,用户可根据需要对该类型赋予特定含义。 |
POINT_TYPE_POINT |
表示该子类指标的异常时间点是离散的时间点形式,在任何时刻都可能发生异常。 |
POINT_TYPE_REGION |
表示该子类指标的异常时间点是区间形式,一旦在某个时刻开始发生异常,则在随后一段时间内都会处于异常状态。 |
POINT_TYPE_ALL |
表示该类指标的异常时间点是布尔形式的,从仿真开始到当前时刻的状态要么是完全通过,要么全过程都是异常的,统计类型的指标需要以这种形式表示。 |
POINT_TYPE_NORMAL |
该类型与其他类型相反,如果该类型的点存在,则表示对应的子类指标是通过的,Octopus用该类型保存主车到达终点的时间值。 |