跳转至

BEV 拼接工具

3.3.1 功能背景

BEV 技术通过传感器数据提供鸟瞰视图,用于自动驾驶等领域,提高环境感知能力。BEV 感知技术具有遮挡处理全局视野并行执行多任务等特点。其工作原理包括数据获取预处理BEV 视角转换。BEV 图像在自动驾驶领域应用广泛,如环境感知、物体检测、路径规划等

在利用 BEV 视角图像来进行做进一步应用前,需要进行数据标注。在对真实数据的标注中,往往有被遮挡,光照阴影等原因导致的精确度不足问题,数据类型上有场景多样性的不足,同时还有时间成本巨大的缺陷。

本工具结合 SimOne 进行 BEV 数据生成和拼接,通过示例算法获得 BEV 图像,并标注出停车位真值信息,会包含在安装包中,暴露给客户,路径为 SimOne/Tools/BEVTools/

3.3.2 数据生成

本工具需要配合 SimOne 使用,通过使用 SimOne 输出仿真数据。

在主车中添加鱼眼摄像头,配置不足时可分为四个主车,每个主车配置一个方向的鱼眼相机,然后通过回放案例的方式来生成同一条测试线路的各向鱼眼相机数据。

3.3.2.1 鱼眼相机设置

在添加多路鱼眼相机后需要对其进行设置,除成像设置按需更改外,需要对输出设置进行更改:

(1)点击 输出到 一栏的选择框,在下拉菜单中选择 Dump

(2)在新出现的菜单中,勾选 RGB深度图车道线

(3)按照仿真机器的配置高低选择 Dump 频率

(4)Dump 开始Dump 结束 分别对应在仿真运行时 Dump 数据的开始时间和结束时间,由于在启动运行案例可能有一定的等待时间,建议开始时间可以选择 10s 时间,以免 dump 数据中出现过多的车辆停止状态的冗余数据。

(5)在 保存到 一栏填入输出数据的目标路径,dump 数据会在运行案例后,于对应路径下新建文件夹,并存入其中。

(6)重复上述过程,对各方向的鱼眼相机均进行正确配置。

3.3.2.2 Dump 数据建议流程

由于仿真机器的配置高低差异,这里提供一种较为普适可行的 Dump 数据流程。

(1)准备好5辆主车,其中一辆主车不添加鱼眼相机,其余各添加一个方向的鱼眼相机,并配置 Dump 相关。

(2)使用无鱼眼相机主车进行案例仿真(案例名不要带中文),将需要的路线跑出来之后停止案例,在 任务管理 ->已完成 一栏中找到完成的任务,点击展开按钮,点击下图所示按钮,创建数据回放按钮,在弹窗中,转换为 一栏选择 回放用例 ,点击 创建

  • 用例管理中,找到刚刚创建的回放案例,点击选择后点击 运行 按钮,在弹窗中 主车类型 一栏中选中配置了各向鱼眼相机的主车,将四个方向的数据依次输出出来。

3.3.3 准备数据

在四路相机输出完 dump 数据后,将文件夹整理如下图类似的结构,数字部分为 dump 路径中的子文件夹内容:

其中"600"等子文件夹,是各方向相机 dump 输出路径下的子文件夹。

3.3.4 数据拼接转换

工具所在目录:安装目录\SimOne\Tools\BEVTools\

(1)打开命令行,输入如下指令,即可开始转换(可以自己建立 res 文件夹或工具会自动创建):

E:\\DumpData\\文件夹下需要有 front,back,right,left 四个子文件夹,分别是对应的四路鱼眼相机 dump 数据,输入路径应为绝对路径。

  • 稍作等待即可得到转换后的 BEV 图像和标注结果。

  • E:\\DumpData\\文件夹下的 front,back,right,left 四个子文件夹中会有"out"文件夹,是将 dump 数据转换为 png 图像结果

  • E:\\DumpData\\res 中会有 bev_image,json,json_image 三个文件夹结果,分别存放的是 bev 拼接结果,真值 json 数据,以及将真值 json 数据画在拼接图像上的结果,其中:蓝色圆形空心点为停车位可见内角点;红色圆形空心点为停车位不可见内角点;绿线框为停车位外包围盒;白线框为左右边线的包围盒。

BEV 拼接效果如下图示例:

采用 --show_json_on_img True时会将 json 结果标注在最终的拼接图像中,如下图所示:

3.3.5 真值 json 数据格式说明

3.3.5.1 坐标系及旋转阵说明

首先说明各坐标系定义:

(1)世界坐标系原点与地图一致,坐标轴与地图一致,即在用例编辑时,地图界面的向右方向为 X 轴正向,向上为 Y 轴正向,向屏幕外为 Z 轴正向。

(2)车体坐标系原点与主车预览时显示一致,在两后车轮与地面接触点连线的中点;坐标轴方向也与主车预览时一致,车头方向为 X 轴正向,向左为 Y 轴正向,向上为 Z 轴正向。

(3)相机坐标系原点与主车预览时一致;坐标轴方向,相机朝向正向为 X 轴正向,向左为 Y 轴正向,向上为 Z 轴正向。

(4)相机成像图像坐标系,原点为左上角点,向右为 U 轴正向,向下为 V 轴正向。

然后是旋转阵定义,所有的旋转阵均为外旋矩阵,此处不做额外说明。

3.3.5.2 BEV 转换工具结果格式说明

经过转换工具转换后,dump 数据会转换为 BEV 图像,json 真值数据,这里对 json 真值数据的各部分进行说明。

(1)车辆信息

(2)相机信息

(3)停车位信息

3.3.5.3 原始 dump 数据格式说明

当制作自己的 BEV 拼接算法时,需要从原始的各路的 dump 数据开始进行,dump 数据输出路径中,一次任务的文件夹中会有鱼眼相机的子文件夹,鱼眼相机子文件夹中有输出的各帧数据,每一帧对应的文件夹内包含如下4个文件:

其中 LaneInfo.json 就是这个相机输出的真值数据,打开后可主要分为以下几个部分,在这里简单分别论述一下。

(1)车辆及相机信息

主要是车辆和相机信息。

  • 停车位信息

在 json 文件中的"laneMark_ParkingSpaces"项中,是停车位的相关信息。

  • 车道线信息

在 json 文件的"lane_lines"一项中,是车道线相关信息,以 open lane 为基础定义。

3.3.6 BEV 拼接算法简要说明

BEV 拼接的基本原理是通过将四个方向的图像,通过单应矩阵计算变换,投影到俯视视角,算法的基本流程可以概括为,设计最终 BEV 范围各方向标定矫正各向鱼眼相机图像投影各向相机图像平滑交叠区域得到最终的 BEV 拼接图像

需要强调的是,四路鱼眼相机图像通过单应矩阵进行图像变换,可以正常拼接成为 BEV 图像的前提是图像内容在同一平面内否则可能会出现具有高程的物体在不同方向的视场交叠处出现重影的问题,这是由单应矩阵变换的基本原理所导致的,无法去除。或是可以更改策略以规避重影问题,在平滑交叠区域时,不使用平滑策略而直接拼接,重叠处只保留单方向结果,但这同样会有不够平滑,高程物体在接缝处有跳变的现象,如果取舍可以根据需要。

json 真值部分主要是将不同坐标系进行变换,通过将 dump 原始数据中的相机坐标系坐标转换至世界坐标系,得到最终汇总的结果,较为简单。

其中的技术细节可以使用单应矩阵,BEV 等作为搜索关键词自行了解,这里不过多赘述。

3.3.7 异常数据的特殊处理

由于 BEV 拼接算法的本身缺陷,对于有高程的物体在拼接结果中,可能出现虚影,此时对于部分标注物来说,可能在某个方向可见而另一个方向不可见的情况,此时对于 BEV 拼接结果中的是否可见,需要根据自己的需求进行判断。

转换工具的 json 最终结果可能就与需求不同,需要从各方向鱼眼相机的原始"LaneInfo.json"信息,取得各个方向的真值,按照自己的需求进行数据过滤和 BEV 拼接。