# 自定义模型运行失败原因?

  1. 检查引擎版本

    自定义模型包中的自定义模型及其相关脚本文件,均需基于Tensorflow或PyTorch引擎框架编写。

  2. 检查目录结构

    自定义模型包“xxx.zip”中必须包含启动文件以及自定义模型文件。除此之外还可以包含一些其他必要的自定义脚本、自定义库、自定义算子库等。模型包文件解压后目录结构可参考如下:

    .
     ├─ xxx                          #模型包根目录(名称可自定义)
         ├─ customer_auto_label.py    #“自动标注”启动文件(如该模型用于自动标注,则必选,名称固定) 
         ├─ customer_inference.py     #“模型评估”启动文件(如该模型用于模型评估,则必选,名称固定)
         ├─ customer_package          #自定义库(可选,名称可自定义)
             ├─ __init__.py               #自定义库 -> python库
             ├─ tensor_define.py          #自定义库 -> python库文件
             └─ ...     
         ├─ customer_utils.py         #自定义脚本1(可选,名称可自定义)
         ├─ customer_script2.sh       #自定义脚本2(可选,名称可自定义)
         ├─ sub_directory             #子文件夹
             ├─ customer_operation.so     #自定义算子库(可选,名称可自定义)
             └─ coustomer_model.pb        #自定义模型文件(必选,名称可自定义)
         └─ ...                       #其他(可选)
    

    注意: 您需将模型全部相关文件压缩为“.zip”包,并且保证解压后直接得到所有相关文件(外层勿嵌套其他文件夹)。

  3. 检查启动文件

    1. 若用于自动标注

      Octopus平台自动标注模块将加载“customer_auto_label.py”中定义的类并实例化,然后依次执行该实例对象的load_model、pre_auto_label、auto_label、post_auto_label方法。用户必须定义一个唯一的自定义类,并导入父类“AutoLabelModel”,同时自定义类中必须定义这四种方法。启动文件中必须导入的部分对象请参考下表。

      表 1 自动标注启动文件必选项

      参数

      说明

      logger

      用户必须导入logger对象以打印日志

      AutoLabelModel

      自动标注模型的类名。必须导入AutoLabelModel类,并作为自定义类的唯一父类。

      load_model (self)

      用于加载模型的方法,必须在自定义类中定义,且仅在推理图片前调用该方法1次。

      pre_auto_label (self, sample_path)

      用于前处理的方法,必须在自定义类中定义。该方法形参必须唯一且参数名为sample_path,推理每张图片时均会调用1次该方法。

      auto_label (self, sample_path)

      用于推理图片的方法,必须在自定义类中定义。该方法形参必须唯一且参数名为sample_data,推理每张图片时均会调用1次该方法。

      post_auto_label (self, label_data)

      用于后处理的方法,必须在自定义类中定义。该方法形参必须唯一且参数名为label_data,推理每张图片时均会调用1次该方法。

      label_meta_dict

      用于获取meta信息(标注名、形状和颜色等),并将结果展示在前端。可以通过“label_meta_dict.key()”读取注册该模型时用户填入的类别信息。(“训练服务”->“模型管理”->“添加模型”->“标注”)

      upload_results

      用于获取单张图片的结果(该变量类型为list),upload_results中每个元素对应一个bounding box结果(元素类型为dict)

    2. 若用于模型评估

      Octopus平台自动标注模块将加载“customer_inference.py”中定义的类并实例化,然后依次执行该实例对象的load_model、infer_preprocess、infer_execution、infer_postprocess方法。用户必须定义一个唯一的自定义类,并导入父类“AutoLabelModel”,同时自定义类中必须定义这四种方法。启动文件中必须导入的部分对象请参考下表。

      表 2 模型评估启动文件必选项

      参数

      说明

      logger

      用户必须导入logger对象以打印日志

      StandardInferenceClass

      模型评估的类名。必须导入StandardInferenceClass类,并作为自定义类的唯一父类。

      load_model (self, inference_rootdir)

      用于加载模型的方法,必须在自定义类中定义。该方法形参必须唯一且参数名为inference_rootdir,且该变量为根目录的绝对路径,仅在推理图片前调用该方法1次。

      infer_preprocess(self, inference_image)

      用于前处理的方法,必须在自定义类中定义。该方法形参必须唯一且参数名为inference_image,推理每张图片时均会调用1次该方法。

      infer_execution (self, inference_input)

      用于推理图片的方法,必须在自定义类中定义。该方法形参必须唯一且参数名为inference_input,推理每张图片时均会调用1次该方法。

      infer_postprocess(self, inference_output)

      用于后处理的方法,必须在自定义类中定义。该方法形参必须唯一且参数名为inference_output,推理每张图片时均会调用1次该方法。

      label_meta_dict

      用于获取meta信息(标注名、形状和颜色等),并将推理结果与评估数据集中的类别信息匹配。可以通过“label_meta_dict.key()”读取注册该模型时用户填入的类别信息。(“训练服务”->“模型管理”->“添加模型”->“模型评估”)

      upload_results

      用于获取单张图片的结果(该变量类型为list),upload_results中每个元素对应一个bounding box结果(元素类型为dict)

    关于自定义模型文件的更多详细说明,请参见“模型文件说明”。

上次更新: 5/6/2021, 7:57:44 PM