人工監督訓練的機器學習(ML)革新了人工智慧,促成了一系列創新產品落地。然而,人工監督的機器學習需要更大、更複雜的數據集,而搜集這些數據會消耗大量的成本,並且搜集時還會面臨如何保證標籤質量、如何確定數據真實有效等問題。如今,這些問題,尤其是對象檢測,有了一個全新的解決方案:藉助軟體生成大量的合成數據集。合成數據的出現降低了大量搜集帶標籤數據集的難度,可輔助機器學習模型的訓練。
本文屬於「使用Unity生成合成數據」系列第三篇。在第一篇中,我們討論了在為計算機視覺訓練機器學習模型時,搜集大量帶標籤圖像會面臨的。最近,我們又展示了如何使用Unity的認知訓練工具來。
而現在,我們將介紹如何:
在全新的Unity Simulation環境中生成大體量目標對象數據集
使用合成數據集訓練對象檢測模型(即Faster R-CNN)
使用少量現實示例調整模型
最終成果在檢測真實數據集時表現良好,相較完全使用真實數據訓練的模型表現更佳。我們將介紹建立環境、生成數據的管線與說明,幫助大家使用datasetinsights和自定義資源/數據訓練模型。
藉助Unity Simulation生成大規模合成數據集
我們使用了Faster R-CNN來檢測63中日常百貨商品。訓練步驟包括:創建目標的3D資源、自動創建場景、渲染圖像數據和生成邊界框(bounding box)標籤。
我們為所有63個物體創建了3D掃面圖像,使用Unity Perception包來自動生成帶標籤的數據。如本系列第二篇博文中所述,我們手動控制了目標對象在每幀上相對於背景對象排序、形狀和紋理的擺放和朝向,並且隨機選擇光照、對象顏色、模糊度和圖像噪聲,接著藉助Perception包捕捉帶有對應邊界框(bounding box)的RGB圖像與JSON文件。
圖示1:帶有邊界框與元數據JSON文件的合成數據。
我們使用了兩種類型的資源創建了環境:前景資源和背景資源。前景資源是檢測用的對象掃描圖像,背景資源則用於組成背景或遮擋目標對象(起障礙物作用)。
製作這些資源會遇到一些獨特的難題。首先,背景和障礙物對象的紋理和色彩需要被暴露出來、要有變化。其次,前景對象必須足夠逼真,製作時需要更加小心,還需要後期掃描來調整圖像。
創建現實數據集
為了創建現實數據集,我們購買了這些商品,在貝爾維尤辦公室裡將它們以不同的樣式擺放,再拍攝了幾張照片。為了保證數據集的多樣性,我們將物品放在不同的光照和背景條件下,同時讓物品的位置、朝向和配置在每一鏡都有不同,保證每張照片的多樣性。
為了給圖像添加標註,我們使用了VGG Image Annotator工具,投入了超過200小時的人力,其中包括質量保證和糾正數據準確度的工作量。在流程最後,我們製作出了1267張帶有邊界框和分類標籤的可用圖像。其中760張圖像被用作訓練,253張圖像被用作驗證,餘下的254張圖像被用於測試,任何使用現實圖像訓練的模型都會用到這三組數據。使用驗證組是為了選出性能最好的模型、防止出現過擬合。而保留組(剩下的測試圖像)從未被模型觀察過,也從未暗中或明著使用數據來選取模型或設定模型超參數。
圖示2:帶有人工注釋邊界框標籤的現實數據
使用現實和合成數據訓練對象檢測模型
在實驗中,我們使用了大受歡迎的Faster R-CNN模型,輔以於ImageNet上預先訓練好的ResNet50作為支柱,還使用了torchvision公開代碼。完整代碼,包括Kubeflow管線都可在我們的datasetinsights開源python包內找到。
為了測量模型的性能,我們使用了COCO、PASCAL VOC、和OpenImages中的三種指標,來量化模型的假陽性、邊界框定位和假陰性出現率。我們用檢測的邊界框於實際邊界框之間的交並比(intersection over union,IoU)作為閾值,來確定檢測是否準確。特定IoU內對象檢測的平均查準率(mean average precision,mAP)是否大於等於0.5(即mAPIoU=0.5),來測量假陽性的檢測率。使用0.5至0.95範圍內、間隔為0.05的mAP平均值來測量邊界框定位的準確度。mAP值增加意味著邊界框定位更準確,而mAPIoU=0.5是一個更為普遍的檢測精確度改善指標,即代表假陽性出現率的降低。最後,我們測量了模型在給出100個候選檢測對象(mAR100)下的平均查全率(mean average recall),mAR100的增加表明假陰性出現率降低。要想詳細了解指標的計算方式,請查看 PASCAL VOC開發者套件和COCO的監測評估標準。
模型的訓練皆以2x10-4的學習速率和數量為4的樣本量進行。我們在訓練前將數據分成訓練組和驗證組,選取mAPIoU=0.5和mAR100得分最高的模型進入驗證組測試。
在使用現實數據訓練時,我們使用了760張圖片,選取了mAPIoU=0.5和mARIoU100表現最好的模型。而在用合成數據訓練時,我們使用了400000圖片,選取合成數據驗證組中表現最好的模型。最後,我們使用現實圖像調整表現最好的合成數據模型。本例中的模型是在現實數據驗證組中表現最佳的模型。
合成數據與現實數據模型比較
比較指標分別為:平均查準率(Mean Average Precision,mAP)取IoU閾值[0.5:0.95]內的平均值;IoU閾值0.5內的平均查準率(mAPIoU=0.5);檢測數為100、測量254張現實圖像所得出的平均查全率(Mean Average Recall,mAR)。
圖示3:每個模型檢測的圖像。綠色邊界框表明檢測正確,紅色框為假陽性結果。使用合成數據可以提高模型在不同朝向、配置和光照條件下的檢測表現
使用類似Faster R-CNN這類現成的模型和小規模現實數據來訓練是許多人的標準工作流程。而在我們的GroceriesReal數據集中,Faster R-CNN的表現非常不錯(mAP為0.48,mAPIoU=0.5為0.73,mAR100為0.59)。在上圖中可以看到,當對象未被遮擋、商品名稱面向前方時,模型的表現非常好。然而當對象被其他對象幹擾、遮擋時,模型會檢測出許多假陽性。反之,當光照條件複雜時,有許多對象未被檢測出來(假陰性)。結果表明Faster R-CNN的確能勝任該任務,但邊界框定位(mAP)、假陽性(mAPIoU=0.5)和假陰性(mAR100)出現率方面尚有很大的提升空間。而我們並沒有搜集大量的現實數據,而是合成了大量的隨機數據來推進性能。
使用合成數據的一個好處是數據集可以快速迭代,無需經過一系列冗長、耗時的數據搜集過程。為了生成有效的合成數據集,我們多次修改了生成流程的各個方面。起初,數據生成時並沒有考慮到環境光和遮擋效果,導致訓練出來的模型在檢測現實數據時表現較差,有許多假陽性和假陰性結果。而要實現較好的成果,考慮進背景對象和其他對象產生的光照和遮擋效果是很關鍵的。因此我們使用了Unity Simulation和Unity Perception包建立了一個參數化環境,在其中快速地修改數據集,用幾分鐘時間來生成新的參數隨機化數據集。
在包括進環境光與物體遮擋後,我們使用了400000個合成圖例來訓練模型。該模型在檢測真是圖像時(見上圖),尤其是遮擋嚴重或亮度較低時表現較差,但可以很好地處理帶複雜朝向的對象(圖示3)。這表明問題出現在域差(domain gap)上。為了驗證假設,我們嘗試用現實數據來調整模型。
我們首先用了76張現實圖像來調整合成數據模型,結果這一成示例訓練出的模型要比用現實數據訓練的模型表現更好。具體來說,假陽性和假陰性的出現率大大降低,並且邊界框定位也更為準確。然而模型在複雜光照條件下的表現依舊不盡人意(圖示3第3行第3列)。
不過,在使用380張現實圖例調整模型後 ,各項指標都有了很大提升。與現實數據模型相比,該模型的mAPIoU=0.5提高了近22%,mAR100提高了近12%,mAP更是提高了42%,而邊界框定位也有相應的提升。具體來說,在商品扎堆的圖例中,模型僅檢測出了很少幾個假陽性結果;在光照條件不佳時,模型幾乎檢測出了所有對象。該結果表明使用大規模、隨機化的合成數據集可以減少模型檢測出假陰性和假陽性的機率。
關鍵點與結論
要用合成數據來訓練應對現實挑戰的模型,需要面臨如何生成有效數據集的問題。而在對象檢測這個用例中,主要的困難在於如何創建目標對象的數字孿生、實現合成數據多樣化。用戶可在Unity中使用資源掃描軟體來生成目標資源的合成數據,再使用Unity Simulation來修改資源和環境的參數、大規模地生成數據。
快來免費試用吧
在先前的博文中,我們發布了一個名為SynthDet的python包,來解析Simulation生成的合成數據集,計算、生成數據統計圖表。現已在GitHub上完全開源,內容也有拓展,新添了模型訓練代碼和kubeflow管線,方便用戶試用合成數據重現訓練過程、用現實數據微調模型。
包內更新了一份端到端全管線運行的指南,內容涵蓋從生成數據集到訓練Faster R-CNN模型,再到用jupyter notebook評估、可視化模型檢測表現的整個流程。還將介紹如何實現性能較好的遷移學習(transfer learning),及使用我們訓練好的模型執行對象檢測。
有了這些管線、現實數據集和生成合成數據所需的參數後,大家就能自行訓練一個對象檢測模型了。不僅如此,我們還開放了項目的源碼、iOS AR應用和ML模型託管指南,可讓用戶使用自己(或我們的)模型在陌生環境中執行對象檢測。
有了Unity Perception包、Unity Simulation和datasetinsights後,你就能免費開始生成合成數據、為應用訓練自己的模型了。
本文是「使用Unity生成合成數據」系列第三篇,前兩篇文章見下,歡迎大家點擊學習:
[1]
[2]
https://github.com/Unity-Technologies/datasetinsights
[3] Unity Perception 包:
https://github.com/Unity-Technologies/com.unity.perception
[4] VGG Image Annotator工具:
http://www.robots.ox.ac.uk/~vgg/software/via/
[5] Faster R-CNN:
https://papers.nips.cc/paper/5638-faster-r-cnn-towards-real-time-object-detection-with-region-proposal-net
[6] ResNet50:
https://arxiv.org/abs/1512.03385
[7] torchvision:
https://github.com/pytorch/vision
[8] PASCAL VOC開發者套件:
http://host.robots.ox.ac.uk/pascal/VOC/voc2012/htmldoc/devkit_doc.html#SECTION00044000000000000000
[9] SynthDet python包:
https://github.com/Unity-Technologies/SynthDet
[10] 端到端全管線運行的指南:
https://datasetinsights.readthedocs.io/en/latest/Evaluation_Tutorial.html
[11] 本項目的源碼:
https://github.com/Unity-Technologies/perception-synthdet-viewer-app
[12] 本項目的iOS AR應用:
https://apps.apple.com/app/id1528361585
[13] ML模型託管指南:
https://github.com/Unity-Technologies/perception-synthdet-torchserve
Unity線上技術大會將於11月16日盛大開啟,大咖精講Unity在遊戲、工業、傳媒娛樂三大領域的最前沿技術,報名即可免費參與。
點擊關鍵詞
獲取更多信息
Unity 技術精講:
[1]
[2]
[3]
[4]
[5]
Unity 官方微信
第一時間了解Unity引擎動向,學習最新開發技巧
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺「網易號」用戶上傳並發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.