學習記錄還原:在本次實驗中,我基于 Stable Diffusion v1.5模型,通過一系列優化方法提升生成圖像的質量,最終實現了圖像質量的顯著提升。實驗從基礎的 Img2Img 技術入手,逐步推進到參數微調、DreamShaper 模型和 ControlNet 的應用,最終優化了圖像細節和結構一致性。以下是實驗的詳細過程。
兩效果圖:
1. 實驗環境
為了確保實驗可復現,以下是實驗所用的環境配置:
-
操作系統:Windows 10
-
GPU:NVIDIA GeForce RTX 4070(8GB 顯存)
-
Python 版本:3.11
-
深度學習框架:PyTorch 1.12.1
-
核心庫:
-
diffusers==0.29.2
-
transformers==4.44.2
-
opencv-python==4.10.0.84
-
-
模型:
-
基礎模型:
runwayml/stable-diffusion-v1-5
-
優化模型:
Lykon/dreamshaper-8
-
ControlNet:
lllyasviel/sd-controlnet-canny
-
2. 優化一:Img2Img 技術

優化動機與原因
基礎的 Stable Diffusion 模型在生成圖像時,細節和結構一致性較弱,尤其是在服裝生成任務中,難以保留原始結構。通過引入 Img2Img 技術,可以在生成過程中保留更多原始圖像的結構信息,提升一致性。
優化思路
以原始服裝圖像作為輸入,結合文本提示,生成與原圖結構相似但具有新細節的圖像。通過調整 strength
參數,平衡原圖結構保留與生成創意之間的關系。
優化過程
-
代碼實現:
from diffusers import StableDiffusionImg2ImgPipeline pipe = StableDiffusionImg2ImgPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16) init_image = Image.open(image_path).convert("RGB") image = pipe(prompt, image=init_image, strength=0.75, num_inference_steps=50).images[0]
-
參數調整:設置
strength=0.75
,使生成圖像在保留原圖結構的基礎上,融入提示詞描述的細節。
結果
Img2Img 技術有效提升了圖像的結構一致性,但細節表現仍然不足,整體質量有待提高。
3. 優化二:微調 Stable Diffusion 參數
優化動機與原因
盡管 Img2Img 改善了結構一致性,但生成的圖像細節和感知質量仍不理想。微調 Stable Diffusion 的生成參數可以進一步優化細節表現,提升圖像的清晰度和真實感。
優化思路
通過增強提示詞的描述性和調整生成參數(如 num_inference_steps
和 guidance_scale
),提高圖像的細節質量和與提示詞的匹配度。
優化過程
-
提示詞增強:
enhanced_prompt = f"{prompt}, highly detailed, realistic textures, sharp edges"
-
參數調整:
image = pipe(enhanced_prompt, negative_prompt="blurry, low resolution", num_inference_steps=75, guidance_scale=10.0).images[0]
-
增加
num_inference_steps
至 75,提升生成過程的精細度。 -
設置
guidance_scale=10.0
,增強提示詞對生成結果的引導作用。
-
結果
參數微調后,圖像細節和清晰度有所提升,但結構一致性仍然有限,整體效果仍未達到最佳。
4. 優化三:DreamShaper 模型
優化動機與原因
基礎模型在細節和美感上的表現存在局限,尤其在服裝生成中難以生成高質量的紋理和人物細節。DreamShaper 模型(Lykon/dreamshaper-8
)在細節生成上的表現優異,是進一步優化的選擇。
優化思路
替換基礎模型為 DreamShaper,結合優化后的提示詞和參數設置,提升圖像的細節表現和視覺美感。
優化過程
-
模型加載:
from diffusers import StableDiffusionPipeline model_id = "Lykon/dreamshaper-8" pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16)
-
圖像生成:
image = pipe(enhanced_prompt, negative_prompt="blurry, low resolution", num_inference_steps=50, guidance_scale=7.5).images[0]
結果
DreamShaper 模型顯著提升了圖像的細節表現和感知質量,生成的服裝紋理更加真實,但結構精確性仍需改進。
5. 優化四:SD v1.5 + ControlNet
優化動機與原因
盡管 DreamShaper 在細節上表現出色,但服裝的輪廓和結構一致性仍不完美。ControlNet 通過引入邊緣圖約束,能夠有效提升生成圖像的結構精確性,特別適用于服裝生成任務。
優化思路
使用 Canny 邊緣檢測生成控制圖像,結合 Stable Diffusion v1.5 和 ControlNet,約束生成過程以保留服裝的輪廓和結構。
優化過程
-
ControlNet 集成:
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel controlnet = ControlNetModel.from_pretrained("lllyasviel/sd-controlnet-canny", torch_dtype=torch.float16) pipe = StableDiffusionControlNetPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", controlnet=controlnet, torch_dtype=torch.float16)
-
邊緣圖生成與圖像生成:
canny_image = cv2.Canny(cv2.imread(image_path, cv2.IMREAD_GRAYSCALE), 100, 200) image = pipe(prompt, image=canny_image, controlnet_conditioning_scale=1.0).images[0]
結果
ControlNet 的引入顯著提升了圖像的結構一致性和細節質量,服裝輪廓更加精確,整體效果最佳。
?
DreamShaper
?
6. 總結
通過四次優化,我逐步提升了 Stable Diffusion 生成圖像的質量:
-
Img2Img:奠定了結構一致性的基礎,但細節不足。
-
參數微調:增強了細節和清晰度,但結構仍需優化。
-
DreamShaper:顯著提升了細節和美感,表現優于基礎模型。
-
SD v1.5 + ControlNet:通過邊緣約束,實現了結構與細節的全面提升。
最終,ControlNet 在服裝生成任務中展現了最優效果,兼顧結構精確性和感知質量。
基礎模型:
深度學習項目記錄·Stable Diffusion從零搭建、復現筆記-CSDN博客
深度仔細記錄:
基于 Stable Diffusion 的圖像生成優化與評估:從 SDXL 到 ControlNet 的探索——項目學習記錄-CSDN博客強相關:
Stable Diffusion+Pyqt5: 實現圖像生成與管理界面(帶保存 + 歷史記錄 + 刪除功能)——我的實驗記錄(結尾附系統效果圖)-CSDN博客