AIGC-風格遷移-style Injection in Diffusion-CVPR2024HighLight-論文精度

Style Injection in Diffusion: A Training-free Approach for Adapting Large-scale Diffusion Models for Style Transfer-CVPR2024HighLight

代碼:https://github.com/jiwoogit/StyleID
論文:https://jiwoogit.github.io/StyleID_site/

在這里插入圖片描述
為了解決風格遷移時在推理階段微調非常耗時的問題,提出操縱自注意力層的特征作為交叉注意力機制的工作方式,目標是通過利用預訓練的大規模文本到圖像擴散模型的生成能力來解決藝術風格遷移.在生成過程中,用風格形象的key和value來替代內容的key和value。 此外,引入查詢保存和注意力溫度縮放來減輕原始內容中斷的問題,并引入初始潛在自適應實例歸一化(AdaIN)來處理不和諧的顏色(未能傳輸樣式顏色)。 實驗結果表明,所提出的方法在傳統和基于擴散的風格轉移基線方面都超越了最先進的方法。

MOTIVATION

  • 基于擴散模型(Diffusion Models, DM)的風格遷移的一般方法及其局限性:

    • 一般方法利用預訓練的擴散模型的生成能力來進行風格遷移。一些研究專注于顯式解耦風格和內容,以實現可解釋和可控的風格遷移。其他一些研究專注于將風格圖像反轉(invert)到大規模文本到圖像擴散模型的文本潛在空間中。
    • 這些方法通常需要對每個風格圖像進行基于梯度的優化(fine-tuning)和文本反轉(在推理階段(inference-stage),這是一個耗時的過程。
    • DiffStyle是一種無需訓練的風格遷移方法,它避免了耗時的優化步驟。然而DiffStyle被認為難以應用于潛在擴散模型(Latent Diffusion Model, LDM),這限制了用戶利用大規模模型的顯著生成能力,因為DiffStyle無法很好地與這些模型集成。
  • 將免訓練風格遷移擴展到大規模預訓練 DM 上的應用

    • Plug-and-play表明,殘差塊和自注意力(SA)的attention map決定了生成圖像的空間布局
    • Prompt-to-Prompt通過替換從文本提示中獲得的交叉注意(CA)的鍵和值來本地編輯圖像,同時保留其原始注意圖。這說明了交叉注意力的鍵和值可以調整填充圖像內容的方式。
    • 所有這些工作都表明:1)attention maps決定空間布局,2)CA(交叉注意力) 的鍵和值調整要填充的內容。
  • 相應啟發:認為 SA 層是轉移風格的有效方法。

    • 與 CA 類似,替換 SA 的key和value(用style圖像的value和value替contern 圖像的key和value),將特定圖像的風格(textures)與不同圖像的內容(semantics and spatial layout)結合起來。
      在這里插入圖片描述
  • 此外,強調 SA 層在有風格遷移的特性:

    • 語義相似性的保持:在基于SA的風格遷移中,內容圖像的patches(查詢,query)如果具有語義上的相似性,它們會與相似的風格(鍵,key)相互作用。這意味著,即使在風格遷移之后,這些內容圖像區域之間的關系仍然得以保持。這有助于保持圖像內容的完整性和語義連貫性。也就是說,采用 SA 的風格遷移可以保留原始內容,因為具有相似性的內容塊往往會從相應的風格圖像塊接收相似的注意力分數。
      在這里插入圖片描述

    • 強大的特征表示能力:由于大規模擴散模型(Diffusion Model, DM)具有強大的特征表示能力,content image對應的每個查詢區域(each patch of the query)都能與具有相似紋理和語義的鍵(key)建立更高的相似性。換句話說,內容圖像中的每個小區域都能夠在風格圖像中找到具有相似紋理和語義的對應區域,這種相似性有助于模型在進行風格遷移時更好地保留內容圖像的語義信息,并根據風格圖像的紋理特征進行調整。這種特性允許模型更精確地識別和遷移與內容圖像區域相匹配的風格特征。這種相似性鼓勵模型基于內容和風格圖像之間局部紋理(例如邊緣)的相似性來進行風格遷移。
      在這里插入圖片描述

CONTRIBUTION

  • 提出了一種風格遷移方法,通過對自注意力特征的簡單操作來利用大規模預訓練的 DM; 用樣式替換內容的鍵和值,無需任何優化或監督(例如文本)。
  • 通過提出三個組件進一步改進風格遷移的樸素方法,以正確適應風格; 查詢保存(query preservation)、注意力溫度縮放(attention temperature scaling)和初始潛在 AdaIN(initial latent AdaIN)。
  • 對風格遷移數據集的大量實驗驗證了所提出的方法顯著優于以前的方法并實現了最先進的性能。

RELATED WORKS

Diffusion Model-based Neural Style Transfer

  • InST 引入了一種基于文本反轉的方法,旨在將給定的風格映射到相應的文本嵌入。
  • StyleDiffusion旨在通過引入基于CLIP的風格分離損失來解耦風格和內容,并微調DM以進行風格遷移。
  • DiffStyle 提出了一種免訓練的風格轉移方法,該方法利用 h-space并調整跳躍連接(skip connections),分別有效地傳達風格和內容信息。 然而,當 DiffStyle 應用于穩定擴散SD時,它們的行為與典型的風格轉移方法有很大不同; 不僅紋理也發生了變化,空間布局等語義也發生了變化。

Attention-based Image Editing in DM

預訓練的文本到圖像擴散模型在圖像編輯方面取得了顯著進展,這些模型被廣泛用于各種圖像編輯任務。

  • Prompt-to-Prompt方法:
    • 提出了一種基于文本的局部圖像編輯方法,通過操縱交叉注意力(cross-attention)圖來實現。
    • 該方法觀察到交叉注意力在建立圖像空間布局與文本提示中每個詞之間的關系方面起著重要作用。
    • Prompt-to-Prompt在保持注意力圖的同時改變交叉注意力(CA)的文本條件。 由于注意力圖影響輸出的空間布局,替換的文本條件決定了在生成的圖像中繪制什么,這些條件實際上是 CA 中的鍵和值。通過替換原始文本和交叉注意力圖為期望的版本,可以獲得與文本條件匹配的編輯圖像。
  • Plug-and-play方法:
    • “Plug-and-play”引入了一種文本引導的圖像到圖像翻譯方法。
    • 發現空間特征(即來自殘差塊的特征)和自注意力圖決定了合成圖像的空間布局。
    • 在給定文本條件下生成新圖像時,使用原始圖像的特征和注意力圖引導擴散模型,以保留原始的空間布局。
  • MasaCtrl方法:
    • “MasaCtrl”提出了一種使用文本提示進行一致性圖像編輯的相互自注意力控制方法。
    • 該方法保留了源圖像自注意力層的鍵和值,同時用期望的文本提示對模型進行條件化。

LDM(Latent Diffusion Model)

潛在擴散模型(LDM)是一種在低維潛在空間中訓練的擴散模型,目的是聚焦于數據的語義比特,降低計算成本。其利用預先訓練的編碼器encoder,將數據集中的全部圖像編碼為潛在空間 z中的表示。并在潛在空間 z上訓練擴散模型,訓練時需要預測在時間步t時潛在表示 z t z_t zt?對應的噪聲 ? \epsilon ?。文本利用stable diffusion:
L L D M = E z , ? , t [ ∥ ? ? ? θ ( z t , t , y ) ∥ 2 2 ] , L_{\mathrm{LDM}}=\mathbb{E}_{z,\epsilon,t}[\|\epsilon-\epsilon_\theta(z_t,t,y)\|_2^2], LLDM?=Ez,?,t?[???θ?(zt?,t,y)22?],

  • ?∈N(0,1)是噪聲
  • 在給定圖像 x ∈ R x∈R%{h×W×3} xR的情況下,編碼器E將x編碼為潛在表示 z ∈ R h × w × c z∈R^{h×w×c} zRh×w×c,并且解碼器從潛在表示重建圖像。
  • t是從{1,…,T}均勻采樣的時間步數
  • y是條件,即文本
  • ? θ ?_θ ?θ?是預測加到上的噪聲的unet神經網絡,每個block for each resolution依次包括殘差塊、自我注意塊(SA)和交叉注意塊(CA)

自注意力快

重點關注利用 SA 塊(自注意力機制塊)來傳輸style:
Q = W Q ( ? ) , K = W K ( ? ) , V = W V ( ? ) , ? o u t = A t t n ( Q , K , V ) = s o f t m a x ( Q K T d ) ? V , Q=W_{Q}(\phi),K=W_{K}(\phi),V=W_{V}(\phi),\\\phi_{\mathrm{out}}=\mathrm{Attn}(Q,K,V)=\mathrm{softmax}(\frac{QK^{T}}{\sqrt{d}})\cdot V, Q=WQ?(?),K=WK?(?),V=WV?(?),?out?=Attn(Q,K,V)=softmax(d ?QKT?)?V,

  • ? {\phi} ?:殘差快residual后面的特征
  • d:投影query的維度
  • W(.):投影層
  • y:我們不使用任何文本提示,y始終是空文本提示" "
  • ? o u t {\phi}_{out} ?out?:每個位置的注意力權重

METHODS

在這里插入圖片描述

Attention-based Style Injection

輸入風格

啟發與方法

  • 從“Prompt-to-Prompt”獲得啟發,文章提出一種操作自注意力層(SA)的方法,類似于交叉注意力(CA)。
  • 將風格圖像 I s I_s Is? 的特征作為條件,通過在生成過程中替換內容圖像的鍵和值,實現風格圖像紋理向內容圖像的遷移。

潛在特征獲取

  • 使用DDIM(Denoising Diffusion Implicit Models)反演技術來獲取內容和風格圖像的潛在特征,在反演過程中,收集風格圖像的自注意力層特征。
  • 定義從 t = 0 t=0 t=0 t = T t=T t=T 的時間步長集合,用于描述圖像從清晰狀態 z c 0 z_c^0 zc0? z s 0 z_s^0 zs0?(內容圖像和風格圖像)逐步轉化為 t = T t=T t=T時的高斯噪聲的擴散過程特征收集.在正向過程的每個時間步 t t t收集內容圖像的查詢特征 Q c t Q_c^t Qct?和風格圖像的鍵和值特征 K s t , V s t K_s^t, V_s^t Kst?,Vst?

風格注入

  • 通過復制內容潛在噪聲 z T c z_T^c zTc? 來將風格化處理后的潛在噪聲 (stylized latent noise) z T c s z_T^{cs} zTcs?初始化.
  • z t c s z_t^{cs} ztcs?逆擴散過程,將風格圖像的鍵 K s t K_s^t Kst?和值 V s t V_s^t Vst? 注入到自注意力層,替代原有的鍵 K c s t K_{cs}^t Kcst?和值 V c s t V_{cs}^t Vcst?

內容干擾問題以及查詢保留

原因:僅替換鍵和值可能導致內容干擾( content disruption).因為隨著逆擴散過程的進行,注意力值的變化會逐步改變風格化潛在表示的內容,由于注意力值的變化,原始內容的關鍵信息可能會逐漸丟失,導致生成的圖像內容與原始圖像內容有所不同。
在這里插入圖片描述

實現:混合風格后化的潛在表示的query和內容圖像的query

Q ~ t c s = γ × Q t c + ( 1 ? γ ) × Q t c s , ? o u t c s = A t t n ( Q ~ t c s , K t s , V t s ) , \tilde{Q}_{t}^{cs}=\gamma\times Q_{t}^{c}+(1-\gamma)\times Q_{t}^{cs},\\ \phi_{\mathrm{out}}^{\mathrm{cs}}=\mathrm{Attn}(\tilde{Q}_{t}^{cs},K_{t}^{s},V_{t}^{s}), Q~?tcs?=γ×Qtc?+(1?γ)×Qtcs?,?outcs?=Attn(Q~?tcs?,Kts?,Vts?),

  • Q c s t Q_{cs}^t Qcst?:風格化處理后的的潛在表示的query
  • Q c t Q_c^t Qct?: 內容圖像的query
  • γ \gamma γ :一個介于 0 到 1 之間的混合比例參數,通過調整 γ \gamma γ的值,可以控制風格遷移的程度。較高的 γ \gamma γ值會保留更多的原始內容信息,而較低的 γ \gamma γ值會加強風格遷移的效果
  • ? o u t \phi_{\mathrm{out}} ?out?:自注意力計算的輸出
  • 將這些操作應用于與局部紋理相關的解碼器的后面層(SD 中的第 7-2 個解碼器層)。

Attention Temperature Scaling

注意力圖是通過查詢(query)和鍵(key)特征之間的縮放點積來計算的。

  • 在訓練期間,SA層中的查詢和鍵特征來自同一圖像,因此它們之間的相似性很高。
  • 在風格遷移中,如果用風格圖像的鍵特征替換內容圖像的鍵特征,由于風格和內容很可能是不相關的,整體相似性會降低。這會導致計算出的注意力圖變得模糊或平滑,從而使輸出圖像變得不清晰,這對于同時捕捉內容和風格信息是不利的。

為了解決這個問題,作者測量了注意力圖的標準差,同時消除了基于注意力的風格注入。

  • 計算在應用 softmax 之前的attention map,即計算查詢和鍵之間的縮放點積,以得到注意力圖,實驗驗證了這種風格注入往往會降低整個時間步上注意力圖的標準差
    在這里插入圖片描述

  • 為了更清晰地校正注意力圖,我們引入了注意力溫度縮放參數。 具體來說,我們將進行softmax之前的注意力圖(attention map)乘以大于1的恒定溫度縮放參數τ:

    • A t t n τ ( Q t c s ~ , K t s , V t s ) = s o f t m a x ( τ Q t c s ~ ( K t s ) T d ) ? V t s , τ > 1 \mathrm{Attn}_{\tau}(\tilde{Q_{t}^{cs}},K_{t}^{s},V_{t}^{s})=\mathrm{softmax}(\frac{\tau \tilde{Q_{t}^{cs}}(K_{t}^{s})^{T}}{\sqrt{d}})\cdot V_{t}^{s},\tau>1 Attnτ?(Qtcs?~?,Kts?,Vts?)=softmax(d ?τQtcs?~?(Kts?)T?)?Vts?,τ>1

    • 使用 τ = 1.5 作為默認設置,這是整個時間步長的平均比率。 如圖 (b) 所示,確認它有效地校準了注意力圖的標準差,使其與其原始值相似.softmax之后的注意力圖將比其原始值更清晰

Initial Latent AdaIN

僅使用基于注意力的樣式注入進行的樣式遷移通常無法捕獲給定樣式的色調。

  • 圖5(a)表示:紋理和局部圖案成功轉移到內容圖像,同時內容圖像的色調仍然保留。
    在這里插入圖片描述
  • 圖5(b)表示即使注入樣式的查詢、鍵和值,生成的圖像仍然保留內容的色調。(為了確定 SA 中每個特征對色調的影響,還在樣式注入過程中添加了query。 然而,色調仍然與內容相似,因此自注意力特征對色調的影響較小)
    在這里插入圖片描述

分析了 DM 的另一個重要部分:initial latent noise

  • 擴散模型在合成純白色或黑色圖像時存在困難,傾向于生成具有中等顏色的圖像,因為初始噪聲是從均值為零、方差為單位的正態分布中采樣的。
  • 因此假設初始噪聲的統計數據對生成圖像的顏色和亮度有很大影響。

為了利用兩種初始潛在(initial latents)中的有價值信息,作者采用AdaIN(自適應實例歸一化)來調節初始潛在,以有效傳遞色調信息。

z T c s = σ ( z T s ) ( z T c ? μ ( z T c ) σ ( z T c ) ) + μ ( z T s ) , z_T^{cs}=\sigma(z_T^s)\left(\frac{z_T^c-\mu(z_T^c)}{\sigma(z_T^c)}\right)+\mu(z_T^s), zTcs?=σ(zTs?)(σ(zTc?)zTc??μ(zTc?)?)+μ(zTs?),

  • AdaIN通過調整初始潛在的通道均值和標準差來實現顏色風格的遷移
  • 若嘗試直接從 Z s T Z_s^T ZsT?生成圖像,合成結果的結構信息也會跟隨風格圖像,丟失內容的結構。
  • μ(?) 和 σ(?) :分別表示通道級別的均值(channel-wise mean)和標準差
  • 通過AdaIN處理后的初始潛在 z c s T z_{cs}^T zcsT? 保留了內容信息 z c T z_c^T zcT?,同時使通道均值和標準差與風格圖像 z s T z_s^T zsT?對齊。

Experiment

實驗設置

作者在LAION數據集上使用了Stable Diffusion 1.4預訓練模型,并采用了DDIM采樣方法,總共進行了50個時間步(t = {1, …, 50})的迭代。于超參數的默認設置,作者使用了γ = 0.75和τ = 1.5。

評估協議

AIGC常見圖像質量評估可以跳轉到這篇博客~
AIGC-常見圖像質量評估MSE、PSNR、SSIM、LPIPS、FID、CSFD,余弦相似度

ArtFID

為了避免傳統風格遷移方法可能過度擬合 Style Loss 的問題,作者采用了 ArtFID 作為評估指標,它綜合考慮了內容和風格的保持,并與人類判斷高度一致。

A r t F I D = ( 1 + L P I P S ) ? ( 1 + F I D ) ArtFID = (1 + LPIPS) · (1 + FID) ArtFID=(1+LPIPS)?(1+FID)

  • LPIPS 測量風格化圖像和相應內容圖像之間的內容保真度

    • Learned Perceptual Image Patch Similarity 學習感知圖像塊相似度,LPIPS是一種衡量圖像感知相似性的指標,它通過比較圖像塊的深層特征來工作,這些特征能夠捕捉到人類視覺系統中對圖像質量的感知。
    • LPIPS的值越低表示兩張圖像越相似,反之,則差異越大
    • d ( x , x 0 ) = ∑ l 1 H l W l ∑ h , w ∣ ∣ w l ⊙ ( y ^ h w l ? y ^ 0 h w l ) ∣ ∣ 2 2 d(x,x_0)=\sum_l\frac1{H_lW_l}\sum_{h,w}||w_l\odot(\hat{y}_{hw}^l-\hat{y}_{0hw}^l)||_2^2 d(x,x0?)=l?Hl?Wl?1?h,w?∣∣wl?(y^?hwl??y^?0hwl?)22?
      • d d d: x , x 0 x,x_0 x,x0?之間的距離
      • l l l層提取特征堆(feature stack)并在通道維度中進行單位規格化(unit-normalize)。
      • 利用向量 W l W_l Wl?來放縮激活通道數,最終計算 L 2 L_2 L2?距離。
      • 最后在空間上平均,在通道上求和。
  • FID 評估風格化圖像和相應風格圖像之間的風格保真度

    • F I D = ∥ μ r ? μ g ∥ 2 2 + T r ( Σ r + Σ g ? 2 ( Σ r Σ g ) 1 / 2 ) \mathrm{FID}=\|\mu_r-\mu_g\|_2^2+\mathrm{Tr}(\Sigma_r+\Sigma_g-2(\Sigma_r\Sigma_g)^{1/2}) FID=μr??μg?22?+Tr(Σr?+Σg??2(Σr?Σg?)1/2)
    • FID得分越低,表示生成圖像的特征分布與真實圖像的特征分布越接近,即生成模型的性能越好。
    • FID能夠捕捉到圖像的全局風格和分布特性

dataset

使用 MSCOCO 數據集的內容圖像和 WikiArt 數據集的風格圖像進行評估。 所有輸入圖像均經過中心裁剪,分辨率為 512 × 512。 此外,為了進行定量比較,從每個數據集中隨機選擇 20 個內容圖像和 40 個風格圖像,產生 800 個風格化圖像,如 StyTR2所做的那樣。

Content Feature Structural Distance-CFSD內容特征結構距離

在風格遷移評估中,內容保真度通常依賴于LPIPS距離,該指標使用了在ImageNet數據集上預訓練的AlexNet模型的特征空間,這使得LPIPS對紋理有偏見。圖像的風格信息可能會影響LPIPS分數,因為它偏向于紋理特征。為了減少風格信息對評估的影響,作者引入了CFSD,這是一種只考慮圖像塊之間空間相關性的新距離度量。

CFSD的計算步驟

  • 獲取特征圖:對于給定圖像 I I I,首先獲取特征圖 F ∈ R h × w × c F \in \mathbb{R}^{h \times w \times c} FRh×w×c,這是VGG19網絡中conv3層的輸出特征。
  • 計算相似性矩陣:計算特征圖 F F F中每對特征之間的相似性,得到相似性矩陣 M = F × F T M = F \times F^T M=F×FT,其中 M ∈ R h × w × h × w M \in \mathbb{R}^{h \times w \times h \times w} MRh×w×h×w
  • 應用softmax操作:對相似性矩陣 M M M 的每個元素應用softmax操作,將其建模為概率分布,得到相關性矩陣 S = [ softmax ( M i ) ] h × w i = 1 S = [\text{softmax}(M_i)]_{h \times w}^{i=1} S=[softmax(Mi?)]h×wi=1?,其中 M i ∈ R 1 × h × w M_i \in \mathbb{R}^{1 \times h \times w} Mi?R1×h×w 是第 i i i 個圖像塊與其他塊的相似性。
  • 計算KL散度:CFSD定義為兩個相關性矩陣之間的Kullback-Leibler散度(KL-divergence)。

CFSD公式

C F S D = 1 h w ∑ i = 1 h w D K L ( S i c ∣ ∣ S i c s ) , \mathrm{CFSD}=\frac{1}{hw}\sum_{i=1}^{hw}D_{\mathrm{KL}}(S_{i}^{c}||S_{i}^{cs}), CFSD=hw1?i=1hw?DKL?(Sic?∣∣Sics?),

  • S i c S_{i}^{c} Sic?:內容圖像對應的相關性矩陣的第i個元素,這些矩陣是通過計算圖像特征圖(例如,VGG19網絡的conv3層輸出)中每對特征之間的相似性得到的。
  • S i c s S_{i}^{cs} Sics?:風格圖像對應的相關性矩陣的第i個元素
  • D K L D_{KL} DKL?:KL散度
#F:\AIGCprojects\StyleID\evaluation\eval_artfid.py
def compute_patch_simi(path_to_stylized, path_to_content, batch_size, device, num_workers=1):"""Computes the distance for the given paths.Args:path_to_stylized (str): Path to the stylized images.path_to_style (str): Path to the style images. [注:這里應該為 path_to_content,修正為 path_to_content]batch_size (int): Batch size for computing activations.content_metric (str): Metric to use for content distance. Choices: 'lpips', 'vgg', 'alexnet' [注:缺少 content_metric 參數]device (str): Device for computing activations.num_workers (int): Number of threads for data loading.Returns:(float) FID value. [注:文檔中寫的是 FID value,但函數名為 compute_patch_simi,可能存在混淆,需要核對和確認]"""device = torch.device('cuda') if device == 'cuda' and torch.cuda.is_available() else torch.device('cpu')# 根據路徑獲取圖像路徑并排序以匹配樣式化圖像與對應的內容圖像stylized_image_paths = get_image_paths(path_to_stylized, sort=True)content_image_paths = get_image_paths(path_to_content, sort=True)# 確保樣式化圖像和內容圖像數量相等assert len(stylized_image_paths) == len(content_image_paths), 'Number of stylized images and number of content images must be equal.'# 定義圖像轉換方法style_transforms = ToTensor()# 創建樣式化圖像的數據集和數據加載器dataset_stylized = ImagePathDataset(stylized_image_paths, transforms=style_transforms)dataloader_stylized = torch.utils.data.DataLoader(dataset_stylized,batch_size=batch_size,shuffle=False,drop_last=False,num_workers=num_workers)# 創建內容圖像的數據集和數據加載器dataset_content = ImagePathDataset(content_image_paths, transforms=style_transforms)dataloader_content = torch.utils.data.DataLoader(dataset_content,batch_size=batch_size,shuffle=False,drop_last=False,num_workers=num_workers)# 初始化用于計算距離的度量類metric = image_metrics.PatchSimi(device=device).to(device)dist_sum = 0.0N = 0pbar = tqdm(total=len(stylized_image_paths))# 遍歷樣式化圖像和內容圖像的批次for batch_stylized, batch_content in zip(dataloader_stylized, dataloader_content):# 在不計算梯度的上下文中進行操作,節省內存和計算資源with torch.no_grad():# 計算當前批次的距離batch_dist = metric(batch_stylized.to(device), batch_content.to(device))N += batch_stylized.shape[0]dist_sum += torch.sum(batch_dist)pbar.update(batch_stylized.shape[0])pbar.close()return dist_sum / Ndef compute_cfsd(path_to_stylized, path_to_content, batch_size, device, num_workers=1):"""Computes CFSD for the given paths.Args:path_to_stylized (str): Path to the stylized images.path_to_content (str): Path to the content images.batch_size (int): Batch size for computing activations.device (str): Device for computing activations.num_workers (int): Number of threads for data loading.Returns:(float) CFSD value."""print('Compute CFSD value...')# 計算 Patch Similarity,該函數返回樣式化圖像和內容圖像的距離值simi_val = compute_patch_simi(path_to_stylized, path_to_content, 1, device, num_workers)# 將距離值保留四位小數simi_dist = f'{simi_val.item():.4f}'return simi_dist
#evaluation\image_metrics.py
class PatchSimi(nn.Module):def __init__(self, device=None):# 初始化函數super(PatchSimi, self).__init__()# 加載預訓練的 VGG19 模型,并移到指定設備上進行評估self.model = models.vgg19(pretrained=True).features.to(device).eval()# 指定層名稱和替換名稱的映射self.layers = {"11": "conv3"}# 圖像歸一化的均值和標準差self.norm_mean = (0.485, 0.456, 0.406)self.norm_std = (0.229, 0.224, 0.225)# KL 散度損失函數self.kld = torch.nn.KLDivLoss(reduction='batchmean')self.device = devicedef get_feats(self, img):features = []# 遍歷 VGG19 模型的各層并提取特征for name, layer in self.model._modules.items():img = layer(img)if name in self.layers:features.append(img)return featuresdef normalize(self, input):# 圖像歸一化處理return transforms.functional.normalize(input, self.norm_mean, self.norm_std)def patch_simi_cnt(self, input):b, c, h, w = input.size()# 轉置和重塑特征input = torch.transpose(input, 1, 3)features = input.reshape(b, h*w, c).div(c)feature_t = torch.transpose(features, 1, 2)# 計算內容圖像的特征相似度patch_simi = F.log_softmax(torch.bmm(features, feature_t), dim=-1)return patch_simi.reshape(b, -1)def patch_simi_out(self, input):b, c, h, w = input.size()# 轉置和重塑特征input = torch.transpose(input, 1, 3)features = input.reshape(b, h*w, c).div(c)feature_t = torch.transpose(features, 1, 2)# 計算樣式化圖像的特征相似度patch_simi = F.softmax(torch.bmm(features, feature_t), dim=-1)return patch_simi.reshape(b, -1)def forward(self, input, target):src_feats = self.get_feats(self.normalize(input))target_feats = self.get_feats(self.normalize(target))init_loss = 0.# 計算各層的 KL 散度并求和作為初始損失值for idx in range(len(src_feats)):init_loss += F.kl_div(self.patch_simi_cnt(src_feats[idx]), self.patch_simi_out(target_feats[idx]), reduction='batchmean')

效果

與傳統風格遷移方法的比較:時間快,效果好
在這里插入圖片描述

  • 在ArtFID(藝術風格遷移評價指標)方面,作者的方法大大超越了傳統方法,ArtFID與人類偏好一致。
  • 在FID(Fréchet Inception Distance)方面,作者的方法記錄了最低的分數,表明風格化圖像與目標風格高度相似。
  • 在內容保真度指標CFSD(Content Feature Structural Distance)和LPIPS(Learned Perceptual Image Patch Similarity)方面,作者的方法也展現出了優越的得分。
  • 他們的方法可以通過調整參數γ來任意調整風格遷移的程度,并且在匹配LPIPS(內容)的值時,在FID(風格)方面顯著超越了其他所有方法。
  • 作者的方法比其他方法顯著更快,即使使用了大規模的擴散模型。這種更快的速度來自于作者的方法可以使用更少的DDIM反演步驟,因為在反演步驟中額外利用了收集到的特征,大大降低了對內容和風格完美反演的必要性

作者的方法在保持內容圖像的結構信息方面表現更好,同時能夠有效地遷移風格:
在這里插入圖片描述

  • 以圖6為例,作者展示了他們的方法在保留橋梁結構方面的優勢,而其他baseline在保持結構或遷移風格方面存在挑戰。
  • 相比之下,其他基線在給定任意內容風格對時,往往會丟失內容的結構或未能成功遷移風格。例如,DiffuseIT和DiffStyle在生成形狀合理且視覺上可信的圖像或保留原始內容方面存在問題。另一方面,InST雖然能夠合成逼真的圖像,但在風格遷移或改變圖像內容方面存在挑戰。

在這里插入圖片描述

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

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

相關文章

python3.12虛擬環境下ModuleNotFoundError: No module named ‘distutils‘的解決辦法

python3.12下面venv虛擬環境,安裝pwntools,運行Ropgadget提示:ModuleNotFoundError: No module named distutils’的解決辦法 (py3xt) :~/py3/bin$ ROPgadget Traceback (most recent call last):File "/home/a24/py3xt/bin/ROPgadget…

你真的會使用Vue3的onMounted鉤子函數嗎?Vue3中onMounted的用法詳解

目錄 一、onMounted的前世今生 1.1、onMounted是什么 1.2、onMounted在vue2中的前身 1.2.1、vue2中的onMounted 1.2.2、Vue2與Vue3的onMounted對比 1.3、vue3中onMounted的用法 1.3.1、基礎用法 1.3.2、順序執行異步操作 1.3.3、并行執行多個異步操作 1.3.4、執行一次…

Rust腐蝕怎么用服務器一鍵開服聯機教程

1、進入控制面板 首次登陸需要點擊下方重置密碼,如何再點擊登錄面板,點擊后會跳轉到登錄頁面,輸入用戶名和密碼登錄即可 2、設置游戲端口 由于腐蝕的設置需要三個端口,它們用于游戲端口(必須為首選端口)&a…

jenkins 部署golang 應用到k8s與測試環境

1.宿主機安裝jenkins 不要用docker 為什么:docker jenkins你只有jenkins, 你想做golang編譯的情況,它的鏡像里面缺少go環境。 而宿主機安裝的情況,jenkins是可以通過環境變量修改來訪問宿主機里面安裝的內容。 2.插件 // docke…

FFMPEG 解碼過程初步學習

1. 視頻文件解碼過程 解碼過程 步驟如下: 視頻文件(封裝格式,MP4/FLV/AVI 等)獲取視頻格式信息等解復用為Stream 流, 準備解碼用的Codec將Stream 流 使用解碼器解為Raw 格式針 1.1 音視頻格式填充: int…

找不到msvcr110.dll無法繼續執行代碼的原因分析及解決方法

在計算機使用過程中,我們經常會遇到一些錯誤提示,其中之一就是找不到msvcr110.dll文件。這個錯誤通常發生在運行某些程序或游戲時,系統無法找到所需的動態鏈接庫文件。為了解決這個問題,下面我將介紹5種常見的解決方法。 一&#…

Vue3實現上傳照片以及回顯

Vue3實現上傳照片以及回顯 一、安裝Element Plus二、案例1、基本示例 三、進階案例1、代碼2、代碼解釋1、上傳接口展示2、查詢接口展示組件屬性 3、效果展示 一、安裝Element Plus 使用 Element Plus 組件庫來實現上傳照片和回顯同樣很簡單,你可以按照以下步驟進行…

用棧實現隊列(C語言)

目錄 題目題目分析 代碼棧的實現結構體。棧的初始化棧的銷毀 入棧刪除查找頂部數據判空 答案結構體初始化插入數據刪除數據獲取隊列開頭元素判空銷毀棧 題目 題目分析 鏈接: 題目 請你僅使用兩個棧實現先入先出隊列。隊列應當支持一般隊列支持的所有操作(push、po…

數據庫查詢中——having與where的用法

數據庫查詢中——having與where的用法 HAVING 子句在 SQL 中主要用于與 GROUP BY 子句一起使用,以過濾聚合函數的結果。當你使用 GROUP BY 對數據進行分組,并希望基于這些分組后的數據進一步過濾時,你會使用 HAVING 子句。 HAVING 子句通常與…

pyside6下沒有designer.exe、pyside6-uic.exe等

使用conda安裝的pyside6(conda install pyside6),發現pyside6目錄下沒有designer.exe、pyside6-uic.exe等;designer.exe在Miniconda3/Library/bin下 pyside6-uic.exe、pyside6-rcc.exe在Miniconda3\Scripts下 但是 使用pip安裝…

企業內網自建yum源 倉庫 | rsync同步方案

文章目錄 1.背景概述2.獲取軟件文件2.1 準備同步腳本如下 2.2 準備例外文件清單2.3 統計源端大小2.3 運行腳本開始同步文件 3. 創建網頁服務3.1 安裝nginx并啟用3.2 修改ngnix配置文件 4 創建repo索引和客戶文件4.1 創建repo索引4.2 創建客戶端文件4.3 客戶端下載repo文件 1.背…

用 Python 編寫網絡爬蟲:從網頁獲取數據并存儲到 Excel 文件

在本篇博客中,我們將介紹如何使用 Python 編寫一個簡單的網絡爬蟲,用于從網頁中提取數據,并將這些數據存儲到 Excel 文件中。我們將使用 Python 中的一些庫來實現這個功能,包括 urllib.request、BeautifulSoup 和 openpyxl。 1. 網絡爬蟲的基本原理 網絡爬蟲是一種程序,…

【MyBatis】MyBatis解析全局配置文件源碼詳解

目錄 一、前言 思維導圖概括 二、配置文件解析過程分析 2.1 配置文件解析入口 2.2 初始化XMLConfigBuilder 2.3 XMLConfigBuilder#parse()方法:解析全局配置文件 2.3.1 解析properties配置 2.3.2 解析settings配置 2.3.2.1 元信息對象(MetaClas…

解決移植Metasploitable3到VM虛擬機無網絡的問題

第一步 導入后不要開機,先在虛擬機設置里面將原有的兩個網絡適配器移除。 第二步 接著在選項里面,在客戶機操作系統里面,選擇Microsoft Windwos(W), 版本選擇Windows Server 2008 R2 x64 第三步 先打開虛擬機,然后…

Python_文件操作_學習

目錄 一、關于文件的打開和關閉 1. 文件的打開 2.文件的關閉 二、文件的讀取 1. 文件的讀_r 2. 使用readline 3.使用readlines 三、文件的寫入 1. 文本的新建寫入 2.文本的追加寫入 四、文件的刪除和重命名 1.文件的重命名 2.文件的刪除 五、文件的定位讀寫 1.t…

RK 11.0 多屏模式下修改鼠標進入方式

要求:主屏在左,副屏在右。這種排列情況下鼠標僅可通過主屏的最右側移入副屏的最左側,或從副屏的最左側移入主屏最右側。 1.RK默認設計 1.1 RK的代碼設計是當sys.mouse.presentation1時,鼠標在屏幕邊緣的時候就會移入另一個屏幕 …

CISP-PTE筆記整理

目錄 漏洞基礎代碼合集 網安基礎 常見名詞 信息收集 環境和變量的配置 HTTP請求頭基礎 HTTP基礎知識 MySql基礎語法 各系統的敏感目錄路徑 工具使用 Hackbar的tips java下載配置 Xray下載配置&使用 burp爆破賬號密碼和C段&注意事項 SqlMap爆破&創建…

Unity Miscellaneous入門

概述 在Unity中有非常多好用的組件,也是Unity為我們提供的方便的開發工具,它的功能可能不是主流的內容,比如渲染,音樂,視頻等等,所有Unity把這些內容統一歸到了一個雜項文件組中。 Unity組件入門篇總目錄-…

Python線程

Python線程 1. 進程和線程 先來了解下進程和線程。 類比: 一個工廠,至少有一個車間,一個車間中至少有一個工人,最終是工人在工作。 一個程序,至少有一個進程,一個進程中至少有一個線程,最終…

langchain實戰-從0到1搭建ai聊天機器人

介紹 當前,人工智能大模型公司如雨后春筍般迅速涌現,例如 OpenAI、文心一言、通義千問等,它們提供了成熟的 API 調用服務。然而,隨之而來的是不同公司的繁瑣協議接入過程,這讓許多開發者感到頭疼不已。有沒有一種統一…