10803 words
54 minutes
一種通過可微輪廓和物理資訊引導實現生成式圖像合成的統一框架(DPS + Snake Model)

前言#

因為目前師兄那邊提出了蛇模型這個概念跟我們目前的想法有點像,但是因為相差還是太大了,主要原因還是因為蛇模型這東西是不可微的,它返回的是坐標點,如果想要做引導的話還需要花費很多精力,所以目前不建議這麼幹,此篇文章將梳理過程記錄。

一、基礎組件回顧#

本部分旨在通過剖析所涉及的三項核心技術,為後續的理論綜合與實踐融合奠定堅實的基礎。通過深入審視每個組件的獨特性與固有限制,我們為構建一個協同、高效的統一框架做好準備。

1.1 擴散後驗採樣 (DPS) 引導:引導的核心組紐#

擴散後驗採樣 (Diffusion Posterior Sampling, DPS) 框架是現代生成模型領域的一項重要進展,尤其在解決具有噪聲的逆問題方面展現出卓越的能力。其核心機制為解決一個通用的逆問題

y=A(x0)+ny = \mathcal{A}(x_0) + n 提供了強大的理論支持,其中 x0x_0 是待恢復的清晰圖像,yy 是觀測數據,A\mathcal{A} 是前向運算子,nn 是測量噪聲。DPS 的目標是通過從後驗分佈 p(xy)p(x|y) 中採樣來恢復 x0x_0

1.1.1 核心機制#

DPS 的生成過程基於一個經過修改的逆向隨機微分方程 (SDE)。標準的生成式擴散模型通過學習數據分佈的對數密度梯度 (即分數函數 xlogpt(xt)\nabla_x \log p_t(x_t)) 來逆轉一個逐步加噪的過程。為了解決逆問題,DPS 將這一過程擴展,使其能夠融合來自觀測數據 yy 的資訊。這是通過在逆向 SDE 的飄移項中加入似然項的梯度來實現的。根據貝葉斯定理,後驗分佈的對數梯度可以分解為先驗梯度和似然梯度之和:

xlogpt(xy)=xlogpt(x)+xlogpt(yxt)\nabla_x \log p_t(x|y) = \nabla_x \log p_t(x) + \nabla_x \log p_t(y|x_t)

這個公式(在標記中為公式 5)是整個引導機制的基石。第一項,xlogpt(x)\nabla_x \log p_t(x),由預訓練的分數匹配網路 sθ(xt,t)s_\theta(x_t, t) 近似,它代表了模型從大規模數據中學到的通用圖像先驗。第二項,xlogpt(yxt)\nabla_x \log p_t(y|x_t),則代表了來自特定觀測數據 yy 的引導力,它將生成過程「拉向」與觀測數據一致的解。

1.1.2 矢徑近似#

然而,似然項 p(yxt)p(y|x_t) 在分析上難以處理的,因為觀測 yy 與清晰圖像 x0x_0 有直接關係,但與任意時刻的噪聲圖像 xtx_t 之間沒有直接的解析關係。這是將外部引導融入擴散模型的最根本挑戰。

DPS 從這通過一個精妙的近似解決了這個問題,它利用了這樣一個事實:在給定 x0x_0 的條件下,yyxtx_t 是條件獨立的。因此,似然可以表示為 x0x_0 的積分:p(yxt)=p(yx0)p(x0xt)dx0p(y|x_t) = \int p(y|x_0)p(x_0|x_t)dx_0。DPS 的核心創新在於用平均值

x0:=E[x0xt]x_{0}:=\mathbb{E}[x_0|x_t] 來近似這個積分,即:

p(yxt)p(yx^0)p(y|x_t) \approx p(y|\hat{x}_0)

這個近似(在標記中為公式11)會一個在噪聲空間 tt 中難以處理的問題,轉化為一個在清晰圖像空間 x0x_0 中可以處理的問題。

1.1.3 核心公式#

這一框架的實用性依賴於在每個去噪步驟中高效地計算出對清晰圖像的估計 x^0\hat{x}_0。DPS 利用了 Tweedie 公式的一個推論,即在特定類型的擴散過程(如 VP-SDE)中,經驗值 E[x0xt]\mathbb{E}[x_0|x_t] 與有一個優雅的閉式解。因此,在每個時間步 tt,可以從當前的噪聲圖像 xtx_t 和得分網路 sθs_\theta 的預測中計算出對清晰圖像的估計 x^0\hat{x}_0

x^0=1αˉt(xt+(1αˉt)sθ(xt,t))\hat{x}_0 = \frac{1}{\sqrt{\bar{\alpha}_t}} (x_t + (1-\bar{\alpha}_t)s_\theta(x_t, t))

這個公式(在標記中為公式10)是整個框架的「砥砥」。它在每個去噪時間步中,都構建了一個「清晰空間」的估計。這個估計出的 x^0\hat{x}_0 成為了一個穩定且有意義的「錨點」,所有複雜的、非線性的外部引導運算元(物理模型懲罰項或我們即將討論的替代模型)都將作用於其上。

最終,對於一個標準的數據真度項(例如,基於羅斯彈下(L2損失)),完整的引導梯度更新可以近似為:

xtlogp(yxt)1σ2xtyA(x^0)22\nabla_{x_t} \log p(y|x_t) \approx -\frac{1}{\sigma^2} \nabla_{x_t} ||y - \mathcal{A}(\hat{x}_0)||_2^2

其中,強度 σ2\sigma^2 是通過對 x^0\hat{x}_0 求導,再利用鏈式法則反向傳播過去計算得到的。我們的目標,就是通過引入新的、基於物理和幾何的損失項來增強這個引導梯度。x^0\hat{x}_0 使得這種增強不僅在理論上可行,在實踐中也直觀和高效。

1.2 科學先驗:能量密度動態權 (I_inertia)#

在科學圖像生成任務中,僅依賴數據驅動的先驗往往不足以保證生成結果的物理真實性。為此,引入基於物理原理的懲罰項是一種行之有效的方法。設計的「能量密度動態權懲罰項」便是一個極具洞察力的例子,其設計理念和數學構造值得深入分析。

1.2.1 核心理念#

該物理懲罰項的核心理念是,摒棄那些基於圖像幾何的、模糊的、可能帶有偏見的約束(例如,「圖像必須居中」或「輪廓必須在特定範圍內」),轉而採用一個更基本、更廣泛的、源於經典力學定律的物理原則。這個原則就是:

一個物理上緊密的能量團繞其自身質心的轉動慣量必然是極小的。

這種設計思路將圖像生成巧妙地映射到了一個力學問題上:

  1. 圖像的重新詮釋: 將一張 H×WH \times W 的圖像不再視為「圖片」,而是被看作一塊密度不均的二維「能量密度板」。
  2. 物理對應: 圖像上每個像素的亮度值 I(i,j)I(i, j) 對應於該點的能量密度 p(i,j)p(i, j)。一個物理上真實的黑洞系統,作為一個極其緻密的引力源,就對應於一塊幾乎所有能量都高度集中於能量密度板。
  3. 最佳化目標確認: 因此,設計的核心目標就是最小化這張「能量密度板」圍繞其自身能量核心的轉動慣量。能量分布越近中心、轉動慣量就越小。

1.2.2 數學公式#

該懲罰項的計算過程被嚴謹地分為三個步驟,每一步都具有明確的物理意義和數學目的。

  1. 能量密度圖像: 首先,將圖像 I(i,j)I(i,j) 歸一化為能量密度分佈 p(i,j)p(i,j),使其總和為1:

    p(i,j)=I(i,j)i,jI(i,j)p(i,j) = \frac{I(i,j)}{\sum_{i,j} I(i,j)}

    這一步的目的是消除圖像整體亮度對計算的影響,使得懲罰項只關注能量的分佈形態,而非其絕對大小,從而為不同亮度的生成圖像提供了公平的比較基準。

  2. 計算能量質心: 接下來,計算該能量密度分佈的質心位置 C=(ic,jc)C=(i_c,j_c),它代表了能量集中的平均位置。

    ic=i,jip(i,j)i_c = \sum_{i,j} i \cdot p(i,j) jc=i,jjp(i,j)j_c = \sum_{i,j} j \cdot p(i,j)

    這項設計的關鍵一步,它使處於匯聚自成形的原點,圓心規矩圖像自身的能量分佈內生地計算出來的,完全不依賴於圖像圖像的幾何中心。這完美避免了“黑洞必須在圖片正中央”這一不必要的、帶有偏見的人為假設。

  3. 計算轉動慣量: 最後,計算整個能量分佈圍繞其自身質心的轉動慣量,並進行歸一化,得到最終的損失值 Linertia\mathcal{L}_{inertia}

    Linertia=i,j((iic)2+(jjc)2)p(i,j)(H1)2+(W1)2\mathcal{L}_{inertia} = \frac{\sum_{i,j} ((i-i_c)^2 + (j-j_c)^2) \cdot p(i,j)}{(H-1)^2 + (W-1)^2}

    分子是精確的轉動慣量(二階中心矩),它度量了所有能量點相對於質心的加權平方距離之和。任何偏離質心的點都會導致這一個獎勵體積,分母是一個歸一化因子,等同於圖像對角線長度的平方。引入這個因子至關重要,它解決了兩個實際問題:

    • 數值穩定性: 未歸一化的轉動慣量值可能非常大,導致數值爆炸,正如您在實驗中觀察到的那樣,一旦將損失值的某一個更規範的範圍內,數值穩定性就得到了保證。
    • 分佈無差異性: 歸一化消除了損失值對圖像解析度的依賴,使得調優好的超參數在不同尺寸的圖像上依然有效。

1.2.3 特性總結#

事實上,Linertia\mathcal{L}_{inertia} 是一個全局性、統計性、自啟動性的物理先驗。

  • 全局性: 它作用於圖像的每一個像素,考慮的是整體的能量分佈。
  • 統計性: 它基於能量分佈的二階(質心)和二階中心矩(轉動慣量),是一種統計描述。
  • 自啟動性: 它的參照系(能量核心)是內生的,能夠適應目標圖像中的任意位置。

這個先驗回答了「What」的問題:生成的能量分佈應該是什麼樣的?它應該是更緊密的。但它對於目標的局部特徵,如邊緣的清晰度或特定的幾何形狀,是相對敏感的。這為引入下一個判驗—蛇形模型—埋下了空間和必要性。

1.3 幾何先驗:主動輪廓 (蛇形) 模型#

主動輪廓模型 (Active Contour Model),或稱蛇形模型 (Snake),由 Kass 等人在1988年提出,是計算機視覺領域中一種經典且強大的圖像分割方法。它透過最小化一組能量函數來驅動一條初始輪廓線(蛇)疊代變形,最終使其精確地貼合到圖像中目標的邊界上,並解釋其經典得道是一種用於現代化並融入深度學習框架的一種方法。

1.3.1 經典形式#

傳統蛇形模型的總能量 Esnake\mathcal{E}_{snake} 由內部能量和外部能量兩部分加權構成:

Esnake=01Einternal(v(s))+Eimage(v(s))ds\mathcal{E}_{snake} = \int_{0}^{1} \mathcal{E}_{\text{internal}}(v(s)) + \mathcal{E}_{\text{image}}(v(s))ds

其中 v(s)=(x(s),y(s))v(s) = (x(s), y(s)) 是蛇線的參數化表示。

1. 內部能量 Einternal\mathcal{E}_{\text{internal}}:#

該能量項只與輪廓自身的幾何屬性有關,與圖像內容無關。它的作用是平滑輪廓的形狀,使其保持光滑和連續。它通常由兩部分組成:

  • 一階導數項 (彈性動力): dvds2\left| \frac{d\vec{v}}{ds} \right|^2 控制輪廓的伸縮,像橡皮筋,傾向於收縮。參數 α\alpha 控制其“彈性”。
  • 二階導數項 (彎曲能量): d2vds22\left| \frac{d^2\vec{v}}{ds^2} \right|^2 輪廓的彎曲率部分,像一根有剛性的金屬絲,傾向於變得平直。參數 β\beta 控制其“剛性”。
2. 圖像能量 Eimage\mathcal{E}_{\text{image}}:#

該能量項將蛇線與圖像特徵聯繫起來,驅動輪廓向感興趣的目標移動。它通常會以下幾項加權和:

Eimage=wlineEline+wedgeEedge+wtermEterm\mathcal{E}_{\text{image}} = w_{\text{line}} \mathcal{E}_{\text{line}} + w_{\text{edge}} \mathcal{E}_{\text{edge}} + w_{\text{term}} \mathcal{E}_{\text{term}}

最常用也是最核心的是邊緣能量項 Eedge\mathcal{E}_{\text{edge}}。為了讓輪廓被吸引到圖像的邊緣 (梯度大的地方),邊緣能量通常被定義為圖像梯度幅值的負數:

Eedge=I(x,y)\mathcal{E}_{\text{edge}} = -|\nabla I(x, y)|

這樣,當輪廓移動到梯度大的區域時,Eedge\mathcal{E}_{\text{edge}} 變小,總能量 Esnake\mathcal{E}_{\text{snake}} 也隨之減小,從而實現了輪廓向邊緣的演化。

1.3.2 偽勢不變性的啟示#

一篇關於偽勢不變形模型 (AI-Snake) 的深度研究提出了一個深刻的觀點:傳統蛇形模型中基於曲率的內部能量項

不具備偽勢不變性。這意味著當目標若發生拉伸、擠切時,即使曲率沒有改變,其內部能量也可能發生變化。這就導致了當目標形狀改變時,傳統蛇模型可能無法正確地跟隨。這項研究提出,用由弧點構成的三角形面積來代替曲率作為能量項的基礎。經過這些歸一化後,三角形面積的比率在偽勢變換下保持不變的。

這一點對我們的啟示極其重要:在設計引導損失時,我們應當優先選擇那些具備幾何不變性或物理不變性的特徵,而不是簡單地依賴於不穩定的、隨機變化的數據。這加強了我們選擇轉動慣量(一個內在的物理量)和即將設計的基於幾何的蛇形損失的合理性。

1.3.3 核心挑戰與現代化的必要性#

傳統蛇形模型是一個根本性的挑戰,使其無法直接應用於現代深度學習框架。經典蛇形模型是一個疊代最佳化方法,而不是一個可微分的損失函數。要求解析解。蛇形基於分段指導的五對角系統(Av=F(v)A\mathcal{v}=\mathcal{F}(\mathcal{v}))進行求解,這是基於貪心算法的局部搜索,本質上是一個非最佳化的、非編程的、不可微分的過程。

因此,今天的天災出,即使直接有 Esnake\mathcal{E}_{\text{snake}} 作為作用於 DPS 生成的圖像 x0x_0 上的損失函數,在概念上是行不通的。我們無法簡單地對“運行一個貪心算法”這個過程反向傳播求導。

這提示了我們任務的核心技術難題:我們必須將蛇形模型的功能(即找到圖像的黑洞等輪廓並評估其幾何屬性)從經典的算法實現中解耦出來,並將其重新塑造成一個完全可微的、能夠無縫嵌入到 DPS 引導環的現代運算元。這是這第二部分將要解決的核心問題。

二、原則性綜合:可微分引導 (DCG) 框架#

本部分旨在提出模組化的核心創新:構建一個將經典主動輪廓模型的所有勢能均勻的約束相結合的統一框架。我們將傳統算法與深度學習之間的鴻溝,將蛇形模型從一個非可微的疊代過程,重塑為一個端到端可訓練的、可微分的引導子,我們稱之為可微分輪廓引導 (Differentiable Contour Guidance, DCG)。

2.1 概念橋梁:從算法到微量子#

面對的問題

正如第一部分分析的,直接將傳統的蛇形模型集成到 DPS 框架中是不可行的。其根本障礙在於經典蛇形模型的最佳化過程(無論是分法還是貪心法)本質上是一個非凸性的、非可微分的循環。難度無法透過這個過程獲得傳播。因此它不能被用作一個標準的損失函數來引導生成模型的訓練或採樣。

2.1.1 解決方案:可微分主動輪廓#

解決方案在於借鑑近年來計算機視覺和深度學習領域的最新進展,將主動輪廓的演化行程本身建構為一個可微的組件,這一範式已在多個研究中得到驗證,並發展出多種技術和任務。

我們在此重點探討兩種與我們任務深度相容的技術:

  1. 可微分掩碼 (Differentiable Masking): 這種方法將輪廓定義地表示為一個指示圖像的邊緣形狀。然後,一個“神經渲染器”或“軟光柵器”將這個多邊形的原頂點坐標作為輸入,生成一個“軟的”、可微的二進制掩模 (mask)。這個掩模圖像的每個像素值表示該像素在多邊形內部的機率 (例如,AOI即平均重疊)。一旦有了這個可微的掩模,我們就可以計算它與某個目標(例如,真實分割掩模)之間的標準分割損失 (如Dice或IoU),梯度就可以從損失值一路反向傳播到多邊形的頂點位置。

  2. 水平集方法 (Level-Set Formulation): 這種方法不直接操作輪廓的點,而是用符號距離函數表示為一個連續場 ϕ(x,y)\phi(x,y)。符號距離函數表示為 ϕ(x,y)\phi(x,y),若 xx 在輪廓內部,ϕ(x,y)<0\phi(x,y) < 0;若 xx 在輪廓外部,ϕ(x,y)>0\phi(x,y) > 0;若 xx 在輪廓上,ϕ(x,y)=0\phi(x,y) = 0

    這是一個符號距離函數 (Signed Distance Function),其優點為正確地表示輪廓,為符合幾何學輪廓演化的演化論證,即在特定類型的擴散過程 (如 VP-SDE) 中,這也可以透過微分方程來描述。它幾乎用於主動輪廓化的能量函數 (如長度項、面積項) 以及演化步驟本身。這都可以被夠造成完全可微的形式,並將在PyTorch或TensorFlow等框架中高效實現。

對於我們生成黑洞圖像的應用場景,水平集方法有其獨特優勢。黑洞的光子環結構是平滑的曲線,可能不適合用多邊形進行精確描述。水平集方法能夠自然地處理任意複雜的拓撲結構 (例如,生成一個環而不是一個實心圓盤),並且其能量項 (如曲率、長度) 的計算在整個網路權進行,更適合與基地的卷積的深度學習模型結合。

2.1.2 核心重構:蛇形模型作為可微子#

基於以上分析,我們對於這種接入一個概念上的重構:不再將蛇形模型視為一個損失函數,而是將其轉為一個可微運算元,記為 DsnakeD_{snake}

這個運算元的功能被明確定義為:輸入一張圖像(在我們的場景中是DPS估計出的清晰圖像 x^0\hat{x}_0),輸出一個代表該圖像中某個輪廓的數學對象(在我們的場景中是輪廓的水準集 ϕC\phi_C)。

這一個概念重構的理論來如下:

  1. 用戶需求: 利用“蛇形模型”來引導圖像生成。

  2. 經典定義: 蛇形模型是一個通過最小化能量 Esnake(C,I)\mathcal{E}_{snake}(C, I) 來尋找最佳輪廓 CC 的算法。

  3. 核心解決方案: 我們能直接將 Esnake\mathcal{E}_{snake} 用作子圖形圖像的節點(即圖像的黑洞等輪廓並評估其幾何屬性)從經典的算法實現中解耦出來,並將其重塑為一個完全可微的、能夠無縫嵌入到 DPS 引導環的現代運算元,這才是這第二部分將要解決的核心問題。

  4. 現代解決方案: 我們將傳統的 Esnake\mathcal{E}_{snake} 用作子圖形圖像的節點。它是一個可微的,能夠無縫嵌入到 DPS 引導環的現代運算元,這才是這第二部分將要解決的核心問題。

  5. 定義 Esnake\mathcal{E}_{snake} 作為一個可微運算元 Dsnake()D_{snake}(\cdot):我們定義一個可微運算元 Dsnake(ϕ0)D_{snake}(\phi_0)。這個運算元的內部實現可以是一個小型、包含固定疊代次數的可微水平集演化網路,給定一張圖像 x0x_0,它能“計算出”(或近似似出)經典蛇形模型需要多次疊代才能找到的輪廓的水準集表示 ϕC\phi_C

  6. 損失函數的構建:一旦我們有了從圖像到其輪廓的可微分映射 DsnakeD_{snake},我們就可以在此基礎上定義我們真正的引導損失 Lsnake\mathcal{L}_{snake}。這個損失函數將不再是蛇形模型內部的能量,而是衡量輸入圖像 x0x_0 與其輸出輪廓 ϕC\phi_C 之間失真的函數

通過這個「算法量子化」的轉變,我們將蛇形模型融入 PnP-DM 框架,使其能夠平滑地引導生成過程。

2.2 可微分引導損失 (Lsnake\mathcal{L}_{snake}) 的構建#

在將蛇形模型轉變為可微子 DsnakeD_{snake} 之後,我們現在可以構建一系列新的、基於輸出的損失函數。這些損失函數的設計目標是直接將我們對目標形狀的先驗知識編碼為可微分的目標。從而引導 DPS 生成在幾何上更真實、更符合預期的圖像。

2.2.1 步驟一:可微分獲取#

在 DPS 的每個引導步驟中,我們預先執行可微分獲取,給出當前估計的清晰圖像 x0x_0。我們通過我們定義的可微子計算出其主要輪廓的水準集:

ϕC=Dsnake(x0)\phi_C = D_{\text{snake}}(x_0)

DsnakeD_{\text{snake}} 的內部可以被設計為一個輕量級的網路模組,它接收 x0x_0 作為輸入,可以從一個固定的初始輪廓(例如,圖像中心的一個小圓圈對應的水準集函數 ϕ0\phi_0)開始,進行數個小步驟(例如10步)的可微水平集演化。演化的驅動力可以基於 x0x_0 的梯度資訊,同時也將正則化項以保證輸出的 ϕC\phi_C 是平滑的。這個過程是完全可微的,梯度可以從最終的 ϕC\phi_C 反向傳播回輸入 x0x_0

2.2.2 步驟二:基於輪廓屬性定義損失#

一旦獲得了輪廓的水準集表示 ϕC\phi_C,我們就可以定義一個複合損失函數 Lsnake\mathcal{L}_{\text{snake}},它由多個旨在強制執行不同幾何規律的項構成。

構建 A:邊界附近區域梯度損失

這個構建方式直接鼓勵生成的圖像 x0x_0 展現出傳統蛇形模型所偏好的特性:即在輪廓位置有清晰的邊界,並且輪廓內外有明確的區域劃分。

  • 邊界層損失 (Lboundary\mathcal{L}_{\text{boundary}}): 此項旨在獎勵沿提取出的輪廓線具有圖像梯度的生成結果。我們期望輪廓 ϕC=0\phi_C=0 的位置正好落在圖像的強邊緣上。這可以透過一個二分度量來實現:

    Lboundary=x(x,y)δ(ϕC(x,y))dxdy\mathcal{L}_{\text{boundary}} = -\int |\nabla_x(x,y)| \cdot \delta(\phi_C(x,y)) \,dx\,dy

    其中,δ()\delta(\cdot) 是狄拉克函數的光滑、可微分近似(例如一個窄高斯函數),並且其能量項(即曲率、長度)的計算在整個網路權進行,我們希望最大化這個值,因此損失項取負數。

  • 區域梯度損失 (Lregion\mathcal{L}_{\text{region}}): 此項旨在懲罰輪廓內部的能量(亮度),同時獎勵輪廓內部的能量。這強制模型將生成的目標完全包含在其已檢測到的輪廓之內,形成一個“乾淨”的背景和一個“明亮”的前景,對於黑洞圖像,這意味著光子環外的區域應該是暗的。

    Lregion=max(0,ϕC(x,y))dxdyλinmax(0,ϕC(x,y))dxdy\mathcal{L}_{\text{region}} = \int \max(0, \phi_C(x,y)) \,dx\,dy - \lambda_{\text{in}} \int \max(0, -\phi_C(x,y)) \,dx\,dy

    其中,H()H(\cdot) 是亥維賽德階躍函數的可微分近似(例如 Sigmoid 函數)。第一項計算了輪廓外部 (ϕC>0\phi_C > 0) 的總亮度,我們希望最小化它。第二項計算了輪廓內部 (ϕC<0\phi_C < 0) 的總亮度,我們希望最大化它(因此取負號)。λin\lambda_{\text{in}} 是一個權重係數。

構建 B:幾何形狀損失 (Lgeom\mathcal{L}_{\text{geom}})

這個損失完全作用於輪廓 ϕC\phi_C 的幾何形狀,而不直接依賴於圖像 x0x_0 的像素值。它是一種非常強的形狀先驗。對於黑洞的光子環,一個理想的先驗是其形狀應該接近圓形。因此,我們可以定義一個“非圓度”的度量作為損失:

Lgeom=NonCircularity(ϕC)\mathcal{L}_{\text{geom}} = \text{NonCircularity}(\phi_C)

一個經典的非圓度 (或等同性) 度量可以定義為:

NonCircularity(ϕC)=(Perimeter(ϕC)24πArea(ϕC)1)\text{NonCircularity}(\phi_C) = \left( \frac{\text{Perimeter}(\phi_C)^2}{4\pi \cdot \text{Area}(\phi_C)} - 1 \right)

對於一個完美的圓,這個值為1。任何偏離圓形的形狀都會使這個值大於1。我們可以通過水平集函數 ϕC\phi_C 來可微地計算周長 (δ(ϕC)ϕCdxdy\int \delta(\phi_C) |\nabla \phi_C| \,dx\,dy) 和面積 (H(ϕC)dxdy\int H(\phi_C) \,dx\,dy)。最小化這個損失將鼓勵輪廓變得更圓。

2.2.3 最終的蛇形損失#

最終的、完整的可微分引導損失是上述各項的加權和:

Lsnake=Lboundary+wLLregion+wGLgeom\mathcal{L}_{\text{snake}} = \mathcal{L}_{\text{boundary}} + w_L \mathcal{L}_{\text{region}} + w_G \mathcal{L}_{\text{geom}}

其中 wB,wL,wGw_B, w_L, w_G 是用於平衡不同幾何重要性的超參數,通過調整這些權重,我們可以精確地控制生成圖像的邊界清晰度、區域對比度與整體形狀。

2.3 統一的 DPS 引導方向#

在分別定義了物理的轉動慣量損失 Linertia\mathcal{L}_{inertia} 和基於幾何的可微分輪廓損失 Lsnake\mathcal{L}_{snake} 之後,最後一步是將它們與 DPS 原有的數據真度項 Ldata\mathcal{L}_{\text{data}} 融合、形成一個統一的、多方面的引導機制。

2.3.1 “What vs. Where” 的協同作用#

在構建該方案之前,深刻理解這兩個新先驗項之間的互補關係至關重要,它們並非簡單的功能重疊,而是形成了一種強大的協同作用,可以概括為 “What vs. Where” 的二元引導:

  1. Linertia\mathcal{L}_{inertia} 回答 “What”: 轉動慣量是一個全局性的物理先驗,它作用於整個圖像的能量分佈。它強制所有高密度像素(能量)聚集在一起,形成一個緊湊的、高密度的“毛團”。它突出的是能量分佈的整體狀態——是否集中、是否彌散,但它對於這個能量團的精確邊界在哪裡、以及邊界的具體形狀如何,並不敏感。
  2. Lsnake\mathcal{L}_{snake} 回答 “Where”: 可微分輪廓損失是一個局部性的幾何先驗。它主要作用於能量團的邊界及其附近區域。它的邊界清晰度和區域的幾何形狀,都是在這個物理的活躍生成清晰。明確的狀態下。例如幾何學原則進一步豐富這個世界的形狀,使其符合預期的幾何形態(例如,圓形黑影),它突出的是局部細節——邊界的清晰度和形狀。

這種協同作用帶來了顯著的優勢。Linertia\mathcal{L}_{inertia} 像一隻有力的大手,首先將分散的能量“捏合”成一團,為蛇形模型提供了一個魯棒的、高品質的起點,防止其被圖像噪聲或偽影誤導。或者彌散的、非物理的特性導致。隨後,Lsnake\mathcal{L}_{snake} 像一把精細的雕刻刀,對這個已經很緊湊的能量團進行“雕刻”,塑造出清晰的邊緣和規則的幾何形狀。這概念上分兩步(在最佳化中同時發生)的過程,遠比單獨使用任何一個先驗為穩健和有效。

2.3.2 最終方程#

我們將所有引導力結合起來,得到最終的、統一的 DPS 引導梯度。在 DPS 的每個去噪步驟中,總的引導損失 Lguidance\mathcal{L}_{\text{guidance}} 由三部分組成:

Lguidance=Ldata+λinertiaLinertia+λsnakeLsnake\mathcal{L}_{\text{guidance}} = \mathcal{L}_{\text{data}} + \lambda_{\text{inertia}}\mathcal{L}_{\text{inertia}} + \lambda_{\text{snake}}\mathcal{L}_{\text{snake}}

其中,Ldata=yA(x^0)2\mathcal{L}_{\text{data}} = ||y-\mathcal{A}(\hat{x}_0)||_2 是數據保真度項,λinertia\lambda_{\text{inertia}}λsnake\lambda_{\text{snake}} 是平衡各項貢獻的超參數。

因此,在 DPS 逆向 SDE 中使用的總經驗梯度可以近似為:

xlogpt(xy)sθ(xt,t)xLguidance\nabla_x \log p_t(x|y) \approx s_\theta(x_t, t) - \nabla_x \mathcal{L}_{\text{guidance}}

展開後,即為我們最終的引導更新規則的核心:

xlogpt(xy)sθ(xt,t)yA(x^0)2λinertiaLinertiaλsnakeLsnake\nabla_x \log p_t(x|y) \approx s_\theta(x_t, t) - ||y - \mathcal{A}(\hat{x}_0)||_2 - \lambda_{\text{inertia}}\mathcal{L}_{\text{inertia}} - \lambda_{\text{snake}}\mathcal{L}_{\text{snake}}

2.3.3 梯度流#

這個梯度流統一框架如何工作的技術關鍵在於梯度流。所有的損失項 (Ldata,Linertia,Lsnake\mathcal{L}_{\text{data}}, \mathcal{L}_{\text{inertia}}, \mathcal{L}_{\text{snake}}) 都是作用於估計的清晰圖像 x^0\hat{x}_0 上的可微函數。在每個引導步驟中,我們計算這些損失項相對於 xtx_t 的梯度。然後,通過鎖定表達,將這些梯度反向傳播通過 Tweedie 公式式 (公式 10) x^0\hat{x}_0

x0=1αˉt(xt+(1αˉt)sθ(xt,t))x_0 = \frac{1}{\sqrt{\bar{\alpha}_t}}(x_t + (1-\bar{\alpha}_t)s_\theta(x_t,t))

x0=1αˉt(xt+(1αˉt)sθ(xt,t))x_0 = \frac{1}{\sqrt{\bar{\alpha}_t}}(x_t + (1-\bar{\alpha}_t)s_\theta(x_t,t))

最終,這些梯度將被視為對噪聲圖像 xtx_t 的校正,而不是對清晰圖像 x^0\hat{x}_0 的校正。這個機制使得所有的物理知識都可以融入到逆向擴散過程的每一步中,從而確保最終圖像的一個物理上正確的結果。

三、實施策略與架構設計#

本部分將前述的理論轉化為具體、可操作的實施藍圖。我們將提供代碼、模組化的架構建議以及關鍵的超參數配置指南,旨在為兩個目標場景提供清晰的開發路徑。

3.1 代碼架構方案一 (DPS + DCG)#

此方案旨在實現一個基礎版本,僅將輪廓引導 (DCG) 集成到現有的 DPS 框架中。這是驗證 DCG 有效性的關鍵第一步。

3.1.1 DifferentiableSnake 模組#

我們建議首先創建一個獨立的、可重用的 DifferentiableSnake 模組,其實現可以基於 PyTorch。

  • 類定義與初始化

    import torch
    import torch.nn as nn
    class DifferentiableSnake(nn.Module):
    def __init__(self(self, num_iterations=10, smoothness_weight=0.1):
    super().__init__()
    self.num_iterations = num_iterations
    self.smoothness_weight = smoothness_weight
    # ... 其他內部參數
  • 前向傳播方法 forward

    該方法的核心功能是接收一個圖像和初始輪廓,並輸出演化後的輪廓。

    • 輸入: x_hat_0 (torch.Tensor),即DPS估計的清晰圖像;phi_0 (torch.Tensor),初始輪廓的水準集表示 (例如,一個以圖像中心為圓心、半徑固定的圓的符號距離函數)。
    • 核心邏輯: 一個 for 循環,疊代 self.num_iterations 次。在每次疊代中,它會執行一步可微的水準集演化。這包括:
      1. 計算外部力: 通常基於圖像梯度。
      2. 計算內部力: 例如,通過對當前水平集 phi 進行卷積來近似其曲率,以實現平滑。
      3. 更新 phi: phi = phi + dt * (external_force + self.smoothness_weight * internal_force)。所有操作 (求梯度、卷積) 都應使用PyTorch的可微操作。
    • 輸出: phi_final (torch.Tensor),即經過 num_iterations 次演化後的最終水平集函數。

3.1.2 SnakeGuidance 模組#

這個模組負責調用 DifferentiableSnake 並計算最終的引導損失 Lsnake\mathcal{L}_{\text{snake}}

  • 類定義與初始化

    class SnakeGuidance(nn.Module):
    def __init__(self, snake_iterations=10, weights={'boundary': 1.0, 'region': 1.0, 'geom': 0.5}):
    super().__init__()
    self.snake_operator = DifferentiableSnake(num_iterations=snake_iterations)
    self.weights = weights
  • 前向傳播方法 forward

    • 輸入: x_hat_0 (torch.Tensor)。
    • 核心邏輯:
      1. 生成初始輪廓 phi_0
      2. 調用 self.snake_operator: phi_C = self.snake_operator(x_hat_0, phi_0)
      3. 基於 x_hat_0phi_C,計算第二部分中定義的各個損失項:loss_boundary, loss_region, loss_geom
      4. 加權求和得到總損失:total_loss = self.weights['boundary'] * loss_boundary + ...
    • 輸出: total_loss (torch.Tensor),即 Lsnake\mathcal{L}_{\text{snake}}

3.1.3 修改後 DPS 循環 (虛擬碼)#

# 初始化
snake_guidance_module = SnakeGuidance(...)
# ... 其他DPS初始化
# DPS逆向採樣循環
for t in reversed(range(N)):
# 1. 預測當前時間步
x_hat_0 = predict_clean_image(x_t, t, score_model) # 基於公式10
# 2. 計算引導梯度 ---
# 2.1. 計算物理懲罰項
grad_snake = torch.zeros_like(x_t)
if lambda_snake > 0:
with torch.enable_grad():
x_hat_0_grad = x_hat_0.detach().requires_grad_(True)
loss_snake = snake_guidance_module(x_hat_0_grad)
# 自動計算損失項對於x_hat_0的梯度
grad_x_hat_0_snake = torch.autograd.grad(loss_snake, x_hat_0_grad)
# 對梯度從x_hat_0空間傳播回x_t空間 (應用公式中的鏈式法則)
grad_snake = propagate_gradient_to_xt_space(grad_x_hat_0_snake, x_t)
# 2.2. 計算數據保真度(DPS原有邏輯)
grad_data = compute_data_gradient(x_hat_0, y, I) # 包含梯度傳播
# 3. 組合梯度並執行更新步驟
total_guidance_grad = grad_data + lambda_snake * grad_snake
# 4. 執行一步逆向更新
x_t_minus_1 = update_step(x_t, t, score_model, total_guidance_grad)
x_t = x_t_minus_1

3.2 代碼架構方案二 (DPS + DCG + 物理懲罰)#

此方案是最終的完整實現,在方案一的基礎上沃鍵集成了物理懲罰項。

3.2.1 InertiaGuidance 模組#

這是一個獨立的、自包含的模組,用於計算 Linertia\mathcal{L}_{\text{inertia}}

  • 實現: 一個簡單的 Python 函數或 nn.Module,嚴格按照1.2節中描述的三步法 (歸一化、計算質心、計算歸一化轉動慣量) 來實現。
  • 輸入: x_hat_0 (torch.Tensor)。
  • 輸出: loss_inertia (torch.Tensor),即 Linertia\mathcal{L}_{\text{inertia}}
  • 注意: 由於所有步驟都是簡單的向量操作 (求和、乘法、除法),該模組天然就是可微的。

3.2.2 集成的實現#

集成的關鍵在於,SnakeGuidanceInertiaGuidance 這兩個模組都以相同的 x_hat_0 作為輸入,並且它們的計算是相互獨立的。因此,它們可以在計算圖中並行執行,並將它們的損失加權求和後,通過一次反向傳播計算總的引導梯度。

3.2.3 完全集成的 DPS 循環 (虛擬碼)#

# 初始化
snake_guidance_module = SnakeGuidance(...)
inertia_guidance_module = InertiaGuidance(...)
# ... 其他DPS初始化
# DPS逆向採樣循環
for t in reversed(range(N)):
# 1. 預測當前圖像
x_hat_0 = estimate_clean_image(x_t, t, score_model)
# 2. 計算引導梯度
with torch.enable_grad():
x_hat_0_grad = x_hat_0.detach().requires_grad_(True)
# 2.1. 計算物理懲罰項 (兩個獨立分支,可以並行)
loss_snake = snake_guidance_module(x_hat_0_grad)
loss_inertia = inertia_guidance_module(x_hat_0_grad)
# 2.2. 加權求和得到物理懲罰項的總損失
total_prior_loss = (lambda_snake * loss_snake) + (lambda_inertia * loss_inertia)
# 2.3. 計算總的先驗梯度
grad_x_hat_0_prior = torch.autograd.grad(total_prior_loss, x_hat_0_grad)[0]
# 2.4. 將先驗梯度傳播回 x_t 空間
grad_prior_propagated_to_xt = propagate_gradient_to_xt(grad_x_hat_0_prior, x_t)
# 2.5. 計算數據保真度梯度
grad_data = compute_data_gradient(x_hat_0, y, I) # 包含梯度傳播
# 3. 組合所有梯度並執行更新步驟
total_guidance_grad = grad_data + grad_prior_propagated_to_xt
# 4. 執行一步逆向更新
x_t_minus_1 = update_step(x_t, t, score_model, total_guidance_grad)
x_t = x_t_minus_1

3.3 關鍵參數配置與物理意涵#

成功實現這一複雜且與眾不同正確的代碼架構,還需要對各作的相互作用有深刻理解,這集中體現在超參數的配置上。下表提供了關鍵參數的建議起始值、原理分析和調優策略,旨在理論與成功開實踐之間搭建橋梁。

超參數描述方案一 建議值方案二 建議值原理調優策略
λdata\lambda_{\text{data}}數據保真項的權重。1.0 (固定)1.0 (固定)作為引導的基準。所有其他 λ\lambda 值都是相對於它來調整的,以平衡數據與先驗。
λinertia\lambda_{\text{inertia}}物理慣量損失的權重。起始值: 1e-3起始值: 1e-3作用:控制引導力的強度,讓模型透過逆擴散過程從噪聲度形式和形狀起源來調整。從一個較的開始逐漸增大,直到出現物理平臺或不自然的偽影,然後稍微調弱。在方案二中,其值能從更高 λ\lambda 值較小的物理項圖空間。
λsnake\lambda_{\text{snake}}物理蛇形損失的權重。不適用起始值: 0.5作用:控制物理蛇形損失的強度。調伏。模型在中部的表現從0.5是一個已知的“惡性值”,它在不導致誤差的基礎上擴散模型對所有物理懲罰項的整體表現。
蛇形疊代可微演化步驟的數量。5-105-10作用:決定了蛇形粒子最終的“密度”,讓模型可以達到一個穩定的“中間值”,對於高物理物理懲罰項能夠產生很強的物理性質。
物理平滑控制蛇形平滑度的內部參 (經典模型中的 β\beta)。0.10.1作用:防止蛇形過度扭曲物理上無意義的結構。用於控制模型整體引導強度,保證生成圖形具有物理真實性和避免噪聲之。

四、綜合分析與戰略建議#

本部分對前述的理論框架和實施策略進行全面的評估,綜合所有發現,給出一個夾子可行性的明確結論,平審地審視潛在的挑戰,為未來的研究工作規劃一條清晰的路徑。

4.1 可行性與預期收益#

4.1.1 結論#

我們提出的可微物理引導 (DCG) 與總量密度轉動慣量物理先驗相融合,嵌入到擴散後驗採樣 (DPS) 框架中的方案,不僅在理論上是自洽可行的,而且代表了當前物理資訊與幾何引導集成生成模型領域的一種前沿方法。該方案通過在每個去噪步驟中構建新的逐漸擴散計 x0x_0 作為統一的“錨點”,巧妙地解決了將不同性質的先驗 (全局/局部、物理/幾何) 集成到單一最佳化核心的挑戰。

4.1.2 預期收益#

成功實施該框架有望帶來以下四方面的顯著收益:

  1. 增強的物理真實性:通過結合全局能量密度轉動慣量 (Linertia\mathcal{L}_{\text{inertia}}) 和局部幾何形狀的內部表現在一個小型、包含固定疊代次數的模擬模型中,將能帶來一個比傳統擴散模型生成圖像在分子能量方面的優勢,這是模型在所有物理物理懲罰項都能帶來強大的增強。
  2. 改善的功績性能:自黑洞影像的幾何結構在生成圖像中得到較強的物理性質,這是模型在所有物理物理懲罰項的綜合效益。
  3. 直接的形態控制:通過設計新的物理懲罰項 (例如 λnonneg\lambda_{non-neg}λsup\lambda_{sup}),可以直接引導模型生成具有更強物理性質,而不是僅僅依賴模型本身的學習能力。
  4. 提升的強健性:物理先驗和物理幾何的結合 (“What vs. Where” 的協同作用) 使得整個生成過程更加穩健,在噪聲的物理物理懲罰項中提供了更穩定,而不是僅僅依賴數據的。

4.2 潛在挑戰與紓解策略#

儘管前廣泛,但在實施過程中也可能遇到一些精益,預見這些挑戰並制定相應的紓解策略確實項目成功的關鍵。

  • 計算開銷: 在 DPS 的每個(通常是1000個)時間步中都頻繁調用 DifferentiableSnake 模組的計算,無疑會延長生成時間。

    • 紓解策略:
      • a. 預訓練代價: DifferentiableSnake 內部使用一個小的、固定的疊代次數(例如5-10步),這對於提供引導信號非常已足夠。
      • b. 同步性: 不必在每個時間步都施加引導,可以考慮僅在去噪過程的前半段(例如前500步,此時噪聲較正往形狀形成)或每隔kk個時間步施加一次引導。
      • c. 穩定性: 梯度裁剪、歸屬和任何三個不同來源的梯度結合在一起,可能會引入不穩定性。特別是當某個損失項的梯度在數值上遠大於其他項時,可能會主導最佳化行程,導致模式選擇。正如您在前面使用歸一化的物理時所遇到的問題。
  • 紓解策略:

    • a. 梯度裁剪: 對最終組合的 total_guidance_grad 應用梯度範數(torch.nn.utils.clip_grad_norm_),這是防止梯度爆炸的標準做法。
    • b. 引導步長: 採用 DPS 論文中建議的自適應步長策略,例如,將引導步長 ζt\zeta_t 設為 (βt/yA(x^0)2)(\beta_t / ||y - \mathcal{A}(\hat{x}_0)||_2)。 這可以避免在低信噪比時物理梯度過強的引導,在匹配度高時減弱引導,從而穩定過程。
    • c. 梯度幅度分析:
      • 在進行大規模調參之前,先進行“梯度幅度分析”。分別計算來自數據、物理和幾何三部分的梯度平均範數,然後調 Lambda 值,使它們的幅度貢獻在同一個數量級上。這是監督式實踐中的一個重要方法,可以獲得科學的調度。
  • 實驗複雜性: 從零開始實現一個新框架,非線性的外部引導傳播,需要扎實的數學理論或物理模型知識。這是對於開發人員和研究人員來說,需要很多時間和精力。

    • 紓解策略:
      • a. 利用 autograd: 充分利用 PyTorch 的自動微分功能 autograd 來計算所有空間梯度(如 xlogpt(x)\nabla_x \log p_t(x)xϕC(x)\nabla_x \phi_C(x)),避免手動推導和實現複雜的梯度式。
      • b. 從頭實現:可以從簡單的水準集能量函數開始,例如僅包含 Chan-Vese 模型的區域項。驗證其有效性後,再逐步增加長度項 (Length) 和曲率項。
      • c. 借鑒開源實現: 在學術界和開源社區中存在一些可微主動輪廓的 PyTorch 實現,可以借鑒其設計思想或直接進行適配。

4.3 關鍵引導項對比分析#

為了在宏觀層面清晰地展示這三個框架的內部邏輯,本節對三個核心引導項的特性進行了對比分析。這個表格基於報告核心技術貢獻的“執行摘要”,它對複雜的數學公式提供了它們在引導過程中的本質作用和效果。

特性Ldata\mathcal{L}_{data} (DPS數據項)Linertia\mathcal{L}_{inertia} (物理先驗)Lsnake\mathcal{L}_{snake} (幾何先驗)
引導原則數據保真度物理真實性幾何規則性與邊界附著
作用域像素空間 (殘差)全局 (圖像整體統計量)局部 (輪廓及其區域)
主要效果減少噪聲/偽影,匹配觀測數據強制能量集中,形成緊湊的“能量團”銳化邊緣,強制特定形狀 (如環形),確保區域純度
數學基礎殘差的L2範數能量密度的二階中心矩 (轉動慣量)可微輪廓能量 (線積分/面積積分)
核心挑戰噪聲放大 (由DPS本身機制紓解)數值穩定性 (通過歸一化解決)計算成本與梯度穩定性

4.4 最終建議與未來方向#

4.4.1 近期行動計劃#

強烈建議按照一個分階段的計劃推進實施,以管理複雜性並確保每一步都得到充分驗證:

  1. 第一階段: 實施方案一 (DPS + DCG) 這是至關重要的一步,其目標是獨立地實現、測試和驗證可微輪廓引導機制。在一個相對簡單的環境中,對 λsnake\lambda_{\text{snake}} 進行調優,並解決 DifferentiableSnake 模組可能出現的任何問題。會容易得多。

  2. 第二階段: 實施方案二 (DPS + DCG + 物理懲罰) 在 DCG 模組穩定工作後,再將已經驗證過的 Linertia\mathcal{L}_{\text{inertia}} 模組集成進來。此階段的主要任務將是重新平衡三個引導力,即仔細調整 λsnake\lambda_{\text{snake}}λinertia\lambda_{\text{inertia}} 的相對權重,以達到最佳的協同效果。

4.4.2 未來研究方向#

該統一框架不僅解決了當前的問題,還為未來研究開辟了多個激動人心的方向:

  • 可變形參數: 當前方案中,蛇形模型的內部參數(如平滑度權重)是固定的超參數。一個更高級的改進是,設計一個小型神經網路,它以 x^0\hat{x}_0 為輸入,動態地預測這些參數。這將使引導變得更加自適應和智慧。

  • 陰影不變形: 將 AI-Snake 論文的思想更深入地融入 Lgeom\mathcal{L}_{\text{geom}} 項。除了非圓度,可以採用偽形狀不變形的形狀描述作為損失,使形狀先驗對目標的旋轉、縮放和錯切變換更加魯棒。

  • 拓撲擴展的引入: 對於更複雜的物體,可以探索在從 ϕC\phi_C 生成的掩模上應用可微的拓撲損失。這可以用來直接強制執行一些拓撲屬性,例如連通分量的數量(對於一個物體為1),或者是否存在空洞(對於一個實心物體為0,對於一個環為1)。

  • 跨領域應用: 這個統一的引導框架具有高度的通用性,它可以被應用於其他需要同時考慮統計分佈先驗和幾何形狀先驗的科學成像或圖像領域,例如醫學圖像分析(如器官分割與生成)、材料科學(如微觀結構重建)等。

一種通過可微輪廓和物理資訊引導實現生成式圖像合成的統一框架(DPS + Snake Model)
https://huangno1.github.io/posts/dps_add_snake_model/
Author
HuangNO1
Published at
2025-08-06
License
CC BY-NC-SA 4.0