# PaddleX指标及日志

PaddleX在模型训练、评估过程中，都会有相应的日志和指标反馈，本文档用于说明这些日志和指标的含义。

## 训练通用统计信息

PaddleX所有模型在训练过程中，输出的日志信息都包含了6个通用的统计信息，用于辅助用户进行模型训练，例如**分割模型**的训练日志，如下图所示。

![](images/seg_train.png)

各字段含义如下:

| 字段           | 字段值示例           | 含义                                                         |
| -------------- | -------------------- | ------------------------------------------------------------ |
| Epoch          | Epoch=4/20           | [迭代轮数]所有训练数据会被训练20轮，当前处于第4轮                  |
| Step           | Step=62/66            | [迭代步数]所有训练数据被训练一轮所需要的迭代步数为66，当前处于第62步  |
| loss           | loss=0.007226          | [损失函数值]参与当前迭代步数的训练样本的平均损失函数值loss，loss值越低，表明模型在训练集上拟合的效果越好(如上日志中第1行表示第4个epoch的第62个Batch的loss值为0.007226) |
| lr             | lr=0.008215          | [学习率]当前模型迭代过程中的学习率                           |
| time_each_step | time_each_step=0.41s | [每步迭代时间]训练过程计算得到的每步迭代平均用时             |
| eta            | eta=0:9:44          | [剩余时间]模型训练完成所需剩余时间预估为0小时9分钟44秒      |
|                |                      |                                                              |

不同模型的日志中除了上述通用字段外，还有其它字段，这些字段含义可见文档后面对各任务模型的描述。

## 评估通用统计信息

PaddleX所有模型在训练过程中会根据用户设定的`save_interval_epochs`参数，每间隔一定轮数进行评估和保存。例如**分类模型**的评估日志，如下图所示。

![](images/cls_eval.png)

上图中第1行表明验证数据集中样本数为240，需要迭代8步才能评估完所有验证数据；第5行用于表明第2轮的模型已经完成保存操作；第6行则表明当前保存的模型中，第2轮的模型在验证集上指标最优（分类任务看`acc1`，此时`acc1`值为0.258333），最优模型会保存在`best_model`目录中。

## 分类特有统计信息

### 训练日志字段

分类任务的训练日志除了通用统计信息外，还包括`acc1`和`acc5`两个特有字段。

> 注： acck准确率是针对一张图片进行计算的：把模型在各个类别上的预测得分按从高往低进行排序，取出前k个预测类别，若这k个预测类别包含了真值类，则认为该图片分类正确。

![](images/cls_train.png)


上图中第1行中的`acc1`表示参与当前迭代步数的训练样本的平均top1准确率，值越高代表模型越优；`acc5`表示参与当前迭代步数的训练样本的平均top5（若类别数n少于5，则为topn）准确率，值越高代表模型越优。第4行中的`loss`表示整个训练集的平均损失函数值，`acc1`表示整个训练集的平均top1准确率，`acc5`表示整个训练集的平均top5准确率。


### 评估日志字段

![](images/cls_eval.png)

上图中第3行中的`acc1`表示整个验证集的平均top1准确率，`acc5`表示整个验证集的平均top5准确率。


## 检测特有统计信息

### 训练日志字段

#### YOLOv3

YOLOv3的训练日志只包括训练通用统计信息（见上文训练通用统计信息）。

![](images/yolo_train.png)

上图中第5行`loss`表示整个训练集的平均损失函数loss值。

#### FasterRCNN

FasterRCNN的训练日志除了通用统计信息外，还包括`loss_cls`、`loss_bbox`、`loss_rpn_cls`和`loss_rpn_bbox`，这些字段的含义如下:

| 字段           | 含义                                          |
| -------------- | --------------------------------------------- |
| loss_cls          | RCNN子网络中分类损失函数值                  |
| loss_bbox          | RCNN子网络中检测框回归损失函数值  |
| loss_rpn_cls       | RPN子网络中分类损失函数值   |
| loss_rpn_bbox      | RPN子网络中检测框回归损失函数值  |
| loss              | 所有子网络损失函数值之和          |

![](images/faster_train.png)

上图中第1行`loss`, `loss_cls`、`loss_bbox`、`loss_rpn_clss`、`loss_rpn_bbox`都是参与当前迭代步数的训练样本的损失值，而第7行是针整个训练集的损失函数值。

#### MaskRCNN

MaskRCNN的训练日志除了通用统计信息外，还包括`loss_cls`、`loss_bbox`、`loss_mask`、`loss_rpn_cls`和`loss_rpn_bbox`，这些字段的含义如下:


| 字段           | 含义                                          |
| -------------- | --------------------------------------------- |
| loss_cls          | RCNN子网络中分类损失函数值                  |
| loss_bbox          | RCNN子网络中检测框回归损失函数值  |
| loss_mask          | RCNN子网络中Mask回归损失函数值  |
| loss_rpn_cls       | RPN子网络中分类损失函数值   |
| loss_rpn_bbox      | RPN子网络中检测框回归损失函数值  |
| loss              | 所有子网络损失函数值之和          |

![](images/mask_train.png)

上图中第1行`loss`, `loss_cls`、`loss_bbox`、`loss_mask`、`loss_rpn_clss`、`loss_rpn_bbox`都是参与当前迭代步数的训练样本的损失值，而第7行是针整个训练集的损失函数值。

### 评估日志字段

检测可以使用两种评估标准：VOC评估标准和COCO评估标准。

#### VOC评估标准

![](images/voc_eval.png)

> 注：`map`为平均准确率的平均值，即IoU(Intersection Over Union)取0.5时各个类别的准确率-召回率曲线下面积的平均值。

上图中第3行`bbox_map`表示检测任务中整个验证集的平均准确率平均值。

#### COCO评估标准

> 注：COCO评估指标可参见[COCO官网解释](http://cocodataset.org/#detection-eval)。PaddleX主要反馈`mmAP`，即AP at IoU=.50:.05:.95这项指标，为在各个IoU阈值下平均准确率平均值（mAP）的平均值。

COCO格式的数据集不仅可以用于训练目标检测模型，也可以用于训练实例分割模型。在目标检测中，PaddleX主要反馈针对检测框的`bbox_mmAP`指标；在实例分割中，还包括针对Mask的`seg_mmAP`指标。如下所示，第一张日志截图为目标检测的评估结果，第二张日志截图为实例分割的评估结果。

![](images/faster_eval.png)

上图中红框标注的`bbox_mmap`表示整个验证集的检测框平均准确率平均值。

![](images/mask_eval.png)
上图中红框标注的`bbox_mmap`和`seg_mmap`分别表示整个验证集的检测框平均准确率平均值、Mask平均准确率平均值。

## 分割特有统计信息

### 训练日志字段

语义分割的训练日志只包括训练通用统计信息（见上文训练通用统计信息）。

![](images/seg_train.png)

### 评估日志字段

语义分割的评估日志包括了`miou`、`category_iou`、`macc`、`category_acc`、`kappa`，这些字段的含义如下：

| 字段           | 含义                                          |
| -------------- | --------------------------------------------- |
| miou          | 各类IoU(Intersection Over Union)的平均值         |
| category_iou          | 各类别的IoU  |
| macc          | 平均准确率，即预测正确的像素数/总像素数  |
| category_acc       | 各类别的准确率，即各类别预测正确的像素数/预测为该类别的总像素数  |
| kappa      | kappa系数，用于一致性检验  |

![](images/seg_eval.png)
