• 沒有找到結果。

排除難/無匹配點之非監督式單眼深度估計

N/A
N/A
Protected

Academic year: 2021

Share "排除難/無匹配點之非監督式單眼深度估計"

Copied!
70
0
0

加載中.... (立即查看全文)

全文

(1)

i

國立高雄大學資訊工程學系研究所

碩士論文

排除難/無匹配點之非監督式單眼深度估計

Excluding non-matched patches to do unsupervised

monocular depth estimation

研究生:張博詔 撰

指導教授:殷堂凱 博士

(2)

i

(3)

ii

誌謝

在這兩年的碩士生活中我受到了許多人的幫助,讓我能夠有所成長,並且順 利的完成我的碩士論文,我對你們有著非常多的感謝,首先我想感謝殷堂凱教授, 在這兩年中對我的許多幫助,感謝您在我剛進研究所還懵懂無知時,告訴了我研 究所該做些什麼,讓我漸漸熟悉了研究所的生活,感謝您讓我參加幾場研討會, 讓我有機會在很多人面前報告,增加我的經驗讓我越來越習慣如何報告,感謝您 帶著我和中山的學生一起參加比賽,讓我有了不錯的合作經驗,感謝您比賽的當 天還載我去比賽的會場,這次比賽讓我學到了很多的東西,也增加了我的世面, 感謝您每個禮拜都和我討論論文的方向以及發展,讓我在研究時有了方向,一步 一步地完成了我的論文,在這兩年間我真的受到您非常多的幫助,感謝您在這兩 年中對我的拉拔。接著我想感謝兩位口試委員特別來聽我的報告,給予了我許多 寶貴的意見,讓我對我的論文有了更多的想法。接著我想感謝修課的老師以及同 學,感謝課堂上的老師們教會了我許多不同領域的東西,感謝我的同學們在課業 上給予了我許多的幫助,讓我能夠順利修完課,也感謝你們在研究方面雖然大家 研究的領域不同,但是還是能一起討論,並一起向前邁進。感謝實驗室的學弟們 在口試當天幫我準備了很多的東西,讓我能把注意力集中在口試報告上。 最後我想感謝我的家人,感謝你們一直支持我讀研究所,讓我沒有經濟負擔可 以專心的進行研究,感謝你們在我碰到困難時都會給我鼓勵,讓我能夠順利的解 決問題向前邁進。

(4)

iii

排除難/無匹配點之非監督式單眼深度估計

指導教授:殷堂凱 博士 國立高雄大學資訊工程研究所 學生:張博詔 國立高雄大學資訊工程研究所 摘要 在立體視覺領域中最重要的部分莫過於深度的估計了,只要有了圖像到真實 場景的距離,就能夠利用這些資訊還原場景的三維資訊,深度資訊還可以用來做 自駕車避障、語意分割、判斷物體動態位姿、AR 等等,可以應用的地方非常的 多,雖然已經有很多方法可以直接取得深度的資訊,但它們都還是存在著各自的 缺點,例如 LiDAR 的價格昂貴、kinect 無法在室外使用、基於雙眼視覺的匹配算 法計算成本很高、基於單眼視覺的算法需要場景有移動才能進行計算。 綜觀上述問題,本論文提出以非監督的方式對單眼移動影像進行深度和位姿 的估計,並訓練出只需要一張圖就能進行深度估計的模型,首先使用兩個神經網 路來估計單張圖的深度,以及兩張圖之間的位姿,並以新視圖合成作為用來監督 的資訊進行神經網路的訓練,接著我們在訓練過程中會排除兩張圖間非共同視野、 某些在移動的物體和重複紋理,以減少神經網路的錯誤估計,我們還引入雙眼的 資料對模型進行訓練,最後和同樣非監督式的方法相比我們的方法準確率高了 1~2%左右。 關鍵字:深度學習、卷積神經網路、深度估測、立體視覺、視覺 SLAM

(5)

iv

Excluding non-matched patches to do unsupervised

monocular depth estimation

Advisor: Dr. T. K. Yin

Department of Computer Science and Information Engineering National University of Kaohsiung

Student: Po-Chao Chang

Department of Computer Science and Information Engineering National University of Kaohsiung

ABSTRACT

One of the most important advancements in the field of stereo vision is depth estimation. Depth can reconstruct the 3D information from images, and also can be used for self-driving obstacle avoidance, semantic segmentation, estimated object dynamic pose, AR, etc. There are already many ways to get depth, but they still have their own shortcomings. For example, LiDAR is expensive, kinect cannot be used outdoors, the algorithm complexity of stereo vision is expensive, and the algorithm of monocular vision requires moving scenes.

Based on the above problem, this thesis proposes an unsupervised method to estimate depth and pose from a series of moving monocular images, then train a model that can estimation depth with one image. First, we use two neural networks to estimate depth and pose, and synthesize a new scene as our supervised information to train the neural networks. Then we exclude some non-matched patches during training to reduce the false estimation of the neural networks. We also train the model by stereo images. Finally, the accuracy of our method is about 1~2% better than other unsupervised methods.

Keywords:Deep Learning, Convolution Neural Network, Depth Estimation,

(6)

v

目錄

論文審定書 ... i 誌謝 ... ii 摘要 ... iii ABSTRACT ... iv 目錄 ... v 圖目錄 ... vii 表目錄 ... ix 第一章 緒論... 1 1.1 前言 ... 1 1.2 文獻回顧 ... 2 1.3 研究動機 ... 11 1.4 研究方法簡介 ... 11 1.5 論文架構 ... 12 第二章 原理介紹 ... 13 2.1 深度學習 ... 13 2.1.1 類神經網路 ... 13 2.1.2 卷積神經網路 ... 14 2.1.3 卷積層 ... 15 2.1.4 激勵函數 ... 18 2.1.5 反卷積 ... 19 2.1.6 U-Net ... 21 2.1.7 結構相似性 ... 22 2.1.8 反向傳播 ... 23 2.1.9 梯度下降法 ... 23 2.1.10 Adam 優化演算法 ... 24 2.2 立體視覺 ... 26 2.2.1 相機模型 ... 26 2.2.2 座標軸的轉換 ... 28 2.2.3 圖片間的投影 ... 29 2.2.4 視圖合成 ... 30 2.2.5 會造成錯誤估計的原因 ... 32 第三章 研究方法與設計 ... 36 3.1 實驗流程 ... 37 3.2 資料處理 ... 38 3.3 網路架構 ... 40

(7)

vi 3.3.1 視差網路 ... 40 3.3.2 位姿估計網路 ... 42 3.4 視圖合成損失 ... 43 3.5 邊緣檢測平滑損失... 44 3.6 排除錯誤估計 ... 44 3.6.1 排除非共同視野 ... 44 3.6.2 排除和相機等速移動物體以及重複紋理 ... 46 3.6.3 排除錯誤估計的 mask ... 47 3.7 雙眼資料 ... 48 3.8 準確率計算 ... 49 第四章 實驗結果 ... 50 4.1 實驗環境及實驗參數 ... 50 4.2 深度圖估計 ... 52 4.3 準確率比較 ... 54 4.4 錯誤估計的地方 ... 55 第五章 結論和未來展望 ... 57 參考文獻 ... 58

(8)

vii

圖目錄

圖 1. 1 網路架構[4] ... 3 圖 1. 2 網路架構[6] ... 4 圖 1. 3 FCN 示意圖[8] ... 5 圖 1. 4 [9]的 ResNet50 架構 ... 6 圖 1. 5 [11]的架構圖... 7 圖 1. 6 圖[11]的深度比較圖 ... 7 圖 1. 7 [12]的架構圖 ... 8 圖 1. 8 [12]的網路架構... 9 圖 1. 9 [13]的整體架構... 9 圖 2. 1 類神經網路訓練流程 ... 14 圖 2. 2 濾波示意圖 ... 15 圖 2. 3 卷積的運算圖 ... 16 圖 2. 4 對圖 2. 3 進行 Padding... 17 圖 2. 5 Sigmoid ... 18 圖 2. 6 ReLU ... 19 圖 2. 7 反卷積的示意圖 ... 20 圖 2. 8 U-Net 模型架構圖[17] ... 21 圖 2. 9 Gradient descent 的步驟 ... 23 圖 2. 10 Momentum 的步驟 ... 24 圖 2. 11 RMSprop 的步驟 ... 24 圖 2. 12 Adam 的步驟... 25 圖 2. 13 相機針孔模型 ... 27 圖 2. 14 三圍座標軸轉換 ... 28 圖 2. 15 兩張圖間的投影示意圖 ... 29 圖 2. 16 新視圖合成示意圖[18] ... 30 圖 2. 17 合成的新視圖 ... 31 圖 2. 18 錯誤估計場景展示圖[16] ... 32 圖 2. 19 重複紋理示意圖 ... 33 圖 2. 20 低紋理示意圖 ... 33 圖 2. 21 非共同視野示意圖... 34 圖 2. 22 遮擋示意圖 ... 34 圖 2. 23 移動物體示意圖 ... 35 圖 3. 1 實驗流程圖 ... 36 圖 3. 2 模型訓練流程 ... 37

(9)

viii 圖 3. 3 靜止場景圖[16]... 38 圖 3. 4 資料增強 ... 39 圖 3. 5 視差網路架構 ... 40 圖 3. 6 位姿估計網路架構 ... 42 圖 3. 7 非共同視野 mask ... 45 圖 3. 8 相機等速移動物體以及重複紋理 mask ... 47 圖 3. 9 雙眼視覺的資料[16] ... 48 圖 4. 1 深度圖和其他方法的比較圖 ... 52 圖 4. 2 深度圖比較圖 ... 53 圖 4. 3 錯誤估計圖 ... 56

(10)

ix

表目錄

表 4. 1 實驗環境 ... 50 表 4. 2 實驗參數 ... 51 表 4. 3 準確率比較圖 ... 54

(11)

1

第一章緒論

1.1 前言

近年來隨著硬體設備的發展,以及深度學習在 ImageNet 比賽[1]取得優異成 績,讓人們開始重視深度學習,很多領域都嘗試將深度學習引入以解決各各領域 的困難點,三維重建領域當然也不例外。 深度訊息可以說是三維重建技術的起始點,其代表的是圖像中的每個像素到 畫面的距離,好的深度估計方法可以大大提升後續工作的準確度,例如本體移動 估測、三維重建等等,深度訊息還可以應用在其他地方,如自駕車避障、語意分 割、判斷物體動態位姿、AR 等等。 傳統取得圖像深度的方法大致可分為三種:單目、雙目、以及傳感器,單目的 方法利用兩張圖之間小範圍的移動進行三角測量,來求解相機運動並估計像素的 空間位置,藉此推導出圖中像素的相對深度,雙目的方法模擬人類的視覺系統, 利用兩台相機之間的基線(兩台相機要平行),來進行三角測量,計算出空間的像 素點距離相機的真實距離,傳感器的方法利用各種不同的傳感器,取得傳感器到 場景中物體的距離在藉由標定投射到相機中,目前比較常見的有 kinect、LiDAR 等。 每種方法都有各自的優缺點,單目需要兩張圖片間有位移、取得的深度是相 對深度,但是相對深度也有一個好處就是:不受環境大小的影響,因此既可以用 於室內,也可以用於室外,雙目視覺可以算出相機到場景的真實深度、可以在靜 止時進行估計,但是此種方法相機標定較為複雜,而且計算的成本也比較高,可 估測的深度範圍受基線和相機解析度的影響,傳感器的方法受限於各傳感器本身, 像 kinect 只適用於室內(因為使用紅外光估測,容易受光照影響),LiDAR 對環境

(12)

2 有比較強的適應能力、不受光照影響,獲取深度的速度很快,但是其價格昂貴, 而且取得的是稀疏深度。 以上是傳統取得深度圖的方法,上述的方法中大多是用兩張圖以上,或者借 助其他傳感器來取得深度圖,並沒有真的只用一張圖就估計出深度的方法,然而 在現實生活中人們雖然藉由雙眼視覺來取得立體資訊,但是當我們閉上一隻眼睛 來觀看世界時,卻沒有覺得世界是平面的,那是因為我們對這個世界有著豐富的 先驗知識,我們從平常生活中累積的經驗和習慣,知道了場景的結構以及規則, 因此當我們只用一隻眼睛看的時候,我們還是可以藉由這些經驗去推導場景的結 構以及物體間的關係。 根據上面的道理,我們把深度學習當作是人類的大腦,利用神經網路讓機器 去學習場景的結構以及深度資訊, 藉由大量的資料訓練神經網路,讓機器有足 夠的經驗和先驗知識理解場景結構,以實踐用單張圖像估計出深度圖的方法。

1.2文獻回顧

早在 2005 年美國史丹佛大學就有一些使用機器學習來從單張圖像估計深度 圖的研究了[2],只是當時受限於硬體設備,以及神經網路在當時並不是很熱門, 因此相關的研究就沒有很大的進展,直到 2012 年 Alex 等人使用深度卷積神經網 路[3]在 ImageNet 比賽取得優異成績,深度學習掀起了熱潮,許多圖學相關領域 都嘗試使用 CNN 來解決問題,各種不同的網路模型以及研究相繼出現,讓深度 學習相關研究有了飛躍性的進步,當然三維重建的相關領域也有跟上這一波熱潮, 在底下我們將回顧自 2012 年深度學習火紅起來後,使用深度神經網路所做的單 眼深度估計方法。 要從單張圖中找到深度相關性是相對而言不直觀的,他需要從各種線索中找 到全局和局部的訊息,並將它們結合再一起,此外這個任務還存在著空間尺度不 定的問題。2014 年 David Eigen 提出的 Depth Map Prediction from a Single Image

(13)

3

using a Multi-Scale Deep Network[4],作者展現了一個新的方法解決這個任務,其

提出一個 multi-scale 的網路結構來預測深度圖,如圖 1.1,第一個網路基於 AlexNet 用來對深度圖進行粗略的估計,第二個網路將第一個網路訓練出來的結果以及本 身第一層的結果 concat 作為輸入來訓練第二個網路,訓練時先訓練完第一個模 型,並固定權重不變在訓練第二個模型,作者也用了一個叫做尺度不變誤差 (scale-invariant error)來幫助衡量深度關係,最終作者的方法在 NYU Depth[5]和

KITTI 上都達到了 state-of-the-art 的成果。

(14)

4

2015 年 David Eigen 又將上述的方法進行了拓展,提出了 Predicting Depth,

Surface Normals and Semantic Labels with a Common Multi-Scale Convolutional

Architecture[6],此方法一樣使用 multi-scale 的網路結構來預測深度圖,把原來第 一個網路改成 VGG16[7],增加 multi-scale 的數量,如圖 1.2,除此之外此方法最 重要的貢獻在於它使用同一個網路架構同時預測了深度、表面法向量和語義標籤, 深度和表面法向量都屬於三維特徵,而深度訊息和語意分割也有很強的相關性, 最終這個方法在三種不同的任務中都取得了 state-of-the-art 的成果,從中可以看 出用一個網路共享其權重,解決不同但相似的問題的有效性。 圖 1. 2 網路架構[6]

(15)

5

2015 年,Jonathan Long 等人提出一個全卷積網路(Fully Convolutional Networks

for Semantic Segmentation, FCN)[8]的概念,此方法將最後的全連接層換成卷積層,

使用上採樣的方式,將輸出大小還原為原圖的大小,並在上採樣的過程中結合前 面提取的特徵,如圖 1.3,最終在語意分割領域取得了巨大的進步,後續語意分 割問題幾乎都採用這種架構。

圖 1. 3 FCN 示意圖[8]

上面有提到深度估計和語意分割有很強的相關性,而且深度估計和語意分割同

屬於像素級別的問題,按照這樣的基礎,2016 年 Laina 等人提出了 Deeper Depth Prediction with Fully Convolutional Residual Networks[9],這篇是第一篇使用 FCN

的架構作深度估計的文章,其使用各種 pretrained 的網路架構來進行深度估計並 進行比較,如圖 1.4,最終在 NYU Depth 上取得了不錯的結果,從文中可以看出 不同的網路架構所帶來的準確率確實差很多,這篇文章不僅告訴了我們網路架構 的重要性,同時也證明了 pretrained 的網路架構,以及 FCN 的有效性。

(16)

6 圖 1. 4 [9]的 ResNet50 架構 不同的 pretrained 網路架構,只要將前兩行下採樣的過程進行修改即可。 然而使用 CNN 來做此回歸問題時通常產生的圖都比較模糊,細節的部分比較 不清楚,那麼有沒有辦法可以使用 CNN 來預測深度,同時保持細節呢,答案是 有的,CRF 可以通過條件機率建模的方法將模糊、物體邊緣的地方進行調整,在 語 意 分 割 上 經 常 使 用 , 如 Conditional Random Fields as Recurrent Neural Networks[10],而在深度估計的方法中同樣也有使用 CRF 的文章,2015 年 Liu 提

出了 Deep Convolutional Neural Fields for Depth Estimation from a Single Image[11], 其最大的貢獻就是把連續 CRF 融入 CNN 的計算中,在一個統一的深度 CNN 中 學習連續 CRF 的一元和二元勢能,如下圖 1.5 所示:

(17)

7

圖 1. 5 [11]的架構圖

最終此方法在 NYU Depth 上取得和 Eigen 的方法相當的成果,而且其細節的部 分更清楚,如圖 1.6 所示。

圖 1. 6 [11]的深度比較圖

(18)

8 上面所介紹的方法都能夠使用單張圖進行深度的估計,但是他們都共同存在著 一個問題,那就是我們需要預先準備大量的有標籤的資料來對網路進行訓練,然 而在現實情況下取得標籤資料的取得是不易的成本也很高,因此當我們訓練好一 個模型準備把它運用在陌生的環境時可能會失敗,這也是傳統深度學習方法裡常 見的問題,那麼有沒有辦法可以解決這樣的問題呢,答案是有的,只要使用非監 督式學習的方式,就能以較低的成本取得資料,對於陌生的場景只需要重新取得 資料並進行模型的訓練就能解決這個問題。

2016 年 Ravi 等人提出了 Unsupervised CNN for Single View Depth Estimation:

Geometry to the Rescue[12],有別於以往使用深度學習估計深度的方法,此篇論

文是使用非監督的方式對模型進行訓練的,其使用雙眼視覺的左視圖當作是輸入 丟進神經網路並得到一個視差輸出,用得到的視差把右視圖投影到左視圖上生成 一張新視圖,再利用新視圖和左視圖相減來得到 loss,如圖 1.7 所示,用這個 loss 反向傳播回去進行訓練,最後在用雙眼相機的基線以及焦距就能將得到的視差圖 轉變為深度圖,此方法的網路架構類似於 FCN,並且有 skip-connect 來保持網路 一開始的特徵,如圖 1.8。 圖 1. 7 [12]的架構圖

(19)

9

圖 1. 8 [12]的網路架構

2017 年 Godard 等人同樣以雙眼視覺的資料實現非監督式的深度估計[13],其

主要原理和 Ravi 的方法[12]相同,此方法比較大的貢獻在於左右視差一致性、把 loss 改成 SSIM[14]和 L1 loss 的結合、在上採樣的過程中估計了當前的圖片大小

所對應的視差圖,尤其是後面兩項在之後的相關研究中也時常被使用,其整體架 構如圖 1.9,此方法最終在 KITTI 資料集上達到了 state-of-the-art,超過有監督的 方法。

(20)

10

同為 2017 年 Zhou 等人提出了 Unsupervised Learning of Depth and Ego-Motion

from Video[15](後面簡稱 SFMLearner),此方法最大的不同在於它是使用單眼視

覺的資料實現非監督式的深度估計,其主要原理還是基於視圖合成,但是單眼視 覺和雙眼視覺的差別在於單眼視覺裡不知道兩張圖之間的投影關係,前後兩張圖 也不位於同一個平面上,因此無法用簡單的三角測量就把前一張圖投影到後一張 上,在這裡作者新增了一個 PoseNet 網路來計算兩張圖之間的位姿,並利用一個 投影公式來實現新視圖的合成,對於這個新視圖合成的細節我們將在後面原理介 紹的地方詳細描述,除此之外在訓練過程中還額外訓練一個 Explainability mask 用來處理非剛性區域(遮擋、動態區域等)的部分降低這些地方的權重,減少網路 的錯誤估計,最終在 KITTI 資料集上取得了不錯的結果,雖然最終的結果沒有達 到最好,但是其奠定了很大的基礎,對後續的相關研究非常有幫助,以同樣非監 督式的方法來說單眼視覺資料的取得比起雙眼簡單太多了,只需要知道相機的內 參就能夠收集資料來訓練,成本也相對比較低。 經過了幾年的時間可以看出使用深度學習估計深度的方法,已經有相當的進展, 從一開始使用監督式的方法進行估計,想辦法更改網路架構讓準確率提升,到之 後的 CRF 優化深度圖的方法,又到近期非監督式的方法,都可以讓我們感受到 相關技術一步一步的在發展。 本研究也繼承了前人們的思想,我們主要以 SFMLearner 當作我們研究的基礎 並進行改進。

(21)

11

1.3 研究動機

取得深度資訊的方法有很多,然而各種方法都有其限制,而單眼相機可以說 是現今最普遍的圖片取得工具,人們的智慧型手機裡都有,如果能夠以單眼相機 就取得深度資訊,我相信不僅對於三維技術相關領域會有幫助,對於智慧型手機 也一定能實現各種不同的應用。 本論文之動機在於以深度學習訓練出一個使用單張圖就能估計深度的模型, 實現低成本的深度估計方法,降低後續三維重建相關技術取得深度訊息所需的成 本,並使深度訊息可以應用在更多的地方。

1.4研究方法簡介

深度學習最大的問題在於遇到沒見過的場景時可能會導致預測出現錯誤或 者失敗,因此深度學習通常需要龐大的資料集來訓練模型,以便訓練出可以對應 任何場景的模型,然而有標籤的訓練資料並不容易取得,本論文採用非監督式的 方法,在現代單眼相機普及的世界,此方法的訓練資料容易收集,因此很容易可 以訓練出對應不同場景的模型。 為了比較我們方法的有效性,因此我們使用 KITTI 資料集[16]作為研究的資 料,和其他方法進行比較。 在訓練過程中,首先我們先對資料進行前置處理,將資料中兩張圖像特徵沒 有位移之圖除去。第二步我們利用兩個網路來分別計算深度和兩張圖間的位姿。 第三步我們利用上一步中得到的深度、位姿、以及相機的內參將目標圖投影到源 視圖上藉此合成一張新的目標圖。第四步我們計算新的目標圖和原來目標圖的差 異,得到投影誤差,並計算 mask 來排除錯誤估計的部分。第五步我們計算估計 出的深度圖的平滑 loss。第六步我們將平滑 loss 以及排除錯誤估計的投影誤差 相加就是我們最後的 loss,最後我們將 loss 丟進優化器就可以進行我們網路的

(22)

12 訓練。 在測試過程中,我們使用 KITTI 提供的稀疏點雲資料來進行比較,由於我們 估測出來的深度圖是相對深度,沒有絕對的尺度,因此在比較準確率時會把我們 的尺度縮放到和 Ground-truth 同一個區間,這點和其他論文的作法相同。

1.5 論文架構

此篇論文共分為 5 個章節:第一章為緒論,第二章為原理介紹,主要是對這 篇論文中所使用的方法進行詳細的原理介紹,第三章為實驗方法,主要對整個實 驗的步驟以及使用到的方法進行詳細的說明以及講解,第四章為實驗結果,主要 對第三章所提出的方法和其他相關論文進行比較,第五章為結論和未來展望。

(23)

13

第二章原理介紹

本章會對我們研究所使用到的方法進行詳細的原理介紹,我們主要分為兩個部 分。首先於 2.1 節我們會介紹和深度學習相關的知識以及運算;2.2 節裡我們會 說明立體視覺的相關知識以及在立體視覺中,前後兩張圖片間是如何進行投影。

2.1深度學習

深度學習(Deep Learning)是機器學習的分支,是一種以多層的類神經網路 (Neural Network)為架構,對資料進行特徵學習的演算法,也可以把深度學習理解 成類神經網路 的另一種 說法, 按 學習策略 可以分為監督 式學習 (Supervised learning)及非監督式學習(Unsupervised learning),監督式學習給予問題的輸入和 其對應的答案,讓機器不斷迭代學習,從而找出一個適合解決問題的模型,是現 在最普遍使用的深度學習策略,已經使用在各種不同的領域,其優點在於應用範 圍很廣,對於一個問題只要有輸入和其對應的答案,通常都可以使用監督式學習 的方法找到一個模型,而缺點就在於要學習出一個效果很好的模型,通常需要大 量的有答案的資料來訓練我們的模型,但是這些資料的取得非常的費成本;非監 督式學習只給予輸入,透過輸入資料間的關係讓模型自己去幫輸入資料進行分群 或分類,其優點在於不需要有答案的資料,因此用來訓練的資料容易取得,缺點 在於對於不同的問題可能需要用不同的演算法來解決。

2.1.1 類神經網路

類神經網路(Neural Network)是一種模仿生物神經網路的結構和功能的數學 模型,透過一個一個的神經元連接在一起形成一個類似生物神經網路的網狀結構, 這些神經元會去學習並組合出問題所要的答案,學習的方式大多是使用監督式學

(24)

14 習的方法來優化神經元的權重,以得到解決問題的模型,類神經網路的學習可分 為兩個步驟:1.前向傳播(Forwardpropagation)2.反向傳播(Backpropagation),如圖 2.1 所示,在前向傳播中把資料輸入進隱藏層(hidden layer)得到一個輸出,接著反 向傳播的過程中,透過 loss function 計算輸出和答案的差距,並藉由優化器 (Optimizer)更新隱藏層裡的權重,經過不斷的重複這個流程,就可以完成模型的 訓練。 圖 2. 1 類神經網路訓練流程 target 為我們的目標也就是答案

2.1.2 卷積神經網路

卷積神經網路(Convolutional Neural Network, CNN)是類神經網路的一種,是近

年來流行的深度學習架構,其每個神經層都是由卷積層所組成,卷積層在運算的 時候對圖像上每一小塊像素區域的訊息做處理,這種作法加強圖像訊息的連續性, 使得神經網路對圖像有更好的理解能力。與其他深度學習架構相比,卷積神經網 路在圖像和語音辨識方面效果比較好。

(25)

15

2.1.3 卷積層

卷積層(Convolutional Layer)由許多的卷積核(Convolutional Kernel)也稱濾波

(Filter)(圖 2.2)所組成,此層最主要的目的為使用濾波來提取圖像中不同的特徵 (features)。 圖 2. 2 濾波示意圖 圖 2.2 為 3X3 大小的濾波,裡面的數字為可調的參數,透過不同參數的濾波可以 提取出不同的特徵,在深度學習裡我們所優化的權重就是濾波的參數,濾波的大 小會使卷積考慮不同像素間的關聯性,較大的濾波一次可以包含較多的像素一起 進行考慮,但有時候距離較遠的像素沒有關連性不應一起考慮,濾波的數量決定 一層可以提取出特徵的數,在底下我們描述濾波是如何提取圖像的特徵。 (a)

(26)

16 (b) (c) 圖 2. 3 卷積的運算圖 圖 2.3 為卷積提取特徵的流程圖,使用 3*3 大小的濾波對 5*5 大小的圖像去進 行卷積,步長設 1,最後得到的就是特徵圖,(a)展現了一次卷積運算的流程,其 計算出第一格的特徵值,接著只要按照步長滑動濾波將整張圖像都進行運算,就 能獲得特徵圖,(b)為第二次的卷積運算,(c)為最後一次運算,可以看到最終會得 到一個 3*3 大小的特徵圖。

(27)

17 圖 2. 4 對圖 2. 3 進行 Padding 使用卷積運算提取出來的特徵會比原圖像還要小,但有些網路的輸入和輸出大小 會維持不變,因此通常會在做卷積前進行 Padding 來使輸入經過卷積運算後維 持原來的大小,Padding 的做法就是在輸入的外圍填零進行補充,如圖 2.4 所示, 紅色的部分為 Padding 的地方,當然也有很多不同的網路會使用 Padding 來將提 取出來的特徵調整成特定的大小。

(28)

18

2.1.4 激勵函數

激勵函數(Activation Function)為類神經網路的一個方法,在卷積神經網路中通 常會接在卷積層輸出的後面,此方法最主要的目的是讓神經網路模型變為非線性, 在前一小節所描述的卷積只是單純的乘法運算,如果沒有加入激勵函數的話,網 路的輸入和輸出間還是會保持著線性的關係,然而線性的模型過於簡單,並不能 解決真實情況下許多複雜的問題,因此就需要使用激勵函數來讓模型變為非線性, 以解決各種複雜的問題。激勵函數存在著非常多的種類,較常見的如: Sigmoid、 Tanh、ReLU(Rectified Linear Units layer)等,Sigmoid 的公式為(2.1):

σ(𝑥) = 1 1+𝑒−𝑥 (2.1) Sigmoid 函數是深度學習領域開始時最常使用的激勵函數,Sigmoid 便於求導, 其函數圖和導數圖如下所示: 圖 2. 5 Sigmoid 左為函數圖,右為導數圖 Sigmoid 雖易於求導,在反向傳播時易於計算,但是其在網路深度很深時容易 出現梯度消失的現象,從圖 2.5 的導數圖中可以看到 Sigmoid 導數的最大值為 0.25,這意味著導數在每一層至少會被壓縮為原來的 1/4,通過兩層後被變為 1/16,當網路越深的時候,導數就會越趨近於 0,從而導致前面的權重不太能更

(29)

19 新,反之如果使用的激勵函數的導數恆大於時就會發生梯度爆炸(gradient exploding)問題。而 ReLU 解決了部分的問題,其公式為(2.2): ReLU(𝑥) = max⁡(0, 𝑥) (2.2) ReLU 是近年來最頻繁使用的激勵函數,因其存在以下優勢:解決梯度爆炸、計 算數度相當快、收斂速度快等,ReLU 的運算很簡單,只需要判斷輸入值是否 大於 0,其函數圖和導數圖如下所示: 圖 2. 6 ReLU 左為函數圖,右為導數圖 從圖 2.6 的導數圖可以看出 ReLU 的導數不是 0 就是 1,因此 ReLU 能解決部 分的梯度消失的問題,但是如果網路中的權重出現了負值,該權重就會無法更 新,因此還是存在著部份梯度消失的問題,本研究也使用 ReLU 來當我們的激 勵函數。

2.1.5 反卷積

反卷積 (De-convolution)為深度學習中上採樣(Up-Sampling)的方法的一種,其 最主要是為了將輸出結果進行特徵提取並放大還原,在上面的卷積運算中有提過, 圖像在經過卷積層進行特徵提取時會越來越小,然而有些問題會需求輸入和輸出 的大小一致,例如:語意分割等問題,此時就需要透過上採樣的方式將特徵還原 成原來的大小。雖然叫做反卷積但是反卷積並不是卷積的反向操作,而是一種特 殊的卷積操作,它會透過上面提到過的 Padding 或在數值間補 0 來擴大輸入特徵

(30)

20 圖的尺寸,在進行卷積操作來提取特徵,以此達到讓輸出變大的效果,在底下我 們展示一次反卷積的操作。 (a) (b) 圖 2. 7 反卷積的示意圖 我們要將輸入為 3*3 的特徵圖放大成 5*5,(a)對輸入的特徵圖進行補 0 並放 大,補 0 的位置是按設置的步長決定的,這裡步長為 2 代表在每個數值間填一 個 0,之後再對外圍 Padding 將圖片放大為我們要的大小,(b)在我們的輸入放 大後對其進行卷積運算,最終可以看到我們輸出的特徵圖放大成 5*5 的大小。

(31)

21

2.1.6 U-Net

U-Net[17]是卷積神經網路的一種模型架構,其最一開始是用來處理像素級別 的分割問題,在像素級別的分割問題上輸出必須要和輸入保持相同的大小,後來 這樣的架構也用在許多地方,如醫學影像、圖像去噪等,其架構圖如圖 2.8 所示: 圖 2. 8 U-Net 模型架構圖[17] U-Net 和 FCN 非常的相似,一開始都使用卷積層進行下採樣提取圖片的特徵, 上採樣的部分都使用反卷積,並且在上採樣的過程中都有使用 skip-connection 來將下採樣提取到的特徵傳遞給上採樣,以幫助上採樣在提取特徵時也能將下 採樣提取出來的特徵進行考慮,U-Net 比較大的特點在於其上採樣和下採樣是 對稱的,然後在 skip-connection 時 U-Net 是使用將圖片的第三維進行疊加 (concat)的操作,而不是像 FCN 一樣把數值加在一起。

(32)

22

2.1.7 結構相似性

結構相似性(structural similarity,SSIM)是一種用以衡量兩張影像相似程度的指 標,我們人類在觀看圖片時善於抽取圖片間局部的訊息來理解,而不是針對每個 像素逐一理解,SSIM 就是基於這樣的原理設計出來的,其會考量相鄰像素間的 關聯性,因此 SSIM 符合我們人類視覺對圖像相似度的衡量,其公式如下(2.3), 在深度學習中 SSIM 可以作為 loss function 使用,本研究也使用 SSIM 當作我們 loss function 的一部分。 SSIM(𝑥, 𝑦) = (2𝜇𝑥𝜇𝑦+𝐶1)(2𝜎𝑥𝑦+𝐶2) (𝜇𝑥2+𝜇𝑦2+𝐶1)(𝜎𝑥2+𝜎𝑦2+𝐶2) (2.3) 其中𝜇𝑥,𝜇𝑦為圖像區域中所有像素的平均值,𝜎𝑥𝜎𝑦為圖像像素值的變異數,在計 算兩張圖像的結構相似性時,會開一個局部性的視窗,計算出視窗內的結構相似 性,每次以像素為單位移動視窗,直到整張圖像每個位置的局部結構相似性都計 算完,再將全部的局部結構相似性平均起來即為兩張影像的結構相似性,兩張圖 像越相似 SSIM 的值會越大,當圖像完全相同時 SSIM 會是 1,因此要使用 SSIM 當作 loss function 時需要改寫為式(2.4):

loss=1-⁡SSIM(𝑥, 𝑦) (2.4)

(33)

23

2.1.8 反向傳播

反向傳播(Backpropagation, BP)是一種用來訓練類神經網絡的常見方法,在前

面我們有提到類神經網路的訓練可分為兩個步驟,在前向傳播中把資料輸入進隱 藏層(hidden layer)得到一個輸出,接著反向傳播會透過 loss function 去計算輸出 和正確答案的損失,並將損失丟入前向傳播公式的求導計算出網路中權重(weight, 需要訓練的參數)的梯度(Gradient),之後我們會透過計算出來的梯度使用優化器 演算法進行權重的更新以最小化損失,並經由不斷的迭代使模型最佳化,在卷積 神經網路中我們要更新的權重為濾波裡的數值,在下一個小節我們會介紹優化器 演算法中最基本的梯度下降法以及深度學習裡熱門的 Adam (adaptive moment estimation)優化演算法。

2.1.9 梯度下降法

梯度下降法(Gradient descent)是一個用來找出函數最佳解的優化演算法,在 深度學習中我們使用 loss function 計算出前向傳播得到的輸出和正確答案間的損 失後,我們可以藉由這個損失得到一個新的函數f(𝑥; 𝜃),接著我們對𝜃求導計算 出梯度後就能進行權重的更新,梯度就是決定權重要往個方向更新才會讓損失更 小,之後不斷重複上述流程直到我們的模型收斂為止,其步驟如下所示: while 模型沒有收斂: Step1: t = t+1 Step2:g =∇𝜃𝑓𝑡(𝑊𝑡−1) Step3:W𝑡=𝑊𝑡−1− α ∗ g end while t:第幾次迭代 g:計算出來的梯度 ∇𝜃𝑓𝑡(𝑊𝑡):計算梯度的方法 W:要優化的權重 α:學習率 圖 2. 9 Gradient descent 的步驟

(34)

24

2.1.10 Adam 優化演算法

Adam(Adaptive moment estimation)[18]為 Momentum[19]和 RMSprop 的結合;

Momentum 在梯度下降加入動量𝑚𝑡的計算,在每次算出來的梯度乘上一個衰減 值不斷的累積下去,來加速模型的收斂,Momentum 的步驟如下所示: while 模型沒有收斂: Step1: t = t+1 Step2:g =∇𝜃𝑓𝑡(𝑊𝑡−1) Step3:𝑚𝑡= 𝛽1∗ 𝑚𝑡−1+ (1 − 𝛽1) ∗g Step4:W𝑡=𝑊𝑡−1− α ∗ 𝑚𝑡 end while t:第幾次迭代 g:計算出來的梯度 ∇𝜃𝑓𝑡(𝑊𝑡):計算梯度的方法 W:要優化的權重 α:學習率 𝑚𝑡: momentum 𝛽1:指數衰減率 圖 2. 10 Momentum 的步驟 RMSprop 在梯度下降加入了v𝑡的計算,v𝑡的作用是在網路訓練時自動調整學習率 的變化,依照各權重累積的梯度不同去調整各自的學習率,使訓練較快的權重更 新慢點,訓練較慢的權重更新快點,RMSprop 的步驟如下: while 模型沒有收斂: Step1: t = t+1 Step2:g =∇𝜃𝑓𝑡(𝑊𝑡−1) Step3:𝑣𝑡= 𝛽2∗ 𝑣𝑡−1+ (1 − 𝛽2) ∗ g2 Step4:W𝑡=𝑊𝑡−1− α √𝑣𝑡+∈∗g end while t:第幾次迭代 g:計算出來的梯度 ∇𝜃𝑓𝑡(𝑊𝑡):計算梯度的方法 W:要優化的權重 α:學習率 𝑣𝑡: raw moment 𝛽2:指數衰減率 ∈:Epsilon 圖 2. 11 RMSprop 的步驟

(35)

25 Adam 結合了兩者的優點,除此之外還加入了對𝑚𝑡和𝑣𝑡的校正,此校正可以防止 因𝑚0和𝑣0初始值為 0 導致後面的估計偏差向 0 的問題,Adam 的步驟如下: while 模型沒有收斂: Step1: t = t+1 Step2:g =∇𝜃𝑓𝑡(𝑊𝑡−1) Step3:𝑚𝑡= 𝛽1∗ 𝑚𝑡−1+ (1 − 𝛽1) ∗g Step4:𝑣𝑡= 𝛽2∗ 𝑣𝑡−1+ (1 − 𝛽2) ∗ g2 Step5:𝑚̂𝑡= 𝑚𝑡 1−𝛽1𝑡 Step6:⁡𝑣̂𝑡= 𝑣𝑡 1−𝛽2𝑡 Step7:W𝑡=𝑊𝑡−1− α∗𝑚̂𝑡 √𝑣̂𝑡+∈ end while t:第幾次迭代 g:計算出來的梯度 ∇𝜃𝑓𝑡(𝑊𝑡):計算梯度的方法 W:要優化的權重 α:學習率 𝑚𝑡: momentum 𝑣𝑡: raw moment 𝛽1,𝛽2:指數衰減率 ∈:Epsilon 圖 2. 12 Adam 的步驟

(36)

26

2.2 立體視覺

所謂立體視覺是視覺器官對三維空間的各種物體的遠近、高低、前後的感知和 判斷,我們人類通常是透過雙眼視覺來觀看世界,並把左右眼的視差經過大腦處 理才使得我們看這個世界是立體的,機器也同理,可以藉由兩張圖間產生的視差 來獲得空間的三維資訊。

2.2.1 相機模型

三維空間中的物體經由相機成相時,會因相機的所在位置、內部元件等差異產 生不同影像,其成像的投影關係可由相機的幾何參數描述,分為內部參數和外部 參數,相機的內部參數包含:鏡頭焦距、像素長寬比、影像主軸點、稜鏡扭曲,內 部參數所代表的是物體是如何從相機座標投影到像素座標,通常相機的內部參數 是固定不變的,可藉由相機標定取得,由於本論文使用 KITTI 資料集進行研究, 其提供的資料已有相機的內部參數,因此這裡就不提及相機標定的流程;而外部 參數所代表的是相機座標和世界座標間的轉換關係,我們可以透過一組旋轉矩陣 與位移矩陣來描述。 機器通常藉由相機來取得現實場景的情報,常見之相機成像是透過針孔相機原 理,將三維空間的座標點投影到二維圖片上,如圖 2.13 所示,P 為三維空間上的 一點,𝑃𝑐為 P 點經過相機投影到二維圖片上的點,O 為世界座標的中心點

(37)

27 圖 2. 13 相機針孔模型 [來源:http://silverwind1982.pixnet.net/blog/post/134551091] 其投影相關之矩陣如式(2.5)所示: ( 𝑧𝑢′ 𝑧𝑣′ 𝑧 )~( 𝑓𝑢 0 𝑢𝑐 0 𝑓𝑣 𝑣𝑐 0 0 1 ) ( 𝑥 𝑦 𝑧 ) (2.5) 在這裡我們假設相機座標就是我們的世界座標,𝑓𝑢與𝑓𝑣為 X 軸與 Y 軸的等效焦 距,焦距所代表的是相機中心到投影平面的距離,𝑢𝑐與𝑣𝑐為圖片的中心座標, ( 𝑓𝑢 0 𝑢𝑐 0 𝑓𝑣 𝑣𝑐 0 0 1 )為相機的內部參數,可以用 K 表示,因此從真實世界的三維座標投 影到圖片上的公式可簡寫為,在這裡我們不考慮形變的問題 ( 𝑧𝑢′ 𝑧𝑣′ 𝑧 )~K ( 𝑥 𝑦 𝑧 ) (2.6)

(38)

28

2.2.2 座標軸的轉換

在三維的空間中兩個座標軸間的轉換可以由一組旋轉矩陣與位移矩陣來描述, 也 就 是 和 上 面 所 提 到 的 相 機 外 部 參 數 相 同 , 如 圖 2.14 所 示 : 圖 2. 14 三圍座標軸轉換 [來源:http://silverwind1982.pixnet.net/blog/post/134551091] 棋盤為我們本來的座標軸,經過一個轉換矩陣後可以轉換到相機的座標軸,其轉 換相關公式如下所示: ( 𝑥, 𝑦, 𝑧,)~ (𝑅𝑐𝑇𝑐)3𝑋4( 𝑥 𝑦 𝑧 1 ) (2.7) 在這裡 (𝑅𝑐𝑇𝑐)3𝑋4為相機的外部參數,分別為旋轉矩陣𝑅𝑐3𝑋3與位移矩陣𝑇𝑐3𝑋1,在 這裡注意雖然轉換矩陣的大小為 3X4,但是實際的自由度只有 3 個旋轉和 3 個位 移。 我們可以把公式 2 和公式 3 合在一起寫成: ( 𝑧𝑢′ 𝑧𝑣′ 𝑧 )~K⁡(𝑅𝑐𝑇𝑐)3𝑋4( 𝑥 𝑦 𝑧 1 ) (2.8) 此公式代表的涵義是從世界座標投影到圖片像素上。

(39)

29

2.2.3 圖片間的投影

在上面兩個小節中我們介紹了三維空間中的物體是如何投影到圖片上的,以及 不同座標軸間是如何轉換,在這小節我們將介紹如何使用上面所提到的投影公式, 實現兩張圖片間的投影。 (a) (b) 圖 2. 15 兩張圖間的投影示意圖 (a)為⁡𝐼𝑡,(b)為⁡𝐼𝑠,可以看到兩張圖都為同一個場景,但是視角不同 在這裡我們假設我們有兩張圖𝐼𝑡和𝐼𝑠,那我們要如何將𝐼𝑡投影到𝐼𝑠上呢,首先我 們都知道圖片是經由相機投影真實世界的物體所產生的式(2.6),因此我們的第一 步就是將圖片還原到真實世界,可藉由式(2.6)的反向得到,具體如式(2.9): 𝐾−1(𝑑𝑢 ′ 𝑑𝑣′ 𝑑 )~( 𝑥 𝑦 𝑧 ) (2.9) 𝐾−1為 K 的逆矩陣,這裡注意 d 為圖片的深度,也就是物體到相機的距離,由於 圖片是 2 維的,在保存成圖片時會失去深度訊息,因此要將圖片還原成到真實世 界,還必須要有深度訊息,我們以𝐼𝑡上的一點𝑃𝑡代表要投影的點,然後將深度訊 息分開來寫,可得(2.10):

(40)

30 𝐷𝑡(𝑃𝑡)𝐾−1𝑃 𝑡~( 𝑥 𝑦 𝑧 ) (2.10) 𝐷𝑡代表的是𝐼𝑡所對應的深度圖,後面的(𝑃𝑡)代表𝑃𝑡所對應的深度值。 現在我們將𝑃𝑡轉到相機座標中了,再來就要進行座標軸的轉換了,我們要將𝐼𝑡 的座標軸轉到𝐼𝑠的座標軸上,座標軸間的轉換如式(2.7),我們可將轉換矩陣寫成 𝑇𝑡→𝑠代表由𝐼𝑡投影到𝐼𝑠的轉換矩陣,並把式(2.7)中的座標進行替換,改寫後如式 (2.11): ( 𝑥, 𝑦, 𝑧,)~𝑇𝑡→𝑠𝐷𝑡(𝑃𝑡)𝐾 −1𝑃 𝑡 (2.11) 座標軸進行轉換之後我們就得到了𝑃𝑡投影到𝐼𝑡座標軸後的值了,最後我們只需 要將這個座標投影到像素座標中,式(2.6),就完成從𝑃𝑡到𝑃𝑠的投影,因此我們最 終的投影方程如下式(2.12): 𝑃𝑠 ~K𝑇𝑡→𝑠𝐷𝑡(𝑃𝑡)𝐾−1𝑃 𝑡 (2.12)

2.2.4 視圖合成

視圖合成的思路最先應用在使用單張圖片生成新視角的問題中,在傳統的視角 生成問題中,首先會利用兩張或多張圖求取圖片之間的視差,之後再通過視差來 生成新的視角,在這裡我們使用視圖合成的概念,藉由𝐼𝑠的像素值生成一張和𝐼𝑡 同視角的圖 𝐼̂,如圖 2.16 所示: 𝑠 圖 2. 16 新視圖合成示意圖[18]

(41)

31 我們先將𝑃𝑡利用式(2.12)投影到其在𝐼𝑠的對應點𝑃𝑠上,並取其像素值放回原來的 位置上,當投影時有可能不落在整數像素點的位置,因此我們使用雙線性插值法 對不在整數位置的點從鄰近像素中取值。當我們對𝐼𝑡所有像素點都進行此操作後, 我們就可以藉由𝐼𝑠的像素值生成一張新的𝐼̂,在理論上𝐼𝑠 ̂會和𝐼𝑠 𝑡一模一樣,但實際 上因為𝐼𝑠和𝐼𝑡間存在著差異,所以不可能完全一樣,這裡的差異我們在下一小節 會再詳細描述。 (a) (b) (c) 圖 2. 17 合成的新視圖 在這裡我們展現上面所說的視圖合成,其中(a)為𝐼𝑡,(b)為𝐼𝑠,(c)為合成出來的新 視圖𝐼̂,從圖中可以看出(a)和(c)長的很相似,但仔細看會有一些差異。 𝑠

(42)

32

2.2.5 會造成錯誤估計的原因

兩張圖片間的投影存在著一些匹配的問題,因此無法合成出一張一模一樣的新 視圖,在這一小節中我們將說明投影時存在的問題,為什麼會在網路訓練時造成 錯誤估計。 (a) (b) 圖 2. 18 錯誤估計場景展示圖[16] 圖(a)為目標圖,圖(b)源視圖,我們用這兩張圖來展示投影時存在的問題,會造成 投影會出現問題的地方主要有重複紋理、低紋理、非共同視野、遮擋、移動物體 等等,我們在底下一一說明。

(43)

33 1. 重複紋理 圖 2. 19 重複紋理示意圖 紅色的部分為我們標示的重複紋理的部分,我們只標示了一部份來進行說明,在 場景中往往存在著一些重複紋理的地方例如馬路、樹、鐵軌等等,還有我們圖中 看到的地板磚,這些地方由於相似的紋理重複出現導致我們在進行圖片投影時並 沒有辦法投影到正確的對應位置。 2. 低紋理 圖 2. 20 低紋理示意圖 紅色的部分為我們標示的重複紋理的部分,我們只標示了一部份來進行說明,低 紋理和重複紋理的道理一樣,在場景中常常會出現一整塊低紋理的地方,例如車 子的外殼、道路線、牆壁等等,這些地方往往都是單一的色塊,我們在進行圖片 投影時也沒有辦法投影到正確的對應位置。

(44)

34 3.非共同視野 圖 2. 21 非共同視野示意圖 紅色的部分為我們標示的重複紋理的部分,我們只標示了一部份來進行說明,在 場景移動的時候因為視野的問題會有一些地方在下個場景中是沒有的,通常是遠 離相機中心的地方會先不見,而這些地方本來就沒有對應的投影點,因此如果拿 這些地方計算損失的話會出現錯誤。 4.遮擋 圖 2. 22 遮擋示意圖 紅色的部分為我們標示的遮擋的部分,我們只標示了一部份來進行說明,在場景 中物體間存在著遮擋的問題,可能你在上一幀有看得到的地方經過移動之後在下 一幀就被其他物體遮擋住而看不到了,而這些地方本來就沒有對應的投影點,因 此如果拿這些地方計算損失的話也會出現錯誤。

(45)

35 5.移動物體 (a) (b) 圖 2. 23 移動物體示意圖 圖(a)為目標圖,圖(b)源視圖,紅色的部分為我們標示的移動物體的部分,移動 物體是室外場景最主要會造成投影錯誤的地方,例如車子、行人等等,從圖(a) 的地方可以看到我們的人本來在那個位置,經過投影後我們可以大概知道人應 該會待在跟原來差不多的位置,然而人卻跑到了圖(b)紅色框的位置,所以我們 本來投影過去的那個位置就不是人了,然後我們本來預計會投影到那裡的點也 會因為人突然出現而造成遮擋,這就是移動物體會造成錯誤估計的原因。

(46)

36

第三章研究方法與設計

本章將介紹我們實驗的整個流程,說明我們是如何實現非監督式單眼深度估計。 首先於 3.1 節我們會簡單說明整個實驗的流程以及模型訓練的流程;3.2 節說明 我們對資料進行的前處理以及使用的資料增強方法;3.3 節說明我們所使用的 CNN 模型;3.4 節說明新視圖合成後如何計算損失;3.5 節說明邊緣檢測平滑損 失;3.6 節說明我們實驗排除錯誤估計的方法;3.7 節說明使用雙眼資料進行測試; 3.8 節說明準確度是如何計算的。 圖 3. 1 實驗流程圖 資料收集 資料前處理 資料增強 訓練模型 估計深度圖 準確率計算

(47)

37

3.1 實驗流程

圖 3.1 為本論文的實驗流程圖,首先資料收集的部分,本論文使用 KITTI 資料 集進行研究,接著我們會進行資料的前處理,去除掉不符合訓練規則的資料,再 來我們使用資料增強的方法增加訓練資料減少過擬合的問題,資料都處理完之後 我們會丟進我們的 CNN 進行模型的訓練,訓練的流程如圖 3.2 所示,當模型訓 練完畢之後,我們會使用測試資料丟進視差網路來估計我們的深度圖,最後進行 準確率的計算以和其它方法做比較。 圖 3. 2 模型訓練流程 我們一次訓練流程的輸入為兩張圖,目標圖和源視圖,首先我們將目標圖丟進視 差網路(dispnet)得到目標圖的視差,之後取視差的倒數作為我們的深度圖,將目 標圖和源視圖的第三維 concat 丟進位姿估計網路(posenet)得到目標圖與源視圖 之間的位姿關係,有了深度和兩張圖間的位姿之後我們就可以利用 3.2.4 小節的 視圖合成方法生成新視圖,接著用生成的新視圖和目標圖進行 loss 的計算,在計 算 loss 前我們會先計算一個 mask 排除一些會造成網路錯誤估計的部分,之後就 是將這個 loss 放入優化器進行反向傳播調整視差網路和位姿估計網路的權重。

(48)

38

3.2 資料處理

新視圖合成的方法需要有深度以及位姿資訊才有辦法進行新視圖的合成,因此 當兩張圖間沒有位移的時候,如圖 3.3 所示,位姿是不能進行計算並且會造成錯 誤估計,所以在資料前處理的部分我們會將資料集中沒有位移的資料先進行排除, 以確保整個訓練集都是位移的場景。 (a) (b) 圖 3. 3 靜止場景圖[16] 圖(a)為目標圖,(b)為源視圖,可以看到(a)和(b)之間因為車子正在停紅燈所以並 沒有前進,所以實質上整個場景是沒有移動的,但是停紅燈的時候還是會有物體 在移動,例如圖上的公車,因此這些移動物體也會造成我們網路的錯誤估計。

(49)

39 我們還使用了裁剪(Crop)和縮放比例(Scale)兩種資料增強方法增加資料量防止 過擬合,如圖 3.4 所示,必須特別注意的是在進行縮放比例方法時因為圖像尺度 改變了因此相機的內部參數也要跟著進行調整。 (a) (b) 圖 3. 4 資料增強 圖(a)為原來的圖像,圖(b)為資料增強後的圖像

(50)

40

3.3 網路架構

這小節將介紹我們所使用的視差網路和位姿估計網路的架構。

3.3.1 視差網路

圖 3. 5 視差網路架構 淡藍色的長方形代表輸入或特徵圖或輸出,淡紅色的部分為兩次的卷積操作提 取出來的特徵圖(為了方便觀看用成這樣),箭頭為卷積操作,灰色細長的箭頭 為 concat,注意這裡代表的是將這層 concat 給後面的所有層。

(51)

41 圖 3.5 為我們的視差網路的架構,我們的模型架構是基於 U-Net++[20]的架構 去進行修改以適用於我們的問題之中,除了輸出層我們每層都使用 Relu 激勵函 數並且 padding 都為 same,我們的輸入為一張大小 128*416*3 的圖片,前面 7 層 我們使用捲積步長為 2 對圖片進行下採樣(每進行一次圖片大小就減半),第一層 的特徵圖(feature map)數量為 16,之後每向下經過一層特徵圖數量就加倍,第 6 層後就維持 512,經過 7 次下採樣取得不同大小的特徵之後,我們就開始對我們 的圖片進行 upsampling(上採樣),以還原為原來的大小,我們使用反卷積進行圖 片的上採樣,在上採樣的過程中我們使用 skip-connection 把在下採樣過程中不同 大小的特徵圖傳遞給上採樣中的各個層幫助上採樣在提取特徵時也能將下採樣 提取出來的特徵進行考慮,在這裡特別注意 skip-connection 的部分,在 3.1.6 小 節的部分我們有介紹過 U-Net,而 U-Net++最大的特色就在於這個部分,在 U-Net 中我們的 skip-connection 只將相同大小的特徵 concat 再一起,而 U-Net++則是將 每層下採樣提取到的特徵都進行了上採樣在全部 concat 給相同大小的上採樣層 進行特徵的提取,通過這樣的作法能幫助我們的網路更好的利用不同層次的特徵, 輸出層的部分我們使用式(3.1)進行深度的估計,以確保我們的深度輸出在一個可 靠的範圍而且為正,在最後的 4 層中我們分別預測出不同尺度大小的深度圖進行 loss 的估計以用不同尺度的特徵圖預測深度圖,並確保上採樣的過程中都在進行 深度的估計,之後在把預測出來的視差圖在放大 concat 回下一層。 1 𝛼𝑑∗𝑠𝑖𝑔𝑚𝑜𝑖𝑑(𝑥)+𝛽𝑑 (3.1) 其中𝛼𝑑和𝛽𝑑為可調參數用來調整輸出的深度值在可靠的範圍。

(52)

42

3.3.2 位姿估計網路

圖 3. 6 位姿估計網路架構

淡藍色的長方形代表輸入或特徵圖或輸出,箭頭為卷積操作

圖 3.6 為我們位姿估計網路的架構,這是一般的 CNN 架構,除了輸出層我們

每層都使用 Relu 激勵函數 padding 都為 same,並且用捲積步長為 2 對圖片進行 下採樣(每進行一次圖片大小就減半),最後一層沒有使用激勵函數,我們的輸 入為兩張大小 128*416*3 的圖片將第三維 concat 在一起,輸出為兩張圖間的位 姿關係(6 個通道的變換矩陣),因為最後一層預測出的大小為 1x4 因此我們這裡 直接對它取平均,在最後獲得 1x1 通道為 6 的轉換矩陣。

(53)

43

3.4 視圖合成損失

在上一小節中介紹了我們的網路架構,有了視差網路和深度估計網路後我們就 可以獲得視圖合成需要的深度以及位姿資訊,視圖合成方法參考 2.2.4 小節,在 這裡我們在展示一次投影方程,式(3.2),並說明上面的參數從哪取得。 𝑃𝑠 ~K𝑇𝑡→𝑠𝐷𝑡(𝑃𝑡)𝐾−1𝑃 𝑡 (3.2) 其中𝑃𝑠, 𝑃𝑡為我們輸入的源視圖和目標圖,K 為相機內參這是已知的數值,𝑇𝑡→𝑠為 目標圖投影到源視圖的位姿,由位姿估計網路取得,𝐷𝑡為目標圖的深度,由視差 網路取得。 合成新視圖之後要開始計算新視圖和目標圖的差異,在這裡我們計算差異的方

法使用 SSIM 和 L1 loss 的結合,因為只用 L1 loss 無法很好的比較兩張圖是否一 樣,在這點上 SSIM 考慮了相鄰像素間的結構,因此在估計兩張圖片是否相似上 更為準確,我們的視圖合成損失如式(3.3)所示: 𝐿𝑝 = (1 − 𝛼𝑝)|𝐼̂ − 𝐼𝑠 𝑡| + 𝛼𝑝1−𝑆𝑆𝐼𝑀(𝐼̂ ,𝐼𝑠 𝑡) 2 (3.3) 其中𝐿𝑝為視圖合成損失,𝛼𝑝為可調參數,用來調整 SSIM 和 L1 loss 所佔的權重, 𝐼̂為合成出來的新視圖,𝐼𝑠 𝑡為目標圖。

(54)

44

3.5邊緣檢測平滑損失

視圖合成損失在場景低紋理或均質的區域無效,例如均勻顏色的道路、物體等 等。為了解決這個問題我們可以利用深度的連續性,在 loss 裡加上一個平滑損失 讓有效區域的值能夠藉由深度的連續性傳遞給無效區域,但是在物體邊緣的地方 深度本來就不具有連續性,因此我們的平滑損失只在不是物體邊緣的地方進行, 平滑損失公式如下(3.4)所示: 𝐿𝑠= ∑ |∇𝐷(𝑝𝑝𝑡 𝑡)|⋅ (𝑒−|∇𝐼(𝑝𝑡)|)𝑇 (3.4) 其中𝐿𝑠為平滑 loss,𝑝𝑡為𝐼𝑡上一點,∇𝐷(𝑝𝑡)為估計出來的視差的梯度,∇𝐼(𝑝𝑡)為𝐼𝑡 的梯度,當目標圖梯度具有連續性而深度圖梯度不具連續性時我們就給予懲罰值。

3.6排除錯誤估計

我們在 2.2.5 小節的地方有說明了我們網路訓練時會造成錯誤估計的原因,在 這小節將介紹我們提出的方法,來改善這些錯誤估計的問題。對於會造成錯誤估 計的地方我們有兩種思路去解決,第一個思路就是忽略這些地方不去計算這些像 素的 loss 讓網路在訓練時不會造成錯誤估計,這些沒估計到的位置我們就依靠 4.5 節的平滑損失來估計,而第二個思路就是忽略的同時我們也想辦法重新計算 這些點,在我們的方法中解決了兩個會造成錯誤估計的地方,我們在下面分別介 紹。

3.6.1 排除非共同視野

首先我們解決非共同視野的部分,非共同視野在另一張圖上找不到相對應的點, 因此無法進行重新估算,只適合使用第一種思路來解決,在訓練過程中目標圖投 影到源視圖外的點通常會補 0 當作是新視圖的像素值,然而這樣的作法是會出錯 的,因為補 0 的地方和原來的目標圖會計算損失,已導致不正確的損失計算,在

(55)

45 我們的方法中我們把訓練過程中投影出去的點記錄下來,並做一個 mask 來忽略 不計算這些點的損失,圖 3.7 為此方法所排除的部分的示意圖,隨著網路的訓練 我們的 mask 也越來越精準並能有效排除非共同視野的錯誤估計 (a) (b) (c) 圖 3. 7 非共同視野 mask 圖(a)為目標圖,(b)為源視圖,(c)為非共同視野 mask(黑色代表非共同視野的部分, 白色是有效點),可以看出我們的 mask 能有效排除非共同視野的點。

(56)

46

3.6.2 排除和相機等速移動物體以及重複紋理

第二個我們解決了和相機等速移動物體以及重複紋理的部分,我們一樣使用第 一種思路去解決,在這裡我們參考了 monodepth++[21]的作法,我們可以觀察到 在重複紋理或者是和相機等速移動的物體通常像素值都會是一樣的,如圖 3.8 的 (a)(b)所示,這意味著在不進行投影的情況下相鄰兩幀間的這些地方損失還是會 很小,利用這個原理我們可以得到式(3.5)

Mask2= [loss(𝐼𝑡, 𝐼𝑠)>=loss(𝐼𝑡, 𝐼̂)] 𝑠 (3.5)

其中𝐼𝑡為目標圖,𝐼𝑠為源視圖,𝐼̂為合成的新視圖,當等式成立時為 1 代表要考𝑠

慮,不成立時為 0 代表要排除。可以看到此方法所排除的部分的示意圖如下 3.8 的(c)所示。

(a)

(57)

47 (c) 圖 3. 8 相機等速移動物體以及重複紋理 mask 圖(a)為目標圖,(b)為源視圖,從(a)、(b)兩張圖可以看出我們整個畫面向前移動 了,但是因為畫面中的車子(圖(b)紅色框起來的部分)和我們的相機等速移動,因 此所在的位置幾乎沒有變動,(c)為相機等速移動物體以及重複紋理 mask(黑色代 表非共同視野的部分,白色是有效點),可以看出我們的 mask 有效的排除了中間 車子的部分,還有一些重複紋理的地方,如馬路、草皮、鐵軌等

3.6.3 排除錯誤估計的 mask

我們將兩個 mask 結合再一起,結合的公式如下: I𝑀𝑎𝑠𝑘=𝑀𝑎𝑠𝑘1*𝑀𝑎𝑠𝑘2 (3.6) 其中𝑀𝑎𝑠𝑘1為非共同視野 Mask, 𝑀𝑎𝑠𝑘2為相機等速移動物體以及重複紋理 mask。 最終我們整個網路的 loss function 如下: 𝐿𝑡𝑜𝑡𝑎𝑙 = 𝐼𝑚𝑎𝑠𝑘⋅ 𝐿𝑝+ 𝛼𝑠𝐿𝑠 (3.7) 其中𝐿𝑡𝑜𝑡𝑎𝑙為最終 loss,𝐼𝑚𝑎𝑠𝑘為我們計算出來的 mask,𝐿𝑝為視圖合成損失,𝛼𝑠為 可調參數用來決定平滑損失影響多少,𝐿𝑠為平滑損失。

(58)

48

3.7雙眼資料

在 4.4 節中我們把錯誤估計的地方印了出來,發現我們的方法錯誤估計的地方 主要落在車子、行人上,也就是所謂的移動的物體,因此如果能解決移動物體所 造成的錯誤估計那對我們的方法非常的有幫助,在我們的方法中雖然沒有完全解 決移動物體的問題,但是我們提出了一個比較簡單的方法驗證如果場景中沒有移 動物體,結果是否會比較好,我們的方法為把雙眼資料融入訓練集中,如圖 3.9 所示,最終我們證明了當場景中沒有移動物體時結果會有很大的進步,這也代表 如果我們在收集資料時盡量收集靜態的場景,或者在資料前處理的部分就先過濾 掉,那我們方法的結果將能大大的進步,這裡注意雖然融入了雙眼資料訓練,但 是當模型訓練完時還是用單張圖就可估計深度。 (a) (b) 圖 3. 9 雙眼視覺的資料[16] 圖(a)為目標圖,(b)為源視圖,雙眼視覺的圖為兩個相機在同一時間拍出來的圖, 我們可以知道在雙眼視覺中兩張圖一定是靜態的不會有在移動的物體。

(59)

49

3.8準確率計算

由於我們估測出來的深度圖是相對深度,沒有絕對的尺度,因此在比較準確率 時會先把我們的尺度縮放到和真實值同一個區間,在進行比較,因為真實值是稀 疏點雲資料,因此我們只比較有真實值的地方,我們的比較方法如下: [max (𝐷𝐼𝑡 𝐷𝑔𝑡, 𝐷𝑔𝑡 𝐷𝐼𝑡) < α]⁡ (3.8) 其中𝐷𝐼𝑡為我們預測出來的深度圖,𝐷𝑔𝑡為真實值,α為可變參數用來決定我們預 測 出 來 的 深 度 圖 和 真 實 值 差 多 少 還 算 準 確 , 後 面 4.2 小 節 我 們 用 δ 表 示 max (𝐷𝐼𝑡 𝐷𝑔𝑡, 𝐷𝑔𝑡 𝐷𝐼𝑡)。

(60)

50

第四章實驗結果

本章將介紹我們的實驗結果,首先於 4.1 節會介紹我們的實驗環境以及實驗參 數設定,4.2 節展示我們的視差網路估計出來的深度圖,4.3 節展示和其他方法比 較的數據,4.4 節將我們的方法估測錯誤的地方顯示出來。

4.1實驗環境及實驗參數

表 4. 1 實驗環境 CPU I5-4670 VGA NVIDIA GTX-960 4G 作業系統 Windows 7 開發環境 Tensorflow 程式語言 Python3.5 RAM 12GB 資料集 KITTI 訓練資料 單眼約 44000 筆、雙眼約 22000 筆 測試資料 697 筆(和訓練資料不同場景的)

(61)

51 表 4. 2 實驗參數 優化器 Adam 優化器 學習速率 0.00005 訓練迭代次數 300000 batch 大小 1 視圖合成損失的α𝑝 0.85 平滑損失的𝛼𝑠 0.5 視差網路的𝛼𝑑 10 視差網路的𝛽𝑑 0.01

(62)

52

4.2深度圖估計

在這小節我們將展示我們的視差網路所估計出來的深度圖,首先我們先展示我 們的方法用單眼資料和真實值以及其他方法的比較,在來我們會展示我們的方法 用單眼資料、雙眼資料、單眼+雙眼資料預測出來的結果。 圖 4. 1 深度圖和其他方法的比較圖 此結果為我們將我們估計出來的深度圖可視化的結果,越白的地方代表離畫面越 近,越黑的地方代表離越遠,其中 Eigen 為[4]的結果是監督式的方法,SFM-Learner 為[15]的結果是非監督式的方法,Ours 為我們的方法使用單眼資料估計

出來的結果,Ground-truth 為 KITTI 提供的 LiDAR 資料插值得到的結果,和同 為非監督式的 SFM-Learner 相比我們的輪廓更為明顯,邊緣的部分更清楚,這主 要是 4.5 小節提到的邊緣檢測平滑損失的效果,SFM-Learner 為一般的平滑損失, 因此在物體邊緣的部分也會被平滑損失影響。

(63)

53

圖 4. 2 深度圖比較圖

我們比較了我們的方法使用單眼資料、雙眼資料、單雙眼資料混合估計深度圖的 結果,從圖中可以看到使用雙眼資料的模型在較遠的地方也能清楚的估計出物體 的深度,而且對於移動物體的估計比起單眼也比較清楚。

(64)

54

4.3準確率比較

在這小節我們展示和其他方法比較的結果,比較方法在 4.8 小節介紹過。

表 4. 3 準確率比較圖

Method Dataset Supervised Abs Rel Sq Rel RMSE RMSE log δ< 1.25 δ< 1.252 δ< 1.253 EIGEN[4] Fine K Depth 0.203 1.548 6.307 0.282 0.702 0.890 0.958 SFM-Learner[15] K No 0.183 1.595 6.709 0.270 0.734 0.902 0.959 GeoNet[22]VGG K No 0.164 1.303 6.090 0.247 0.765 0.919 0.968 GeoNet[22]ResNet K No 0.155 1.296 5.857 0.233 0.793 0.931 0.973 Ours mono(without mask) K No 0.168 1.574 6.117 0.246 0.777 0.922 0.968 Ours mono K No 0.150 1.256 6.027 0.234 0.798 0.928 0.971 Ours stereo(without mask) K No 0.145 1.234 5.626 0.225 0.823 0.938 0.971 Ours stereo K No 0.143 1.179 5.588 0.228 0.819 0.936 0.971 Ours mono+ stereo

(without mask) K No 0.142 1.076 5.454 0.220 0.817 0.939 0.975 Ours mono+ stereo K No 0.145 1.111 5.538 0.224 0.812 0.937 0.974

K 表示使用的為 KITTI 資料集,Ours 為我們的方法,我們分別對單眼資料、雙

眼資料、單雙眼資料混合都進行了實驗,mono 為使用單眼資料、stereo 為使用 雙眼資料、mono+stereo 為單雙眼資料混合,為了驗證我們 mask 的有效性我們 也對這些資料進行了有無使用 mask 的比較。

表 4.3 為我們的準確率比較圖,從 Ours mono(without mask)和 GeoNet VGG 比

較可以看出我們網路結構的優勢,從 Ours mono(without mask)和 Ours mono 比較 可以看出我們的 mask 在移動場景中的有效性,但是從其它結果看起來我們的 mask 對於靜態場景的效果並不是很好,從 Ours stereo(without mask)和 Ours

mono(without mask)比較驗證了我們在 3.7 小節所提到的靜態場景的有效性,最

後我們也對單雙眼資料混合進行了測試,從結果來看,單雙眼資料混合的結果比 較好,我想這是因為單雙眼資料考慮了更多場景的可能性,因此解決了一些雙眼 資料可能會遇到的問題。

(65)

55

4.4錯誤估計的地方

在整個實驗完成之後,我們也把我們的實驗結果錯誤估計的地方展示出來, 觀察我們的方法錯誤較多的地方出現在哪,以方便我們做後續的探討。

(66)

56 圖 4. 3 錯誤估計圖 此為我們的方法使用單眼資料估計出來的深度圖,估計錯誤的地方,這裡我們 把δ<1.253的地方視為錯誤估計,也就是我們預測的結果和真實值偏差比較多的 地方。 從圖中可以看出我們錯誤的地方主要位在車子和行人的地方,也就是 2.2.5 小 節提到的移動物體,我們在 3.7 節也進行了一些相關的探討。

(67)

57

第五章結論和未來展望

自從深度學習開始火紅之後,使用深度學習作三維重建相關研究也越來越多了, 其中用來估計深度的方法也有很多種,我覺得當中非監督式的方法很有研究的價 值,有別於以往深度學習的方法使用端到端去進行監督,非監督式的方法可以說 是非常的新奇,相信有做過深度學習相關研究的人都知道標記數據的取得無非是 深度學習的難點之一,然而非監督式的方法資料取得非常的容易,我覺得這就是 非監督式的方法很大的優勢之一。 在本論文裡我們從各種不同的角度去思考如何讓非監督式的方法結果變得更 好,我們更改了網路架構、排除了一些造成錯誤估計的部分,也融入雙眼資料來 訓練我們的模型,從最後的實驗結果可以看出,我們的每個方法都是有效的,而 且我們的結果也比其它方法要來的好。 在最後我們也思考我們的研究未來還有哪些可以改善的地方,首先是我們證明 了靜態場景的有效性,因此如果我們有辦法可以直接找出場景中移動的物體進行 排除的話,例如使用光流之類的方法,那我們的結果還能夠更好,在來是更好的 網路架構,在深度學習中網路架構非常的重要,在我們的方法中證明了我們的網 路架構確得更改實是有效的,那麼如果能找到一個更適合這個問題的網路架構, 那麼結果也能夠更好,最後就是將我們的方法用在不同的資料集中,驗證我們的 方法能夠靈活的運用在各種不同的場景中。

數據

圖 1. 1  網路架構[4]
圖 1. 3 FCN 示意圖[8]
圖 1. 5 [11]的架構圖
圖 1. 8 [12]的網路架構
+4

參考文獻

相關文件

Then, we recast the signal recovery problem as a smoothing penalized least squares optimization problem, and apply the nonlinear conjugate gradient method to solve the smoothing

Based on historical documents and archeological evidence, this thesis provides an analysis of, raises some worth-noting questions on, the development of Western Qin Buddhism

/** Class invariant: A Person always has a date of birth, and if the Person has a date of death, then the date of death is equal to or later than the date of birth. To be

 If SAT can be solved in deterministic polynomial time, then so can any NP problems  SAT ∈ NP-hard..  If A is an NP-hard problem and B can be reduced from A, then B is an

Note that this method uses two separate object variables: the local variable message and the instance field name.. A local variable belongs to an individual method, and you can use

Multiple images from a sequence tracked with 6DOF SLAM on a client, while a localization server provides the global pose used to overlay the building outlines with transparent

In this thesis, we have proposed a new and simple feedforward sampling time offset (STO) estimation scheme for an OFDM-based IEEE 802.11a WLAN that uses an interpolator to recover

In order to improve the aforementioned problems, this research proposes a conceptual cost estimation method that integrates a neuro-fuzzy system with the Principal Items