ML提示和技巧/潮汐
引言
目标检测很容易。您所需要做的就是获取一个训练数据集,从TensorFlow object Detection API、Detectron2和mmDetection等开源库之一下载一个预先训练好的模型,然后(重新)训练它。Tensorflow Object Detection API Detectron2 mmdetection
实际上,在对您的模型进行数小时的培训后,您需要对其进行评估,检查指标…你最终会对表演完全失望,因为它与你预期的相去甚远!evaluate
现在你有麻烦了,…关于如何调试模型的性能以及如何对其进行优化以获得更好的性能,没有很好的教程、配方或StackOverflow主题。在ForSight,我们使用潮汐来实现精确的目标检测。这个博客是关于分享小贴士和小窍门的,这些小贴士和小窍门对于提高你的物体检测模型的精确度将证明是无价的。Forsight
模型性能评估-基础知识
影响目标检测模型性能的关键因素有两个:速度和精度。正如下表所示,两者之间总是有权衡取舍的。在这篇博客中,我们将专门分析模型的准确性。
简而言之,物体检测器以一定的置信度分数预测给定类别的物体在图像中的位置。通过在对象周围放置边界框以标识其位置来定义对象的位置。
因此,检测由一组三个属性表示:
类似地,对象检测模型的性能评估是基于以下指标进行的:
- 表示包含待检测类别的对象的图像的矩形区域的一组地面真实边界框,
- 由模型预测的一组检测,每个检测由边界框、类和置信度值组成。
欠条和置信度得分
考虑下图中由地面真实边界框(绿色)表示的感兴趣对象(人)和由预测边界框(红色)表示的检测区域。在不考虑置信度分数的情况下,当预测框和地面真实框的面积和位置相同(即完美地限定了人)时,就会出现完美匹配。
这两种情况通过并集交集(IOU)来评估,IOU是一种基于Jaccard指数的度量,Jaccard指数是两组数据的相似系数。在对象检测范围中,IOU等于预测边界框(红色)和地面真实边界框(绿色)之间的重叠(交集)的面积除以它们的并集的面积。Jaccard index
在下图中可以看到几个不同欠条分数的示例。通过设置IOU阈值,指标可以或多或少地限制检测是否正确。更接近1的IOU阈值更具限制性,因为它需要几乎完美的检测,而更接近但不同于0的IOU阈值更灵活,考虑到即使是很小的重叠也是有效的检测。
置信度分数反映了盒子包含感兴趣对象的可能性以及分类器对此的置信度。如果该框中不存在任何对象,则理想情况下置信度分数应为零。通常,越紧的包围盒(严格欠条)的置信度分数越高。
精确度和召回率
精度(Pr)是模型仅识别相关对象的能力,以正确正面预测的百分比计算。
Recall(RC)是模型查找所有相关案例(所有地面事实边界框)的能力。它是正确的正面预测在所有给定的基本事实中所占的百分比。
要计算精确度和调回值,每个检测到的边界框必须首先分类为:
- 真阳性(TP)-正确检测地面真实边界框;
- 假阳性(FP)-对不存在的对象的错误检测或对现有对象的错位检测;
- 假阴性(FN)-未检测到的地面真实边界框;
- 真负(TN)-不适用于对象检测,因为存在无限多不应检测为对象的实例。
简单地说,对象检测器的输出由边界框、类和置信度分数来表征。通过仅将置信度大于置信度阈值τ的那些视为正检测,可以在精确度和召回率计算中将置信度分数考虑在内。置信水平小于τ的检测被认为是否定的。
TP(τ)和FP(τ)都是τ的递减函数,因为较大的τ减少了阳性检测的数量。相反,Fn(τ)是τ的递增函数,因为较少的正面检测意味着较多数量的负面检测。
平均精度(AP)
查准率-召回率(PR)曲线是查准率随查全率变化的曲线。它显示了对于模型检测的不同置信度值,这两个度量之间的权衡。AP@α是精度-召回曲线(AuC-PR)下的区域。从数学上讲,AP定义为:
表示法:ap@α表示在α的借条阈值下的平均精度(AP)。因此,AP@0.50和AP@0.75分别表示IOU阈值为50%和75%的AP。
高AUC-PR意味着高精确度和高召回率。自然,PR曲线具有之字形行为(不是单调递减)。在计算AP之前,我们使用以下插值公式使PR曲线单调递减:
在计算了每个单独类别的AP之后,我们将所有类别的所有AP的平均值计算为平均AP:
有关精确召回曲线计算和数值示例的示例,请查看哈利特·库马尔的一篇很棒的博客文章。a great blog post
在下图中,我们可以看到三条不同的PR曲线,它们在精度/召回计算中使用的IOU阈值不同。由于AP对应于曲线下的区域,因此很明显,宽松的IOU阈值会导致比严格的IOU阈值更高的AP得分。
有关可可地图指标细节的更多详细信息,请访问:https://cocodataset.org/#detection-eval!https://cocodataset.org/#detection-eval
潮汐-一张更好的地图
如前几节所示,对象检测和实例分割任务通常只使用一个指标来衡量模型性能:平均平均精度(MAP)。虽然MAP简明扼要地总结了一个模型的性能,但很难将目标检测和实例分割中的错误从MAP中分离出来:假阳性可能是重复检测、误分类、误定位、念力和背景,甚至是误分类和误定位。
为了解决上述挑战,引入了TIDE(识别检测和分割错误的工具包)。它将目标检测错误划分为六种类型,并介绍了一种用于以隔离其对整体性能的影响的方式来测量每个错误的贡献的技术。潮汐基本上就是类固醇上的可可地图!TIDE (Toolkit for Identifying Detection and segmentation Errors)
如果您的对象检测模型在自定义数据集上进行训练后具有较低的MAP,您肯定会想知道我们可以在哪里进一步改进它。这里是潮汐大放异彩的地方。为了使您的模型运行得更好,浪潮将帮助您准确地找出您应该专注于改进的错误类型。
潮汐误差类型
在本文中,对错误类型以及它们是如何定义的进行了详细的说明。
Tend旨在替代CoCo评估工具包,入门非常简单:COCO Evaluation toolkit
from tidecv import TIDE, datasets
tide = TIDE()
tide.evaluate(datasets.COCO(), datasets.COCOResult('path/to/your/results/file'), mode=TIDE.BOX)
tide.summarize() # Summarize the results as tables in the console
tide.plot() # Show a summary figure
潮汐实例
我们已经准备了一个Google Colab笔记本,其中包含一个代码示例,该示例展示了如何在TensorFlow对象检测API中使用TIDE。Google Colab notebook
如果您不想运行笔记本并等待评估完成,您可以在我们用于实验管理的Allegro ClearML操控板上检查结果。通过使用ClearML,我们可以以一种有组织的方式持久地存储所有实验数据,这使得我们能够轻松地执行比较,并以COCO格式上传自定义工件,如地面真相和检测元数据,以及自定义绘图到实验中。Allegro ClearML dashboard ClearML custom artifacts ground-truth and detection metadata in COCO format custom plots
通过比较EfficientDet-D0和EfficientDet-D7模型的COCO评价结果,我们发现EfficientDet-D7模型的MAP高出约15%。这是因为模型的容量更大-与EfficentDet-D0相比,EfficientDet-D7中的参数多了约13倍。
对比潮汐评估结果可以看出,两种模型的分类和重复检测误差相似,而D7模型的定位误差要低2%。
D7模型在检测前景时的背景误差比D0高2%,而与D0相比,D7模型错过的GT误差小3.5%。这可以用以下事实来解释:D7模型具有较高的召回率,从而降低了漏掉的GT错误,但同时也增加了背景分类错误。
比较中有趣的部分是假阳性和假阴性的地图。我们可以看到,两种模型的假阳性率非常相似。这可能表示数据集中有一些未标记的数据,并且模型正在以高置信度检测它。另一方面,D7模型的假阴性率明显较低。显然,较大的模型可以检测到较小容量模型难以处理的对象实例。
在这个比较中,我们比较了相同的模型架构(EfficientDet)和不同数量的参数(D0和D7)。当我们想要比较不同的模型架构时,浪潮模型评估甚至更有用,所以请随意亲自尝试。潮汐论文[1]包含对不同目标检测和分割模型的附加分析。
下面提供了先前分析的潮汐曲线图。
结论
最近,AI先驱Andrew Ng发起了一场以数据为中心的AI运动,他的主要目标是将AI从业者的重点从模型/算法开发转移到他们用来训练模型的数据的质量上。虽然高质量的数据确实是实现模型高性能的关键,但模型也起着关键作用:模型和数据不能完全解耦。在开发过程中,只有焦点可以从一个切换到另一个,这取决于深入分析确定的瓶颈。campaign
在ForSight,我们发现理解目标检测模型的性能必须超越普通的每秒帧数(FPS)和基于地图的准确度标准。非常重要的一点是,不仅要对模型进行天真的基准测试,而且要了解您应该做些什么来进一步提高它们的性能。Forsight
使用更有洞察力的度量(如TIDE提供的度量)可以更容易地识别数据集中的特定问题,如未标记的图像、松散的边界框等。它还可以帮助您识别模型容量对于手头的特定任务而言不够大的情况。一个接一个地解决这些问题最终将使您获得更好的机器算法,并帮助您为现实世界的应用程序创建可投入生产的模型!
参考文献
原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/10/12/%e4%b8%80%e7%a7%8d%e6%9b%b4%e5%a5%bd%e7%9a%84%e7%9b%ae%e6%a0%87%e6%a3%80%e6%b5%8b%e5%9c%b0%e5%9b%be/