天天看點

BokehMe: When Neural Rendering Meets Classical Rendering

論文位址:https://openaccess.thecvf.com/content/CVPR2022/papers/Peng_BokehMe_When_Neural_Rendering_Meets_Classical_Rendering_CVPR_2022_paper.pdf

代碼位址:https://github.com/JuewenPeng/BokehMe

BokehMe: When Neural Rendering Meets Classical Rendering

摘要

我們提出了 BokehMe,這是一個混合的虛化渲染架構,将神經渲染器與經典的實體驅動渲染器結合在一起。給定單個圖像和可能不完美的視差圖,BokehMe 可以生成具有可調節的模糊大小、焦平面和光圈形狀的高分辨率照片般逼真的虛化效果。為此,我們分析了經典的基于散射的方法的誤差,并推導出計算誤差圖的公式。基于這個公式,我們通過基于散射的方法實作了經典渲染器,并提出了一種兩階段神經渲染器來修複經典渲染器中的錯誤區域。神經渲染器采用動态多尺度方案來有效處理任意模糊大小,并經過訓練以處理不完美的視差輸入。實驗表明,我們的方法在具有預測視差的合成圖像資料和真實圖像資料上都優于以前的方法。進一步進行使用者研究以驗證我們方法的優勢。

1. 介紹

虛化(bokeh)效果指的是鏡頭在照片中呈現焦外模糊的方式,如下圖 1 所示。通過不同的鏡頭設計和配置,可以創造各種虛化風格。例如,光圈可以控制虛化球的形狀。經典渲染方法[6,20,31,40]可以通過控制模糊核的形狀和大小來輕易改變虛化的風格。但是它們的缺點是在深度不連續處會有僞影。神經渲染方法[11,25,32]通過從圖像統計中學習來處理這個問題,不過它們的問題是很難模拟真實的虛化球并且僅能産生訓練資料中的虛化風格。另外,之前的神經渲染方法缺乏在高分辨率圖檔上産生大模糊大小的機制,原因是神經網絡固定的感受野以及受限于訓練資料的模糊大小。

BokehMe: When Neural Rendering Meets Classical Rendering

為了實作沒有僞影以及高度可控的虛化效果,我們提出了一個新的混合架構,命名為 BokehMe,它通過融合經典渲染器和神經渲染器的結果來充分利用各自的優點,如下圖 2 。我們将基于散射的方法[31]作為我們的經典渲染器。為了确定這種方法可能在哪個區域渲染出明顯的邊界僞影,我們對鏡頭系統進行了模組化,并對基于散射的渲染和真實渲染之間的誤差進行了綜合分析。求導出一個軟但緊密的誤差圖,可以用于識别帶有邊界僞影的區域。采用這個誤差圖将僞影區域替換為神經渲染的結果,我們可以保留經典渲染器的虛化風格而又不會出現明顯的視覺僞影。對于神經渲染器,為了打破模糊大小限制,我們将其分解為兩個子網絡:自适應渲染網絡(ARNet)和疊代上采樣網絡(IUNet)。 在 ARNet 中,我們自适應地調整輸入圖像的大小并生成低分辨率的虛化圖像。 然後,IUNet 則是基于初始的高分辨率輸入圖像疊代引導的對低分辨率虛化圖像進行上采樣。 是以,我們的神經渲染器可以處理任意大的模糊大小。

BokehMe: When Neural Rendering Meets Classical Rendering

本文的主要貢獻總結如下:

  • 我們提出了一個結合一個經典渲染器和一個神經渲染器的新架構,進而實作逼真的和高度可控的虛化渲染;
  • 我們分析了鏡頭系統然後提出了一個誤差圖公式來有效的融合經典渲染和神經渲染;
  • 我們提出了一個兩階段的神經渲染器,它采用自适應調整大小以及疊代上采樣方法來對高分辨率圖檔處理任意的模糊大小,并且它對可能不完美的視差輸入比較魯棒;

另外,由于在可控虛化渲染領域缺乏測試資料,我們貢獻了一個新的 benchmark:BLB,由Blender 2.93 [5]合成,與EBB400一起,從 EBB! [11]中處理所得。 由于虛化效果的評估具有主觀性,是以我們還對 iPhone 12 拍攝的圖像進行了使用者研究。大量結果表明,BokehMe 可以渲染出逼真的圖像并保持虛化風格的多樣性。

2. 相關工作

經典渲染器。經典渲染可以分為兩類:對象空間方法和圖像空間方法。對象空間方法[1,16,33,39]基于光線追蹤可以渲染精确的結果,但大部分都非常耗時而且需要完整的 3D 場景資訊,是以并不實用。相比之下,圖像空間方法[3,4,10,29,38]僅需要一張圖檔和對應的深度圖,這都非常容易實作。最近這幾年,越來越多的方法[6,20,23,27,28,31,34,40]結合了不同的子產品,比如深度估計,語義分割以及經典渲染,來建構一個自動渲染的系統。為了防止背景顔色滲入前景,大多數方法根據估計的深度圖将圖像分解為多個層,并從後向前執行渲染。

盡管經典渲染是靈活的,但這種範式在深度不連續處存在僞影,尤其是當焦平面以背景為目标時。

神經渲染器。為了提高效率和避免邊界僞影,最近也有很多工作采用神經網絡來模拟渲染處理。比如,Nalbach 等人[21]和 Xiao 等人[35] 采用清晰圖檔和對應完美的深度圖來訓練網絡實作虛化效果。通過對 OpenGL 着色器和 Unity 引擎 [30] 建立的合成資料進行訓練,可以有效地緩解邊界僞影。 然而,在現實世界中并不總是很容易獲得完美的深度圖。 王等人 [32] 是以提出了一種自動渲染系統,包括深度預測、鏡頭模糊和引導上采樣,以從單個圖像生成高分辨率景深 (DoF) 圖像。 此外,最近還研究了編碼器-解碼器網絡 [9,11–13,25],它以端到端的方式将全焦點圖像映射到淺景深圖像。 與上述方法不同,Xu 等人[37]專注于全自動肖像渲染。 他們使用循環過濾器 [18] 來近似基于條件随機場的渲染方法,并實作顯着的速度提升。

然而,神經渲染的主要問題是缺乏控制能力。對一個訓練好的神經網絡,虛化風格無法改變并且模糊範圍也是有限的。另外,網絡産生的虛化球是不真實的,因為網絡會傾向于學習簡單的模糊效果。

3. BokehMe:一個混合的渲染架構

如下圖 3 所示,我們的架構通過輸入一張清晰圖檔 I,一張視差圖 D 以及由兩個渲染器:經典渲染器和神經渲染器控制的參數生成一張虛化圖檔 B。他們的渲染結果基于一個誤差圖 E 進行融合,該誤差圖 E 從經典渲染器中識别出潛在的錯誤區域。控制參數包括模糊參數 K、重聚焦視差 、伽馬值 γ 和一些關于散景風格的參數,例如光圈形狀 . 具體而言,K反映了整個圖像的模糊量。 df 确定焦平面的視差(反深度)。 γ,用于伽馬校正,控制虛化球的亮度和顯着性。

BokehMe: When Neural Rendering Meets Classical Rendering

3.1 經典渲染器和誤差分析

經典渲染器。我們期望經典渲染器在深度連續區域渲染真實的虛化效果。在對比了不同的方法後,我們發現基于散射的逐像素渲染方法[23,31]在深度不連續處也會有嚴重的滲色僞影,但在這些區域的誤差相對較小。該方法的核心思想是将每個像素分散到其相鄰區域,它們之間的距離小于像素的模糊半徑。 如 [31, 38] 中所讨論的,給定像素的視差 d,其模糊半徑可以通過下式計算:

BokehMe: When Neural Rendering Meets Classical Rendering

我們采用 CuPy 包來實作算法,這可以實作顯著的并行速度提升(參考補充材料)。由于從場景輻照度到圖像強度的轉換是非線性的 [38],是以在渲染之前和之後應用了額外的伽馬校正 [17]。

鏡頭系統。為了了解為什麼基于散射的方法會導緻深度不連續處的誤差,我們模組化了一個虛拟透鏡系統。 對于空間中存在兩個對象的簡單場景(圖 4),我們在深度不連續處推導出 8 個渲染案例(此處顯示了 2 個案例,而其他案例顯示在補充材料中)。 以中心像素(黑點)為例,隻有紅色的梯度前景平面上的相鄰像素和藍色的梯度背景平面上的相鄰像素才能傳遞到中心像素。 顯然,基于散射的渲染與真實渲染不同。

BokehMe: When Neural Rendering Meets Classical Rendering

初始的誤差圖。我們的目标是獲得一個錯誤圖來識别經典渲染器錯誤渲染的區域。 稍後,我們将訓練一個神經網絡來預測本節中制定的誤差圖。 讓 E∗ 表示目标誤差圖。 由于隻有深度邊界的散射半徑内的區域可能與真實渲染有顯着差異,是以 E* 可以保守地表示為深度邊界的空間變膨脹,膨脹大小取決于最大模糊半徑 位于深度邊界兩側的像素。 以圖 4 中的場景為例,E∗ 的第 i 個元素可以定義為

BokehMe: When Neural Rendering Meets Classical Rendering

其中 可以看作是 的一個變量, 是另一個深度平面的第 i 個像素最近像素的索引。 是兩個像素的距離。 和

改進的誤差圖。考慮到經典渲染器在深度連續區域中可以生成可控虛化風格的高品質結果的事實,我們希望适當地縮小和軟化初始誤差圖,以在融合邊界保留更多來自經典渲染器的散景結果并且沒有明顯的僞影。

通過補充材料中顯示的理論和數值分析,我們得出對于每個像素,基于散射的渲染結果與真實渲染結果之間的色差為

BokehMe: When Neural Rendering Meets Classical Rendering

其中 和 是渲染前第 i 個像素和第 個像素的顔色。 是兩個變量 的函數,其中 的定義如公式(2)所示,而

BokehMe: When Neural Rendering Meets Classical Rendering

它表示兩個像素中更小的和更大的模糊核半徑的比例。。 随重新聚焦的視差、正在處理的像素和深度邊界之間的最短距離而變化。 為清楚起見,我們假設 | | = 1 并在圖 5 的前兩列中繪制 Hi 的圖形。基于觀察到 Hi 随着

BokehMe: When Neural Rendering Meets Classical Rendering
BokehMe: When Neural Rendering Meets Classical Rendering

其中 是兩個超參數。當設定 的時候,該公式等于公式 2。請注意,在我們的實作中,我們将第二個名額函數項替換為平滑項,即 0.5 +0.5 tanh (10 ())。 在比較了使用不同超參數訓練的模型(在補充材料中)之後,我們根據經驗設定 δ1 = 4 和 δ2 = 2/3。我們在圖 5 的最後一列還展示了初始 (等式 2)和改進後的 的圖 (Eq. 5) 。注意,當 0 ≤ βi ≤ 1 時,如果 βi > 1,我們定義 = 0。可以觀察到改進後的 比最初的要更軟更緊密,仍然覆寫了色差較大的區域。 另一個實際示例如圖 6 所示。

BokehMe: When Neural Rendering Meets Classical Rendering

3.2 神經渲染器和模型訓練

為了處理在深度不連續處的渲染問題和解決模糊範圍的限制問題,我們提出了一個包含兩個子網絡的神經渲染器:ARNet 和 IUNet(如圖 7 所示)。為了簡化神經渲染器的輸入,我們基于公式 1 定義了一個帶符号的散焦圖(defocus map)S:

BokehMe: When Neural Rendering Meets Classical Rendering

它對深度關系和空間變化模糊半徑的資訊進行編碼。 為了比對經典渲染器中的伽馬校正,我們使用一個填充了歸一化伽馬值的貼圖作為附加輸入。

BokehMe: When Neural Rendering Meets Classical Rendering

ARNet自适應調整輸入圖檔的大小,然後輸出一個誤差圖和低分辨率的虛化圖,如圖 8 所示。自适應調整層包含兩個步驟,第一步是計算下采樣的比例因子:

BokehMe: When Neural Rendering Meets Classical Rendering

其中max(|S|) 表示整張圖的最大模糊半徑。 則是我們給網絡設定的最大模糊半徑。第二步則是對所有圖檔進行下采樣然後根據

BokehMe: When Neural Rendering Meets Classical Rendering

IUNet 對低分辨率的虛化圖

BokehMe: When Neural Rendering Meets Classical Rendering

然而,随着疊代的進行,縮放後的散焦值可能會超出神經網絡的可接受範圍[]。幸運的是,直接雙線性上采樣引起的模糊對于虛化模糊量大的區域并不明顯。是以,我們可以隻細化散焦值在該範圍内的區域。為此,我們首先對超出範圍的散焦值進行clip,以確定後續網絡可以正常工作而不會崩潰。然後,我們對擴張的散焦圖 進行門檻值化以生成一個蒙版,該蒙版表示沒有散焦裁剪的有效渲染區域。在這些區域中,我們使用網絡的輸出,而對于其餘區域,我們使用雙線性上采樣後的輸入散景圖像。在這裡,我們使用 代替 S,因為散焦裁剪造成的負面影響會在渲染過程中擴散。 的詳細計算在補充材料中。總體而言,随着疊代次數的增加,虛化圖像的分辨率會更高,但網絡細化的有效區域會變小。換句話說,焦平面附近的區域将被細化更多次。

BokehMe: When Neural Rendering Meets Classical Rendering

最後,遵循 alpha 融合[19,36],我們采用預測的誤差圖 E 來融合經典渲染器的虛化結果和神經渲染器的虛化結果 :

BokehMe: When Neural Rendering Meets Classical Rendering

損失函數。我們分别訓練 ARNet 和 IUNet。當訓練 ARNet 的時候,自适應調整層并不會使用。B 是 和

BokehMe: When Neural Rendering Meets Classical Rendering

其中帶有*的是 GT, 表示圖像梯度。

BokehMe: When Neural Rendering Meets Classical Rendering

記住,為了快速收斂,處理最終結果 B,還會采用中間結果 和

實作。我們采用 PyTorch[22]來實作。為了訓練神經渲染器,我們采用一個簡單的光線追蹤方法來合成一個虛化資料集。這個資料集包含 150 個場景,每個場景包含一張清晰圖檔,一個範圍在 [0,1] 的視差圖,一組帶有 2 個模糊參數(12,24)、20 個散焦視差(0.05,0.1,…,1)、5 個 gamma 值(1,2,…,5)的虛化圖檔。我們采用模糊參數為 12 的資料訓練 ARNet,模糊參數是 24 的資料訓練 IUNet。我們采用[35]中相同的資料預處理設定。為了提高泛化性,我們對輸入的視差圖采用随機高斯模糊、膨脹和腐蝕操作進行資料增強。ARNet 和 IUNet 的可接受散焦範圍都設定為訓練的時候是[-12, 12],推理時是 [-10, 10]。兩個網絡都訓練 50 個 epochs,batch 大小是 16.學習率設定為

4. 實驗

4.1 測試資料

對于所有測試資料,不失一般性,我們假設光圈形狀為圓形,伽馬值為 2.2,為不同方法建立公平競争環境。所有資料集的視差圖歸一化到[0,1]的範圍。

BLB 包含了由 Blender2.93 合成的 500 張測試樣本。具體來說,我們從不同版本 [2] 下載下傳了 10 個 Blender 閃屏的 3D 場景模型。 對于每個場景模型,我們使用 Cycles Engine [5] 來渲染全焦點圖像、視差圖和具有 5 個模糊參數和 10 個重新聚焦視差的散景圖像堆棧。 圖像分辨率設定為 1920 × 1080。

EBB400包含了 400 對大光圈和小光圈 的圖像對,它們是随機從 EBB![11]中挑選的。對每個樣本,我們采用 DPT[26]來預測一個視差圖,并手動标注一個邊界框來訓示焦平面區域,是以這樣我們就可以通過取邊界框内視差圖的中值來獲得重新聚焦的視差[23]。 圖像分辨率約為 1536 × 1024。

IPB 包含了 40 張用 iPhone12 人像模式拍照的圖檔。對每個場景,我們首先從 iPhone 12 導出清晰圖像和經過人像模式後處理的虛化圖像。然後,使用線上照片編輯器 Photopea [24],我們可以進一步提取視差圖和虛化圖像的輻照度圖。 所有圖像均以 3024 × 4032 的分辨率垂直拍攝。

4.2 對比方法

我們對比了兩類方法:經典渲染方法和神經渲染方法。為了簡便,我們在下文分别用 C 和 N 表示它們。為了公平比較,我們為所有方法提供相同的視差圖,我們隻保留它們的虛化渲染子產品,而其他的被丢棄。

  • VDSLR [38] (C) 是一種像素級僞光線追蹤方法,通過随機交叉搜尋進行加速。
  • SteReFo [6] (C) 根據深度将圖像分解為多個圖層,并從後到前渲染圖像。
  • RVR [40] (C) 類似于SteReFo。然而,正如[34]中所讨論的,原始RVR缺乏權重歸一化,導緻不同深度層之間出現嚴重的僞影,是以我們添加了額外的權重歸一化,如SteReFo,并用上标 † 标記這個修改後的方法。
  • DeepLens [32] (N) 在自制的合成資料集上進行訓練,可以生成高分辨率輸出。
  • DeepFocus [35] (N) 根據 Unity 資料 [30] 進行訓練。由于DeepFocus無法處理較大的模糊尺寸,我們将論文中提出的自适應調整大小層應用于其模型的頭部,并将其結果直接上采樣為原始分辨率。同樣,此修改後的方法使用上标†進行标記。

4.3 Zero-shot Cross-dataset Evaluation

遵循[6,35,37],采用 PSNR 和 SSIM 作為評價名額。我們在 BLB 資料集上測試 BokehMe。正如 Table1 所示,與其他最先進的方法相比,BokehMe在所有模糊級别中都獲得了最佳的PSNR和SSIM分數,并且我們的最終模型結合了經典渲染器和神經渲染器,優于單獨的模型,證明了兩個渲染器之間的強大互補性。此外,随着模糊程度的提高,經典的渲染方法變得更加耗時,而神經渲染方法則保持了高效率。我們還在圖 10 中顯示了一些視覺結果。人們可以觀察到:(i)當重新聚焦背景時,經典方法的性能在深度不連續性時會下降;(ii) DeepLens在深度不連續處呈現平滑的結果,但它們似乎與實際渲染不符;(iii) 與DeepFocus相比,DeepFocus†避免了在處理大模糊尺寸時的損壞,但在對焦區域周圍會産生模糊的結果。(iv)我們的方法為資訊焦點和失焦區域呈現最逼真的虛化效果。

BokehMe: When Neural Rendering Meets Classical Rendering
BokehMe: When Neural Rendering Meets Classical Rendering

由于在現實世界中很難獲得視差圖,是以通常的做法是估計一個視差圖。然而,預測的視差圖可能很模糊,并且在邊界處與RGB圖像不對齊。是以,我們通過分别用5個高斯模糊,膨脹和侵蝕級别破壞視差圖來重做“level3”實驗(表1)。我們還重新訓練沒有資料增強的視差圖的虛化模型,以進行額外的比較。如圖11所示,使用增強訓練的BokehMe可以更好地适應不完美的視差圖。另一個有趣的觀察結果是,适度擴張提高了大多數方法的性能,特别是對于經典方法。原因可能是超出前景對象邊界的放大像素充當被遮擋的背景像素,進而在背景重新對焦的情況下顯着改善了名額。但是,如圖12所示,它同時會導緻更多的邊界僞影。

BokehMe: When Neural Rendering Meets Classical Rendering
BokehMe: When Neural Rendering Meets Classical Rendering

為了進一步評估給定一個不完美視差圖作為輸入時模型的泛化能力,我們對比在 EBB400 資料集上用 DPT[26]預測的視差圖的不同方法。由于每個樣本的模糊參數是未知的,我們對每個方法從 1 到 100 種選擇最優的數值。盡管大小景深圖像對之間存在色彩不一緻和場景錯位,但BokehMe在兩個名額中仍然排名第一,如表2所示。有關定性結果,請參閱補充材料

BokehMe: When Neural Rendering Meets Classical Rendering

4.4 消融實驗

IUNet 支援任意大小的上采樣并且不會損失品質。為了更好的了解這個出色的特性是如何得到的,我們在 BLB 資料集且模糊程度是 level3 上設計了一個消融實驗。并且這裡我們隻評估神經渲染器。如下 Table3 所示:

  1. IUNet 的上采樣如果不采用 clipping操作将會導緻結果很糟糕,因為會超出了散焦的範圍(B1vsB2 以及 B2 vsB3)
  2. 采用低分辨率輸入的虛化圖可以補償 clipping 區域進而提高 0.64dB 的 PSNR(B3vsB4)
  3. 采用膨脹的散焦圖替代有符号散焦圖,可以稍微提升一點效果(B4vsB5)

此外,我們在補充材料中展示了這種操作可以提供一種更自然的從焦平面到背景的邊界過渡。

BokehMe: When Neural Rendering Meets Classical Rendering

4.5 User Study

PSNR 和 SSIM 并不能完全反應渲染的虛化圖檔的實際品質,我們在 IPB 資料集上設計了一個使用者實驗。對所有的方法,模糊參數和重聚焦視差都被手動調整到批評 iPhone12 的人像模式。這個實驗包含了 53 個參與者。根據 Table4 和圖 13,可以知道我們的方法是最受歡迎的,并且焦内物體有清晰的邊界和前景有一個自然的虛化效果。注意 iPhone12 人像模式僅能對焦點後的物體産生虛化效果。

BokehMe: When Neural Rendering Meets Classical Rendering
BokehMe: When Neural Rendering Meets Classical Rendering

5. 讨論和總結

繼續閱讀