试一试

简介: 试一试

<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)



相关文章
|
2天前
|
算法 程序员 C#
程序员也可以很浪漫!这样的一款表白代码收藏馆项目,即使小白也可以使用,发给你的对象试试!
程序员也可以很浪漫!这样的一款表白代码收藏馆项目,即使小白也可以使用,发给你的对象试试!
|
9月前
|
数据采集 XML 人工智能
3分钟安装Dropzone 4 小白一看就会
Dropzone 是一款Mac上的文件拖拽操作增强工具,这款软件可以让我们把大部分工作都通过拖拽来完成,比如保存文本、发送邮件、FTP上传、打开应用等等,只需要将文件拖拽到菜单栏上的窗口中即可,并且我们完全可以定制化这些操作,可以在官网上下载定制好的各种动作。
3分钟安装Dropzone 4 小白一看就会
|
编解码 iOS开发 异构计算
3分钟安装fcpx10.6.5最新 小白一看就会
Final Cut Pro 是Mac OS平台上最好的视频剪辑软件,Final Cut Pro为原生64位软件,基于Cocoa编写,支持多路多核心处理器,支持GPU加速,支持后台渲染,可编辑从标清到4K的各种分辨率视频,ColorSync管理的色彩流水线则可保证全片色彩的一致性。 经过完整而彻底的重新设计后,Final Cut Pro 为后期制作工作流程的方方面面增添了无与伦比的速度、质量和灵活性。
3分钟安装fcpx10.6.5最新 小白一看就会
|
Python
Python小游戏,练手一定得试试,看似简单练习确实很实用
五包辣条! 于 2022-05-13 17:17:05 发布 1502 收藏 44 分类专栏: 宝藏推荐 Python小游戏 程序人生 文章标签: python 程序人生 经验分享 后端 游戏 版权 宝藏推荐 同时被 3 个专栏收录 58 篇文章162 订阅 订阅专栏 Python小游戏 8 篇文章5 订阅 订阅专栏 程序人生 29 篇文章34 订阅 订阅专栏 前言 大家好,我是辣条 记得很久之前有发布过这么一篇: 30个Python小游戏,上班摸鱼我能玩一天【内附源码】不能说是爆火,只能说是口口相传了。不过终究还是有不少刚开始接触Python的人还是一脸蒙圈,于是乎我就只能
230 0
|
JavaScript 前端开发
面试官:听说过LazyMan吗,手写一个试试
我们都知道,JavaScript是单线程、基于异步的编程语言,执行代码时是非阻塞的。如果执行的是同步的代码,则按照顺序执行完毕;如果是异步的代码,则按照异步调用执行,并不会阻塞在某一个异步函数中。最近遇到了这样一个面试题……
259 0
面试官:听说过LazyMan吗,手写一个试试
++(a++)为什么不对呢?我来告诉你!
今天在牛客网刷题时遇到了一道题目,刚开始我不知道为什么错了,后来查找了资料就理解了。
++(a++)为什么不对呢?我来告诉你!
试试
看看用用
715 0
|
程序员 Android开发
千万别看这篇文章,因为我感觉好久没有分享这样的干货了
了解我的读者,经常看我文章的读者,可能都知道,我已经好久没有分享过 Android 相关的干货了,说实话,作为一个以分享 Android 技术起家的公众号来讲,不分享 Android 确实有点过分了。
2026 0
【小白教程】趣味表白效果
这次我们玩点有意思的,先看看效果→趣味表白效果 最好是在PC端预览哦,下面出简单的小白教程。(注意:此教程仅适合前端小白,高手请绕过) 1.
1817 0

相关实验场景

更多