2018 Spring

Implementation

流程圖如上,我們會根據 A, B, C, D, E 去解釋我們的 Work

A - Object Detection

Object Detection

我們直接使用 Faster RCNN model,因為它的效果相 對其他 model 來說較精確,計算時間也不會太長,符合 我們的需求。它總共可以辨識出 20 種物體,其中比較感 興趣的是 dining table、chair、sofa、TVmonitor 這些屬 於室內房間中常見的物體。

在辨識出物體後,它會用 bounding box 圈選出物體 在圖片中的位置,並附上辨識出此物體的機率,bounding box 所提供的 2D 資訊可以幫助我們之後計算該物件在房間中的 3D 位置。

C - Camera Pose

Camera Pose

我們使用 Taskonomy model,Taskonomy 是一個 transfer learning 的 model,它的運作方式是透過一些比 較簡易的 model 去預測一些比較基礎的房間元素,像是 keypoint,這裡的 keypoint 指的是圖片我們感興趣的部 分,這個可以自己定義,得出 keypoint 之後,我們可以 透過連接這些 keypoint, 並找出像是最長的直線,即可 得出 edge,又或者可以透過較大的 radius 得出 corner 之類的。有了這樣的架構之後,我們就可以透過一些 domain knowledge,去湊合這些低層的房間元素,進而去 做 transfer learning 然後預測那些比較高層的房間元素, 像是:camera pose, vanishing point。我們想要的東西就是 6 camera pose,這個 model 在預測的時候做了一些假設, 其中一項就是預設 camera 的虛擬座標是(0, 0, -1),這項 預設也有利於我們之後做 3D 重建,可以當作一個基 準。 他預測出來是一組分別對 x, y, z 軸的旋轉角,經過 視覺化的結果如下圖:

B - Object Alignment

Object Alignment

這裡我們參考 Seeing3dchairs 這篇論文的方法,將我們經由上一步辨識出的 object 圖片跟 其他各種形狀的現成 3D 模型的圖片做計算比對,得出 最相似的物體 3D 模型。

(1). 首先須準備好各種形狀的物體 3D 模型,從 3dwarehouse 上下載後,先在 Visual Studio 中將模 型的 pivot 點手動改到模型正中心,以便之後旋轉。

(2). 接著將調整好的模型傳入 Unity 中,固定攝影機位 置,設定物體每旋轉 10 度就拍攝一張,由於前一步 驟已經調整過旋轉軸心,因此只要讓它以 Y 軸為方 向旋轉即可產生各種常見角度的照片了,同時將當 下旋轉角度記錄在該圖片的檔名上,以便之後要擺 入房間時使用。

(3). 完成模型的準備工作後,接著從模型所有圖片中分 別取得其 Descriminative Elements 後存成 mat 檔, 並將 object 的圖片檔與 mat 檔中的 DE 做計算, 代入該論文的一些公式後計算配對出最相似的圖 片,而從圖片中除了可以知道它原本所對應的模型 外,還能透過檔名知道最後擺入房間中的旋轉角度 是多少,完成 object alignment。

D - Room Layout Estimation

Corner (搭配實際房間大小用來計算 pixel 與 pixel 間對 應的實際距離)

我們使用 Deeproom model,Deeproom model 主要預 測的東西有兩種,一種是房間的牆角(corner),另一種則 是 corner 的分佈所對應房間型態,他預設有 11 種房間 型態(下圖一),兩個一起預測的好處是,如果有些 corner 被傢俱或者其他東西擋住的時候,可以透過房間型態去 進行補正,房間型態也可以輔助 corner 的偵測,使之更 加精準。有了 corner 之後就可以找到 edge 並對房間做 segmentation 的動作,又或者把 corner 投影回以 camera 去製造的 word space 當中,這樣就可以讓 layout 有 3D 的效果,不過我們主要使用這個 model 是因為 corner 的偵測做的相當好。corner 的預測型態為 mixture gaussian(下圖二),我們可以使用像是 k-means 的方法去 精煉出一個點,即可找出 corner 的座標。有了 corner 座標後就可以搭配實際房間大小用來計算 pixel 與 pixel 間對應的實際距離,pixel 間的實際距離可以用做我們之 後使用相似形估算 object 在房間的位置。

E - Similar Figure

找出 object 在房間中的位置

到這一步為止,我們統整一下我們擁有的數據,我 們有房間跟 object 的實際大小,我們有 corner 在圖片 中的座標,有了座標之後,我們就可以利用房間的實際 大小找出 pixel 與 pixel 之間所對應的實際距離,還有 依據 object detection 所找出的 bounding box 及其 2D 資訊。有了上述的這些數據,我們就可以使用相似形去 推測 object 在房間當中的位置,以下圖為基礎去解釋我 們所使用的相似形。最下面的水平直線是牆壁往上下左 右做無限延伸,接著如果我們單看這個 object 我們無從 得知他是一幅壁畫還是真的 object,因此我們做了一個 假設,將找到的 object bounding box 當作投影在牆壁延 伸面上的一幅畫,因為影像本身就是投影的結果,object 投影長度可以用 pixel 之間的距離去推出來,有了這個 假設之後,我們就可以使用下面的相似形公式去找出圖 中的 X 也就是 object 的位置。

X / 房間深度 = object 實際大小 / object 投影大小