感谢主办方、组织者、所有参与者以及我的队友 @manwithaflower!
解决方案简要总结:
用于预测提示词嵌入的模型(ViT, ConvNext):
- 首先,使用从LAION数据集中筛选的图像-文本对为每个模型分别训练一个MLP投影头。根据图像/文本的余弦相似度过滤图像,仅保留得分最高的图像。这实际上使得数据集主要由包含文字且相关提示词也包含相同文字的图像组成——但效果仍然惊人地好,单模型在公开/私有测试集上分别达到0.54434和0.54351的分数。
- 使用筛选后的提示词/图像对进一步微调模型。根据余弦相似度过滤提示词,过滤越严格效果越好,我们最终使用的过滤阈值为0.55余弦相似度。主要使用了来自DiffusionDB 14M的数据、@xiaozhouwang 的GPT2与硬编码数据集、@jeinsong 的ChatGPT数据集、@motono0223 的数据集、从Discord下载并使用Open Prompts数据集中的URL获取的图像,以及从@tanreinama 90万数据集中的URL下载的图像。
- 微调时采用分层学习率衰减。
- 使用基于角距离的损失函数,其性能优于原始余弦相似度。
- 为了保持本地验证的一致性,根据余弦相似度从训练数据集中过滤掉与验证提示词相似的提示词。
- 使用Nelder-Mead最小化算法在本地验证集上确定各模型的集成权重。
最终集成模型在排行榜上公开/私有测试集分数分别为0.59333和0.59109。
结合BLIP-2图像字幕生成的检索式/kNN回归方法:
改进 @motono0223 的kNN回归方法:
- 从数据集中过滤掉重复的文本嵌入。
- 合并多个numpy数组的子数组。
- 通过简单的距离指数化对不同样本与示例之间的距离进行差异化惩罚。
- 添加更多样化的数据。
- 对存储的参考提示词嵌入数组进行内存映射,以实现无需将文件加载到内存中的高效访问。
这使得推理时间缩短至1小时,并在公开/私有测试集上达到0.57179和0.56952的分数。
使用BLIP-2和多样化波束搜索解码为每个测试图像生成20个不同的图像描述。将这些嵌入与相应的参考嵌入一起存储,并与检索式/kNN回归方法结合使用。这在公开/私有测试集上达到0.58821和0.58617的分数。
将两种方法集成!最终集成模型在排行榜上公开/私有测试集分数分别为0.61004和0.60787。