帮助文档
搜索文档…
自定义Metrics
Sextant支持用户自定义Metrics计算方式,并输出计算结果。您只需要将自定义Metrics算法上传至Github Repo并把Url填入Sextant即可。
需要将您的Metrics算法使用python进行编写,并放到Github中

支持类型

Sextant支持自定义Float和Curve两种类型的指标,并指定他们的生效范围

Float

输出结果为一个浮点值,在前端显示为“名称=数值“的样式,如mAP=0.75

Curve

输出结果为两个一维数组,分别命名为x和y,在前端渲染为曲线样式,x数组和y数组中的值会对应的渲染为曲线上点的横纵坐标

生效范围

可以定义指标的生效范围为Data级别或者Dataset级别
Data级别:针对参与评估的每个数据会返回一个对应值,例如单张数据的标注IoU均值
Dataset级别:每一次评估只会返回一个对应值,例如本次评估的mAP

定义规则

您的Metrics算法需要满足以下规则:
  1. 1.
    ‌如果您的代码中需要额外的依赖包,则需要在根目录下创建requirements.txt,并在其中写入依赖(不支持torch、tensorflow等深度学习框架的GPU运算)。
  2. 2.
    您需要在github根路径下创建一个__init__.py,以确保repo被clone到本地后,其路径能够作为python package导出一个名为 Evaluator 的 class。
  3. 3.
    python库中有且只有一个名为 Evaluator 的 class
  4. 4.
    Evaluator 中需要有获取单个图片标注的评分方法 evaluate_one_data(input_source: dict, input_target: dict) -> dict 方法,input_source 和 input_target 值请参考graviti标准化文档
  5. 5.
    Evaluator 中需要有获取整体标注评分的方法 get_result() -> dict
  6. 6.
    以上两个方法的返回值需满足以下结构:(当前仅支持float和curve两种类型的数据)

代码示例

目录结构示例

1
(yourgithubrepo_root)
2
-- __init.py
3
-- Evaluator.py
4
-- requirements.txt
Copied!

init.py示例

1
from .Evaluator import Evaluator
2
all = ["Evaluator"]
Copied!

requirements.txt示例:

1
numpy=1.21.0
Copied!

Evaluator.py示例

1
import numpy as np
2
3
class Evaluator:
4
def __init__(self):
5
"""
6
You can initialize your model here
7
"""
8
...
9
10
11
evaluate_one_data(self, input_source: dict, input_target: dict) -> dict:
12
"""
13
Do the evaluation job
14
:param input_source: Ground truth boxes in one image
15
:param input_target:Target boxes in the same image
16
:return: A dict containing evaluation on one image and each category within it.
17
"""
18
...
19
def get_result(self) -> dict:
20
"""Overall evaluation.
21
22
23
Returns:
24
A dict containing overall evaluation on all images and all categories.
25
"""
26
```
27
{
28
'scope':1,//1-data级别;2-dataset级别
29
'overall': {
30
'mAP':0.123, // Float类型返回
31
'pr':{ // Curve类型返回
32
'x':[1,0.5],
33
'y':[1,0.5]//x数据将在前端渲染为横轴数据,y数据将在前端渲染为纵轴数据,x和y均为list,且长度一致。
34
}
35
},
36
'categories': {
37
'{your_category}': {
38
'mAP': np.mean([1, 2, 3]).tolist(),
39
}
40
}
41
}
42
Copied!