中文文字检测与识别的评测方法

评测代码github地址
如果对您有所帮助请star一下,谢谢

这是我将下面介绍的两种方法的代码合并了,并且该了一些原有的bug,如-p参数不能用等,还加了end to end的识别结果的评测方法。

检测部分

在ICDAR的一个答疑网页(F.A.Q)中有相关介绍,其中文本定位分为几个挑战,分别称为Challenges 1、Challenges 2和Challenges 4,不同的挑战有不同的评价方法。

下面先简单介绍一下这三个挑战:
Challenges 1(Born-Digital)的数据来源于电脑制作的,而Challenges 2和Challenges 4(Real Scene)的数据要源于摄像机的拍摄。其中Challenges 2主要是来源于用户有意识的对焦拍摄的(focused text)比如一些翻译的场景,这些场景中文字基本是对焦好的且水平的,Challenges 4主要来源也是用户拍摄的,但是这些照片的拍摄是比较随意的(incidental text)这样会导致图片里的文字角度、清晰度、大小等情况非常的多。

针对不同的挑战,评价检测算法的方法就不相同:

  1. Challenges 1和2使用的是叫做 DetEva的方法,该方法来自2006年C. Wolf的一篇文章《Object Count / Area Graphs for the Evaluation of Object Detection and Segmentation Algorithms》,ICDAR自己实现了一套DetEva方法(下载地址)

  2. Challenges 4使用的是简单的通过IoU来判定算法的recall、precision的。(下载地址)
    注意:必须先注册才能下载

下面讲一下两个评测方法:

一、Challenges 1和2使用的评测方法(即DetEva)

1.png

如上图所示,文章考虑三种情况来判断标定框与检测框是否匹配(match):

  • 一对一的match,如(a)所示
  • 一对多的match,如(b)所示,ground truth 粒度大于detection 粒度时出现的情况。
  • 多对一的match,如(c)所示,detection的粒度大于ground truth的粒度

注意:这里的框无论是标定框还是检测框都认为是水平的矩形框,且该评测方法并不考虑多对多的情况。

具体做法(对于每张图像)

  1. 创建n\times m大小的两个矩阵分别叫做recallMat、precisionMat,其中n为标定框(ground truth)的个数,m为检测到的框个数

    a) recallMat中存储的是每个检测框的召回率,计算方法为recallMat_{i,j}=\frac {area(inter(gt_{i},det_{j}))}{area(gt_{i})},其中area()函数表示求矩形的面积,inter()函数表示求两个矩形的交集,gt_{i}表示第i个标定框,det_{j}表示第j个标定框

    b) precisionMat中存储的是每个检测框的准确率,计算方法为precisionMat_{i,j}=\frac {area(inter(gt_{i},det_{j}))}{area(det_{j})},其中的符号定义同上

  2. 在考虑三种情况之前,先要定义两个域值这里称为r和p,r表示判断召回率的阈值这里设为0.8,p表示判断准确率的阈值这里设为0.4,recall用来存储召回率,precision用了存储准确率

  3. one-to-one matches,如果在recallMat和precisionMat中的i行只有一个值大于阈值,j列中也只有一个值大于阈值,且这个值在第i行第j列,那么就认为gt_{i}det_{j}是one-to-one matches。如果gt_{i}det_{j}满足一定的条件就将recall和precision加1

    a) 这里说的一定条件是指两个框的中心点距离与两个框对角线平均值的比例要小于阈值1

  4. one-to-many matches,对于precisionMat中如果i行中有多个值大于p,将对应于recallMat位置的值相加(比如precisionMat_{i,j}大于p则将recallMat_{i,j}相加),用最后的和与r比较,如果大于r就符合one-to-many matches的条件,one就是gt_{i},many就是i行中所有大于p值的列对应的框。如果满足one-to-many matches就将recall加0.8,precision加0.8\times xx表示对应与gt_{i}匹配的所有many框的个数(说白了就是many的具体值)

  5. many-to-one matches,这里与one-to-many matches类似,只是先判断recallMall中j列,如果j列中有大于r的值,则将对应于precisionMat位置的值相加,用最后的和与p比较,如果大于p就认为符合many-to-one matches的条件,one就是指det_{j},many值的是j列中所有大于r值对应的框。如果满足many-to-one matches就将recall加1*y(与上述x相同,y表示many的具体值),precision加1

  6. 最后用recall除以所有的gt个数(这个个数不是n,n代表该张图片所有标定框的个数,但是计算的时候会将文本标定为###的框去除),同理precision也会除以所有的det的个数(这个个数也不为m,如果有检测框检测到###区域,这个检测框也认为无效)。f-score也就是hmean算法为recall和precision的调和平均数。

这里要说明一下的是,为什么有时候recall和precision加1有时候加0.8,可以认为是对不同匹配结果的惩罚。还有上面说明的是一张图片的recall和precision计算方法,如果是整个数据集也是类似,只是先将第5步求出的recall和precision相加最后除以整个数据集的gt个数和det个数。

到这里Challenges 1和2使用的评测方法就讲完了

二、Challenges 4使用的评测方法
不同于Challenges 1和2的是Challenges 4标定的框多种多样,并不是水平的,如果像之前那样可能各种匹配形式会很复杂,Challenges 4的评测方法采用简单的计算IoU来进行评测,在Challenges 4中标定框与检测框都为多边形而不是之前的水平矩形了。

具体做法(对于每张图像)

  1. 创建n\times m大小的一个矩阵叫做iouMat,其中n为标定框(ground truth)的个数,m为检测到的框个数

    a) 计算方法为iouMat_{i,j}=\frac {area(inter(gt_{i},det_{j}))}{area(union(gt_{i},det_{j}))},公式中的符号与之前描述一样,union表示两个多边形的并集

  2. 定义IoU阈值0.5

  3. 在iouMat中,统计大于0.5的个数,将这个值除以gt个数(这里的gt个数同上,除去了文本标定为###的框)得到recall,除以det的个数(这个个数也同上)得到precision。到这里就求出了recall和precision,但是Challenges 4还增加了map的指标

  4. 如果要计算ap(average precision)那么在检测的输出结果中要输出一列每个检测框的置信度,首先将置信度排序,每有一个符合条件(这里的条件就是3中大于0.5的检测框)的框,计算此时的准确率(计算方法为当前满足条件的框的个数除以已检测出的框的个数),将所有满足条件的框计算出来的准确率相加,最后除以除以gt个数(这里的gt个数同上,除去了文本标定为###的框),得到每张图片的ap指标。若要算整个测试集的map,同理,只是框个数变成的整个测试集的框个数。
    这里对于ap的计算可能难理解,这里ap计算的方法类似于Pascal VOC challenge,在Pascal VOC challenge中,ap的计算方法为,假设有N个样本中有M个正例,那么我们会得到M个recall值(1/M, 2/M, …, M/M),对于每个recall值r,我们可以计算出对应(r’ > r)的最大precision,然后对这M个precision值取平均即得到最后的AP值。

要说明的是,如果检测到的是长文本,但是标定的是单个字,这时候检测可能会算为检测不准确,这是这个评测方法的缺陷

到这里Challenges 4使用的评测方法就讲完了

识别部分

这部分采用的是RCTW的方法,使用平均编辑距离进行评测

Reference
[1] https://sanchom.wordpress.com/tag/average-precision/
[2] http://rrc.cvc.uab.es/?com=contestant

欢迎加入OCR交流群:785515057(此群已满)
欢迎加入OCR交流群2:826714963

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容