CTPN-自然文本场景检测学习笔记
文章目录
- 出发点
- 改进点(top-down)
- 基本流程
- Detecting Text in Fine-scale(细粒度) Proposals
- Recurrent Connectionist Text Proposals
- Side-refinement(边缘细化)
- 1. 文本行的构建:
- 2. 边缘细化:
- 模型输出与损失函数
- 三个疑问
- 为什么要使用BLSTM
- 如何通过"FC"卷积层输出产生Text proposals?
- Anchor为什么这么设置
- 训练和实现细节
- 参考博客以及代码地址
CTPN网络结构图
出发点
之前的方法的缺点:
自底向上(bottom-up):非文本组件过滤,文本行构建和文本行验证。(两种方法:connected-components methods, sliding-window methods)
缺点:鲁棒性和可靠性差,依赖于字符的检测结果
改进点(top-down)
- 垂直锚点机制(vertical anchor mechanism):联合预测每个文本 Proposal 的垂直位置和文本/非文本分数,从而获得出色的定位精度。
- 网内循环架构(in-network recurrent architecture):用于按顺序连接这些细粒度的文本 Proposal,从而允许它们编码丰富的上下文信息。
- 两种方法无缝集成,以符合文本序列的性质,从而形成统一的端到端可训练模型。能够在单个过程中处理多尺度和多语言的文本,避免进一步的后过滤或细化。
- 使用 VGG16 模型,计算上高效,每张图像0.14s。
基本流程
用VGG16的前5个Conv stage(到conv5)得到feature map(W∗H∗CW*H*CW∗H∗C)
在Conv5的feature map的每个位置上取3∗3∗C3*3*C3∗3∗C的窗口的特征,这些特征将用于预测该位置k个anchor对应的类别信息,位置信息。
anchor定义:(卷积网络生成特征图之后,用这些特征图进行3 * 3的卷积,当3 * 3的卷积核滑动到特征图的某一个位置时,以当前滑动窗口中心为中心映射到原图的一个区域,以原图上的的这个区域为中心去画框,这个框就称为anchor。
* 有一点很容易弄错,从上面的解释可以看出,anchor是在原图上的,不是在特征图上的
* 特征图的每个中心点,会在原图上有 10 个anchor,每个 proposal 设定 10 个 anchors,anchors 高度范围为 [11 - 273] pixels(每次除以 0.7)
* 尺寸的大小是根据监测的图像去设置的将每一行的所有窗口对应的 3∗3∗C3*3*C3∗3∗C 的特征(W∗3∗3∗CW*3*3*CW∗3∗3∗C)输入到RNN(BLSTM)中,得到W∗256W*256W∗256的输出
将RNN的 W∗256W*256W∗256 输入到 512 维的 fc 层
fc层特征输入到三个分类或者回归层中。第二个2k scores 表示的是k个anchor的类别信息(是字符或不是字符)。第一个2k vertical coordinate和第三个k side-refinement是用来回归k个anchor的位置信息。2k vertical coordinate表示的是bounding box的高度和中心的y轴坐标(可以决定上下边界),k个side-refinement表示的bounding box的水平平移量。这边注意,只用了3个参数表示回归的bounding box,因为这里默认了每个anchor的width是16,且不再变化(VGG16的conv5的stride是16)。回归出来的box的宽度是一定的。
用简单的文本线构造算法,把分类得到的文字的proposal合并成文本线
Detecting Text in Fine-scale(细粒度) Proposals
允许任意大小的输入图像。它通过在feature map中密集地滑动小窗口来检测文本行,并且输出一系列细粒度的(例如,宽度为固定的16个像素)文本proposal。
论文采用,k=10,每个 proposal 设定 10 个 anchors,anchors 高度范围为 [11 - 273] pixels(每次除以 0.7),仅回归y1,y2,而不是x1, x2, y1, y2.
RPN生成的proposal和细粒度的proposal作比较。普通目标具有明确的边界和中心,可以从它的一部分推断这个目标;文本没有明显封闭边界(笔画,字符,单词,文本行,文本区域)。由RPN进行的单词检测很难准确预测单词的水平边,因为单词中的每个字符都是孤立或者分离的。而文本行是一个序列,可以视为一系列细粒度的proposal,每一个proposal代表文本行的一部分(单个或多个笔画,字符的一部分,单个或多个字符)。
下图为RPN和细粒度的proposal对比图
通过固定每个anchor的水平位置来预测其垂直位置(水平位置更难预测)。垂直锚点机制:同时预测每个细粒度提议的文本/非文本分数和y轴的位置。检测一系列固定宽度文本提议中的文本行也可以在多个尺度和多个长宽比的文本上可靠地工作。
使用bounding box的高和y轴中心来衡量垂直坐标:
其中,v=(vc,vh)v=(v_c, v_h)v=(vc,vh)和v∗=(vc∗,vh∗)v^*=(v_c^*, v_h^*)v∗=(vc∗,vh∗)分别是预测的坐标和ground truth 坐标。cyac_y^acya和hah^aha是anchor box的y轴中心和高度,从原图像中计算得来的。cyc_ycy和hhh是预测的y轴坐标,cy∗c_y^*cy∗和h∗h^*h∗是ground truth 坐标。每个预测文本propoasl都有一个大小为 h×16 的边界框(在输入图像中)。一般来说,文本proposal在很大程度上要比它的有效感受野 228×228 要小。给定输入图像,产生 W×H×C conv5 feature map(通过使用VGG16模型),其中C是feature map通道数,并且W×H是 feature map 的宽高。在conv5密集地滑动3×3窗口,每个滑动窗口使用 3×3×C 的卷积特征来产生预测。对于每个预测,水平位置(x轴坐标)和 k个anchor 位置是固定的,可以通过将conv5中的空间窗口位置映射到输入图像上来预先计算。在每个窗口位置输出k个anchor的文本/非文本分数和预测的y轴坐标(v)。检测到的文本提议是从具有>0.7(具有非极大值抑制)的文本/非文本分数的anchor生成的。
结论: 通过设计的垂直anchor和细粒度的检测策略,可以通过使用单尺度图像处理各种尺度和长宽比的文本行。这进一步减少了计算量,同时预测了文本行的准确位置。
Recurrent Connectionist Text Proposals
上一步将文本行分成一系列细粒度的文本proposal,因为文本具有序列特征,上下文信息很重要,所以应用 RNN(BLSTM) 编码上下文信息来进行文本识别。
- RNN类型:BLSTM,每个LSTM有128个隐藏层
- RNN输入:每个滑动窗口的 3*3*C 的特征(可以拉成一列),同一行的窗口的特征形成一个序列
- RNN输出:每个窗口对应256维特征
下图是不使用RNN(上)的和使用RNN(下)的CTPN比较图:
在卷积层中编码这些信息,从而实现细粒度文本proposal无缝的网内连接。使用RNN的隐藏层对信息进行循环编码。
本文中:在conv5上设计一个RNN层,它将每个窗口的卷积特征作为序列输入,并在隐藏层中循环更新其内部状态:HtH_tHt
下图为RNN内部更新内部状态的公式:
其中Xt∈R3×3×CX_t∈R^{3×3×C}Xt∈R3×3×C是第 t 个滑动窗口(3×3)的输入conv5特征。滑动窗口从左向右密集移动,生成每行的 t=1,2,...,Wt=1,2,...,Wt=1,2,...,W序列特征。W 是conv5的宽度。HtH_tHt是用当前输入(Xt)(X_t)(Xt)和先前状态Ht−1H_{t−1}Ht−1联合计算的循环内部状态。递归是通过使用非线性函数φφφ来计算的,它定义了循环模型的确切形式。使用双向LSTM,以能够在两个方向上对上下文进行编码,以便能够顾及到整张图片的信息。每个LSTM使用一个128维的隐藏层,BLSTM就是256维的RNN隐藏层Ht∈R256H_t∈R^{256}Ht∈R256。
HtH_tHt中的内部状态被映射到后面的FC层,并且输出层用于计算第 t 个proposal的预测,大大减少了错误检测,同时还能够恢复很多包含非常弱的文本信息的遗漏文本proposal。
Side-refinement(边缘细化)
1. 文本行的构建:
- 主要思想:每两个相近的proposal组成一个pair,合并不同的pair直到无法再合并为止(没有公共元素)
- 首先,若两个proposal BiB_iBi和BjB_jBj,满足以下条件,则表示为BjB_jBj−>BiB_iBi,
- BjB_jBj是最接近BiB_iBi的水平距离
- 该距离小于50像素
- 它们的overlapvoverlap_voverlapv是>0.7
- 其次,如果BjB_jBj−>BiB_iBi并且BiB_iBi−>BjB_jBj,则将两个 proposal 分组为一对。然后通过顺序连接具有相同 proposal 对来构建文本行
2. 边缘细化:
- 问题:当两个水平边的文本proposal没有完全被实际文本行区域覆盖,或者某些边的proposal被丢弃(例如文本得分较低)时,这可能会导致不准确的定位。
- 解决:边缘细化。可以精确地估计左右两侧水平方向上的每个anchor/proposal的偏移量(称为side-anchor或side-proposal)。
与y坐标预测类似,我们计算相对偏移为:
以下是边缘细化计算相对偏移公式:
其中 xsidex_{side}xside 是最接近当前anchor 水平边(左边或右边)的预测的x坐标。xside∗x^*_{side}xside∗ 是x轴的ground truth(GT) 边缘坐标,它是从GT bounding box和anchor 位置预先计算的。cxac_x^acxa是 x 轴的anchor的中心。waw^awa是固定的anchor宽度,wa=16w^a=16wa=16。我们只使用side-proposal的偏移量来优化最终的文本bounding box。
下图为有无边缘细化对比图(CTPN检测有(红色框)和没有(黄色虚线框)边缘细化。细粒度提议边界框的颜色表示文本/非文本分数):
模型输出与损失函数
CTPN有三个输出共同连接到最后的FC层。这三个输出同时预测文本/非文本分数(textbfs),垂直坐标(v=(vc,vh)v=(v_c,v_h)v=(vc,vh))和边缘细化偏移(ooo)。通过k个anchor来预测它们在conv5中的每个空间位置,从而在输出层分别得到2k2k2k,2k2k2k和kkk个参数。
损失函数:
- 带 ∗*∗ 的都是ground truth,每个anchor都是一个训练样本,iii 是在mini-batch中的anchor的索引,sis_isi是ancho是文本的预测概率,si∗s_i^*si∗是 ground truth = {0,1}。
- j是y坐标回归中有效anchor的索引,有效anchor是正anchor(sj∗=1s_j^*=1sj∗=1)或者和ground truth text proposal有 >0.5 的iouiouiou,vjv_jvj和vj∗v_j^*vj∗是第 j 个anchor的预测和真实的y坐标。
- k是 side-anchor 的索引,就是实际文本行边界框的左侧或右侧水平距离内的一组anchor,oko_kok和ok∗o_k^*ok∗是第k个anchor的x的预测和实际偏移量。
- LsclL_s^{cl}Lscl是我们使用Softmax损失区分文本和非文本的分类损失。
- LvreL_v^{re}Lvre 和 LoreL_o^{re}Lore 是回归损失,使用 smooth L1 函数来计算。λ1\lambda_1λ1和λ2\lambda_2λ2是损失权重,用来平衡不同的任务,根据经验设为1.0和2.0。NsN_sNs,NvN_vNv和NoN_oNo是标准化参数,表示LsclL_s^{cl}Lscl,LvreL_v^{re}Lvre和LoreL_o^{re}Lore分别使用的anchor总数。
Lvre(vj,vj∗)=smoothL1(vj−vj∗)L_v^{re}(v_j, v_j^*) = smooth_{L1}(v_j - v_j^*)Lvre(vj,vj∗)=smoothL1(vj−vj∗)
其中smoothL1smooth_{L1}smoothL1公式如下(x=vj−vj∗x = v_j - v_j^*x=vj−vj∗):
三个疑问
为什么要使用BLSTM
CTPN的网络结构与Faster-RCNN类似,只是其中加入了BLSTM层。CNN学习的是感受野内的空间信息;而且伴随网络的深入,CNN学到的特征越来越抽象。对于文本序列检测,显然需要CNN学到的抽象空间特征;另外文本所具备的sequence feature(序列特征)也有助于文本检测。对于水平的文本行,其中的每一个文本段之间都是有联系的,因此作者采用了CNN+RNN的一种网络结构,使得检测结果更加鲁棒。
如何通过"FC"卷积层输出产生Text proposals?
CTPN通过CNN和BLSTM学到一组“空间 + 序列”特征后,在"FC"卷积层后接入RPN网络。这里的RPN与Faster R-CNN类似,分为两个分支:
- 左边分支用于bounding box regression。由于fc feature map每个点配备了10个Anchor,同时只回归中心y坐标与高度2个值,所以rpn_bboxp_red有20个channels
- 右边分支用于softmax分类Ancho
Anchor为什么这么设置
- 保证在x方向上,Anchor 覆盖原图每个点且不相互重叠。
- 不同文本在 y方向上高度差距很大,所以设置Anchors高度为11-283,用于覆盖不同高度的文本目标。
训练和实现细节
- 训练标签。
对于文本/非文本分类,二值标签分配给每个正(文本)anchor或负(非文本)anchor。它通过计算与实际边界框的IoU重叠(除以anchor位置)来定义。正anchor被定义为:(i)与任何实际边界框具有>0.7的IoU重叠;或者(ii)与实际边界框具有最高IoU重叠。通过条件(ii),即使是非常小的文本模式也可以分为正anchor。这对于检测小规模文本模式至关重要,这是CTPN的主要优势之一。这不同于通用目标检测,通用目标检测中条件(ii)的影响可能不显著。 - 训练数据。
在训练过程中,每个小批量样本从单张图像中随机收集。每个小批量数据的anchor数量固定为N_s=128,正负样本的比例为1:1。如果正样本的数量少于64,则会用小图像块填充负样本。在3000张自然图像上训练,其中包括来自ICDAR 2013训练集的229张图像。还自己收集了其他图像,并用文本行边界框进行了手工标注。在所有基准测试集中,所有自我收集的训练图像都不与任何测试图像重叠。为了训练,通过将输入图像的短边设置为600来调整输入图像的大小,同时保持其原始长宽比 - 实现细节。
在ImageNet数据上预先训练非常深的VGG16模型。我们通过使用具有0均值和0.01标准差的高斯分布的随机权重来初始化新层(例如,RNN和输出层)。通过固定前两个卷积层中的参数进行端对端的训练。我们使用0.9的动量和0.0005的权重衰减。在前16K次迭代中,学习率被设置为0.001,随后以0.0001的学习率再进行4K次迭代
参考博客以及代码地址
论文地址: https://arxiv.org/abs/1609.03605
论文翻译: https://blog.csdn.net/quincuntial/article/details/79475339
解读博客: https://blog.csdn.net/zchang81/article/details/78873347
Caffe代码:https://github.com/tianzhi0549/CTPN
TensorFlow代码:https://github.com/eragonruan/text-detection-ctpn
BLSTM讲解 https://blog.csdn.net/weixin_41722370/article/details/80869925
参考文章 http://www.neurta.com/node/390
CTPN-自然文本场景检测学习笔记相关推荐
- 9月1日目标检测学习笔记——文本检测
文章目录 前言 一.类型 1.Top-Down 2.Bottom-up 二.基于深度学习的文本检测模型 1.CTPN 2.RRPN 3.FTSN 4.DMPNet 5.EAST 6.SegLink 7 ...
- [初窥目标检测]——《目标检测学习笔记(2):浅析Selective Search论文——“Selective Search for object recognition”》
[初窥目标检测]--<目标检测学习笔记(2):浅析Selective Search论文--Selective Search for object recognition> 本文介绍 前文我 ...
- 《南溪的目标检测学习笔记》——模型预处理的学习笔记
1 介绍 在目标检测任务中,模型预处理分为两个步骤: 图像预处理:基于图像处理算法 数值预处理:基于机器学习理论 关于图像预处理,请参考<南溪的目标检测学习笔记>--图像预处理的学习笔记 ...
- 《南溪的目标检测学习笔记》——COCO数据集的学习笔记
1 COCO数据集 COCO数据集下载链接:COCO_download 1.1 数据概览 数据集大小 train: 118287张 train+val: 123287张 val: 5000张 目标数量 ...
- 《南溪的目标检测学习笔记》的笔记目录
1 前言 这是<南溪的目标检测学习笔记>的目录~ 2 学习目标检测的思路--"总纲" <南溪的目标检测学习笔记>--目标检测的学习笔记 我在这篇文章中介绍了 ...
- 《南溪的目标检测学习笔记》——目标检测模型的设计笔记
1 南溪学习的目标检测模型--DETR 南溪最赞赏的目标检测模型是DETR, 论文名称:End-to-End Object Detection with Transformers 1.2 decode ...
- 《南溪的目标检测学习笔记》——夏侯南溪的CNN调参笔记,加油
1 致谢 感谢赵老师的教导! 感谢张老师的指导! 2 调参目标 在COCO数据集上获得mAP>=10.0的模型,现在PaddleDetection上的Anchor-Free模型[TTFNet]的 ...
- excel文本方式区学习笔记
excel文本方式区学习笔记 import java.io.FileInputStream; import java.io.InputStream; import org.apache.poi.hss ...
- 文本分类模型学习笔记
文本分类模型学习笔记 TextCNN 模型结构 HAN 模型结构 实验 数据集 预处理 模型内容 模型训练 模型测试 近年来,深度学习模型在计算机视觉和语音识别中取得了显著成果.在自然语言处理中,深度 ...
最新文章
- [译] 解密 Airbnb 的数据科学部门如何构建知识仓库
- HP ProLiant服务器收集日志的方法
- svn提示服务器禁止修改目录,SVN Eclipse插件中如何忽略对服务器已有文件修改后的提交...
- ProtoBuffer由.proto文件生成.cc/.h
- wget抓取网站, 模拟手机端抓取
- LInux安装mbedtls
- python3生成验证码_Python3实现生成验证码图片
- 两种改变 Windows Vista UI语言的途径
- C++ machine code与随机数 进阶习题
- php循环产生复选框,史上最详细的vue动态生成checkbox的选项并实现多选框的保存回显...
- flex向java传递 OBJECT
- iec611313标准下载_欧姆龙PLC编程软件中功能块的使用方法
- 数据结构——c语言 队列杨辉三角
- origin函数拟合
- bzoj 1488: [HNOI2009]图的同构 (置换+dfs)
- 分享可用的谷歌学术(google scholar) hosts
- 《巴菲特致股东的信》十年期固定行使价格期权对公司的侵蚀-计算过程演示
- Agile PLM 表结构说明
- 密码分析(二):线性密码分析
- [DirectShow] DirectShow的窗口
热门文章
- 安装 Windows Server 2019 VM虚拟机
- 计算机等级考试进制转换,计算机等级考试进制转换及常用函数
- PicGO+阿里云OSS或PicGO+Github+Jsdelivr搭建图床(图解)
- Java设计模式系列之——模板方法模式
- 盘点来自工业界的GPU共享方案
- tomcat启动子容器启动失败tomcat org.apache.catalina.LifecycleException异常的解决办法
- Cisco Nexus vPC之Sticky Master
- VR全景在线虚拟展厅实现全方位沉浸式互动体验
- 操作系统的作用是什么?目前主流的操作系统有哪些?主要特点是什么?
- android x86主动防御,LBE安全大师(主动式防御软件) for Android v6.1.2235 官网版 中文官方安装版...