發佈日期:

ControlNet: 放大您的圖像控制能力

想要精確控制AI生成圖像?ControlNet是Stable Diffusion用戶必學的進階技巧。本文將深入介紹ControlNet的使用方法、常見模型與實際應用案例。

ControlNet的核心功能

在AI圖像生成領域中,Stable Diffusion已經成為一個革命性的技術。然而,如何更精確地控制生成過程一直是一個挑戰。這就是ControlNet發揮作用的地方,它為Stable Diffusion帶來了前所未有的條件控制能力。

ControlNet是一個基於深度學習和神經網路的強大工具,它通過多種方式增強了Stable Diffusion的圖像處理能力:

  1. 姿勢控制:利用OpenPose模型,ControlNet能夠精確控制生成人物的姿勢。
  2. 線稿生成:通過Canny Edge檢測,可以從簡單的線稿生成複雜的圖像。
  3. 深度圖控制:使用Depth模型,ControlNet能夠理解並重現圖像的三維結構。
  4. 語義分割:Segmentation模型允許對圖像進行精細的區域控制。
  5. Normal Map應用:這種技術能夠增強圖像的立體感和細節。

ControlNet的應用場景

ControlNet在多個領域展現出強大的應用潛力:

  1. 人物姿勢生成:精確控制人物的姿態和動作。
  2. 風格轉換:保持原始圖像結構的同時,應用新的藝術風格。
  3. 場景重建:根據簡單的輪廓或深度信息重建完整場景。
  4. 圖像編輯:對現有圖像進行精細的修改和增強。

使用技巧與優化

為了充分發揮ControlNet的潛力,以下是一些關鍵的使用技巧:

  1. 提示詞優化:精心設計的提示詞可以大大提高生成效果。
  2. 參數調整:不同的控制強度和去噪設置會產生不同的結果。
  3. 模型選擇:根據具體需求選擇最合適的ControlNet模型。
  4. 多模型組合:結合使用多個ControlNet模型可以實現更複雜的效果。

相比傳統的Stable Diffusion,ControlNet提供了更精確的控制和更多樣化的創作可能性。無論是專業設計師還是AI藝術愛好者,都能從這個強大的工具中受益。

如何使用ControlNet 

ControlNet 不僅僅局限於模型控制,它還包含專為 Stable Diffusion Web UI 設計的擴展版本,使操作更加簡便。

我們在stable diffusion webui可以安裝名為 sd-webui-controlnet 的擴展套件,這是一個開源且高度可靠的工具。該工具在 GitHub 上擁有廣泛的追隨者,並且提供多樣的功能支援,使 Stable Diffusion 的操作變得更加靈活。

通過將其他條件集成到 Stable Diffusion 中來對模型施加控制。該技術提供了對生成圖像的更高精確度的控制,能夠在保留圖像關鍵特徵的同時,避免偏離初始設置。為圖像生成社群提供了一個強大的替代方案,讓使用者可以透過圖像的控制,產生更多符合需求的視覺效果,而不僅僅依賴於文字描述的提示。

在stable diffusion webui安裝後的介面如下

ControlNet的圖像控制範例

透過這個框架,ControlNet 對圖像施加了必要的約束,避免生成圖像與原始提取的特徵(如姿勢、構圖等)有重大偏差。這使得使用者能夠基於這些特徵進行更精確的圖像生成,並在保持圖像一致性的同時實現特定的需求。

  • 姿勢與構圖控制: 可生成具有從參考圖像派生的預定義姿勢的圖像或簡筆劃,確保生成的圖像與預期姿勢一致。
  • 插圖樣式和紋理修改: 允許使用者更改插圖的樣式和紋理,以創造多樣化的視覺輸出,滿足不同風格的需求。
  • 線條圖中的顏色增強: ControlNet 支援為線條圖添加顏色,增強視覺吸引力與真實感,使簡單的線條作品能夠具備更豐富的視覺層次。

安裝與使用

此工具可以從 GitHub 獲得,開發者 Mikubill 提供了詳細的安裝說明以及更新維護。

GitHub 頁面: sd-webui-controlnet

要在Stable Diffusion Web UI安裝此插件,可以到 Extension Tab ,在 Install from URL 輸入 https://github.com/Mikubill/sd-webui-controlnet.git 安裝 

您可以在此處找到所有模型的下載連結:https://github.com/Mikubill/sd-webui-controlnet/wiki/Model-download

大型模型可至這邊下載: https://huggingface.co/lllyasviel/ControlNet-v1-1/tree/main

然後把模型放在stable-diffusion-webui-master\models\ControlNet資料夾下面

這邊有模型分類的介紹: https://ai-summoner.tw/7612/what-is-controlnet1-1/

設定參數介紹

控制模式包括平衡模式、已提示詞為主、以ControlNet為主

預處理(Preprocessor)參數的作用主要是幫助用戶在生成圖像時,根據不同的需求和參考圖像進行調整和引導。這部分你選擇的要有相對應的模型(請參考上面的模型下載部分),才會能夠生效,關於每一個模型或者預處理的方式介紹請參考上方AI召喚師的文章。

  1. Instruct Pix2Pix (ip2p) 模型 (control_vlle_sd15_ip2p.pth):此模型專注於指令式變換,能夠根據用戶提供的提示詞進行圖像的轉換和變形。例如,使用者可以輸入指令將某種場景轉變為另一種場景,這使得生成的圖像更加符合用戶的具體需求
  2. Shuffle 模型 (control_vlle_sd15.shuffle.pth):Shuffle 模型則更注重於風格轉換,能夠將輸入圖像轉換為具有特定風格的圖像,如卡通風格或水彩風格。這個模型強調細節和紋理的處理,適合用於創造具有藝術感的圖像
  3. Tile 模型control_v11f1e_sd15_tile.pth):主要用於圖像的放大和細節增強。它能夠在有限的像素基礎上對圖像進行分塊擴散處理,生成與原圖相似且極為清晰的圖片,特別適合於對單一圖片進行精修和美化
  4. Depth 模型control_v11f1p_sd15_depth.pth):此模型專注於景深分析,能夠在生成圖片時保持與原圖相同的景深效果,常用於固定人物外型和背景的穩定性
  5.  Canny 模型control_v11p_sd15_canny.pth):主要用於邊緣檢測,能夠精確地識別圖像中的邊緣,適合於需要清晰邊界的圖像生成任務
  6. Inpaint 模型control_v11p_sd15_inpaint.pth):此模型用於重繪和修圖,可以針對特定範圍進行修補,與內建的 inpaint 功能相似,但在使用上更加方便且效果更佳
  7. Lineart 模型control_v11p_sd15_lineart.pth):專門用於處理線條藝術,能夠將圖像轉換為清晰的線條圖,適合於插畫和漫畫風格的生成
  8.  MLSD 模型control_v11p_sd15_mlsd.pth):是一個專門用來描繪建築物的模型。此模型用於多邊形線檢測,能夠識別圖像中的多邊形結構,適合於需要精確形狀識別的任務
  9.  Normal 模型(control_v11p_sd15_normalbae.pth):利用法線圖來分析和控制生成圖像的紋理,這有助於在生成過程中保持真實感和細節
  10.  Openpose 模型control_v11p_sd15_openpose.pth):專注於人體姿勢識別,能夠根據提供的人體骨架信息生成相應的圖像,適合於需要精確人體動作的場景
  11. Scribble 模型control_v11p_sd15_scribble.pth):此模型支持草圖轉換,能夠根據簡單的草圖生成詳細的圖像,適合於草圖創作和概念設計
  12. Segmentation 模型control_v11p_sd15_seg.pth):用於圖像分割,能夠將圖像中的不同部分進行分離和標記,適合於需要區分不同區域的圖像生成任務
  13. SoftEdge 模型 (control_v11p_sd15_softedge.pth):專注於將圖像轉換為柔和的邊緣風格,相較於其他模型更注重圖像的柔和度和自然度,通常用於生成風景、人物等柔和風格的圖片。它是 ControlNet 1.0 版本中 HED 模型的升級版,有四種預處理器可供選擇,按照結果品質排序分別是 SoftEdge_HED、SoftEdge_PIDI、SoftEdge_HED_safe、SoftEdge_PIDI_safe。相對於傳統的邊緣模型(如 Canny),SoftEdge 模型更注重保留圖像的細節,提取的線條更精細,細節更豐富。
  14. Lineart Anime 模型 (control_v11p_sd15s2_lineart_anime.pth):此模型專門用於生成動漫風格的線稿圖像,能夠將圖像轉換為清晰的線條圖,適合於插畫和漫畫風格的生成。它是 ControlNet 1.1 版本中新增的模型,在 ControlNet 1.0 的 Lineart 模型基礎上進行了優化和改進,使生成的線稿更加符合動漫風格。
發佈日期:

YOLOv8模型訓練:深入解析性能指標與優化策略

在物件偵測領域,YOLOv8作為最新一代的深度學習模型,以其卓越的性能和效率贏得了廣泛關注。本文將深入探討YOLOv8的模型訓練過程,解析關鍵性能指標,並分享優化策略,幫助您更好地掌握這一強大工具。

遷移學習:YOLOv8模型訓練的捷徑

在開始YOLOv8模型訓練之前,我們首先需要了解遷移學習的重要性。遷移學習允許我們利用預訓練模型的知識,大大縮短訓練時間並提高模型性能。對於YOLOv8,我們可以從官方提供的預訓練模型開始,根據自己的數據集進行微調。

from ultralytics import YOLO

# 載入預訓練的YOLOv8模型
model = YOLO('yolov8n.pt')

# 使用自定義數據集進行訓練
results = model.train(data='custom_dataset.yaml', epochs=100, imgsz=640)

關鍵指標:解讀YOLOv8的性能

在物件偵測任務中,幾個關鍵指標對於評估模型性能至關重要:

  1. IoU (Intersection over Union)
    IoU衡量預測邊界框與真實邊界框的重疊程度,是評估物件偵測準確性的基礎指標。
  2. mAP (mean Average Precision)
    mAP綜合考慮了精確率和召回率,是物件偵測模型整體性能的重要指標。
  3. 精確率 (Precision) 和召回率 (Recall)
    這兩個指標分別反映了模型預測的準確性和完整性,是評估YOLOv8性能的核心指標。

Tensorboard:視覺化YOLOv8訓練過程

為了更直觀地監控YOLOv8模型的訓練過程,我們可以使用Tensorboard這一強大的視覺化工具。Tensorboard能夠實時展示訓練損失、驗證指標等關鍵數據,幫助我們及時調整訓練策略。

# 在訓練命令中添加Tensorboard支持
results = model.train(data='custom_dataset.yaml', epochs=100, imgsz=640, project='YOLOv8_training', name='experiment1')

訓練自定義的YOLOv8模型

以下為官網的一個範例程式

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.yaml')  # build a new model from YAML
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)
model = YOLO('yolov8n.yaml').load('yolov8n.pt')  # build from YAML and transfer weights

# Train the model
results = model.train(data='coco128.yaml', epochs=100, imgsz=640)

範例中三種載入方式的比較

  • model = YOLO(‘yolov8n.yaml’):
    這段代碼使用給定的 YAML 配置文件構建一個新的 YOLO 模型。 YAML 配置文件包含了有關模型架構、層設置、超參數等的信息。通過提供 YAML 文件的路徑,可以創建一個全新的 YOLO 模型。(yaml檔案位於: ultralytics\cfg\models\v8)
  • model = YOLO(‘yolov8n.pt’):
    這段代碼加載一個預訓練的 YOLO 模型,該模型以 PyTorch 的 .pt 文件格式保存。預訓練模型已經在某個數據集上進行了訓練,並且包含了在該數據集上學到的權重。這個過程稱為遷移學習,它可以加快在新數據集上訓練模型的收斂速度,同時保留之前任務的特徵提取能力。
  • model = YOLO(‘yolov8n.yaml’).load(‘yolov8n.pt’):
    這段代碼首先使用給定的 YAML 配置文件構建一個 YOLO 模型,然後從預訓練的 .pt 文件中加載權重,將權重遷移到新構建的模型中。這使您可以根據自己的需求創建模型結構,然後將預訓練模型的權重用於該結構。這種方法允許您根據不同的目標任務進行微調或擴展。

YOLOv8 模型的每個類別中有五個模型

YOLOv8nYOLOv8sYOLOv8mYOLOv8lYOLOv8x
YOLOv8 Nano是最快和最小的,而YOLOv8 Extra Large(YOLOv8x)是最準確但最慢的

YOLOv8 使用了以下預訓練模型:

  • 在 COCO 檢測數據集上訓練的對象檢測,圖像分辨率為 640。
  • 在 COCO 分割數據集上訓練的實例分割,圖像分辨率為 640。
  • 在 ImageNet 數據集上預訓練的圖像分類模型,圖像分辨率為 224。

訓練指標分析

Intersection over Union指標

IoU(Intersection over Union)是一個用於評估目標檢測和分割任務的常用指標。它主要用於衡量預測的目標與實際目標之間的重疊程度。在機器學習和計算機視覺領域中,IoU通常用於衡量模型的預測準確度,特別是在處理像目標檢測、物體定位和分割等任務時。

IoU的計算方式是將預測的目標區域(通常是矩形框或分割區域)與實際目標區域的交集面積除以它們的聯集面積。公式如下:

其中,交集是預測區域和實際區域的重疊部分,聯集是預測區域和實際區域的整體合併部分。

在目標檢測中,當模型預測的目標框與實際目標框之間的IoU值越高,表示模型的預測越準確。通常,當IoU超過一個預定的閾值(例如0.5或0.7)時,可以將該預測視為成功檢測。這種指標可以用於計算Precision-Recall曲線以及平均精度(Average Precision)等性能指標。

在分割任務中,IoU用於衡量模型預測的分割區域與實際分割區域之間的相似度。當分割區域的IoU越高,表示模型的分割結果越準確。

mAP50(B)

mAP50(B) 是指”Mean Average Precision at IoU 0.50 for Large Objects”,意思是在IoU(Intersection over Union,重疊度)為0.50 的情況下,針對較大目標計算的平均精度(AP)值的均值。 mAP 是模型在不同類別上的平均精度值,而 mAP50(B) 是針對較大目標計算的平均精度值。

mAP50-95(B)

mAP50-95(B) 是指 “Mean Average Precision across IoU 0.50 to 0.95 for Large Objects”,意思是在 IoU 從 0.50 到 0.95 範圍內,針對較大目標計算的平均精度值的均值。這個指標更全面地評估了模型在不同重疊度下的性能。

precision(B)

precision(B) 是針對較大目標計算的精確率,即模型在預測中有多少是正確的,相對於所有預測中的正確和錯誤。它是衡量模型預測的準確性的指標之一。

recall(B)

recall(B) 是針對較大目標計算的召回率,即模型正確預測的目標數與實際目標數之比。它表示模型能夠檢測到多少實際目標。召回率是衡量模型識別能力的指標之一。

dfl_loss(Detection Focal Loss)

dfl_loss 是一種在YOLO目標檢測中引入的特殊損失函數,它是基於焦點損失(Focal Loss)的改進。焦點損失的主要目標是應對樣本不平衡問題,即正負樣本比例嚴重失衡。在目標檢測中,負樣本(即不含目標的區域)遠遠多於正樣本(含有目標的區域)。 dfl_loss 試圖通過放大難以分類的正樣本的損失,來應對這種不平衡,從而使模型更關注難以識別的目標。

box_loss(Box Regression Loss)

這是用於衡量預測框位置的損失函數。在目標檢測中,模型不僅要預測目標的類別,還要預測框的位置,即邊界框的中心坐標、寬度和高度。 box_loss 的目標是使模型的位置預測更接近真實目標框的位置。這有助於確保檢測到的框與真實目標框的位置相匹配,從而提高目標定位的準確性。

cls_loss(Class Classification Loss)

cls_loss 用於分類目標的類別。在YOLO中,每個檢測框需要預測它所屬的目標類別。 cls_loss 的作用是確保模型的類別預測盡可能準確。這對於準確地將檢測框與正確的目標類別關聯非常重要,從而實現了目標分類的準確性。

我的tensorborad訓練狀況

這邊深藍色的是使用YOLOv8m.pt做預訓練模型、淺藍色的是使用YOLOv8n,深藍色的跑了2個多小時(100次),淺藍色的因為懶得跑完只做了60幾次。橘色的是別人訓練的歷程。

為什麼自己訓練的結果即使所有資料集都一樣卻有不同的狀況,需要進一步去了解。