分类和目标检测的性能评价指标【转载】
文章目录
- 1. mAP (mean Avearage Precision)
- 2. FLOPs (浮点运算数)
- 3. 模型参数大小
对于深度学习的网络模型,希望其 速度快, 内存小, 精度高。因此需要量化指标来评价这些性能,常用的指标有: mAP(平均准确度均值,精度指标), FPS(每秒处理的图片数量或每张图片处理需要时间,同样硬件条件下的速度指标) , 模型参数大小(内存大小指标)。
1. mAP (mean Avearage Precision)
mAP指的是各类别的AP平均值,而AP指PR曲线的面积(precision和Recall关系曲线),因此得先了解下precision(精确率)和recall(召回率),以及相关的accuracy(准确度), F-measurement(F值), ROC曲线等。
recall和precision是二分类问题中常用的评价指标,通常以关注的类为正类,其他类为负类,分类器的结果在测试数据上有4种情况:
Precision和Recall计算举例:
假设我们在数据集上训练了一个识别猫咪的模型,测试集包含100个样本,其中猫咪60张,另外40张为小狗。测试结果显示为猫咪的一共有52张图片,其中确实为猫咪的共50张,也就是有10张猫咪没有被模型检测出来,而且在检测结果中有2张为误检。因为猫咪更可爱,我们更关注猫咪的检测情况,所以这里将猫咪认为是正类:所以TP=50,TN=38,FN=10,FP=2,P=50/52,R=50/60,acc=(50+38)/(50+38+10+2)
为什么引入Precision和Recall:
recall和precision是模型性能两个不同维度的度量:在图像分类任务中,虽然很多时候考察的是accuracy,比如ImageNet的评价标准。但具体到单个类别,如果recall比较高,但precision较低,比如大部分的汽车都被识别出来了,但把很多卡车也误识别为了汽车,这时候对应一个原因。如果recall较低,precision较高,比如检测出的飞机结果很准确,但是有很多的飞机没有被识别出来,这时候又有一个原因.
recall度量的是「查全率」,所有的正样本是不是都被检测出来了。比如在肿瘤预测场景中,要求模型有更高的recall,不能放过每一个肿瘤。
precision度量的是「查准率」,在所有检测出的正样本中是不是实际都为正样本。比如在垃圾邮件判断等场景中,要求有更高的precision,确保放到回收站的都是垃圾邮件。
F-score/F-measurement:
上面分析发现,精确率和召回率反映了分类器性能的两个方面,单一依靠某个指标并不能较为全面地评价一个分类器的性能。一般情况下,精确率越高,召回率越低;反之,召回率越高,精确率越低。为了平衡精确率和召回率的影响,较为全面地评价一个分类器,引入了F-score这个综合指标。
F-score是精确率和召回率的调和均值,计算公式如下:
其中, β(β>0)\beta(\beta >0)β(β>0)的取值反映了精确率和召回率在性能评估中的相对重要性具体,通常情况下,取值为1。描述如下:
(1)当 β=1\beta=1β=1时,就是常用的 F1F_1F1值,表明精确率和召回率一样重要,计算公式如下:
(2)当β=2\beta=2β=2时, F2F_2F2表明召回率的权重比精确率高;
(3)当 β=0.5\beta=0.5β=0.5时,F0.5F_{0.5}F0.5表明精确率的权重比召回率高。
Accuracy: 也是对模型预测准确的整体评估, 通常用到的准确率计算公式如下:
AP/PR曲线:
即recall为横坐标,precision为纵坐标,绘制不同recall下的precison值,可以得到一条Precisoin和recall的曲线,AP就是这个P-R曲线下的面积,定义:
举例子比较好理解,分类问题:
假设有100张图片,要分成猫,狗,鸡三类,100张图片对应100个真实值,模型分类后我们会得到对应的100个预测值。这里我们可以只取前10个预测值出来,计算10个值中猫预测出几张,预测对几张,从而能计算出猫的precison和recall;接着我们可以取前20个预测值同样能计算出一组猫的precison和recall;这样一直增加到取100个预测值,就能得到猫的10组(recall, precision)值来绘制曲线。这里要注意的是:随着选取预测值增加,recall肯定是增加或不变的(选取的预测值越多,预测出来的猫越多,即查全率肯定是在增加或不变),若增加选取预测值后,recall不变,一个recall会对应两个precison值,一般选取较大的那个precision值。 如果我们每次只增加一个预测值,就会得到大约100对(recall, precisoin)值,然后就能绘制猫的PR曲线,计算出其下方的面积,就是猫对应的AP值(Average Precision)。 如果我们接着对狗和鸡也采用相同方法绘制出PR曲线, 就能得到猫,狗, 鸡三个AP值,取平均值即得到了整个模型最终的mAP(mean Average Precsion)。如下图中A, B, C三条PR曲线:
注意: 现实中的P-R曲线是非单调、不平滑的,在很多局部有上下波动。
- 如果一个学习器的P-R曲线被另一个学习器的曲线完全包住,则可以断言后者性能优于前者,如B优于C。
- 如果两个学习器的曲线相较,可以通过平衡点的来度量性能,它是“查准率=查全率”时的取值。如A优于B。
目标检测:
在目标检测中还有一个IoU(交并比、Intersection over Union、IoU), 通过比较检测bbox和真实bbox的IoU来判断是否属于TP(True Positive),例如设置IoU阈值为0.7,则IoU大于0.7的则判定为TP,否则为FP。因此当我们设置不同的IoU阈值时,也会得到不同的mAP值,再将这些mAP值进行平均就会得到mmAP,一般不做特别说明mmAP即指通常意义上的mAP。
因此目标检测mAP计算方法如下:给定一组IOU阈值,在每个IOU阈值下面,求所有类别的AP,并将其平均起来,作为这个IOU阈值下的检测性能,称为mAP(比如mAP@0.5就表示IOU阈值为0.5时的mAP);最后,将所有IOU阈值下的mAP进行平均,就得到了最终的性能评价指标:mmAP。
ROC曲线与AUC:
除了绘制PR曲线,计算AP,有时候也会绘制ROC曲线,计算AUC。(参考文章)
ROC(receiveroperating characteristic):接受者操作特征,指的是TPR和FPR间的关系,纵坐标为TPR, 横坐标为FPR, 计算公式如下:
AUC(area under curve):表示ROC曲线下的面积。
- (0,1): FN = 0, FP = 0, 表示所有样本都正确分类,这是一个完美的分类器;
- (1,0): TN = 0, TP = 0, 表示所有样本都分类错误,这是一个最糟糕的分类器;
- (0,0): FP = 0, TP = 0, 表示所有样本都分类为负;
- (1,1): TN = 0, FN = 0, 表示所有样本都分类为正;
注意:
- ROC曲线越靠近左上角,该分类器的性能越好。
- 对角线表示一个随机猜测分类器。
- 若一个学习器的ROC曲线被另一个学习器的曲线完全包住,则可判断后者性能优于前者。
- 若两个学习器的ROC曲线相交,则可以判断ROC曲线下的面积,即AUC。
ROC 曲线绘制
现实人物中通常是利用有限个测试样例来绘制ROC图,此时仅能获得有限个(真正例率,假正例率)坐标对,无法产生图2.4(a)中的光滑ROC曲线,只能绘制出如图2.4(b)所示的近似ROC曲线。绘图过程很简单:给定m+m^+m+个正例和m−m^-m−个反例,根据学习器预测结果对样例进行排序,然后把分类阈值设为最大,即把所有样例均预测为反例,此时真正例率和假正例率均为000,在坐标(0,0)(0,0)(0,0)处标记一个点。然后,将分类阈值依次设置为每个样例的预测值,即依次将每个样例划分为正例。设前一个标记点坐标为(x,y)(x,y)(x,y),当前若为真正例
,则对应标记点的坐标为(x,y+1/m+)(x,y+1/m^+)(x,y+1/m+);当前若为假正例
,则对应标记点的坐标为(x+1/m−,y)(x+1/m^-,y)(x+1/m−,y),然后用线段连接相邻点即得。
ROC 与 PR的比较
当正负样本不平衡时,PR曲线会出现较大变化,ROC曲线则能保持不变。所以此时PRC比ROC更有效地反应分类器的好坏。
其中,(a)(c)
为ROC
,(b)(d)
为PR
,(a)(b)
样本比例1:1
,(c)(d)
为1:10
参考自网址:
- 爱上层楼_目标检测评价标准mAP
- zzzz1_浅析经典目标检测评价指标–mmAP(一)
- fivetrees _目标检测的性能评价指标
- Matthew_目标检测的性能评价指标
- 月牙眼的楼下小黑_分类问题中的评价指标
2. FLOPs (浮点运算数)
FLOPs:(Floating Point Operations) s小写,指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。(模型) 在论文中常用GFLOPs(1 GFLOPs = 10^9 FLOPs)
FLOPS: (Floating Point operations per second), S大写, 指每秒浮点运算的次数,可以理解为运算的速度,是衡量硬件性能的一个指标。
一般计算FLOPs来衡量模型的复杂度,FLOPs越小时,表示模型所需计算量越小,运行起来时速度更快。对于卷积和全连接运算,其公式如下:
另外,MAC(memory access cost, 内存访问成本)也会被用来衡量模型的运行速度, 一般MAC=2*FLOPs (一次加法运算和一次乘法算法):
有一个基于pytorch的torchstat包,可以计算模型的FLOPs数,参数大小等指标,示例代码如下:
from torchstat import stat
import torchvision.models as modelsmodel = model.alexnet()
stat(model, (3, 224, 224))
3. 模型参数大小
常用模型的参数所占大小来衡量模型所需内存大小,一般可分为Vgg, GoogleNet, Resnet等参数量大的模型,和squeezeNet,mobilerNet,shuffleNet等参数量小的轻量级模型,常用一些模型的参数量和FLOPs如下:
最后还有一张模型运算量(FLOPs), 参数大小(圆圈的面积),表现效果(Accuracy)的关系图如下:
参考自网址:
- CNN 模型所需的计算力(flops)和参数(parameters)数量是怎么计算的?
- R.JD_轻量级神经网络“巡礼”(一)—— ShuffleNetV2
以上内容来自:
- 返回主页 silence_cho_分类和目标检测的性能评价指标
分类和目标检测的性能评价指标【转载】相关推荐
- 【深度学习】目标检测的性能评价指标,mAP_0.5,mAP_0.5,0.95,0.05
指标 指标有检测精度和检测速度之分: mAP mAP是一个容易混淆的概念.计算mAP之前先考虑我们有的数值:图片原label的bbox.模型预测的bbox.模型预测的bbox的置信度.模型预测的bbo ...
- 综合评价模型的缺点_【必备】目标检测中的评价指标有哪些?
在人工智能领域,机器学习的效果需要用各种指标来评价.当一个目标检测模型建立好了之后,即模型训练已经完成,我们就可以利用这个模型进行分类识别.那么该如何去评价这个模型的性能呢? 上期我们一起学习了全卷积 ...
- 目标检测算法的评价指标
目标检测算法的评价指标 0 不同比赛中的指标 1 基础概念 1.1 Intersection over Union (IoU) 1.2 Predictions: TP - FP - FN - TN 1 ...
- 目标检测模型的评价指标(Acc, Precision, Recall, AP, mAP, RoI)
目标检测模型的评价指标(Acc, Precision, Recall, AP, mAP, RoI) 对于一个目标检测模型的好坏,总的来说可以从以下三个方面来评估: 分类的精度如何.一般可以用准确度(A ...
- 提升目标检测模型性能的tricks
提升目标检测模型性能的tricks bag of freebies pixel-wise调整 几何畸变 光照变化 遮挡 Random Erase CutOut Hide-and-Seek Grid M ...
- 基于PyTorch的遥感影像、无人机影像的地物分类、目标检测、语义分割和点云分类
我国高分辨率对地观测系统重大专项已全面启动,高空间.高光谱.高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成,将成为保障国家安全的基础性和战略性资源.随着小卫星星座的普及,对地观 ...
- 从CNN到Transformer:基于PyTorch的遥感影像、无人机影像的地物分类、目标检测、语义分割和点云分类
更多资讯,请关注:Ai尚研修科研技术动态 公众号 我国高分辨率对地观测系统重大专项已全面启动,高空间.高光谱.高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成,将成为保障国家安全 ...
- 信号检测与估计理论 pdf_目标检测的性能上界讨论
加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动! 同时提供每月大咖直播分享.真实项目需求对接.干货资讯汇总 ...
- 深度学习目标检测模型测试评价指标的选取及介绍
文章目录 测试指标的选取 一. 精度评价指标 1. MAP(平均准确度均值) 1.1 mAP定义及相关概念 1.2 mAP的具体计算 2. 准确率 (Accuracy) 3. 混淆矩阵 (Confus ...
最新文章
- 汉诺塔怎么加计数次数c语言,C语言计算汉诺塔最小移动步数 (二)
- matlab fminimax 多变量,Matlab应用实例(8)—fminimax
- php mysql 简单聊天室_聊天室phpmysql(一)
- tensorflow,显卡驱动,CUDA傻傻分不清
- mac系统更新后code .命令打不开vs code
- lambda创建线程
- 全球孩子迷恋手机/iPad,其实罪魁祸首是父母!
- int true python_python基本数据类型,int, str, bool及相关操作
- DWR2学习笔记(一)
- 支付验签失败_微信支付提示支付验证签名失败
- node中字节流接收问题【转】
- 分享 野人老师-高级信息系统项目管理师-全部的课程资料
- pb语言是什么计算机语言,Pb编程语言深入讲解,了解pb语言的if判断语句!
- eJOI2019 简要题解
- QlikView学习笔记
- 提升性能的开发者选项,华为手机必开4种设置,让手机飞起来
- 如何保障微服务架构下的数据一致性
- Python使用Scrapy爬虫框架全站爬取图片并保存本地(@妹子图@)
- Q1月活大涨70%,后浪会成B站的流量萌新吗?
- 智能垃圾桶(十一)——oled的显示(树莓派pico实现)
热门文章
- Serverless 实战 —— 前端也可以快速开发一个 Puppeteer 网页截图服务
- 图片服务 - thumbor入门
- 这部日本「神作」彻底拉低了我入门AI的门槛
- CCNA初认识——链路捆绑命令
- openlayers4 入门开发系列之地图工具栏篇(附源码下载)
- Spring 处理请求和响应相关的注解
- vue 实现 router store 文件自动加载
- 【Python】Python库之图形用户界面
- C#LeetCode刷题之#590-N叉树的后序遍历(N-ary Tree Postorder Traversal)
- C#LeetCode刷题之#766-托普利茨矩阵(Toeplitz Matrix)