第15名方案
第15名方案
作者:statsu | 比赛排名:第15名
感谢主办方举办了一场非常有趣的比赛。
我的解决方案概要如下:
- 使用 Centernet(HourglassNet 主干网络)进行检测
- 使用基于 Resnet 的模型进行字符类别分类
最终的私有排行榜得分为 0.900。
这是我的代码:https://github.com/statsu1990/kuzushiji-recognition
图像预处理
检测
推理
使用两阶段 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 进行训练。