返回列表

13-th place solution [Knowledge Distillation helps a lot]

512. Google Universal Image Embedding | google-universal-image-embedding

开始: 2022-07-11 结束: 2022-10-10 计算机视觉 数据算法赛
第13名方案 [知识蒸馏效果显著]

第13名方案 [知识蒸馏效果显著]

作者:Starry (Master) | 比赛排名:第13名

恭喜获奖者。有点遗憾只拿到了银牌。
我的方案可以总结如下:

  1. 数据集:Products10k, Google Landmark, DeepFashion, MET Artwork Dataset, Omni 等。(在数据集选择上浪费了大量时间,导致没有时间尝试更多想法。🙁)
  2. 模型骨干:强大的 Openclip-Vit-H,线性投影层(FC, Dropout, BN),ArcFace 损失函数。
  3. 冻结与微调训练策略:冻结 CLIP 的 2/3 transformer blocks,微调 1/3 transformer blocks(学习率 lr=5e-5),同时使用较大的学习率(lr=5e-3)训练线性投影层。
  4. 关系知识蒸馏:因为上述步骤中的嵌入维度是 256。直接使用自适应平均池化会损害模型的性能。感谢 这个讨论。我找到了 这篇论文。该论文提出了关系知识蒸馏策略,并在多个图像检索任务中表现良好。遵循这篇论文,我在原始线性投影层之后直接插入了一个线性投影层(降维 256->64)并训练学生网络。

与直接使用自适应平均池化相比,蒸馏可以带来 0.015~0.03 的 LB 提升。
Vit-L avgpooling: 0.608, distillation: 0.623
Vit-L-336 avgpooling: 0.628, distillation: 0.643
Openclip-Vit-H avgpooling: 0.641, distillation: 0.663
(均为 Public LB 成绩)
( 但是!!!!也许直接训练 64 维投影层的效果也不错,我没时间做更多实验了...☹️)。(已解决)

更新:代码(不含 collating 的简单版本)已发布在 GitHub

更新:直接训练 64 维投影层在 Public/Private LB 上的得分为 0.644/654,而蒸馏在 Public/Private LB 上的得分为 0.663/0.666,这意味着知识蒸馏确实提高了模型的性能。✔️

同比赛其他方案