Stable Diffusion + Contronet,調參實現LPIPS最優(帶生成效果+指標對比)——項目學習記錄

目錄

前言?

一、數據集:圖像+文本,部分選取于DeepFashion

二、優化一,img2img

?三、優化二,微調sd參數

?四、優化三,dreamshaper優化

?五、優化四,sdv1.5+contronet

六、問題探索歷程

1. 從 SDXL 到輕量化模型:模型選擇的權衡

2. LoRA 下載受阻:轉向基礎模型優化

3. ControlNet 約束:提升結構一致性

4. 指標評估:文件名匹配與全黑圖處理

5. SSIM 計算錯誤:尺寸與數據范圍問題

6. LPIPS 歸一化調整

結果分析

總結

后續優化想法、可參考思路:

1. LoRA 微調

2. 超分辨率后處理

3. 自適應提示詞

4. 損失函數優化

5. 多模型融合


由于sd v1.5生成效果一般,主要在人物面部、手部等細節上很差,于是我尋求各種優化,今天最成功的是加入contronet,這的確是一個妥妥提升質量的思路,我用的約束是輪廓圖,想復現的思路除這個外,最近幾天在基于 Stable Diffusion v1.5模型做優化,旨在優化圖像生成質量,并通過 PSNR、SSIM 和 LPIPS 等指標對比評估不同優化方案的效果。在優化過程中,我遇到了一些技術問題,涉及模型選擇、代碼錯誤、指標計算等。以下是優化過程的詳細記錄,重點展示了技術問題、解決方案和實驗結果。
? Stable Diffusion v1.5:不換模型優化人體細節的實用技巧-CSDN博客

Stable Diffusion+Pyqt5: 實現圖像生成與管理界面(帶保存 + 歷史記錄 + 刪除功能)——我的實驗記錄(結尾附系統效果圖)-CSDN博客
基于前面搭建的sd v1.5,深度學習項目記錄·Stable Diffusion從零搭建、復現筆記-CSDN博客:

前言?

最近圍繞stable diffusion v1.5做了一系列實驗,尋求各種優化,前面發的一篇是優化思路,這一篇是sd v1.5 + contronet(我采用的是邊緣圖,先安裝opencv:pip install opencv-python依賴 cv2 來生成 Canny 邊緣圖),忙活幾天才徹底完成各優化模型評價指標的測定,最終三個指標均有所提升。模型基于sd v1.5微調,接下來是項目思路的還原:

一、數據集:圖像+文本,部分選取于DeepFashion

實驗環境:python3.11 Pytorch12.1? ?

?GPU:RTX4070? ?

二、優化一,img2img


基于原圖的風格統一或提示詞約束(添加細節提示)實現對生成圖像再優化,上一篇提到了Strength參數作用,主要是控制實際迭代步數。

上一篇鏈接:Stable Diffusion+Pyqt5: 實現圖像生成與管理界面(帶保存 + 歷史記錄 + 刪除功能)——我的實驗記錄(結尾附系統效果圖)-CSDN博客

?文本描述:? "MEN-Denim-id_00000089-44_7_additional.jpg": "This man is wearing a short-sleeve shirt with pure color patterns. The shirt is with cotton fabric and its neckline is lapel. The trousers this man wears is of long length. The trousers are with cotton fabric and solid color patterns.",
效果

?三、優化二,微調sd參數


optimized,主要是優化迭代步數和引導強度,附加提示詞優化

效果如下:

?

?、優化三,dreamshaper優化

(重新加載模型速度最慢、耗時久)


成功生成:

效果(可能是hugging face基礎模型的原因,風格化嚴重):

?五、優化四,sdv1.5+contronet

?邊緣圖約束+提示詞優化


需先下載庫:


?速度比前面慢接近十倍:(與原圖保持輪廓一致)


六、問題探索歷程

?

1. 從 SDXL 到輕量化模型:模型選擇的權衡

技術問題

最初,我計劃使用 Stable Diffusion XL (SDXL),因為它在圖像質量上表現優異。然而,由于 SDXL 模型體積較大(約 10GB)且對硬件要求高,下載困難并且運行復雜,最終選擇了更輕量的模型。

解決方法

轉向使用 runwayml/stable-diffusion-v1-5(約 4GB),該模型社區支持廣泛,且生成質量適中。為了提升生成效果,引入了 LoRA 微調技術。

技術細節

  • LoRA 微調:使用 LoRA 技術增強模型生成能力,通過加載小型權重文件(幾十 MB)進行微調。

  • 代碼實現

    from diffusers import StableDiffusionPipeline
    pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16)
    pipe.load_lora_weights(r"D:\YAN\pythonProject\diffusion\lora\fashion-detail-lora.safetensors")
    
  • 參數調整:設置 num_inference_steps=50guidance_scale=7.5 來平衡生成質量和速度。


2. LoRA 下載受阻:轉向基礎模型優化

技術問題

由于網絡限制,我無法順利從 Civitai 或 Hugging Face 下載 LoRA 權重文件。

解決方法

放棄使用 LoRA,轉向通過提示詞工程和參數調整優化 runwayml/stable-diffusion-v1-5 的生成效果,并嘗試了其他輕量模型,如 Lykon/dreamshaper-8

技術細節

  • 提示詞優化:加入更具體的描述,如 highly detailed, realistic textures,并使用負面提示排除低質量元素。

  • 代碼調整

    image = pipe(prompt, negative_prompt="blurry, low resolution", num_inference_steps=75, guidance_scale=10.0).images[0]
    
  • DreamShaper 模型:使用 Lykon/dreamshaper-8,并手動下載模型文件避免網絡問題:

    model_id = r"D:\YAN\pythonProject\diffusion\models\dreamshaper-8"
    pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16)
    

3. ControlNet 約束:提升結構一致性

技術問題

盡管生成圖像有了提升,但服裝結構和輪廓依然不夠精確。我希望通過 ControlNet 強化生成圖像的結構一致性。

解決方法

集成了 lllyasviel/sd-controlnet-canny 模型,利用 Canny 邊緣圖作為輸入,以此加強生成圖像的結構保持性。

技術細節

  • 依賴安裝:安裝 opencv-python 處理邊緣圖:

    pip install opencv-python
    
  • 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]
    

4. 指標評估:文件名匹配與全黑圖處理

技術問題

計算 PSNR、SSIM 和 LPIPS 時,出現了文件名匹配失敗的問題(圖像格式不一致)以及部分圖像為全黑圖,導致計算結果偏差。

解決方法

調整文件名匹配邏輯,去除擴展名匹配,同時加入全黑圖檢測,跳過不合適的圖像。

技術細節

  • 文件名匹配

    base_name = os.path.splitext(gen_file)[0]
    original_file = original_files.get(base_name)
    
  • 全黑圖檢測

    def is_black_image(img):return np.all(img == 0)
    if is_black_image(generated_img):print(f"  跳過全黑圖: {gen_file}")continue
    

5. SSIM 計算錯誤:尺寸與數據范圍問題

技術問題

SSIM 計算報錯,主要是由于圖像尺寸過小或數據范圍不正確。

解決方法

添加尺寸檢查并為 SSIM 指定 data_range=1.0

技術細節

  • 尺寸檢查

    h, w = original_img.shape[:2]
    if h < 7 or w < 7:raise ValueError(f"圖像尺寸 {h}x{w} 太小,SSIM 需要至少 7x7")
    
  • SSIM 參數調整

    ssim_value = ssim(original, generated, channel_axis=2, win_size=min(7, min(h, w)), data_range=1.0)
    

6. LPIPS 歸一化調整

技術問題

LPIPS 計算結果異常,原因是圖像數據范圍不符合期望。

解決方法

將圖像從 [0, 1] 轉換為 [-1, 1],以適應 LPIPS 計算。

技術細節

original_tensor = torch.from_numpy((original * 2 - 1).transpose(2, 0, 1)).float().unsqueeze(0).to('cuda')
generated_tensor = torch.from_numpy((generated * 2 - 1).transpose(2, 0, 1)).float().unsqueeze(0).to('cuda')
lpips_value = lpips_model(original_tensor, generated_tensor).item()

最終結果與分析

在優化和調參后,我生成了多個模型的圖像并計算了對應的 PSNR、SSIM 和 LPIPS 指標。以下是最終結果:

結果分析

  • PSNRgenerated_pic_controlnet 的 8.44 最高,表示圖像與原圖差異最小

  • SSIMgenerated_pic_controlnet 的 0.6434 最高,結構相似性最優,驗證了 ControlNet 對結構的一致性控制能力。

  • LPIPSgenerated_pic_controlnet 的 0.2713 最低,感知相似性最佳,符合人類視覺評價


總結

通過從 SDXL 的放棄,到 LoRA 的失敗,再到 ControlNet 的成功集成,我逐步優化了圖像生成質量。最終,ControlNet 在所有指標上均表現優異,特別是在服裝生成任務上。

后續優化想法、可參考思路:

在 ControlNet 加入邊緣圖優化后,接下來可以考慮以下幾個改進方向,以進一步提升圖像生成質量和效果:


1. LoRA 微調

  • 目標:若網絡問題得到解決,可以引入服裝特定的 LoRA 微調,以進一步優化細節(如紋理、材質),進而提升 SSIM 和 LPIPS 指標。

  • 實現:下載和加載特定于服裝領域的 LoRA 權重文件,微調基礎模型,提升生成圖像的細節表現。


2. 超分辨率后處理

  • 目標:通過超分辨率技術(如 ESRGAN 或 Real-ESRGAN)對生成的圖像進行后處理,提高 PSNR 和圖像清晰度。

  • 實現:使用超分辨率網絡對生成的低分辨率圖像進行放大和細節恢復,從而提高圖像質量,減少模糊現象。


3. 自適應提示詞

  • 目標:基于原始圖像的特征(如顏色、風格)動態生成提示詞,減少生成偏差,提升圖像與提示詞的匹配度和感知一致性。

  • 實現:使用圖像分析模型提取圖像特征,生成與原圖風格和元素一致的提示詞,以便引導模型生成更符合預期的圖像。


4. 損失函數優化

  • 目標:在訓練或微調中加入感知損失(如 LPIPS),使生成圖像更貼近人類視覺評價,提升圖像質量的感知效果。

  • 實現:在訓練過程中加入感知損失函數,優化模型輸出,使生成圖像與目標圖像在視覺上更為相似。


5. 多模型融合

  • 目標:結合 DreamShaper 和 ControlNet 等模型的優勢,通過模型集成提升圖像生成的綜合質量。

  • 實現:在生成過程中融合多個模型的輸出,采用加權平均或其他融合策略,以平衡各模型的優缺點,生成更加細膩和多樣化的圖像。

這些優化方法為 ControlNet 和 Stable Diffusion 圖像生成模型提供了更多的潛力和改進空間。通過在細節、分辨率、提示詞自適應和模型融合等方面進行優化,能夠進一步提升服裝生成任務的質量和穩定性,探索更多可能性,有需要可以從以上五點做嘗試。

本篇基于sd v1.5:
深度學習項目記錄·Stable Diffusion從零搭建、復現筆記-CSDN博客
優化后續強相關:
? Stable Diffusion v1.5:不換模型優化人體細節的實用技巧-CSDN博客
Stable Diffusion+Pyqt5: 實現圖像生成與管理界面(帶保存 + 歷史記錄 + 刪除功能)——我的實驗記錄(結尾附系統效果圖)-CSDN博客

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

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

相關文章

SQL 不走索引的常見情況

在 SQL 查詢中&#xff0c;即使表上有索引&#xff0c;某些情況下數據庫優化器也可能決定不使用索引。以下是常見的不走索引的情況&#xff1a; 1. 使用否定操作符 NOT IN ! 或 <> NOT EXISTS NOT LIKE 2. 對索引列使用函數或運算 -- 不走索引 SELECT * FROM user…

數據庫主從延遲全解析:原因、影響與解決之道

目錄 一、引言&#xff1a;理解數據庫主從架構 二、數據庫主從延遲的定義與測量 2.1 主從延遲的技術定義 2.2 如何測量主從延遲 2.3 主從延遲對系統的影響 三、主從延遲的常見原因分析 3.1 網絡延遲因素 3.1.1 網絡質量與帶寬限制 3.1.2 地理位置分布造成的延遲 3.2 …

分治-歸并系列一>翻轉對

目錄 題目&#xff1a;解析&#xff1a;策略一&#xff1a; 代碼&#xff1a;策略二&#xff1a; 代碼&#xff1a; 題目&#xff1a; 鏈接: link 這題和逆序對區別點就是&#xff0c;要找到前一個元素是后一個元素的2倍 先找到目標值再&#xff0c;繼續堆排序 解析&#xff1…

從0到1打造一套適合自己接單的腳手架05自動化創建表

上一篇我們是手動創建的表&#xff0c;感覺不方便&#xff0c;后續如果要做成產品在部署的時候一個個的創建表太麻煩了&#xff0c;我們讓ai來自動創建表&#xff0c;輸入如下提示詞 現在這種單獨去navicate執行也不方便&#xff0c;我希望是有一個目錄里存放的表結構的語句&a…

minio改成https+域名訪問

思路有兩個&#xff1a; 方式一&#xff1a;通過nginx反向代理&#xff0c;將https配置在nginx&#xff0c;內部的MinIO還是使用HTTP&#xff1b;方式二&#xff1a;MinIO服務端直接配置成HTTPS&#xff1b; 注意&#xff1a; 私鑰需要命名為&#xff1a;private.key 公鑰需要…

VS Code構建C/C++開發環境(Windows with MinGW and CMake)

文章目錄 目的編譯工具鏈基礎開發與調試基于CMake開發與調試關于settings.json總結 目的 在Windows上進行C/C開發目前最最常用的IDE就是微軟的 Visual Studio &#xff0c;只是對我來說早些年的VS實在是太卡了&#xff0c;留下了不好的印象。后來沒怎么用過&#xff0c;現在下…

一組可能的機器學習問題列表

線性回歸與多項式擬合的關系最小二乘法在機器學習中的應用梯度下降是如何實現的貝葉斯分類器的應用場景高斯分布與判定在哪里用到模型的評估有哪些參數誤差中的偏差和方差定義訓練集分組的快捷方式如何度量模型性能查準率查全率的定義roc,aux的含義正則化是什么意思k均值用來解…

linux下io操作詳細解析

在 Linux 系統下&#xff0c;IO&#xff08;輸入/輸出&#xff09;操作是程序與外部設備&#xff08;如文件、網絡等&#xff09;交互的重要方式。Linux 提供了豐富的系統調用和庫函數來支持各種 IO 操作。以下是對 Linux 下 IO 操作的詳細解析&#xff0c;包括文件 IO、網絡 I…

wsl2+ubuntu22.04安裝blender教程(詳細教程)

本章教程介紹,如何在Windows操作系統上通過wsl2+ubuntu安裝blender并運行教程。Blender 是一款免費、開源的 ??3D 創作套件??,廣泛應用于建模、動畫、渲染、視頻編輯、特效制作等領域。它由全球開發者社區共同維護,支持跨平臺(Windows、macOS、Linux),功能強大且完全…

目標檢測YOLO實戰應用案例100講- 基于卷積神經網絡的小目標檢測算法研究與應用

目錄 知識儲備 基于改進YOLOv5的小目標檢測算法 一、環境配置(Python 3.8+) 二、核心代碼實現 1. 改進模型定義(models/yolov5s_tiny.py ) 2. 小目標數據增強(datasets/tiny_aug.py ) 3. 訓練腳本(train.py ) 三、關鍵改進點說明 四、實驗配置建議 前言 傳統…

智能DNS解析:解決高防IP地區訪問異常的實戰指南

摘要&#xff1a;針對高防IP在部分地區無法訪問的問題&#xff0c;本文設計基于智能DNS的流量調度方案&#xff0c;提供GeoDNS配置與故障切換代碼示例。 一、問題背景 運營商誤攔截或線路波動可能導致高防IP在福建、江蘇等地訪問異常。傳統切換方案成本高&#xff0c;智能DNS可…

根據 PID 找到對應的 Docker 容器

引言 在日常運維與調試過程中&#xff0c;我們常常需要查找某個進程所屬的 Docker 容器。當系統出現問題或資源異常時&#xff0c;根據進程的 PID 找到其所屬容器可以幫助我們迅速定位問題。本文將介紹如何利用 Linux 的 cgroup 機制&#xff0c;以及 Docker 提供的工具來完成…

NO.88十六屆藍橋杯備戰|動態規劃-多重背包|擺花(C++)

多重背包 多重背包問題有兩種解法&#xff1a; 按照背包問題的常規分析?式&#xff0c;仿照完全背包&#xff0c;第三維枚舉使?的個數&#xff1b;利??進制可以表??定范圍內整數的性質&#xff0c;轉化成01 背包問題。 ?建議&#xff1a;并不是所有的多重背包問題都能…

【遠程工具】0 std::process::Command 介紹

std::process::Command 是 Rust 標準庫中用于創建和配置子進程的主要類型。它允許你啟動新的進程、設置其參數和環境變量、重定向輸入/輸出等。 基本用法 use std::process::Command;let output Command::new("echo").arg("Hello, world!").output().ex…

【圖書管理系統】深入解析基于 MyBatis 數據持久化操作:全棧開發圖書管理系統獲取圖書列表接口(后端:計算圖書頁數、查詢當前頁展示的書籍)

圖書列表 實現服務器代碼(計算圖書總數量查詢當前頁需要展示的書籍) 后端響應時&#xff0c;需要響應給前端的數據 records&#xff1a;第 pageNum 頁要展示的圖書有哪些&#xff08;存儲到List集合中&#xff09;total&#xff1a;計算一共有多少本書&#xff08;用于告訴前…

如何在idea中快速搭建一個Spring Boot項目?

文章目錄 前言1、創建項目名稱2、勾選需要的依賴3、在setting中檢查maven4、編寫數據源5、開啟熱啟動&#xff08;熱部署&#xff09;結語 前言 Spring Boot 憑借其便捷的開發特性&#xff0c;極大提升了開發效率&#xff0c;為 Java 開發工作帶來諸多便利。許多大伙伴希望快速…

制作前的關鍵籌備:考試考核系統之核心要點

明確系統使用目的? 制作考試考核系統前&#xff0c;企業需明確系統使用目的&#xff0c;這是開發基石&#xff0c;不同目的決定系統功能特性。用于員工培訓考核時&#xff0c;系統要與培訓內容結合&#xff0c;能生成相應考題&#xff0c;檢驗員工知識掌握程度&#xff0c;具備…

Springboot把外部jar包打包進最終的jar包,并實現上傳服務器

1、創建lib目錄&#xff0c;把jar包放進這個目錄下&#xff0c;然后標記lib目錄為“資源根路徑”&#xff08;鼠標右鍵lib目錄->將目錄標記為->資源根路徑。之后lib文件夾會有如下的圖標變化&#xff09; 文件結構如下&#xff1a; 2、pom文件添加依賴 <dependency…

內容中臺的核心架構是什么?

數據中樞與服務API架構 在內容中臺的核心架構中&#xff0c;數據中樞作為基礎層&#xff0c;通過統一的數據模型與標準化接口&#xff0c;實現多源內容的集中存儲與治理。其核心能力體現在對結構化與非結構化數據的清洗、分類及跨系統同步&#xff0c;例如整合企業內部的CRM、…

Light RPC:一款輕量高效的Java RPC框架實踐指南

Light RPC&#xff1a;一款輕量高效的Java RPC框架實踐指南 一、框架簡介二、快速入門1. 環境準備2. 服務端配置2.1 添加依賴2.2 YAML配置2.3 接口與實現 3. 客戶端配置3.1 添加依賴3.2 YAML配置3.3 客戶端調用 三、核心設計解析四、適用場景與優勢對比五、總結 一、框架簡介 …