算法架构图:
算法分析
-
总览,主要包含三个部分:
- backbone提取特征(特征金字塔)
- 特征金字塔被上采样到相同尺度构建一个特征图F
- 使用F来预测概率图P和阈值图T,并通过P和T来生成二值图B
-
一些细节:
- 预设的图片大小【640,640】
- 在训练阶段:P、T、B都会进行loss计算,并bp,其中P、B会使用相同的标签
- 在推理阶段,P、B都可以被用于计算bbox
- DB模块的优势:
- 帮助区分非常近的模块
- 自己的理解其实就是对边界做了加强学习,让边界更准了,同时免去了复杂的后处理,连通区域的计算其实就在里面了
- 阈值图T的学习可以监督或者非监督,监督效果更好
- 阈值图T的用法是,用于对P的二值化
- 关于DB模块
- 损失函数,及其导数:
- deformable conv:可形变的卷积,提供可形变感受野,对大宽高比有效果
- 标注生成:基于PSEnet标注的生成规则。收缩和扩展的长度计算公式(6),其中收缩和扩展之间的像素为T的正样本,其余为负样本
- 损失函数:
- loss计算方式这里,其实就是交叉熵,因为x受T影响,bp到P时,可以理解为P会影响最终的结果,同时P也可以被学习
- 其中阿尔法为1.0,贝塔为10,Ls、Lb为负采样交叉熵损失,采样比1:3;Lt为平滑后的L1损失,只计算Gd内部的像素(可能是为了避免样本不平衡的问题,类似于负采样)
- 在推理阶段,使用P或者B生成bbox差不多
- box生成规则:
- 首先使用阈值进行二值化(预设0.2)
- 通过二值化后的map寻找连接区域(对应标注的Gs,收缩图)
- 通过公式(10)反推文本区域:
- 训练细节:
- 所有的模型先使用Synthtext与训练10w个iter
- 然后finetuning 各自数据集1200epoch,类别totaltext1500个训练集的话,标注数据2k个应该足够了
- lr设置方面:
- 初始化0.007
- 每个iter改变一次:lr= (1 − iter/maxiter )^power,power=0.9,maxter=epoch*(iterperepoch),decay=0.0001,moment=0.9
- 数据增强方面:
- -10-10随机旋转
- 随机裁剪
- 随机偏移
- all resize 640*640
- 预测阶段,等比例
- 缺陷:
- 重叠文本无法处理
- 重叠文本无法处理
模型效果(附带数据说明)
1)弯曲文本:
2、多方向文本
3、多语言
4、中英文