返回列表

15th place solution

345. Kuzushiji Recognition | kuzushiji-recognition

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

第15名方案

作者:statsu | 比赛排名:第15名

感谢主办方举办了一场非常有趣的比赛。

我的解决方案概要如下:

  • 使用 Centernet(HourglassNet 主干网络)进行检测
  • 使用基于 Resnet 的模型进行字符类别分类

最终的私有排行榜得分为 0.900。

识别流程图

这是我的代码:https://github.com/statsu1990/kuzushiji-recognition

图像预处理

  • 转为灰度图
  • 高斯滤波
  • 伽马校正
  • Ben 预处理

检测

推理

使用两阶段 Centernet 通过以下步骤检测字符的边界框:

  • 步骤 1:将图像调整为 512x512,并使用 Centernet1 估计边界框 1。
  • 步骤 2:使用边界框 1 去除图像中最外层边界框之外的部分。
  • 步骤 3:将图像调整为 512x512,并使用 Centernet2 估计边界框 2。
  • 步骤 4:集成边界框 1 和 2 以创建最终边界框。

模型架构

  • Centernet1 是两个 Centernet 的集成(基于单堆叠 Hourglassnet)。
  • Centernet2 是两个 Centernet 的集成(基于单堆叠 Hourglassnet)。

训练

关于 Centernet1,情况如下:

  • 训练数据:使用所有数据的 80%。(通过随机数改变数据划分来创建两个模型。)
  • 数据增强:水平移动、亮度调整

数据扩充对于防止过拟合至关重要。

关于 Centernet2,情况如下:

  • 训练数据:使用所有数据的 80%。(通过随机数改变数据划分来创建两个模型。)
  • 数据增强:随机擦除、水平移动、亮度调整

由于输入图像去除了边界框之外的部分,水平数据增强的效果较弱。因此,随机擦除是必不可少的。

分类

推理

使用以下步骤,利用三个基于 Resnet 的集成模型对字符标签进行分类:

  • 步骤 1:使用估计的边界框从原始图像中裁剪文本图像,并调整为 64x64。
  • 步骤 2:使用测试时增强(9 种水平移动),通过 3 个基于 Resnet 的模型对文本标签进行分类。
  • 步骤 3:集成三个模型的分类结果并估计最终分类结果。

模型架构

  • Resnet base1:在 FC 层拼接了 Log(边界框长宽比)。
  • Resnet base2:更改了 Resnet base1 的训练数据。
  • Resnet base3:架构与 Resnet base1 相同。在训练数据中加入了来自上述检测模型以及 Resnet base1 和 2 集成模型的伪标签输入。

训练

除了上述学习数据的更改和使用伪标签外,每个模型都是相同的。

  • 学习数据:使用所有数据的 80%。
  • 数据扩充:水平移动、旋转、缩放、随机擦除

硬件

所有模型均使用我家庭服务器上的一块 GTX 1080 进行训练。

同比赛其他方案