当前位置: 首页 > news >正文

论文解析——Character Region Awareness for Text Detection,字符级文本检测CRAFT算法

这篇论文来自CVPR2019,paper地址:Character Region Awareness for Text Detection。
代码:CRAFT-pytorch。

这篇论文主要解决之前的文本检测是基于word-level的检测框,不能识别任意形状的文本的问题。与之前的方法不同,此方法的主要特点是针对文本的检测是字符级的,同时还会学习字符间的affinity(字符间的亲和性,表示字符之间的关系,这种亲和性帮助算法将相邻的字符组合成单词或文本行)。CRAFT 是一种基于字符区域感知的文本检测方法,它不仅关注单个字符的检测,还关注字符之间的关系。这样做的好处在于:使用小感受野也能预测大文本和长文本,只需要关注字符级别的内容而不需要关注整个文本实例。

基于character-level(字符区域)检测有两个难点:

  1. 如何确定哪些字符是连接在一起组成文字的,而哪些字符是分离的;
  2. 数据标注问题,因为当前的数据集都是文字级别(word-level)的标注。

paper主要围绕解决这两个问题展开。

1. 确定哪些字符是连接的

字符检测:本文使用的网络使用了目前关键点检测中常用的网络结构,即采用预测热图的方式来进行检测关键点,那么在这里我们就可以把每个字符当做一个关键点,所以每个字符其实对应着一个热点,只要预测每个文字所对应的热点那么就可检测出每个字符。

字符连接的识别:字符的检测方法有了,要怎么知道哪些字符是组成一个文字的呢?作者也使用热图的方式来表示文字的连接,如果两个字符是相连接的,那么这两个字符之间就有一个热点,利用热点图来确定两个字符是不是一组的。

热点就代表着一个响应,如果图片中的某个地方有热点响应,那么表示这个地方存在我们需要的信息,热点的值的大小就代表着置信度,如果置信度越高,那么越确定。

2. 数据集构造

CRAFT之前,现有的文本数据库,其标注方式基本是基于文本行的(word-level),所以文中提出了利用合成数据加从真实数据中得到chatacter-level的估计GT的弱监督方法。

我们看一下网络的构造。

特征提取的主干网络采用的VGG-16以及batch normalization,解码器部分采用了U-net的方法,采用自顶向下的特征聚合方式,最终输出两个通道:region score map和affinity score map,分别为单字符中心区域的概率和相邻字符区域中心的概率,得到原图大小1/2的预测图。

我们再来看一下数据集的构造。首先是合成数据集的处理。

合成的数据集是通过字符的bounding box和affinity的box来表示的。但是CRAFT是使用热度图来表示信息的。使用热度图来表示信息有如下的好处:对于GT区域不是能够严格框住的场景,使用高斯热度图会更加灵活一些。

从bounding box到高斯热度图的处理过程中,由于我们拍摄的物体,图像的边界框会由于相机的透视投影关系而发生扭曲,因此首先要对其进行矫正。矫正的方法就是如图先使用一个二维各向同性高斯图,然后计算高斯映射区域与各字符框之间的透视变换,最后,利用上一步计算的透视变换,将高斯图变形到字符框所在的区域。这样,即使字符框因为透视效果而扭曲,生成的高斯热度图也能准确地映射到字符的实际区域上。这个变形的高斯图就作为 region score 的真实标注。

上面说的是数据处理中的一部分,合成数据到character-level高斯热度图gt的过程。数据处理的另一部分是使用真实数据集。

请添加图片描述

上图是整个工程的训练流程。其中包括了真实数据集到character-level的高斯热力度的过程。

真实数据集通常都是word-level的标注,就是bounding box都是标注在一整个单词上面的,没有针对一个单词里面每个字符进行标注。因此作者使用弱监督训练的方法,从word-level的真实数据集生成chatacter-level的标注。

模型首先使用前面介绍的合成数据集进行训练,这时候得到一个model,已经具备初步的character-level的识别能力。然后使用这个interim model去预测从word-level的真实数据集到character-level的字符区域。

但是这时候模型只在合成数据集上训练过,因此其预测真实数据集的能力还不够好,其预测的character-level的字符区域有可能不准确,因此作者加上了一个置信度map去评测网络预测真实数据集的结果的可信度。置信度的计算是用网络预测出来的字符个数除以gt的字符个数。(在大多数数据集中,提供了单词的转录,单词的转录信息中包含了字符的个数)。

请添加图片描述

上图表达的是从word-level生成character-level字符框的全过程。首先把字符区域从图像中抠出来,然后使用合成数据集训练的模型去预测字符区域的score,然后使用分水岭算法去分割字符区域,然后把字符区域再转换回原图上。

在CRAFT(Character Region Awareness for Text Detection)算法中,使用高斯热度图(Gaussian heatmap)和分水岭算法(Watershed algorithm)来生成字符级别的字符框(character-level bounding boxes),而不是直接从高斯热度图生成字符框,主要有以下几个原因:

  1. 高斯热度图的连续性:高斯热度图提供了一个连续的概率分布,表示字符中心的概率密度。这种连续性使得热度图在表示精确的字符边界时不够明确,因此需要进一步的处理来确定字符的实际边界。

  2. 字符区域的分割:分水岭算法是一种有效的图像分割技术,可以将连续的区域分割成独立的部分。在CRAFT中,分水岭算法用于将高斯热度图中的连续文本区域分割成单独的字符区域,从而生成更精确的字符框。

  3. 处理复杂形状:文本在自然场景中可能出现各种形状和方向,直接从高斯热度图生成字符框可能难以适应这些复杂形状。分水岭算法能够更好地处理这些不规则形状,生成更准确的字符框。

  4. 弱监督学习:CRAFT中使用弱监督学习方法来生成字符级别的标注。分水岭算法生成的字符框可以作为弱标注信息,用于训练和优化模型,尤其是在真实数据集中缺乏精确的字符级标注时。

  5. 提高鲁棒性:分水岭算法能够处理文本区域中的噪声和不连续性,提高生成字符框的鲁棒性。这对于提高文本检测算法在复杂场景中的性能至关重要。

  6. 利用现有标注:在一些数据集中,可能只有单词级别的标注而没有字符级别的标注。通过使用分水岭算法,可以从这些单词级别的标注中生成字符级别的标注,从而扩展数据集的可用性。

  7. 生成高质量的训练数据:生成高质量的训练数据对于训练深度学习模型至关重要。分水岭算法可以帮助生成更准确和一致的字符框,从而提高模型的训练效果。

总之,CRAFT算法中结合使用高斯热度图和分水岭算法,是为了更好地处理文本检测中的复杂性和不确定性,生成更精确和鲁棒的字符框,从而提高文本检测的性能。这种方法在处理不规则文本和缺乏精确标注的数据集时尤其有效。

通过训练过程的图示,在使用弱监督时,由于需要使用估计的GT,如果估计的GT字符的区域不准确,会导致模型的输出有模糊。所以在训练中,需要对估计的GT进行质量评估。

作者使用下面的置信度分数来作为loss对不同质量的估计GT采取不同的权重。

其中,w是训练集中的一个word-level的sample,R(w)是bounding box的区域,l(w)是单词的长度,lc(w)是估计GT的字符长度。如果真实的字符长度与估计的相同,那么Sconf(w)就是1。

完整的loss计算公式为上面的公式。其中Sc§的计算公式如下,只有在使用word-level的真实数据集训练时,才会让Sc§参与权重计算。当使用合成数据集时,由于可以获得准确的GT,所以Sc§一直为1。

Sr§和Sa§分别代表估计GT的region score和affinity map。Sr§和Sa§是模型预测的region score和affinity score。


从客观指标上看,CRAFT算法在文本是规则四边形的数据集和不规则的弯曲形状的数据集上测试,都得到了SOTA的结果。

请添加图片描述

从主观效果上,也是很完美的结果。

相关文章:

论文解析——Character Region Awareness for Text Detection,字符级文本检测CRAFT算法

这篇论文来自CVPR2019,paper地址:Character Region Awareness for Text Detection。 代码:CRAFT-pytorch。 这篇论文主要解决之前的文本检测是基于word-level的检测框,不能识别任意形状的文本的问题。与之前的方法不同&#xff0…...

基于飞腾平台的Kafka移植与安装

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适…...

【Python数据结构与算法】递归----算24

题目:算24 描述 给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。现在的问题是,是否存在一种方式使得得到的表达式的结果等于24。 这里加减乘除以及括号的运算结果和运算的优先级跟我们平常的定…...

TOSHIBA东芝代理商--芯智雲城,提供订货、报价、选型等服务!

关于东芝 东芝创立于1875年7月,是日本大型半导体制造商,全球知名的综合机电制造商和解决方案提供者,世界大型综合电子电器企业集团。东芝集团原名东京芝浦电气株式会社,在1939年东京电器与芝浦制作所正式合并成为现在的东芝&…...

sdwan

分支互联网络解决方案 - 华为企业业务 分支互联网络解决方案 随着5G、AI、物联网等新兴技术与云紧密结合,企业业务智能化和云化加速。 企业分支WAN流量激增,传统以MPLS专线为主的广域互联网络难以支撑业务发展。SD-WAN成为应对云时代的必然选择。 SD…...

Linux: network: 建立socket以及设置nonblock/opt所需的时间

最近在扩大socket数量的时候发现程序在完成所有的socket创建设置的时间不短。单线程下。 创建socket的步骤是,(调用glibc/system call的接口): socket bind fcntl (sock, F_SETFL, flags); setsockopt 通过测试发现这几个步骤前后…...

git使用及代码规范

参考链接 git flow 简介代码审核的典型问题gitlab工作流...

职业教育大数据实验实训室建设应用案例

大数据作为一种重要的信息技术,对各行各业产生了深远的影响。职业教育作为培养应用型人才的摇篮,建设大数据实验实训室,对于提高学生的数据分析能力和解决实际问题的能力具有重要意义。唯众作为一家专注于教育技术领域的企业,凭借…...

【Academy】反序列化漏洞Insecure deserialization

反序列化漏洞Insecure deserialization 什么是序列化?序列化与反序列化什么是不安全的反序列化?不安全的反序列化漏洞是如何产生的?不安全的反序列化有什么影响?识别不安全的反序列化漏洞PHP序列化格式Java序列化格式 利用不安全的…...

【轨物推荐】康波、世界体系与创新范式:中国如何引爆新一轮产业革命

原创 邵宇、陈达飞 新财富 2019年12月31日 22:13 中美关系近两年备受关注,在诸多方面各方都已经形成了共识,但竞争博弈的结局富有争议性。当靠事物太近的时候,反而很难看清楚其面貌,使用康德拉季耶夫周期(简称“康波”…...

[HCTF 2018]admin1

打开题目 尝试登陆 admin,123,直接试出来了 有投机取巧的成分,到github查看源码,也能找到用户名密码...

【Qwen-Audio部署实战】Qwen-Audio-Chat模型之对话机器人部署测试

系列篇章💥 No.文章1【Qwen部署实战】探索Qwen-7B-Chat:阿里云大型语言模型的对话实践2【Qwen2部署实战】Qwen2初体验:用Transformers打造智能聊天机器人3【Qwen2部署实战】探索Qwen2-7B:通过FastApi框架实现API的部署与调用4【Q…...

第一百八十五节 Java XML教程 - Java DOM简介

Java XML教程 - Java DOM简介 DOM是标准的树结构,其中每个节点包含来自XML结构的一个组件。 XML文档中两种最常见的节点类型是元素节点和文本节点。 使用Java DOM API,我们可以创建节点,删除节点,更改其内容,并遍历节…...

一款功能强大且免费的图片查看和管理工具

XnView MP是一款功能强大且免费的图片查看和管理工具,支持多种平台(Windows、Mac和Linux),并基于相同的源代码实现统一的用户界面和体验。它不仅能够查看各种图片格式,还提供了丰富的编辑和管理功能。 图片查看与浏览…...

动手学强化学习 第 11 章 TRPO 算法(TRPOContinuous) 训练代码

基于 Hands-on-RL/第11章-TRPO算法.ipynb at main boyu-ai/Hands-on-RL GitHub 理论 TRPO 算法 修改了警告和报错 运行环境 Debian GNU/Linux 12 Python 3.9.19 torch 2.0.1 gym 0.26.2 运行代码 TRPOContinuous.py #!/usr/bin/env pythonimport torch import numpy a…...

数量关系模块

三年后指的不是现在 选A注意单位 注意单位换算 A 正方形减去扇形 256-X5y 那么小李拿的一定是末尾是1或者是6,所以小李拿的是26,那么y46,那么小王或者小周拿的是92,所以选择三个数之和等于92的,所以选择D 分数 百分数 …...

滑模面、趋近律设计过程详解(滑模控制)

目录 1. 确定系统的状态变量和目标2. 定义滑模面3. 选择滑模面的参数4. 设计控制律5. 验证滑模面设计6. 总结 设计滑模面(Sliding Surface)是滑模控制(Sliding Mode Control,SMC)中的关键步骤。滑模控制是一种鲁棒控制…...

SQL Server 端口配置

目录 默认端口 更改端口 示例:更改 TCP 端口 示例:验证端口设置 远程连接测试 示例:使用 telnet 测试连接 配置防火墙 示例:Windows 防火墙设置 远程连接测试 示例:使用 telnet 测试连接 默认端口 TCP/IP: …...

同一窗口还是新窗口打开链接更利于SEO优化

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storm…...

kafka 安装

docker安装kafka(KRaft 模式) KRaft模式不再对Zookeeper依赖。 docker run -d --name kafka-kraft \-p 9092:9092 -p 9093:9093 \-e KAFKA_PROCESS_ROLESbroker,controller \-e KAFKA_NODE_ID1 \-e KAFKA_CONTROLLER_QUORUM_VOTERS1127.0.0.1:9093 \-e KAFKA_LISTENERSPLAINTEX…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...