---
# System prepended metadata

title: HoHoNet
tags: [Panorama Depth Estimation]

---

# HoHoNet: 360 Indoor Holistic Understanding with Latent Horizontal Features(CVPR 2021)
* ==**論文:**== https://arxiv.org/abs/2011.11498
* ==**主要特點:**== 
    1. 可用於預測深度、layout和Semantic segmentation
    2. 在RTX2080上可跑到110fps
* ==**方法:**==
    1. **網路架構**:
        主要思想源於HorizonNet，將影像特徵壓縮到一維後再去執行下游任務。Backbone使用resnet50，接著從不同的layer輸出的特徵送入EHC Block。之後再送入MHSA與一個2D Conv(LHFeat)輸出一維特徵。
        ![](https://hackmd.io/_uploads/Syr3NeoyT.png)
        
        * EHC Block:
        ![](https://hackmd.io/_uploads/By2SHls16.png)
        
    2. **模型輸出**
        由於LHFeat輸出的特徵為一維，所以要進行上採樣的動作才可以去當作最後的輸出。作者在這邊提出了兩種方法，一種是單純的插值，另一種是使用<font color="#e89845">Inverse discrete cosine transform (IDCT)</font>。
        
        假設網路的最後輸出為$D$ X $W_1$，而輸出的維度要為$H_{inp}$ x $W_{inp}$，會先經過一個上採樣，將$D$ X $W_1$ 變成 $D$ X $W_{inp}$，之後再經過一個1x1的Conv得到$N$ X ${r}$ X $W_{inp}$。而這邊的N等於想要輸出的通道數，$r$則為超參數。
        
        * Interpolation:
     
            利用線性插值將$N$ X ${r}$ X $W_{inp}$ resize到 $N$ X $H_{inp}$ X $W_{inp}$
        
        * IDCT: 
    
            Discrete Cosine Transform(DCT)又稱為離散餘弦轉換，與傅立葉轉換（Fourier Transform）類似，但只使用實數做運算，<font color="#e89845">同樣可將影像轉換至頻率域（Frequency domain）</font>。轉換後的頻譜圖能判斷紋理方向及強弱，實際對應到圖像上的分區如下：
            ![](https://hackmd.io/_uploads/Sybd3eskp.png)
    
            實際應用如下:
                可將影像轉換頻率域，再透過遮罩的手法就可以把高頻的像素濾除
                
            ![](https://hackmd.io/_uploads/ByI5nxika.png)
            ![](https://hackmd.io/_uploads/rkJ2nxs16.png)
            將左下被corp的圖進行IDCT可得到右下角的圖
            
            <font color="#e89845">而作者認為將$r$視為預測在frequency domain的頻率，可以得到更有意義的特徵訊息</font>，所以使用此方法來替代Interpolation。具體方法如下
            
            假設最後一層的輸出如下:
            ![](https://hackmd.io/_uploads/Sy1WW-syp.png)

            公式:
                ![](https://hackmd.io/_uploads/HJHzzWj16.png)
                
            $x=[x_n]^{r-1}_{n=0}$ = $[x_0, x_1, ... x_{n-1}]\in R^r$
            $X=[X_m]^{H-1}_{m=0}$ = $[X_0, X_1, ... X_{H-1}]\in R^H$
            
* ==**結果:**==
    ![](https://hackmd.io/_uploads/HyA2m-oyp.png)
    
    ![](https://hackmd.io/_uploads/BJYAQbokp.png)
    
    ![](https://hackmd.io/_uploads/r19k4ZoJa.png)
