预标注模型文件
预标注模型完成对数据的推理,并将推理结果按照规定格式放在指定路径中。
模型文件基本要求
自定义模型包通过环境变量获取数据集路径和推理结果存放路径,将每帧数据的推理结果按照规定格式存入规定路径的json文件中。
自定义模型包中必须包含启动文件。除此之外,还可包含一些其他必要的自定义模型文件、自定义脚本、自定义库等。
├─ model # 模型包根目录,上传模型时进入该目录下(名称可自定义) ├─ customer_inference.py #“模型推理”启动文件(名称可自定义) ├─ customer_package #自定义库(可选,名称可自定义) ├─ __init__.py #自定义库 - > python库 ├─ tensor_define.py #自定义库 - > python库文件 └─ ... ├─ customer_utils.py #自定义脚本1(可选,名称可自定义) ├─ customer_script2.sh #自定义脚本2(可选,名称可自定义) ├─ sub_directory #子文件夹 └─ customer_model.pb #自定义模型文件(必选,名称可自定义) └─ ... #其他(可选)
环境变量使用说明
模型推理所需的待标注数据集目录、预标注结果数据目录、标注物文件目录、模型文件目录、预标注日志文件目录均可通过注入镜像的环境变量获取,详情见镜像制作(标注)。
预标注结果格式说明
推理完毕后,需要按照规定格式组织预标注结果,并保存在特定路径下的json文件中,路径要求见“模型文件基本要求”。
Json文件内容组织结构如下所示,labels字段中保存了每个预测对象的基本信息。
{ "labels":[] }
其中规模3D大规模点云分割任务还包含“label_ext”字段,具体参考“3D大规模点云分割”。
{ "labels":[], "labels_ext":{} }
不同类型的任务对象基本信息所需格式不同,具体如下所示:
2D目标检测:
{ 'label_meta_id': 168, #标注对象对应的平台标注物的ID,可从标注物文件(OCTPS_META_PATH)中获取(即id字段) 'bndbox': { #矩形框的位置信息 'xmin': 235, 'ymin': 123, 'xmax': 456, 'ymax': 360 }, 'shape_type': "bndbox", #标注物的形状,此处表示2D矩形框 'serial_number':5 #当前对象在当前帧的唯一ID, 从1递增 "label_object_id": 5, #标注物合成对象的唯一自增id,如果标注物之间没有合成则与serial_number保持一致 "label_meta_name": "Car" #标注物名称 }
2D语义分割:
Labels中保存每个预测对象的基本信息,每个基本信息格式如下所示。
{ 'label_meta_id': 167, #标注对象对应的平台标注物的ID,可从标注物文件(OCTPS_META_PATH)中获取(即id字段) 'shape_type': 'polygon', # 标注物的形状,此处表示多边形 'serial_number': 2, #当前对象在当前帧的唯一ID,从1递增 'polygon':{ #多边形的具体信息 'size': 3, # 多边形点数 'points':[ # 每个点的位置信息 {'xpoint': 123, 'ypoint': 456}, {'xpoint': 135, 'ypoint': 467}, {'xpoint': 123, 'ypoint': 456} ] } "label_object_id": 2, #标注物合成对象的唯一自增id,如果标注物之间没有合成则与serial_number保持一致 "label_meta_name": "Car" #标注物名称 }
2D车道线:
Labels中保存每个预测对象的基本信息,每个基本信息格式如下所示。
{ 'label_meta_id': 288, #标注对象对应的平台标注物的ID,可从标注物文件(OCTPS_META_PATH)中获取(即id字段) 'shape_type': 'line', #标注物的形状,此处表示折线 'serial_number': 35, #当前对象在当前帧的唯一ID,从1递增 'line':{ #折线的具体信息 'size': 3, #折线点数 'points':[ #每个点的位置信息 {'xpoint': 123, 'ypoint': 456}, {'xpoint': 135, 'ypoint': 467}, {'xpoint': 123, 'ypoint': 456} ] } "label_object_id": 35, #标注物合成对象的唯一自增id,如果标注物之间没有合成则与serial_number保持一致 "label_meta_name": "Car" #标注物名称 }
3D目标检测:
Labels中保存每个预测对象的基本信息,每个基本信息格式如下所示。
{ 'label_meta_id': 174, #标注对象对应的平台标注物的ID,可从标注物文件(OCTPS_META_PATH)中获取(即id字段) 'cube_3d': { # 3D框的具体信息 'dimensions': { #3D框的长宽高 'width': 1.839784026145935, 'length': 4.315396785736084, 'height': 1.55556058883667 }, 'location': { #3D框的位置 'x': -4.736311912536621, 'y': -71.40546417236328, 'z': -1.356909990310669 }, 'serial_number': 3, #当前对象在当前帧的唯一ID,从1递增 'rotation': {"x":0,"y":0,"z":anger}, #3D框的朝向信息 }, 'shape_type': 'cube_3d', #标注物形状,此处表示3D框 "label_object_id": 3, #标注物合成对象的唯一自增id,如果标注物之间没有合成则与serial_number保持一致 "label_meta_name": "Car" #标注物名称 }
3D大规模点云分割:
Labels中保存每个预测类别的基本信息,每个基本信息格式如下所示。
{ "label_meta_id": 1423, #标注对象对应的平台标注物的ID,可从标注物文件(OCTPS_META_PATH)中获取(即id字段) "polygon_3d_v2": { #类别的基础信息 "ascii_char": "\"" #当前类别对应的ascii码 }, "shape_type": "polygon_3d_v2", #标签的形状,此处表示3D语义分割对应的形状 "name": "BEV土墙" #标注物名称 }
此外,3D大规模点云分割的结果文件中的labels_ext字段示例如下:
"labels_ext": { "ascii_string": "############################################################\\#######" }
ascii_string中保存了点云中每个点的类别,如果此帧点云的点数为1000,则此字段会有1000个字符,每个字符分别代表一个点的类别。字符具体表示的类别可以根据labels- > polygon_3d_v2- > ascii_char和labels- > name找到。
用来表示点类别的ascii码包括:
['!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', '。', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~'],此外空字符(' ')表示未标注的类别。