單卡就能運行AI畫畫模型,小白也能看懂的教程來了,還有100萬卡時免費NPU算力可用
最近爆火的AI繪圖,相信大家并不陌生了。
從AI繪圖軟件生成的作品打敗一眾人類藝術家,斬獲數字藝術類冠軍,到如今DALL.E、Imagen、novelai等國內外平臺遍地開花。
也許你也曾點開過相關網站,嘗試讓AI描繪你腦海中的風景,又或者上傳了一張自己帥氣/美美的照片,然后對著最后生成的糙漢哭笑不得。
那么,在你感受AI繪圖魅力的同時,有沒有想過(不你肯定想過),它背后的奧妙究竟是什么?
△美國科羅拉多州技術博覽會中獲得數字藝術類冠軍的作品——《太空歌劇院》
一切,都要從一個名為DDPM的模型說起…
DDPM是什么?
DDPM模型,全稱Denoising Diffusion Probabilistic Model,可以說是現階段diffusion模型的開山鼻祖。
不同于前輩GAN、VAE和flow等模型,diffusion模型的整體思路是通過一種偏向于優化的方式,逐步從一個純噪音的圖片中生成圖像。
△現在已有生成圖像模型的對比
有的小伙伴可能會問了,什么是純噪音圖片?
很簡單,老式電視機沒信號時,伴隨著“刺啦刺啦”噪音出現的雪花圖片,就屬于純噪音圖片。
而DDPM在生成階段所做的事情,就是把這些個“雪花”一點點移除,直到清晰的圖像露出它的廬山真面目,我們把這個階段稱之為“去噪”。
△純噪音圖片:老電視的雪花屏
通過描述,大家可以感受到,去噪其實是個相當復雜的過程。
沒有一定的去噪規律,可能你忙活了好半天,到最后還是對著奇形怪狀的圖片欲哭無淚。
當然,不同類型的圖片也會有不同的去噪規律,至于怎么讓機器學會這種規律,有人靈機一動,想到了一種絕妙的方法:
既然去噪規律不好學,那我為什么不先通過加噪的方式,先把一張圖片變成純噪音圖像,再把整個過程反著來一遍呢?
這便奠定了diffusion模型整個訓練-推理的流程:先在前向過程(forward process)通過逐步加噪,將圖片轉換為一個近似可用高斯分布的純噪音圖像;
緊接著在反向過程(reverse process)中逐步去噪,生成圖像;
最后以增大原始圖像和生成圖像的相似度作為目標,優化模型,直至達到理想效果。?
△DDPM的訓練-推理流程
到這里,不知道大家的接受度怎樣?如果感覺沒問題,輕輕松松的話,準備好,我要開始上大招(深入理論)啦。
1.1.1 前向過程(forward process)
前向過程又稱為擴散過程(diffusion process),整體是一個參數化的馬爾可夫鏈(Markov chain)。從初始數據分布x0~q(x)出發,每步在數據分布中添加高斯噪音,持續T次。其中從第t-1步xt-1到第t步xt的過程可以用高斯分布表示為:
通過合適的設置,隨著t不斷增大,原始數據x0會逐漸失去他的特征。我們可以理解為,在進行了無限次的加噪步驟后,最終的數據xT會變成沒有任何特征,完全是隨機噪音的圖片,也就是我們最開始說的“雪花屏”。
在這個過程中,每一步的變化是可以通過設置超參βt來控制,在我們知曉最開始的圖片是什么的前提下,前向加噪的整個過程可以說是已知且可控的,我們完全能知道每一步的生成數據是什么樣子。
但問題在于,每次的計算都需要從起始點出發,結合每一步的過程,慢慢推導至你想要的某步數據xt,過于麻煩。好在因為高斯分布的一些特性,我們可以一步到位,直接從x0得到xt。?
注意,這里的
和為組合系數,本質上是超參的βt表達式。
1.1.2 反向過程(reverse process)
和前向過程同理,反向過程也是一個馬爾可夫鏈(Markov chain),只不過這里用到的參數不同,至于具體參數是什么,這個就是我們需要機器來學習的部分啦。
在了解機器如何學習前,我們首先思考,基于某一個原始數據x0,從第t步xt,精準反推回第t-1步xt-1的過程應該是怎樣的?
答案是,這個仍可以用高斯分布表示:
注意這里必須要考慮x0,意思是反向過程最后生成圖像還是要與原始數據有關。輸入貓的圖片,模型生成的圖像應該是貓,輸入狗的圖片,生成的圖像也應該和狗相關。若是去除掉x0,則會導致無論輸入哪種類型的圖片訓練,最后diffusion生成的圖像都一樣,“貓狗不分”。
經過一系列的推導,我們發現,反向過程中的參數
和
,竟然還是可以用x0,xt,以及參數βt,表示出來的,是不是很神奇~
當然,機器事先并不知道這個真實的反推過程,它能做到的,只是用一個大概近似的估計分布去模擬,表示為p0(xt-1|xt)。
1.1.3 優化目標
在最開始我們提到,需要通過增大原始數據和反向過程最終生成數據的相似度來優化模型。在機器學習中,我們計算該相似度參考的是交叉熵(cross entropy)。
關于交叉熵,學術上給出的定義是“用于度量兩個概率分布間的差異性信息”。換句話講,交叉熵越小,模型生成的圖片就越和原始圖片接近。但是,在大多數情況下,交叉熵是很難或者無法通過計算得出的,所以我們一般會通過優化一個更簡單的表達式,達到同樣的效果。
Diffusion模型借鑒了VAE模型的優化思路,將variational lower bound(VLB,又稱ELBO)替代cross entropy來作為最大優化目標。通過無數步的分解,我們最終得到:
看到這么復雜的公式,好多小伙伴肯定頭都大了。但不慌,這里需要關注的,只是中間的Lt-1罷了,它表示的是xt和xt-1之間估計分布p0(xt-1|xt)和真實分布q(xt-1|xt,x0)的差距。差距越小,模型最后生成圖片的效果就越好。
1.1.4 上代碼
在了解完DDPM背后的原理,接下來就讓我們看看DDPM模型究竟是如何實現…
才怪啦。相信看到這里的你,肯定也不想遭受成百上千行代碼的洗禮。
好在MindSpore已經為大家提供了開發完備的DDPM模型,訓練推理兩手抓,操作簡單,單卡即可運行,想要體驗效果的小伙伴,只需要先
然后,參考如下代碼配置參數:
對重要的參數進行一些解析:
GaussianDiffusion
- image_size: 圖片大小
- timesteps: 加噪步數
- sampling_timesteps: 采樣步數,為提升推理性能,需小于加噪步數
Trainer
- folder_or_dataset: 對應圖片中的path, 可以是已下載數據集的路徑(str),也可以是已做好數據處理的VisionBaseDataset, GeneratorDataset 或 MindDataset
- train_batch_size:batch大小
- train_lr: 學習率
- train_num_steps: 訓練步數
“進階版”DDPM模型MindDiffusion
DDPM只是Diffusion這個故事的開篇。目前,已有無數的研究人員被其背后瑰麗的世界所吸引,紛紛投身其中。
在不斷優化模型的同時,他們也逐漸開發了Diffusion在各個領域的應用。
其中,包括了計算機視覺領域的圖像優化、inpainting、3D視覺、自然語言處理中的text-to-speech、AI for Science領域的分子構象生成、材料設計等。
更有來自斯坦福大學計算機科學系的博士生Eric Zelikman大開腦洞,嘗試將DALLE-2與最近另一個大火的對話模型ChatGPT相結合,制作出了溫馨的繪本故事。
△DALLE-2 + ChatGPT合力完成的,關于一個名叫“羅比”的小機器人的故事
不過最廣為大眾所知的,應該還是它在文生圖(text-to-image)方面的應用。輸入幾個關鍵詞或者一段簡短的描述,模型便可以為你生成相對應的圖畫。
比如,輸入“城市夜景 賽博朋克 格雷格·路特科夫斯基”,最后生成的便是一張色彩鮮明,頗具未來科幻風格的作品。
再比如,輸入“莫奈 撐陽傘的女人 月亮 夢幻”,生成的便是一張極具有朦朧感的女人畫像,色彩搭配的風格有木有讓你想起莫奈的《睡蓮》?
想要寫實風格的風景照作為屏保?沒問題!
△鄉村 田野 屏保
想要二次元濃度多一點的?也可以!
△來自深淵 風景 繪畫 寫實風格
以上這些圖片,均是由MindDiffusion平臺的下的悟空畫畫制作而成的哦,悟空畫畫是基于擴散模型的中文文生圖大模型,由華為諾亞團隊攜手中軟分布式并行實驗室,昇騰計算產品部聯合開發。
模型基于Wukong dataset訓練,并使用昇思框架(MindSpore)+昇騰(Ascend)軟硬件解決方案實現。
躍躍欲試的小伙伴先別著急,為了讓大家擁有更好的體驗,更多自行開發的空間,我們打算讓MindDiffusion中的模型同樣也具備可訓練、可推理的特性,預計在明年就要和大家見面啦,敬請期待。
歡迎大家頭腦風暴,生成各種別具風格的作品哦~
(據去內部打探情報的同事說,有人已經開始嘗試“張飛繡花”、“劉華強砍瓜”、“古希臘神大戰哥斯拉”了。ummmm,怎么辦,突然就很期待成品了呢(?ω?))
One More Thing
最后的最后,在Diffusion爆火的如今,有人也曾發出過疑問,它為什么可以做到如此的大紅大紫,甚至風頭開始超過GAN網絡?
Diffusion的優勢突出,劣勢也很明顯;它的諸多領域仍是空白,它的前方還是一片未知。
為什么卻有那么多的人在孜孜不倦地對它進行研究呢?
興許,馬毅教授的一番話,可以給我們提供一種解答。
但diffusion process的有效性、以及很快取代GAN也充分說明了一個簡單道理:
幾行簡單正確的數學推導,可以比近十年的大規模調試超參調試網絡結構有效得多。
或許,這就是Diffusion模型的魅力吧。
參考鏈接(可滑動查看):
[1]https://medium.com/mlearning-ai/ai-art-wins-fine-arts-competition-and-sparks-controversy-882f9b4df98c
[2]Jonathan Ho, Ajay Jain, and Pieter Abbeel. Denoising Diffusion Probabilistic Models. arXiv:2006.11239, 2020.
[3]Ling Yang, Zhilong Zhang, Shenda Hong, Runsheng Xu, Yue Zhao, Yingxia Shao, Wentao Zhang, Ming-Hsuan Yang, and Bin Cui. Diffusion models: A comprehensive survey of methods and applications. arXiv preprint arXiv:2209.00796, 2022.
[4]https://lilianweng.github.io/posts/2021-07-11-diffusion-models
[5]https://github.com/lvyufeng/denoising-diffusion-mindspore
[6]https://zhuanlan.zhihu.com/p/525106459
[7]https://zhuanlan.zhihu.com/p/500532271
[8]https://www.zhihu.com/question/536012286
[9]https://mp.weixin.qq.com/s/XTNk1saGcgPO-PxzkrBnIg
[10]https://m.weibo.cn/3235040884/4804448864177745