评价标准

二分类的精准率和召回率

人脸检测是目标检测的一个特例,因为目标类别只有一类,剩下的都是背景,所以人脸检测评价标准中会用到些二分类问题的评价,在这里先提一下。
二分类问题最常用的就是精准率和召回率:

  • 精准率代表着预测为正的样本中有多少是正确的;
  • 召回率代表着总的正样本中有多少正样本被成功预测出来。

假设实际测试集中有100个正样本和100负样本,100个正样本有90个预测为正,10个预测为负;100个负样本中有80个预测为负,20个预测为正,那么TPTPTP,TNTNTN, FPFPFP , FNFNFN分别是:

  • TPTPTP代表着本次预测为True,预测为Positive,预测为正,并且预测是正确的,把正的预测为正就是正确的,于是TP=90TP=90TP=90;
  • TNTNTN代表着本次预测为True,预测为Negtive,预测为负,并且预测是正确的,把负的预测为负就是正确的,于是TN=80TN=80TN=80;
  • FPFPFP代表着本次预测为Flase,预测为Positive,预测为正,但是预测是错误的,把负的预测为正就是错误的,于是FP=20FP=20FP=20;
  • FNFNFN代表着本次预测为Flase,预测为Negtive,预测为负,但是预测是错误的,把正的预测为负就是错误的,于是FN=10FN=10FN=10;

有了上面四个值之后,就可以计算精准率PrecisionPrecisionPrecision和召回率RecallRecallRecall了:
Precision=TPTP+FP=9090+20=0.82Precision=\frac{TP}{TP+FP}=\frac{90}{90+20}=0.82Precision=TP+FPTP​=90+2090​=0.82
Recall=TPTP+FN=9090+10=0.9Recall=\frac{TP}{TP+FN}=\frac{90}{90+10}=0.9Recall=TP+FNTP​=90+1090​=0.9

剩下还有一些指标,比如准确率AccAccAcc,这个评价最符合一般认知,就是别管是正的负的,只要是对的就行:
Acc=TP+TNTP+TN+FP+FN=90+8090+80+20+10=0.85Acc=\frac{TP+TN}{TP+TN+FP+FN}=\frac{90+80}{90+80+20+10}=0.85Acc=TP+TN+FP+FNTP+TN​=90+80+20+1090+80​=0.85
F1F1F1是精准率和召回率的综合,是综合评价标准下的一个特例:
Acc=2×Precision×RecallPrecision+Recall=2×0.82×0.90.9+0.82=0.858Acc=\frac{2\times Precision \times Recall}{Precision +Recall}=\frac{2\times0.82\times0.9}{0.9+0.82}=0.858Acc=Precision+Recall2×Precision×Recall​=0.9+0.822×0.82×0.9​=0.858

人脸检测中的精准率和召回率

刚刚提到了人脸检测里只有人脸和背景两类,那么如果用精准率,召回率去评价人脸检测应该怎么做?
首先检测问题是有Bbox框,要把检测问题当做分类来处理,就要定义出什么样的检测结果是正确的,一般情况下,当检测框的和Ground Truth的IOU大于0.5时,认为这张人脸被正确的检测到,有了这个前提,就可以按照二分类那样统计了。

假设实际测试集中有100张脸,检测算法一共生成了95个Bbox,95个Bbox里有90是正确的,剩下的5个是错误的检测。那么TPTPTP,TNTNTN, FPFPFP , FNFNFN分别是:

  • 所有判定为人脸的结果有90个正确,TP=90TP=90TP=90;
  • 对于人脸检测任务,背景类不输出结果,TN=0TN=0TN=0;
  • 所有判定为人脸的结果有5个错误,预测为人脸但实际是非人脸,FP=5FP=5FP=5;
  • 所有人脸中有10个被漏检,实际是人脸,但是没有预测出来,于是FN=10FN=10FN=10;

精准率PrecisionPrecisionPrecision和召回率RecallRecallRecall可以计算:
Precision=TPTP+FP=9090+5=0.9474Precision=\frac{TP}{TP+FP}=\frac{90}{90+5}=0.9474Precision=TP+FPTP​=90+590​=0.9474
Recall=TPTP+FN=9090+10=0.9Recall=\frac{TP}{TP+FN}=\frac{90}{90+10}=0.9Recall=TP+FNTP​=90+1090​=0.9

召回率在人脸检测里也被称为人脸的检测率,就是检测出来的人脸占总人脸的比例;
精准率就是检测为人脸的框中实际有多少是真正的人脸;
精准率的对立就是误检率,也就是检测为人脸的框中实际有多少是非人脸;精准率+误检率=1;

对于一个固定的数据集,我们可以把每张图都测一遍,然后统计模型的检测率,精准率,误检率,当然还可以算下准确率和F1,然后比较各个模型的性能,但是这样的话,就可能会出现模型1检测率高,精准率低,对应的误检率就高。而模型2检测率低,精准率高,对应的误检率就低。这种情况就会不好比,所以就有了另外一种评价,固定一个指标,去比较另一个。

ROC曲线

此外,还可以统计模型的ROC曲线,对于每一个检测出的人脸,检测器都会给出这个检测结果的得分(置信度),那么如果人为地引入一个阈值来对检测结果进行筛选(只保留得分大于阈值得检测结果),那么随着这个阈值的变化,最终得检测结果也会不同,因而其对应得检测率和误检数目也会不同。
通过遍历阈值,我们就能够得到多组检测率和误检数目的值,由此我们可以在平面直角坐标系中画出一条曲线来:
以x坐标表示误检数目,以y坐标表示检测率,这样画出来的曲线称之为ROC曲线。ROC曲线上每一个点都是一个统计结果,对应同一模型的不同阈值,下方对应的面积越大,模型的性能越好。ROC曲线提供了一种非常直观的比较不同人脸检测器的方式,得到了广泛的使用。

固定误检测召回率

在有了ROC曲线的前提下,就可以计算出**张误检下的召回率。
比如一个模型的精准率很高,输出出来的框几乎都是正确的,这个模型遍历完测试集,都没有达到100个误检,那么它的召回率也不一定很高,因为它可能漏检多;
还有一种情况是,模型有很高的召回率,实际的人脸都能被检测出来,但是输出出来的框有很多错误,还没有遍历完数据集就已经达到100个误检了,那么它原本很高的召回率在“100张误检下召回率”这个评价标准中也体现不出来。
所以,固定误检测召回率的方式能够测出模型的综合性能。

常用数据集

FDDB

FDDB总共2845张图像,共包含5171张人脸,人脸非约束环境,人脸的难度较大,有面部表情,双下巴,光照变化,穿戴,夸张发型,遮挡等难点,是目标最常用的数据库。有以下特点:
图像分辨率较小,所有图像的较长边缩放到450,也就是说所有图像都小于450450,最小标注人脸2020,包括彩色和灰度两类图像。每张图像的人脸数量偏少,平均1.8人脸/图,绝大多数图像都只有一人脸;
比如最新开源的SeetaFace2,在FDDB上,100张误检检测率达到92%。

WIDER FACE

WIDER FACE是当前人脸检测任务最主流的数据集,总共32203图像,393703标注人脸,人脸包含各种尺度,姿态,遮挡,表情,化妆,光照等。图像分辨率普遍偏高,所有图像的宽都缩放到1024,最小标注人脸10*10,都是彩色图像; 每张图像的人脸数据偏多,平均12.2人脸/图,密集小人脸非常多;
分训练集train/验证集val/测试集test,分别占40%/10%/50%,而且测试集的标注结果(ground truth)没有公开,需要提交结果给官方比较,更加公平公正,而且测试集非常大,结果可靠性极高;
根据EdgeBox的检测率情况划分为三个难度等级:Easy, Medium, Hard。
目前,wider face上排在第一位的是创新奇智(AInnovation)的AInnoFace
Performance curves for the validation set

Performance curves for the test set

人脸检测通用评价标准相关推荐

  1. 人脸检测数据集评价代码FDDB evaluation运行方法

    人脸检测数据集评价代码运行方法: FDDB evaluation安装及使用 基本参考http://blog.csdn.net/u011783201/article/details/52119313,但 ...

  2. 目标检测/图像分割 评价标准IOU/准确率及精确率

    评价标准 目标检测和图像分割的评价标准是一样的,核心都是使用IOU标准 IOU(Intersection-Over-Union) OU即Intersection-Over-Union,IoU相当于两个 ...

  3. 人脸检测dlib, mtcnnx对比,FDDB测试对比

    前面一直做人脸检测相关内容,然后对比了下dib以及MTCNN的人脸检测效果主要是速度,以及FDDB准确率.最后给出生成FDDB测试文件的C++代码. FDDB 测试结果 注本文的MTCNN效果检测准确 ...

  4. 人脸对齐算法常用评价标准

    人脸对齐常用评价标准 1 the inter-ocular distance normalized error        其中xixix_i表示预测坐标点,x∗ixi∗x^*_i表示ground- ...

  5. cvpr2020 人脸检测与识别_Python人脸检测识别实例教程

    前言 随着科技的发展,人脸识别技术在许多领域得到的非常广泛的应用,手机支付.银行身份验证.手机人脸解锁等等. 识别 废话少说,这里我们使用 opencv 中自带了 haar人脸特征分类器,利用训练好的 ...

  6. 目标检测评价标准 精准度(precision)、召回率(recall)、准确率(accuracy)、交除并(IoU)【全】

    引用文章:目标检测评价标准 评价训练效果的值--精准度(precision).召回率(recall).准确率(accuracy).交除并(IoU) TP是正样本预测为正样本 FP是负样本预测为正样本 ...

  7. 大小仅1MB,超轻量级通用人脸检测模型登上GitHub趋势榜

    机器之心报道 项目作者:Linzaer 近日,用户 Linzaer 在 Github 上推出了一款适用于边缘计算设备.移动端设备以及 PC 的超轻量级通用人脸检测模型,该模型文件大小仅 1MB,320 ...

  8. 3模型大小_Github推荐一个国内牛人开发的超轻量级通用人脸检测模型

    Ultra-Light-Fast-Generic-Face-Detector-1MB 1MB轻量级通用人脸检测模型 作者表示该模型设计是为了边缘计算设备以及低功耗设备(如arm)设计的实时超轻量级通用 ...

  9. 超轻量级通用人脸检测模型

    项目地址:github.com/Linzaer/Ult- 以下是作者对此项目的介绍: 该模型设计是针对边缘计算设备或低算力设备 (如用 ARM 推理) 设计的一款实时超轻量级通用人脸检测模型,旨在能在 ...

最新文章

  1. 学习Hadoop时遇到的问题以及解决方法
  2. VoIP应用系统大盘点
  3. Java并发:线程池详解(ThreadPoolExecutor)
  4. 增删改查通用测试用例-禅道模板
  5. 电子密封胶正常固化与非正常固化差别是什么?
  6. 给你一个亿-电视节目总结
  7. 如何提高WEB程序的效率
  8. 1、流程控制语句switch 2、数组 3、随机点名器案例
  9. php实现微信登录详细教程,[文档教程]PHP实现微信开放平台扫码登录源码下载 - 技术编程 - 极思维...
  10. javaweb课程设计班级管理系统
  11. 2021国内市场CRM软件排行榜
  12. 电脑误删了计算机 怎么恢复,电脑误删文件怎么恢复 电脑误删文件恢复方法【步骤介绍】...
  13. 在poi-tl的区块对中实现用布尔值插入Word分页符的一种方法
  14. python微信投票平台_Python——开发一个自动化微信投票器【附代码实例方法】
  15. key组合按键,长短按键,连续按键 识别方案
  16. python补充超级鹰代码
  17. 插入排序原理及实现思路
  18. php 微信获取门店列表,【转载】微信公众号获取用户地理位置并列出附近的门店...
  19. 2022-07-10 第四小组 孙翰章 CSS学习笔记
  20. M1芯片安装CocoaPods问题

热门文章

  1. Mail::Sender
  2. 新东方雅思词汇(List 36 ~ List 40)
  3. 医学知识-DDR数字化成像-X平片
  4. 熊掌号必备SEO知识4:已开通熊掌号,站点换域名了怎么办?
  5. springboot2.X手册:基于OSS解决文件存储(一年9元^^,赚了)
  6. 华三交换机配置vrrp_H3C交换机 典型配置举例-6W100
  7. 水滴互助的0.01元“套路”:额外充钱才享保障 交钱被拒后推荐保险
  8. 学习 MySQL 必备的几个示例数据库
  9. 如何用一句话向你二大爷解释运维是做啥的?
  10. Java线程池的状态