345. Kuzushiji Recognition | kuzushiji-recognition
感谢主办方举办这场非常有趣的比赛。祝贺所有完成比赛的人以及获奖者。
以下是我的解决方案概述。
代码地址:https://github.com/linhuifj/kaggle-kuzushiji-recognition
方法流程:字符检测 -> 获取文本行 -> 文本行识别 -> 后处理
训练了一个检测器来查找输入图像中的所有单词。这里采用了 HTC(Hybrid Task Cascade),这是目前最先进(SOTA)的两阶段目标检测方法;
使用 CTPN 使用的文本行构建算法将单词分组到不同的行中;

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

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

从检测阶段提取的行被调整大小(并填充)为 32x800 维度,并输入到行识别模型中。我们采用 CRNN 模型进行行识别。对于每一行,模型有 200 个输出。我们通过 KENLM 训练了一个六元语言模型,并使用束搜索来解码模型的 CTC 输出。每个字符的位置是通过考虑原始图像中每行的坐标和 CTC 的输出来计算的。
我们将每张图像二值化以获取单词的笔画。对于识别阶段计算的每个中心点,我们找到最近的笔画并将中心点设置为找到位置的坐标。这被称为“中心点调整”。
因为我们的行可能会重叠并产生重复结果,所以我们使用另一个脚本来删除重复的输出。

