自然场景文本检测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

相关文章

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I

Go路由注册方法详解

《Go路由注册方法详解》Go语言中,http.NewServeMux()和http.HandleFunc()是两种不同的路由注册方式,前者创建独立的ServeMux实例,适合模块化和分层路由,灵活性高... 目录Go路由注册方法1. 路由注册的方式2. 路由器的独立性3. 灵活性4. 启动服务器的方式5.

Java中八大包装类举例详解(通俗易懂)

《Java中八大包装类举例详解(通俗易懂)》:本文主要介绍Java中的包装类,包括它们的作用、特点、用途以及如何进行装箱和拆箱,包装类还提供了许多实用方法,如转换、获取基本类型值、比较和类型检测,... 目录一、包装类(Wrapper Class)1、简要介绍2、包装类特点3、包装类用途二、装箱和拆箱1、装

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

Python中Markdown库的使用示例详解

《Python中Markdown库的使用示例详解》Markdown库是一个用于处理Markdown文本的Python工具,这篇文章主要为大家详细介绍了Markdown库的具体使用,感兴趣的... 目录一、背景二、什么是 Markdown 库三、如何安装这个库四、库函数使用方法1. markdown.mark

PLsql Oracle 下载安装图文过程详解

《PLsqlOracle下载安装图文过程详解》PL/SQLDeveloper是一款用于开发Oracle数据库的集成开发环境,可以通过官网下载安装配置,并通过配置tnsnames.ora文件及环境变... 目录一、PL/SQL Developer 简介二、PL/SQL Developer 安装及配置详解1.下

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

css渐变色背景|<gradient示例详解

《css渐变色背景|<gradient示例详解》CSS渐变是一种从一种颜色平滑过渡到另一种颜色的效果,可以作为元素的背景,它包括线性渐变、径向渐变和锥形渐变,本文介绍css渐变色背景|<gradien... 使用渐变色作为背景可以直接将渐China编程变色用作元素的背景,可以看做是一种特殊的背景图片。(是作为背