第三名方案
第三名方案
作者:KaizaburoChubachi
发布时间:2020-07-22
感谢主办方举办这场有趣且无数据泄露的竞赛。我在这次竞赛中学到了很多。我也要感谢其他参赛者。其他参赛者独特的解决方案给我留下了深刻印象。我会阅读所有发布的解决方案。
以下是我的解决方案描述。
验证 (Validation)
我根据质量因子分层,随机将文件名按 80% 和 20% 的比例划分。观察测试集的预测分布,封面图像的比例似乎相对较高。但是,我认为基于 AUC 的指标对这种不平衡数据具有鲁棒性,因此我在验证级别上没有对其进行特殊处理。
方法 (Methods)
我创建了两个模型的集成:一个用于输入 3 通道彩色图像,另一个用于特征工程并输入 DCT 系数。
3通道彩色图像模型 (验证得分: 0.9382 (RGB), 0.9378 (YUV), 0.9364 (Lab))
- 我制作了 3 个模型,分别输入 RGB、YUV 和 Lab 图像。
- 我使用 cv2 进行加载和转换。起初我也尝试直接从 DCT 系数使用未量化的 YCrCb,但准确率与用 cv2 读取的 YUV 几乎相同,所以我选择了更快的 cv2。
- 4 分类任务。
- EfficientNet-b5
- 我也尝试了 RegNet、ResNeSt、HRNet、PyConv 等,但在我的实现中,对于此任务,EfficientNet 比其他耗时相近的模型更准确。
- 数据增强为翻转 & 旋转90(共 8 种类型)以及 CutMix。
- 我尝试对不同文件夹中具有相同文件名的数据进行 CutMix,但准确率变差了。是变得太难了吗?
- SGD + 余弦退火,每个周期 50 个 epoch。
- 超参数几乎与 RegNet 论文 中的 EfficientNet 实验相同。
- 当我尝试 b0 和 b2 时,我发现多周期余弦退火的准确率优于总 epoch 数相同的单周期。特别是第二个周期的提升很大。最后,我运行了 4 个周期,每个周期 50 个 epoch。
DCT 系数模型 (验证得分: 0.9022)
我认为在使用 RGB 的模型中很难做出差异化,所以我尝试通过试错创建一个直接处理 DCT 系数的网络,但这是唯一有效的一个。
- 输入特征为:
- 数值的独热编码 {<= -16, -15, -14, …, -2, -1, 1, 2, …, 14, 15, 16 <=}
- 位置编码(我不确定是否有帮助)
- 量化矩阵 / 50
- 一个矩阵,满足 matrix[i, j] = cos(pi * (i % 8) / 16) * cos(pi * (j % 8) / 16)
- 模型架构为:
- EfficientNet-b2
- 将第一个步幅 2 改为 1
- 将 Conv2d 的膨胀率改为 8。此修改应用于从第一个(修补后的)步幅 2 Conv2d 到下一个步幅 2 Conv2d 之间的 Conv2d 层。
- 数据增强为翻转 & 旋转90。
- SGD + 余弦退火,50 个 epoch,1 个周期。
- 该模型训练时间较长,因此我无法进行适当的消融研究,但根据是否更改步幅,存在大约 0.01 的差异。
MLP 集成 (验证得分: 0.9399, 私有: 0.930)
由于 DCT 系数模型的输出与 3 通道彩色图像模型的输出截然不同,很好地混合它可以提高准确率,但由于作为单模型它比 3 通道模型弱得多,简单平均效果不好。所以我使用了 MLP。
- 输入每个网络经过平均池化后的 DCT Binary、RGB、YUV、Lab 的特征图。(这里有个错误,对