基於深度學習的單目圖像深度估計有哪些比較好的參考資料(書籍、博客、論文.....)?求大神指點。


基於深度學習的單目深度估計算近年比較火的方向

之前搜集過相關的論文,嘗試回答一下。

Depth Map Prediction from a Single Image using a Multi-Scale Deep Network

NIPS2014,第一篇CNN-based來做單目深度估計的文章。

基本思想用的是一個Multi-scale的網路,這裡的Multi-scale不是現在網路中Multi-scale features的做法,而是分為兩個scale的網路來做DepthMap的估計,分別是Global Coarse-Scale Network和Local Fine-Scale Network。前者其實就是AlexNet,來得到一個低解析度的Coarse的Depth Map,再用後者去refine前者的輸出得到最後的refined depth map.

代碼:hjimce/Depth-Map-Prediction

Predicting depth, surface normals and semantic labels with a common multi-scale convolutional architecture

ICCV2015,也是上一篇作者David Eigen發的,號稱是multi-task的一個network.

網路結構上做了一些改進,從兩個scale增加到了三個scale,scale1考慮了用VGG替換AlexNet,這篇沒細看,有錯請指出~

Learning Fine-Scaled Depth Maps from Single RGB Images

掛在Arxiv1607上的,在上一篇的基礎上做了一些改進。

主要的contributions:

1.在ICCV2015的基礎上加入了multi-scale之間的skip connections,號稱可以加速網路的收斂。

2.考慮了在做Data Augmentation的時候,相同的數據生成的train data之間的相關性,其恢復得到的深度要儘可能接近,因此構建了基於set of transformed images的loss的約束。

Joint Semantic Segmentation and Depth Estimation with Deep Convolutional Networks

Arxiv1604,分割和單目深度估計Joint的文章。。。然而。

Deeper Depth Prediction with Fully Convolutional Residual Networks

IEEE 3D Vision 2016的文章,用ResNet的結構來做了。

Deconv部分提出了幾個版本,如下圖.

1. up-convolution:基本的unpooling+convolution

2. up-projection: 引入了殘差的up-convolution單元

3. 兩者的fast版本,基本思想就是unpooling+5*5的conv可以用4個更小的conv來實現,從而加速,如下圖

代碼:FCRN-DepthPrediction,基於tensorflow的。

CVPR2017也有3篇。

Unsupervised Monocular Depth Estimation With Left-Right Consistency

這篇沒細看,思想應該是loss不是直接用的depth的loss.

而是用估計出來的depthmap來做左右圖的匹配,利用匹配後rgb圖像的強度的偏差來構建loss,所以說是unsupervised.

代碼:mrharicot-monodepth 也是基於tensorflow的。

Semi-Supervised Deep Learning for Monocular Depth Map Prediction

這篇是semi-supervised,網路結構基本用的是上面的FCRN,主要在loss上做了手腳。

loss一共分為Supervised loss,Unsupervised loss,Regularization loss

1.Unsupervised loss

和上一篇unsupervised的一樣,用的也是網路inference得到depthmap後做左右rgb圖像匹配構建的loss.

2.Supervised loss

同時因為用的是kitti的數據,有雷達圖像數據配准後的sparse的深度值圖,將這些sparse的depth values作為seed點,也引入了loss中。

3.Regularization loss

還添加了gradient的Regularization loss作為約束。

所以個人感覺是,這篇文章是上兩篇文章的結合。

Multi-Scale Continuous CRFs as Sequential Deep Networks for Monocular Depth Estimation

xiaogang wang他們的成果,這篇主要是CNN和Graphical Model的結合。

主要的motivation:

1.在CNN解決pixel級的classification/regression問題時,引入multi-scale的信息可以更好的結合low-level和high-level的feature。

2.在semantic segmentation問題中,CRFasRNN中將CRF的mean-field解法展開用RNN網路的結構實現,使得CNN+CRF可以進行end-to-end的優化,這是針對discrete domain的問題,而對於continuous domain的regression問題,還沒有這樣翻譯成網路的CRF層的存在。

3.以及圖模型有很好的表達能力,可以與CNN模型的特徵表達結合,得到更好的效果。

因此作者提出了Multi-scale CRFs和Cascade CRFs兩個模塊。

具體推導不展開,有興趣的可以看論文,兩個CRFs的最小單元可以用一個C-MF block來實現。

代碼:danxuhk/ContinuousCRF-CNN 基於caffe框架。

第一次回答,希望有幫助,有問題請指出~


其實樓上寫的蠻具體的了, 我再補充一下把。

我覺得近幾年採用深度學習來解決深度估計的思路可以分為好幾類:

第一類 僅僅依靠深度學習和網路架構得到結果

最近這部分文章我較為詳細的總結在了專欄里:深度學習之單目深度估計 (Chapter.1):基礎篇

1. 引用最多、最早的是Eigen組的兩篇文章,相對於簡單粗暴的使用卷積神經網路回歸來得到結果,主要賣點是採用Multi-scale的卷積網路結構(2015年):

  • Predicting Depth, Surface Normals and Semantic Labels with a Common Multi-Scale Convolutional Architecture
  • Depth Map Prediction from a Single Image using a Multi-Scale Deep Network

2. 之後在2016年,Laina依靠更深層次的網路和一個「novel」的逆卷積結構再加上一個"novel"的loss來得到結果。其實我認為這篇文章的貢獻點不是很大,主要是pretrain的ResNet-50幫了很大的忙。這個方法被他們組改進然後用到了之後CVPR2017用來重建SLAM的文章中。

  • Deeper Depth Prediction with Fully Convolutional Residual Networks (3DV 2016)
  • CNN-SLAM: Real-time dense monocular SLAM with learned depth prediction(2017 CVPR)

第二類 依靠於深度信息本身的性質

1. 深度信息和語義分割信息具有很強的相關性:場景中語義分割信息相似的物體所擁有的深度信息是相似的

  • Towards Unified Depth and Semantic Prediction From a Single Image (CVPR 2015)

2. 之後接下來又有文章試圖去做了語義分割和深度信息的升級版:除了語義分割信息有沒有其他信息和深度信息也相似的

SURGE: Surface Regularized Geometry Estimation from a Single Image(NIPS 2016)

3. 深度信息本就是一個從遠到近一層一層的分類,是不是把預測深度當做一個分類問題更好解一點,搜文章的時候搜到了這兩篇用到了這個思路:

Estimating Depth from Monocular Images as Classification Using Deep Fully Convolutional Residual Networks

Single image depth estimation by dilated deep residual convolutional neural network and soft-weight-sum inference

第三類 基於CRF的方法

CRF之前一直在語義分割問題上表現的很好,包括CRFasRNN,DeepLab等等,幾乎成為了這種回歸問題的標配。這一類的方法採用CRF是因為通常CNN用來做回歸時產生的圖都比較糊(blur), CRF可以通過條件概率建模的方法將糊的圖片變得不糊。這是一種純數學解決問題的方法,與深度信息本身的物理性質關係不大。

Deep Convolutional Neural Fields for Depth Estimation from a Single Image(2015 CVPR)

Depth and surface normal estimation from monocular images using regression on deep features and hierarchical CRFs(2015 CVPR)

Multi-Scale Continuous CRFs as Sequential Deep Networks for Monocular Depth Estimation (2017 CVPR)

第四類 基於相對深度

接下來介紹的這一類是我覺得最有意思的一個方法。 總的來說就是利用了深度信息的基本特徵:圖片中的點與點之間的是有相對遠近關係的。NIPS2016這篇文章自己構建了一個相對深度的資料庫,每張圖片之中僅僅標註兩個隨機點之間的相對遠近關係,通過一個神經網路的訓練就能得到原圖之中的相對深度信息。而且,一般的方法通常是針對某個資料庫的數據範圍的(NYUv2用來做室內深度預測,深度的ground truth 是 0~10m,KITTI用來處理行車道路信息,深度的ground truth 是 0~70m),這篇文章的深度是沒有這種限制的。這篇文章得到的深度信息感覺是很amazing的一件事,為這篇文章打call! 但是缺點也很明顯,由於是相對深度信息僅僅得到的數據表示了當前圖片中物體的遠近關係和真實深度信息有很大的區別。

Single-Image Depth Perception in the Wild (NIPS2016)

當然這種相對關係的想法第一個提出來應該是下面這篇文章。不過我覺得這篇文章生成的圖看起來太「超像素」了,不太smooth(因為它訓練的時候就是使用的是圖片中超像素的中點):

Learning Ordinal Relationships for Mid-Level Vision(2015ICCV)

第五類 非監督學習

最近這部分文章我較為詳細的總結在了專欄里:深度學習之單目深度估計 (Chapter.2):無監督學習篇

所謂使用非監督學習來訓練就是利用不知道ground truth的輸入圖片訓練來得到深度信息。既然沒有深度的ground truth那肯定有來自於其他地方的約束,比如使用stereo image。stereo image是來自兩個相機(或者雙目相機)在同一水平線上左右相距一定位置得到的兩幅圖片。這種圖片獲取的代價要比深度的ground truth 低一些。 這些方法利用了深度信息和場景之間的一些物理規律來約束,感覺得到了很不錯的結果,這三個方法可以說是一脈相承:

Unsupervised CNN for Single View Depth Estimation: Geometry to the Rescue(2016 ECCV)

Unsupervised Monocular Depth Estimation with Left-Right Consistency (2017 CVPR)

Semi-Supervised Deep Learning for Monocular Depth Map Prediction (2017 CVPR)

總結

其實感覺同樣是image to image 的轉換,深度信息相比於語義分割關注的人要少很多,很多語義分割方面的方法就會有可能直接用到深度預測方面。比如Estimating Depth from Monocular Images as Classification Using Deep Fully Convolutional Residual Networks 這篇文章其實就和CRFasRNN很像。

直接利用深度網路來得到深度預測的結果已經不是很novel的方法了,採用基於CRF的方法得到的效果比較好但是和感覺並不是那麼讓人眼前一亮。

很喜歡基於相對深度和採用非監督學習來得到深度信息的這幾種方法。大膽的預測一下,在這種問題上,結合物理規律和深度學習的方法得到更好的結果可能會有更多的文章出來,拭目以待把。

坑終於挖完了,有空的話會把這些文章的細節再補一下。。

寫字真是太累了,去看TI了。。。


我剛好在CVPR2017看到一篇做單目深度恢復的文章,叫「Unsupervised Monocular Depth Estimation with Left-Right Consistency」,代碼也開源了,地址 mrharicot/monodepth


看到有人說Unsupervised Monocular Depth Estimation,但我覺得這個演算法訓練是個坑,需要雙目圖像進行訓練,而這個監督信號又帶了相機參數這個新的約束,如果你用一個相機採集數據進行訓練,換一個不同焦距的相機進行測試,獲取到的視差實際上就帶有scale了。

這個作者也給出了stereo的版本,性能提升是質變。

個人還是比較認可雙目無監督估計,[1709.00930] Self-Supervised Learning for Stereo Matching with Self-Improving Ability,這個看看kitti stereo 2015(The KITTI Vision Benchmark Suite)的排名就知道了,和很多有監督的演算法比起來也是state-of-art。

如果實在是想用單目做,建議還是看看用視頻序列做的吧,(Unsupervised Learning of Depth and Ego-Motion from Video)開源的


推薦閱讀:

Google 人工智慧引擎 TensorFlow 開源會帶來哪些影響?
如何評價Google即將發表在ICML17上的Placement Optimization的論文?
如何在沒有有效指導的情況下學習深度學習?
什麼是創造力,AI可以獲得嗎?
為什麼 Deep Learning 目前在 NLP 上還沒有什麼成功的應用?

TAG:圖像處理 | 計算機視覺 | 深度學習DeepLearning |