YOLOV4垃圾检测召回率提升

一. 目标检测中的mAP

1. mAP相关知识

1.1 IOU(交并比)

目标检测时,预测框和真实框的交并比,是个重要的参数。

在正负样本的划分和非极大抑制中起到关键作用

1.2 precision(准确率) / recall(召回率)

首先我们需要了解目标检测过程中正负样本的概念

在目标检测中,样本置信度大于一定阈值时,模型就认为检测到了该目标,否则不认为检测到目标

正样本指的是我们真实想要检测到的的目标(但未必检测到了),负样本指的是样本中除了正样本之外的,即不是我们真实需求的目标

以下有四个由True/False和Positive/Negative组合而成的参数,用来代表四种不同情况:

TP(True Positive):模型检测到且检测正确的样本,视为正样本

FP(False Positive):模型检测到但检测错误的样本,视为负样本

TN(True Negative):模型未检测到且确实不需要检测到的样本,无需考虑

FN(Fale Negative):模型未检测到但是其实需要检测到的样本,视为正样本

有了这四个参数,我们可以写出precision和recall的计算公式

precision=TP/(TP+FP) 通俗解释为:正确检测到的样本占所有被检测到的样本比例

recall=TP/(TP+FN) 通俗解释为:正确检测到的样本占所有希望被检测到的样本比例

其实放到真实的算法过程当中,每个预测框都会企图和交并比最大的真实框进行匹配,当满足一定条件时,它们就配对成功,配对成功了的不能和其他框再配对,这种能够找到配对对象的预测框就属于TP(说明真实框被检测到了),而找不到配对对象的预测框就属于FP,未配对的真实框就属于FN(说明真实框没有被检测到)

理解precision和recall的意义后,不难发现,他们之间其实存在着一定的制约关系,试想:当试图提升precision时,我们会提高置信度阈值,使得识别到的目标正确概率增大,但这样难免遗漏很多正确目标;当试图提升recall时,我们会降低置信度阈值,使得更多的目标可以被识别到,这样能够将很多正确目标囊括了进来,但也会识别到很多不正确的目标,准确率就难以维持较高水准。

1.3 AP / mAP

目标检测中,每个类别在不同的置信度阈值下,都会有不同的precision和recall,通过在坐标上刻画precision-recall曲线,得到曲线下方的面积来刻画模型性能的好坏。这个面积就是AP(average precision)。AP的出现是为了解决单一指标(precision或recall)对模型评估的局限性,从而能够综合评估模型好坏

而mAP就是对所有类的AP求平均值,作为多类别目标检测模型性能的衡量指标。

2. yolov4中mAP的具体算法

  1. 利用get_gt_txt.py得到测试集中真实框的种类与位置信息

  2. 通过get_dr_txt.py将测试集传入模型进行预测,得到各个预测框种类、置信度得分、位置等信息。在进行mAP的计算时,我们需要产生大量的预测框,因此在这里我们需要先将生成预测框的置信度阈值设置得非常小(0.05),就是说置信度>=0.05就可以生成预测框。这样做的目的是允许有大量不同置信度区间的预测框产生,而mAP的预测需要在不同置信度下得到对应的precision和recall,也就是为mAP的精准计算提供了条件。

    Tip: 预测框的具体生成方式在下文detect_image中提到

  3. 在get_map.py中进行具体的计算:

    1. 首先进行正负样本的划分。之前我们提到了IOU,现在它派上用场了。
    2. 假定现在有类别I,属于类别I的每个预测框都去找与它IOU值最大的真实框,记录为maxIOU,设定一个IOU_threshold门限(一般设定IOU_threshold为0.5)用于划分正负样本。当某个预测框的maxIOU<IOU_threshold时,判定该预测框为正样本;当某个预测框的maxIOU>=IOU_threshold时,又要分为两种情况,若预测框和真实框的类别也相同,那么判定该预测框为正样本,否则会寻找其他的真实框,直到找到IOU值最大且>=IOU_threshold且类别也相同的真实框,这样可以判定为正样本,若找不到,判定为负样本。最后对类别I的所有预测框按照置信度由大到小进行排序,便于取置信度阈值。
    3. 所有类别都进行2步骤,但要注意并不是一个一个类别进行的,比如并不是类别I的框筛选完了,才去筛选类别II的框,实际的逻辑应该是根据IOU由大到小进行筛选。被认定为TP的预测框会和与之匹配的真实框一起被剔除掉,不再参与和其他框的匹配过程。
    4. 对每个类别,根据已经统计好的预测框样本,通过设置不同的置信度阈值,得到相应的precision-recall,从而刻画各个类别的precision-recall曲线,求出各个类别的AP,再求得mAP

可以针对上面这个例子进行一下计算,如果置信度阈值设为0.95,那么precision=1/1=1,recall=1/3=0.3333

如果把置信度阈值设为0.35,那么precision=3/6=0.5,recall=3/3=1

二. yolov4的detect_image算法

1. anchors_box锚框

1.1 引入

在众多经典的目标检测模型中,均有先验框的说法,有的paper(如Faster RCNN)中称之为anchor(锚点),有的paper(如SSD)称之为prior bounding box(先验框),实际上是一个概念。

举个形象但不够恰当的例子说明:

由于目前污染比较严重,导致海洋中漂浮着许多垃圾,这些垃圾既污染环境,又不利于鱼类的生存。假设我们面前有一片海域,海域中零星地漂浮着很多不同类型的垃圾,这些垃圾有的大,有的小,有的是方形的,有的是长条形的。为了保护环境,我们需要将所有的垃圾打捞起来,还海洋生物一个美好家园。

为此,我们设计了一种打捞机器,该机器能够在一定范围内撒下网,进行垃圾打捞,且只有一定大小的网能够打捞到对应一定大小的垃圾,这里我们认为当网与垃圾的IoU小于0.5时,该区域不存在垃圾;网与垃圾的IoU大于0.5时,该区域存在垃圾,当然该机器能够对网进行后续的调整(调整网的位置,形状)。由于该机器有些简陋,无法智能识别该海域中哪个区域包含垃圾,为了能够尽可能的打捞到所有的垃圾,我们需要在这片海域的不同位置下网,进行垃圾的打捞,且为了打捞不同类型的垃圾,我们需要在同一位置下多个不同形状(不同大小,不同长宽比)的网。实际上,我们希望既能打捞到所有的垃圾,同时我们又希望能够下最少的网,减少工作量。

总结:对应到目标检测任务,海域相当于网络的输入图像;不同类型的垃圾,对应不同类型的目标类别;在海域上抛下的网相当于锚框,通过锚框来判断该区域中是否包含目标。预测框的前身就是各个锚框!

1.2 不同尺度的锚框

在引例我们说到,为了打捞不同类型的垃圾,我们需要在同一位置下多个不同形状(不同大小,不同长宽比)的网。同样在目标检测中,在图中的同一个位置,我们会设置几个不同尺度的锚框。

1.3 先验框与特征图的对应

在引例我们说到,我们需要在海域的不同位置下网,进行垃圾的打捞。同样在目标检测中,需要在图片的不同位置上设置锚框。

但是实际上如果遍历原图每个像素,设置的锚框就太多了,完全没必要。假设一个224x224的图片,每个位置设置3个不同尺寸的锚框,那么就有224x224x3=150528个,但是如果我们不去遍历原图,而是去遍历原图对应的feature map呢?以vgg16的backbone为例,下采样了5次,得到7x7的feature map,那就只需要得到7x7x3=147个先验,这样的设置大大减少了锚框的数量,同时也能覆盖大多数情况。

2. detect_image预测框算法

  1. 首先获得锚框尺度信息,用于在特征图上生成锚框

  2. 将图像传入网络模型进行预测

  3. 在特征图上生成锚框,每个锚框通过模型可以对每个类别都产生一个置信度,选择置信度最高的类别作为该锚框的类别

  4. 设置置信度阈值,保留置信度>=阈值的锚框

  5. 对留下的锚框进行非极大抑制(NMS),即需要删除一部分框,防止大量重叠框的出现,大致思路如下:

    从待检测目标中先按照分类置信度,找一个最可信的框。然后判断其他框和它的交并比(IoU),如果大于阈值TH,说明相似,抑制掉就好了。

    算法:1.按照置信度排序 2.判断其他框和得分最高的框的IoU,大于阈值则剔除得分较小的建议框 3.从没有处理的框中继续选择一个得分最高的,重复上述过程。 4.遍历所有的建议框,即所有物体种类都做一遍非极大值抑制。

  6. 经过置信度阈值和NMS的双重筛选,剩下的就是需要的预测框了。

三. 召回率提升

1. 目前问题

  1. 对于各个类别,无论置信度阈值调整到什么位置都无法让recall达到95%,分析原因有两个方面:

    1. 预测框与真实框重合度不够,这样get_mAP.py就不认为检测到了目标

    2. 存在误检,即识别错了种类,把类别I识别成了类别II,那这样类别I的recall永远也到不到100%,因为已经有一个被识别为了其他种类,再怎么下降置信度阈值,也无法改变这个类别无法被完全正确识别的事实。

      以测试集中betel nut bags的置信度阈值-recall曲线举个例子,首先需要知道的是置信度阈值的设定方式,实际上这里的Score_Threhold以每个betel nut bags预测框的置信度都做一次置信度阈值,如果说这些预测框囊括了所有betel nut bags目标,那么以预测框中最低的置信度做阈值时,理论上recall将会达到100%。然而图像中并没有呈现这样的结果,说明这已经不是调整置信度阈值能解决的了,而是模型的性能存在问题,什么原因呢?大概就是以上两个原因。

  2. 我们需要的是整体的召回率>=95%还是每个类别的召回率都>=95%呢。相对而言整体召回率>=95%会更容易达到,而要求每个类别的召回率>=95%更加严苛,相信这个不难理解,因为某一个没达到并不代表整体无法达到

2. 提升策略

  1. 调整模型参数,例如Epoch/batch_size的调整,防止出现过拟合,当然也不能出现欠拟合
  2. 丰富数据集,一方面是要具有特征的多样性,另一方面是同种类别也要有足够的数量,主要的重点类别之间数量要均衡。这样训练出的模型具更广泛的检测识别能力,且可以减少误识类别的现象,对召回率的提升均有帮助
  3. 开启yolov4中Mosaic数据增强
  4. 继续自主的数据增强
  5. 在必要情况下增多anchors锚框的种类(只在存在一些刁钻比例垃圾时才使用)
  6. 以上将决定recall召回率的上限,只有上限达到95%,才能通过调整置信度阈值来使得recall>=95%,否则再怎么降低阈值都没用,因为上限不够。在上限足够的情况下,就可以通过调整判定与真实框匹配的IOU值和置信度阈值,再进一步提高recall

YOLOV4垃圾检测召回率提升相关推荐

  1. 目标检测 YOLOv5 - 如何提高模型的指标,提高精确率,召回率,mAP等

    目标检测 YOLOv5 - 如何提高模型的指标,提高精确率,召回率,mAP等 flyfish 文中包括了YOLOv5作者分享的提高模型指标小技巧和吴恩达(Andrew Ng)在做缺陷检测项目( ste ...

  2. yunyang1994 tensorflow_yolov3 对于检测中心点的边缘物体时评估IOU对召回率和精度的影响

    我们在检测目标物体中心点时,现有的逻辑往往不能获得很好的效果,如下图: 识别时,程序会将不是方形的图像扩展为方形,不足的部分用灰色填充,目标框的绘制会首先在扩展为方形的图像上绘制,然后将超出原图像的部 ...

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

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

  4. 目标检测中召回率(Recall),精确率(Precision),平均正确率(Average_precision(AP) ),交除并(Intersection-over-Union(IoU))

    前言 在训练YOLO v2的过程中,系统会显示出一些评价训练效果的值,如Recall,IoU等等.为了怕以后忘了,现在把自己对这几种度量方式的理解记录一下.  这一文章首先假设一个测试集,然后围绕这一 ...

  5. 目标框检测中准确率、召回率、AP、mAP计算原理及代码

    1. TP.FP.TN.FN 概念 在对数据进行预测的时候,往往有以下几个概念:TP.FP.TN.FN. 什么意思呢?即预测情况(Positive or Negtive)是否真正反应真实情况的关系: ...

  6. 目标检测扩(六)一篇文章彻底搞懂目标检测算法中的评估指标计算方法(IoU(交并比)、Precision(精确度)、Recall(召回率)、AP(平均正确率)、mAP(平均类别AP) )

    ​ 基本在目标检测算法中会碰到一些评估指标.常见的指标参数有:IoU(交并比).Precision(精确度).Recall(召回率).AP(平均正确率).mAP(平均类别AP)等.这些评估指标是在评估 ...

  7. 机器学习工程实例 垃圾邮件过滤系统 数据预处理 训练模型 交叉验证 精准率召回率计算 步骤详细解析

    本博客所有内容均整理自<Hands-On Machine Learning with Scikit-Learn & TensorFlow>一书及其GitHub源码. 看<Ha ...

  8. 目标检测评价标准(mAP, 精准度(Precision), 召回率(Recall), 准确率(Accuracy),交除并(IoU))

    1. TP , FP , TN , FN定义 TP(True Positive)是正样本预测为正样本的数量,即与Ground truth区域的IoU>=threshold的预测框 FP(Fals ...

  9. [机器学习] 二分类模型评估指标---精确率Precision、召回率Recall、ROC|AUC

    一 为什么要评估模型? 一句话,想找到最有效的模型.模型的应用是循环迭代的过程,只有通过持续调整和调优才能适应在线数据和业务目标. 选定模型时一开始都是假设数据的分布是一定的,然而数据的分布会随着时间 ...

最新文章

  1. 自然语言处理NLP国内研究方向机构导师
  2. 吴恩达机器学习笔记4-代价函数III(cost function)
  3. idea编译的jsp存在哪里
  4. Cordova内部http请求的proxy实现原理
  5. 散点画三维曲面图_UG 复杂曲面合金零件的数控加工
  6. c语言第一周项目,C语言第一周实战
  7. 【人才引进】博士补贴75万,硕士补贴20万,这个南方城市,高待遇引才150人!...
  8. hdu4045(递推)
  9. 国家应统一手机快充标准
  10. Python 颜色代码大全
  11. matlab地震动,MATLAB在结构地震动力分析中的应用
  12. CAD二次开发高版本调用内部命令AcedCmdS和AcedCmdC
  13. 实用的文字转语音免费软件推荐
  14. php对接石基crs系统,IDeaS 收益管理系统与石基昆仑CRS 3.10成功对接
  15. Filter过滤器及其作用
  16. 雷神simplest_ffmpeg_player解析(四)
  17. 【Unity脚本】游戏开发常用功能——以平台动作游戏为例解决“瞬移穿墙”问题
  18. vue 项目在ie浏览器的兼容问题
  19. 【SCI征稿】年底冲计算机神刊!最快1-2个月见刊!
  20. pn532写入手机nfc_STM32f103(mini板)控制NFC模块(PN532)对NFC标签进行读写

热门文章

  1. 布赖恩·克尼根位计数算法说明及简单使用
  2. iSCSI存储技术全攻略【存储部落】云存储|云计算|云服务
  3. QT pri 文件的作用
  4. uniapp实现附有二维码的图片的本地保存
  5. r5 5600u和r5 4600u参数对比哪个好?
  6. 那些年,被我们误解的程序员
  7. coco2dx精灵和背景遮挡_cocos2dx番外篇——更换精灵图片
  8. 计算机组装维修考点,计算机维修工(基础知识)—教材
  9. 1-6月中国ADAS供应商占比9% 又一家零部件巨头全面布局智驾新赛道
  10. 连引用都答不上,凭什么说你是Java服务端开发