OCR概述和CRAFT

2024-03-17 14:18
文章标签 概述 ocr craft

本文主要是介绍OCR概述和CRAFT,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    基于候选框的文本检测框架是在通用物体检测的基础上,通过设置更多不同长宽比的锚框来适应文本变长的特性,以达到文本定位的效果。例如基于经典的 Faster R-CNN 所衍生出来的 Facebook 大规模文本提取系统 Rosetta[34]、基于 SSD 框架的 SegLink[35]和 TextBoxes++[36]等。
    基于像素分割的文本检测框架首先通过图像语义分割获得可能属于的文本区域的像素,之后通过像素点直接回归或者对文本像素的聚合得到最终的文本定位。例如基于 FCN 的 TextSnake[37]、由 Mask R-CNN 所衍生的 SPCNet[38]和 MaskTextSpotter[39]等。

    基于候选框的文本检测对文本尺度本身不敏感,对小文本的检出率高;但是对于倾斜角度较大的密集文本块,该方法很容易因为无法适应文本方向的剧烈变化以及对文本的包覆性不够紧密而检测失败。此外,由于基于候选框的检测方法是利用整体文本的粗粒度特征,而非像素级别的精细特征,它的检测精度往往不如基于像素分割的文本检测。基于像素分割的文本检测往往具有更好的精确度,但是对于小尺度的文本,因为对应的文本像素过于稀疏,检出率通常不高,除非以牺牲检测效率为代价对输入图像进行大尺度的放大。

    近些年end to end的方法例如CRNN或者下面介绍的CRAFTS(Character Region Attention For Text Spotting),最终输出一般还需要接一个CTC来完成序列到序列的变换

---------------------------

一、引言

近年来自然场景文本检测的算法大致可以分为文本框位置预测和图像分割两种思路,感兴趣的朋友可以看之前我写的一篇综述:

坚果粥:自然场景文本检测识别 - 综述 - Part II62 赞同 · 1 评论文章正在上传…重新上传取消

图像分割的方案由于不假设文本框为矩形,因而在不规则文本的检测上更胜一筹。由于文本行内的字符之间存在间隙,因此字符相比于文本框是更基本的图像分割单元。然而,字符框的标注成本太高而难以获得,所以大多数图像分割的检测算法(如PixelLink)退而求其次,以文本行作为分割单元。

以文本行作为分割单元,图片取自[3]

Character Region Awareness For Text detection (CRAFT)是2019年4月由navercorp的学者提出的文本检测模型。这篇文章最大贡献是它创新的提出了一种弱监督模型,可以在真实样本只有文本行标注的情况下,做字符尺度的图像分割。CRAFT在多个数据集上达到了SOTA的准确率,并且保持了很不错的运算速度,下面我对它做一个详细的介绍。

算法准确性和速度,图片取自[1]

二、模型架构

CRAFT的骨干卷积网络是VGG16,在此基础上作者使用了类似于U-net的结构,浅层和深层的卷积特征相结合作为输出,有效的保留了浅层的结构特征和深层的语义特征,这一思想已被广泛应用于各种STR检测模型。在U-net之后,网络增加一系列层卷积操层,最终的1x1卷积层使用两个卷积核输出两个分支结果,第一支为各像素点处于字符中心的概率(位置分),第二支为各像素点处于字符间隙的概率(邻域分)。通过这两层输出,我们可以分别得到字符位置和字符间连接情况,进而将结果整合为文本框。

CRAFT网络架构,图片取自[1]

以往的工作中,图像分割的标注往往非0即1,即某个像素点要么处于文本行内,要么处于文本行外。然而,即便处于文本行内的像素点,也存在中心和边缘的区别。在CRAFT中,图像分割的标注是一个连续的二维高斯分布,位于字符框中心的像素点有较高的位置分,而位于字符框边缘的像素点位置分较低,从而模型充分利用了像素点的位置信息。由于字符框通常为不规则的四边形,具体操作中,CRAFT需将二维标准高斯分布变换到字符框四边形中,如下图Score Generation Module所示。

具有高斯分布的位置分与邻域分标注,图片取自[1]

获取邻域分标注时,我们首先将字符框四边形的对角线相连,如上图左侧Affinity Box Generation中蓝色实线所示。接着,我们分别找到上下两个三角形的重心(蓝色十字),两个相邻的字符共有四个三角形重心,我们将它们组成的四边形定为邻域框。最后,我们用之前位置分相同的方法,生成邻域框内的高斯分布,从而得到了邻域分。最终的结果可见上图最右侧的heat map。

三、弱监督学习

如何从文本框标注获得可靠的字符框标注是本文的最大亮点。CRAFT采用了弱监督学习的方法,有效的解决了这个问题。在训练初期,我们使用的训练集为合成的非真实图片,合成图片中具有字符框准确的标注信息,因而可以直接使用。合成图片与真实图片的数据特征有相似之处但又不完全相同,其可以为模型训练提供有限的帮助。当模型具有一定预测能力后,我们再开始使用真实图片。

合成图片,图片取自[1]

由于真实图片缺乏字符框标注,文章中采取了以下的训练方案:首先我们将文本行截取出来,利用当前训练好的模型预测每个像素点的位置分;接着从位置分的分布中,我们可以分离出来当前模型判断的字符框数量和位置,并利用这些字符框作为标注回头来训练模型。由于此时模型预测的字符框准确性并没有保证,在计入损失函数时,我们需要为对应的损失乘以一个置信概率。需要注意的是,实际的字符数量(文本标注长度)是已知的,未知的仅仅是字符框的位置。因此,我们可以利用预测和实际的字符数量的差来衡量预测的准确性,即置信概率=1-字符数差/实际字符数量。例如下图中,三个文本行的置信概率分别为6/6,5/7和5/6。需要注意的是,为了保证这种训练模式的有效性,作者在这一步训练中也掺入了较低比例(1:5)的具有准确字符框标注的合成图片。

弱监督学习示意图,图片取自[1]

为了验证这种训练模式的有效性,作者观察了训练过程中模型表现的变化情况,如下图。可以看到,在训练过程的前几个epoch,模型预测结果很糟糕;但是随着训练的不断进行,模型的效果明显的提升,逐渐可以区分开不同的字符,从而证明了弱监督学习的有效性。这也说明了文本行中的字符数量是一个很强的判断指标,在CRAFT中得到了巧妙的应用。

模型效果随训练的提升,图片取自[1]

四,文本框生成

在得到了所有像素点的位置分和邻域分以后,我们还需要将结果整合为最终的文本框作为输出。文章中作者对位置分和邻域分分别设定了一个阈值,将两者中至少有一方高于阈值的像素点标为1,其他标为0,然后将所有相连的值为1的像素定为一个文本目标。在需要矩形文本框的任务中,我们找到一个面积最小的包围整个目标的矩形作为输出;在需要多边形文本框的任务中,我们可以根据每个字符的中心点和宽度构造一个多边形,如下图所示。

矩形和多边形文本框预测,图片取自[1]

五、总结

综上所述,CRAFT在没有字符框标注的情况下,巧妙的利用弱监督学习的方法训练字符分割模型,在文本检测任务中达到了SOTA的准确率。另外,CRAFT还保持了良好的运算速度,并且可以检测汉字。

在自然场景中汉字检测识别任务中,CRAFT比起Attention OCR中的Cascade Mask RCNN速度提升了一倍,极大的缩短了推断时间。当然,在使用CRAFT默认参数的测试中,它也存在少许的文本遗漏情况。

CRAFT作者已将代码和预训练模型公开在github上,感兴趣的朋友可看链接:https://github.com/clovaai/CRAFT-pytorch

最后,由于我水平有限,如果大家有什么问题和建议,欢迎在评论区指出~

看到这里了,点赞关注一下吧!

这篇关于OCR概述和CRAFT的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/819194

相关文章

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

Java 多线程概述

多线程技术概述   1.线程与进程 进程:内存中运行的应用程序,每个进程都拥有一个独立的内存空间。线程:是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换、并发执行,一个进程最少有一个线程,线程实际数是在进程基础之上的进一步划分,一个进程启动之后,进程之中的若干执行路径又可以划分成若干个线程 2.线程的调度 分时调度:所有线程轮流使用CPU的使用权,平均分配时间抢占式调度

Spring Boot集成Tess4J实现OCR

1.什么是Tess4j? Tesseract是一个开源的光学字符识别(OCR)引擎,它可以将图像中的文字转换为计算机可读的文本。支持多种语言和书面语言,并且可以在命令行中执行。它是一个流行的开源OCR工具,可以在许多不同的操作系统上运行。Tess4J是一个基于Tesseract OCR引擎的Java接口,可以用来识别图像中的文本,说白了,就是封装了它的API,让Java可以直接调用。 Tess

java集合的概述

集合就是一个容器,我们可以把多个对象放入的容器中。就像水杯(假设容量可以不断扩大)一样,你可以往水杯中不断地添加水,既然是水杯,你就不能往里添加沙子,也就是说集合中添加的对象必须是同一个类型的(引用类型,而不能是基本类型)。 看到集合的介绍会让我们的想起数组,那么集合和数组有什么区别呢? 首先,数组的大小是固定的,而集合理论上大小是不限的。 其次,数组既可以存储基本数据类型的数据,也可以存储

【CSS in Depth 2 精译_023】第四章概述 + 4.1 Flexbox 布局的基本原理

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对单位的威力2.2 em 与 rem2.3 告别像素思维2.4 视口的相对单位2.5 无单位的数值与行高2.6 自定义属性2.7 本章小结 第三章 文档流与盒模型(已

《计算机视觉工程师养成计划》 ·数字图像处理·数字图像处理特征·概述~

1 定义         从哲学角度看:特征是从事物当中抽象出来用于区别其他类别事物的属性集合,图像特征则是从图像中抽取出来用于区别其他类别图像的属性集合。         从获取方式看:图像特征是通过对图像进行测量或借助算法计算得到的一组表达特性集合的向量。 2 认识         有些特征是视觉直观感受到的自然特征,例如亮度、边缘轮廓、纹理、色彩等。         有些特征需要通

Unity Adressables 使用说明(一)概述

使用 Adressables 组织管理 Asset Addressables 包基于 Unity 的 AssetBundles 系统,并提供了一个用户界面来管理您的 AssetBundles。当您使一个资源可寻址(Addressable)时,您可以使用该资源的地址从任何地方加载它。无论资源是在本地应用程序中可用还是存储在远程内容分发网络上,Addressable 系统都会定位并返回该资源。 您

推荐一款强大的OCR软件,请低调使用!

今天给大家分享一款开源的OCR识别软件,可以提升大家的办公效率——Umi-OCR,支持window​和Linux系统。 Umi-OCR支持提取一张图片或者多张图片的信息,只需通过右边的功能页选择相应的功能。 点击左边的“截图OCR”进入页面 点击“截图”按钮选取截图区域,直接在右边的记录中​提取出截图中的信息。 批量OCR功能也一样,点击左边菜单的“批量OCR”菜单