参考链接:https://blog.csdn.net/bestrivern/article/details/100889632
1、CTPN 是什么
CTPN 全称是 connection text proposal network,是连接文本区域网络,用于进行横向文本检测。它通过将一系列小的文本框判断是不是标注的文本框的一部分,然后将是同一个标注文本框的小文本框连接成一个文本框区域,称为候选区域。重复上述操作,直到每个标注文本框的候选区域都生成完毕,最后对每个候选区域的大小进行微调。
2、CTPN 的网络结构
3、简述 CTPN 的步骤
① 使用 VGG16 的卷积阶段的网络层作为骨干网络,然后将图片输入 VGG16 网络中进行特征提取,生成特征图
② 在 ① 中输出的特征图中滑动进行 3*3 卷积,然后进行 im2col 操作,然后每次滑动都得到一个 3*3*通道数的特征向量,最后生成一个新的特征图,然后输入 BiLSTM 中进行序列特征提取,再传入全连接层中进一步提取特征
③ 在 ② 的全连接层后接 3 个全连接层分支,分别预测垂直坐标回归、分类得分、水平平移量回归
④ 将 ③ 中的预测垂直坐标回归和分类得分结果输入 RPN 中,而 RPN 的具体步骤如下:
a、
4、CTPN 的优点
① 将骨干网络生成的特征图输入后续网络,而不是将原图输入后续网络,减少了后续网络的计算量
② 引入了 BiLSTM 网络层,使得在进行文本检测时,网络能够利用到文本的语义信息
③ 增加了新的边界得分的预测分支,使得在预测文本框的边界时的效果更好,提高了网络的检测效果
④ 将 RPN 层后置到最后,可以使得 RPN 能够获得更丰富、更高级的特征输入,从而能够产生更好的结果
5、CTPN 的缺点
① 引入了 BiLSTM 网络层,相比于 CNN 可以并行化,BiLSTM 无法进行并行化,因此降低了网络的运行效率,增加了网络的运行时间
② 引入了 BiLSTM 网络层,可能会导致网络发生梯度消失或者梯度爆炸
③ 增加了新的边界得分预测分支,增加了标注成本
④ 只能用于水平方向的文本检测,垂直方向上会出现字与字的断开。如果存在倾斜,需要修改 anchor 的连接方式
⑤ anchor 的合并和断开是一个问题。程序使用的是水平 50 个像素内合并,垂直 IoU>0.7 合并。或许由于 BiLSTM 的引入,导致断开这个环节变差。所以对于双栏,三栏的这种文本,ctpn 会都当做一个框处理,有时也会分开处理,总之不像 EAST 效果好。
6、CTPN 可以改进的点
7、CTPN 的损失函数
分类得分损失:,具体损失函数为交叉熵损失
边框回归损失:,具体损失函数为 Smooth_L1
边界框得分损失:,具体损失函数为 Smooth_L1
假设所有的 anchor 的集合为 A,则 i 表示集合 A 中的第 i 个 anchor,而 则表示第 i 个 anchor 的分类得分,分别为 0 和 1,0 表示是非文本框,而 1 表示是文本框。而 表示归一化因子,是 A 中的 anchor 个数之和。
假设 A 中的 anchor 跟 GroundTruth 的 IoU 大于 0.5 的 anchor 集合为 B,则 j 表示 B 中的第 j 个 anchor, 表示的是边框回归值。而 使用的是 Smooth_L1 进行计算损失。 是归一化因子,是 B 中的 anchor 个数之和。 是多任务平衡系数,一般取值为 1.
假设边界 anchor 的集合为 C,则 o 表示 C 中的第 o 个 anchor ,则 表示 C 中的第 k 个 anchor 的得分,而 使用 Smooth_L1 进行计算损失。 表示归一化因子,而 是多任务平衡系数,一般取值为 2.
8、Smooth_L1 损失函数
假设输入为 x ,则
当 |x| < 1 时,输出
其他情况,输出 |x| - 0.5
优点:
当 |x| < 1 时, Smooth_L1 的梯度为 x,所以即使 x 的值很小,也能有梯度;
而当 |x| ≥ 1 时,Smooth_L1 的梯度为 ±1,此时不易发生梯度爆炸。
且 Smooth_L1 对离群点和异常值不敏感
9、边框偏移计算公式
假设 anchor 的中心坐标为 y_a 和高度 h_a,而预测的中心坐标为 y_p 和高度 h_p,真实值的中心坐标为 y_t 和高度 h_t,则计算公式为:
s_p = (y_p - y_a) / h_a
s_t = (y_t - y_a) / h_a
h_pa = log(h_p / h_a)
h_ta = log(h_t / h_a)
注:y_p 和 h_p
网友评论