目标检测器性能评估工具包
重磅干货,第一时间送达
来源:卡本特
目标检测和实例分割已经是计算机视觉中一个基础应用了,随着深度学习的发展,目标检测领域也是取得显著的进步。通常,衡量一个目标检测或者分割算法的精度那就是一个指标:mAP
mAP
首先计算Precision
和Recall
对于不同的IoU,IoU > {0,0.1,0.2...0.9,1.0}
,分别计算True/False Positive/Negtive
Precision = True Positive/(True Positive + False Positive)
Recall = True Positive/(True Positive + False Negtive)
对于不同IoU阈值的时候
True Positive = IoU大于阈值的时候检测出来的目标数量
mAP指标存在许多的缺点,其中很重要的一点就是它的复杂性。它被定义为不同目标PR曲线与坐标轴包围的面积的平均值,通过IoU阈值来判断是否分类成功。不同的IoU阈值得到的指标又是不同的,所以coco又提出一种新的方法,mAP0.5:0.95。这样通过分别计算不同阈值下的mAP,再做平均,看起来就更科学一些了。
目标检测中的mAP含义[1]
尽管这种计算方法可以反映出检测器的性能,但是当我们要去分析误检情况的时候,mAP就给不了任何参考信息了。mAP很简洁地概括了一个模型的性能,但是很难将误检的情况与mAP分开,误检可能是重复检测,错误分类,错误定位等,所以仅凭mAP是很难诊断检测器性能的
知乎上讨论mAP是否科学的一个问题[2]
另外,mAP只能说通过一个通用的指标来衡量检测器性能好坏,但是在不同的应用领域,其好坏不能一概而论。例如,目标检测在医学领域中的应用,医生更倾向于检测结果分类的准确性,bbox稍微偏一些没关系;在机器人或自动驾驶领域,更加倾向于bbox位置要准,以便于位置信号处理,例如机器手的抓取。
TIDE
TIDE[3],这篇文章中总结了,一个完整的目标检测性能评估工具包应该包括以下几个方面
•精简总结错误类型,以便一眼就能进行比较•每一种错误类型应该被完全隔离,不具有耦合性•不依赖于数据集格式,可以跨数据集比较•可以根据需要进行更精细的分析,从而隔离错误原因分析
TIDE其实就是一个工具包,目前已经开源,github链接[4]
此工具包将误检情况分为了几个类别,Classification Error,Localization Error,Both Cls and Loc Error,Duplicate Detection Error,Background Error,Missed GT Error
针对不同的算法,可以输出详细的对比数据图标
安装
pip install tidecv
使用
from tidecv import TIDE, datasets
tide = TIDE()
tide.evaluate(datasets.COCO(), datasets.COCOResult('path/to/your/results/file'), mode=TIDE.BOX)
tide.summarize()
tide.plot()
运行之后,就会在终端打印出信息和绘制出图表
TIDE目前支持的数据集格式有COCO,LVIS,PascalVOC,Cityscapes
后面会提供处理自定义数据集格式的api
References
[1]
目标检测中的mAP含义: https://www.zhihu.com/question/53405779/answer/419532990
[2]
知乎上讨论mAP是否科学的一个问题: https://www.zhihu.com/question/337856533/answer/805122425
[3]
TIDE: https://dbolya.github.io/tide/paper.pdf
[4]
github链接: https://github.com/dbolya/tide
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- spring之添加后置处理器的bean的生命周期
- django-模板之URL标签(五)
- 【猫狗数据集】读取数据集的第二种方式
- django-模板之comment标签(六)
- 【猫狗数据集】对一张张图像进行预测(而不是测试集)
- 【猫狗数据集】pytorch训练猫狗数据集之创建数据集
- 【猫狗数据集】可视化resnet18的输出
- springmvc实例之修改雇员相关信息(四)
- 基于TypeScript封装Axios笔记(六)
- 蓝桥杯 k好数 java版
- 强烈推介的几个微信小程序开发小技巧,简单又实用
- 【pytorch-ssd目标检测】验证自己创建的数据集
- django-模板之自动转义autoescape(八)
- 【pytorch-ssd目标检测】测试自己创建的数据集
- 【pytorch-ssd目标检测】训练自己创建的数据集