使用 InstructPix2Pix 對 Stable Diffusion 進行指令微調(diào)


本文主要探討如何使用指令微調(diào)的方法教會 Stable Diffusion 按照指令 PS 圖像。這樣,我們 Stable Diffusion 就能聽得懂人話,并根據(jù)要求對輸入圖像進行相應(yīng)操作,如: 將輸入的自然圖像卡通化 。

圖 1:我們探索了 Stable Diffusion 的指令微調(diào)能力。這里,我們使用不同的圖像和提示對一個指令微調(diào)后的 Stable Diffusion 模型進行了測試。微調(diào)后的模型似乎能夠理解輸入中的圖像操作指令。(建議放大并以彩色顯示,以獲得最佳視覺效果)
InstructPix2Pix: Learning to Follow Image Editing Instructions 一文首次提出了這種教 Stable Diffusion 按照用戶指令 編輯 輸入圖像的想法。本文我們將討論如何拓展 InstructPix2Pix 的訓(xùn)練策略以使其能夠理解并執(zhí)行更特定的指令任務(wù),如圖像翻譯 (如卡通化) 、底層圖像處理 (如圖像除雨) 等。本文接下來的部分安排如下:
指令微調(diào)簡介
本工作的靈感來源
數(shù)據(jù)集準備
訓(xùn)練實驗及結(jié)果
潛在的應(yīng)用及其限制
開放性問題
你可在 此處 找到我們的代碼、預(yù)訓(xùn)練模型及數(shù)據(jù)集。
引言與動機
指令微調(diào)是一種有監(jiān)督訓(xùn)練方法,用于教授語言模型按照指令完成任務(wù)的能力。該方法最早由谷歌在 Fine-tuned Language Models Are Zero-Shot Learners (FLAN) 一文中提出。最近大家耳熟能詳?shù)?Alpaca、FLAN V2 等工作都充分證明了指令微調(diào)對很多任務(wù)都有助益。
下圖展示了指令微調(diào)的一種形式。在 FLAN V2 論文 中,作者在一個樣本集上對預(yù)訓(xùn)練語言模型 (如 T5) 進行了微調(diào),如下圖所示。

圖 2: FLAN V2 示意圖 (摘自 FLAN V2 論文)。
使用這種方法,我們可以創(chuàng)建一個涵蓋多種不同任務(wù)的訓(xùn)練集,并在此數(shù)據(jù)集上進行微調(diào),因此指令微調(diào)可用于多任務(wù)場景:
輸入標簽任務(wù)Predict the sentiment of the
following sentence: “The movie
was pretty amazing. I could not
turn around my eyes even for a
second.”PositiveSentiment analysis /
Sequence classificationPlease answer the following
question.
What is the boiling point of
Nitrogen?320.4FQuestion answeringTranslate the following
English sentence into German: “I have
a cat.”Ich habe eine Katze.Machine translation………
在該理念的指導(dǎo)下,F(xiàn)LAN V2 的作者對含有數(shù)千個任務(wù)的混合數(shù)據(jù)集進行了指令微調(diào),以達成對未見任務(wù)的零樣本泛化:

圖 3: FLAN V2 用于訓(xùn)練與測試的混合任務(wù)集 (圖來自 FLAN V2 論文)。
我們這項工作背后的靈感,部分來自于 FLAN,部分來自 InstructPix2Pix。我們想探索能否通過特定指令來提示 Stable Diffusion,使其根據(jù)我們的要求處理輸入圖像。
預(yù)訓(xùn)練的 InstructPix2Pix 模型 擅長領(lǐng)會并執(zhí)行一般性指令,對圖像操作之類的特定指令可能并不擅長:

圖 4: 我們可以看到,對同一幅輸入圖像(左列),與預(yù)訓(xùn)練的 InstructPix2Pix 模型(中間列)相比,我們的模型(右列)能更忠實地執(zhí)行“卡通化”指令。第一行結(jié)果很有意思,這里,預(yù)訓(xùn)練的 InstructPix2Pix 模型很顯然失敗了。建議放大并以彩色顯示,以獲得最佳視覺效果。原圖見此處。
但我們?nèi)匀豢梢岳迷?InstructPix2Pix 上的一些經(jīng)驗和觀察來幫助我們做得更好。
另外,卡通化、圖像去噪 以及 圖像除雨 等任務(wù)的公開數(shù)據(jù)集比較容易獲取,所以我們能比較輕松地基于它們構(gòu)建指令提示數(shù)據(jù)集 (該做法的靈感來自于 FLAN V2)。這樣,我們就能夠?qū)?FLAN V2 中提出的指令模板思想遷移到本工作中。
數(shù)據(jù)集準備
卡通化
剛開始,我們對 InstructPix2Pix 進行了實驗,提示其對輸入圖像進行卡通化,效果不及預(yù)期。我們嘗試了各種推理超參數(shù)組合 (如圖像引導(dǎo)比 (image guidance scale) 以及推理步數(shù)),但結(jié)果始終不理想。這促使我們開始尋求不同的處理這個問題的方式。
正如上一節(jié)所述,我們希望結(jié)合以下兩個工作的優(yōu)勢:
(1) InstructPix2Pix 的訓(xùn)練方法,以及
(2) FLAN 的超靈活的創(chuàng)建指令提示數(shù)據(jù)集模板的方法。
首先我們需要為卡通化任務(wù)創(chuàng)建一個指令提示數(shù)據(jù)集。圖 5 展示了我們創(chuàng)建數(shù)據(jù)集的流水線:
圖 5: 本文用于創(chuàng)建卡通化訓(xùn)練數(shù)據(jù)集的流水線(建議放大并以彩色顯示,以獲得最佳視覺效果)。
其主要步驟如下:
請 ChatGPT 為 “Cartoonize the image.” 這一指令生成 50 個同義表述。
然后利用預(yù)訓(xùn)練的 Whitebox CartoonGAN 模型對 Imagenette 數(shù)據(jù)集 的一個隨機子集 (5000 個樣本) 中的每幅圖像生成對應(yīng)的卡通化圖像。在訓(xùn)練時,這些卡通化的圖像將作為標簽使用。因此,在某種程度上,這其實相當(dāng)于將 Whitebox CartoonGAN 模型學(xué)到的技能遷移到我們的模型中。
然后我們按照如下格式組織訓(xùn)練樣本:

圖 6: 卡通化數(shù)據(jù)集的樣本格式(建議放大并以彩色顯示,以獲得最佳視覺效果)。
你可以在 此處 找到我們生成的卡通化數(shù)據(jù)集。有關(guān)如何準備數(shù)據(jù)集的更多詳細信息,請參閱 此處。我們將該數(shù)據(jù)集用于微調(diào) InstructPix2Pix 模型,并獲得了相當(dāng)不錯的結(jié)果 (更多細節(jié)參見“訓(xùn)練實驗及結(jié)果”部分)。
下面,我們繼續(xù)看看這種方法是否可以推廣至底層圖像處理任務(wù),例如圖像除雨、圖像去噪以及圖像去模糊。
底層圖像處理 (Low-level image processing)
我們主要專注 MAXIM 論文中的那些常見的底層圖像處理任務(wù)。特別地,我們針對以下任務(wù)進行了實驗: 除雨、去噪、低照度圖像增強以及去模糊。
我們?yōu)槊總€任務(wù)從以下數(shù)據(jù)集中抽取了數(shù)量不等的樣本,構(gòu)建了一個單獨的數(shù)據(jù)集,并為其添加了提示,如下所示: 任務(wù) 提示 數(shù)據(jù)集 抽取樣本數(shù)
任務(wù)提示數(shù)據(jù)集抽取樣本數(shù)去模糊“deblur the blurry image”REDS (train_blur
及 train_sharp
)1200除雨“derain the image”Rain13k686去噪“denoise the noisy image”SIDD8低照度圖像增強"enhance the low-light image”LOL23
上表中的數(shù)據(jù)集通常以 輸入輸出對
的形式出現(xiàn),因此我們不必擔(dān)心沒有真值 (ground-truth)。你可以從 此處 找到我們的最終數(shù)據(jù)集。最終數(shù)據(jù)集如下所示:

圖 7: 我們生成的底層圖像處理數(shù)據(jù)集的樣本(建議放大并以彩色顯示,以獲得最佳視覺效果)。
總的來說,這種數(shù)據(jù)集的組織方式來源于 FLAN。在 FLAN 中我們創(chuàng)建了一個混合了各種不同任務(wù)的數(shù)據(jù)集,這一做法有助于我們一次性在多任務(wù)上訓(xùn)練單個模型,使其在能夠較好地適用于含有不同任務(wù)的場景。這與底層圖像處理領(lǐng)域的典型做法有很大不同。像 MAXIM 這樣的工作雖然使用了一個單一的模型架構(gòu),其能對不同的底層圖像處理任務(wù)進行建模,但這些模型的訓(xùn)練是在各個數(shù)據(jù)集上分別獨立進行的,即它是“單架構(gòu),多模型”,但我們的做法是“單架構(gòu),單模型”。
訓(xùn)練實驗及結(jié)果
這 是我們的訓(xùn)練實驗的腳本。你也可以在 Weight and Biases
上找到我們的訓(xùn)練日志 (包括驗證集和訓(xùn)練超參):
卡通化 (超參)
底層圖像處理 (超參)
在訓(xùn)練時,我們探索了兩種方法:
對 InstructPix2Pix 的 checkpoint 進行微調(diào)
使用 InstructPix2Pix 訓(xùn)練方法對 Stable Diffusion 的 checkpoint 進行微調(diào)
通過實驗,我們發(fā)現(xiàn)第一個方法從數(shù)據(jù)集中學(xué)得更快,最終訓(xùn)得的模型生成質(zhì)量也更好。
有關(guān)訓(xùn)練和超參的更多詳細信息,可查看 我們的代碼 及相應(yīng)的 Weights and Biases
頁面。
卡通化結(jié)果
為了測試 指令微調(diào)的卡通化模型 的性能,我們進行了如下比較:

圖 8: 我們將指令微調(diào)的卡通化模型(最后一列)的結(jié)果與 CartoonGAN 模型(第二列)以及預(yù)訓(xùn)練的 InstructPix2Pix 模型(第三列)的結(jié)果進行比較。顯然,指令微調(diào)的模型的結(jié)果與 CartoonGAN 模型的輸出更一致(建議放大并以彩色顯示,以獲得最佳視覺效果)。原圖參見此處。
測試圖像是從 ImageNette 的驗證集中采樣而得。在使用我們的模型和預(yù)訓(xùn)練 InstructPix2Pix 模型時,我們使用了以下提示: _“Generate a cartoonized version of the image”_,并將 image_guidance_scale
、 guidance_scale
、推理步數(shù)分別設(shè)為 1.5、7.0 以及 20。這只是初步效果,后續(xù)還需要對超參進行更多實驗,并研究各參數(shù)對各模型效果的影響,尤其是對預(yù)訓(xùn)練 InstructPix2Pix 模型效果的影響。
此處 提供了更多的對比結(jié)果。你也可以在 此處 找到我們用于比較模型效果的代碼。
然而,我們的模型對 ImageNette 中的目標對象 (如降落傘等) 的處理效果 不及預(yù)期,這是因為模型在訓(xùn)練期間沒有見到足夠多的這類樣本。這在某種程度上是意料之中的,我們相信可以通過增加訓(xùn)練數(shù)據(jù)來緩解。
底層圖像處理結(jié)果
對于底層圖像處理 (模型),我們使用了與上文相同的推理超參:
推理步數(shù): 20
image_guidance_scale
: 1.5guidance_scale
: 7.0
在除雨任務(wù)中,經(jīng)過與真值 (ground-truth) 和預(yù)訓(xùn)練 InstructPix2Pix 模型的輸出相比較,我們發(fā)現(xiàn)我們模型的結(jié)果相當(dāng)不錯:

圖 9: 除雨結(jié)果(建議放大并以彩色顯示,以獲得最佳視覺效果)。提示為 “derain the image”(與訓(xùn)練集相同)。原圖見此處 。
但低照度圖像增強的效果不盡如意:

圖 10: 低照度圖像增強結(jié)果(建議放大并以彩色顯示,以獲得最佳視覺效果)。提示為 “enhance the low-light image”(與訓(xùn)練集相同)。原圖見[此處]。
這種情況或許可以歸因于訓(xùn)練樣本不足,此外訓(xùn)練方法也尚有改進余地。我們在去模糊任務(wù)上也有類似發(fā)現(xiàn):

圖 11: 去模糊結(jié)果(建議放大并以彩色顯示,以獲得最佳視覺效果)。提示為 “deblur the image”(與訓(xùn)練集相同)。原圖見此處 。
我們相信對社區(qū)而言,底層圖像處理的任務(wù)不同組合如何影響最終結(jié)果
這一問題非常值得探索。 在訓(xùn)練樣本集中增加更多的任務(wù)種類并增加更多具代表性的樣本是否有助于改善最終結(jié)果? 這個問題,我們希望留給社區(qū)進一步探索。
你可以試試下面的交互式演示,看看 Stable Diffusion 能不能領(lǐng)會并執(zhí)行你的特定指令:
體驗地址:https://instruction-tuning-sd-instruction-tuned-sd.hf.space
潛在的應(yīng)用及其限制
在圖像編輯領(lǐng)域,領(lǐng)域?qū)<业南敕?(想要執(zhí)行的任務(wù)) 與編輯工具 (例如 Lightroom) 最終需要執(zhí)行的操作之間存在著脫節(jié)。如果我們有一種將自然語言的需求轉(zhuǎn)換為底層圖像編輯原語的簡單方法的話,那么用戶體驗將十分絲滑。隨著 InstructPix2Pix 之類的機制的引入,可以肯定,我們正在接近那個理想的用戶體驗。
但同時,我們?nèi)孕枰鉀Q不少挑戰(zhàn):
這些系統(tǒng)需要能夠處理高分辨率的原始高清圖像。
擴散模型經(jīng)常會曲解指令,并依照這種曲解修改圖像。對于實際的圖像編輯應(yīng)用程序,這是不可接受的。
開放性問題
目前的實驗仍然相當(dāng)初步,我們尚未對實驗中的很多重要因素作深入的消融實驗。在此,我們列出實驗過程中出現(xiàn)的開放性問題:
如果擴大數(shù)據(jù)集會怎樣? 擴大數(shù)據(jù)集對生成樣本的質(zhì)量有何影響?目前我們實驗中,訓(xùn)練樣本只有不到 2000 個,而 InstructPix2Pix 用了 30000 多個訓(xùn)練樣本。
延長訓(xùn)練時間有什么影響,尤其是當(dāng)訓(xùn)練集中任務(wù)種類更多時會怎樣? 在目前的實驗中,我們沒有進行超參調(diào)優(yōu),更不用說對訓(xùn)練步數(shù)進行消融實驗了。
如何將這種方法推廣至更廣泛的任務(wù)集?歷史數(shù)據(jù)表明,“指令微調(diào)”似乎比較擅長多任務(wù)微調(diào)。 目前,我們只涉及了四個底層圖像處理任務(wù): 除雨、去模糊、去噪和低照度圖像增強。將更多任務(wù)以及更多有代表性的樣本添加到訓(xùn)練集中是否有助于模型對未見任務(wù)的泛化能力,或者有助于對復(fù)合型任務(wù) (例如: “Deblur the image and denoise it”) 的泛化能力?
使用同一指令的不同變體即時組裝訓(xùn)練樣本是否有助于提高性能? 在卡通化任務(wù)中,我們的方法是在 數(shù)據(jù)集創(chuàng)建期間 從 ChatGPT 生成的同義指令集中隨機抽取一條指令組裝訓(xùn)練樣本。如果我們在訓(xùn)練期間隨機抽樣,即時組裝訓(xùn)練樣本會如何?對于底層圖像處理任務(wù),目前我們使用了固定的指令。如果我們按照類似于卡通化任務(wù)的方法對每個任務(wù)和輸入圖像從同義指令集中采樣一條指令會如何?
如果我們用 ControlNet 的訓(xùn)練方法會如何? ControlNet 允許對預(yù)訓(xùn)練文生圖擴散模型進行微調(diào),使其能以圖像 (如語義分割圖、Canny 邊緣圖等) 為條件生成新的圖像。如果你有興趣,你可以使用本文中提供的數(shù)據(jù)集并參考 這篇文章 進行 ControlNet 訓(xùn)練。
總結(jié)
通過本文,我們介紹了我們對“指令微調(diào)” Stable Diffusion 的一些探索。雖然預(yù)訓(xùn)練的 InstructPix2Pix 擅長領(lǐng)會執(zhí)行一般的圖像編輯指令,但當(dāng)出現(xiàn)更專門的指令時,它可能就沒法用了。為了緩解這種情況,我們討論了如何準備數(shù)據(jù)集以進一步微調(diào) InstructPix2Pix,同時我們展示了我們的結(jié)果。如上所述,我們的結(jié)果仍然很初步。但我們希望為研究類似問題的研究人員提供一個基礎(chǔ),并激勵他們進一步對本領(lǐng)域的開放性問題進行探索。
鏈接
訓(xùn)練和推理代碼
演示
InstructPix2Pix
本文中的數(shù)據(jù)集和模型
感謝 Alara Dirik 和 Zhengzhong Tu 的討論,這些討論對本文很有幫助。感謝 Pedro Cuenca 和 Kashif Rasul 對文章的審閱。
引用
如需引用本文,請使用如下格式:
@article{ ? Paul2023instruction-tuning-sd, ? author = {Paul, Sayak}, ? title = {Instruction-tuning Stable Diffusion with InstructPix2Pix}, ? journal = {Hugging Face Blog}, ? year = {2023}, ? note = {https://huggingface.co/blog/instruction-tuning-sd}, }
英文原文:https://hf.co/blog/instruction-tuning-sd
原文作者: Sayak Paul
譯者: Matrix Yao (姚偉峰),英特爾深度學(xué)習(xí)工程師,工作方向為 transformer-family 模型在各模態(tài)數(shù)據(jù)上的應(yīng)用及大規(guī)模模型的訓(xùn)練推理。
審校/排版: zhongdongy (阿東)