---
# System prepended metadata

title: 【論文閱讀】DepthAnything V1 / V2
tags: [Machine Larning, PaperSurvey]

---

# 【論文閱讀】DepthAnything V1 / V2
* Author : Lihe Yang, Bingyi Kang, Zilong Huang, Xiaogang Xu,
Jiashi Feng, Hengshuang Zhao1
* Institution : HKU, TikTok, CUHK, ZJU 

## Paper Link
- [Depth Anything V2](https://arxiv.org/abs/2406.09414)
- [Depth Anything: Unleashing the Power of Large-Scale Unlabeled Data](https://arxiv.org/abs/2401.10891)

## Abstract 大綱
* **目的** 
RGB影像透過模型進行單目相機的深度估計 **Monocular Depth Estimate** 簡稱 **MDE**
* **挑戰** 
單目相機深度估計需要一些條件才能使用，例如相機焦距，已知物件大小與初始距離，才有可能定位一個物體距離相機的距離

### 三大貢獻
1. 使用 **合成(synthetic images)影像** 替換所有 **有標記影像(labeled Image)** 來進行訓練
2. 將 **Teacher Model** 參數增加 **(Scale Up)**
3. 透過大量的 **Persudo-labeled Image** 來訓練學生模型


### 成果展示
![show1](https://hackmd.io/_uploads/rJtBKRI71x.png)
![show2](https://hackmd.io/_uploads/HkVIt0LXJx.png)

**Figure2**中則是針對兩個屬性來展示模型效果
1. 誤導性的影像
2. 具有大量細節影像

### Preferable Properties 適合屬性
評估模型時會考量到的**定性屬性**，也就是非量化的評估
![image](https://hackmd.io/_uploads/Hy_us0I7ye.png)
1. **Fine Detail 影像細節** 
    對於細節部分包含紋理、邊緣
2. **Transparent Object 透明物件**
    對於具有折射、反射與穿透性物件，
3. **Reflections 反射影像**
    對於反光物件與鏡面場景
4. **Complex Scenes複雜場景**
    對於多層次以及多物件的場景
5. **Efficiency**
    對於模型的效能與耗時
6. **Transferability**
    可否遷移至不同應用場景與裝置當中

## Introduction
點出**Data的重要性**

### 深度估計模型需具備的特點
1. 能夠針對複雜場景生成穩定的預測結果，包括但不限於複雜布局，透明物件、反射表面(鏡子、螢幕)
2. 預測深度圖中需要包含精細細節，包括但不限於薄物件與小孔等
3. 提供不同模型大小與推理效率，以支援廣泛應用
4. 預訓練模型需要提供足夠的通用性，特徵可以有效地轉移到下游任務使用，包含分類、檢測、等等...

> 備註
> 包括但不限於: 表示不一定要有(有點文字遊戲

### 三個問題與解答
1. 對於 MiDas 的粗略的深度估計是否來自判別模型本身?是否採用擴散(diffusion) 方式才能有精細特徵?
    * 不，判別模型能然可以產生精細的細節，關鍵在於是將所有的真實標籤影像替換成精確的合成影像 
2. 如果合成影像已經優於真實標籤影像，為何以往訓練模型方式仍然堅持採用真實影像?
    * 合成影像有其缺點，但這些缺點在以往的學習範式中難以克服
3. 如何避免合成影像的問題並且放大其優點?
    * 合成影像只有使用在訓練 Teacher Model，然後透過大規模偽標註真實影像訓練較小的 Student Model. 


## Revisiting the Labeled Data Design of Depth Anything V1

這章節點出以往研究嘗試建構大量的真實標籤影像來進行訓練，但是忽略了真實標籤的問題。


### 真實標籤問題

1. 深度感測器無法有效捕捉透明物件的深度 **(Figure 3a)**
2. 匹配演算法對於重複pattern無法有效運作 **(Figure 3b)**
3. SFM方法對於動態物件標記錯誤 **(Figure 3c)**
4. 在預測模型中對於物件的細節太過於粗糙。
$\rightarrow$ 無法有效學習邊緣與細節的深度特徵，將導致預測過於平滑
![image](https://hackmd.io/_uploads/HJxTBJP7kg.png)

### 合成影像的優點
1. 所有細節(紋理、邊緣、細孔、小物件)都能夠被正確地標記，用**engine**生成的
2. 可以反應透明物件與反射表面的實際深度
**Figure4** 展示了使用真實影像訓練與合成影像訓練之後模型效果差別，可以發現使用合成影像進行訓練模型細節部分對於細節生成比較好
![image](https://hackmd.io/_uploads/BkEcsyw7kx.png)

## Challenges in Using Synthetic Data
上個章節點出生成影像的好處，但實際上還是有一些問題存在

### Limitation

1. 合成影像與真實影像存在一定的偏差，即使現在的模擬器能夠生成逼真的影像，仍然不足以匹配上真實影像，由於合成影像的生成太過於**乾淨**，**有序**，這樣難以將合成影像的資料分布轉移至真實影像的分布，一定存在bias
2. 合成影像的場景範圍受限制
    * Apple-Hypersim/KITTI
    * WEB Stereo Images HRWSI, MegaDepth Dataset

以**實驗方式證明** 合成資料在訓練深度估計模型上是不可行的，即使是使用較大的模型也是一樣，精細度在細節上能有差距。

![image](https://hackmd.io/_uploads/H1XbGxvXJg.png)

### Key Role of Large-Scale Unlabeled Real Images
解決方案: 包含真實世界的未標記資料的標籤，其標籤由大模型生成
* Bridge the domain gap. 
    * 由於domain差距，先透過合成資料集訓練一個大模型，再將真實影像丟到大模型進行預測，產生pseudo-labeled真實影像，再進行訓練小模型，更能讓模型學習到真實世界分布
* Enhance the scene coverage.
    * 合成影像資料的多樣性有限，因此需要更多真實世界影像來填補多樣性 
    * 拿更多公有資料集丟入到大模型產生persudo label real image
        * 也就是資料集的有效範圍
* Transfer knowledge from the most capable model to smaller ones.
    * 類似**知識蒸餾**的訓練方式，但是是基於**資料方面**上的，而非輸出的**機率分布**


## Depth Anything V2

### Framework 框架

1. 透過大量且有效的合成資料集訓練大模型
2. 透過大模型產生精確的Persudo label real Image
3. 透過大量的Persudo label real Image 來訓練 Sudent Model
![image](https://hackmd.io/_uploads/Syfn_ew71x.png)

基本上就是在資料集上下很大功夫

![image](https://hackmd.io/_uploads/rkPY5gvQ1g.png)

### Detail
![image](https://hackmd.io/_uploads/SJdDHDTVyl.png =50%x)

* 在訓練過程，忽略前$n$大的損失函數數值，$n$ 設置為 $10\%$ ，這些過高loss的區域視為潛在的干擾pseudo-labels
* $\mathcal{L}_{gm}$ 能夠對深度銳利程度有很大幫助
![image](https://hackmd.io/_uploads/r1lL9wa4yx.png =75%x)


## V1 補充

### Learning Labeled Image
1. 將標籤深度轉換成 disparity space，並進行正歸化將值域限縮至 $0 \sim 1$
$$
d = \frac{1}{t}
$$
* $t$ : 深度

2. Affine-invariant loss
$$
\mathcal{L}_{l} = \frac{1}{HW}\sum_{i = 1}^{HW} \rho(d_i^{*}, d_i)
$$
* $d_i^{*}$ : 預測深度
* $d_i$ : 深度標籤
* $\rho(d_i^{*}, d_i) = \lvert \hat{d_i^{*}} - \hat{d_i} \rvert$
* $\hat{d_i^{*}}$ : 縮放與平移的 $d_i^{*}$
* $\hat{d_i}$ : 縮放與平移的 $d_I$

3. Scale and Shifted 
$$
\hat{d_i} = \frac{d_i - t(d)}{s(d)}
$$
* $t(d) = \text{median}(d)$ : 所有預測的中位數
* $s(d) = \frac{1}{HW}\sum_{i=1}^{HW}\lvert d_i - t(d)\rvert$
