認識了sd和國內版的平替liblib,有的小伙伴現在已經迫不及待的想開始做畫了,執行力強的小伙伴已經用stay body fusion做出一些自己喜歡的圖片。
畢竟stability fusion不像major journey有張數的限制,我們可以在服務器上無限的作畫,無限的測試,它相較于miss jenny更專業一些,這對于我們新手來說還是很友好的。
今天我們來聊一聊這個stability就是繪畫的底層原理,畢竟我覺得通過了解這個stability fusion的底層原理,我們才能更好的去控制它。我最近看了stability fusion相關的論文和一些視頻,里面涉及到一些專業的理論比如擴散算法,神經網絡,我試著用簡單的語言方式把這個ai繪圖的原理和過程解釋出來。
我站在窗前,望著天津大學的校園,一陣秋風吹過,零星的楊樹葉隨風飄落在柏油路上。說實話,看到這個我就突然開悟了,這個就是AI繪圖的原理啊。stable de fusion的核心原理呢,就是一個逆向降噪過程,舉個栗子,咱們來看一下這個圖,草坪上落了星星點點的花瓣,我們把草坪上的一片片花瓣看成圖片上的噪點。原來干凈的草坪被花瓣逐漸的填滿,就是一個給圖片加噪點的過程,這個過程在技術上來說呢,并沒有什么難度。真正有難度的是把一張鋪滿噪點的圖片逆向恢復成原圖像,就好比說把一個鋪滿花瓣的草坪用某種方法逆向還原成原來干凈草坪的樣子,而這個過程呢,其實也就是ai繪圖的過程。
不論是stable diff US還是made journey,他在繪圖的時候都是先給出一個模糊的的圖片,然后這個圖片逐漸的清晰。本質上呢,這就是一個通過算法給圖片降噪的過程。那么現在就有兩個問題,第一就是為什么要給這個圖片加噪點,第二呢,就是這個噪點應該如何去去除?我們先來說第一個問題啊,為什么要給這個圖片加噪點,其實就是為了給圖片降維,圖片是由一個個有顏色的像素排列而成的,而這個像素的顏色,我們可以用這個rgb值來表示,如果一張512×512像素的圖片,那么這張圖片在計算機的眼中就可以被轉化為512×512×3的一組數字,這個三呢就代表紅綠藍三個是組合的像素顏色。對于計算機來說呢,讀取786432枚的數據是很容易的,但是如果把它放在算法里去跑,顯然這個維度太高了,對神經網絡學習,對算力有相當高的要求,顯然不是一張家用的顯卡能搞定的。解決這個問題的辦法呢,也很簡單,就是通過加噪點給圖片進行降維。我們還是拿這個眼前的草坪來舉例子,大家把上面的花瓣想象成噪點,但我們一看到這個圖片就能知道它是一個草坪,雖然上面也有很多的花瓣,但它其實并沒有完全的蓋住草坪,所以我們大腦里看到這個景象的時候,已經接收到了足夠的信息,告訴我們花瓣下面的這個東西就是草坪。同樣的道理,我們通過不斷的給圖片加噪點,然后去訓練ai ,ai就能逐漸的從一個滿是噪點的圖片中提取到這個圖片的關鍵信息,繼而知道這個圖片內容是什么。但是注意啊,我這里用的是不斷的給圖片加造,也就是說這個過程是循序漸進的,而在這個循序漸進的過程中,ai只抓取到了重點的信息,對這張圖片進行了標注,因此它所用到的數據量相對于原圖來說是非常小的。小代表著兩件事情。第一,他可以學習更多的圖片,而眾多的圖片通過ai的學習和分類被打包成了我們所謂的模型。第二,更少的信息代表著需要更少的算力,這也讓stability fusion有了在消費級顯卡上運行的可能性。
其實今天寫的stable di fusion的原理,也是一個降維的過程。因為關于stability fusion的具體原理還有神經網絡是怎么運作的?不是一句話就能講清楚的,需要大量的論文和專業知識,但是我把其中的一些關鍵點用比喻的方式講出來,方便理解,這實際上呢,也是對知識的一種降維,它的好處就是大家大概能理解sd運行的原理,比起看論文省去了大量的時間和腦細胞。缺點就是大家只是大概了解了,并沒有掌握它,因為這個知識被降維了。
第二個問題,這個噪點如何去去除,說起這個問題呢,又要涉及到一大堆名詞什么ve。1 unit呀clip呀巴拉巴拉巴拉什么之類的,那咱們 還是回到我們的草坪啊。如果說現在是一片草坪,上面只有一個花瓣,我們想把這個草坪恢復原貌是非常容易的,只需把這個花瓣拿掉就可以了。如果說又落下一片花瓣,想恢復原貌也容易,先把第二片花瓣拿掉,然后就成了剛才這個只有一片花瓣的狀態,再把第一片花瓣也拿掉,就恢復了。以此論推,假設落了N次花瓣,只需要先把它恢復到第N-1的狀態,然后類似剝洋蔥似的層層迭代,就恢復到了最開始的狀態。而對應到我們sd上面就是我們的采樣,通過上面說的清除花瓣的例子,我們能理解,步數越高,理論上來說,最后的效果也就越好。假如采樣步驟只有一步,相當于清潔工只清理了一下,清理的效果,也一定會非常的差。,那么我們清理花瓣的過程,其實就是一個圖片降噪的過程,在ai的運行中會有專門的算法去預測圖片的噪點,然后每次迭代的去降噪,這也就是我們為什么看到made journey或者stability fusion作圖的時候剛出來的這個圖片都是模糊的,然后逐漸清晰的原因,因為這就是AI的不斷的迭代和降噪。而對應到sd里,這個步驟就是采樣器,在sd的的后臺有不同的采樣器,我們可以理解為對一個落滿花瓣的操作的不同的細節方法我們的呢有的人是一片片片去剪,有的人是用這個吸塵器吸,有的人用笤帚掃的。大家如果還不理解的話可以想一想這個春天滿地的落花夏天滿天的飛沙秋天飄下的落葉還有冬天飄落的雪花其實都是一個加噪和降噪的過程如果說這個ai是一門藝術的話那這門藝術它肯定是源于生活的好我們現在呢。
大概知道了,這個ai是怎么通過降噪去畫出一張圖的,那它又是如何根據我們的指令去作圖的?比如我告訴這個ai說給我畫一條太空中的狗,那他是怎么畫出來的?要做到這個呢,需要兩個條件,首先呢,就是我們上面講到的,必須有一個足夠大的降維的,能夠快速提供運算的圖片的數據庫,這個東西呢,也就是我們通常說的模型,第二點呢,就是要讓ai去理解我們要求的意思,并且呢,可以在模型中找到我們符合要求的圖片的庫去進行創作,那第一點呢,我剛剛已經說到了,就是通過這個降維和擴散算法來解決,那我們來說一下這個第二點,說實話,我也沒有想到一個太好的比喻啊,但是其實那也不太難理解。簡單的說呢,就是我們說的每一個詞,在這個ai看來它都是一個數字,這個就用到一個叫transformer的模型,chan的ppt里那個t啊,就是代表這個transform其實理解了圖片降維之后transform也可以簡單的理解為對文的一個降維,比如說太空中的狗,那么這個太空啊,可能就被ai轉換為數字十這個狗呢,可能會被轉換為數字20注意啊,我這里只是打個比方,這個數字肯定是不對的,但是我們現在假設這個數字是對的,然后ai再通學習呢,將這個20的狗和我們圖片模型中狗的部分,比如說這個坐標是30相對應,那么當我們輸入這個狗的時候ai就知道哦,我接收到了一個20,然后。我應該去圖片素材庫里找這個30的坐標,那么這個30的坐標就代表著有許多。狗的圖片所以這就是為什么ai可以理解我們要求的意思并做出相應的圖片就是因為他把這個文字的坐標和我們圖片的坐標做了一個對應但是說歸這么說啊其實實際操作的過程會比這個復雜很多大家肉眼可見的就是ai在收到我們指令的時候他會先出一個很模糊的圖像然后再進行迭代圖片才會逐漸的清楚這就好比是一個小孩在這個積雪上畫一輛汽車他先畫出來一個車輪然后呢又下起雪來了他就回家休學習了一下學會了這個怎么畫車門然后雪停了之后他又出來他就把這個車門畫好了然后又下起雪來了他又回家休息了一下然后學會了這個畫車窗然后雪又停了他就又出來把這個車窗,畫也畫好,就這么去,反反復復的操作。這個下雪呢?就好比是在加造,然后這個畫畫呢,就好比是在降噪,最后呢,等這個雪停了之后,車也就畫好了。這個比喻可能不是那么的貼切啊,但是這個也是我現有的智商下能想到的恰當的比喻了,也希望大家能理解我這個意思。那這節課呢?說實話,有點無聊,因為它太偏理論了,可能很多小伙伴聽了會打瞌睡啊,但是我也實在想不出這個更好的解釋方式了,起碼感覺用這種比喻的方式來解釋,要比大家去看論文的話來的容易一些,那我們通過這節課打好了基礎之后,下節課呢,我們就可以開始實操了。