ICDAR2013文本检测算法的衡量方法(二)Rectangle Matching与DetEval

来源:互联网 发布:java线程与进程的区别 编辑:程序博客网 时间:2024/06/16 03:55

这是第二部分,第一部分请点击 ICDAR2013文本检测算法的衡量方法(一)Evaluation Levels



主要内容:

  • Rectangle Matching, 或者bbox matching
  • ICDAR2013 Foucsed Image 文本检测任务的evaluation方法



若无特别说明,接下来说的:

  • evaluation/衡量方法都是只针对text localization算法;
  • text detection 与 text localization 不作区分
  • bounding box, bbox, rectangle不作区分

Detection with bbox

上一篇已经讲过, evaluation方法有四个level:

  1. pixel feature discriminace
  2. pixel classification
  3. detection at rectangle
  4. target oriented

在文本检测领域, 3和4(end2end evaluation)是最常用的。

对以水平文本为主体的text detection任务以及general的object detection任务来说, 用矩形框来表示检测结果是最方便最实用也是最广泛的方法。ICDAR2013就是如此。(但ICDAR2015不是)


evaluation问题描述

Evaluation问题的输入:

  1. D, 要衡量的检测算法输出的bbox集合.
  2. G, Ground Truth bbox集合.
  3. Di,Gj分别代表D,G 的一个元素
    输出: 对D的质量评估。

目前为止,我所了解的evaluation方法(object detection和text detection) 都有recall和precision的计算。得到这两个值后,object detection的evaluation会计算mAP, 而text detection的evaluation则计算F-mean.

所以,对文本检测的evaluation来说, 不同的方法的不同之处主要在于如何计算recall与precision,而recall与precision的计算关键在于如何决断两个bbox是否match。

Matching of two bboxes

判断两个bbox是否match是一个可以简化但并不是一个简单的问题。存在三种match方式,如下图所示:
这里写图片描述
实线框代表ground truth,虚线框代表检测算法的输出。

  1. 一对一的match,如(a)所示。
  2. 一对多的match,如(b)所示,ground truth 粒度大于detection 粒度时出现的情况。
  3. 多对一的match,如(c)所示,detection的粒度大于ground truth的粒度。
  4. 多对多的match,图中没有画出。
    不同的evaluation方法的不同的根源就在于对这三种match的处理方式不同

Evaluation in ICDAR2003,只考虑一对一的match

只考虑一对一的match是最简洁最简单最粗暴的方式, ICDAR2003就采用了这种方式。
这里写图片描述
图中的公式(6)计算Recall与Precision,都用到了BestMatch
给定一个bbox b, 例如Gi, 和一个bbox list (就是之前的set,注意, 不是数学意义上的无序set)B, 例如DBestMatch方法输出一个0到1之间的值, 代表bB的匹配得分。 若B中有与b完全重合的bbox,则输出最大值1;若B中的bbox与b没有任何重合, 则输出最小值0。

(7)中 BestMatch的分式计算形式看起来跟F-mean很相似。实际上它就是一个F-mean/调和平均数(Harmonic Mean)。可以定义基于面积的、bbox适用的recall 与precision:

R(Gi,Dj)=Area(GiDj)Area(Gi)

P(Gi,Dj)=Area(GiDj)Area(Dj)

MatchScore(Gi,Dj)=2R(Gi,Dj)P(Gi,Dj)R(Gi,Dj)+P(Gi,Dj)=2Area(GiDj)Area(Gi)+Area(Dj)

BestMatch(Gi,D)=maxjMatchScore(Gi,Dj)

DetEval——Evaluation in ICDAR2013,考虑了三种match方式

只考虑one-one match虽然简化了问题, 却不大合理。特别是当ground truth标注粒度太大时,例如一个bbox里可能包含多个word,即使人家的算法把对应的一个个word都正确的框出来了,也只能得到一个很低的分数。
ICDAR2013则使用了新evaluation方法:DetEval,也就是十几年前Wolf提出的方法。“新方法”同时考虑了一对一,一对多,多对一的情况, 但不能处理多对多的情况。(作者说,实验结果表示在文本检测里这种情况出现的不多。)
下面分步描述DetEval的算法要点。

计算recall matrix与precision matrix

recall 与precision两个矩阵分别用στ表示,它们都是|G|×|D|的矩阵,每一行代表一个Gi, 每一列代表一个Dj:

σij=R(Gi,Dj)

τij=P(Gi,Dj)

这两个矩阵合在一起也称为overlap matrices. i,j位置上的元素值不为0就代表Gi,Dj 之间有重合。

利用σ,τ表示三种match

tr,tp[0,1]分别为σ,τ的阈值。算法能表示除了many-to-many以外的三种match方式:

  • one-to-one: 一个Gi只与一个Dj匹配
    • Gi的大部分范围只被Dj检测出来:σ的第i行只有σijtr
    • 只有Dj检测Gi的precision符合要求: τ的第j列只有τijtp
  • one-to-many(splits): GiD的一个元素数量大于1的子集Do检测出来:
    • Do中的每个元素都能一定准确度检测出Gi的一部分:τijtp,jDo
    • Gi的大部分范围被So检测出来: jSoσijtr
  • many-to-one(merges) : G一个元素个数大于1的子集Go被一个检测结果Dj检测出来
    • Go中的每个元素都有一定比例的面积被检测出来:σijtr,iGo
    • Dj 以一定准确度检测出GoiGoτijtp

根据以上规则可以定义bbox的匹配函数:
这里写图片描述
这两个匹配函数的特点是:

  1. 不惩罚one-one match。只要匹配的recall与precision都大于各自的阈值就行。它与ICDAR2003又有不同:ICDAR2003的考虑one-one match时是以soft方式计算recall与precision,不取阈值,所以ICDAR2003虽然只考虑one-one match,但根据match的好坏会有不同的惩罚。
  2. fsc(k)中的k是many-to-one或one-to-many里many的具体数值, 下标sc代表scatter。fsc(k)可以是一个0到1之间的常数(作者的做法),也可以是一个关于k的函数, 例如fsc=11+ln(k)

计算单张图片与多张图片上的recall 与precision

先考虑单张图片:
这里写图片描述
它的最大特点就是增加了两个输入参数:tr,tp.

然后考虑多张图片。假设图片数量为N,第k张图片的ground truth与检测结果分别为Gk,Dk, 则整体的recall与precision计算方式为:
这里写图片描述
它的最大特点是文本多的图片对结果有更大的影响力。

最终的recall 与precision

到目前为止,取定两个阈值tr,tp之后就可得到我们想要的整体recallprecision了。ICDAR2013就是使用了这个计算方法。
对应的DetEval软件包命令:

evalfixed det.xml gt.xml

但是,很明显,tr,tp的选择直接影响对检测算法的评分。
* 以tr,tpx,y轴, recall/precisionz轴, 可以得到两个3D的函数图像。 固定tr,tp中的一个, 可以得到2D函数图像。作者说它们可以用于更深入的分析算法性能, 但个人觉得并没有提供太多参考信息。
* 最终的recall与precision是采用与mAP类似计算方式:
这里写图片描述

ICDAR 2013与Deteval

  • ICDAR2013 Task1的evaluation页面提供了ICDAR2013Deteval两种evaluation选择。前者是ICDAR根据Deteval 论文实现的代码,与paper作者的实现有细微差别,具体见http://rrc.cvc.uab.es/?ch=2&com=faq 。
  • 它们使用了相同的参数tr=0.8,tp=0.4,这样做的目的是为了加大对只检测出一部分文本区域的结果的惩罚,因为这种检测结果无法识别。
  • 因为ICDAR2013的ground truth已经是word level的,所以衡量算法对one-to-many(检测结果将一个word分成了好几个bbox)的惩罚要大于many-to-one(将多个word用一个bbox框出来)。事实上,对后者没有惩罚。即:fsc(k)=0.8 for one-to-many, fsc(k)=1 for many-to-one
    这一点还是很合理的。

References

  • 见 ICDAR2013文本检测算法的衡量方法(一)Evaluation Levels 的References
  • ICDAR FAQ
2 0
原创粉丝点击