Kaggle Stable Diffusion赛题 高分思路

文章转载自公众号:Coggle数据科学,版权归原作者所有!

最近Stable Diffusion - Image to Prompts在火热进行中,在论坛中Little Boat也分享了现在的金牌思路,非常值得学习。

高分思路步骤

https://www.kaggle.com/competitions/stable-diffusion-image-to-prompts/discussion/398529

步骤1:数据清洗

从Stable Diffusion 2M数据集开始,根据提示语句嵌入相似性进行过滤,删除嵌入相关性大于0.95的图像/提示对,结果少于500K张图像。

此步骤是为了删除根据prompt删除重复的样本,这样也防止模型过拟合,加快模型训练速度。

步骤2:构建验证集

还要下载30K和80K图像数据集。将一些图像作为验证集(但删除了其中25K张不高度相关的图像)。

30K数据集链接:https://www.kaggle.com/competitions/stable-diffusion-image-to-prompts/discussion/391500

80K数据集链接:https://www.kaggle.com/competitions/stable-diffusion-image-to-prompts/discussion/390674

为什么使用Stable Diffusion 2M之外的数据作为验证集呢?这里主要是因为数据分布的问题,Stable Diffusion 2M的文本很多都比较相似,因此使用其他数据集作为验证集比较合适。

步骤3:训练CLIP模型

加载预训练的OpenAI CLIP模型(或选择其他的模型),解冻几个transformer层,训练一个模型。

CLIP(Contrastive Language-Image Pre-Training)是由OpenAI提出的一种预训练模型,可以学习如何理解自然语言和图像之间的关系。

class Net(nn.Module): def __init__(self): super(Net, self).__init__()
        clip = AutoModel.from_pretrained("openai/clip-vit-large-patch14")
        self.vision = clip.vision_model
        self.fc = nn.Linear(1024, 384)

def forward(self, x): out = self.vision(x)['pooler_output'] return self.fc(out)


训练代码:https://www.kaggle.com/code/xiaozhouwang/model-training-script/notebook?scriptVersionId=123954941

步骤4:选择prompt关键词

使用在测试数据上训练的句子嵌入的模型生成自己的样本,预测预测和实际数据的余弦相似性,以帮助您决定生成哪些图像来关注您的主要模型的弱点。

这一步部分是方案的关键,识别出CLIP效果比较差的prompt,然后进行特定的训练。

步骤5:prompt生成器

编写一个prompt生成器,并使用它来生成prompt候选。

生成代码:https://www.kaggle.com/code/xiaozhouwang/hard-coded-prompt-generator/

也可以用prompt微调GPT2模型,并将其用作prompt生成器。

步骤6:筛选样本

将步骤5与已有的训练数据进行计算文本相似度,按照相似度过滤其他样本。

步骤7:数据集划分

将生成的图像分为训练集和测试集,扩展两个数据集。再次训练主模型,必要时解冻更多层。

步骤8:迭代训练

反复执行步骤4、5、6和7,以获得更多的样本并提高模型预测。

思路关键点

  1. 这个思路可以产生无限的训练样本,因此计算机的能力是唯一的限制因素。

  2. 通过对比CLIP模型的预测结果,最终可以获取得到效果比较差的prompt。

  3. 训练了一个GPT2用于生成prompt的过程,这个可以保证prompt的真实性和有效性。

【竞赛报名/项目咨询请加微信:mollywei007】

上一篇

高中生与留学升学顾问打交道需要注意什么?(上)

下一篇

美高在寻找和培养什么样的孩子?

你也可能喜欢

  • 暂无相关文章!

关注热点

返回顶部