深度學習 Diffusers 庫(自留)

(本文將圍繞 安裝Diffusers庫及其依賴、理解Diffusers核心概念:Pipeline, Model, Scheduler 、使用預訓練模型進行推理(文生圖、圖生圖等) 、 自定義模型和調度器 、訓練自己的擴散模型(可選,需要大量資源)、以及高級應用:ControlNet、LoRA等進行展開)

官網鏈接:huggingface

鏡像鏈接:mirror

一、安裝Diffusers庫

Diffusers 已在 Python 3.8+、PyTorch 1.7.0+ 和 Flax 上進行了測試。請按照以下適用于您正在使用的 Deep Learning Library 的安裝說明進行作:

# 使用 conda 安裝
# 激活虛擬環境后,使用 (由社區維護):conda
conda install -c conda-forge diffusers
# 從源碼安裝
# 在從源安裝 🤗 Diffusers 之前,請確保您已安裝 PyTorch 和 🤗 Accelerate。
# 要安裝 🤗 Accelerate:
pip install accelerate
# 然后從源碼安裝 🤗 Diffusers:
pip install git+https://github.com/huggingface/diffusers可編輯安裝
git clone https://github.com/huggingface/diffusers.git
cd diffusers克隆更新到最新版本的 🤗 Diffusers:
cd ~/diffusers/
git pull

? ? ? 此命令將安裝最前沿版本,而不是最新版本。 該版本有助于及時了解最新發展。 例如,如果自上次正式發布以來已修復錯誤,但尚未推出新版本。 但是,這意味著版本可能并不總是穩定的。 我們努力保持版本可運行,大多數問題通常會在幾小時或一天內得到解決。 如果您遇到問題,請打開https://github.com/huggingface/diffusers/issues/new/choose

二、模型文件和布局

? ? ?擴散模型以各種文件類型保存,并按不同的布局進行組織。Diffusers 將模型權重作為 safetensors 文件存儲在?Diffusers-multifolder?布局中,它還支持從 diffusion 生態系統中常用的單文件布局加載文件(如 safetensors 和 ckpt 文件)。每種布局都有自己的優點和用例,本指南將向您展示如何加載不同的文件和布局,以及如何轉換它們。

1.?Safetensors?庫

Safetensors?是一種安全快速的文件格式,用于安全地存儲和加載張量。Safetensors 限制 header 大小以限制某些類型的攻擊,支持延遲加載(對分布式設置很有用),并且通常具有更快的加載速度。

# 確保已安裝?Safetensors?庫。
!pip install safetensors

? ? ?Diffusers 庫是 Hugging Face 官方開發的?開源 Python 庫,專門用于簡化擴散模型(Diffusion Models)的部署與應用。

  1. Diffusers-multifolder 布局:可能有幾個單獨的 safetensors 文件,每個管道組件(文本編碼器、UNet、VAE)一個,組織在子文件夾中(查看?stable-diffusion-v1-5/stable-diffusion-v1-5?存儲庫作為示例)
  2. 單文件布局:所有模型權重都可以保存在一個文件中(查看?WarriorMama777/OrangeMixs?存儲庫作為示例)

2.LoRA 文件

LoRA?是一種輕量級適配器,訓練快速且易于,因此在以某種方式或樣式生成圖像方面特別受歡迎。這些適配器通常存儲在 safetensors 文件中,并且在?civitai?等模型共享平臺上廣泛流行。LoRA 使用?load_lora_weights()?方法加載到基礎模型中。

from diffusers import StableDiffusionXLPipeline
import torch# base model
pipeline = StableDiffusionXLPipeline.from_pretrained("Lykon/dreamshaper-xl-1-0", torch_dtype=torch.float16, variant="fp16"
).to("cuda")# download LoRA weights
!wget https://civitai.com/api/download/models/168776 -O blueprintify.safetensors# load LoRA weights
pipeline.load_lora_weights(".", weight_name="blueprintify.safetensors")
prompt = "bl3uprint, a highly detailed blueprint of the empire state building, explaining how to build all parts, many txt, blueprint grid backdrop"
negative_prompt = "lowres, cropped, worst quality, low quality, normal quality, artifacts, signature, watermark, username, blurry, more than one bridge, bad architecture"image = pipeline(prompt=prompt,negative_prompt=negative_prompt,generator=torch.manual_seed(0),
).images[0]
image

?3.CKPT

PyTorch 的?torch.save?函數使用 Python 的?pickle?實用程序來序列化和保存模型。這些文件保存為 ckpt 文件,并且包含整個模型的權重。

使用?from_single_file()?方法直接加載 ckpt 文件。

from diffusers import StableDiffusionPipelinepipeline = StableDiffusionPipeline.from_single_file("https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5/blob/main/v1-5-pruned.ckpt"
)

4.存儲布局

有兩種方式組織模型文件,一種是 Diffusers-multifolder 布局,另一種是單文件布局。Diffusers-multifolder 布局是默認布局,每個組件文件(文本編碼器、UNet、VAE)都存儲在單獨的子文件夾中。Diffusers 還支持從單文件布局加載模型,其中所有組件都捆綁在一起。

Diffusers-multifolder

Diffusers-multifolder 布局是 Diffusers 的默認存儲布局。每個組件(文本編碼器、UNet、VAE)的權重都存儲在單獨的子文件夾中。權重可以存儲為 safetensors 或 ckpt 文件。

要從 Diffusers-multifolder 布局加載,請使用?from_pretrained()?方法。

from diffusers import DiffusionPipelinepipeline = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0",torch_dtype=torch.float16,variant="fp16",use_safetensors=True,
).to("cuda")

使用 Diffusers-multifolder 布局的好處包括:

  1. 單獨或并行加載每個組件文件的速度更快。

  2. 減少了內存使用量,因為您只加載了所需的組件。例如,SDXL Turbo、SDXL Lightning?和?Hyper-SD?等型號除 UNet 外具有相同的組件。您可以使用?from_pipe()?方法重用它們的共享組件,而無需消耗任何額外的內存(請查看?重用管道指南),并且只加載 UNet。這樣,您就不需要下載冗余組件,也無需不必要地使用更多內存。

import torch
from diffusers import StableDiffusionXLPipeline, UNet2DConditionModel, EulerDiscreteScheduler# download one model
sdxl_pipeline = StableDiffusionXLPipeline.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0",torch_dtype=torch.float16,variant="fp16",use_safetensors=True,
).to("cuda")# switch UNet for another model
unet = UNet2DConditionModel.from_pretrained("stabilityai/sdxl-turbo",subfolder="unet",torch_dtype=torch.float16,variant="fp16",use_safetensors=True
)
# reuse all the same components in new model except for the UNet
turbo_pipeline = StableDiffusionXLPipeline.from_pipe(sdxl_pipeline, unet=unet,
).to("cuda")
turbo_pipeline.scheduler = EulerDiscreteScheduler.from_config(turbo_pipeline.scheduler.config,timestep+spacing="trailing"
)
image = turbo_pipeline("an astronaut riding a unicorn on mars",num_inference_steps=1,guidance_scale=0.0,
).images[0]
image

三、 理解Diffusers核心概念

Pipeline, Model, Scheduler

?核心功能全景

功能實例代碼示例
文生圖輸入“星空下的城堡” → 生成高清圖像pipe("星空下的城堡").images[0]
圖生圖將照片轉為梵高風格pipe(image=輸入圖, prompt="梵高風格")
圖像修復智能補全破損老照片inpaint_pipeline(mask=蒙版, image=原圖)
視頻生成生成 3 秒動畫片段video_pipe("跳舞的機器人", num_frames=24)
音頻合成文本轉自然語音audio_pipe("你好,世界", output_type="mp3")

? 核心概念速查表

概念說明代碼示例
Pipeline端到端生成流程StableDiffusionPipeline
Scheduler控制擴散過程EulerDiscreteScheduler
Model核心神經網絡UNet2DConditionModel
VAE圖像編碼/解碼AutoencoderKL
Tokenizer文本處理CLIPTokenizer

3. 使用預訓練模型進行推理(文生圖、圖生圖等)

4. 自定義模型和調度器

5. 訓練自己的擴散模型(可選,需要大量資源)

6. 高級應用:ControlNet、LoRA等

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/912672.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/912672.shtml
英文地址,請注明出處:http://en.pswp.cn/news/912672.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【VPC技術】基礎理論篇

文章目錄 概述相關基礎核心知識軟件定義網絡SDNOverlay 技術 安全組概述 參考博客 😊點此到文末驚喜?? 概述 相關基礎 基本概念 虛擬私有云VPC:是一個隔離的網絡環境,每個VPC擁有專屬的IP地址范圍(CIDR)、路由表、…

在 RK3588 Ubuntu 上編譯 eglinfo:全流程實戰 + 常見報錯修復

dv1/eglinfo 是一個開源的 EGL 信息檢測工具,廣泛用于 OpenGL ES 圖形棧調試、驅動驗證和嵌入式平臺圖形支持排查。在 Rockchip RK3588 上編譯該工具可以協助我們確認 EGL DRM 是否配置正確,尤其在無窗口系統(如 eglfs、framebuffer&#xf…

開源推薦:基于前后端分離架構的WMS倉儲管理系統

開源推薦:基于前后端分離架構的WMS倉儲管理系統 🔥 在線演示地址:https://tob.toolxq.com/wms/wms.html 點擊上方鏈接可直接體驗系統功能和界面,無需安裝部署 前言 在企業數字化轉型的浪潮中,倉儲管理系統&#xff08…

Redis中List類型常見的操作命令有哪些?

Redis中List類型是一個字符串列表,這里是一些常見的命令: 1)lpush:將一個或多個值插入到列表頭部。列表不存在,一個新的列表會被創建。 2)rpush:將一個或多個值插入到列表尾部。 3)lpop:移除并返回列表頭…

mac重復文件清理,攝影師同款清理方案

攝影師小林盯著屏幕上的警告:“存儲空間不足”,離截稿只剩3小時。她的MacBook如同塞滿回憶的閣樓,128GB的“其他”空間神秘消失。翻看照片庫時,她驚訝地發現——同一組西藏雪山照片竟有十幾個副本!這是mac重復文件問題…

lua腳本為什么能保證原子性

Redis 處理客戶端請求是基于單線程模型的( Redis 6.0 開始引入了多線程處理網絡 IO,但命令執行仍然是單線程的)。這意味著,在任意時刻 Redis 只會執行一個命令或腳本。這種單線程特性確保了當 Redis 在執行一個 Lua 腳本時&#x…

爬蟲詳解:Aipy打造自動抓取代理工具

一、爬蟲的本質與核心功能 爬蟲是一種通過編寫程序自動抓取互聯網公開數據的技術工具,其核心流程包括: 模擬瀏覽器行為:發送 HTTP 請求訪問目標網頁解析頁面結構:提取 HTML/XML 中的關鍵信息(如文本、鏈接、圖片&…

Leetcode百題斬-棧

終于來到了棧專題,想想之前來阿里的時候就是面試了一道棧最終通過了終面,也是十分懷念了。 739. Daily Temperatures[Medium] 思路:這就是最典型的單調棧問題了。從后向前維護下一個更大值或者下一個更大值的位置。 可以看一下當年面阿里時…

PIXHAWK(ardupilot4.52)NMEA的解析bug

最近在測試過程中發現在橢球高為負的地方,地面站讀取GPS_RAW_INT (24)消息中的alt高度竟然是正值。而消息中定義的alt并不是一個unsigned數據,理論上是帶有正負符號的。 查看gga的原始信息: $GPGGA,063718.40,3714.8533856,N,11845.9411766,…

Linux容器講解以及對應軟件使用

一、容器基礎知識講解 1.1 微服務的部署策略 部署單體應用意味著運行大型應用的多個相同副本,通常提供若干臺(N)服務器(物理機或虛擬 機),在每臺服務器上運行若干個(M)應用實例。部…

企業級應用技術-ELK日志分析系統

目錄 #1.1ELK平臺介紹 1.1.1ELK概述 1.1.2Elasticsearch 1.1.3Logstash 1.1.4Kibana #2.1部署ES群集 2.1.1基本配置 2.1.2安裝Elasticsearch 2.1.3安裝Logstash 2.1.4Filebeat 2.1.5安裝Kibana 1.1ELK平臺介紹 1.1.1ELK概述 ELK 是三個開源工具的縮寫,分別是Elas…

Shiro漏洞復現

Shiro簡介 Apache Shiro是一種功能強大且易于使用的Java安全框架,它執行身份驗證、授權、 加密和會話管理,可用于保護任何應用程序的安全。 Shiro提供了應用程序安全性API來執行以下方面: 1.身份驗證:證明用戶身份,通…

VSCode 中使用 Google Test(GTest)框架測試

VSCode 中使用 Google Test(GTest)框架在 VSCode 中對 C 代碼進行測試的示例: 一、Unbutu x86使用gtest 環境配置 安裝 GTest :在 Ubuntu 系統中,可以通過命令sudo apt-get install libgtest-dev安裝 GTest 庫。對于…

【1.6 漫畫數據庫設計實戰 - 從零開始設計高性能數據庫】

1.6 漫畫數據庫設計實戰 - 從零開始設計高性能數據庫 🎯 學習目標 掌握數據庫表結構設計原則理解字段類型選擇與優化學會雪花算法ID生成策略掌握索引設計與優化技巧了解分庫分表設計方案 📖 故事開始 小明: “老王,我總是不知道怎么設計數…

OSPF虛擬鏈路術語一覽:快速掌握網絡路由

大家好,這里是G-LAB IT實驗室。今天帶大家了解一下OSPF的相關知識! 01 OSPF虛擬鏈路術語大全 網絡架構中,OSPF(開放式最短路徑優先)是一種重要的路由協議。通過其鏈路狀態路由機制,OSPF能夠有效維護和更新…

oracle常用的函數(一) 之 to_char、to_date

文章目錄 前言to_char基本語法格式模型格式模型介紹無FM示例使用FM輸出貨幣負數輸出尖括號 將日期格式化將數字格式化為帶有貨幣符號和千位分隔符的格式總結 to_date語法語法示例 戳這里,第二彈 → oracle常用的函數(二) 之 nvl、decode、l…

數據庫服務器宕機的處理方法與實戰策略

在當今數字化時代,數據庫作為企業數據存儲與管理的核心,承載著業務運行的關鍵信息。一旦數據庫服務器宕機,將導致業務中斷、數據丟失等嚴重后果,甚至可能給企業帶來巨大的經濟損失和聲譽損害。因此,掌握一套系統、科學的數據庫服務器宕機處理方法尤為重要。本文將從應急響…

如何hack邊緣的kubelet修改Cgroup數值

之前做了一個VPA項目的需求,就是需要不重啟的方式修改容器的Cgroup的值已達到垂直擴縮容的目的,項目中核心的思路如下 上游下發要VPA的結果的值寫入到容器的Annotation里面Kubelet 感知到這個 annoation 的變化我們本地運行一個 Agent,里面運…

熟悉 PyCharm

界面 我們常用的就這個幾個地方: 常用配置 調整字體大小 Ctrl 滾輪調整字體大小 插件推薦 Indent Rainbow 該插件的作用在于能夠對于不同層級縮進的空格標注不同的顏色: 快捷鍵 快捷鍵的 pdf 下載鏈接: Windows 版:https:…

pytorch--模型訓練的一般流程

文章目錄 前言0、數據集準備1、數據集2、dataset3、model4、訓練模型 前言 在pytorch中模型訓練一般分為以下幾個步驟: 0、數據集準備 1、數據集讀取(dataset模塊) 2、數據集轉換為tensor(dataloader模塊) 3、定義模型…