CTPN论文阅读
CTPN,全称Connectionist Text Proposal Network。
是16年的一篇文本检测模型,作者是Zhi Tian等,发表于ECCV。(https://arxiv.org/abs/1609.03605)
同时也阅读了CrazySummerday实现pytorch版本的代码。(https://github.com/CrazySummerday/ctpn.pytorch)
这批论文实现的是一个文本检测模型。
经过对代码和论文的阅读(总觉得读代码比读论文容易。。),整理内容如下:
1,网络结构:
输入图像
–> 特征提取网络(VGG16去掉fc部分)
–> RPN(Region proposal network,3*3 Kernel的Conv层)
–> Bi-directional RNN(原论文用LSTM,CrazyS的代码用了GRN)。将前一结果featuer map,每一行(从左往右的点的特征向量)作为输入。
–> FC(对前一步骤的输出,经过全连层,输出预测内容。
预测内容包括了,每个特征点在原图对应区域里,十个anchor形状的:1,是否属于文本的得分。(分类问题)2,y轴上的位置修正,anchor的height的修正。(回归问题)
2,关于anchor。
熟悉rcnn之类的anchor based detection的可能不需要太多解释。
本文中的anchor统一宽度为16像素,(原因1,VGG16中的最后一个feature map对应原图中的大小1616。
原因2,本文的idea,用固定宽度的检测器,检测不同的高度的文本块。)
每个特征点对应了10个anchor,宽度统一为16,高度从11到283的10个不同的值,按照0.7的放大倍数产生。
比如如果输入图像经过VGG生成的feature map大小为1010512,那么原图中共有1010*10个初始anchor。
初始anchor去掉越界的部分,剩下的和文字的groundtruth bounding box求交集,生产label和y差值和高度差值。作为训练时的y。
3,关于Loss。
分为两部分即classification和regression。
classification loss用于训练某个特征点的某个anchor的是否属于文本的得分。
文中用了softmax loss。
regression loss用于训练某个特征点的某个anchor的高度和y的偏移,论文中称为side refinement。
文中用了smooth L1 loss。