第46名方案:使用分类方法且几乎未使用外部数据
第46名方案:使用分类方法且几乎未使用外部数据
作者: Miroslav Valan
比赛排名: 第46名
恭喜所有的获奖者以及那些学到了新东西的人!我当然学到了很多。
我想尝试一下 fastai,参加这次比赛是因为我以为数据集很小。哎,我大错特错了。
方案详情
- 软件: Fastai
- 资源: 仅限 Kaggle Kernels
- 网络架构: EfficientNet 2xB3, 2xB5 和 1x seresnext101,每个模型均使用5折交叉验证
- 预处理: 部分模型使用了裁剪,其他模型未进行预处理。
- 数据增强: 训练变换包括亮度、对比度、hflip()、vflip()(部分模型),以及两种自定义过程:不同比例(从1:1到4:3)的随机缩放,有时裁剪至4:3比例。
- 优化器: Adam
- 损失函数: 带有标签平滑的交叉熵(CE with label smoothing)
- 学习率调度器: one_cycle,最大值为 6e-4
- 验证方式: 官方数据5折分层验证,如果使用外部数据,仅添加到训练集而不加入验证集。
分数表现
我进行了快速提交,所以只知道 Public LB(公开排行榜)的成绩:
仅使用官方数据:
- B3: 0.813 (448px)
- B5: 0.817 (456px)
- seresnext101: 0.799 (416px)
官方数据 + 外部训练数据(每类截断至2000个样本):
- B3: 0.822 (456px)
- B5: 不太确定,但 CV 提升到了 0.94+ 所以我加上了它 (512px)。在这里我相信直觉,也就是相信我的 CV。
最终提交
- 提交0: 合并所有 EfficientNet 输出,无 TTA。Public LB: 0.831,Private: 0.925。
- 提交1: 合并所有 EfficientNet 输出 + h_flip。Public LB: 0.828,Private: 0.925。
- 提交2: 合并所有输出 + h_flip。Public LB: 0.829,Private: 0.926。
策略说明:
- 排除了提交1,因为我认为加上 h_flip 会更稳健。这是个好决定。
- 在之前的某些比赛中,我只会集成 LB 分数最高的模型,但在这里我只做了相关性 <0.9 的模型集成。
- 我在最后一天加入了 seresnext,虽然它在 Public LB 上表现似乎不太好,但结果证明它在 Private 上表现相当不错。我早期用 seresnext 做的一些尝试得分约为 0.79(Public),这在 Private 上转化为约 0.92。
总结
考虑到以下情况,我非常满意:
- 我将其视为分类任务而不是回归任务(虽然回归可能更合适)。
- 我几乎没使用外部数据(GPU 限制扼杀了我的主要计划,我第一次失去了动力)。
- 我使用了 fastai,它很容易上手,但我发现实现自己的想法(如多头输出和不同损失的组合)并不那么直接。(所以我第二次失去了动力)。
- 我没有使用伪标签。
- 我也开始分享解决方案并讨论话题。
有趣的事实: 我是一名正在休育儿假的兽医,我的大部分实验是通过手机完成的。