Hugging Face發布diffuser模型AI繪畫庫初嘗鮮!
💡 作者:韓信子@ShowMeAI
📘 深度學習實戰系列://www.showmeai.tech/tutorials/42
📘 TensorFlow 實戰系列://www.showmeai.tech/tutorials/43
📘 本文地址://www.showmeai.tech/article-detail/312
📢 聲明:版權所有,轉載請聯繫平台與作者並註明出處
📢 收藏ShowMeAI查看更多精彩內容
工具庫 transformers 的開源方 Hugging Face 剛剛發布了一個用於構建 diffuser 模型的全新庫。如果您不知道diffuser模型是什麼,你可以查看 ShowMeAI 的另外一篇文章介紹 📘 你給文字描述, AI 藝術作畫,精美無比!附源碼,快來試試! 。
隨著 AI 技術的發展,我們現在在互聯網上看到的那些美麗、富有創意、極具藝術美感的繪畫與影片,很多是來自 AI 之手!典型的AI藝術創作例如 OpenAI 的 DALL-E2、Google的 Imagen 和 Midjourney 的產品,所有這些產品服務都使用 diffuser 模型,下圖為一些創作結果。
Hugging Face 發布了一個專註於 diffuser 模型的開源庫,我們可以基於它,僅僅通過幾行程式碼就開始生成自己的藝術作畫。不過這個 diffuser 庫是一個基礎實現版本,訓練和學習的數據也沒有上面提到的幾個大廠商業產品多,在本篇文章中,ShowMeAI 就帶大家來探索新庫,並生成一些我們自己的藝術畫作,也對比一下相同文本提示下的大廠商業產品生成的結果。
💡 快速嘗鮮
我們先在命令行通過 pip install diffusers 安裝本次使用到的工具庫,然後導入我們需要用到的模組和功能(在這裡我們調用整個擴散模型流水線 DiffusionPipeline),並且我們導入一個小型預訓練模型ldm-text2im-large-256:
from diffusers import DiffusionPipeline
model_id = "CompVis/ldm-text2im-large-256"
# 預訓練模型
ldm = DiffusionPipeline.from_pretrained(model_id)
接著我們就可以基於這個預訓練模型作畫啦,我們唯一需要做的事情就是給模型一句文本提示(在 diffuser 模型里叫 prompt 提示)。下面我們嘗試生成一幅『松鼠吃香蕉』的畫作。
# 給定文本提示和作畫
prompt = "A painting of a squirrel eating a banana"
images = ldm([prompt], num_inference_steps=50, eta=.3, guidance_scale=6)
images[0]
上面就是模型最終生成的影像,當然受限於我們的計算資源和預訓練模型大小,我們生成的影像不像 DALL-E 2 那樣令人驚艷,但是我們僅僅用 5 行程式碼也生成了一副和提示文本匹配的影像,還是很讓人感覺神奇。
下面是『松鼠吃香蕉』的另一幅畫:
images = ldm(
[prompt],
num_inference_steps=100,
eta=.3,
guidance_scale=6
)
images['sample'][0]
💡 文本提示
📌 高解析度
自三大擴散模型(DALL-E 2、Imagen 和 Midjourney)發布以來,大家都開始發揮想像力,嘗試各種各樣的文本提示,讓模型生成藝術圖。例如,許多人發現添加『4K畫質』或『在Unity中渲染』可以增強三巨頭生成的影像的真實感(儘管它們都沒有以 4K 解析度生成)。
如果我們對 Hugging Face 的 diffuser 模型進行同樣的嘗試,會發生什麼?
prompt = "a photorealistic image of a squirrel eating a banana"
images = ldm(
[prompt],
num_inference_steps=100,
eta=.3,
guidance_scale=6
)
images['sample'][0]
很顯然它還不能生成高清的 4K 圖,但是影像中的一些細節有豐富一些。
📌 場景與邏輯
我們把場景做得複雜一點點,比如給到的文本提示中,有不同的物體和位置關係,我們看看會生成什麼樣的結果,提示文字為an italian person eating pizza on top of the colosseum in rome。
prompt = "an italian person eating pizza on top of the colosseum in rome"
images = ldm(
[prompt],
num_inference_steps=100,
eta=.3,
guidance_scale=6
)
images['sample'][0]
看得出來,這個簡單的 diffuser 模型在很努力地復現我們文本中提到的人、斗獸場、披薩,但是對於更細節的位置關係,似乎它還沒有做得非常好,這裡的人並沒有坐在羅馬斗獸場頂部,而且斗獸場的拱門顏色和天空顏色也不完全匹配。
📌 更抽象的情況
回到松鼠,嘗試生成更抽象的影像,例如 a giant squirrel destroying a city『一隻巨大的松鼠摧毀一座城市』,我們隨機取樣了一些結果如下,好壞參半:
prompt = "a giant squirrel destroying a city"
images = ldm(
[prompt],
num_inference_steps=100,
eta=.3,
guidance_scale=6
)
images['sample'][0]
prompt = "a giant squirrel destroying a city"
images = ldm(
[prompt],
num_inference_steps=50,
eta=.3,
guidance_scale=6
)
images['sample'][0]
prompt = "a giant squirrel destroying a city"
images = ldm(
[prompt],
num_inference_steps=100,
eta=.3,
guidance_scale=2
)
images['sample'][0]
我們似乎觀察到,目前這個小模型似乎很難融合兩個通常相關度沒那麼高的概念,即『(巨型)松鼠』和『城市』。我們從一些生成的效果不是特別好的圖片可以觀察出這一點,下面的結果中,要麼對城市與天際線做了很好的描述卻忽略了松鼠,要麼對松鼠和自然環境做了很好的描述,卻沒有特彆強的城市背景:
prompt = "a landscape image showing a giant squirrel destroying a city"
images = ldm(
[prompt],
num_inference_steps=50,
eta=.8,
guidance_scale=2
)
images['sample'][0]
prompt = "a landscape image showing a giant squirrel destroying a city"
images = ldm(
[prompt],
num_inference_steps=50,
eta=.8,
guidance_scale=2
)
images['sample'][0]
多次運行這些提示後,我們發現當前這個小模型下,總是在主體之間切換但很難將兩者融合在一起。
💡 DALL-E 2的結果
我們把同樣的內容"a dramatic shot of a giant squirrel destroying a modern city"灌給 DALL-E 2 ,讓它從提示做圖,得到的結果如下:
果然在更龐大的AI模型下,生成的結果更自然,也能把不同的細節關聯起來。
💡 總結
這就是 Hugging Face 新庫的初嘗鮮!儘管目前開源的小模型上,還有一系列的問題,但是這類模型就像一把鑰匙,解鎖一些令人敬畏的人工智慧類人的藝術創造水平。
短期看,這個小小的預訓練模型當然無法取代 DALL-E 2、Imagen 或 Midjourney,但隨著開源社區的強大,它會表現越來越好。
參考資料
- 📘 你給文字描述,AI藝術作畫,精美無比!附源碼,快來試試!://www.showmeai.tech/article-detail/313
