论文地址: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,据说结果还可以)