ControlNet
ControlNet 解決了單靠文字無法解決的問題:精確的空間控制。提示詞可以要求「一個人在跳舞」,但它無法指定你心中那個確切的姿勢、精準的輪廓,或深度的佈局。ControlNet(Zhang、Rao、Agrawala,2023)讓你能遞給擴散模型一張額外的空間圖——一張邊緣線稿、一具火柴人姿勢骨架、一張深度圖、一張分割遮罩、一筆塗鴉——而模型會生成一張遵循那張圖、同時仍尊重文字提示詞的影像。正是它把文生圖從一台吃角子老虎機,變成一個可導引的工具。
巧妙之處在於它如何在不重新訓練、也不損壞強大基礎模型的前提下加入這種控制。ControlNet 製作擴散 U-Net 編碼器區塊的一份可訓練副本,把空間條件餵入該副本,再透過「零卷積」(zero-convolution)層——權重初始化為全零的卷積——把副本連回原本凍結的網路。由於它們從零開始,訓練之初 ControlNet 加入的東西恰好為零,因此基礎模型的行為被完美保留,訓練只能逐漸、安全地學會注入新的控制。原始權重全程保持凍結,所以你保留了基礎模型的全部品質,只是栓上一個新的控制通道;你甚至能同時堆疊好幾個 ControlNet。
這讓細粒度、可重現的控制在消費級硬體上變得實用,如今已是專業生成工作流程的標準環節:吻合一件商品的精確剪影、把參考姿勢重新套用到一個新角色上、強制建築透視,或為一張線稿上色。每一種控制類型都是在配對資料上分別訓練出來的 ControlNet(例如,影像與其 Canny 邊緣或其估計深度的配對)。主要的微妙之處在於:選對前處理器以乾淨地擷取控制圖,以及在控制強度與提示詞之間取得平衡——太強,輸出會僵硬地描摹那張圖;太弱,控制就被忽略。
工作流程:拍一張朋友擺出某姿勢站立的照片,執行 OpenPose 前處理器擷取出一具火柴人骨架,把那具骨架連同提示詞「月球上的一名太空人」餵給一個姿勢 ControlNet。輸出是一名以你朋友確切姿勢站立的太空人——骨架固定幾何、提示詞固定內容,而凍結的基礎模型提供照片寫實感。