返回列表

4th place solution

345. Kuzushiji Recognition | kuzushiji-recognition

开始: 2019-07-18 结束: 2019-10-14 计算机视觉 数据算法赛
第4名解决方案

第4名解决方案

作者:kolman
比赛排名:第4名

感谢主办方举办这场非常有趣的比赛。祝贺所有完成比赛的人以及获奖者。

以下是我的解决方案概述。
代码地址:https://github.com/linhuifj/kaggle-kuzushiji-recognition
方法流程:字符检测 -> 获取文本行 -> 文本行识别 -> 后处理

检测

训练了一个检测器来查找输入图像中的所有单词。这里采用了 HTC(Hybrid Task Cascade),这是目前最先进(SOTA)的两阶段目标检测方法;

使用 CTPN 使用的文本行构建算法将单词分组到不同的行中;

文本行构建

从输入图像中裁剪出文本行以进行逐行识别。在裁剪行时,记录“行顶部”线(下图中的红线)的每个像素坐标,用于将裁剪行中每个单词的预测位置映射回整页图像。

行顶部标记

裁剪后的行图像均无倾斜,如下图所示。

裁剪后的行图像

识别

从检测阶段提取的行被调整大小(并填充)为 32x800 维度,并输入到行识别模型中。我们采用 CRNN 模型进行行识别。对于每一行,模型有 200 个输出。我们通过 KENLM 训练了一个六元语言模型,并使用束搜索来解码模型的 CTC 输出。每个字符的位置是通过考虑原始图像中每行的坐标和 CTC 的输出来计算的。

后处理

我们将每张图像二值化以获取单词的笔画。对于识别阶段计算的每个中心点,我们找到最近的笔画并将中心点设置为找到位置的坐标。这被称为“中心点调整”。

因为我们的行可能会重叠并产生重复结果,所以我们使用另一个脚本来删除重复的输出。

有趣的发现

  1. 位置精度
    通过添加注意力损失的多任务训练将提高 CTC 输出的位置精度。有关模型架构,请参阅“JOINT CTC-ATTENTION BASED END TO-END SPEECH RECOGNITION USING MULTI-TASK LEARNING”。我们发现 CTC 的输出具有较小的编辑距离,而注意力的输出具有较高的行精度,但对于此任务,较小的编辑距离更好。我们不能使用超过 2 层的 LSTM,否则结果的位置会发生漂移并变得不准确。
  2. 数据增强
    数据增强对于行识别模型非常重要。我们使用了 CLAHE、Solarize、RandomBrightness、RandomContrast、随机缩放、随机扭曲进行数据增强。增强后的行如下所示:
    数据增强示例1
    数据增强示例2
  3. 正则化
    在 CNN 的最后一层和 LSTM 的第一层之间添加了 Dropout。也使用了 Cutout。模型会过拟合并且
同比赛其他方案