文档首页 > > AI工程师用户指南> 管理模型> 评估和诊断模型> 模型评估接口

模型评估接口

分享
更新时间:2020/10/15 GMT+08:00

自定义推理代码可以让代码自行计算推理结果,并按ModelArts定义的规则调用analyse评估接口。

接口说明(通用接口)

ModelArts提供了analyse接口,可以将推理结果以规定格式保存。该接口用于按指定格式保存推理结果,用户需要在自己的推理结束后,按下述规则自行调用。

analyse(task_type='',
         pred_list=[],
         label_list=[],
         name_list=[],
         custom_metric='',
         label_map_dict=''
)
表1 参数说明

参数

是否必选

说明

task_type

任务类型。支持“image_classification”“image_object_detection”参数值。

“image_classification”表示图像分类。

“image_object_detection”表示物体检测。

pred_list

模型预测输出列表。

label_list

所有图片的标签列表。

name_list

所有图片对应的OBS路径。此处需使用绝对路径。

custom_metric

用户自定义的指标。

label_map_dict

标签索引和名称。如果不设置,系统默认使用{"0": "0", "1": "1", "2": "2", ...}作为展示标签。例如,{"0": "dog", "1": "cat", "2": "horse"}

“pred_list”“label_list”“name_list”必须是长度相同的Python list对象,3个list中的对象必须一一对应,例如“pred_list”的第一个元素是第一张图片的预测结果,“label_list”的第一个元素是第一张图片的标签,“name_list”的第一个元素是第一张图片的完整绝对路径。

其中“name_list”为OBS中图片存储的路径,涉及到相关指标为敏感度分析和推理结果查看,需要与pred和labellist一一对应。示例如下:

['obs://test/cat/xxx.jpg', ..., 'obs://test/dog/yyy.jpg']

图像分类的评估代码中,“pred_list”的样例如下所示。“pred_list”的元素是一维numpy ndarray或者一维python list,长度为分类类别个数。表示该张图片在各个类别上的置信度。

[
[0.87, 0.11, 0.02], 
[0.1, 0.7, 0.2], 
[0.03, 0.04, 0.93], 
[0.25, 0.65, 0.1], 
[0.3, 0.34, 0.36]
]

“label_list”的样例如下所示,“label_list”的元素为整型数值,表示该张图片的标签分类。

[0, 1, 2, 1, 2]

图像语义分割的评估代码中,“pred_list”中的元素样式为该张图片各个像素的推理分类结果,shape与图片大小一致。

1
2
3
4
5
6
7
[
   [[0, 2, 1, 1, 0, 1, 2, ...]
    [0, 1, 0, 0, 0, 0, 0, ...]
    ...
    [2, 1, 1, 0, 0, 1, 2, ...]],
    ...
]

“label_list”中的元素样式, 该张图片各个像素的标签分类,shape与图片大小一致。

1
2
3
4
5
6
7
[
   [[1, 2, 0, 1, 0, 1, 2, ...]
    [0, 0, 0, 0, 0, 1, 0, ...]
    ...
    [2, 2, 1, 0, 0, 1, 2, ...]],
    ...
]

物体检测的评估代码中,“pred_list”的样例如下所示。Python list包含3个元素,第1个是二维数组或numpy ndarray对象,形状为“num(一张图片中框的个数)*4(ymin, xmin, ymax, xmax)”。第2个是一维数组或numpy ndarray对象,长度为“num(一张图片中框的个数)”。第3个是一维数组或numpy ndarray对象,长度为“num(一张图片中框的个数)”。表示“[目标框坐标,目标框类别,目标框对应类别置信度]”

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
[
	[
		[
			[142.26546  , 172.09337  , 182.41393  , 206.43747  ],
			[149.60696  , 232.63474  , 185.081    , 262.0958   ],
			[151.28708  , 305.58755  , 186.05899  , 335.83026  ]
		],
        [1, 1, 1],
        [0.999926  , 0.9999119 , 0.99985504]
	],
		
    [
		[
			[184.18466 , 100.23248 , 231.96555 , 147.65791 ],
			[ 43.406055, 252.89429 ,  84.62765 , 290.55862 ]
		],
        [3, 3],
        [0.99985814, 0.99972576]
	],
    ...
]

“label_list”的元素样例如下所示,Python list包含2个元素,第1个是二维数组或numpy ndarray对象,形状为“num(一张图片中框的个数)*4(ymin, xmin, ymax, xmax)”,。第2个是一维数组或numpy ndarray对象,长度为“num(一张图片中框的个数)”。表示“[目标框坐标,目标框类别]”

[
	[
		[
			[182., 100., 229., 146.],
			[ 44., 250.,  83., 290.]
		],
		[3, 3]
	],
	[
		[
			[148., 303., 191., 336.],
			[149., 231., 189., 262.],
			[141., 171., 184., 206.],
			[132., 344., 183., 387.],
			[144., 399., 189., 430.]
		],
		[1., 1., 1., 2., 4.]
	],
	...
]

接口说明(自定义的评估指标)

如果有自定义的评估指标,要绘制在界面上,只要按一定的规则生成JSON的结构体,并写入到生成的JSON文件即可。

如下为可选的展现形式及其JSON结构体示例。您也可以将多个样式拼凑成一个完整的JSON体格式,完整示例可参见 多种样式拼凑成一个JSON

绘图样式

表格样式

图片样式

  • 绘图样式
    图1 绘图样式示例

    JSON结构体

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    折线图
    'line_chart':{'name':{'x_axis_name':str,
                          'y_axis_name':str,
                          'x_axis_range':[x_min, x_min+x_step, x_min+2*x_step, ..., x_max],
                          'y_axis_range':[y_min, y_min+y_step, y_min+2*y_step, ..., y_max],
                          'curve':{'label_1':[(x0,y0),(x1,y1),...],
                                   'label_2':[(x0,y0),(x1,y1),...],
                                   ...}
                          },
                  ...}
    饼图:饼上显示值或百分比
    'pie_chart':{'name':{'label':[label_name_1, label_name_2, ...]
                         'value':[value_1, value_2, ...]
                         },
                ...}
    柱形图:柱上方显示值
    'column_chart':{'name':{'x_axis_name':str,
                           'y_axis_name':str,
                           'x_axis_range':[x_min, x_min+x_step, x_min+2*x_step, ..., x_max],
                           'y_axis_range':[y_min, y_min+y_step, y_min+2*y_step, ..., y_max],
                           'x_value':{[value_1, value_2, ...value_n+1]},
                           'y_value':{[value_1, value_2, ...value_n]}
                           },
                    ...
    
  • 表格样式
    'table':{'name': {'top_left_cell':'cell text',
                      'row_labels':[name_1, name_2, ..., name_m],
                      'col_labels':[name_1, name_2, ..., name_n],
                      'cell_value':[[v11, v12, v13, ...,v1n], [], ...,[vm1, vm2, ...,vmn]]
                     },
            ...}
  • 图片样式
    图2 图片样式示例

    JSON结构体

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    "get_negative_samples_cls":[
      {
          "labels":[
            {
                "name":"类别名",
                "type":0,
                "property":{
    
                }
            }
          ],
          "predict_labels":[
              {
                  "name":"类别名",
                  "type":0,
                  "property":{
    
                  }
              }
          ],
          "score":"0.424",
          "data_info":"/data/leedsbutterfly/images/0090180.png"
      }
    ]
    
  • 多种样式拼凑成一个JSON
    可以将多个样式拼凑成一个完整的JSON体格式,如下示例是绘制一张折线图和表格的JSON体结构,需要填入关于该项的一些描述和标题信息。
    {
      'zh-cn':{
        'op_name_1': {
            'title': '中文标题',
            'description': '描述',
            'value':{'key':v1, 'key':v2, 'key':v3, ...},
            'table':{'name': {'top_left_cell':'cell text',
                          'row_labels':[name_1, name_2, ..., name_m],
                          'col_labels':[name_1, name_2, ..., name_n]
                          'cell_value':[[v11, v12, v13, ...,v1n], [], ...,[vm1, vm2, ...,vmn]]
                         },
                ...},
            'line_chart':{'name':{'x_axis_name':str,
                           'y_axis_name':str,
                           'x_axis_range':[x_min, x_min+x_step, x_min+2*step, ..., x_max],
                           'y_axis_range':[y_min, y_min+y_step, y_min+2*step, ..., y_max],
                           'curve':{'label_1':[(x0,y0),(x1,y1),...],
                                    'label_2':[(x0,y0),(x1,y1),...],
                                    ...}
                           },
                   ...}
          },
    }
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!非常感谢您的反馈,我们会继续努力做到更好!
反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问