文本检测学习笔记_CTPN

论文地址:https://arxiv.org/pdf/1609.03605.pdf

开源代码:https://github.com/lvliguoren/pytorch_ctpn?tab=readme-ov-file

本文主要的的内容

提出了一种将文本视为由密集排列的具有固定宽度的文本候选区域组成的序列的方法。这些文本候选区域可以通过使用 Anchor 进行预测,并最终通过文本线构造法连接在一起,形成最终的文本区域。为了更好地预测,作者还引入了一个双向 LSTM,用于编码文本序列的上下文信息。这种方法旨在更准确地理解和提取图像中的文本信息。

小辉问:什么是Anchor?

小G答:Anchor是目标检测中一组预定义的矩形框,以多尺度和宽高比分布,用于作为候选目标框,帮助模型定位和识别图像中的目标。通过与实际目标框的交并比,模型可以学习调整这些Anchor的位置和形状,提供多样性的候选框,从而更有效地捕捉不同尺寸和形状的目标。例如,一个Anchor可能是以图像中心为基准的矩形框,而另一个可能是相同中心但不同宽高比的矩形框。这种机制有助于提高目标检测算法对多样性目标的准确性。

例如,我们可能定义三个尺寸(小、中、大)和两个宽高比(正方形、横向矩形)。对于每个尺寸和宽高比的组合,生成一个 Anchor。

小尺寸、正方形:[10x10]

小尺寸、横向矩形:[15x10]

中尺寸、正方形:[20x20]

中尺寸、横向矩形:[30x20]

大尺寸、正方形:[40x40]

大尺寸、横向矩形:[60x40]

这些 Anchor 将以图像中心为基准,覆盖不同的尺寸和宽高比。在训练时,模型将与实际目标框比较每个 Anchor 的交并比,根据阈值将其标记为正样本(与实际目标重叠较多)或负样本(与实际目标重叠较少)。模型通过学习如何调整这些 Anchor 的位置和形状,逐渐提高对图像中猫和汽车位置的准确性,实现目标检测的任务。

模型结构详解

CTPN采用了一种结合了Faster R-CNN和LSTM的架构,其任务是预测等宽的文本提议。首先,利用VGG16提取特征,通过3×3×C的卷积在conv5特征图上操作,生成只包含空间信息的特征图。对这个特征图进行reshape,然后输入到BiLSTM中,学习每一行的序列特征,使得输出的特征既包含了空间信息又包含了序列信息。通过全连接层后,得到512通道的特征,最终输出预测k个锚点的文本/非文本分数、y轴坐标和侧边微调偏移。利用非极大值抑制(NMS)和文本线构造法生成最终的文本区域,最后通过侧边微调修复left、right坐标。整体上,CTPN通过整合卷积和双向LSTM网络,有效地检测图像中的文本提议,并通过后续的处理步骤完善最终的文本区域。

CTPN输出了一系列等宽的精细文本提议,这些提议是按照顺序生成的。每个框的颜色表示文本/非文本分数,只有具有正分数的框被呈现。这意味着只有那些被模型判定为包含文本的框被展示,而颜色的深浅则反映了模型对文本存在的置信程度。通过这个输出,可以直观地观察到模型对图像中文本区域的预测结果,以及每个提议的置信度。

小辉问:为何用双向LSTM?

小G答:CTPN的核心思想是针对文本序列的特性,克服了传统卷积神经网络(CNN)仅提取空间信息的局限性。通过在VGG16模型的conv5特征图上应用3×3×C的卷积,然后结合双向长短时记忆网络(BiLSTM),实现了在整个图片宽度上建立上下文关系。这种结合空间和序列信息的方法使得CTPN能够更好地理解文本序列的依赖关系,例如,通过BLSTM的双向学习,模型可以更全面地感知图像中文本的上下文信息,从而更准确地生成等宽的文本提议,有效地检测自然场景图像中的文字区域。

小辉问:FC层如何得到Text Proposals?

小G答:CTPN中的全连接层(FC层)起到了连接卷积和双向长短时记忆网络(BiLSTM)学到的“空间+序列”特征并进行文本提议(Text Proposals)的关键作用。在学习到的512维特征的基础上,FC层通过Softmax激活函数分别预测每个点的Text/None-Text得分,以及与Anchor相关的垂直坐标和高度信息。此外,通过对Ground Truth(GT)计算,在32像素内的点被认为是边缘,模型额外预测这些Anchor相对于文本左右边缘的微调偏移,实现Side-Refinement。通过这样的预测机制,FC层输出了一组具有文本/非文本得分、垂直坐标、高度以及边缘微调信息的Anchor,这些信息构成了最终的文本提议。整体而言,FC层在CTPN中起到了将学到的特征转化为具体文本提议的关键作用。

Base Layers(基础层):

这一部分使用了 VGG16 的前几层,构建了一个卷积神经网络(Convolutional Neural Network,CNN)作为基础层。VGG16 是一个经典的卷积神经网络架构,包含多个卷积层和池化层,用于提取图像的特征。这里采用了一系列卷积层、ReLU 激活函数以及最大池化层,通过堆叠这些层来逐步提取图像特征。

RPN(Region Proposal Network,区域建议网络):

RPN 是用于生成文本区域提议框的部分。这里使用了一个卷积层(Conv2d)来处理基础层的输出,以获得与图像相关的特征。输出的通道数为 512,表示每个位置都有 512 个特征。

BiLSTM(双向长短时记忆网络):

BiLSTM 被用于捕捉图像中的文本序列信息。这一部分采用了一个双向 LSTM(长短时记忆网络),能够有效地处理序列数据。输入为 512 维,输出为 256 维,其中 LSTM 的输出是一个双向的隐藏层,即每个时刻都包含前向和后向的隐藏状态。

RPN Class 和 RPN Regress(RPN 分类和回归):

RPN Class 和 RPN Regress 分别用于对提议框进行分类和回归。这两部分分别使用全连接层(Linear)来处理 RPN 部分的输出特征。RPN Class 输出表示提议框是否包含文本,通常用于二元分类(包含文本或不包含文本)。RPN Regress 输出表示提议框的位置回归信息,用于调整提议框的位置。

Softmax 激活函数:

对 RPN Class 的输出使用 Softmax 激活函数,将分类输出转换为类别概率分布,以便计算分类损失。

这个 CTPN 模型的整体架构包括了基础卷积层、区域建议网络、双向 LSTM、以及分类和回归的全连接层。它的任务是生成文本区域提议框,用于文本检测任务。

代码运行

我是基于开源代码运行的,但是我的版本比较新,由于新的版本有一些函数更换或者弃用了,所以改了一些代码

数据集地址:https://drive.google.com/drive/folders/0B_WmJoEtfQhDRl82b1dJTjB2ZGc?resourcekey=0-OjW5DtLUbX5xUob7fwRvEw

简单训练后运行结果:

思考:这些水印的误检,我没有类似的数据集微调模型,我认为微调后会好很多,但是ctpn只能检测水平的,后续我会更新PSENet、DBNet......(联想有用DBNet,据说结果还可以)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/665162.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国际国内 IT行业有哪些证书含金量高?

一、前言 在信息技术飞速发展的今天,IT行业证书作为衡量专业技能和知识水平的重要标准,越来越受到业界的重视。对于IT从业者而言,拥有一些权威性的证书不仅能够证明自己的专业能力,更是职业发展的有力助推器。基于多年的行业经验…

Python中with管理上下文

上下文管理器 上下文管理器本质就是能够支持with操作。 任何实现了 __enter__() 和 __exit__() 方法的对象都可称之为上下文管理器,上下文管理器对象可以使用 with 关键字。显然,文件(file)对象也实现了上下文管理器协议。 实现…

十一、计算机分类

1、按照性能和用途分类 计算机分类 计算机按照性能、用途和规模可以分为以下几种类型: 1)巨型机(超级计算机) 采用大规模并行处理体系结构。运算速度最快、体积最大、价格最昂贵。主要用于尖端科学研究领域,如灾难预测…

《计算机网络简易速速上手小册》第2章:计算机网络协议和标准(2024 最新版)

文章目录 2.1 IPv4 与 IPv6 - 网络世界的地址簿2.1.1 基础知识2.1.2 重点案例:使用 Python 查询本机 IPv4 和 IPv6 地址2.1.3 拓展案例1:使用 Python 创建简单的 IP 地址转换工具2.1.4 拓展案例2:使用 Python 检测本地网络的 IP 版本支持 2.2…

ES6-对象的解构赋值

一、区别一下数组的解构赋值 - 对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值二、说明 - 对象的解构赋值的内部机制&#…

【Vitis】Vitis HLS学习系列笔记 :第一个例程

在学习vitis的过程中一定要跑几个例程试试看,这中间遇到了几个小问题,记录下 有干货,请注意查收:作为新手,跑例程大概率会遇到问题,这里记录几个问题,如果刚好你也遇到,一定会帮到你…

XML详解

文章目录 XML简介语法约束DTDSchema 解析Jsoup使用对象详解JsoupDocumentElementsElementNode XML 简介 概述:Extensible Markup Language 可扩展标记语言 可扩展:标签都是自定义的。 功能 数据存储:XML 可以用来存储结构化数据&#xff0c…

HSRP配置指南

实验大纲 第 1 部分:验证连通性 步骤 1:追踪从 PC-A 到 Web 服务器的路径 步骤 2:追踪从 PC-B 到 Web 服务器的路径 步骤 3:观察当 R3 不可用时,网络的行为 第 2 部分:配置 HSRP 主用和 备用路由器 步…

rasa3.X 自定义action的注册问题

rasa3.X 自定义action的注册问题 文章目录 rasa3.X 自定义action的注册问题前言一、问题重述二、问题解决 前言 幸好在这之前抽时间稍微看了一点django源码,让我对于python的导入机制有了一个概念。虽然还不是很确切的知道python import机制,不过在看到…

QT学习日记 | 初始QT

目录 一、创建QT文件 二、目录结构讲解 1、.pro文件 2、源文件与头文件 3、编译运行 4、界面文件 三、梦开始的地方(Hello World!) 1、代码方式 2、拖拽方式 四、Qt中的“容器” 五、Qt的对象树机制 1、对象树的引入 2、对象树…

MySQL进阶之锁(全局锁以及备份报错解决)

锁 全局锁 全局锁就是对整个数据库实例加锁,加锁后整个实例就处于只读状态,后续的DML的写语句,DDL语 句,已经更新操作的事务提交语句都将被阻塞。 其典型的使用场景是做全库的逻辑备份,对所有的表进行锁定&#xff…

030-安全开发-JS应用NodeJS指南原型链污染Express框架功能实现审计

030-安全开发-JS应用&NodeJS指南&原型链污染&Express框架&功能实现&审计 #知识点: 1、NodeJS-开发环境&功能实现 2、NodeJS-安全漏洞&案例分析 3、NodeJS-开发指南&特有漏洞 演示案例: ➢环境搭建-NodeJS-解析安装&…

MySQL知识点总结(三)——事务

MySQL知识点总结(三)——事务 事务事务的四大特性ACID原子性一致性隔离性持久性 脏读、幻读、不可重复读脏读不可重复读幻读 隔离级别读未提交读已提交可重复读串行化 事务的原理InnoDB如何实现事务的ACID事务的两阶段提交redo log与binlog的区别事务两阶…

【DevOps】产品需求文档(PRD)与常见原型软件

文章目录 1、PRD介绍1.1、概述1.2、前提条件1.3、主要目的1.4、关键内容1.5、表述方式1.6、需求评审人员1.7、一般内容结构 2、需求流程3、常见原型软件3.1、Word3.2、Axure3.2.1、详细介绍3.2.2、应用分类3.2.3、优缺点 3.3、摹客RP3.4、蓝湖3.5、GUI Design Studio 1、PRD介绍…

业务流程自动化平台在制造业应用案例,助力业务自动化、智能化

捷昌驱动成立于2000年,并于2018年9月在上海证券交易所上市,是一家专注于线性驱动产品研发、生产及销售的科技集团。 公司整合全球资源,为智慧办公、医疗康护、智能家居、工业自动化等关联产业提供驱动及智能控制解决方案,以科技驱…

荣耀手机如何录屏?在线分享3个录屏方法

荣耀手机如何录屏?荣耀手机录屏是一项非常实用的功能,它可以帮助我们轻松记录手机屏幕上的内容,无论是游戏攻略、教育学习还是工作演示,都能够方便地进行录制。通过录屏,我们可以随时随地记录和分享自己的操作和见解。…

探究Steam爆款游戏”幻兽帕鲁“:玩家评价揭秘

探究Steam爆款游戏”幻兽帕鲁“:玩家评价揭秘 文章目录 探究Steam爆款游戏”幻兽帕鲁“:玩家评价揭秘1 背景描述2 数据说明3 数据来源4 问题描述5 数据探索与预处理5.1 数据加载5.2 数据清洗 6 数据分析6.1 评论分布分析6.2 评论内容情感分析6.3 地理分布…

力扣热门100题刷题笔记 - 2.两数相加

力扣热门100题 - 2.两数相加 题目链接:2.两数相加 题目描述: 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返…

图书|基于Springboot的图书管理系统设计与实现(源码+数据库+文档)

图书管理系统目录 目录 基于Springboot的图书管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、个人中心 2、管理员管理 3、用户管理 4、图书出版社管理 5、公告类型管理 6、所在书架管理 7、图书类型管理 8、论坛管理 9、公告信息管理 10、图书信…

【数据结构】(分治策略)中位数的查询和最接近点对问题

中位数查询: 寻找一组字符串中第k小的数,返回其值和下标。 不可以有重复值(在缩小规模的时候,会导致程序死循环) 相对位置的转换体现了分治策略的思想。> 划分函数 int partition(int *nums,int left, int rig…