文章目錄[隱藏]
文章轉載自公眾(zhong) 號:Coggle數據科學,版權歸原作者所有!
最近Stable Diffusion - Image to Prompts在火熱進行中,在論壇中Little Boat也分享了現在的金牌思路,非常值得學習(xi) 。
高分思路步驟
https://www.kaggle.com/competitions/stable-diffusion-image-to-prompts/discussion/398529
步驟1:數據清洗
從(cong) Stable Diffusion 2M數據集開始,根據提示語句嵌入相似性進行過濾,刪除嵌入相關(guan) 性大於(yu) 0.95的圖像/提示對,結果少於(yu) 500K張圖像。
此步驟是為(wei) 了刪除根據prompt刪除重複的樣本,這樣也防止模型過擬合,加快模型訓練速度。
步驟2:構建驗證集
還要下載30K和80K圖像數據集。將一些圖像作為(wei) 驗證集(但刪除了其中25K張不高度相關(guan) 的圖像)。
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
為(wei) 什麽(me) 使用Stable Diffusion 2M之外的數據作為(wei) 驗證集呢?這裏主要是因為(wei) 數據分布的問題,Stable Diffusion 2M的文本很多都比較相似,因此使用其他數據集作為(wei) 驗證集比較合適。
步驟3:訓練CLIP模型
加載預訓練的OpenAI CLIP模型(或選擇其他的模型),解凍幾個(ge) transformer層,訓練一個(ge) 模型。
CLIP(Contrastive Language-Image Pre-Training)是由OpenAI提出的一種預訓練模型,可以學習(xi) 如何理解自然語言和圖像之間的關(guan) 係。
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關鍵詞
使用在測試數據上訓練的句子嵌入的模型生成自己的樣本,預測預測和實際數據的餘(yu) 弦相似性,以幫助您決(jue) 定生成哪些圖像來關(guan) 注您的主要模型的弱點。
這一步部分是方案的關(guan) 鍵,識別出CLIP效果比較差的prompt,然後進行特定的訓練。
步驟5:prompt生成器
編寫(xie) 一個(ge) prompt生成器,並使用它來生成prompt候選。
生成代碼:https://www.kaggle.com/code/xiaozhouwang/hard-coded-prompt-generator/
也可以用prompt微調GPT2模型,並將其用作prompt生成器。
步驟6:篩選樣本
將步驟5與(yu) 已有的訓練數據進行計算文本相似度,按照相似度過濾其他樣本。
步驟7:數據集劃分
將生成的圖像分為(wei) 訓練集和測試集,擴展兩(liang) 個(ge) 數據集。再次訓練主模型,必要時解凍更多層。
步驟8:迭代訓練
反複執行步驟4、5、6和7,以獲得更多的樣本並提高模型預測。
思路關鍵點
-
這個(ge) 思路可以產(chan) 生無限的訓練樣本,因此計算機的能力是唯一的限製因素。
-
通過對比CLIP模型的預測結果,最終可以獲取得到效果比較差的prompt。
-
訓練了一個(ge) GPT2用於(yu) 生成prompt的過程,這個(ge) 可以保證prompt的真實性和有效性。
評論已經被關(guan) 閉。