预审核模型文件
预审核模型完成对已标数据的审核,并将审核结果和审核所用的审核规则按照规定格式放在指定路径中。
模型文件基本要求
自定义模型包通过环境变量获取数据集路径和推理结果存放路径,将每帧数据的审核结果按照规定格式存入规定路径的json文件中。
自定义模型包中必须包含启动文件。除此之外,还可包含一些其他必要的自定义模型文件、自定义脚本、自定义库等。
├─ model # 模型包根目录,上传模型时进入该目录下(名称可自定义) ├─ customer_inspection.py #“模型推理”启动文件(名称可自定义) ├─ customer_package #自定义库(可选,名称可自定义) ├─ __init__.py #自定义库 - > python库 ├─ tensor_define.py #自定义库 - > python库文件 └─ ... ├─ customer_utils.py #自定义脚本1(可选,名称可自定义) ├─ customer_script2.sh #自定义脚本2(可选,名称可自定义) ├─ sub_directory #子文件夹 └─ customer_model.pb #自定义模型文件(必选,名称可自定义) └─ ... #其他(可选)
- 启动文件
整个自定义模型包的入口文件,该文件在启动容器时被运行。创建预审核任务时,需在“标注脚本”处提供该文件的绝对路径。文件绝对路径为模型仓库中的模型在AI引擎中的路径(“/tmp/label/source/model/”)+文件在模型中的相对路径,以上述为例,路径为“/tmp/label/source/model/customer_inspection.py”。
- 自定义库
允许用户使用自定义库,但不推荐使用需要编译的库,以避免与内置库文件冲突。示例中使用Python语言中的package作为自定义库。
- 自定义脚本
- 自定义模型文件
自定义模型文件“xxx.pb”,需要通过编写自定义脚本加载并使用。自定义模型文件的存放位置及名称可自定义,可以将相关模型文件保存至子文件夹中,也可以保存至根目录下。
环境变量使用说明
模型推理所需的待审核数据集目录等信息均可通过注入镜像的环境变量获取,详情见镜像制作(标注)。
环境变量 |
描述 |
获取方式(以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') |
预审核结果格式说明
审核完毕后,需要按照规定格式组织预标注结果,并保存在特定路径(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", } }
3D大规模点云分割完整样例
{ "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语义分割审核结果可视化说明:针对有审核属性错误的标注对象,展示该标注对象对应位置点的预测类别。
预审核规则格式说明
预审核模型使用的审核规则以字典的格式保存在特定目录下的json文件中(TARGET_RULES_DIR),以便在审核报告中展示。
{ "rules": [ { "rule": "", #规则名称 "description": "", #规则具体要求 "inspection_attribute": "" #此规则对应的审核属性,2D包含:多标,漏标,类型错误,未贴合,属性错误。3D包含:多标,漏标,类型错误,未贴合,属性错误,车头方向错误,锚点错误。 } … … ] }
示例:
{ "rules": [ { "rule": "标注框贴合精度", "description": "标注框与实际对象误差不超过5个像素", "inspection_attribute": "未贴合" }, { "rule": "标注框类别", "description": "类别标注错误", "inspection_attribute": "类型错误" } ] }