模型评估接口
自定义推理代码可以让代码自行计算推理结果,并按ModelArts定义的规则调用analyse评估接口。
接口说明(通用接口)
ModelArts提供了“analyse”接口,可以将推理结果以规定格式保存。该接口用于按指定格式保存推理结果,用户需要在自己的推理结束后,按下述规则自行调用。
analyse(task_type='', pred_list=[], label_list=[], name_list=[], custom_metric='', label_map_dict='' )
参数 |
是否必选 |
说明 |
---|---|---|
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),...], ...} }, ...} }, }
