第三名解决方案
第三名解决方案
感谢组织者举办了一场精彩的比赛。
我的解决方案基于CLIP模型,通过直接预测384维嵌入向量实现,参考了这个基线笔记本。
数据集
我使用了约40万条数据。Diffusion DB的验证分数与LB分数相关性良好,但仍存在0.025~0.03的差距。
-
Vizwiz图像字幕数据集 ~7万条
- 这是实验的关键数据集
- 使用该数据训练时,本地验证集与LB分数为0.5415/0.5309;而不使用时则为0.5528/0.48765
- 我认为该字幕数据集通常比COCO更具描述性、更多样化且文本更长
- 原始训练样本为23K,但每个样本最多有5个字幕,因此为每个样本采样了3个字幕
-
Diffusion DB,30万条
- 仅使用SD2生成的图像,这是为了提升本地验证与LB分数的相关性
- 21万条来自提示词过滤,另外8万条图像来自使用训练模型的困难采样
-
COCO,2.5万条
- 在使用Vizwiz数据训练的情况下,该数据集的贡献相对较低
-
Lexica.art数据集,1万条
模型
-
仅使用CLIP模型
- 基线模型是ViT Base 224(laion2B),几乎所有实验都基于此模型。该模型的最终分数为:本地验证集/公开榜/私有榜 = 0.6402/0.61402/0.61357
- 单一最佳模型:ViT L 336(open ai),本地验证集/公开榜/私有榜 = 0.6658/0.63557/0.63425
- 对于更大的模型(ViT-H和ConvNext xxLarge),我未能找到合适的训练参数
- 最佳提交:集成模型,包括ViT-L(laion2b, openai, datacompxl)、ViT-H和ConvNext Large/xxLarge,本地验证集/公开榜/私有榜 = 0.6791/0.64935/0.64814
训练策略
CLIP微调
与Imagenet权重相比,微调CLIP模型需要格外小心,我们必须尽可能保留原始CLIP权重以获得最佳性能。我发现以下两种方法总共提升了约0.02的分数,并花费了大量时间寻找最佳超参数。
-
LP-FT(线性探测后微调)
-
EMA与分层学习率衰减的组合
- 该方法在这篇CLIP微调论文中有研究
- ViT-B的最佳参数为(EMA衰减率,分层衰减)= (0.9998, 0.4)
- 但对于ViT-L,该方法效果不佳,分层衰减=0.6时效果最佳。似乎初始层的衰减因子应约为1e-6,因此对于更大的模型,我们需要选择更大的后期衰减率
这两种方法不仅具有直接影响,还具有间接影响——通过这些方法,我们可以在保持CLIP原始权重的同时提高学习率,从而获得更好的结果。
数据增强
代码
这是我的提交笔记本。