前言
在本文中,我們將使用基于 KerasCV 實現(xiàn)的 Stable Diffusion 模型進行圖像生成,這是由 stable.ai
開發(fā)的文本生成圖像的多模態(tài)模型。
Stable Diffusion
是一種功能強大的開源的文本到圖像生成模型。雖然市場上存在多種開源實現(xiàn)可以讓用戶根據(jù)文本提示輕松創(chuàng)建圖像,但 KerasCV 有一些獨特的優(yōu)勢來加速圖片生成,其中包括 XLA 編譯
和混合精度支持
等特性。所以本文除了介紹如何使用 KerasCV 內(nèi)置的 StableDiffusion
模塊來生成圖像,另外我們還通過對比展示了使用 KerasCV 特性所帶來的圖片加速優(yōu)勢。
準(zhǔn)備
- N 卡,建議
24 G
,在下文使用 KerasCV 實際生成圖像過程中至少需要20 G
- 安裝
python 3.10
的 anaconda 虛擬環(huán)境 - 安裝
tensorflow gpu 2.10
- 一顆充滿想象力的大腦,主要是用來構(gòu)建自己的文本 prompt
這里有一個工具函數(shù) plot_images
,主要是用來把模型生成的圖像進行展示。
scss
復(fù)制代碼
def plot_images(images):
plt.figure(figsize=(20, 20))
for i in range(len(images)):
plt.subplot(1, len(images), i + 1)
plt.imshow(images[i])
plt.axis("off")
plt.show()
模型工作原理
超分辨率工作
可以訓(xùn)練深度學(xué)習(xí)模型來對輸入圖像進行去噪,從而將其轉(zhuǎn)換為更高分辨率的效果。為了實現(xiàn)這一目的,深度學(xué)習(xí)模型并不是通過恢復(fù)低分辨率輸入圖像中丟失的信息做到的,而是模型使用其訓(xùn)練數(shù)據(jù)分布來填充最有可能的給定輸入的視覺細節(jié)。
然后將這個想法推向極限
,在純噪聲上運行這樣的模型,然后使用該模型不斷去噪最終產(chǎn)生一個全新的圖像。這就是潛在擴散模型的關(guān)鍵思想,在 2020 年的 High-Resolution Image Synthesis with Latent Diffusion Models 中提出。
現(xiàn)在要從潛在擴散過渡到文本生成圖像的效果,需要添加關(guān)鍵字控制生成圖像的能力
,簡單來說就是將一段文本的向量加入到到帶噪圖片中,然后在數(shù)據(jù)集上訓(xùn)練模型即可得到我們想要的文生圖模型 Stable Diffusion
。這就產(chǎn)生了 Stable Diffusion 架構(gòu),主要由三部分組成:
-
text encoder
:可將用戶的提示轉(zhuǎn)換為向量。 -
diffusion model
:反復(fù)對 64x64 潛在圖像進行去噪。 -
decoder
:將最終生成的 64x64 潛在圖像轉(zhuǎn)換為更高分辨率的 512x512 圖像。
基本模型架構(gòu)圖如下:
benchmark
我們使用 keras_cv
中的 StableDiffusion
模塊構(gòu)造一個文生圖基準(zhǔn)模型 model ,在對模型進行基準(zhǔn)測試之前,先執(zhí)行一次 text_to_image
函數(shù)來預(yù)熱模型,以確保 TensorFlow graph
已被跟蹤,這樣在后續(xù)使用模型進行推理時候的速度測試才是準(zhǔn)確的??梢詮娜罩局锌吹降谝淮芜\行的時間是 22 s ,這個不用去管他,我們只看第二個時間。
我這里的提示詞是“There is a pink BMW Mini at the exhibition where the lights focus”
,生成 3
張圖像,耗時 10.32 s
。
執(zhí)行結(jié)束之后運行 keras.backend.clear_session() 清除剛剛運行的模型,以保證不會影響到后面的試驗。
ini
復(fù)制代碼
model = keras_cv.models.StableDiffusion(img_width=512, img_height=512, jit_compile=False)
model.text_to_image("warming up the model", batch_size=3)
start = time.time()
images = model.text_to_image("There is a pink BMW Mini at the exhibition where the lights focus", batch_size=3)
print(f"Standard model: {(time.time() - start):.2f} seconds")
plot_images(images)
keras.backend.clear_session()
日志打?。?/p>
arduino
復(fù)制代碼
25/25 [==============================] - 22s 399ms/step
25/25 [==============================] - 10s 400ms/step
Standard model: 10.32 seconds
benchmark + Mixed precision
正如日志中打印的信息可以看到,我們這里構(gòu)建的模型現(xiàn)在使用混合精度計算
,利用 float16
運算的速度進行計算,同時以 float32
精度存儲變量,這是因為 NVIDIA GPU
內(nèi)核處理同樣的操作,使用 float16 比 float32 要快得多。
我們這里和上面一樣先將模型預(yù)熱加載
,然后針對我的提示詞“There is a black BMW Mini at the exhibition where the lights focus”
生成了 3
張圖像,耗時 5.30s
,可以看到在 benchmark 基礎(chǔ)上使用混合精度生成速度提升將近一倍。
scss
復(fù)制代碼
keras.mixed_precision.set_global_policy("mixed_float16")
model = keras_cv.models.StableDiffusion(jit_compile=False)
print("Compute dtype:", model.diffusion_model.compute_dtype)
print("Variable dtype:", model.diffusion_model.variable_dtype)
model.text_to_image("warming up the model", batch_size=3)
start = time.time()
images = model.text_to_image( "There is a black BMW Mini at the exhibition where the lights focus", batch_size=3,)
print(f"Mixed precision model: {(time.time() - start):.2f} seconds")
plot_images(images)
keras.backend.clear_session()
日志打?。?/p>
yaml
復(fù)制代碼
Compute dtype: float16
Variable dtype: float32
25/25 [==============================] - 9s 205ms/step
25/25 [==============================] - 5s 202ms/step
Mixed precision model: 5.30 seconds
benchmark + XLA Compilation
XLA(加速線性代數(shù))
是一種用于機器學(xué)習(xí)的開源編譯器。XLA 編譯器從 PyTorch、TensorFlow 和 JAX 等常用框架中獲取模型,并優(yōu)化模型以在不同的硬件平臺(包括 GPU、CPU 和機器學(xué)習(xí)加速器)上實現(xiàn)高性能執(zhí)行。
TensorFlow 和 JAX 附帶 XLA , keras_cv.models.StableDiffusion 支持開箱即用的 jit_compile
參數(shù)。 將此參數(shù)設(shè)置為 True 可啟用 XLA 編譯,從而顯著提高速度。
從日志中可以看到,在 benchmark 基礎(chǔ)上使用 XLA 生成時間減少了 3.34 s
。
ini
復(fù)制代碼
keras.mixed_precision.set_global_policy("float32")
model = keras_cv.models.StableDiffusion(jit_compile=True)
model.text_to_image("warming up the model", batch_size=3)
start = time.time()
images = model.text_to_image("There is a black ford mustang at the exhibition where the lights focus", batch_size=3, )
print(f"With XLA: {(time.time() - start):.2f} seconds")
plot_images(images)
keras.backend.clear_session()
日志打印:
vbnet
復(fù)制代碼
25/25 [==============================] - 34s 271ms/step
25/25 [==============================] - 7s 271ms/step
With XLA: 6.98 seconds
benchmark + Mixed precision + XLA Compilation
最后我們在 benchmark 基礎(chǔ)上同時使用混合精度計算和 XLA 編譯,最終生成同樣的 3 張圖像,時間僅為 3.96s
,與 benchmark 相比生成時間減少了 6.36 s
,生成時間大幅縮短!
ini
復(fù)制代碼
keras.mixed_precision.set_global_policy("mixed_float16")
model = keras_cv.models.StableDiffusion(jit_compile=True)
model.text_to_image("warming up the model", batch_size=3, )
start = time.time()
images = model.text_to_image( "There is a purple ford mustang at the exhibition where the lights focus", batch_size=3,)
print(f"XLA + mixed precision: {(time.time() - start):.2f} seconds")
plot_images(images)
keras.backend.clear_session()
日志打印:
arduino
復(fù)制代碼
25/25 [==============================] - 28s 144ms/step
25/25 [==============================] - 4s 152ms/step
XLA + mixed precision: 3.96 seconds
結(jié)論
四種情況的耗時對比結(jié)果,展示了使用 KerasCV 生成圖片確實在速度方面有特別之處:
- benchmark : 10.32s
- benchmark + Mixed precision :5.3 s
- benchmark + XLA Compilation : 6.98s
- benchmark + Mixed precision + XLA Compilation : 3.96s
最后
為了幫助大家更好的學(xué)習(xí)人工智能,這里給大家準(zhǔn)備了一份人工智能入門/進階學(xué)習(xí)資料,里面的內(nèi)容都是適合學(xué)習(xí)的筆記和資料,不懂編程也能聽懂、看懂,所有資料朋友們?nèi)绻行枰兹斯ぶ悄苋腴T+進階學(xué)習(xí)資源包,可以在評論區(qū)或掃.碼領(lǐng)取哦)~
在線教程
- 麻省理工學(xué)院人工智能視頻教程 – 麻省理工人工智能課程
- 人工智能入門 – 人工智能基礎(chǔ)學(xué)習(xí)。Peter Norvig舉辦的課程
- EdX 人工智能 – 此課程講授人工智能計算機系統(tǒng)設(shè)計的基本概念和技術(shù)。
- 人工智能中的計劃 – 計劃是人工智能系統(tǒng)的基礎(chǔ)部分之一。在這個課程中,你將會學(xué)習(xí)到讓機器人執(zhí)行一系列動作所需要的基本算法。
- 機器人人工智能 – 這個課程將會教授你實現(xiàn)人工智能的基本方法,包括:概率推算,計劃和搜索,本地化,跟蹤和控制,全部都是圍繞有關(guān)機器人設(shè)計。
- 機器學(xué)習(xí) – 有指導(dǎo)和無指導(dǎo)情況下的基本機器學(xué)習(xí)算法
- 機器學(xué)習(xí)中的神經(jīng)網(wǎng)絡(luò) – 智能神經(jīng)網(wǎng)絡(luò)上的算法和實踐經(jīng)驗
- 斯坦福統(tǒng)計學(xué)習(xí)
??有需要的小伙伴,可以點擊下方鏈接免費領(lǐng)取或者V掃描下方二維碼免費領(lǐng)取??
?
人工智能書籍
- OpenCV(中文版).(布拉德斯基等)
- OpenCV+3計算機視覺++Python語言實現(xiàn)+第二版
- OpenCV3編程入門 毛星云編著
- 數(shù)字圖像處理_第三版
- 人工智能:一種現(xiàn)代的方法
- 深度學(xué)習(xí)面試寶典
- 深度學(xué)習(xí)之PyTorch物體檢測實戰(zhàn)
- 吳恩達DeepLearning.ai中文版筆記
- 計算機視覺中的多視圖幾何
- PyTorch-官方推薦教程-英文版
- 《神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)》(邱錫鵬-20191121)
- …
??有需要的小伙伴,可以點擊下方鏈接免費領(lǐng)取或者V掃描下方二維碼免費領(lǐng)取??
?
第一階段:零基礎(chǔ)入門(3-6個月)
新手應(yīng)首先通過少而精的學(xué)習(xí),看到全景圖,建立大局觀。 通過完成小實驗,建立信心,才能避免“從入門到放棄”的尷尬。因此,第一階段只推薦4本最必要的書(而且這些書到了第二、三階段也能繼續(xù)用),入門以后,在后續(xù)學(xué)習(xí)中再“哪里不會補哪里”即可。
第二階段:基礎(chǔ)進階(3-6個月)
熟讀《機器學(xué)習(xí)算法的數(shù)學(xué)解析與Python實現(xiàn)》并動手實踐后,你已經(jīng)對機器學(xué)習(xí)有了基本的了解,不再是小白了。這時可以開始觸類旁通,學(xué)習(xí)熱門技術(shù),加強實踐水平。在深入學(xué)習(xí)的同時,也可以探索自己感興趣的方向,為求職面試打好基礎(chǔ)。
第三階段:工作應(yīng)用
這一階段你已經(jīng)不再需要引導(dǎo),只需要一些推薦書目。如果你從入門時就確認了未來的工作方向,可以在第二階段就提前閱讀相關(guān)入門書籍(對應(yīng)“商業(yè)落地五大方向”中的前兩本),然后再“哪里不會補哪里”。
文章來源:http://www.zghlxwxcb.cn/news/detail-841984.html
??有需要的小伙伴,可以點擊下方鏈接免費領(lǐng)取或者V掃描下方二維碼免費領(lǐng)取??
?文章來源地址http://www.zghlxwxcb.cn/news/detail-841984.html
到了這里,關(guān)于使用 Keras 的 Stable Diffusion 實現(xiàn)高性能文生圖的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!