InstructPix2Pix: 動動嘴皮子,超越PS
摘要:InstructPix2Pix提出了一種使用文字編輯影象的方法:給定輸入影象和編輯指令,告訴模型要做什麼,模型將遵循這些指令來編輯影象。
本文分享自華為雲社群《InstructPix2Pix: 動動嘴皮子,超越PS》,作者:杜甫蓋房子。
InstructPix2Pix: Learning to Follow Image Editing Instructions
InstructPix2Pix提出了一種使用文字編輯影象的方法:給定輸入影象和編輯指令,告訴模型要做什麼,模型將遵循這些指令來編輯影象,如:

我們在ModelArts中釋出了一個notebook方便大家玩一玩,同時也將對模型的實現方法進行簡單介紹:

方法概覽
在InstructPix2Pix中,作者通過有監督的方法來實現文字編輯影象。方法主要包括兩部分:
- 資料集生成:作者整合了語言模型GPT-3和文生圖模型Stable Diffusion,生成了一個用於影象編輯的資料集;
- 模型訓練:作者使用生成的資料集訓練了一個條件擴散模型來實現文字編輯影象:

在推理時,影象在模型forward過程中被編輯,不需要微調,因此推理速度很快,可玩性較高。
資料準備
在資料準備時,首先通過GPT-3生成一些文字編輯指令,之後通過Stable Diffusion和Prompt-to-Prompt生成編輯前後文本影象對。
生成文字編輯指令
作者使用了700條人工標註的文字編輯指令三元組微調GPT-3,之後使用微調過的GPT-3生成大規模的文字三元組。如下圖,文字三元組包括(1)輸入描述;(2)編輯指令;(3)編輯後的描述。
在使用GPT-3生成資料集時只需提供輸入描述,高亮的編輯指令與輸出描述都由GPT-3生成,這樣可以保證描述指令的多樣性。

生成影象對
在得到描述對後,作者使用Stable Diffusion將編輯前與編輯後的描述轉換成影象對。在這個過程中面臨了一個挑戰:即使輸入提示只有微小的不同,生成的影象也無法保證內容的一致性,如分別使用“photograph of a girl riding a horse”和“photograph of a girl riding a dragon”為提示生成影象,會得到下圖內容:

為了解決此問題,作者使用了Prompt-to-Prompt方法。該方法通過在擴散過程中注入原始影象的注意力圖來控制編輯影象的注意力對映,實現了內容一致的影象生成。使用該方法與相同的提示詞,會得到下圖內容:

作者共生成 454,445 個樣本,生成的資料可以通過開源指令碼下載。
條件擴散模型
InstructPix2Pix通過訓練條件擴散模型來實現根據輸入影象和文字指令來編輯影象的功能。作者使用預訓練的Stable Diffusion對模型進行初始化,同時在第一個卷積層增加了額外的條件通道來支援影象編輯。在訓練時模型將輸入影象xx編碼為隱向量z=E(x)z=E(x),在擴散過程中將噪聲tt新增到編碼向量zz中得到隱噪聲變數ztzt,其中噪聲等級隨時間提升。
訓練一個網路ϵθϵθ來預測在給定的影象條件cIcI和文字指令cTcT下的噪聲tt,目標函式:

為了平衡擴散模型生成的樣本的質量和多樣性,作者在InstructPix2Pix中引入了Classifier-free Guidance方法。當我們使用一個條件來生成影象時,我們希望生成的影象與該條件有較高的相關性,Classifier-free Guidance利用一個隱式分類器 pθ(c∣zt)pθ(c∣zt) 來對生成的樣本進行評分。其中,ztzt是一個編碼影象的潛在表示,cc是一個條件,可以是一個文字描述或者其他影象。這個分類器會對每個樣本分配一個相應的分數,表示該樣本與給定條件的相關性。訓練時,會通過噪聲引導使概率偏向那些隱式分類器得分高的資料點上,從而提高生成的樣本與給定條件的相關性。
對於文字編輯影象任務,作者設計了評分網路 eθ(zt,cI,cT)eθ(zt,cI,cT),對於影象條件cIcI和文字指令cTcT設計了指導尺度sIsI和sTsT,可以調整網路對輸入影象和編輯指令的遵循程度:

針對不同的指導尺度作者給出了示例實驗結果:

更多實驗結果與侷限性討論可以在Project Page中檢視。
案例介紹
上文提到,為了方便大家玩一玩,我們ModelArts中釋出了一鍵執行的notebook,除了可以免去複雜的環境適配步驟外,還可以享受免費GPU資源
開源模型下載好慢好慢,體貼的我也為大家將資源轉存到OBS中:

此外,預訓練模型只支援英文,哪裡有英語廢,哪裡就有翻譯,翻譯模型也準備好了,驚不驚喜,意不意外:

案例使用gradio搭建了一個小小的應用,一鍵執行後直接在應用框輸入圖片與中文編輯命令生成結果即可:

使用結束後不要忘記關閉哦:

- 使用卷積神經網路實現圖片去摩爾紋
- 核心不中斷前提下,Gaussdb(DWS)記憶體報錯排查方法
- 簡述幾種常用的排序演算法
- 自動調優工具AOE,讓你的模型在昇騰平臺上高效執行
- GaussDB(DWS)運維:導致SQL執行不下推的改寫方案
- 詳解目標檢測模型的評價指標及程式碼實現
- CosineWarmup理論與程式碼實戰
- 淺談DWS函數出參方式
- 程式碼實戰帶你瞭解深度學習中的混合精度訓練
- python進階:帶你學習實時目標跟蹤
- Ascend CL兩種資料預處理的方式:AIPP和DVPP
- 詳解ResNet 網路,如何讓網路變得更“深”了
- 帶你掌握如何檢視並讀懂昇騰平臺的應用日誌
- InstructPix2Pix: 動動嘴皮子,超越PS
- 何為神經網路卷積層?
- 在昇騰平臺上對TensorFlow網路進行效能調優
- 介紹3種ssh遠端連線的方式
- 分散式資料庫架構路線大揭祕
- DBA必備的Mysql知識點:資料型別和運算子
- 5個高併發導致數倉資源類報錯分析