近來,基于Diffusion的文圖生成模型比較火,用戶輸入一句話,模型就可以生成一副對應的圖像,還是很有意思的。本文記錄了通過PaddleHub快速實現(xiàn)上述任務的過程,以供參考。
1、安裝PaddlePaddle
PaddleHub底層依賴于百度自研的開源框架PaddlePaddle,可以根據(jù)官方提供的方式來快速安裝,目前文檔還是挺全面的。
官方鏈接如下:https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/install/pip/linux-pip.html
安裝前需要確定系統(tǒng)相關的環(huán)境,以下是我選擇的安裝命令:
python -m pip install paddlepaddle-gpu==2.3.2.post111 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html
?2、安裝PaddleHub
PaddleHub開源了較為豐富的預訓練模型,涵蓋大模型、CV、NLP、Audio、Video、工業(yè)應用主流六大品類的 360+ 預訓練模型。這里我們主要是會用到其中的文圖生成模型,包括Stable Diffusion和Disco Diffusion兩種。
https://github.com/PaddlePaddle/PaddleHub/blob/develop/README_ch.md
!pip install --upgrade paddlehub -i https://mirror.baidu.com/pypi/simple
3、模型推理
PaddleHub對于模型封裝的已經(jīng)很完善了,通過幾行代碼即可快速調(diào)用文圖生成模型的接口。以下是PaddleHub上的介紹,先來看看示例Stable Diffusion模型的效果。
官方示例鏈接如下:
https://aistudio.baidu.com/aistudio/projectdetail/4512600
Stable Diffusion是一種潛在擴散模型(Latent Diffusion), 屬于生成類模型,這類模型通過對隨機噪聲進行一步步地迭代降噪并采樣來獲得感興趣的圖像,當前取得了令人驚艷的效果。相比于Disco Diffusion, Stable Diffusion通過在低緯度的潛在空間(lower dimensional latent space)而不是原像素空間來做迭代,極大地降低了內(nèi)存和計算量的需求,并且在V100上一分鐘之內(nèi)即可以渲染出想要的圖像。
from PIL import Image
import paddlehub as hub
# 導入模型
module = hub.Module(name='stable_diffusion')
# 生成圖像
result = module.generate_image(text_prompts="A beautiful painting of a singular lighthouse, shining its light across a tumultuous sea of blood by greg rutkowski and thomas kinkade, Trending on artstation.", output_dir='stable_diffusion_out')
# 將生成過程存成gif
result[0].chunks[-1].chunks.save_gif('beautiful_painting.gif')
輸入:A beautiful painting of a singular lighthouse, shining its light across a tumultuous sea of blood by greg rutkowski and thomas kinkade, Trending on artstation.
輸出默認是512*512的圖像,如下:
4、更多的測試
到這里,我們就可以開始測試更多的輸入了,大膽的嘗試吧。如果設置seed的話,每次運行會生成不一樣的圖。
輸入:A tree on the hilltop in autumn.
?
?生成過程如下:
?輸入:A man face.
?輸入:A woman face.
5、嘗試中文輸入
上面提到的Stable Diffusion模型,暫時還不支持以中文作為輸入。目前支持中文輸入的模型給出了兩個,都是Disco Diffusion的模型,生成圖像的速度相對Stable Diffusion慢了很多,需要耐心等待。
官方示例鏈接如下:
https://aistudio.baidu.com/aistudio/projectdetail/4444998
示例代碼如下:
?
from PIL import Image
import paddlehub as hub
# 導入模型
module = hub.Module(name='disco_diffusion_ernievil_base')
# 生成圖像
result = module.generate_image(text_prompts="孤舟蓑笠翁,獨釣寒江雪。", style='油畫', width_height= [1280, 768], output_dir='孤舟蓑笠翁_油畫', seed=1853109922)
# 將生成過程存成gif
?result[0].chunks.save_gif('孤舟蓑笠翁.gif')
輸入:孤舟蓑笠翁,獨釣寒江雪。
6、問題解決方案
在使用的過程中,可能會出現(xiàn)一些問題,這里也記錄下來。
問題1:無法使用GPU
解決方案:有可能是安裝的PaddlePaddle不是gpu版本,需要卸載安裝gpu版。
先使用如下命令查看當前安裝的paddle和相關套件的版本:
pip list| grep paddle
查詢信息如下:
paddle-bfloat 0.1.7
paddle2onnx 1.0.0
paddlefsl 1.1.0
paddlehub 2.3.0
paddlenlp 2.4.0
paddlepaddle-gpu 2.3.2.post111
如果確實有CPU版本,可通過如下命令卸載:
pip uninstall paddlepaddle
之后再選擇合適的gpu版本來安裝。
參考資料:https://github.com/PaddlePaddle/PaddleHub/issues/1301文章來源:http://www.zghlxwxcb.cn/news/detail-796230.html
問題2:Segmentation fault (core dumped)
解決方案:可能是cudnn版本不匹配導致的,建議檢查cuda、cudnn以及paddlepaddle-gpu的版本是否匹配。
參考資料:https://github.com/PaddlePaddle/PaddleHub/issues/1301
體驗下來,會發(fā)現(xiàn)參數(shù)中的text_prompts很重要,并不是任意的輸入都能生成很好的圖。在某些情況下,可以明顯感覺到效果不太好,也是后續(xù)研究中需要重點解決的問題。??文章來源地址http://www.zghlxwxcb.cn/news/detail-796230.html
到了這里,關于手把手教你通過PaddleHub快速實現(xiàn)輸入中/英文本生成圖像(Stable Diffusion)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!