<img src="https://xinzhuobu.com/wp-content/uploads/2022/12/20221211006.jpg">
> 常见的评价指标有交并比(iou及改进),准确率,精度,召回率,FPR,F1-Score,PR曲线-AP值,ROC曲线-AUC值,mAP值和FPS
# ✨ 1 交并比
假设有两个矩形,分别为A和B:
<img src="https://ucc.alicdn.com/images/user-upload-01/f5eb68b1aff94ea9b60711bde2fb92a3.png#pic_center">
则交并比==公式:==
<img src="https://ucc.alicdn.com/images/user-upload-01/884d4ff48e9a4e9994deb771ee53a71c.png">
即A交B比A并B。
==代码实现:==
**主函数**
```python
eps = torch.finfo(torch.float32).eps
bboxes1_area = (bboxes1[..., 2] - bboxes1[..., 0]).clamp_(min=0) * (bboxes1[..., 3] - bboxes1[..., 1]).clamp_(min=0)
bboxes2_area = (bboxes2[..., 2] - bboxes2[..., 0]).clamp_(min=0) * (bboxes2[..., 3] - bboxes2[..., 1]).clamp_(min=0)
w_intersect = (torch.min(bboxes1[..., 2], bboxes2[..., 2]) - torch.max(bboxes1[..., 0], bboxes2[..., 0])).clamp_(min=0)
h_intersect = (torch.min(bboxes1[..., 3], bboxes2[..., 3]) - torch.max(bboxes1[..., 1], bboxes2[..., 1])).clamp_(min=0)
area_intersect = w_intersect * h_intersect
area_union = bboxes2_area + bboxes1_area - area_intersect
ious = area_intersect / area_union.clamp(min=eps)
```
<img src="https://ucc.alicdn.com/images/user-upload-01/655d2b75586b49ef9db46a2a1ff34084.png">
1. bboxes1_area和bboxes2_area即bboxes1和bboxes2即面积。
2. w_intersect和h_intersect是bboxes1和bboxes2相交部分的宽和高,比如(torch.min(bboxes1[..., 2], bboxes2[...,2])即在x1_max和x2_max中找到较小的,即相交部分的右下角x轴坐标,其余同理。
3. area_intersect即计算相交面积。
4. area_union计算A并B的面积。 clamp函数规定下限。
## 👻 1.2 giou
[原论文地址](https://arxiv.org/abs/1902.09630)
<img src="https://ucc.alicdn.com/images/user-upload-01/ba00a7f86ae94973858333e13f30e2aa.png">
# ✨ 2 precision(精度)和recall(召回率)
在论文里面经常会遇到precision(精度)和recall(召回率),下面进行介绍。
首先,我们要了解一下混淆矩阵,其中包含四个元素:
- TP(True Positive):真正例,即实际为正样本且被预测为正样本的数量。
- FN(FalseNegative):假反例,即实际为正样本但被预测为负样本的数量。
- TN(TrueNegative):真反例,即实际为负样本且被预测为负样本的数量。
- FP(FalsePositive):假正例,即实际为负样本但被预测为正样本的数量。
<img src="https://ucc.alicdn.com/images/user-upload-01/c1c7ac9a22a143978e2b573d6e110a89.png">
利用该混淆矩阵,可以==计算precision和recall==。
****
==precision表示模型预测为正类的样本中,实际上真正属于正类的比例,公式为:==
<img src="https://ucc.alicdn.com/images/user-upload-01/69b8fd6dc6e64eef8db7221c5370c30b.png">
**精确率越高**:说明模型在预测正类样本时的准确性越高,即预测为正类的样本中,真正属于正类的比例越大。这意味着模型在区分正类和负类方面表现得更好,误报率较低。但精确率忽略了实际为正类的样本中,被模型漏报(即预测为负类)的情况。
****
==recall表示实际为正类的样本中,被模型正确预测为正类的比例,公式为:==
<img src="https://ucc.alicdn.com/images/user-upload-01/4197885c61024ccf91fef31b1cd2c164.png">
**召回率越高**:说明模型在识别正类样本方面的效果越好,即实际为正类的样本中,被正确预测为正类的比例越大。这意味着模型在捕捉正类样本方面表现得更好,漏报率较低。但召回率忽略了模型预测为正类的样本中,实际上属于负类(即误报)的情况。
****
==精确度和召回率之间的关系:==
当精确度升高,即模型更加严格地预测正类时,可能将更多的正样本预测为负样本,那么实际为正样本中预测正确的就变少了,则召回率降低。
反之同理。
(这也体现了,两个各自忽略的即对方关注的)
# ✨ 3 AP和mAP
![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/25a66843a8d542eb93b80b68ab700ff3.png)
从第二节我们知道了精准度和召回率之间的关系,如上图PR曲线所示。
两个部分都有关注与忽略的地方,那么如何将两者结合平衡呢?
==PR曲线下方的面积即是一种方案,称为**AP值**==。
==**mAP**就是对所有类AP值取平均值。==
## 👻 3.1 具体计算
1. 剔除类别置信度低的预测框(每个包含目标预测框都有一个包含目标类别的分数预测),一般为0.5。
2. 计算预测框与GT的IOU。IOU>0.5设置为TP,IOU<=0.5设置为FP,没有检测到的GT的数量设置为FN
3. 计算recall和precision
4. 计算PR曲线面积,下面是一个计算示例(某点函数值代替某段函数值)
![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/ccc7320db72046beb86be899beda26da.png)