在開始這篇文章之前,我想先給大家介紹一下我個人學習深入 SD 的學習曲線。
- 先學最基礎的,大概理解參數模型提示詞的用途,先把 SD 的流程跑通,這一步大概可以做出來相對看得過去的圖了
- 然后再去研究模型和提示詞的高級用法,比如,混用 lora 模型,提示詞的分步和融合寫法,這個時候,必然會涉及到一些原理性的東西,就會理解為什么 AI 畫不好手了。到這一步,可以對圖進行針對性的優化了,比如說一個圖怎么達不到提示詞想要的效果,可以針對性地優化提示詞。
- 學習其他功能,圖生圖,Control net 插件,以及分層控制 Lora 模型等進階功能。
- 訓練自己的模型
更多Stable Diffusion教程:
上一篇文章集中在第一步,這篇文章會講解一下第二部分和第三部分。沒有看上一篇的基礎篇的建議先看完上一篇再食用。上一篇文章指路:
1. XYZ 圖表的使用
XYZ 三維圖表是一種用于可視化三維數據的圖表。它由三個坐標軸組成,分別代表三個變量。這個工具的作用就是可以同時查看至多三個變量對于結果的影響。具體在 sd 中,xyz 圖表可以幫助我們觀察到三個變量的變化對圖像的影響,以便我們更好的調整參數,如此,我們便對各個參數的作用更加了解,即使以后 sd 更新了新參數,我們也可以在不需要教程的情況下知道該參數的含義。
這項功能可以在 文生圖/圖生圖 界面的左下角中 “腳本” 一欄內選擇 “X/Y/Z 圖表” 以啟用。
舉個例子,我們想要測試采樣器(Sampler),迭代步數(Steps)和基礎底模型(Checkpoint name)三個變量對圖片的影響,點開 X 類型,選擇為采樣器,Y 和 Z 依次設置為迭代步數和基礎底模型。
在填各個軸數值的時候,將對應的參數以英文逗號隔開即可。以 X 軸的 sampler 為例,我們可以把要對比的采樣器的名稱復制進去。另外,也可以點擊右邊的“book”圖標,加載本地所有的采樣器,然后刪除掉不需要的即可。在填 Y 軸的迭代步數時,除了可以直接輸入數值外,也可以采用另外兩種方式來寫。
- 起點-終點(間距),例如:20-50(+10)就表示,從 20 到 50,每一步加 10。
- 起點-終點[步數],例如 20-50[4]就表示,從 20 到 50,一共四步。
這兩種方式的效果都與直接輸入“20,30,40,50”等效。
最終我們會得到一個這樣的網格圖。
這里還有一個小技巧,如果我們覺得圖與圖之間沒有間隔,混在一起不好區分,可以調整這里的數值,來增加圖與圖的間隔。將這里的間隔調整為 12 后效果如下:
2. 提示詞矩陣
①基本使用方式
在許多情況下,一大串從網絡上抓取的提示詞在某些模型中表現良好,但在更換模型后可能就無法使用。有時候,一些看似無用的提示詞被移除后,畫面的感覺會變得怪異,不清楚到底是哪里受到了影響。這時候,就可以使用 Prompt matrix 來深入探究原因。與之前介紹的 X/Y/Z plot 相比,Prompt matrix 的使用方式相似,都可以生成一組圖表,但它們的設置方式有很大的差別。
我們舉個例子來說明這個腳本的使用方法:
例如我們在別人的提示詞中看到了這兩個詞:dutch angle,autumn lights,翻譯過來是傾斜的角度,秋天光影,每個字都懂,但是我們還是無法知道這些詞對圖像的影響。
1)首先我們把選擇提示詞這個部分選中正面。(默認就是選中正面,不需要去更改)。其他參數我們保持默認即可。
2)接下來我們將兩個詞填入正向提示詞中,這里的格式是“|測試提示詞 1|測試提示詞 2”。
在上面的這個圖中,第一行的提示詞會被用在每一張圖上,第二、三行被“|”分割的提示詞,會被當成矩陣提示詞,交錯添加在最終的圖上。
3)然后,我們可以產出這么一張圖。
左上角的第一張圖,就是什么額外提示詞都沒加的狀態,它第二列的圖,則全都是添加了“dutch angle(傾斜角度)”這個提示詞的效果。第二行則是都增加了“autumn lights(秋天光影)”提示詞的效果。而最右下的,就是傾斜角度與秋天光影全部提示詞都有的效果。 這樣你就能很清楚地看到,各種提示詞交互疊加起來的效果。
②進階使用
提示詞矩陣不止一次可以對單個詞進行測試,還可以將一組詞組合在一起進行測試。例如:
以此作為提示詞產出的圖如下:
在完成最終的繪圖后,有時我們可能會發現一些小問題,或者想要微調畫面。這時,我們可以使用“變異隨機種子”來實現。
以這樣一張原圖為例:
首先,我們先將隨機種子確定,然后將這里勾選后,下面的子參數“變異隨機種子”會被打開,變異幅度越大,最終的圖與之前的圖的區別越大。一般來說,我們會把這個值調整為 0.3,當然,這里也可以借助上面介紹過的 xyz 圖表進行嘗試,找到一個最合適的值。另外,我們可以把批次數提高,找到最合適的結果。
最終,我們可以得到這樣的結果。
由于顯存大小的限制,通常我們只能在出圖時生成 512*512 大小的圖像。然而,這個大小的圖像通常不夠清晰,即使進行高清修復,也只能將分辨率提高到 1024*1024。如果我們強行將分辨率改變為 2000 以上,要么顯存直接爆掉,無法生成圖像,要么生成的圖像會出現各種奇怪的問題。
為了解決這個問題,我們可以使用“multi diffusion”插件來放大圖像。這是目前圖像放大的最佳解決方案,可以在放大圖像的同時補充細節。
1. 插件的安裝
一般來說,在秋葉的整合包中已經自帶了這個插件。如果沒有的話,點擊擴展→從網址安裝→重啟UI即可。
網址:https://github.com/pkuliyi2015/multidiffusion-upscaler-for-automatic1111
2. 插件的使用
①使用前的準備
- 去掉正向提示詞中的有實際意義的部分,只留下例如"highres, masterpiece, best quality, ultra-detailed 8k wallpaper, extremely clear"的詞匯。由于這個插件的原理是對大圖進行分塊繪制,如果在正向提示詞中加入了具體對象,會使得這個對象遍布在圖像的各個區域。
- 「可選」把提示詞引導系數調大,例如調到 15 左右,經過我的測試,效果是要好于 7 的,但是差別不大。
3. 插件參數設置
我們首先將要生成的圖發送到圖生圖下,將頁面往下滾動,找到這兩個標題,并點擊右側的箭頭展開設置項。
①Tile Diffusion 參數設置
我們只需要調整以下五個參數即可,其他參數保持默認即可。
放大算法:真人圖像用 4x+,二次元圖像用 4x+anime。
放大倍數,即最終圖像相對于原圖的放大倍率。
renoise stength 推薦“0.3-0.6”之間。
②Tiled VAE
首次使用時點擊 reset,系統會自動計算出最適合當前電腦配置的編碼器區塊大小和解碼器區塊大小。然后如果放大后的圖顏色失真,勾選壓縮編碼器顏色修復即可。
最后,我們點擊生成即可。
從右下角的圖片信息可以看到,我們已經得到了 2k 的圖。
并且在原比例顯示時,也是非常清晰的。
在之前的文章中,我們介紹了提示詞的基本語法和撰寫方式,在這里我們要介紹一下更進階的語法和使用方式。
1. 提示詞的順序
先說結論:越重要的提示詞應該放到越靠前的位置。
這里做一個測試,1girl,1cat
可以看到,當 cat 這個提示詞在前時,貓的細節明顯多了很多,而且甚至 AI 將貓耳的元素加到了人物身上。
結論:Prompt 的順序會影響畫面的組織方式,越靠前的 Prompt 對構圖的影響越大。雖然本次試驗只涉及一個場景,但在更多的后續探究和復雜場景構建中,這種影響的有效性已經得到證明。然而,它并非絕對有效,在某些情況下或者較為復雜的場景中,這種規律可能會失效,但總的來說,遵循這個規律寫提示詞更容易獲得自己想要的場景。
2. 分步描繪
有時候,在特定的情況下,你可能希望一個提示詞在計算過程中持續到達到 X%時停止,或者在達到 X%時才加入,或者在開始時使用提示詞 A,然后在達到 X%時切換到提示詞 B。在這種情況下,SD 提供了這樣子功能的語法:
[A:B:number] 表示:A 提示詞跑到 number 之后換成 B 提示詞
[A:number] 表示:A 提示詞跑到 number 之后才開始加入
[A::number] 表示:A 提示詞跑到 number 的時候停止使用
我們來看一個例子:
假設你想畫一位穿著白色毛衣和橘色皮衣的女孩,并測試不同比例的 Prompt 的效果,你可以嘗試以下方式:
[White sweater:orange Leather coat:0.2]
這意味著前 20%的圖像使用“白色毛衣”提示詞進行繪制,剩下的 80%則使用“橘色皮衣外套”提示詞繼續繪制。
同樣,[White sweater:orange Leather coat:0.5]表示在繪制到一半時,提示詞從“白色毛衣”轉換為“橘色皮衣外套”,而 [White sweater:orange Leather coat:0.9] 則表示在繪制到 90%時才切換到“橘色皮衣外套”。以下是效果對比:
3. 融合描繪
語法是:[提示詞 A|提示詞 B]。
這種用法非常罕見,基本上就是在每個回合中不斷輪流使用提示詞,效果會變得難以預測。例如,下圖使用了這樣的提示詞,[black hat|red hat]是黑帽和紅帽提示詞交替使用,但實際上生成的帽子并沒有真正變成紅黑相間,而是黑底帽子帶有了紅色裝飾。
筆者建議,這種用法慎用,可控程度相當低,很容易出現奇奇怪怪的圖。
4. 反向提示詞的進階用法
反向提示詞的高級用法不僅僅是寫一些低質量的提示詞,還可以寫一些與正向提示詞相關但不需要的提示詞。例如,在正向提示詞中,上半身通常會默認繪制手,但是我們可以將手寫入反向提示詞中,從而達到更加自由的繪制效果。
5. 借助 ChatGPT 寫提示詞
在編寫提示詞時,我們可能會遇到不知道如何描述一個場景的情況。例如,我們想要繪制一張女孩在咖啡館里看書的畫面,但不知道如何描述這個場景。這時,我們可以借助 ChatGPT 來提供靈感,打開思路。
具體操作如下:首先給 ChatGPT 一個基本的提示,讓它幫助我們產生畫面描述。
我這里的基本提示如下:
假設你現在是一個創意插畫師,接下來我會給你一些提示,你需要以這個提示為依據,去組合想象生成一副插畫的語言描述,請注意,不允許用長句,盡可能用詞匯,其次是短語。另外盡可能多地合理地去補充場景中對人或風景的細節和特征,不少于 5 處,例如主體的衣著,長相,姿勢,背景的花草樹木等,盡可能的幫我補充這些我沒有提到的細節,整體內容豐富一點。
大家可以直接復制,也可以在此基礎上加入一些其他細節。
之后,我們輸入一個簡單的場景描述,例如“女孩坐在咖啡館”,ChatGPT 就會給出對應的畫面描述,接下來,我們從中提取出重要的提示詞即可。
另外,我們還可以將借助一些 ChatGPT 的軟件或瀏覽器插件,將這個保存成一個模板,以后我們需要時直接輸入我們的畫面即可,不需要重復輸入基本提示。
以 iOS 上一個叫“Chitchat”的軟件為例:(chitchat 的工作人員看到后,請給我廣告費)
在這部分的最后,額外補充一個知識點:ChatGPT 的提示語句式:
“假設你你現在是 XX 專家,需要做 XXX,請注意:要求 1,要求 2”,使用這樣的句式會讓 ChatGPT 的效果大幅提升。這個不是本文重點,這里不展開詳述。
5. 提示詞管理
在開始之前,我想先說一下為什么推薦這樣做。雖然網上有很多所謂的提示詞大全,但我不建議直接替換自己的提示詞管理,原因如下:
- 我們不需要那么多的風格,過多的提示詞會增加使用成本和管理難度。
- 我們不知道未經使用的提示詞具體會給圖片帶來什么變化。
正是出于這樣的考慮,我不想分享所謂的“海量優質提示詞”,我認為這些東西的噱頭價值大于實際意義,收藏后很可能就會被遺忘。授人以魚不如授人以漁,我希望大家學會的是一種有效的提示詞管理方法。
這里推薦一個網站: https://moonvy.com/apps/ops/ ,我們可以在這里對我們的提示詞進行管理。
使用方法可以參考這個視頻: https://www.bilibili.com/video/BV15N411P7D3/?vd_source=bd8f1862d445f4e01d7c1f49857dd474
現在的 AI 繪畫技術主要采用了一種名為擴散模型的方法,這種方法能夠使生成的圖片呈現出獨特且富有趣味性的效果。然而,這種方法也存在一個顯著的問題,那就是生成的圖片可控性非常差。在某些情況下,生成的圖片可能會非常精美,而在其他時候,效果卻可能不盡如人意。這使得設計師在使用此類工具時,很難確保能夠滿足客戶的具體需求。
然而,隨著一種名為 ControlNet 的新技術的出現,這一局面得到了改善。ControlNet 能夠幫助設計師更好地控制 AI 繪畫過程,從而使這個工具更加符合他們的實際工作需求。AI 繪畫不再僅僅是一個供人們娛樂的小玩具,而是逐漸發展成為一種能夠真正幫助設計師提高工作效率的實用工具。雖然目前 ControlNet 的可控性仍然有待提高,但與之前的技術相比,它已經實現了質的飛躍。
Controlnet 插件的本質是利用圖像作為輸入信息的方式,以彌補語言在某些情況下的局限性。相對于語言而言,圖像更加直觀、簡潔、易于理解,能夠更加準確地傳達信息。因此,Controlnet 利用圖像作為輸入方式,可以更好地幫助 AI 理解我們的需求,從而生成我們所需要的圖片。
在圖片中,包含了多種信息,例如線條輪廓、表面凹凸等。Controlnet 插件的工作原理是使用特定的模型提取出特定的圖像信息,然后將其輸入給 AI,引導 AI 生成圖片。
總的來說,我們可以將使用圖片作為提示詞視為補充語言的方式。這里補充一下,在文生圖和圖生圖中用 controlnet 插件的區別,一句話說明白,需要生成新的圖片用文生圖,在原有圖片上優化使用圖生圖。
1. 插件安裝與模型下載
①插件安裝
一般來說,網上的整合包已經包含了 controlnet 插件,不需要額外安裝。
安裝方式:
- 選擇到從網址安裝: https://github.com/Mikubill/sd-webui-controlnet (推薦)
- 可以直接去這個鏈接這里下載 https://github.com/Mikubill/sd-webui-controlnet/archive/refs/heads/main.zip ,然后解壓到 extension 文件夾
②模型下載
我們可以直接去 https://huggingface.co/lllyasviel/ControlNet-v1-1下載對應的模型 ,把這些后綴為 safetensors 的文件下載下來,然后放到這個文件夾中即可。
2. 使用
①基本使用流程
這里以最常用的 canny 模型為例,模式選擇文生圖,canny 模型的作用就是提取出圖片的線條信息并輸入給 AI。
在界面最下面找到 controlnet 的插件,點擊右邊箭頭展開參數,將這四個選項全部啟用。
然后將預處理器和模型全部選擇為 canny,這里要注意,前面的預處理器與后面的模型要對應。接下來點一下這個爆炸的 icon,在右邊會顯示所提取出的線條信息。
下面的那些參數我們先保持默認不變,接下來,修改采樣器為 DPM++2M Karras,總批次數修改為 4,基礎底模型改為“cetusMix_Coda2”,并且填入如下的提示詞:
正向提示詞:masterpiece, best quality, ultra detailed, A girl, cute, light smile, black hair, purple eyes, yellow clothes, standing, outdoor, long sleeves,
反向提示詞:nsfw,(watermark),sketch, duplicate, ugly, huge eyes, text, logo, monochrome, worst face, (bad and mutated hands:1.3), (worst quality:2.0), (low quality:2.0), (blurry:2.0), horror, geometry, badpromptv2, (bad hands), (missing fingers), multiple limbs, bad anatomy, (interlocked fingers:1.2), Ugly Fingers, (extra digit and hands and fingers and legs and arms:1.4), crown braid, ((2girl)), (deformed fingers:1.2), (long fingers:1.2),(bad-artist-anime), bad-artist, bad hand
然后我們點擊生成即可。可以看到,最終生成的圖片是在初始的真人的基礎上生成的。
3. 具體參數介紹
低顯存模式:如果你的顯卡內存小于等于 4GB,建議勾選此選項。
完美像素模式:勾選后,controlnet 會自動去匹配適合的像素大小。
允許預覽:勾選后,點擊爆炸 icon,在圖片右邊會展示所提取的圖片特征信息
控制權重:可以調整該項 ControlNet 的在合成中的影響權重。
引導介入步數&引導終止步數:controlnet 對最終生成結果的控制步數范圍比例。Guidance strength 用來控制圖像生成的前百分之多少步由 Controlnet 主導生成。Guidance Start(T) 設置為 0 即代表開始時就介入,默認為 0,設置為 0.5 時即代表 ControlNet 從 50% 步數時開始介入計算。
canny low threshold & canny high threshold
更高的閾值下,所提取的線條更少,更低的閾值下提取的線條更多。
控制類型:更遵循提示詞,更遵循 controlnet 輸入的圖像特征,或者均衡。
①常用模型介紹
除了上面使用的 canny,還有幾個常用的模型,我在這里給大家介紹一下其他模型的用途。
Depth
通過提取原始圖片中的深度信息,獲得前后景的關系,可以生成具有同樣深度結構的圖。一般用于提取物體邊緣輪廓,沒有物體內部的細節。
以這個模型為引導,生成的圖片如下:
Lineart
與 canny 類似,該模型對線稿的處理能力極為優秀。同樣也是將圖形提取成線稿,然后在此基礎上進行上色與細節補充。
MLSD
該模型通過分析圖片的線條結構和幾何形狀,來構建出建筑外框,適合建筑設計的使用。
Normal
適用于三維立體圖,通過提取圖片中 3D 物體的法線向量,繪制出的新圖與原圖的光影關系完全一致。此方法適用于人物建模和建筑建模,但更適合人物建模。
hed(邊緣檢測算法):
canny 提取線稿更硬朗,hed 提取的線條更圓潤
OPENPOSE
根據圖片生成動作骨骼中間圖,然后生成圖片,使用真人圖片是最合適的,因為模型庫使用的真人素材。
目前已經有五個預處理器,分別是 openpose,openposefull,open posehand,openposefaceonly,openposeface,這五個預處理器分別可以識別身體姿態,姿態+手部+臉部,身體+手部,僅臉部,身體姿態+臉部。
我們這里以身體姿態為例,
上圖中右邊便是 openpose 提取出來的人物骨骼圖,以此引導生成的圖像如下,可以看到,圖像里人物的姿勢都與原圖保持了一致。
這里順便給大家推薦一個網站: https://escalalatina.com/mujeres/sentada-azul-naranja/ ,可以從這里面下載人物的不同姿勢的圖片。
Segment
語義分割模型,標注畫面中的不同區塊顏色和結構(不同顏色代表不同類型對象),從而控制畫面的構圖和內容。
如上右圖所示,每個色塊代表不同的含義,完整的色塊釋義對照表如下:
原圖文件鏈接如下: https://cowtransfer.com/s/3a5fc9e578ab44 ,各位自取即可。
在這個模型下,我們可以更自由地控制圖片的生成。例如我們想要添加一個人,將預處理后的色塊圖下載后,在 PS 中添加一個人物輪廓的色塊,顏色從表格中獲得。然后再導入到 controlnet 中,注意這時預處理器要選擇無,后面依舊選擇 seg,如圖所示。
再次點擊生成后,可以看到,圖片按照我們的要求在中下部添加了一個拿箱子的人,并且由于我們選擇的模型是二次元的,所以生成的圖片也是二次元的。但整體的結構是遵循我們的指令的。
這里整理了一些大家在使用 stable diffusion 過程中遇到的常見問題,希望可以幫助到大家。
1. Vae 模型是否必須要有?
不需要,現在的大模型很多已經自帶了 vae 模型,我們即使不使用額外的 vae 模型也可以得到比較好的效果
2. 大模型和 lora 是否必須對應?
這個是不需要的,并且甚至我們可以對 lora 模型混搭使用。例如:
3. 我明明描述的是一個人,最終圖像卻生成了多個人?
一般來說多人的問題,大概率是圖像尺寸過大,或者比例不對導致的。
為什么會出現這樣的問題呢?這要從 stable diffusion 的底層訓練集說起,stable diffusion V1.5 的版本其實是基于 512x512 圖像上進行微調的。當我設置的圖片尺寸遠大于 512x512,或比例與 1:1 相差過大時,SD 就會采用提示詞中的部分進行填充,所以會出現多人或多頭的情況。
解決方案:
a. 多抽卡。最直接的方案,生成很多張圖,把多人或多頭的圖片扔掉,但是這種方案很浪費算力。
b. 盡量保持文生圖時,直接生成的圖像比例和尺寸在 1:1 和 512x512 左右,需要放大時采用文章中提到的措施進行。
4. 無法生成全身照,盡管我添加了“full body”這種詞。
a. 使用 512*768 這樣的縱向比例的圖。
b. 在提升詞中加入諸如“牛仔褲”此類的對下半身的描述詞
另外,在遇到問題時,我們可以打開控制臺,看一下控制臺的報錯,很多小的問題,我們都可以通過這里發現并解決。
例如在我初次使用 controlnet 時,發現控制臺報出來這樣類似下載失敗的錯誤,于是我手動下載控制臺中的文件到指定的文件夾就解決了這個小問題。
諸如此類的問題還有很多,善用控制臺可以解決大部分的小問題。
如今,我們經常可以看到有關“學習 AI,否則你就落后了”的文章和帖子,但是我認為這種說法并不完全正確。客觀上說,chatgpt、mj 等 AI 工具已經被非常廣泛地運用,并且也確確實實地帶來了生產力的提高,但是我們并不需要像設計師必須熟練掌握 PS 一樣精通 AI。相反,我們只需要保持好奇心,嘗試一下,摸索一下,享受這個過程,無須把它當成考試或者培訓。我們不應該被“不學 AI,馬上就會被替代”的焦慮所困擾。當前,AI 繪畫等技術也只是出現了不到 1 年的新事物,沒有所謂的專家,只有在互聯網上扮演專家的人,包括筆者在內,也只不過是 AI 繪畫領域的小學生而已。科技日新月異,自去年 AI 繪畫技術初現端倪以來,其成果已然大不相同,今日之 AI 繪畫已愈發強大。
因此,我們只需要保持興趣即可,而非糾結于學習哪種技術、安裝哪些插件。在這個新領域里,我們應懷抱好奇心,共同享受探索的樂趣,基于此,若能為生活、工作帶來生產力的提升,那便是錦上添花。
愿諸君玩得開心。
復制本文鏈接 文章為作者獨立觀點不代表優設網立場,未經允許不得轉載。
發評論!每天贏獎品
點擊 登錄 后,在評論區留言,系統會隨機派送獎品
2012年成立至今,是國內備受歡迎的設計師平臺,提供獎品贊助 聯系我們
標志設計標準教程
已累計誕生 729 位幸運星
發表評論 為下方 6 條評論點贊,解鎖好運彩蛋
↓ 下方為您推薦了一些精彩有趣的文章熱評 ↓