返回列表

8th place solution: Two stage & kuzushiji data augmentation

345. Kuzushiji Recognition | kuzushiji-recognition

开始: 2019-07-18 结束: 2019-10-14 计算机视觉 数据算法赛
第8名方案:两阶段策略与Kuzushiji数据增强

第8名方案:两阶段策略与Kuzushiji数据增强

作者: t-hanya | 排名: 第8名

感谢主办方和Kaggle提供了如此有趣的比赛,也祝贺所有享受这次挑战的选手!

我的方法是一个两阶段的流水线。我使用 CenterNet [1] 进行字符检测,使用 MobileNetV3 [2] 进行分类。我的方法概览如下图所示。所有模型都是在我家用服务器上安装的单块 GTX 970 GPU 上训练的,因此我的方案在资源利用上相对高效。

方案概览

检测

我选择 CenterNet 是因为其无锚框的设计非常简洁。Kuzushiji(变体假名)字符的长宽比范围很大,且相对于页面尺寸较小,因此似乎很难找到合适的锚框设置。

  • 架构: ResNet18 + U-Net
  • 数据: 使用完整训练集训练单个模型
  • TTA(测试时增强): 尺度调整 -> 多尺度 + 边界框投票(bbox voting,提出于 [3])

分类

我结合了多种数据增强方法来提高准确率。(黑色网格线仅用于可视化)

数据增强示例1 数据增强示例2 数据增强示例3

其他常规的增强操作如颜色、亮度、对比度、旋转和噪声也有应用。训练时的实际输入图像如下所示。这些操作是通过 albumentations 库实现的。

实际输入图像
  • 架构: MobileNetV3 Large
  • 损失函数: 标准 softmax 交叉熵损失
  • 训练: 使用完整训练集训练单个模型
  • 微调: 使用完整训练集 + 伪标签(通过分数 > 0.9 过滤),并减少数据增强。
  • 无 TTA:(我尝试过多尺度推理,但其贡献非常小。)

本地验证

正如讨论的那样,按书名进行分组划分非常重要。字符的外观随书籍的不同而有很大差异。我使用按书名划分的分组进行本地验证,以选择超参数、数据增强类型和测试时的阈值。我将检测器的分数阈值设为 0.3(<- 默认值 = 0.5)以减少假阴性预测,将分类器的分数阈值设为 0.5 以减少假阳性预测。

放弃的想法

  • [分类器] 少数类过采样和类别平衡损失 [4]。我尝试了这些技术来解决类别不平衡问题,但其贡献非常小。
  • [分类器] 基于序列的训练以利用上下文信息(阅读顺序预测 -> CNN + Bi-LSTM),但没有奏效。
  • [检测器/分类器] 从 CODH 网站收集大量未标注图像,用于表征学习或半监督学习。我放弃了这个
同比赛其他方案