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

创建点云帧输入清单文件

清单是一个 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

数字

Unix 时间戳。

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

ego-vehicle-pose

JSON 对象

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

prefix

字符串

接受的字符串值格式

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

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

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

images

列表

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

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

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

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

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

参数

必需

接受的值

描述

position

JSON 对象

必需的参数

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

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

heading

JSON 对象

必需的参数

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

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

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

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

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

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

参数

必需

接受的值

描述

image-path

字符串

格式示例

<folder-name>/<imagefile.png>

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

unix-timestamp

数字

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

数字

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

p1, p2

数字

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

skew

数字

测量图像偏斜的参数。

position

JSON 对象

必需的参数

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

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

heading

JSON 对象

必需的参数

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

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

点云帧限制

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