王天彤,朱 毅,喬卓曉
(大連外國語大學 軟件學院,遼寧 大連 116000)
體素網格(Voxel)就是用規則的有體積的小網格去表達3D模型,這種方式會損失一些細節,并且分辨率越高,小網格也就越多,而體素就是固定分辨率的三維柵格地圖,體素網格是固定分辨率的,與之對應可變分辨率的網格叫八叉樹地圖(Octomap)。但相對的計算量較大,通過衡量分辨率和計算量,發現最優方式是選擇固定分辨率的體素網格。體素網格的表達方式比較容易輸入到卷積神經網絡(CNN)中,也被稱為粗略版點云。
多邊形網格(Polygonal Mesh)是構成3D對象的頂點,邊緣和面的集合。多邊形網格能夠清晰的將3D對象的形狀和外部細節展示出來,因此,用其技術構造的模型被廣泛用于動畫電影、廣告和視頻游戲中。大型表單是由小體積且互相關聯的平面(通常是三角形或矩形)所構建的,如同拼圖一樣相互拼湊結合在一起。多邊形網格中的每個頂點都存儲x,y和z坐標信息,同時,多邊形的每個面也儲存這表面信息,渲染引擎提取這些信息后將其用于計算閃電和陰影(以及其他信息)。由于多邊形網格的建模自由度大,因此,幾乎所有對象的模型都可使用多邊形網格構建,多邊形網格進行建模的基本構想是運用線和多邊形等簡易平面對復雜物體的3D表面進行近似構建,從而做到還原物體原本外表。但多邊形網格因其使用方法也有其局限性,例如用曲面難以用直線做到極其相似,有些有機形狀需要大量的頂點和線段構建而變得復雜,諸如頭發和液體之類的能復雜形變的物體也很難通過多邊形網絡建模。
點云(Point Cloud)是某個坐標系下的點的數據集。點可以存儲豐富的信息,例如點的三維坐標、點的顏色、點的分類值、強度值、甚至時間等等。點云可以通過其豐富的內容和自由的形式現實原子化,也就是通過高精度的點云數據將現實世界進行還原構建。點云分為稀疏點云和密集點云,使用三維坐標測量機所得到的點因為其數量少,點間距較大的特點,被稱為稀疏點云;而使用三維激光掃描儀或照相式掃描儀得到的點云,點數量較大并且較密集,所以稱之為密集點云。
點云相較于多邊形網格和體素網格具有精度上的優越性,所以在實際項目中,我們采用三維激光掃描與基于深度學習的二維影像三維重建方法獲取精度較高的三維模型點云數據,再將其處理為多邊形網格模式以降低資源消耗。
三維激光掃描的原理是,通過數道激光照射到物體表面,之后物體所反射回來的激光則會攜帶位置、距離等可以用于構建模型的信息。若將激光束按照特定軌跡進行掃描,則能夠做到同時進行掃描和記錄激光所返回的信息,在極為精細的掃描后,即可得到大量的激光點,從而形成激光點云。采集后的三維激光點云的原始數據,可以利用專業軟件對其分析整理。例如采用Trimble Real-Works三維點云數據進行自動化處理,主體流程包括各測站點云數據拼接配準,數據去噪,坐標轉換等一系列操作。數據拼接通常有多種方法,無目標拼接,有目標拼接以及采集過程實時自動處理拼接。使用RECAP軟件將去噪后的E57點云格式轉換為CAD可讀取的RCS/RCP格式。在CAD讀取之后,設定坐標軸向,以滿足繪制需求。
此方法使用的前提是,使用點云緊實的表達和傳統的2D卷積,學習先驗的形狀信息,此方法主要分為3個模塊。
1.3.1 3D結構生成器
如圖1所示,該模塊根據2D的RGB圖和物體對應的二元掩模(binary mask)預測像素點的三維坐標(x,y,z)。

圖1 通過2D圖片預測三維點坐標
該步驟的輸入輸出為:
輸入:Single RGB image
輸出:2D projections at predetermined viewpoints
其中:2D projection==3D coordinates(x,y,z)+binary mask(m)
1.3.2 點云融合
融合點云成3D模型,如圖2所示,這是可行的(因為每幅圖像對應的3D外形都是固定的且之前已經知道的)。

圖2 點云融合為3D模型
其輸入輸出如下:
輸入:2D projections at predetermined viewpoints
輸出:Point cloud
1.3.3 根據3D模型生成新的2D投影,與Ground Truth比對計算代價函數(loss)
其輸入輸出如下:
輸入:Point cloud
輸出:Depth images at novel viewpoints
如圖3所示,如果生成的3D模型是接近真實數據的,那么新視角的投影應該也是接近真實的Ground Truth,然后根據代價函數重復上述步驟修正數據直到其不再收斂,此時我們就得到了幾乎與實物完全相同的三維模型。

圖3 計算代價函數
用戶輪廓(User Profile)主要是用戶(注冊)信息,以及通過對用戶的各種反饋信息處理整合。更好地描述并完善用戶特征,是后續推薦和排序的基石。一般情況下會包含以下具體內容。
(1)用戶興趣數據。
(2)用戶的基礎注冊信息、背景信息:例如用戶出生地、年齡、性別、興趣和職業等。這些信息一般從用戶注冊信息中提取,例如各種APP的注冊用戶,網站的注冊用戶等。
(3)用戶行為反饋:包括顯示(explicit)的反饋和隱藏(implicit)的反饋。顯示的反饋包括用戶的評價,態度等,例如微博上針對內容的點贊行為(正向顯示反饋)和屏蔽,拉黑行為(負向顯示反饋),淘寶上的評分;隱式反饋包括用戶的瀏覽行為,例如在百度搜索搜過哪些詞,淘寶上點擊了那些商品頁面,在微博上參與了哪些話題的討論等。
(4)用戶交互偏好:例如用戶喜歡使用哪些快捷功能,常用哪些功能,以及從這些操作中分析出來的偏好,比如在淘寶上搜索那些商品反饋出用戶的商品喜好從而精準推送。
(5)用戶上下文信息:通過用戶的各種數據綜合分析,做到更好的為用戶畫像,例如通過GPS和行程信息判斷其職業,通過支付寶等交易信息判斷其收入水平。
在本系統中,根據商品模式和調研分析主要采取以下標簽劃分。
年齡段:主要分為兒童、青少年、中年、老年。研究顯示,不同年齡段對家居風格的偏好以及消費水平差異較大。
其中兒童偏好色彩豐富,造型風格特別,且有交互功能的物件。但面向兒童的商品的安全性是最需謹慎的,必須考慮到材料的安全性,例如堅固性,形狀是否有尖銳部分,是否含有對身體有害的物質、氣味等。同時兒童的消費水平相對較高,對質量更加注重。
青少年偏好流行文化的物件,例如科技、體育、影視、明星、動漫等。注重物件的交互性,可玩性,但并不注重實用性,他們更愿意為華而不實的東西消費。對質量,安全性的需求較差,但青少年大多自費,消費水平極其有限。
中年人更偏重于品質與奢侈性,選擇風格多為古典、奢華、現代等。他們會嚴謹地參考用料是否高級,做工是否精致,品牌是否高端,以及實用性。中年人的消費水平最高,需要最細致的分類。
老年人偏好色彩單調,造型風格傳統的家居風格。他們更加注重實用性、安全性,但不愿在此做過多的消費。老年人具備最高的消費水平,他們愿意在與養生保健有關的物品上消費,可以考慮更多地推薦安眠枕、養生床及人體工學椅等物件。
性別:根據調查報告顯示,性別也是用戶挑選家具用品的重要參考因素。男性較女性更不在意品牌而是實用性,消費水平較女性更低,男性更偏好電子科技類產品,而女性購買無實用性裝飾品較多。
除此之外,用戶的瀏覽歷史、職業、地區等也是比較有意義的因素,需要根據具體情況進行更細的劃分與聯合。
推薦對象建模模塊是根據對象與用戶的交互數據與對象的屬性數據建立的物品特征,即商品的特征。一般可以對其進行以下的分類。
類型:指家居商品的一般類型、桌子、椅子、柜子等。
價格:根據商品類型的均價將其劃分為低廉、平均、奢侈類商品。
風格:根據商品的顏色、外形等,將其以藝術風格劃分,例如古典、科幻、童話等。
除此之外,商品的材質、品牌、實用性等也是有參考意義的因素,需要根據具體情況進行更細的劃分與聯合。
在獲取用戶輪廓(模型)與商品模型之后,我們需要在二者的屬性之間建立映射關系,即某種用戶模型對應哪些商品以及某種商品對應哪些用戶模型。
協同過濾(Collaborative Filtering)作為推薦算法中最經典的類型,將是本系統中主要采用的過濾方式,包括在線的協同和離線的過濾兩部分。通過在線過濾將用戶的喜好內容快速精準推送給用戶,通過離線過濾,將不值得推薦內容濾掉,大幅提升效率,比如推薦后卻評分低的數據,或者雖然推薦值高但是用戶因各種原因不再需要的數據。我們在獲取的用戶模型與商品模型以及它們的映射關系的基礎上,采用基于模型(model based)的協同過濾,也是目前最主流的協同過濾類型。
協同過濾有很多種方式,用神經網絡乃至深度學習做協同過濾將是一個大趨勢。目前比較主流的是限制玻爾茲曼機(RBM)其用兩層神經網絡來做推薦算法。在目前的Netflix算法比賽中,RBM算法有著很不錯的表現。用深層的神經網絡來做協同過濾會更好,即目前火爆的基于卷積神經網絡和循環神經網絡的方法。
卷積神經網絡的前部分就是由若干個卷積運算和采樣操作組合而成,最后一層的尾部則是全連接的分類器,從圖4中可以看出,可以采取邏輯回歸、softmax回歸或者是支持向量機,可以是包含隱含層的多層感知器也可以是簡單的單層感知器,本文中采用的是單層感知器。在初始化尾部的單層感知機的時候,我們在這里將它看做是一種分類,每一類歸結為一個商品屬性,這里采用的都是同一種策略。從圖4中可以看出,對于每一個輸出節點,如果商品具有該屬性,那么該節點的值便為1,否則為0。

圖4 全連接層
前向傳播訓練過程如圖5所示。

圖5 前向訓練流程
卷積層:使用權重矩陣W并做加權求和,此處的權重二維矩陣就是卷積核,卷積操作后再加上偏置并輸入到激活函數sigmoid中。
池化層:本文所采用的是平均池化的計算方法,因此此處的池化可以看做是一種特殊的卷積操作,池化操作不需要偏置,經過池化后得到了下一層的輸入特征。
尾部感知機:最后一層將一個訓練塊中的某個訓練樣本的所有輸出連接起來,得到的輸出向量乘上單層感知機的權重矩陣,并加上尾部感知機的偏置后做卷積操作,得到最終的輸出結果。
先進行前向訓練,再反向傳播調整誤差,如圖6所示。可以對用戶進行聚類,相似用戶在訓練和推薦階段使用同一組訓練模型參數。

圖6 訓練并調整誤差圖
其中用戶信息和商品信息都可以提前獲取后數字化。在離線訓練模型階段,可以利用數字化后的用戶信息、商品信息和行為信息,對事先判定為同種的用戶使用同一種模型對其進行訓練,并保持對模型參數的定期更新;在實時推薦階段,只需要將之前的數據與新采集到的行為數據進行融合,輸入到模型之中,就可以實現實時推薦,算法的離線訓練流程如圖7所示。

圖7 離線訓練流程
根據系統需求,劃分的系統結構主要包括點云獲取模塊,推薦系統模塊,用戶交互模塊。
(1)點云獲取模塊是指通過實物與互聯網上的物品預覽圖大數據獲取用以構建三維模型點云數據的模塊,其下包含3個子模塊:一是實物掃描模塊,主要用于難以通過CNN二維轉三維方式構建的實物商品的數據錄入;二是卷積繪制模塊,將互聯網上大量的電商產品的預覽圖通過帶入2D卷積生成點云數據,通過先決經驗的方式以合理的尺寸形狀重構成三維模型;三是點云數據處理模塊,點云相較于多邊形網格和體素網格具有精度上的優越性,但在實際項目中,我們使用實物掃描模塊與卷積繪制模塊獲取精度較高的三維模型點云數據消耗資源較大,而直接推薦給用戶的也應該是資源更小的形式,所以需要再將其處理為多邊形網格模式以降低資源消耗。
(2)推薦系統模塊是指將用戶與商品按一定標準劃分,建立映射關系,產生推薦方案的模塊。其包括兩個子模塊:一是用戶與商品建模模塊,主要是根據用戶與商品的交互信息以及用戶和商品的屬性生成的用戶模型與商品模型,用以進行基于模型的協同過濾;二是推薦方案產生模塊,此模塊下建立用戶模型特征與商品模型特征的映射關系,并根據此映射關系,采用基于模型的協同過濾算法產生推薦方案,將推薦法案發送至用戶交互模塊。
(3)用戶交互模塊是用戶使用的應用程序,應用程序采用3D引擎模擬仿真第一與第三人稱室內環境,允許用戶在虛擬空間中自定義家居用品與布局。在PC端可采用鼠標控制視角,鍵盤控制位置的方式,在移動端可采用虛擬搖桿的方式。交互界面如圖8所示。

圖8 交互界面示例
面前的房間就是用戶進行自定義布局的3D虛擬空間,右側UI上層是商品的類別,點擊它們會進入到各自類別的更細致的分類。上一頁與下一頁按鈕即實現在商品類別與具體商品翻頁的功能。隱藏/顯示按鈕是隱藏或顯示UI的按鈕,用于預覽整體布局效果,這個按鈕不會被隱藏。左側UI最上層是一個文字列表,這里會顯示當前布局中用戶所有選中使用的商品。鎖定/接觸按鈕,當用戶通過點擊選中一個物品,點擊此按鈕會將該物品鎖定或解鎖,鎖定狀態下此物品不參與到射線碰撞檢驗中,該物品無法再被移動或刪除。當用戶提交方案時,會將左側列表中顯示的所有布局中采用的物件提交至推薦系統,由推薦系統返回推薦方案。
整個系統由點云獲取模塊、推薦系統模塊、用戶交互模塊3大模塊與數據庫組成。
在系統運作時,點云獲取模塊最先運作,它搜集大量商品的點云數據,并將數據傳入推薦系統模塊。
推薦系統模塊會將由點云獲取模塊傳入的數據建立為商品模型,并將模型數據傳入至數據庫。
用戶交互模塊首先獲取用戶的信息,將信息傳入至推薦系統。
推薦系統將由用戶交互模塊傳入的用戶信息建立為用戶模型,將模型數據傳入至數據庫,并根據已獲得的用戶模型和商品模型建立映射關系。
用戶交互模塊獲取用戶的家居購置方案,將方案提交至推薦系統模塊。
推薦系統將由用戶交互模塊獲取的購置方案與映射關系綜合,形成推薦方案,將數據庫中符合推薦方案的商品返回給用戶。
至此系統運行完畢。