第55名方案分享与经验教训
第55名方案分享与经验教训
作者: khyeh (Grandmaster) & KKY (Master)
感谢 Kaggle 和 Google 举办了这场精彩的比赛,我和 @evilpsycho42 在比赛中度过了非常愉快的时光。在我目前参加的所有比赛中,这是一场非常特别的比赛,它要求参赛者收集各个领域的图像数据集,以训练出性能尽可能最佳的模型。
感谢 @dschettler8845 发起了外部数据讨论帖并提供了链接列表,这帮我们节省了大量寻找数据的时间。
方案概览
数据
数据集:
- 服装:H&M
- 地标:Google Landmark 竞赛数据
- 包装商品:Product 10k, RP2K
- 家具:Amazon 产品数据集
- 店面:Storefront-146
- 艺术品:MET
- 菜肴:iFood
数据采样:
- 根据这篇文章中提到的比例,为每个领域分配实例数量。
- 在训练集和验证集中使用不同的 ID,因为我们希望模型能够泛化到未见过的实例上。
建模
- 骨干网络:CLIP 224/336 L + 线性颈
- 损失函数:ArcFace (scale = 10, margin = 0.3)
- 训练流程:
- 阶段 1:冻结骨干网络 + 余弦退火,warmup 0.1,lr=0.001,100个 epoch
- 阶段 2:解冻骨干网络 + 余弦退火,warmup 0.1,lr=1e-5,20个 epoch
- 采样策略:ID 均匀采样
- 验证策略:
- 使用与训练集不同的实例
- 选取拥有 >1 张图片的实例作为查询图片,其余作为索引图片
结果
- CLIP 224 L:CV 0.7949,Public LB:0.580,Private LB:0.598
- CLIP 336 L:CV 0.8074,Public LB:0.597,Private LB:0.614
无效尝试
- 模型融合:
- 同时训练 Swin Large 384 + CLIP
- 分别训练 Swin Large 384 + CLIP,结合两者的骨干网络并训练一个新的投影头
- 使用显著性分割进行图像预处理/裁剪
经验教训
在看到了第6名的精彩方案后,我们意识到如果想要提升最终方案的表现,本可以做得更好:
- 我们应该尝试不同的骨干网络:例如 OpenCLIP ViT-H/14 224x224。
- 我们应该先尝试让模型过拟合。我们在冻结骨干网络的情况下,使用了较小的学习率和很少的 epoch 来训练投影头。虽然快速迭代很重要,但在最终方案中避免欠拟合同样重要!