前言
支付寶視覺售貨櫃項目是螞蟻IOT的重要產品,用戶通過人臉識別打開貨櫃門,挑選出想要購買的商品後關門,視覺識別算法通過對比開門前後的商品變化判斷出用戶購買了哪些商品,自動完成結算。“開門即取,關門即走”的體驗給用戶帶來了極大方便。
圖1 3D合成的百歲山礦泉水
圖 2 支付寶視覺售貨櫃
在本場景中,由於貨品的高密度擺放,視覺貨櫃所拍攝的圖像中商品之間遮擋非常嚴重,算法需要根據非常有限的圖像片段判斷是哪個商品。同時算法需要不斷迭代以支撐源源不斷的上新需求。這就需要我們不僅要採集足夠多的數據以解決各種情況,而且要能在很短的時間內及時輸出新品的訓練數據,否則算法模型的泛化能力將大打折扣。3D合成數據技術為該項目提升了3倍以上的上新速度,降低了70%以上的成本,大大縮短了商品上新週期。同時避免了人工打標帶來的質量不穩定,保障了訓練數據的高質量,將因人工標註數據不可靠造成的風險降低了90%以上。圖3是這個方案的流程圖。Part1對商品建模,並賦予精確的紋理和材質,Part2對場景進行參數化建模仿真模擬各種各樣可能出現的情況,Part3對場景的每個情況進行渲染獲取最終訓練數據。
圖3 3D數據合成流程
Part 1 全材質3D重建
3D重建是利用技術手段對某個物體進行自動幾何重建,以及紋理與材質的建模。這個過程有別於3D建模師手K的過程,可快速準確的恢復某個物體的真實幾何和外觀信息。3D重建需要重建的信息包括幾何和外觀兩個部分。當前3D重建難以解決的物體是一些反光、透明等材質,尤其是各種材質雜糅在一起的物體。這個難題橫旦在項目的初期,是無論後面走哪條技術路線都需要攻克的難題。
項目組經過艱苦技術攻關自研了一套全材質3D建模方案,該方案結合了結構光掃描技術與基於圖像特徵匹配的多目幾何重建技術,通過掃描和3D特徵匹配的方法實現了全材質物體的3D重建,攻克了業界難題。使用全材質3D重建技術方案可在5-10分鐘左右的時間精確重建一個商品的完整幾何信息以及初步的外觀信息。下面是若干個3D重建示例。
圖4重建的3D模型
在獲得3D幾何信息和初步外觀信息之後,可根據實際商品的外觀對3D模型不同部位賦予準確材質模型,這個過程稱之為材質重建。一般來講特定應用場景的商品材質種類是相對有限的,可根據不同業務場景建立一個特定材質庫,根據3D模型的初步外觀信息賦予相應的材質。實際上商品的外觀與材質之間的專家經驗是可以通過網絡學習到的,一些研究工作如:開放環境材質估計、 形狀與SV-BRDF估計 表明即便是在商品3D模型未知、採集環境開放的時候,我們仍然可以學習到材質模型與圖像特徵的對應關係。
Part2 參數化場景
我們通過全材質3D重建技術對場景進行建模,之後需要針對場景分佈的各種可能性進行基於物理的模擬。在參數化場景部分,我們也需要對場景進行3D建模。場景的建模是對所渲染3D模型所處的環境進行3D建模,包括了場景3D重建和光源建模兩個部分。場景3D重建的過程可以是自動化的使用如掃描儀,或者根據多目幾何原理使用Structure-from-Motion進行三維重建。而光源重建則是對環境的光源進行建模,使得渲染出來的圖像與實際拍攝的圖像在外觀上融合度較好。
光照估計
在渲染流程中,光照對渲染結果的影響至關重要,因此場景參數化需要對光照進行精確的描述。通常來講,一個場景中的光源往往構成複雜,需要對直接光源的數量、色溫、光源形狀、乃至頻譜範圍等進行準確建模,如果場景中有類似液晶顯示屏等光源,還需要針對光源的偏振態和頻率進行建模,工作量很大且很難自動化。
圖5 HDR合成與渲染結果
這裡我們採用了HDRI技術對光源進行重建,該方案是一個簡單有效的光源重建和渲染技術,被廣泛採用於電影製作中實現與真實場景融合度很高的渲染圖像。該技術是一種基於圖像的渲染技術,即採集併合成一張高動態範圍圖像作為光源進行渲染。可以看到這樣的光源渲染出來的結果在高光表現方面較好。
場景建模和物理碰撞檢測引擎
在視覺貨櫃項目中,我們所面料的場景是一個採用視覺識別技術完成商品交易的無人貨櫃。貨櫃需要頻繁上新品,且商品之間遮擋嚴重。商家為了更有效的利用貨櫃會密集擺放很多商品,很多商品漏出來的畫面非常有限,而視覺識別需要檢測並識別出所有目標。這就要求視覺算法同學除了想法設法提高模型泛化能力之外,也需要準備充分多樣性的數據,儘可能全的覆蓋到各種遮擋關係,同時需要覆蓋到每個可能出現的商品。
在參數化場景的過程中,我們使用重力模型、隨機力模型等對場景施加變化,並對場景中的各個物體進行碰撞檢測和模擬,使得場景中的物體分佈接近真實狀態。下面這個視頻示意如何對倒瓶等異常情況進行仿真模擬。
圖6物理碰撞模擬
Part3 照片級渲染
3D合成數據方案的核心問題是怎樣使得渲染出來的圖像看起來像照片,而不是人眼看上去很真實就夠了。我們需要渲染域與實拍域儘量接近才能真正起到訓練數據的作用。一般意義上的渲染場景存在所謂too perfect的問題,也就是說渲染出來的圖像看上去可能已經非常真實,與人眼實際看到的樣子很接近,但卻與攝像頭實際拍攝的圖片不同。作為餵給機器學習模型的訓練數據,我們要求最終輸出的圖片需要復現這些瑕疵,實現所謂的照片級渲染(Photo-realistic rendering)。
我們嘗試了兩種思路實現照片級渲染。一種思路是數據驅動的方法,先採集大量實拍圖,之後通過GAN、域遷移、域自適應等方法將渲染域的圖像遷移至實拍域。另一種思路是成像模擬的方法,在渲染流程前中後期分別模擬各種攝像頭成像的影響,比如渲染過程中根據場景深度不同模擬散焦模糊,對渲染圖像卷積同一模糊算子實現因低分辨率引起的鏡頭模糊等。
圖7渲染圖、域遷移圖與實拍圖
圖7為採用第一種思路實現的效果。將渲染圖、遷移圖和實拍圖的對比,我們看到遷移圖可以較好的實現與鏡頭相關的圖像特徵遷移效果,同時也會存在一些artifacts。此外,作為數據驅動的技術,域遷移的過程可控性較弱,獲得好結果的前提是需要有與真實場景分佈接近的實拍數據,導致數據採集成本較高。
不同於上面的數據驅動算法,成像模擬採用純模擬的方式合成訓練數據,可控性強,且效果無天花板,但實現的技術較為複雜。我們採用電影級渲染引擎,並自研了光學攝像頭模擬器,實現了一系列因鏡頭、光電傳感器、以及ISP圖像處理單元的模擬,消除了許多引起渲染域與實拍域差距的因素。下圖為成像模擬實現的效果。
圖8成像模擬結果
寫在最後
在實踐中,我們發現3D合成數據可以很好的解決許多計算機視覺任務,尤其是在一些無法很好獲取ground truth的任務中具有非常好的落地前景。畢竟人工智能的目的是代替重複低效的人工,而如果用於訓練的數據收集和標註仍然大量依賴人工的話,有時就不免落入到所謂“有多少人工就有多少智能“的尷尬境地。
同時我們也必須看到目前的3D合成數據方案有諸多挑戰。首先,不能完全依賴合成數據,總會有一些模擬不到的場景。其次,合成數據方案比較適合標註成本高的任務,對於一些標註成本不高的任務反而會增加成本,比如人臉檢測、物體識別分類等任務。再次,一些技術難點,如低成本實現動態場景模擬等尚需進一步攻克。