單卡就能運(yùn)行AI畫(huà)畫(huà)模型,小白也能看懂的教程來(lái)了,還有100萬(wàn)卡時(shí)免費(fèi)NPU算力可用丨昇思MindSpore
基于擴(kuò)散模型打造
允中 發(fā)自 凹非寺
量子位 | 公眾號(hào) QbitAI
昇思MindSpore首個(gè)可訓(xùn)練的diffusion模型DDPM馬上要和大家見(jiàn)面了,操作簡(jiǎn)單,可訓(xùn)練+推理,單卡即可運(yùn)行。
最近爆火的AI繪圖,相信大家并不陌生了。
從AI繪圖軟件生成的作品打敗一眾人類(lèi)藝術(shù)家,斬獲數(shù)字藝術(shù)類(lèi)冠軍,到如今DALL.E、Imagen、novelai等國(guó)內(nèi)外平臺(tái)遍地開(kāi)花。
也許你也曾點(diǎn)開(kāi)過(guò)相關(guān)網(wǎng)站,嘗試讓AI描繪你腦海中的風(fēng)景,又或者上傳了一張自己帥氣/美美的照片,然后對(duì)著最后生成的糙漢哭笑不得。
那么,在你感受AI繪圖魅力的同時(shí),有沒(méi)有想過(guò)(不你肯定想過(guò)),它背后的奧妙究竟是什么?
△美國(guó)科羅拉多州技術(shù)博覽會(huì)中獲得數(shù)字藝術(shù)類(lèi)冠軍的作品——《太空歌劇院》
一切,都要從一個(gè)名為DDPM的模型說(shuō)起…
DDPM是什么?
DDPM模型,全稱(chēng)Denoising Diffusion Probabilistic Model,可以說(shuō)是現(xiàn)階段diffusion模型的開(kāi)山鼻祖。
不同于前輩GAN、VAE和flow等模型,diffusion模型的整體思路是通過(guò)一種偏向于優(yōu)化的方式,逐步從一個(gè)純?cè)胍舻膱D片中生成圖像。
△現(xiàn)在已有生成圖像模型的對(duì)比
有的小伙伴可能會(huì)問(wèn)了,什么是純?cè)胍魣D片?
很簡(jiǎn)單,老式電視機(jī)沒(méi)信號(hào)時(shí),伴隨著“刺啦刺啦”噪音出現(xiàn)的雪花圖片,就屬于純?cè)胍魣D片。
而DDPM在生成階段所做的事情,就是把這些個(gè)“雪花”一點(diǎn)點(diǎn)移除,直到清晰的圖像露出它的廬山真面目,我們把這個(gè)階段稱(chēng)之為“去噪”。
△純?cè)胍魣D片:老電視的雪花屏
通過(guò)描述,大家可以感受到,去噪其實(shí)是個(gè)相當(dāng)復(fù)雜的過(guò)程。
沒(méi)有一定的去噪規(guī)律,可能你忙活了好半天,到最后還是對(duì)著奇形怪狀的圖片欲哭無(wú)淚。
當(dāng)然,不同類(lèi)型的圖片也會(huì)有不同的去噪規(guī)律,至于怎么讓機(jī)器學(xué)會(huì)這種規(guī)律,有人靈機(jī)一動(dòng),想到了一種絕妙的方法:
既然去噪規(guī)律不好學(xué),那我為什么不先通過(guò)加噪的方式,先把一張圖片變成純?cè)胍魣D像,再把整個(gè)過(guò)程反著來(lái)一遍呢?
這便奠定了diffusion模型整個(gè)訓(xùn)練-推理的流程:先在前向過(guò)程(forward process)通過(guò)逐步加噪,將圖片轉(zhuǎn)換為一個(gè)近似可用高斯分布的純?cè)胍魣D像;
緊接著在反向過(guò)程(reverse process)中逐步去噪,生成圖像;
最后以增大原始圖像和生成圖像的相似度作為目標(biāo),優(yōu)化模型,直至達(dá)到理想效果。
△DDPM的訓(xùn)練-推理流程
到這里,不知道大家的接受度怎樣?如果感覺(jué)沒(méi)問(wèn)題,輕輕松松的話,準(zhǔn)備好,我要開(kāi)始上大招(深入理論)啦。
1.1.1 前向過(guò)程(forward process)
前向過(guò)程又稱(chēng)為擴(kuò)散過(guò)程(diffusion process),整體是一個(gè)參數(shù)化的馬爾可夫鏈(Markov chain)。從初始數(shù)據(jù)分布x0~q(x)出發(fā),每步在數(shù)據(jù)分布中添加高斯噪音,持續(xù)T次。其中從第t-1步xt-1到第t步xt的過(guò)程可以用高斯分布表示為:
通過(guò)合適的設(shè)置,隨著t不斷增大,原始數(shù)據(jù)x0會(huì)逐漸失去他的特征。我們可以理解為,在進(jìn)行了無(wú)限次的加噪步驟后,最終的數(shù)據(jù)xT會(huì)變成沒(méi)有任何特征,完全是隨機(jī)噪音的圖片,也就是我們最開(kāi)始說(shuō)的“雪花屏”。
在這個(gè)過(guò)程中,每一步的變化是可以通過(guò)設(shè)置超參βt來(lái)控制,在我們知曉最開(kāi)始的圖片是什么的前提下,前向加噪的整個(gè)過(guò)程可以說(shuō)是已知且可控的,我們完全能知道每一步的生成數(shù)據(jù)是什么樣子。
但問(wèn)題在于,每次的計(jì)算都需要從起始點(diǎn)出發(fā),結(jié)合每一步的過(guò)程,慢慢推導(dǎo)至你想要的某步數(shù)據(jù)xt,過(guò)于麻煩。好在因?yàn)楦咚狗植嫉囊恍┨匦?,我們可以一步到位,直接從x0得到xt。
注意,這里的和
為組合系數(shù),本質(zhì)上是超參的βt表達(dá)式。
1.1.2 反向過(guò)程(reverse process)
和前向過(guò)程同理,反向過(guò)程也是一個(gè)馬爾可夫鏈(Markov chain),只不過(guò)這里用到的參數(shù)不同,至于具體參數(shù)是什么,這個(gè)就是我們需要機(jī)器來(lái)學(xué)習(xí)的部分啦。
在了解機(jī)器如何學(xué)習(xí)前,我們首先思考,基于某一個(gè)原始數(shù)據(jù)x0,從第t步xt,精準(zhǔn)反推回第t-1步xt-1的過(guò)程應(yīng)該是怎樣的?
答案是,這個(gè)仍可以用高斯分布表示:
注意這里必須要考慮x0,意思是反向過(guò)程最后生成圖像還是要與原始數(shù)據(jù)有關(guān)。輸入貓的圖片,模型生成的圖像應(yīng)該是貓,輸入狗的圖片,生成的圖像也應(yīng)該和狗相關(guān)。若是去除掉x0,則會(huì)導(dǎo)致無(wú)論輸入哪種類(lèi)型的圖片訓(xùn)練,最后diffusion生成的圖像都一樣,“貓狗不分”。
經(jīng)過(guò)一系列的推導(dǎo),我們發(fā)現(xiàn),反向過(guò)程中的參數(shù)和
,竟然還是可以用x0,xt,以及參數(shù)βt,
表示出來(lái)的,是不是很神奇~
當(dāng)然,機(jī)器事先并不知道這個(gè)真實(shí)的反推過(guò)程,它能做到的,只是用一個(gè)大概近似的估計(jì)分布去模擬,表示為p0(xt-1|xt)。
1.1.3 優(yōu)化目標(biāo)
在最開(kāi)始我們提到,需要通過(guò)增大原始數(shù)據(jù)和反向過(guò)程最終生成數(shù)據(jù)的相似度來(lái)優(yōu)化模型。在機(jī)器學(xué)習(xí)中,我們計(jì)算該相似度參考的是交叉熵(cross entropy)。
關(guān)于交叉熵,學(xué)術(shù)上給出的定義是“用于度量?jī)蓚€(gè)概率分布間的差異性信息”。換句話講,交叉熵越小,模型生成的圖片就越和原始圖片接近。但是,在大多數(shù)情況下,交叉熵是很難或者無(wú)法通過(guò)計(jì)算得出的,所以我們一般會(huì)通過(guò)優(yōu)化一個(gè)更簡(jiǎn)單的表達(dá)式,達(dá)到同樣的效果。
Diffusion模型借鑒了VAE模型的優(yōu)化思路,將variational lower bound(VLB,又稱(chēng)ELBO)替代cross entropy來(lái)作為最大優(yōu)化目標(biāo)。通過(guò)無(wú)數(shù)步的分解,我們最終得到:
看到這么復(fù)雜的公式,好多小伙伴肯定頭都大了。但不慌,這里需要關(guān)注的,只是中間的Lt-1罷了,它表示的是xt和xt-1之間估計(jì)分布p0(xt-1|xt)和真實(shí)分布q(xt-1|xt,x0)的差距。差距越小,模型最后生成圖片的效果就越好。
1.1.4 上代碼
在了解完DDPM背后的原理,接下來(lái)就讓我們看看DDPM模型究竟是如何實(shí)現(xiàn)…
才怪啦。相信看到這里的你,肯定也不想遭受成百上千行代碼的洗禮。
好在MindSpore已經(jīng)為大家提供了開(kāi)發(fā)完備的DDPM模型,訓(xùn)練推理兩手抓,操作簡(jiǎn)單,單卡即可運(yùn)行,想要體驗(yàn)效果的小伙伴,只需要先
pip install denoising-diffusion-mindspore
然后,參考如下代碼配置參數(shù):
對(duì)重要的參數(shù)進(jìn)行一些解析:
- GaussianDiffusion
- image_size: 圖片大小
- timesteps: 加噪步數(shù)
- sampling_timesteps: 采樣步數(shù),為提升推理性能,需小于加噪步數(shù)
- Trainer
- folder_or_dataset: 對(duì)應(yīng)圖片中的path, 可以是已下載數(shù)據(jù)集的路徑(str),也可以是已做好數(shù)據(jù)處理的VisionBaseDataset, GeneratorDataset 或 MindDataset
- train_batch_size:batch大小
- train_lr: 學(xué)習(xí)率
- train_num_steps: 訓(xùn)練步數(shù)
如何借助啟智社區(qū)運(yùn)算DDPM模型?
DDPM模型運(yùn)算可使用啟智社區(qū)的NPU算力。
悄悄打一個(gè)廣告,啟智社區(qū)聯(lián)合MindSpore為大家發(fā)福利啦,一年份100萬(wàn)卡時(shí)的免費(fèi)算力,快去啟智社區(qū)(https://openi.pcl.ac.cn/)體驗(yàn)吧~
“進(jìn)階版”DDPM模型MindDiffusion
DDPM只是Diffusion這個(gè)故事的開(kāi)篇。目前,已有無(wú)數(shù)的研究人員被其背后瑰麗的世界所吸引,紛紛投身其中。
在不斷優(yōu)化模型的同時(shí),他們也逐漸開(kāi)發(fā)了Diffusion在各個(gè)領(lǐng)域的應(yīng)用。
其中,包括了計(jì)算機(jī)視覺(jué)領(lǐng)域的圖像優(yōu)化、inpainting、3D視覺(jué)、自然語(yǔ)言處理中的text-to-speech、AI for Science領(lǐng)域的分子構(gòu)象生成、材料設(shè)計(jì)等。
更有來(lái)自斯坦福大學(xué)計(jì)算機(jī)科學(xué)系的博士生Eric Zelikman大開(kāi)腦洞,嘗試將DALLE-2與最近另一個(gè)大火的對(duì)話模型ChatGPT相結(jié)合,制作出了溫馨的繪本故事。
△DALLE-2 + ChatGPT合力完成的,關(guān)于一個(gè)名叫“羅比”的小機(jī)器人的故事
不過(guò)最廣為大眾所知的,應(yīng)該還是它在文生圖(text-to-image)方面的應(yīng)用。輸入幾個(gè)關(guān)鍵詞或者一段簡(jiǎn)短的描述,模型便可以為你生成相對(duì)應(yīng)的圖畫(huà)。
比如,輸入“城市夜景 賽博朋克 格雷格·路特科夫斯基”,最后生成的便是一張色彩鮮明,頗具未來(lái)科幻風(fēng)格的作品。
再比如,輸入“莫奈 撐陽(yáng)傘的女人 月亮 夢(mèng)幻”,生成的便是一張極具有朦朧感的女人畫(huà)像,色彩搭配的風(fēng)格有木有讓你想起莫奈的《睡蓮》?
想要寫(xiě)實(shí)風(fēng)格的風(fēng)景照作為屏保?沒(méi)問(wèn)題!
△鄉(xiāng)村 田野 屏保
想要二次元濃度多一點(diǎn)的?也可以!
△來(lái)自深淵 風(fēng)景 繪畫(huà) 寫(xiě)實(shí)風(fēng)格
以上這些圖片,均是由MindDiffusion平臺(tái)的下的悟空畫(huà)畫(huà)制作而成的哦,悟空畫(huà)畫(huà)是基于擴(kuò)散模型的中文文生圖大模型,由華為諾亞團(tuán)隊(duì)攜手中軟分布式并行實(shí)驗(yàn)室,昇騰計(jì)算產(chǎn)品部聯(lián)合開(kāi)發(fā)。
模型基于Wukong dataset訓(xùn)練,并使用昇思框架(MindSpore)+昇騰(Ascend)軟硬件解決方案實(shí)現(xiàn)。
此外,MindDiffusion中的模型也會(huì)同樣具備可訓(xùn)練、可推理的特性,預(yù)計(jì)明年就能出現(xiàn)。
歡迎大家頭腦風(fēng)暴,生成各種別具風(fēng)格的作品哦~
(據(jù)說(shuō)有人已經(jīng)開(kāi)始嘗試“張飛繡花”、“劉華強(qiáng)砍瓜”、“古希臘神大戰(zhàn)哥斯拉”了。ummmm,怎么辦,突然就很期待成品了呢(?ω?))
One More Thing
最后的最后,在Diffusion爆火的如今,有人也曾發(fā)出過(guò)疑問(wèn),它為什么可以做到如此的大紅大紫,甚至風(fēng)頭開(kāi)始超過(guò)GAN網(wǎng)絡(luò)?
Diffusion的優(yōu)勢(shì)突出,劣勢(shì)也很明顯;它的諸多領(lǐng)域仍是空白,它的前方還是一片未知。
為什么卻有那么多的人在孜孜不倦地對(duì)它進(jìn)行研究呢?
興許,馬毅教授的一番話,可以給我們提供一種解答。
但diffusion process的有效性、以及很快取代GAN也充分說(shuō)明了一個(gè)簡(jiǎn)單道理:
幾行簡(jiǎn)單正確的數(shù)學(xué)推導(dǎo),可以比近十年的大規(guī)模調(diào)試超參調(diào)試網(wǎng)絡(luò)結(jié)構(gòu)有效得多。
或許,這就是Diffusion模型的魅力吧。