文本检测学习笔记_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,据说结果还可以)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

三.Linux权限管控 1-5.Linux的root用户用户和用户组查看权限控制信息chmod命令chown命令

目录 三.Linux权限管控 1.Linux的root用户 root用户(超级管理员) su和exit命令 sudo命令 为普通用户配置sudo认证 三.Linux权限管控 2.用户和用户组 用户,用户组 用户组管理 用户管理 getent---查看系统中的用户 三.Linux权限管控…

[每周一更]-(第86期):NLP-实战操作-文本分类

NLP文本分类的应用场景 医疗领域 - 病历自动摘要: 应用: 利用NLP技术从医疗文档中自动生成病历摘要,以帮助医生更快速地了解患者的状况。 法律领域 - 法律文件分类: 应用: 使用文本分类技术自动分类法律文件&#xf…

【网络安全实验】snort实现高级IDS

注:本实验分别使用kali和CentOS6.8进行测试,可惜的是使用kali进行实验过程中遇到了困难,未能完成完整实验,而使用CentOS6.8成功完成了完整实验。 实验中用到的软件: https://download.csdn.net/download/weixin_5255…

Spring-集成Web

一、引子 前面我们在Spring集成Junit中为读者引出了Spring善于集成其它框架的优势,而Spring项目不可能仅限于小范围的某个方法的测试,终究会落脚于Web项目上。于是,我们就从这里正式进入Spring集成Web的话题。由于笔者会从原生的Java Web开发…

【Spark实践6】特征转换FeatureTransformers实践Scala版--补充算子

本节介绍了用于处理特征的算法,大致可以分为以下几组: 提取(Extraction):从“原始”数据中提取特征。转换(Transformation):缩放、转换或修改特征。选择(Selection&…

前端常见标签

<li> (List Item)&#xff1a;定义列表中的一个项目&#xff08;项&#xff09; <ul> (Unordered List)&#xff1a;定义无序列表 <ol> (Ordered List)&#xff1a;定义有序列表 <a> (Anchor Tag)&#xff1a;定义超链接 <ul><li>苹…

关于华为应用市场上架,申请权限未告知目的被驳回问题的简单处理方式

关于华为应用市场上架过程中出现的【您的应用在运行时&#xff0c;未同步告知权限申请的使用目的&#xff0c;向用户索取&#xff08;存储、拍照&#xff09;等权限&#xff0c;不符合华为应用市场审核标准。】 使用方式&#xff1a; 1、引入 import permision from "/m…

paddle环境安装

一、paddle环境安装 如pytorch环境安装一样&#xff0c;首先在base环境下创建一个新的环境来安装paddlepaddle框架。首先创建一个新的环境名叫paddle。执行如下命令。 conda create -n paddle python3.8创建好了名叫paddle这个环境以后&#xff0c;进入到这个环境中&#xff…

【Java 数据结构】排序

排序算法 1. 排序的概念及引用1.1 排序的概念1.2 常见的排序算法 2. 常见排序算法的实现2.1 插入排序2.1.1 直接插入排序2.1.2 希尔排序( 缩小增量排序 ) 2.2 选择排序2.2.1 直接选择排序2.2.2 堆排序 2.3 交换排序2.3.1冒泡排序2.3.2 快速排序2.3.3 快速排序非递归 2.4 归并排…

【Linux C | 网络编程】netstat 命令图文详解 | 查看网络连接、查看路由表、查看统计数据

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

rust gui开发框架选择

作为一个系统编程强大语言&#xff0c;怎么能少得了图形界面的开发 实际上写这篇前我也不知道&#xff0c;于是我问了ai大模型&#xff0c;文心3.5和chatgpt4.0 答案实际上不能满意&#xff0c;最后我做了下筛选 参考博文&#xff1a; rust开发环境配置&#xff1a;链接 一、…

如何选择最适合的服务器

许多朋友想做一些网站&#xff0c;应用&#xff0c;游戏&#xff0c;小程序等等&#xff0c;都需要接触一个基础&#xff0c;就是服务器。服务器相当于一台24小时不关机的联网电脑&#xff0c;浏览网页或者应用相当于用户在访问这台电脑里的文件。那么如何选择最适合自己的服务…

[C++]类和对象(中)

一:类的六个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。空类中并不是什么都没有&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数。默认成员函数&#xff1a;用户没有显式实现&#xff0c;编译器会生成的成员函数称为…

Android Studio非UI线程修改控件——定时器软件

目录 一、UI界面设计 1、UI样式 2、XML代码 二、功能编写 1、定义 2、实现方法 3、功能实现 一、UI界面设计 1、UI样式 2、XML代码 <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android…

Interpolator:在Android中方便使用一些常见的CubicBezier贝塞尔曲线动画效果

说明 方便在Android中使用Interpolator一些常见的CubicBezier贝塞尔曲线动画效果。 示意图如下 import android.view.animation.Interpolator import androidx.core.view.animation.PathInterpolatorCompat/*** 参考* android https://yisibl.github.io/cubic-bezier* 实现常…

【AI数字人-论文】Geneface论文

文章目录 前言pipelineaudio-to-motionMotion domain adaptation可视化 Motion-to-imageHead-NeRFTorso-NeRF 结果对比 前言 语音驱动的说话人视频合成旨在根据一段输入的语音&#xff0c;合成对应的目标人脸说话视频。高质量的说话人视频需要满足两个目标&#xff1a; &#…

算法基础,一维,二维前缀和差分详解

目录 1.前缀和 1.一维前缀和 例题&#xff1a;【模板】前缀和 2.二维前缀和 例题&#xff1a;【模板】二维前缀和 2.差分 1.一维差分 1.性质&#xff1a;d[i]的前缀和等于a[i] 2.性质&#xff1a;后缀区间修改 例题&#xff1a;【模板】差分 2.二维差分 例题&#x…

[.NET] 查询当前已安装所有 Win32 与 UWP 应用

为了获取当前设备用户已安装的所有应用程序, 一般来讲有两种方案. 一种是通过查询 “shell:AppsFolder” 目录下所有项, 一种是从开始菜单中获取所有快捷方式, 然后加上查询所有已安装的 UWP 应用, 最后得到总列表. 如需代码参考, 请看 github.com/SlimeNull/WindowsAppsQuery …

Opencv(C++)学习 之RV1126平台的OPENCV交叉编译

本文特点&#xff1a;网上已经有了很多opencv移植RV1106的文章&#xff0c;本文主要记录基于cmake-gui编译&#xff0c;碰到的报错&#xff0c;及解决报错问题的方法&#xff0c;同时简单总结一些配置项相关的知识。 一、环境&#xff1a; ubuntu18 x64 RV1126交叉编译工具链 …

用HTML5 + JavaScript实现下雪效果

用HTML5 JavaScript实现下雪效果 下面是用HTML5 JavaScript实现下雪效果示例&#xff0c;展示了如何使用 HTML5 的 <canvas> 元素以及 JavaScript 来创建下雪效果。效果如下&#xff1a; 源码如下&#xff1a; <!DOCTYPE html> <html lang"en">…