2022年絕對是人工智能爆發的元年,前有 stability.ai 開源 Stable Diffusion 模型,后有 Open AI 發布 ChatGPT,二者都是里程碑式的節點事件,其重要性不亞于當年蘋果發布iPhone,Google推出Android。它們讓AI不再是一個遙不可及的技術名詞,而是觸手可及、實實在在的智能應用工具。
不同于ChatGPT可以直接體驗,Stable Diffusion需要自己部署后才能使用,所以國內了解的人還不多。但Stable Diffusion絕對是AI圖像生成領域的ChatGPT級的殺手產品——它使用超級簡單、完全開源免費,生成的圖片以假亂真、震驚四座。今天,我將用萬字保姆級教程教你如何一步一步在本地運行起Stable Diffusion,并手把手教你如何生成以假亂真的AI生成圖片。
Stable Diffusion是一種潛在擴散模型(Latent Diffusion Model),能夠從文本描述中生成詳細的圖像。它還可以用于圖像修復、圖像繪制、文本到圖像和圖像到圖像等任務。簡單地說,我們只要給出想要的圖片的文字描述在提Stable Diffusion就能生成符合你要求的逼真的圖像!
Stable Diffusion將“圖像生成”過程轉換為逐漸去除噪聲的“擴散”過程,整個過程從隨機高斯噪聲開始,經過訓練逐步去除噪聲,直到不再有噪聲,最終輸出更貼近文本描述的圖像。這個過程的缺點是去噪過程的時間和內存消耗都非常大,尤其是在生成高分辨率圖像時。Stable Diffusion引入潛在擴散來解決這個問題。潛在擴散通過在較低維度的潛在空間上應用擴散過程而不是使用實際像素空間來減少內存和計算成本。
與DALL·E和Midjourney相比,Stable Diffusion最大的優勢是開源,這就意味著Stable Diffusion的潛力巨大、發展飛快。Stable Diffusion已經跟很多工具和平臺進行了集成,且可用預訓練模型數量眾多(參見Stable Diffusion資源列表)。正是由于社區的活躍,使得Stable Diffusion在各種風格的圖像生成上都有著出色的表現,隨便給大家看幾張我生成的圖片:
![]() |
![]() | ![]() | ![]() |
為了方便大家更好地理解后面的內容,下面對Stable Diffusion中的幾個核心概念做簡單的說明。Stable Diffusion的詳細原理請參考《Stable Diffusion原理詳解》。
自動編碼器 (VAE) 由兩個主要部分組成:編碼器和解碼器。編碼器會將圖像轉換為低維潛在表示(像素空間–>潛在空間),該表示將作為輸入傳遞給U_Net。解碼器做的事情剛好相反,將潛在表示轉換回圖像(潛在空間–>像素空間)。
U-Net 也由編碼器和解碼器組成,兩者都由 ResNet 塊組成。編碼器將圖像表示壓縮為較低分辨率的圖像,解碼器將較低分辨率解碼回較高分辨率的圖像。
為了防止 U-Net 在下采樣時丟失重要信息,通常在編碼器的下采樣 ResNet 和解碼器的上采樣 ResNet 之間添加快捷連接。
此外,Stable Diffusion 中的 U-Net 能夠通過交叉注意力層調節其在文本嵌入上的輸出。 交叉注意力層被添加到 U-Net 的編碼器和解碼器部分,通常在 ResNet 塊之間。
文本編碼器會將輸入提示轉換為 U-Net 可以理解的嵌入空間。一般是一個簡單的基于Transformer的編碼器,它將標記序列映射到潛在文本嵌入序列。
好的提示(prompt)對輸出質量直觀重要,這就是為什么現在大家這么強調提示設計(prompt design)。提示設計就是要找到某些關鍵詞或表達方式,讓提示可以觸發模型產生具有預期屬性或效果的輸出。
Stable Diffusion的大致工作流程如下:
首先,Stable Diffusion模型將潛在種子和文本提示作為輸入。 然后使用潛在種子生成大小為 64×64 的隨機潛在圖像表示,而文本提示通過 CLIP 文本編碼器轉換為 77×768 的文本嵌入。
接下來,U-Net 以文本嵌入為條件迭代地對隨機潛在圖像表示進行去噪。 U-Net 的輸出是噪聲殘差,用于通過調度算法計算去噪的潛在圖像表示。 調度算法根據先前的噪聲表示和預測的噪聲殘差計算預測的去噪圖像表示。這里可選用的調度算法很多,每個算法各有優劣,對Stable Diffusion來說建議用以下幾個:
去噪過程重復大約 50 次以逐步檢索更好的潛在圖像表示。 完成后,潛在圖像表示由變分自動編碼器的解碼器部分解碼。
整體流程可以用下面的流程圖表示:
如果你不想自己搭建Stable Diffusion環境,或者你想在自己動手部署Statble Diffusion之前,先體驗一下Stable Diffusion的威力,可以嘗試如下5個免費的工具:
DreamStudio 是Stable Diffusion的創造者Stability AI的官方網絡應用程序。
最大的優勢是官方出品,支持stability.ai旗下的所有模型,包括最新發布的Stable Diffusion v2.1。
用Dream Studio生成圖片需要消耗積分,注冊是會免費贈送積分,用來體驗基本夠用。如果想生成更多圖片可以花10美元購買積分,大約可以生成1000張圖片。
Replicate是一個機器學習模型共享平臺,你可以通過API來分享或使用上面的模型。
大神cjwbw在Replicate上共享了Stable Diffusion v2.0模型,你可以免費測試。
Playground AI是一個專注AI圖像生成的網站,功能豐富、模型眾多。最近也上線了最新的Stable Diffusion v2.1,可以免費使用,但限制每個用戶每天最多生成1000張圖片。
如果你是數據工程師或算法工程師,可能你更希望在Jupyter Notebook中使用Stable Diffusion。Anzor Qunash在Google Colab上共享了Stable Diffusion 2.0 Colab(已更新到2.1),你可以直接復制過來使用。
該Notebook用gradio搭建了界面,只需點擊運行按鈕,就會顯示Gradio UI界面。然后,您就可以在上面生成任意數量的圖像,并且可以調節參數,控制生成效果。
Baseten是一個MLOps平臺,用于創業公司在生產階段快速開發、部署和測試模型。BaseTen最近發布了對Stable Diffusion的API支持,并提供了一個演示頁面。
這個工具非常簡單,只有一個文本框和一個生成按鈕,沒有其他參數可以調節,也沒有生成數量的限制。
本地部署Stable Diffusion最簡單的方法是使用Stable Diffusion Web Ui。
Stable Diffusion Web Ui是一套無代碼、可視化的Stable Diffusion集成運行環境。它將Stable Diffusion的安裝部署集成打包,提供一鍵安裝腳本,并提供Web界面操作界面,極大簡化了Stable Diffusion的操作和使用,讓沒有不懂代碼的小白也能輕松上手使用Stable Diffusion模型。
Stable Diffusion還是比較吃資源的,因此對基礎硬件有一定要求。
上面的配置是Stable Diffusion運行起來的基礎要求,如果想要生成速度快,顯卡配置自然是越高越好,顯存最好也上到8G。推薦配置最好不低于:
如果本地機器配置達不到,可以考慮用云虛擬主機。目前最經濟的是AWS的g4dn.xlarge,¥3.711元/小時。
Stable Diffusion Web Ui用Python開發,完全開源,因此在運行Stable Diffusion Web Ui前,我們需要安裝Git來拉取Stable Diffusion Web Ui源代碼,并安裝Python。
Git是一個開源的分布式版本控制系統。這里安裝Git是為了獲取Stable Diffusion Web Ui的代碼。當然,如果不安裝Git,我們也可以通過代碼打包下載鏈接直接下載Stable Diffusion Web Ui的代碼,但是這樣獲取的代碼無法后續更新,每次Stable Diffusion Web Ui升級都要重新下載代碼覆蓋老版本代碼。用Git就很方便,可以通過clone
命令從代碼庫獲取代碼,通過git pull
更新到最新版代碼。
Git安裝很簡單,只需到Git下載頁面下載對應平臺安裝包安裝即可(Linux發行版一般自帶Git可以不用安裝)。
Windows用戶請注意,安裝時在安裝配置界面勾選上“Add a Git Bash Profile to Windows Terminal”選項。
Python的安裝方法有很多,這里推薦大家通過Miniconda來安裝。用Miniconda有幾個好處:
大家只要到Miniconda下載頁面下載對應平臺的安裝包即可,最新的Miniconda包含Python 3.10.9。
下載完安裝包直接雙擊安裝即可(Linux版本在Shell中運行下載下來的shell腳本)。Windows用戶請注意,當看到下面界面時,請務必勾選第一個選項,將Miniconda添加到環境變量PATH中。
由于 Python 第三方庫的來源是國外源,使用國內網絡安裝庫時會出現下載緩慢、卡頓等現象,不僅耽誤時間,而且很容易安裝失敗。因此我們需要將 conda 的安裝源替換成國內鏡像,這樣可以大幅提升下載速度,提高安裝成功率。這里推薦清華源,執行下方命令即可添加:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
添加成功后可以通過conda config --show-sources
查看當前源
channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
- defaults
show_channel_urls: True
除了清華源,還可以添加中科大源或阿里云源
中科大的源
conda config –add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
阿里云的源
conda config --add channels http://mirrors.aliyun.com/pypi/simple/
最后,運行conda clean -i
清除索引緩存,保證用的是鏡像站提供的索引。
環境配置好后,我們就可以開始安裝Stable Diffusion Web Ui了。
首先從GitHub上下載Stable Diffusion Web Ui的源代碼:
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
下載完成后,cd stable-diffusion-webui
進入Stable Diffusion Web Ui的項目目錄,在項目目錄里會看到webui.bat
和webui.sh
這兩個文件,這兩個文件就是Stable Diffusion Web Ui的安裝腳本。
webui.bat
文件./webui.sh
安裝腳本會自動創建Python虛擬環境,并開始下載安裝缺失的依賴庫。這個過程可能會有點久,請耐心等待。如果中途安裝失敗,多半是網絡連接超時,此時可以重新執行安裝腳本,腳本會接著上次的下載安裝位置繼續安裝。直到看到
Running on local URL: http://127.0.0.1:7860
說明Stable Diffusion Web Ui安裝成功。
用瀏覽器打開http://127.0.0.1:7860
就會看到Stable Diffusion Web Ui的界面。
Stable Diffusion Web Ui安裝過程中會默認下載Stable Diffusion v1.5模型,名稱為v1-5-pruned-emaonly。如果想用最新的Stable Diffusion v2.1,可以從Hugging Face上下載官方版本stabilityai/stable-diffusion-2-1。下載后將模型復制到models
目錄下的Stable-diffusion
目錄即可。完成后點擊頁面左上角的刷新按鈕,即可在模型下拉列表中看到新加入的模型。
除了標準模型外,Stable Diffusion還有其他幾種類型的模型,models
目錄下每一個子目錄就是一種類型的模型,其中用的最多的是LoRA模型。
LoRA(Low-Rank Adaptation)模型是小型穩定擴散模型,可對標準模型進行微調。它通常比標準模型小10-100倍,這使得LoRA模型在文件大小和訓練效果之間取得了很好平衡。LoRA無法單獨使用,需要跟標準模型配合使用,這種組合使用方式也為Stable Diffusion帶來了強大的靈活性。
LoRA模型下載后需要放到Lora
目錄中,使用時在提示中加入LoRA語法,語法格式如下:
<lora:filename:multiplier>
filename
是LoRA模型的文件名(不帶文件后綴)
multiplier
是LoRA 模型的權重,默認值為1,將其設置為 0 將禁用該模型。
關于Stable Diffusion提示的使用規則請參考這里。
Stable Diffusion Web Ui整體上分為2個部分,最上面是模型選擇,可以從下拉列表中選擇已下載的預訓練模型
模型選擇下面是一個Tab欄,這里是Stable Diffusion Web Ui提供的所有功能。
平時使用最多的是txt2img 和 img2img,下面針對這2大塊功能詳細講解。
txt2img有三個區域:
提示區主要是2個文本框,可以輸入提示文本。其中:
prompt: 主要是對于圖像進行描述。prompt對Stable Diffusion圖像生成質量至關重要,因此如果想生成高質量圖片,一定要在提示設計上下功夫。一個好的提示需要詳細和具體,后面會專門講解如何設計一個好的提示。
Negative prompt:主要是告訴模型我不想要什么樣的風格或元素;
參數調節區提供了大量參數用于控制和優化生成過程:
Sampling method:擴散去噪算法的采樣模式,不同采樣模式會帶來不一樣的效果,具體需要在實際使用中測試;
Sampling steps:模型生成圖片的迭代步數,每多一次迭代都會給 AI 更多的機會去對比 prompt 和 當前結果,從而進一步調整圖片。更高的步數需要花費更多的計算時間,但卻不一定意味著會有更好的結果。當然迭代步數不足肯定會降低輸出的圖像質量;
Width、Height:輸出圖像寬高,圖片尺寸越大越消耗資源,顯存小的要特別注意。一般不建議設置的太大,因為生成后可以通過 Extras 進行放大;
Batch count、 Batch size:控制生成幾張圖,前者計算時間長,后者需要顯存大;
CFG Scale:分類器自由引導尺度,用于控制圖像與提示的一致程度,值越低產生的內容越有創意;
Seed:隨機種子,只要種子一樣,參數和模型不變,生成的圖像主體就不會劇烈變化,適用于對生成圖像進行微調;
Restore faces:優化面部,當對生成的面部不滿意時可以勾選該選項;
Tiling:生成一張可以平鋪的圖像;
Highres. fix:使用兩個步驟的過程進行生成,以較小的分辨率創建圖像,然后在不改變構圖的情況下改進其中的細節,選中該選項會有一系列新的參數,其中重要的是:
? Upscaler:縮放算法;
? Upscale by:放大倍數;
? Denoising strength:決定算法對圖像內容的保留程度。0什么都不會改變,1會得到一個完全不同的圖像;
img2img跟txt2img界面類似,不同的是沒有了txt2img中的參數調節區,取而代之的是圖像范本區。
我們可以上傳范本圖片讓Stable Diffusion模仿,其他地方跟txt2img相同
通過這里下載簡體中文語言文件,下載完成后將其復制到項目文件夾的“localizations”目錄中。之后在Settings -> User interface -> Localization (requires restart),在下拉菜單中選擇zh_CN。如果下拉列表中看不到zh_CN,請先點擊右側的刷新按鈕,然后就能在下拉列表中看到了。設置完成后記得點擊頁面上方的“Apply settings”按鈕保存設置。
語言設置需要重啟才能生效。Ctrl + C
先終止Stable Diffusion Web Ui服務,然后再運行webui.bat
或webui.sh
,重啟后刷新瀏覽器頁面就能看到語言變成了簡體中文了。
?注意:該漢化可能不完美,個別地方會漏漢化或漢化表達不準確,歡迎大家反饋錯誤和優化建議。有能力的朋友建議用英文界面。
為了產生具有特定風格的圖像,必須以特定格式提供文本提示。 這通常需要添加提示修飾符或添加更多關鍵字或關鍵短語來實現。下面為大家介紹一下Stable Diffusion的prompt語法規則。
Stable Diffusion提示文本中的關鍵字或關鍵短語通過半角逗號分割,一般越靠前權重越高。我們可以通過提示修飾符來認為修改權重。
括號可以嵌套使用,例如:(tag)的權重為
[tag1 | tag2]:將tag1和tag2混合;
{tag1 | tag2 | tag3}:從標簽集合中隨機選擇一個標簽;
[tag1 : tag2 : 0.5 ]:表示先用tag1生成,當生成進程到50%時,改用tab2生成;如果輸入整數的話表示步長,比如10,意思是生成10步后改用tag2;
<lora:filename:multiplier>:LoRA模型引用語法
這里我將使用chilloutmix + KoreanDollLikeness生成寫實風韓系偶像小姐姐。
首先需要下載chilloutmix模型(我用的是chilloutmix_NiPrunedFp32Fix.safetensors
),將其拷貝到Stable-diffusion
目錄,還需要下載KoreanDollLikeness這個LoRA模型,將其拷貝到Lora
目錄。
然后在Stable Diffusion Web Ui主界面的模型選擇中下拉選擇chilloutmix_NiPrunedFp32Fix.safetensors
。如果找不到該模型,可以點擊右側刷新按鈕刷新一下。
選擇好模型后,我們開始設計prompt。首先我們引入LoRA
<lora:koreanDollLikeness_v10:0.66>
然后定義生成圖片的風格,我們希望超寫實風,可以用如下關鍵詞:
best quality, ultra high res, (photorealistic:1.4)
其中photorealistic
我們賦予較高的權重1.4。
接著來定義圖片的主體內容,這里我將希望圖片中出現的元素都做個權重增強:
1girl, thighhighs, ((school uniform)),((pleated skirt)), ((black stockings)), (full body), (Kpop idol), (platinum blonde hair:1), ((puffy eyes))
最后,修飾一些表情、姿勢的細節:
smiling, solo focus, looking at viewer, facing front
這樣我們完整的promt是:
<lora:koreanDollLikeness_v10:0.66>, best quality, ultra high res, (photorealistic:1.4), 1girl, thighhighs, ((school uniform)),((pleated skirt)), ((black stockings)), (full body), (Kpop idol), (platinum blonde hair:1), ((puffy eyes)), smiling, solo focus, looking at viewer, facing front
我們還需要提供Negative prompt去除我們不想要的風格和元素:
paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality, ((monochrome)), ((grayscale)), skin spots, acnes, skin blemishes, age spot, glan
這里主要剔除了繪畫風、簡筆畫、低質量、灰度圖,同時去除雀斑、痤瘡等皮膚瑕疵。
為了讓圖片生成得更加真實自然,我們需要對參數做一些調整,需要調整的參數如下:
這里鼓勵大家多嘗試其他取值,上面只是我認為效果最好的一組參數。
完成上面所有設置后,就可以點擊Generate按鈕生成圖片了。生成速度由你的設備性能決定,在我的電腦上大約30s生成一張圖片。
好的生成質量離不開好的模型,這里為大家列出了Stable Diffusion預訓練模型資源的獲取來源。
Hugging Face是一個專注于構建、訓練和部署先進開源機器學習模型的網站。
HuggingFace是Stable Diffusion模型創作的首選平臺,目前平臺上有270多個與Stable Diffusion相關的模型,用”Stable Diffusion”作為關鍵字就能搜到。
推薦Dreamlike Photoreal 2.0這個模型,這是一個由Dreamlike.art制作的基于Stable Diffusion v1.5的真實感模型,生成效果非常接近真實照片。
另一個熱門模型是Waifu Diffusion,推薦嘗試。
Civitai是一個專為Stable Diffusion AI藝術模型設計的網站。該平臺目前有來自250+創作者上傳的1700個模型。這是迄今為止我所知的最大的AI模型庫。你可以在上面分享自己的模型或生成作品。
在Stable Diffusion的Discord頁面中有一個名為“Models-Embeddings”的專屬頻道,里面提供了很多可以免費下載的各種模型。
Rentry網站上有一個保存Stable Diffusion模型的頁面sdmodels,上面由70多個模型可以免費下載。
使用這些模型資源的時候要注意:下載自定義AI模型會帶來危險。例如,某些可能包含NSFW(不安全)內容。
另一個風險是,這些自定義AI模型可能包含惡意代碼或惡意腳本,特別是CKPT文件。如果想要更安全地使用AI模型,請盡量選擇safetensor文件類型。