您的位置首页  新闻  要闻

商业计划书mmap(商业计划书bp是什么意思)

  • 来源:互联网
  • |
  • 2022-09-10
  • |
  • 0 条评论
  • |
  • |
  • T小字 T大字

商业计划书mmap(商业计划书bp是什么意思)

 

本文经授权转载自知乎:

https://zhuanlan.zhihu.com/p/55575423

https://zhuanlan.zhihu.com/p/56899189

作者:旷视科技南京研究院研究员赵博睿,主要研究领域为目标检测

目标检测是计算机视觉领域的一项基础问题,在许多智能场景的落地应用中目标检测通常都是视觉感知的第一步。在学术研究中,MS COCO作为目标检测领域中最常用、最权威的公共数据集被作为目前几乎每一个目标检测算法的标准演武场,其性能度量中的指标—mmAP更是被广大研究者耳熟能详成为经典。不过,经典之余,一些研究者往往对此拿来主义不求甚解。

本文将针对mmAP这一经典的目标检测评价指标详细解析其定义初衷和具体计算方式;分析mmAP的特点,并介绍针对这些特点现有方法如何hack mmAP,最后将提出几个mmAP未考虑到的评测要素。仅抛砖引玉,期待诸君有更优评价指标的提出。

目标检测

目标检测(Object Detection)是计算机视觉中非常常见的任务,该任务的输入是一张图像,输出为图像中的所有存在的目标,每个目标都要给出类别信息(是什么?)和位置信息(在哪里?)。这个位置信息通常用一个外接矩形框(俗称bounding box)来表示。

这个任务有一个特点,就是它的输出是非结构化的。也就是说,它的输出具有很强的不确定性。举个例子,图像分类任务的输入也是一张图像,输出为一个标签/类别,代表着这张图的分类,因此分类任务的输出是结构化的,有且仅有一个标签;而目标检测的输出是图像中的所有目标(类别+位置),图像中到底有多少个目标是不确定的。这一特点非常重要,也正因为这一特点,目标检测的性能度量方法要比图像分类任务复杂得多,这在后面的分析中会提到。

什么样的检测结果是好的?

什么样的检测结果是好的?这个问题看起来很简单,因为我们在看一张图(包含了检测出来的框/分割掩码)时,很容易就能够对比出真实目标和检测结果的贴合程度。但是对于计算机视觉任务,我们需要一个明确的数字化的判断标准。(以下均使用目标检测任务作为示例)

下面我们用 GT(类别, 矩形) 来表示一个图中的目标(也就是我们希望找出来的目标,也可称作Ground Truth),用DT(类别, 矩形)来表示一个我们检测出来的目标(Detection Result)。

首先,一个好的检测结果,至少得把类别搞对。如果类别就错了,位置信息再准确都是白搭,也就是GT(类别)=DT(类别);其次,DT(矩形)要尽可能地贴合GT(矩形),越贴合越好。如何判断这个贴合程度呢?最常用的一种评价方式是交集和并集的比值(交并比、Intersection over Union、IoU)。顾名思义,交并比就是DT(矩形)和GT(矩形)的重合部分面积(交集) 与 两者的全部面积(并集,重合的部分不会重复计算面积)。

Intersection over Union(IoU)

这个比值最小为0,也就是两个矩形毫无交集;最大为1,也就是两个矩形完全重合。IoU越大,检测的结果越好。

评价检测性能之前

领导的第一个责任是让大家认清现实。他的最后一个责任是感谢大家。在这两者之间领导是大家的服务员。

知道了什么样的检测结果是好的,就可以评价检测算法的性能了。但在这之前,先思考一个问题:评价一个检测算法的性能,真的像想象中那么容易吗?

我们都知道,评价一个图像分类结果的性能,只需要看预测类别是否正确即可,在一个数据集上面,我们可以很容易地得出一个平均准确率。可是目标检测的输出目标数量和真实目标数量都是不固定的(前文提到的非结构化的特性),因此评判时要考虑的就不仅是对错这么简单了,我们需要考虑的有:如果漏掉了一个目标对性能有多大损伤?如果多检测出了一个目标对性能有多大损伤?如果检测出来的位置信息有所偏差对性能有多大损伤?进一步地,在这么多的检测结果中,总有一些是检测器十分笃定的,有一些是模棱两可的。如果检测器对多检测出来的那个目标本身也不太确定呢?如果检测器最满意最信任的那个检测结果出错了呢?换言之:一个检测结果对性能的影响,是否应该和检测器对它的满意程度(置信度)相关?以及,检测错了一个稀有的物体和检测错了一个常见的物体所带来的性能损伤是否应该相同?......

正戏来了:mmAP

刚刚提到的所有问题,mmAP都要一一给出答案。

首先是位置偏差问题。有的使用场景对位置的准确度要求不高,有的则要求精确定位。因此,mmAP先按位置准确度的需求进行划分,设置一组IOU阈值,这组阈值为 (0.5, 0.55, 0.6, ..., 0.9, 0.95),如果DT与GT的IOU超过阈值,则视作检测成功。这样每给定一个阈值就可以计算出一个性能(也就是mAP,后面详述),然后对这些性能取平均(也就是mmAP,后面详述)就是整个检测算法的性能了。

然后是类别平衡问题,这一问题在分类领域非常常见,将一个白血病患者错分为健康的人和将一个健康的人错分为白血病患者是一样的吗?显然不是,因为白血病患者本身就属于少数,如果一个分类器把所有人都无脑地判断为健康,其正确率就是 健康的人/全部人。这个分类器的正确率很高但是完全失去了判断病患的功能。mmAP为了公平的评价检测器在各个类别上的性能,采用了类别间求平均的方法:先给定一个IOU阈值,然后将所有的GT和DT按照类别先进行划分,用同一类的所有GT和DT计算出一个性能(也就是AP,马上详述),然后对所有类别的性能取平均(mAP),就是检测算法在这个IOU阈值下的性能。

现在我们来看看,给定了一个IOU阈值、并给定了一个类别,如何具体地计算检测的性能。首先,我们要先对所有的检测结果排序,得分越高的排序越靠前,然后依次判断检测是否成功。将排序后的所有结果定义为DTs,所有同类别的真实目标定义为GTs。先依序遍历一遍DTs中的所有DT,每个DT和全部GT都计算一个IOU,如果最大的IOU超过了给定的阈值,那么视为检测成功,算作TP(True Positive),并且最大IOU对应的GT被视为匹配成功;如果该DT与所有GT的IOU都没超过阈值,自然就是FP(False Positive);同时,每当一个GT被检测成功后,都会从GTs中被取走,以免后续的检测结果重复匹配。因此如果有多个检测结果都与同一个GT匹配,那么分数最高的那个会被算为TP,其余均为FP。遍历完成后,我们就知道了所有DTs中,哪些是TP,哪些是FP,而由于被匹配过的GT都会被取走,因此GTs中剩下的就是没有被匹配上的FN(False Negative)。以下是为了方便理解的代码(Python),这段代码仅用于理解,效率较低。真实代码请参考MS COCO的官方源码。

TP,FP,FN

有了TP、FP、FN的定义,就可以方便地得出准确率(Precison,P,即所有的检测结果中多少是对的)和召回率(Recall,R,即所有的真实目标中有多少被检测出来了),两者的定义分别为:P = TP / (TP + FP), R = TP / (TP + FN) = TP / len(GTs)。

但是,单纯地用Precision和Recall来评价整个检测器并不公平,因为有的检测任务要求更高的Recall,错检几个影响不大;有的检测任务则要求更高的Precision,漏检几个影响不大。因此我们需要对Precision和Recall做一个整体的评估,而这个评估就是前文提到的AP(Average Precision),其定义非常简单,对排序好的det结果进行截取,依次观察det结果的前1个(也就是只有第一个结果)、前2个、...、前N个,每次观察都能够得到一个对应的P和R,随着观察数量的增大,R一定会变大或不变。因此可以以R为横轴,P为纵轴,将每次的截取观察到的P和R画成一个点(R,P)。值得注意的是,当截取到的新结果为FP时,因为R没有变化所以并不会有新的(R,P)点诞生。最后利用这些(R,P)点绘制成P-R曲线,定义: 。通俗点讲,AP就是这个P-R曲线下的面积。AP计算了不同Recall下的Precision,综合性地评价了检测器,并不会对P和R有任何偏好,同时,检测分数越高的结果对AP的影响越大,分数越低的对AP的影响越小。

我们再重新过一遍计算方法:给定一组IOU阈值,在每个IOU阈值下面,求所有类别的AP,并将其平均起来,作为这个IOU阈值下的检测性能,称为mAP(比如mAP@0.5就表示IOU阈值为0.5时的mAP);最后,将所有IOU阈值下的mAP进行平均,就得到了最终的性能评价指标:mmAP。

值得注意的一个细节是:在实际计算时,mmAP并不会把所有检测结果都考虑进来,因为那样总是可以达到Recall=100%,为了更有效地评价检测结果,mmAP只会考虑每张图片的前100个结果。这个数字应该随着数据集变化而改变,比如如果是密集场景数据集,这个数字应该提高。

还有一个细节非常重要:刚才说AP是P-R曲线下的面积,其实这个说法并不准确。实际上在计算AP时,都要对P-R曲线做一次修正,将P值修正为当R>R0时最大的P(R0即为该点对应的R),即 。下图即为修正前P-R曲线和修正后P-R曲线。

P-R curve

如图,蓝色实曲线为原始P-R曲线、橘色虚曲线为修正后P-R曲线。为什么要修正P-R曲线呢?这是因为评价检测性能时,更应该关心当R大于某个值时,能达到的最高的P是多少、而不是当R等于某个值时,此时的P是多少。

除了AP、mAP、mmAP之外,还有一个重要的性能是Recall,有时我们也需要关心检测器能达到的最大Recall是多少?尽管此时的Precision可能非常低,AR就是度量Recall的。每给定一个IOU阈值和类别,都会得到一个P-R曲线,该曲线P不为0时的最大的R,就称为该IOU阈值下该类别的Recall(其实是最大Recall),在类别尺度上平均后,就是该IOU阈值下的AR,通常我们会用AR[0.5:0.95]表示所有IOU阈值下AR的平均值(也就是mAR)。值得注意的是,AR并不是和mmAP同等量级的性能度量指标,因为AP综合考虑了P和R,而AR只是考虑了Recall。计算AR通常是用于帮助我们分析检测器性能特点的。在两个检测结果的mmAP相同时,更高的AR并不意味着更好的检测效果,而仅仅意味着更扁平的P-R曲线(可自行脑补该曲线)。

下面我们来谈谈mmAP的诸多特点。通过分析我们甚至可以发现某些特点较反直觉,而某些特点可以加以利用达到涨点目的……与此同时,mmAP也并不全能,它也有一些未考虑到的因素。以下,我们将通过举例的方式来描述mmAP的这些特点以及它的局限。

边际成本定价是指这样一种定价规则,厂商或国有企业使得价格等于边际成本。

mmAP的几个特点

先来看一组检测结果。

检测结果(蓝色框为Ground Truth,绿色框为检测结果)

凭直觉地看:b、d的检测结果均差于a、c,因为b、d均含有一个多余的FP;而c的结果要优于a,因为其定位更准确。凭直觉对它们的mmAP排序很可能会排出:c>a>b=d的结果。但实际上,这四组结果对应的mmAP如下图。

实际上,mmAP的排序为:c=d>b>a。为什么呢?

首先回顾一下mmAP的计算方法,mmAP是对每一个IOU阈值计算出一个mAP,然后将其平均得到最终的结果的,因此mAP@0.95和mAP@0.5是同等重要的(本文就暂以0.95和0.5举例,代表两个极端的阈值),虽然b中的两个检测结果其中必有一个为FP,但是在计算mAP@0.5时,分数低但定位更好的结果并不会对mAP产生影响(因为没有分数更低的TP出现了,该FP对P-R曲线毫无影响);同时,在计算mAP@0.95时,分数高但定位更差的结果变成了FP,但是由于a中在该阈值下根本不存在TP,所以b的mAP仍高于a。在所有阈值下,b的mAP都要好于或等于a,所以会有b的mmAP高于a这样的反直觉的现象产生。

再来看看c为什么大于b,同时会等于d?c和b的区别在于,c不存在定位更差的检测结果,因此在计算mAP@0.5这样的低阈值mAP时,两者完全相同(b中FP为何不会产生负面作用,道理同上文一样),而计算mAP@0.95这样的高阈值mAP时,c优于b,因此综合下来c的性能好于b。而b和d的直观效果一样,为何mmAP不同?因为b和d区别(也是唯一区别)在于,d中定位更好的检测结果的分数更高。这样一来,d的性能就和c一样了,因为那个低分且低性能的FP不会影响结果。

从这几个结果的对比我们可以发现mmAP的几个特点:1.mAP@0.75这样的高阈值mAP提高时,未必是定位的性能变好导致的,也有可能是因为检测器留下了部分本来应该被过滤掉的FP,而碰巧这个FP的定位效果更好,在高阈值mAP上提供了正面价值;2.如果检测器的定位性能更强,那么mmAP一定会有所提高;3.有时FP未必会影响性能,FP是否影响性能,关键要看是否还存在比该FP分数更低的TP。

如何利用其特点提高mmAP?

再看一组检测结果。

这一组检测结果更真实一些,更像是性能正常的检测器输出出来的结果。直观地看,我们可以确信g>e,因为其定位效果更好。但是f和h仍然含有多余的FP,并且存在分数小于该FP的TP,那么它们的性能究竟如何呢?

实际上:g>h>e>f。其实这一组对比是希望分析检测中的一个问题,即检测器检测出来的结果中,分数高的未必定位更好,如果分数低的检测结果更好,我们应该怎么办呢?。

其中e的做法是最传统的--直接抑制掉(抑制方法为NMS),而f中的做法则是选择保留,很明显,保留之后的性能变差了,这是因为保留之后必然会存在一个FP,而这个FP会对P-R曲线的后半段产生巨大影响;g的做法比较直观--保留那个分数低但是定位更好的,但是如何确定哪个是定位更好的结果呢?最简单的方法就是预测定位效果,IOU-Net就是一个可以用于解决这个问题的研究工作,通过预测检测结果与GT的IOU来判断哪个检测结果的定位效果更好;h的做法非常有意思--将那个应该被抑制掉的检测结果留下来,但是并不是像f那样直接保留,而是给它打了一个很低的分数再保留,这样一来:在计算低阈值mAP时,就不存在比这个FP分数更低的TP了,而在计算高阈值mAP时,它又会对性能有所帮助,所以综合下来,h中的操作也可以提高mmAP。等等,是否觉得这种重新打分的操作非常熟悉?没错,它就是Soft-NMS。其实,在大数据集上(比如COCO),是无法保证重新打分后的检测结果的分数低于所有其他TP的。但是只要被Soft-NMS重新打分的那些结果的平均性能优于该分数段的检测结果,那么性能就会提升。可以这样理解,那些本身就应该保留的高分检测结果大部分是王者或者钻石,而那些被重新打分的都是王者或者青铜,虽然并不都是好的,但是由于重新打分,我们把它们放到了白银分段,和那些低分检测结果混在了一起。所以最终它们还是能提高检测性能的。

mmAP之外 -- 分数密度

mmAP也并不是全能的,有一个被mmAP忽略掉的因素就是分数密度,也就是每个目标的具体得分情况,mmAP在计算时,只考虑所有检测结果的排序,但并不会考虑检测结果的具体分数,两个mmAP完全相同的检测器的得分可能相差很大。比如下图。

检测结果(红色表示FP)

两者的mmAP完全相同,但是FP的分值并不相同,左边的两个FP分别为0.87和0.86,而右边的两个FP为0.25和0.35。在实际使用时,右侧的检测器我们可以将分数阈值设置为0.35到0.88之间的任何一个数字,因为TP和FP之间有很大的分数差距;而对于左边的检测器,我们只能将分数阈值设置在0.87到0.88之间。换言之,有着同样的mmAP的检测器,在实际使用时的泛化能力未必相同。这是因为mmAP并没有考虑到如分数密度这样的因素。

mmAP之外 -- P-R trade-off

mmAP更高意味着检测结果性能更好,但是当给定一个场景时,却未必总是这样。比如在一个智能收银场景,对图像中所有物体都要检测出来并进行分类,此时我们可能更关心accuracy=TP / (TP+FP+FN),因为此时漏检(FN)和误检(FP)对于性能的损失是相同的。那么拥有更高mmAP的检测器一定拥有更高的acc吗?答案是否定的。

如图,蓝色曲线和绿色曲线相比,AP明显更低,但是却可以达到更高的acc。

这个例子并不是用来证明mmAP不够好。实际上之所以有这样的现象,是因为:mmAP是用来评价检测算法的,而acc是用来评价具体场景下的检测器的。检测算法的mmAP更高,那么它在综合所有任务场景上来看就会有更好的性能。但是当我们有一个确定的场景时,mmAP就会因为考虑得太全面而不那么适用了,此时我们应该寻找一个其他的评价指标来衡量检测器的性能,这个指标需要考虑很多因素,比如如何在P-R重要性之间进行trade-off(取舍)。

总 结

mmAP是目标检测领域非常重要的性能评价指标,它综合考虑了许多因素,比如类别间的均衡、定位精度的需求等。mmAP也有很多特点,比如FP未必就是没用的……不过,虽然mmAP很经典,但它也有体现不出来的要素,比如分数密度等。总而言之,mmAP是非常值得深入思考和研究的,辩证地看待它、使用它,才能由表及里的设计出优秀的目标检测算法。

关于我门

将门是一家以专注于发掘、加速及投资技术驱动型创业公司的新型创投机构,旗下涵盖

将门创新服务、将门技术社群以及将门创投基金。将门成立于2015年底,创始团队由微软创投在中国的创始团队原班人马构建而成,曾为微软优选和深度孵化了126家创新的技术型创业公司。

将门创新服务

专注于使创新的技术落地于真正的应用场景,激活和实现全新的商业价值,服务于行业领先企业和技术创新型创业公司。

将门技术社群

专注于帮助技术创新型的创业公司提供来自产、学、研、创领域的核心技术专家的技术分享和学习内容,使创新成为持续的核心竞争力。

专注于投资通过技术创新激活商业场景,实现商业价值的初创企业,关注技术领域包括

机器智能、物联网、自然人机交互、企业计算。

在近四年的时间里,将门创投基金已经投资了包括量化派、码隆科技、禾赛科技、宽拓科技、杉数科技、迪英加科技等数十家具有高成长潜力的技术型创业公司。

如果您是技术领域的初创企业,不仅想获得投资,还希望获得一系列持续性、有价值的投后服务,欢迎发送或者推荐项目给我门: bp@thejiangmen.com

如果你需要完成一件事,那么你要让忙的人去做。做得越多的人,能力越强。

免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186
TAGS标签更多>>