Boosting Monocular Depth Estimation Models to High-Resolution via Content-Adaptive Multi-Resolution Merging 介紹

How哥
8 min readFeb 24, 2022

--

提出新穎的高解析度和低解析度的融合法,讓深度預測結果更細緻

CVPR 2021

Introduction

作者們觀察到如果想要讓圖片在深度估計有細緻的結果,勢必得提高圖片解析度,但是解析度一提高,往往會出現許多 low-frequency artifacts,想要解決這問題就要提高 receptive field,但如果為了高解析度提高 receptive field, CNN 網路會消耗過多記憶體,以高解析度和低解析度在模型上的表現為出發點,來探討後面遇到的所有困難

Observations on Model Behavior

根據作者們的觀察,他們發現了幾點問題

如下圖所示,在同樣的模型中輸入不同解析度的圖片,在低解析度時,網路無法抓到面積較小的鳥類,遺失一些高頻資訊,但在低解析度時,網路有能力抓出整張影像的結構

在高解析度的情況底下,模型有能力抓去圖片中細節和細小邊界的地方,但容易遺失場景整體結構,像是他無法判斷出那一面牆壁屬於同一個平面

低解析度會失去邊緣高頻資訊,高解析度失去結構資訊

下面的圖在低解析度的時候判斷良好,但在高解析度時,因為視野域 (receptive field) 不足的關係,板子中間的點可能看不到板子的邊緣,在資訊不足的情況下,深度只好亂判斷一通

解析度越高,中間越不知道自己是什麼
作者的解釋

最後發現把 192*192 的圖放大到 500*500 並丟入模型中,觀察到模型能掌握住更多細節,所以解析度大小取決於影像中的內容

中:192x192, 右:500x500

Method Preliminaries

根據上面觀察的結果作者列出以下目標

  1. 找出圖片中 contextual cues 的分佈,這會決定網路的輸入
  2. 使用一個 operation 把高頻細節和完整結構的資訊融合在一起

在進入最終解說前,先提及一些方法

Estimating Contextual Cues

想要在圖片中 determining the contextual cues 是一件不容易的事情,在 Visualization of convolutional neural networks for monocular depth estimation 這篇論文中,作者提到如何找出對深度資訊最有價值的 pixels,根據他們觀察,找出物件邊緣是很重要的,但論文中的方法太複雜了,所以實做上論文採用 Sobel 運算子來找到圖像邊緣,也是就是高頻訊息

左邊為原始輸入圖片,右邊是經過 sobel 運算後的示意圖

Merging Monocular Depth Estimates

在我們的任務中有兩個深度估計網路,一個高解析度一個低解析度,最終我們要把他們合併起來,把高頻資訊嵌入到有完整結構的低頻圖片中

使用 Pixel2Pixel 架構中的 10 層 U-Net 網路當 generator,我們將用這個網路來對應不同解析度的輸入圖片,為了讓這個網路能夠把高解析度細緻特徵合併到低解析度的圖片中,我們從 Middlebury2014Ibims-1 的深度圖中選擇一組 Input/Output pairs,並且訓練 U-Net 能夠還原出細緻的高頻特徵

(d) 圖融合了 (b) 圖 和 (c) 圖的資訊

Double Estimation

把影像丟入深度模型之前,我們會先把圖片經由 Sobel 的運算,得到圖片中所有邊緣的分佈,這對模型來說是高頻的資料,論文中把這些高頻資料稱為 Context Edges 高頻訊息

有了邊緣訊息後,作者這邊做了兩個定義,分別是 R0 和 R20,R0 代表所有 pixels 的視野域一半的範圍內都有高頻訊息,R20 代表有百分之 20 的 pixels 在視野域內都沒有高頻訊息,所以為了讓圖片達到 R20,會把圖片放大成高解析度圖片,R0 圖片是為了確保 Structure 的訊息都要抓到

上面是示意圖,這篇論文提出一個叫做 Double Estimation 的方法來融合高頻特徵和低頻特徵,(a) 是 Midas 輸出的原始圖片,(c) 是 R20 圖片,可以看到有很多高階細節出現,(d) 是把 c 圖和 a 圖丟進融合網路 U-Net 的結果,融合了高頻和低頻訊息

R0 和 R20 融合了高頻低頻訊息

Patch Estimates for Local Boosting

有了上面的 Double Estimation 的方法已經能夠把圖片的深度算的細緻很多,但作者又提出另一個 Patch Estimation 的方法,能夠更小部份的修復深度

作法如下 :

  1. 在原始圖片上鋪上跟 Receptive Field 一樣大的網格,每個網格 overlap 三分之一
  2. 檢測每一個網格,如果網格內的高頻資訊平均少於整張圖片的平均,就把該網格刪除,所以剩下的網格高頻資訊都會比整張圖片的高頻資訊平均多
  3. 擴張剩下來的每一個網格,直到每一個網格高頻資訊的平均等於整張圖片高資訊的平均為止,為的是要讓 patch 的架構穩定
  4. 接著把每一個網格都使用上面提出的 Double Estimation,然後把預測出的最終結果往原始的深度圖融合修正,產生最終結果
左圖對照步驟 1, 2,中圖對照步驟 3,右圖對照步驟 4
套用 Patch Estimates 的結果

Experiments

使用 Middleburry2014 和 Ibims-1 兩個 Dataset

在 Middleburry2014 中平均會計算出 74.82 個 patches,R20 的平均大小是 2145 x 1501

Ibims-1 中平均會計算出 12.17 個 patches,R20 的平均大小是 1443 × 1082

下面是一些視覺化的結果

R30 的解析度太高,會導致沒有高頻資訊的像素太多,準確度下降

(a) 為 Midas, (b) 為本論文的方法

上圖為 Midas 和論文方法的比較,本篇論文的方法能夠精準的切出相同深度的人和他拉的行李箱

Conclusion

姑且不論這篇論文最終的數據好壞,作者提出了新穎的方式,透過觀察高解析度和低解析度的圖片在深度上不同的表現,想出一個融合兩個好處的方法,論文中把自己思考的過程和問題找出,並一步步的提出解決方法,甚至還有一另一篇 Supplementary Material 來解釋一些詳細的實驗和數據,只能說真不愧是 CVPR2021 的論文,讀得很爽,獲益良多

--

--

How哥

台灣科技大學資工所研究生,把有趣的電腦視覺論文整理上來,希望能幫助到有需要的人,聯絡信箱 b10515007@gmail.com