华为云用户手册

  • OCTPS_META_PATH OCTPS_META_PATH为标注物文件路径,示例:/tmp/label/task-2022/source/meta/label_meta_infos.json。标签文件中包含了当前任务所选择的所有标注物的基本信息。预标注结果中每个标注对象所需的标注物id,可通过此文件中的id字段获取。标注物文件内容示例如下。 [ { "id": 2085, # 平台上所建标注物的ID "name": "Car", # 平台上所建标注物的名称 "color": "#d0021b", "label_shape_type": "bndbox", "attribute": "{}", "description": "car", ... ... } … … ]
  • TARGET_RESULT_DIR TARGET_RESULT_DIR 为存放预标注/预审核结果的路径,示例:/tmp/label/task-2022/result/data。预标注/预审核结果按照特定格式保存在json 文件中。3D数据帧中json文件的路径及命名和点云文件保持一致,2D数据帧中json文件的路径及命名和图片文件保持一致。以上述2D数据帧为例,结果文件组织结构如下所示: TARGET_RESULT_DIR /XX/…/XX/├─子文件夹1 ├─图片1.json #图片1的结果信息 ├─子文件夹2 ├─图片2.json #图片2的结果信息 注:“XX/…/XX/子文件夹i/”路径和待处理数据集(OCTPS_DATASET_DIR)中的此部分路径保持一致。
  • 智驾模型列表相关操作 智驾模型列表可以进行以下操作。 表1 智驾模型列表相关操作 任务 操作步骤 编辑模型 单击操作栏中的“编辑”,编辑智驾模型。初始模型不支持编辑。 删除模型 单击操作栏中的“删除”,删除智驾模型。初始模型不支持删除。 查看模型详情 单击模型名称,查看模型详情。 在模型详情页,查看模型基本信息和模型版本列表。可以对模型版本进行“模型微调”、“创建在线服务”和“删除”操作。 说明: 初始模型不支持“创建在线服务”和“删除”。 查询模型 在搜索输入框中输入搜索条件,按回车键即可查询。
  • 镜像制作(训练) Octopus平台依赖算子镜像内的/bin/bash、stdbuf、tee软件,请确保基础镜像内包含上述软件且能通过PATH找到。 一般情况下,训练与评测定义为同一个引擎,主要包括算法或评测脚本运行所需要的基本依赖环境。用户可使用命令行模式或Dockerfile模式进行构建。以训练、评测镜像为例,一般的镜像制作Dockerfile示例如下(xxx替换为实际路径): # 载入基础镜像,训练或评测引擎一般需包含cuda/cudnn等算法基础环境。用户可手动制作或拉取官方镜像 FROM xxx/cuda:11.0.3-devel-ubuntu18.04 # 设置工作目录【可选】默认为ROOT,用户可修改USER及PATH WORKDIR /root/workspace # 安装用户APT环境。如果需要修改/etc/apt/sources.list可替换 COPY /path/to/sources.list /etc/apt/sources.list RUN apt-get install vim # 安装用户算法环境。如果需要修改~/.pip/pip.conf可替换。用户也可安装miniconda进行包管理 COPY /path/to/pip.conf /root/.pip/pip.conf COPY /path/to/requirements.txt /root RUN pip install –r /root/requirements.txt # 设置环境变量【可选】 ENV PYTHONUNBUFFERED 1 编译镜像类似上述训练、评测镜像制作方式,但一般不包含cuda/cudnn库,需替换为用户的编译环境。 对于Dockerfile的统一构建方式如下: docker build –f [DockerfileName] –t [ImageName:ImageVersion] . 镜像运行时,会向运行环境注入部分默认文件配置: 表1 环境变量说明 任务名称 文件名 环境变量 训练任务 增量模型目录 MODEL_PATH="/tmp/data/model" 训练产物目录 TMP_RESULT_PATH= "/tmp/result" 数据集目录 DATASET_PATH=" ['/tmp/data/dataset/dataset-0']" 评测任务 评测结果目录 TMP_RESULT_PATH= "/tmp/result" 模型版本文件目录 MODEL_PATH="/tmp/data/model" 数据集目录 DATASET_PATH= "/tmp/data/dataset/dataset-0" 编译任务 模型版本文件目录 MODEL_PATH="/tmp/data/model" 编译产物目录 TMP_RESULT_PATH= "/tmp/result" 预标注任务 数据集目录 OCTPS_DATASET_DIR="/tmp/…/data" 模型版本文件目录 OCTPS_MODEL_DIR="/tmp/…/model" 模型版本关联标注物文件路径 OCTPS_META_PATH="/tmp/…/meta/label_meta_infos.json" 预标注结果数据目录 TARGET_RESULT_DIR="/tmp/…/result/data" 预标注日志文件目录 TARGET_ LOG _DIR="/tmp/…/result/log" 父主题: 镜像仓库
  • 内置评测信号参数 表1 内置评测信号参数 内置评测信号参数 对应中文 speedX 纵向速度 speedY 侧向速度 accX 纵向加速度 accY 侧向加速度 speedYaw 横摆速度 relativeYaw 相对车道中心线偏离角 lateralOffset 相对车道中心线偏离距离 relativeSpeed 相对前车的速度 relativeDistance 相对前车的距离 TH 相对前车车头时距 TTC 相对前车ttc rmsAccX 纵向加速度均方根值 rmsAccY 侧向加速度均方根值 varianceSpeed 速度方差
  • 碰撞时间(Time to Collision)检测 碰撞时间检测的目的是判断主车在行驶中与其他交通车的碰撞时间是否过小。 碰撞时间是指主车与引导车的相对距离除以主车与引导车的相对速度。 即使主车未发生碰撞,当碰撞时间过小时,发生碰撞的风险太大,这样也是不合理的。 当碰撞时间小于某一阈值(该阈值可用户自定义,本设计默认取1.5s),则判定碰撞时间检测不通过。 该指标关联的内置可视化时间序列数据为:暂无。 该指标的异常时间点记录类型为:POINT_TYPE_POINT。 父主题: 内置评测指标说明
  • 评测列表 在评测列表,还可以进行以下操作: 表1 评测列表相关操作 任务 操作步骤 搜索评测 在搜索框中输入关键字搜索相关评测。支持通过评测名称和评测ID搜索。 查看评测详情 单击评测名称,页面跳转至评测详情页。 编辑评测 单击操作栏中的“编辑”,可编辑评测的信息。 说明: 当内置评测是system_default时,只支持编辑“评测模式”。 删除评测 单击操作栏中的“删除”,可删除该评测。 父主题: 评测管理
  • 种子地图的逻辑场景样例(仿真器A) 配合静态场景的种子场景,在本节提供了对应的适配仿真器A的逻辑场景样例.同样,考虑到仿真器A的支持程度,建议在转换时选择osc1.0版本. 使用仿真器A打开osc1.0场景时,由于编辑器显示问题,车辆会在道路初始位置重叠,但这不会影响场景运行,运行场景后车辆会从场景文件设置的初始位置开始行驶. straight merge split junction one way junction 基于样例的拓展 父主题: 动静态配套样例
  • 绿灯通行(Drive Through Green Light)检测 绿灯通行检测的目的是判断主车在接近十字路口后, 如果是绿灯, 主车是否直接通行而没有停止。 另外,当交通灯由红灯变为绿灯后, 主车重新启动的时间是否太大。 本设计认为在绿灯状态下, 如果前方没有行人和引导车的情况下, 主车在停止线前20m范围内发生停车行为, 则绿灯前直接通行不通过。 当交通灯由红灯变为绿灯后, 如果主车重新启动的时间大于一定阈值(本设计取3s), 则绿灯后重新启动时间太大。 该指标关联的内置可视化时间序列数据为:暂无。 该指标的异常时间点记录类型为:POINT_TYPE_POINT。 父主题: 内置评测指标说明
  • road_aids_type 匝道类型,用于静态场景的split场景和merge场景 road_aids_type list ENUM_ROAD_AIDS_TYPE = ("DType-1", "DType-2", "PType") DType-1(直接式1): DType-1(直接式1)是指匝道合入(分流)时直接汇入(离开)主路,并且匝道部分逐渐收缩(扩展)直到合入(离开)主路,如下图所示: DType-2(直接式2): DType-2(直接式2)是指匝道合入(分流)时直接汇入(离开)主路,主路的车道数也随之发生变化,匝道部分不进行收缩(扩展),如下图所示: PType(平行式): PType(平行式)是指匝道合入(分流)时先有一段平行于主路,然后匝道再逐渐收缩(扩展)直到合入(离开)主路,如下图所示: 父主题: Enum Lists
  • 逻辑场景 Logical scenario 逻辑场景的参数声明通过:范围型[最小值..最大值] 和枚举型[值1, 值2] 的方式来实现泛化: 范围型支持float和scalar类型 枚举型支持int, float, bool, str, enum和scalar类型,且需要保证枚举列表中的元素均为相同类型. 例1:范围型 m_value: float = [2.0..3.0] v: speed = [5mps..10mps] delay: time = [40s..60s] m_a: acceleration = [0.00mpss..0.03mpss] 例2:枚举型 m_ id: int = [-1, 2] m_value: float = [2.0, 3.0] m_on_road: bool = [true, false] Ego_name: string = ["Audi_A3_2009_black", "Audi_A3_2009_red"] m_shape: dynamics_shape = [linear, sinusoidal] m_side: side_left_right = [left, right] v: speed = [5mps, 7mps, 10mps] m_a: acceleration = [0.01mpss, 0.03mpss] delay: time = [40s, 60s, 100s] 通过泛化参数,可以实现实体entity 、动作act ,以及修饰器modifier 的泛化. Struct类型不能直接泛化,而是通过泛化参数来进行泛化. 例1:entity泛化 Ego_name: string = ["Audi_A3_2009_black", "Audi_A3_2009_red"] Ego_controller: string = "DefaultDriver" Ego: vehicle with: keep(it.name == Ego_name) keep(it.initial_bm == Ego_controller) 例2:act泛化 m_lateral: bool = [true, false] m_speed: speed = [5mps..15mps] m_rate_profile: dynamics_shape = linear Ego.activate_controller(m_lateral, true) Ego.change_speed(target: m_speed, rate_peak: 0.0mpss, rate_profile: m_rate_profile) 例3:modifier泛化 m_speed: speed = [5mps..15mps] Ego.assign_init_speed() with: speed(speed: m_speed) 例4:Struct类型泛化 m_lane_id: int = [-1, 2] m_odr: odr_point = map.create_odr_point(road_id: '0', lane_id:m_lane_id, s: 5.0m, t: 0.0m) m_x: distance = [2m..7.5m] m_position_3d: position_3d = map.create_xyz_point(x: m_x, y: 10.0m ,z: 0.0m) m_pose_3d: pose_3d with: keep(it.odr_point == m_odr) 父主题: 参数声明 Parameter Declarations
  • 场景和场景库 其中片段式场景仿真是自动驾驶系统测试的重要手段,当前业内对于片段式场景普遍遵循ASAM主导的OpenX系列标准。OpenSCENARIO对动态驾驶环境进行了描述,交通参与物之间通过其他物体的状态变化作为触发条件,进而改变自身的状态。 通过OpenX场景可对算法于环境的动态交互能力进行测试,场景库的目的则是将一批有相同测试目的的场景进行汇总,如想测试Acc算法的应对切入功能,可将多个应对切入的测试场景归到一个场景库,进而在创建仿真任务时可直接选择该场景库进行仿真。
  • 逻辑场景和逻辑场景库 逻辑场景是基于状态空间变量对功能场景的进一步详细描述,每个逻辑场景都有场景参数,比如前车车速及其加速度,自车与前车距离等参数,这些参数都有一定的取值范围,根据这些参数可以派生出任意数量的具体场景。 逻辑场景库是不同逻辑场景的数据集合,以树状结构的形式表现出来,便于对逻辑场景进行统一的、有效的组织、管理和应用,比如当用户想系统管理和方便查看超车的逻辑场景,可以将所有超车相关的逻辑场景加入一个场景库中。
  • 测试用例和测试套件 如上所述,OpenSCENARIO场景能描绘动态环境的,但无法根据主车内部动力学状态、自动驾驶算法状态作为触发条件来驱动各个交通参与物变化,因此为了实现更加精细的测试控制,需要额外提供一个测试脚本实现与仿真器中的交通参与物和算法内部数据的交互。 图1 测试用例和测试套件 如上图所述,测试脚本能同时监听RDB和AD算法的内部数据,如通过RDB判断主车与前车距离小于20m,可发送某个控制信号给算法改变esp状态,也可以通过SCP指令控制场景中的副车改变运动姿态。 测试脚本很大程度上弥补了单纯场景仿真的不足,能够实现以算法内部信号为触发条件,改变仿真场景中交通参与物的状体和算法内部状态。 因此,在场景的基础上,添加与该场景相匹配的测试脚本,就形成了一个测试用例。也就是说,测试用例是一个场景和测试脚本的集合。 同样,测试套件是将测试目的相同的测试用例归到一起,方便创建仿真任务时直接选择。
  • Dockerfile示例 一般情况下,引擎主要包含预标注算法或预审核算法运行所需要的基本依赖环境,用户也可将预标注算法或预审核算法包内置在AI引擎中。用户可使用命令行模式或Dockerfile模式进行构建。以预标注 自定义镜像 为例,一般的镜像制作Dockerfile示例如下(xxx替换为实际路径): # 载入基础镜像,训练或评测引擎一般需包含cuda/cudnn等算法基础环境。用户可手动制作或拉取官方镜像 FROM xxx/cuda:11.0.3-devel-ubuntu18.04 # 设置工作目录【可选】默认为ROOT,用户可修改USER及PATH WORKDIR /root/workspace # 如果是内置预标注算法的自定义镜像,需要把预标注算法复制到工作目录下, COPY /path/to/algorithom /path/to/algorithom # 按需安装用户APT环境。如果需要修改/etc/apt/sources.list可替换 COPY /path/to/sources.list /etc/apt/sources.list RUN apt-get install vim # 按需安装用户算法环境。如果需要修改~/.pip/pip.conf可替换。用户也可安装miniconda进行包管理 COPY /path/to/pip.conf /root/.pip/pip.conf COPY /path/to/requirements.txt /root RUN pip install –r /root/requirements.txt # 设置环境变量【可选】 ENV PYTHONUNBUFFERED 1 对于Dockerfile的统一构建方式如下: docker build –f [DockerfileName] –t [ImageName:ImageVersion] . 父主题: 镜像制作(标注)
  • 镜像制作(仿真) Octopus仿真服务平台定义了一些proto接口,用于支持用户自定义评测等功能。这些自定义功能通常以镜像的形式上传到云仿真平台,然后参与到业务运行流程中。 本文档对常见业务功能的镜像制作进行指导说明。 自定义评测镜像涉及的样例代码,如有需要,请联系相关人员。 算法镜像和评测镜像cmd以用户创建项目时输入的运行命令为准,仿真器镜像不支持cmd自定义以后台默认的运行命令为准。Entrypoint只在算法镜像生效,评测镜像和仿真器镜像不支持配置entrypoint。 目前自定义算法、自定义评测、自定义脚本的镜像制作使用的基础镜像版本要求为:ubuntu18.04及以上。算法与仿真器需要采用TCP协议进行通信。 自定义评测镜像制作 与datahub对接的算法镜像制作 评测算法的自研proto接口 父主题: 镜像仓库
  • 禁止标志牌前行为(Prohibited Sign)检测 禁止标志牌前行为检测的目的是判断主车在这些禁止类标志牌前的行为是否合理。 本设计考虑评测的禁止标志牌有: 禁止机动车标志牌 禁止各种车辆标志牌 禁止驶入标志牌 限制宽度标志牌 限制高度标志牌 限制重量标志牌 在禁止机动车标志牌,禁止各种车辆标志牌,禁止驶入标志牌等标志前, 当检测到主车的车头越过标志牌并且标志牌的对主车起作用时, 该类标志前的行为检测不通过。 对于限制高度、限制宽度、限制高度等禁止标志牌, 在满足上述触发条件的情况下, 并且主车的对应度量值(如高度、宽度、重量)大于标志牌禁止的数值, 则主车在该类标志牌前的行为检测不通过。 该指标关联的内置可视化时间序列数据为:暂无。 该指标的异常时间点记录类型为:POINT_TYPE_REGION。 父主题: 内置评测指标说明
  • 用例管理 在测试用例的详情页,可以进行以下操作: 查看测试用例详情。 单击用例名称查看该用例详细信息。 图1 测试用例详情 编辑测试脚本。 可根据需要添加测试脚本,在测试用例详情页,单击测试脚本后面的“编辑”,编辑脚本类型。 图2 编辑测试脚本 用例发布。 当用例状态为“编辑中”时,用例详情页面,单击用例名称后“发布”,可对用例进行发布。 关闭用例。 当用例状态为“已发布”时,用例详情页面,单击用例名称后“关闭用例”,可对用例进行关闭。 修改用例。 单击用例名称,进入用例详情页,单击右上角“编辑”,即可修改用例信息。 用例状态为"已关闭"和"已发布"时,不支持编辑用例基本信息。 用例编辑中/发布/关闭的使用逻辑: 测试用例在被创建时的默认状态是编辑中,当测试用例中的场景和测试脚本以及其他相关信息都确认达到测试条件时,可以选择发布测试用例,发布后的测试用例才能被用于创建仿真任务,并且用例一旦发布,就不允许删除,从而保证测试结果的可追溯。当发布后的测试用例后续不会再进行测试时,可以选择关闭测试用例,关闭后的测试用例不能用于创建仿真任务,并且同样关闭后的测试用例不能被删除,从而保证结果的可追溯性。 父主题: 测试用例管理
  • split匝道分流 用途:创建split高速匝道合流的静态场景(地图) 参数:参数如下表. 表1 split参数 Parameter Type Mandatory Description lane_width length yes 每个车道宽度. left_lane_num int yes 左侧车道数量. right_lane_num int yes 右侧车道数量. ramp_lane_num int yes 匝道车道数量. main_speed speed yes 主路的限速值. ramp_speed speed yes 匝道的限速值. radius_of_curvature length yes 匝道的曲率半径. ramp_length length yes 匝道的长度. road_aids_type road_aids_type yes 道路辅助设施类型,匝道分流时匝道和主路的连接方式,目前共有三种:DType-1(直接式1)、DType-2(直接式2)和PType(平行式). 参数取值范围: lane_width: length = [3m..4m] left_lane_num: int = [0, 1, 2, 3, 4] right_lane_num: int = [3, 4] ramp_lane_num: int = [1, 2] main_speed: speed = [80kph..120kph] ramp_speed: speed = [40kph..60kph] radius_of_curvature: length = [150m..1000m] ramp_length: length = [200m..500m] road_aids_type: road_aids_type = ["DType-1", "DType-2", "PType"] keep创建 my_road_aids_type: road_aids_type = "DType-1" my_merge: merge with: keep(it.lane_width == 3m) keep(it.left_lane_num == 0) keep(it.right_lane_num == 3) keep(it.ramp_lane_num == 1) keep(it.main_speed == 120kph) keep(it.ramp_speed == 60kph) keep(it.radius_of_curvature == 200m) keep(it.ramp_length == 250m) keep(it.road_aids_type == my_road_aids_type) create创建 my_road_aids_type: road_aids_type = "DType-1" my_merge: merge = scenery.create_merge(lane_width: 3m, left_lane_num: 0, right_lane_num: 3, main_speed: 120kph, ramp_speed: 60kph, radius_of_curvature: 200m, ramp_length: 250m, road_aids_type: my_road_aids_type) merge和split场景使用的road_aids_type为enum类型,详见附录Enum lists的road_aids_type一节 在road_aids_type为"DType-2"时,right_lane_num必须大于ramp_lane_num. 如果希望车道属性需要搭建同一方向,不能存在left和right属性同时出现,可以将left_lane_num设置为0. 父主题: 领域模型设计
  • 车道保持(Lane Keeping)检测 车道保持检测的目的是判断主车在行使过程中能否很好地沿车道中心线行使。 车道保持检测分为两个指标: 偏移车道中心线距离检测 偏移车道中心线横摆角检测 偏移车道中心线距离检测是指主车的质心相对于车道中心线的垂直距离,当该偏移距离大于某一阈值时(本设计取0.3m,该阈值可以用户自定义),则偏移车道中心线距离检测不通过。 偏移车道中心线横摆角检测是指主车行使时速度方向与车道中心线的夹角,当该夹角大于某一阈值时(本设计取0.05rad,该阈值可以用户自定义),则偏移车道中心线横摆角检测不通过。 车道保持检测需要排除主车进行了换道操作,对于换道期间进行偏移车道中心线距离检测和偏移车道中心线横摆角检测,将会出现假阳性的结果。 当主车所在的road id保持不变,在某一时刻,其lane id 发生变化,在该时刻的前后一定时间内(本设计取2s)发生换道。 车头横摆角偏离检测关联的内置可视化时间序列数据为:relativeYaw。横向偏移距离检测关联的内置可视化时间序列数据为:lateralOffset。 该指标的异常时间点记录类型为:POINT_TYPE_POINT。 父主题: 内置评测指标说明
  • 动作 change_lane 动作主体:车辆vehicle 结束时间:当动作主体actor 位于目标车道lane 中、目标偏移offset 处时,动作结束. 是否支持modifier:否 参数:参数如下表,支持关键字参数. rate_peak 和rate_profile 是必选项,用于设置osc1中的dynamics . target 和reference 必须设置且只设置其中之一,前者用于指定绝对车道,后者用于指定相对车道. 表1 change_lane参数 Parameter Type Mandatory Description number_of_lanes uint no The target lane is "num_of_lanes" to the side of the reference entity. Use in conjunction with "side". side lane_change_side no Select on which side of the reference entity. reference entity no Default=it.actor. Reference to the entity that is used to determine the target lane. If this argument is omitted, the actor itself is used as reference. offset length no Default=0.0. Target offset from center of the target lane that the actor follows at the end of the action. rate_profile dynamics_shape yes Assign a shape for the change of the lateral position variable (t-axis). This profile affects the lateral velocity during action execution. rate_peak speed yes Target value for the peak lateral velocity that must be achieved during the action. target lane_id(uint) no The actor starts and finishes the action in the target lane. 目标lane必须在地图上。 中心线左侧的lane_id为正,如'1','2'.右侧的lane_id为负,如'-1','-3'.绝对值越大,距离中心线越远。 offset值不能超出当前所在lane的宽度范围。 使用相对位置时,参考对象reference必须是车辆,否则仿真器A无法支持。 rate_profile只能选择linear或step。 绝对车道1 my_lane: lane with: keep(it.lane_id == '1') m_profile: dynamics_shape = linear side_vehicle.change_lane(target: my_lane, rate_profile: m_profile, rate_peak: 0.3mps) 绝对车道2 my_lane: lane with: keep(it.lane_id == '-1') m_profile: dynamics_shape = linear side_vehicle.change_lane(target: my_lane, offset: -0.2m, rate_profile: m_profile, rate_peak: 0.4mps) 相对车道1 m_profile: dynamics_shape = step m_side: lane_change_side = left m_profile: dynamics_shape = step Ego.change_lane(number_of_lanes: 2, side: m_side, reference: side_vehicle, offset: 0.8m, rate_profile: m_profile, rate_peak: 0.3mps) 相对车道2 m_profile: dynamics_shape = step m_side: lane_change_side = same m_profile: dynamics_shape = step Ego.change_lane(number_of_lanes: 1, reference: side_vehicle, side:m_side, rate_profile: m_profile, rate_peak: 0.3mps) 父主题: 动作 Actions
  • 标签管理相关操作 在“标签管理”界面,还可以进行以下操作。 表1 标签管理相关操作 任务 操作步骤 新建根标签 单击“新增标签”,输入标签名称。 新建标签 单击标签后的,输入标签名称。 修改标签 单击标签后的,可对标签的名称进行修改。 删除标签 单击标签后的,可删除标签或其子节点标签。 说明: 平台预置场景标签暂不支持编辑、删除。 导出标签 单击根标签后的,可导出标签至本地。 搜索标签 在搜索框输入搜索内容,可模糊搜索标签。 多项搜索:可根据需要决定是否启用多项搜索,输入多个关键字,中间用“;”隔开,可搜索多个关键字。
  • 环境变量使用说明 模型推理所需的待审核数据集目录等信息均可通过注入镜像的环境变量获取,详情见镜像制作(标注)。 环境变量 描述 获取方式(以python为例) OCTPS_DATASET_DIR 全量数据集目录 os.getenv('OCTPS_DATASET_DIR') OCTPS_META_PATH 模型版本关联标注物文件目录 os.getenv('OCTPS_META_PATH') OCTPS_INSPECTION_ATTRI_DIR 审核属性字段目录 os.getenv(' OCTPS_INSPECTION_ATTRI_DIR ') OCTPS_DATASET_INDEX_PATH 待审核的数据帧索引文件目录(用于从全量数据集中筛选出需要审核的数据) os.getenv(' OCTPS_DATASET_INDEX_PATH ') TARGET_RESULT_DIR 预审核结果数据目录 os.getenv('TARGET_RESULT_DIR') TARGET_RULES_DIR 预审核规则数据目录 os.getenv(' TARGET_RULES_DIR ') TARGET_LOG_DIR 预审核日志文件目录 os.getenv('TARGET_LOG_DIR')
  • 预审核规则格式说明 预审核模型使用的审核规则以字典的格式保存在特定目录下的json文件中(TARGET_RULES_DIR),以便在审核报告中展示。 { "rules": [ { "rule": "", #规则名称 "description": "", #规则具体要求 "inspection_attribute": "" #此规则对应的审核属性,2D包含:多标,漏标,类型错误,未贴合,属性错误。3D包含:多标,漏标,类型错误,未贴合,属性错误,车头方向错误,锚点错误。 } … … ] } 示例: { "rules": [ { "rule": "标注框贴合精度", "description": "标注框与实际对象误差不超过5个像素", "inspection_attribute": "未贴合" }, { "rule": "标注框类别", "description": "类别标注错误", "inspection_attribute": "类型错误" } ] }
  • 预审核结果格式说明 审核完毕后,需要按照规定格式组织预标注结果,并保存在特定路径(TARGET_RESULT_DIR)下的json文件中。路径要求见 镜像制作(标注)。 Json 文件内容组织结构如下所示,labels字段中保存每个对象的标注员标注信息、审核模型预测信息(predict_infos)和审核结果信息(inspection)。 { "labels":[{ #1. 此对象的标注信息 (直接从源数据labels.json中获取),如果未标注出此对象,则无 此部分信息 … … #2.此对象的模型预测信息 ,如果模型未预测出此对象,则无此部分信息 "predict_infos": { #形状坐标信息 #对象类别名称 #额外属性信息 } #3.审核结果,如果未审核此对象,则无此部分信息 "inspection": { #字段名称取自OCTPS_INSPECTION_ATTRI_DIR文件 } }, … … ] } 其中3D大规模点云分割任务还包含“labels_ext”和“predict_labels_ext”字段,具体参考“3D大规模点云分割”。 { "labels":[], "labels_ext":{ } "predict_labels":[] } 以2D目标检测为例,完整json结果文件样例如下: { "labels": [ { #1. 此对象的标注信息 (直接从源数据labels.json中获取) "label_meta_id": 1846, "bndbox": { "ymin": 545.4334, "xmin": 1158.3188, "ymax": 705.71844, "xmax": 1436.3274 }, "name": "框0504", "shape_type": "bndbox", "serial_number": 2, "label_object_id": 2, "attribute": "{\"优先级\":\"1\"}", "label_meta_name": "框0504", #2.此对象的模型预测信息 "predict_infos": { "bndbox": { "ymin": 545.4334, "xmin": 1158.3188, "ymax": 725.71844, "xmax": 1456.3274 }, "label_meta_name": "框0504", "attribute": "{\"优先级\":\"1\"}" }, #3.审核结果 "inspection": { #字段名称取自OCTPS_INSPECTION_ATTRI_DIR文件 "miss_label_error": false, "vehicle_direction_error": false, "error_desc": "无效", "attribute_error": true, "out_range_label_error": true, "anchor_error": false, "classification_error": false, "extra_label_error": false } } ] } 不同类型的标注对象形状基本信息所需格式不同。下面为各类标注对象predict_infos的字段说明: 2D目标检测: {"predict_infos": { "bndbox": { "ymin": 545.4334, "xmin": 1158.3188, "ymax": 725.71844, "xmax": 1456.3274 }, "label_meta_name": "框0504", "attribute": "{\"优先级\":\"1\"}" } } 2D语义分割: {"predict_infos": { "polygon": { "size": 3, "points": [ { "xpoint": 135.03, "ypoint": 482.94937 }, { "xpoint": 84.318344, "ypoint": 554.4891 }, { "xpoint": 135.03, "ypoint": 482.94937 } ] }, "label_meta_name": "多边形0504", "attribute": "{\"优先级\":\"1\"}" } } 2D车道线: {"predict_infos": { "line": { "size": 3, "points": [ { "xpoint": 901.138, "ypoint": 553.583 }, { "xpoint": 741.36, "ypoint": 630.367 }, { "xpoint": 618.153, "ypoint": 681.566 } ] }, "label_meta_name": "线0504", "attribute": "{\"优先级\":\"1\"}" } } 3D目标检测: { "predict_infos": { "label_meta_name": "Car", "cube_3d": { "rotation": { "x": 0.0, "y": 0.0, "z": 0.08726646 }, "location": { "x": -40.23651584555386, "y": 1.2362389665094042, "z": -0.8413386615781039 }, "attribute": "{}", "dimensions": { "length": 4.459540762142082, "width": 1.4870339632034302, "height": 1.4895729290943762 } } } } 3D大规模点云分割: "predict_infos": { "polygon_3d_v2": { "ascii_char": "2" }, "name": "car", } 完整样例 { "labels": [ { "label_meta_id": 4867, "create_time": 0, "polygon_3d_v2": { "ascii_char": "3" }, "name": "car", "shape_type": "polygon_3d_v2", "serial_number": 0, "label_object_id": -1, "attribute": "", "label_meta_name": "car", "inspection": { "miss_label_error": false, "vehicle_direction_error": false, "error_desc": "", "attribute_error": false, "out_range_label_error": false, "anchor_error": false, "classification_error": false, "extra_label_error": false }, "predict_infos": { "polygon_3d_v2": { "ascii_char": "2" }, "name": "car" } }, { "predict_infos": { "polygon_3d_v2": { "ascii_char": "4" }, "name": "van" } } ], "labels_ext": { "ascii_string": "3333333333 3333333333" }, "predict_labels_ext": { "ascii_string": "222222222244444 2222222222" } } labels_ext中保存点云中每个点的标注类别,具体内容说明参考OCTOPUS数据集格式说明。predict_labels_ext中保存点云中每个点的模型预测类别。 3D语义分割审核结果可视化说明:针对有审核属性错误的标注对象,展示该标注对象对应位置点的预测类别。
  • 平稳起步(Gentle Start)检测 汽车起步时加速度太大会给人带来不舒适的感受。平稳起步检测的目的是判断自动驾驶车辆起步过程中加速度是否过大。 起步过程的判定是指车辆当前速度为0,并在0.5s后速度大于,这个0.5s内的时间段为起步过程。 起步过程中如果加速度大于一定阈值(本设计取),则判定起步加速度过大,起步不平稳。 该指标关联的内置可视化时间序列数据为:speedX,accX。 该指标的异常时间点记录类型为:POINT_TYPE_POINT。 父主题: 内置评测指标说明
  • 行人 Pedestrian 通过 行人名: person 的方式来为行人命名.通过 keep(it.name == 指定行人名称) 的方式来指定行人 类型.通过 keep(it. model == 指定行人特征) 的方式来指定行人的性别、年龄特征.行人的name 和 model 同样只能使用仿真器A自带的类型. 样例 Dude: person with: keep(it.name == "Christian") keep(it.model == "male_adult") 父主题: 实体设置 Entities
  • 初始动作 acquire_position_init 动作主体:车辆vehicle或行人pedestrian 结束时间:当动作主体actor 获取目标位置position 时,动作结束. 是否支持modifier:否 参数表: 参数如下表,pose_3d是point和orientation的组合结构, point可以使用xyz_point或 odr_point或road_point中的任意一个,orientation非必选项. 表1 acquire_position_init参数 Parameter Type Mandatory Description target pose_3d yes target position. 目标位置必须在地图设定的道路上,且是可达的. xyz_point,有方向要求 m_x: length = 0.0m m_xyz: xyz_point = map.create_xyz_point(x: m_x, y: 10.0m ,z: 0.0m) m_heading: angle = 1.57rad m_orientation: orientation_3d with: keep(it.roll == 0.0rad) keep(it.pitch == 0.0rad) keep(it.yaw == m_heading) m_position: pose_3d with: keep(it.xyz_point == m_xyz) keep(it.orientation == m_orientation) Ego.acquire_position_init(target: m_position) odr_point,无方向要求 m_odr: odr_point = map.create_odr_point(road_id: '0', lane_id: '-4', s: 5.0m, t: 0.0m) m_position: pose_3d with: keep(it.odr_point == m_odr) Ego.acquire_position_init(target: m_position) road_point,无方向要求 m_road: road_point = map.create_road_point(road_id: '0', s: 5.0m, t: 0.0m) m_position: pose_3d with: keep(it.road_point == m_road) Ego.acquire_position_init(target: m_position) 父主题: 动作 Actions
  • merge 简述:地图场景为匝道合流.主车Ego在主道行驶,初始速度为Ego_InitSpeed_Ve0,Ego设定了目标在主道右侧2车道上的目标点Target_position,仿真开始后激活Ego控制器(控制器会影响Ego去往Target_position的寻路算法,但目前仿真器B尚不支持寻路动作acquire_position),从车side_vehicle在匝道行驶,初始速度为SideVehicle_InitSpeed_Ve0.side_vehicle从匝道汇入主道.控制器有时会根据side_vehicle的位置更改主车Ego的速度. 地图文件(odr) scenario Merge: m_scene: scenery lane_width: length = [3m, 4m] radius_of_curvature: length = [200m..1000m] ramp_lane_num: int = 1 ramp_length: length = [200m..300m] main_speed: speed = 120kph ramp_speed: speed = 60kph road_aids_type: road_aids_type = ["DType-1", "DType-2", "PType"] merge_1: merge with: keep(it.lane_width == lane_width) keep(it.left_lane_num == 0) keep(it.right_lane_num == 2) keep(it.ramp_lane_num == ramp_lane_num) keep(it.main_speed == main_speed) keep(it.ramp_speed == ramp_speed) keep(it.radius_of_curvature == radius_of_curvature) keep(it.ramp_length == ramp_length) keep(it.road_aids_type == road_aids_type) 场景文件(osc) import standard scenario Merge: # map map: map map.set_map_file("./merge.odr") # parameter Ego_InitSpeed_Ve0: speed = [90kph..110kph] Ego_InitPosition_LaneId: string = ['-1', '-2'] Ego_InitPosition_s: length = [0m..30m] Ego_Odr: odr_point = map.create_odr_point(road_id: '10', lane_id: Ego_InitPosition_LaneId, s: Ego_InitPosition_s, t: 0.0m) Ego_InitPosition: pose_3d with: keep(it.odr_point == Ego_Odr) SideVehicle_InitSpeed_Ve0: speed = [45kph, 50kph, 55kph] SideVehicle_s: length = [30.0m..80.0m] SideVehicle_Odr: odr_point = map.create_odr_point(road_id: '1', lane_id: '-1', s: SideVehicle_s, t: 0.0m) SideVehicle_InitPosition: pose_3d with: keep(it.odr_point == SideVehicle_Odr) Target_xyz: xyz_point = map.create_xyz_point(x: 530m, y: -2m ,z: 0.0m) Target_position: pose_3d with: keep(it.xyz_point == Target_xyz) Duration: time = 100s # entity Ego: vehicle with: keep(it.name == "Saimo") keep(it.initial_bm == "默认驾驶员") side_vehicle: vehicle with: keep(it.name == "Saimo") keep(it.initial_bm == "默认驾驶员") # storyboard do parallel(duration: Duration): # init Ego.assign_init_position(position: Ego_InitPosition) Ego.assign_init_speed(Ego_InitSpeed_Ve0) side_vehicle.assign_init_position(position: SideVehicle_InitPosition) side_vehicle.assign_init_speed(SideVehicle_InitSpeed_Ve0) Ego.activate_controller(true, true) Ego.acquire_position(target: Target_position) 父主题: 种子地图的逻辑场景样例(仿真器B)
  • 蛇行(Snake Driving)检测 自动驾驶车辆在行使过程中,当车道的曲率发生较大变化时,可能会出现横向控制效果不佳导致的长时间车辆横向振荡。 蛇行检测的目的是判断车辆是否出现横向振荡,利用车辆的横向加速度的正负变化来判断蛇行是否发生。 正值大于和负值小于的比例都大于该时间段的10%时,则判断此时间段发生蛇行。 在及少数的连续S型弯道情况下,可能会出现假阳性结果,这会在评测报告中进行体现。 该指标关联的内置可视化时间序列数据为:accY。 该指标的异常时间点记录类型为:POINT_TYPE_REGION。 父主题: 内置评测指标说明
共100000条