创建点云帧输入清单文件 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建点云帧输入清单文件

清单是一个 UTF-8 编码的文件,其中每行都是完整且有效的 JSON 对象。每行都以标准换行符 \n 或 \r\n 分隔。由于每行都必须是有效的 JSON 对象,因此您不能使用未转义的换行符。在单帧输入清单文件中,清单中的每一行包含单个点云帧的数据。可以使用二进制或 ASCII 格式存储点云帧数据(请参阅接受的原始 3D 数据格式)。这是 3D 点云对象检测和语义分割所需的清单文件格式。(可选)您也可以为每个点云帧提供摄像机传感器融合数据。

在中支持 Ground Truth 在中支持点云和摄像机传感器融合世界坐标系对于所有模式。如果您可以获取 3D 传感器外部矩阵(例如 LiDAR 外部矩阵),我们建议您使用外部矩阵将 3D 点云帧变换为世界坐标系。有关更多信息,请参阅 传感器融合

不过,如果无法在世界坐标系中获取点云,您可以在捕获数据的原始坐标系中提供坐标。如果提供用于传感器融合的摄像机数据,建议您在世界坐标系中提供 LiDAR 传感器和摄像机姿势。

要创建单帧输入清单文件,可以使用 source-ref 键指定您希望工作人员标记的每个点云帧的位置。此外,您必须使用 source-ref-metadata 键指定数据集的格式、该帧的时间戳以及传感器融合数据和视频摄像机图像(可选)。

以下示例说明了用于单帧点云标记作业的输入清单文件的语法。该示例包含两个点云帧。有关每个参数的详细信息,请参阅该示例后面的表。

重要

输入清单文件中的每一行必须在JSON 行格式的日期和时间。下面的代码块显示了包含两个 JSON 对象的输入清单文件。每个 JSON 对象都用于指向单点云帧并提供有关单点云帧的详细信息。为了便于阅读,JSON 对象已经扩展,但是在创建输入清单文件时,您必须最小化每个 JSON 对象以适应一行。此代码块下提供了一个示例。

{ "source-ref": "s3://awsexamplebucket/examplefolder/frame1.bin", "source-ref-metadata":{ "format": "binary/xyzi", "unix-timestamp": 1566861644.759115, "ego-vehicle-pose":{ "position": { "x": -2.7161461413869947, "y": 116.25822288149078, "z": 1.8348751887989483 }, "heading": { "qx": -0.02111296123795955, "qy": -0.006495469416730261, "qz": -0.008024565904865688, "qw": 0.9997181192298087 } }, "prefix": "s3://awsexamplebucket/lidar_singleframe_dataset/someprefix/", "images": [ { "image-path": "images/frame300.bin_camera0.jpg", "unix-timestamp": 1566861644.759115, "fx": 847.7962624528487, "fy": 850.0340893791985, "cx": 576.2129134707038, "cy": 317.2423573573745, "k1": 0, "k2": 0, "k3": 0, "k4": 0, "p1": 0, "p2": 0, "skew": 0, "position": { "x": -2.2722515189268138, "y": 116.86003310568965, "z": 1.454614668542299 }, "heading": { "qx": 0.7594754093069037, "qy": 0.02181790885672969, "qz": -0.02461725233103356, "qw": -0.6496916273040025 }, "camera-model": "pinhole" }] } } { "source-ref": "s3://awsexamplebucket/examplefolder/frame2.bin", "source-ref-metadata":{ "format": "binary/xyzi", "unix-timestamp": 1566861632.759133, "ego-vehicle-pose":{ "position": { "x": -2.7161461413869947, "y": 116.25822288149078, "z": 1.8348751887989483 }, "heading": { "qx": -0.02111296123795955, "qy": -0.006495469416730261, "qz": -0.008024565904865688, "qw": 0.9997181192298087 } }, "prefix": "s3://awsexamplebucket/lidar_singleframe_dataset/someprefix/", "images": [ { "image-path": "images/frame300.bin_camera0.jpg", "unix-timestamp": 1566861644.759115, "fx": 847.7962624528487, "fy": 850.0340893791985, "cx": 576.2129134707038, "cy": 317.2423573573745, "k1": 0, "k2": 0, "k3": 0, "k4": 0, "p1": 0, "p2": 0, "skew": 0, "position": { "x": -2.2722515189268138, "y": 116.86003310568965, "z": 1.454614668542299 }, "heading": { "qx": 0.7594754093069037, "qy": 0.02181790885672969, "qz": -0.02461725233103356, "qw": -0.6496916273040025 }, "camera-model": "pinhole" }] } }

创建输入清单文件时,必须折叠 JSON 对象才能适应单行。例如,上面的代码块将显示在输入清单文件中如下所示:

{"source-ref":"s3://awsexamplebucket/examplefolder/frame1.bin","source-ref-metadata":{"format":"binary/xyzi","unix-timestamp":1566861644.759115,"ego-vehicle-pose":{"position":{"x":-2.7161461413869947,"y":116.25822288149078,"z":1.8348751887989483},"heading":{"qx":-0.02111296123795955,"qy":-0.006495469416730261,"qz":-0.008024565904865688,"qw":0.9997181192298087}},"prefix":"s3://awsexamplebucket/lidar_singleframe_dataset/someprefix/","images":[{"image-path":"images/frame300.bin_camera0.jpg","unix-timestamp":1566861644.759115,"fx":847.7962624528487,"fy":850.0340893791985,"cx":576.2129134707038,"cy":317.2423573573745,"k1":0,"k2":0,"k3":0,"k4":0,"p1":0,"p2":0,"skew":0,"position":{"x":-2.2722515189268138,"y":116.86003310568965,"z":1.454614668542299},"heading":{"qx":0.7594754093069037,"qy":0.02181790885672969,"qz":-0.02461725233103356,"qw":-0.6496916273040025},"camera-model":"pinhole"}]}} {"source-ref":"s3://awsexamplebucket/examplefolder/frame2.bin","source-ref-metadata":{"format":"binary/xyzi","unix-timestamp":1566861632.759133,"ego-vehicle-pose":{"position":{"x":-2.7161461413869947,"y":116.25822288149078,"z":1.8348751887989483},"heading":{"qx":-0.02111296123795955,"qy":-0.006495469416730261,"qz":-0.008024565904865688,"qw":0.9997181192298087}},"prefix":"s3://awsexamplebucket/lidar_singleframe_dataset/someprefix/","images":[{"image-path":"images/frame300.bin_camera0.jpg","unix-timestamp":1566861644.759115,"fx":847.7962624528487,"fy":850.0340893791985,"cx":576.2129134707038,"cy":317.2423573573745,"k1":0,"k2":0,"k3":0,"k4":0,"p1":0,"p2":0,"skew":0,"position":{"x":-2.2722515189268138,"y":116.86003310568965,"z":1.454614668542299},"heading":{"qx":0.7594754093069037,"qy":0.02181790885672969,"qz":-0.02461725233103356,"qw":-0.6496916273040025},"camera-model":"pinhole"}]}}

下表显示了可包含在输入清单文件中的参数:

参数

必需

接受的值

描述

source-ref

字符串

接受的字符串值格式

s3://<bucket-name>/<folder-name>/point-cloud-frame-file

单个点云帧的 Amazon S3 位置。

source-ref-metadata

JSON 对象

接受的参数

format, unix-timestamp, ego-vehicle-pose, position, prefix, images

可以使用该参数在 source-ref 中包含有关点云的其他信息,并提供用于传感器融合的摄像机数据。

format

字符串

接受的字符串值"binary/xyz""binary/xyzi""binary/xyzrgb""binary/xyzirgb""text/xyz""text/xyzi""text/xyzrgb""text/xyzirgb"

默认值

binary/xyzi(在 source-ref 中指定的文件具有 .bin 扩展名时)

text/xyzi(在 source-ref 中指定的文件具有 .txt 扩展名时)

可以使用该参数以指定点云数据的格式。有关更多信息,请参阅 接受的原始 3D 数据格式

unix-timestamp

Number

Unix 时间戳。

Unix 时间戳是 1970 年 1 月 1 日到传感器收集数据的 UTC 时间之间的秒数。

ego-vehicle-pose

JSON 对象

用于收集点云数据的设备的姿势。有关该参数的更多信息,请参阅在输入清单中包含车辆姿势信息

prefix

字符串

接受的字符串值格式

s3://<bucket-name>/<folder-name>/

在 Amazon S3 中存储该帧的元数据(例如摄像机图像)的位置。

前缀必须以正斜杠结尾:/

images

List

描述用于传感器融合的彩色摄像机图像的参数列表。您最多可以在该列表中包含 8 个图像。有关每个图像所需的参数的更多信息,请参阅在输入清单中包含摄像机数据

在输入清单中包含车辆姿势信息

可以使用自主车辆位置以提供有关用于捕获点云数据的车辆的位置的信息。Ground Truth 使用此信息来计算 LiDAR 外在矩阵。

Ground Truth 使用外部矩阵以在 3D 场景和 2D 图像之间投影标签。有关更多信息,请参阅 传感器融合

下表提供了有关在提供自主车辆信息时所需的 position 和方向 (heading) 参数的更多信息。

参数

必需

接受的值

描述

position

JSON 对象

必需的参数

x, y, 和 z. 为这些参数输入数字。

自主车辆在世界坐标系中的平移向量。

heading

JSON 对象

必需的参数

qxqyqzqw。为这些参数输入数字。

安装在车辆上的设备或传感器(用于检测周围环境)的参照系的方向,在坐标系中以四元数 (qx, qy, qz, qw) 表示。

在输入清单中包含摄像机数据

如果要将视频摄像机数据与帧包含在一起,请使用以下参数以提供有关每个图像的信息。这些区域有:必需下面的列适用于images参数包含在下面的输入清单文件中source-ref-metadata. 您无需在输入清单文件中包含图像。

如果包含摄像机图像,您必须包含有关用于在世界坐标系中捕获图像的摄像机的 positionheading 的信息。

如果图像发生畸变,可以使用您在输入清单文件中提供的图像 Ground Truth 关信息以自动校正畸变,包括畸变系数 (畸变系数 (k1k2k3k4p1p1)、相机模型和相机内在矩阵。内部矩阵由焦距 (fx, fy) 和主点 (cx, cy)) 组成。请参阅内部矩阵 以了解 Ground Truth 如何使用摄像机内部矩阵。如果不包含畸变系数 Ground Truth 则不会校正图像畸变。

参数

必需

接受的值

描述

image-path

字符串

格式示例

<folder-name>/<imagefile.png>

图像文件在 Amazon S3 中的相对位置。该相对路径将附加到您在 prefix 中指定的路径后面。

unix-timestamp

Number

Unix 时间戳是 1970 年 1 月 1 日到摄像机收集数据的 UTC 时间之间的秒数。

camera-model

字符串:

接受的值

"pinhole", "fisheye"

默认值

"pinhole"

用于捕获图像的摄像机型号。该信息用于校正摄像机图像畸变。

fx, fy

数字

摄像机在 x (fx) 和 y (fy) 方向上的焦距。

cx, cy

数字

主点的 x (cx) 和 y (cy) 坐标。

k1, k2, k3, k4

Number

径向畸变系数。鱼眼针孔摄像机型号支持。

p1, p2

Number

切向畸变系数。针孔摄像机型号支持。

skew

Number

测量图像偏斜的参数。

position

JSON 对象

必需的参数

x, y, 和 z. 为这些参数输入数字。

安装在车辆上的摄像机(用于捕获图像)的参照系的位置或原点。

heading

JSON 对象

必需的参数

qxqyqzqw。为这些参数输入数字。

安装在车辆上的摄像机(用于在世界坐标系中捕获图像)的参照系的方向,以四元数 (qx, qy, qz, qw) 表示。

点云帧限制

您最多可以在输入清单文件中包含 100,000 个点云帧。3D 点云标记作业的预处理时间比其他 Ground Truth 任务类型长。有关更多信息,请参阅 作业预处理时间