合成數據可降低獲取標註數據的難度,方便機器學習模型的訓練。本文屬於合成數據系列第二篇,我們將用一個對象檢測的例子,來介紹Unity生成和分析合成數據集的各種工具。
在系列首篇文章中(點擊回看),我們討論了搜集大量標籤圖像、訓練機器學習模型完成電腦視覺任務時遇到的各種挑戰。還討論了Google Cloud AI和OpenAI的最前沿研究,在物體檢測等類似任務中使用合成數據的可行性。
然而,搜集合成數據、製作可用於訓練的數據集是十分複雜的,一不小心就會有所疏漏。這導致開發者往往不得不編寫一些一次性的方案來生成數據,然而這些數據的效果通常不理想。今天,我們為大家介紹兩款全新工具:Unity Perception Package和Dataset Insight,它們可以刪繁就簡,讓高質量合成數據集的生成和分析更為簡單。
Unity Perception 功能包
Unity Perception 功能包捕捉到的RGB、2D包圍盒以及其它度量信息
Unity Perception 功能包能夠以全新的方式在Unity中合生成合成數據集,且同時支持通用渲染管線(URP)與高清渲染管線(HDRP)。在初版中,功能包帶有捕捉數據集的工具,包含4種基本功能:添加對象標籤、貼標器、圖像捕捉和自定義度量衡。用戶在功能包中輸入對象標籤的相關信息,接著功能包會自動挑選信息、將其反饋到貼標器中。貼標器使用該信息來生成Ground Truth真值數據,象是3D包圍盒或語義分隔遮罩。經過處理的真值會與相關度量衡一起儲存到JSON文件中。
我們計劃在未來添加更多的貼標器,比如實例分隔,來支持其它常見的計算機視覺任務;場景生成工具;配置、管理大批domain randomization(域隨機化)參數的功能,以及雲服務的規模擴展。
Data Insights數據分析
任何ML從業者都明白查看、分析帶標註數據的重要性。而在合成數據集中,雲端模擬可生成上百萬的圖像,數據集會變得非常大。Dataset Insights是一款Python功能包,可讓大型合成數據集的數據運算、報告生成更為簡單高效。功能包可根據不同的度量衡,利用本地設備或雲端服務,在每幀上可視化整個數據集運算積累而成的統計數據。
在下面,我們將介紹如何使用Unity Perception Package和Dataset Insights來生成合成數據集,訓練一個可檢測商品、並為其貼上標籤的物品檢測模型。所有工具都具備通用性,也適用於其他環境和計算機視覺任務。我們的目標是讓更多ML從業者可利用起合成數據來解決各式各樣的需求。
3D資源製作
在Google Cloud AI最近的一次研究中,谷歌使用了64種常見商品,包括麥片與紙巾,來驗證了只用合成數據訓練物體檢測模型的可行性。我們受到研究啟發,使用了與原產品大小、形狀和紋理變化相近的同數量產品來進行訓練。
我們使用數字內容創作工具、掃描標籤和攝影掃描來製作了一整個庫的商品3D資源。還將現實圖像貼在方塊、球體和柱狀體這類簡單形狀上,來製作背景和遮擋物資源。所有商品都帶有通用渲染管線、Shader Graph製作而成的著色器。
場景製作
我們在背景貨架上放置了3D資源,又加入了形狀、紋理上的幹擾讓場景更為複雜。多樣化的訓練場景可讓訓練出的ML模型能應付現實中的大部分場景。
Unity編輯器中的場景視圖,展示了各個資源的擺放
自左向右:遮擋物體、商品3D資源、和背景貨架資源
在每個渲染的Loop循環中,系統會隨機生成前景、背景和遮擋物體的擺放位置,以及燈光、物體顏色、模糊效果和噪聲幹擾。如下方代碼所示,Perception功能包會抓取RGB圖像、對象包圍盒和其它隨即參數來生成數據集中的每個圖像。
Unity Perception生成的帶註解數據輸出
從合成數據集中採樣而來的帶標籤圖像
使用Dataset Insights分析數據
在大型合成數據集中,要人工檢查所有圖像幾乎是天方夜譚,而識別中的偏差、缺失、瑕疵、錯誤的擺放位置、擺放姿勢等等問題都會讓ML模型的表現無法達到最優。
在本例中,生成的對象集會被送入Dataset Insights,用於計算統計數據、訓練ML模型。Insights能高效處理用於對象檢測模型訓練的圖像數據,確保數據是有效的。部分數據集的總結數據在下方列出。
Dataset Insights中的表格,展示了數據集中各個對象的分布
通過表格可知商品被識別次數沒有出現過多或過少的情況
在測試階段,我們遇到過部分對象多次出現在一幀中的異常情況,在對象計數的可視化圖表中也有體現。對此,我們迅速修復了問題,確保對象能平均地分布到整個數據集中。
數據集中每個例子的對象計數分布
雖然我們希望數據集的對象分布能平均分散在每幀上,但也希望ML模型具有在數量或多或少的圖片中檢測多個對象的能力。上方表格展示了數據集每幀中所出現的標籤對象,對象跟隨一個固定的正態分布模式,每幀約有7個對象。
不同光源位置的可視化圖表。每個點都表示影響目標對象的光源。為了模擬現實世界中的光照條件,我們還多樣化了場景光照的方向和顏色。在上圖中,光源位於不同的位置,讓數據集中捕捉到的光照和陰影都有不同。
Unity Simulation:大規模模擬合成數據集
為了在模擬中體現出儘可能多的排序組合,我們使用了Unity Simulation雲服務,在雲端運行項目,生成訓練計算機視覺模型所需的完整數據集。
在下一篇文章中,我們將進一步介紹如何使用Unity Simulation生成大規模數據集,來訓練機器學習模型、與真實數據做比照,討論合成數據帶來的經濟效益,及幾個模擬過程中學到的關鍵點。
Perception工具完全免費,請在Github上下載工具和對象檢測示例。如果想要擴大數據集規模,歡迎註冊使用Unity Simulation (Beta)雲服務。
*文中所有商標均為企業私有財產