二代GAN網(wǎng)絡(luò)崛起?DALL·E Mini畫面驚悚,老外玩瘋了!
現(xiàn)在谷歌、OpenAI等大廠們的以文生圖模型,是趣味新聞報(bào)道者的衣食父母、梗圖愛好者的久旱甘霖。 輸行字就能生成各種或唯美或搞笑的圖片,不用很累很麻煩,就能很吸引人關(guān)注。 所以DALL·E系列和Imagen們,具有衣食父母和久旱甘霖的必備屬性:可獲取程度有限,不是隨時(shí)無限派發(fā)的福利。 2022年6月中,Hugging Face公司向全網(wǎng)所有用戶,免費(fèi)完全公開了易用簡潔版的DALL·E接口:DALL·E Mini,不出意料地在各種社交媒體網(wǎng)站又掀起了一波大創(chuàng)作風(fēng)潮。
DALL·E Mini創(chuàng)作大潮:搞笑、嚇人都有
現(xiàn)在各種社交媒體上紛紛有人表示:玩DALL·E Mini一時(shí)爽,一直玩一直爽,根本停不下來怎么辦。 就像「踩滑板的便便」,摩擦摩擦,似魔鬼的步伐。
有人愛做「正常點(diǎn)的創(chuàng)作」,例如打破物種界限的「柯基版斑馬」。
古代公務(wù)員要是有這些素材,也不用辛苦地把非洲長頸鹿發(fā)明成神獸麒麟了。 GitHub的碼農(nóng)們本色當(dāng)行,在官推上發(fā)了一張「松鼠用電腦編程」的生成作品。
「哥斯拉的法庭場記素描」,不得不說,真的很像英語國家報(bào)刊上,不對外開放的案件審判報(bào)道素描風(fēng)格。
「愛心熊搶劫便利店」??ㄍㄅ枷裾蹓櫲绱藶槟陌悖烤故切苄缘呐で?,還是道德的淪喪……
除此之外,DALL·E Mini生成「神獸在野地小徑上散步被抓拍」的圖像也有突出成就。 這是「小恐龍野地小徑上散步,被攝像頭抓拍到」。
這是「多鄰國鸚鵡商標(biāo)野地小徑上散步,被攝像頭抓拍到」。
DALL·E Mini生成的這些神獸散步圖,背影都好孤寂凄涼。不過這可能是AI模擬的微光攝影效果。 編輯部里的大家也仿作了一下:「草泥馬上路散步」,調(diào)性就陽光開朗了很多。
DALL·E Mini生成的神人圖,不比神獸圖效果差。 比如這張「耶穌火熱霹靂舞」,以前真的不知道祂老人家身體柔韌度這么好來著,看來各種健身網(wǎng)站上的「和主一起做拉伸操」廣告是有所本的。
還有這張「彩色玻璃上的說唱歌手狗爺」,是不是真的兼具教堂圣像窗格和印象派畫作的風(fēng)格。
用DALL·E Mini來惡搞影視界角色,現(xiàn)在也蔚為風(fēng)尚。 以下是來自星戰(zhàn)宇宙的「R2D2受洗」??赡苄菓?zhàn)宇宙的物理和化學(xué)定律與現(xiàn)實(shí)世界有差異,機(jī)器人過水后既不漏電也不生銹。
同樣來自星戰(zhàn)宇宙的「達(dá)斯維達(dá)鑿冰捕魚」 達(dá)斯維達(dá)老師真是好慘。被尊師砍到巖漿里泡火山澡、成了殘疾人之后被親身兒子追斬,殘障人士帶著呼吸機(jī)熟練掌握原力后,淪落到地球跟愛斯基摩人搶生意……
還有這張「沃特·懷特誤入動物森友會世界」,禿頂孤寡末路毒梟突然就萌起來了。 可惜任天堂沒有在2000年代真的推出動森,不然老白會發(fā)現(xiàn)在動森里搞虛擬交易賺錢,比辛辛苦苦搞藍(lán)色冰狀物實(shí)體商品養(yǎng)家省心省事得多。 讓我們高唱一句「拒絕黃~拒絕毒~拒絕黃賭毒~」。
這張「滅霸在超市里找媽媽」,真是很符合人物角色的內(nèi)核,非常戲劇專業(yè)的本行解讀。 不爽了就要搞種族屠殺、一言不合就要?dú)缬钪妫@就是找不到媽媽就撒潑痛哭的巨嬰性格嘛。
然而這些創(chuàng)作都是輕口味的,相比于重口味的克蘇魯愛好者們的作品,簡直清湯寡水。 比如這張「伊隆馬斯克扮演裂口小丑」,就有點(diǎn)嚇人。
「魔王打籃球」,看了這張圖之后,編輯真的不敢繼續(xù)追《怪奇物語》這部劇了。
各種系列恐怖片主角也出現(xiàn)在作品中,比如這張「面具杰森魔吃卷餅」
還有這張「猛鬼街殺人狂吃意面」……圖案太嚇人了,讓編輯回想起DVD時(shí)代看這些恐怖片被嚇到前后俱急的青蔥歲月。
然而當(dāng)代通俗文藝在嚇人方面略遜古典藝術(shù)一籌,比如這幅「科米蛙在戈雅《農(nóng)神食子》油畫中上鏡」。AI用當(dāng)代卡通搭配19世紀(jì)的表現(xiàn)主義油畫,能生生把初見者嚇到一脊背冷汗。
還有這張「死神在金拱門點(diǎn)卯」,看了這個(gè),你以后上班上學(xué)還敢遲到嗎?
Demo只有60行代碼!
當(dāng)然,細(xì)心且關(guān)注DALL·E系列動態(tài)的讀者們會發(fā)現(xiàn),DALL·E Mini和之前的DALL·E大模型們,生成的圖片有個(gè)明顯的差異: DALL·E Mini生成的人像里,臉都比DALL·E原本們生成的更模糊。 DALL·E Mini項(xiàng)目的主要開發(fā)者Boris Dayma在開發(fā)手記里解釋了:我們這是親民減配版,Demo只有60行代碼,功能弱少少很正常。
以下是Boris Dayma在手記中對項(xiàng)目的闡述。 先來看一下項(xiàng)目具體的實(shí)現(xiàn) 它會根據(jù)文本生成對應(yīng)的圖片:
一句簡單的話,隨之而來的就是一個(gè)牛油果扶手椅閃現(xiàn)在太空中~ 該模型使用了三個(gè)數(shù)據(jù)集:
1、包含300萬張圖片和標(biāo)題對的「Conceptual Captions Dataset」;
2、「YFCC100M」的Open AI子集,這其中包含了大約1500萬張圖像,不過出于對存儲空間的考慮,作者進(jìn)一步對200萬張圖像進(jìn)行了下采樣。同時(shí)使用標(biāo)題和文本描述作為標(biāo)簽,并刪除對應(yīng)的html標(biāo)記、換行和額外的空格;
3、包含1200萬張圖片和標(biāo)題對的「Conceptual 12M」。
在訓(xùn)練階段:
1、首先圖像會被VQGAN編碼器進(jìn)行編碼,目的是將圖片轉(zhuǎn)換成一個(gè)token序列;
2、圖片對應(yīng)的文本描述會通過BART編碼器進(jìn)行編碼;
3、BART編碼器的輸出和VQGAN編碼器所編碼的序列token會一起被送入BART解碼器,該解碼器是一個(gè)自回歸模型,它的目的是去預(yù)測下一個(gè)token序列;
4、損失函數(shù)是交叉熵?fù)p失,用以計(jì)算模型預(yù)測的圖像編碼結(jié)果和VQGAN真實(shí)圖像編碼之間的損失值。
在推理階段,作者只使用了簡短的標(biāo)簽,并且嘗試去生成其所對應(yīng)圖片,具體流程如下:
1、標(biāo)簽會通過BART編碼器進(jìn)行編碼;
2、<BOS>一個(gè)起特殊作用的序列標(biāo)志——起始標(biāo)志,會被送入到BART解碼器;
3、基于BART解碼器在下一個(gè)token所預(yù)測的分布,圖像token會被按順序的進(jìn)行采樣;
4、圖像token的序列會被送入到VQGAN的解碼器進(jìn)行解碼;
5、最后,「CLIP」會為我們選擇最好的生成結(jié)果。
接下來我們再看一下VQGAN圖像編碼器和解碼器是怎么工作的。 Trannsformer模型想必大家都不陌生,從它誕生至今,不僅僅是屠榜了NLP領(lǐng)域,CV領(lǐng)域的卷積CNN網(wǎng)絡(luò)更是也被它扼住了喉嚨。 作者使用VQGAN的目的是將圖像編碼到一個(gè)離散的token序列,該序列可以直接用在Transformer模型中。 由于使用像素值序列,會導(dǎo)致離散值的嵌入空間太大,最終使得訓(xùn)練模型和滿足自注意力層的內(nèi)存需要極為困難。
VQGAN通過結(jié)合感知損失和GAN的判別損失來學(xué)習(xí)像素的一個(gè)「密碼本」。編碼器輸出與「密碼本」對應(yīng)的索引值。 隨著圖像被編碼到token序列中,它就可以實(shí)現(xiàn)在任何Transformer模型中的使用。 在該模型中,作者從大小為16,384的詞匯表中將圖像編碼為「16x16=256」個(gè)的離散標(biāo)記,使用壓縮系數(shù)f=16(4塊的寬度和高度各除以2)。解碼后的圖像是256x256(每邊16x16)。 關(guān)于VQGAN的更多細(xì)節(jié)的理解,請參閱《 Taming Transformers for High-Resolution Image Synthesis》。
Seq2Seq模型是將一個(gè)token序列轉(zhuǎn)換為另一個(gè)token序列,通常在NLP中用于翻譯、摘要或?qū)υ捊5热蝿?wù)。 如果將圖像編碼成離散的token,那么同樣的想法也可以轉(zhuǎn)移到CV領(lǐng)域。 該模型使用了BART,作者只是對原始架構(gòu)進(jìn)行了微調(diào):
1、為編碼器和解碼器創(chuàng)建了一個(gè)獨(dú)立的嵌入層(當(dāng)有相同類型的輸入和輸出時(shí),這二者通??梢怨蚕恚?/p>
2、調(diào)整解碼器輸入和輸出的shape,使其與VQGAN的大小保持一致(這一步不需要中間的嵌入層);
3、強(qiáng)制生成序列有256個(gè)token(此處并不包含作為序列開始和結(jié)束標(biāo)志的<BOS>和<EOS>)。
CLIP則用于建立圖像和文本之間的關(guān)系,并使用對比學(xué)習(xí)進(jìn)行訓(xùn)練,包括最大化圖像和文本對嵌入之間的積(余弦相似度,就是正樣本)和最小化非關(guān)聯(lián)對(即負(fù)樣本)之間的乘積。 在生成圖像時(shí),作者根據(jù)模型的logits分布對圖像標(biāo)記進(jìn)行隨機(jī)抽樣,這會導(dǎo)致樣本不同而且生成圖像質(zhì)量不一致。 CLIP允許根據(jù)輸入描述對生成的圖像進(jìn)行評分,從而選擇最佳生成的樣本。在推理階段,直接使用OpenAI的預(yù)訓(xùn)練版本。
那么,CLIP與OpenAI DALL·E相比,怎么樣呢? 并不是所有關(guān)于DAL細(xì)節(jié)都是公眾所知的,但以下是作者認(rèn)為的主要區(qū)別:
1、DALL·E使用120億參數(shù)版本的GPT-3。相比之下,作者的模型是原來的27倍,參數(shù)約為4億個(gè)。
2、作者大量利用預(yù)先訓(xùn)練的模型(VQGAN, BART編碼器和CLIP),而OpenAI必須從頭開始訓(xùn)練所有的模型。模型架構(gòu)考慮了可用的預(yù)訓(xùn)練模型及其效率。
3、DALL·E從更小的詞匯表(8,192 VS 16,384)中使用更大數(shù)量的令牌(1,024 VS 256)編碼圖像。
4、DALL·E使用VQVAE,而作者使用VQGAN。當(dāng)作者在Seq2Seq編碼器和解碼器之間分割時(shí),DALL·E將文本和圖像作為單個(gè)數(shù)據(jù)流讀取。這也讓他們可以為文本和圖像使用獨(dú)立的詞匯。
5、DALL·E通過自回歸模型讀取文本,而作者使用雙向編碼器。
6、DALL·E訓(xùn)練了2.5億對圖像和文本,而作者只使用了1500萬對。的。
7、DALL·E使用更少的標(biāo)記(最多256 VS 1024)和更小的詞匯表(16384 VS 50264)來編碼文本。 在VQGAN的訓(xùn)練上,作者首先從ImageNet上預(yù)先訓(xùn)練的checkpoint開始,壓縮系數(shù)f=16,詞匯表大小為16,384。 雖然在編碼大范圍的圖像時(shí)非常高效,但預(yù)訓(xùn)練的checkpoint并不擅長編碼人和臉(因?yàn)槎咴贗mageNet中并不常見),所以作者決定在一個(gè)2 x RTX A6000的云實(shí)例上對它進(jìn)行大約20小時(shí)的微調(diào)。 很明顯,生成的圖像在人臉上的質(zhì)量并沒有提高很多,可能是「模型坍塌」。 一旦對模型進(jìn)行了訓(xùn)練,我們就將Pytorch模型轉(zhuǎn)換為JAX以備下一階段使用。
訓(xùn)練DALL·E Mini: 該模型采用JAX編程,充分利用了TPU的優(yōu)點(diǎn)。 作者用圖像編碼器預(yù)編碼了所有的圖像,以便更快地加載數(shù)據(jù)。 訓(xùn)練期間,作者很快就確定了幾個(gè)近乎可行的參數(shù):
1、每一步,每個(gè)TPU的batchsize大小為56,這是每個(gè)TPU可獲得的最大內(nèi)存;
2、梯度累加:有效的batchsize大小為56 × 8 TPU芯片× 8步=每次更新3,584張圖像;
3、優(yōu)化器Adafactor的內(nèi)存效率可以讓我們使用更高的batchsize;
4、2000步「熱身」和以線性方式衰減的學(xué)習(xí)率。 作者花了幾近半天時(shí)間通過啟動超參數(shù)搜索來為模型找到一個(gè)好的學(xué)習(xí)率。 每一個(gè)NB的模型背后,大抵都有那么一段嘔心瀝血尋找超參數(shù)的歷程吧! 在作者初步探索之后,在較長一段時(shí)間內(nèi)嘗試了幾種不同的學(xué)習(xí)率,直到最終確定為0.005。