自然场景文本检测CTPN原理详解

2024-06-13 10:08

本文主要是介绍自然场景文本检测CTPN原理详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

自然场景文本检测CTPN流程详解

标签: 文本检测 CTPN tensorflow
说明: 借鉴了网上很多资源,如有侵权,请联系本人删除!

摘要

对于自然场景中的文本检测,难点是:字体多变、遮挡、不规则变化等,其实对于实际的应用场景,针对自己的需求可以采用通用的目标检测框架(faster Rcnn,SSD,Yolo,Retina)等网络,或许也能满足项目的需求。
而CTPN等用于文本检测的方法,对自然场景的文本检测具有更强的鲁棒性,就是针对文本检测较SSD,Yolo等可能具有更高的精度;其次文本检测中涉及到旋转和仿射变化等,此时,通用的目标检测框检就不合适。
在这里插入图片描述

CTPN优点

  • 采用固定宽度的anchor,只做一个h回归
  • 特征提取的过程中采用VGG作为base net 再加上一个conv3×3_512,再以W方向为序列(sequence),512为特征数(input feature),经过双向LSTM。主要目的,提高特征之间的练习
  • 这里有一个疑问,既然在W方向送入LSTM,进行了特征增强,那是否可以在H方向增强特征的联系。

网络模型与前向传播过程

在这里插入图片描述
模型结构如上图所示

整个模型的前向传播过程如下(以1张图片为例):

  1. 采用VGG16作为base net进行特征提取。假设经过VGG之后的feature map为:W×H×C。
  2. 增加一个conv3×3_512的卷积层,(这一步网上好多说是用3×3的窗口做滑窗,我看tensorflow的源码,就是做了一个卷积,具体可查原论文和official code)。这一步的输出还是为:feature map:W×H×C=512。
  3. 将上一步的feature map reshape为LSTM的输入格式,LSTM采用128个隐藏节点的双向Bilstm,输出之后再接256×512的线性层,线性层输出之后再reshape为1×W×H×C,即和输入尺寸一样;在tensorflow中上一步的feature map reshape为:[1 × H, W, C=512],应该是(batch, steps, inputs)的格式,因为是增强特征在W方向的联系,于是应该以W为steps。这一步的输出为:feature map:1×W×H×C=512。
  4. 线性回归层512×(10×4)做anchor的坐标预测,512:每个点的特征数,10:每个点有10个不同高度的anchors,4:一个anchor有4个坐标点(xmin,xmax,ymin,ymax);线性回归层512×(10×2)做类别预测,2:两个类别,是文本,不是文本。这一步的输出为:box_coordinate_pred:1×W×H×(104),box_label_pred:1×W×H×(102),
  5. 共生成W×H×10个anchors,采用和faster rcnn类似的策略对每个anchor,指定target_box和target_label
  6. 计算交叉熵和坐标点的L1smooth loss。tensorflow源码中还回归输出了inside_weights和outside_weights,两个都为:1×W×H×(10*4),这个不知道怎么用的。

训练

对于每一张训练图片,总共抽取128个样本,64正64负,如果正样本不够就用负样本补齐。这个和faster rcnn的做法是一样的。

测试 TODO

  • TO DO …

Tricks

  • 采用densenet,resnet等最新的base net,这里安利一下pytorch,tensorflow的模型建模和调试确实没有pytorch方便
  • 对H方向也采用一定策略(LSTM或其他方法)进行特征增强

reference

  1. CTPN/CRNN的OCR自然场景文字识别理解(一)
  2. https://github.com/eragonruan/text-detection-ctpn

这篇关于自然场景文本检测CTPN原理详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Spring Boot中的路径变量示例详解

《SpringBoot中的路径变量示例详解》SpringBoot中PathVariable通过@PathVariable注解实现URL参数与方法参数绑定,支持多参数接收、类型转换、可选参数、默认值及... 目录一. 基本用法与参数映射1.路径定义2.参数绑定&nhttp://www.chinasem.cnbs

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

Redis中Stream详解及应用小结

《Redis中Stream详解及应用小结》RedisStreams是Redis5.0引入的新功能,提供了一种类似于传统消息队列的机制,但具有更高的灵活性和可扩展性,本文给大家介绍Redis中Strea... 目录1. Redis Stream 概述2. Redis Stream 的基本操作2.1. XADD

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

Java JDK1.8 安装和环境配置教程详解

《JavaJDK1.8安装和环境配置教程详解》文章简要介绍了JDK1.8的安装流程,包括官网下载对应系统版本、安装时选择非系统盘路径、配置JAVA_HOME、CLASSPATH和Path环境变量,... 目录1.下载JDK2.安装JDK3.配置环境变量4.检验JDK官网下载地址:Java Downloads

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推