Unity Perception工具 | 使用合成數據訓練出強大的物體檢測ML模型

2021-01-08 網易

  人工監督訓練的機器學習(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.

相關焦點

  • 使用Unity感知工具大批量生成、分析合成數據,高效地訓練ML模型
    合成數據可降低獲取標註數據的難度,方便機器學習模型的訓練。本文屬於合成數據系列第二篇,我們將用一個對象檢測的例子,來介紹Unity生成和分析合成數據集的各種工具。 在系列首篇文章中(點擊回看),我們討論了搜集大量標籤圖像、訓練機器學習模型完成電腦視覺任務時遇到的各種挑戰。
  • 谷歌開源基於 ML 的手部跟蹤算法:手機端實時檢測,多個手勢同時捕捉
    這種架構類似於我們最近發布的 face mesh ML 模型(https://sites.google.com/view/perception-cv4arvr/facemesh),這個模型也被其他人用於的姿態估計中。將精確裁剪的手掌圖像提供到手部標誌模型中,可以大大減少更多數據(例如旋轉、平移和縮放)的需求,從而使網絡能夠將其大部分性能用於協調預測精度。
  • mmdetection使用目標檢測工具箱訓練,測試
    通過這些模塊的組合,可以迅速搭建出各種著名的檢測框架,比如 Faster RCNN,Mask RCNN,R-FCN,RetinaNet , Cascade R-CNN及ssd 等,以及各種新型框架,從而大大加快檢測技術研究的效率。
  • 超強大自動NLP工具!谷歌推出AutoML自然語言預訓練模型
    它可以從上傳或粘貼的文本、或谷歌雲存儲的文檔中提取關於人、地點和事件的信息,允許用戶訓練自己的自定義AI模型來對情緒、實體、內容和語法等進行分類、檢測和分析。此外,它還提供自定義實體提取功能,該功能可以在文檔中識別出標準語言模型未出現的特定於領域的實體。
  • 視覺工具包torchvision重大更新:支持分割模型、檢測模型
    這次,工具包裡增加了許多新模型:做語義分割的,做目標檢測的,做實例分割的……也增加了許多數據集,比如ImageNet,CelebA,Caltech 101等等等等。另外,torchvision還有了不少視覺專用的C++/Cuda算子。消息一出,小夥伴們紛紛奔走相告。現在,來仔細觀察一下,新的torchvision都有哪裡變強了。
  • 使用 ML.NET 識別樂高顏色塊
    使用時,我們需要定義輸入和輸出模型(分類器提供分類結果)。在此之後,我們創建訓練管道,最後,使用數據進行訓練以創建模型。the model mlModel = trainingPipeline.Fit(trainingDataView);}現在,使用這個訓練模型,我們可以嘗試對一個新圖像進行分類。
  • ML訓練成本降90%,被萬家公司使用:進入中國的Amazon SageMaker你也能免費試試
    與此同時,「開放」還體現在模型上,用戶自定義模型自不必說,SageMaker 還內置了眾多通用算法。例如做數據科學少不了的 XGBoost,兩行代碼就能訓練一個強大的模型。SageMaker 雖然採用 了更直觀的 Notebook,但 SageMaker Debbuger 能在訓練期間自動捕獲模型信息,例如節點的定義、張量的維度等等。這些都是 Debug 的常規操作,做到為 ML 而生的 IDE,SageMaker Debbuger 還裝備了一些高級技能:檢測梯度有沒有消失,模型是否過擬合等。
  • Facebook推出新AI工具可直接識別圖片中的物體
    DETR可以直接(並行)預測最終的檢測結果研究員將這套工具命名為DETR(Detection Transformer),並表示這套工具簡化了識別圖片對象需要的組件。FAIR 在官方博客中稱,DETR是第一個成功將Transformer架構集成為圖像對象檢測核心的工具。
  • 了解Apollo 2.5和3.0裡廣泛使用的單目攝像頭物體檢測模塊
    因此,如何建立高準確率、高召回率的物體識別系統,是無人車感知模塊的核心問題。 上周,來自百度美研Apollo感知團隊的資深軟體架構師——陳光,在Apollo開發者社群內為我們帶來關於《基於單目攝像頭的物體檢測》的內容分享。幫助開發者更加了解Apollo 2.5和3.0裡廣泛使用的單目攝像頭物體檢測模塊。
  • Facebook開源物體識別工具Detectron,加速計算機視覺研究
    Detectron系統實現了最先進的物體檢測算法,包括Mask R-CNN。 它是用Python編寫的,支持Caffe2深度學習框架。不久前,FAIR才開源了語音識別的工具wav2letter,戳這裡看大數據文摘介紹《快訊 | Facebook開源語音識別工具包wav2letter》。
  • PyTorch中使用DistributedDataParallel進行多GPU分布式模型訓練
    分布式訓練是使用多個GPU和/或多個機器訓練深度學習模型的技術。 分布式訓練作業使您能夠克服單GPU內存瓶頸,通過同時利用多個GPU來開發更大,功能更強大的模型。這篇文章是使用torch.nn.parallel.DistributedDataParallel API在純PyTorch中進行分布式訓練的簡介。
  • 神經網絡模型在密集圖像中發現小物體
    NIST研究人員發現,使用某些蒙版(A和C)標記數據有助於訓練神經網絡模型NIST模型採用旨在檢測模式的神經網絡方法,在現代生活中具有許多可能的應用。NIST的神經網絡模型在一組定義的測試圖像中捕獲了97%的對象,並將對象的中心定位在手動選擇位置的幾個像素內。NIST的計算機科學家Adele Peskin解釋說:「該項目的目的是恢復期刊文章中丟失的數據。」 「但是,小型密集物體檢測的研究還有很多其他應用。
  • Github Star 7.2K,超級好用的OCR數據合成與半自動標註工具,強烈...
    12 月,它又帶來四大新發布與升級,核心內容先睹為快: 全新發布數據合成工具 Style-Text:可以批量合成大量與目標場景類似的圖像,在多個場景驗證,效果均提升 15% 以上。全新發布半自動數據標註工具 PPOCRLabel:有了它數據標註工作事半功倍,相比 labelimg 標註效率提升 60% 以上,社區小規模測試,好評如潮。 多語言識別模型效果升級:中文、英文、韓語、法語、德語、日文識別效果均優於 EasyOR。
  • 使用OpenCV和Python構建自己的車輛檢測模型
    老實說,這是一個數據科學家的夢想,我很高興世界上很多城市都在朝著更智能的方向發展。智能城市的核心組成部分之一是自動交通管理。這不禁讓我思考——我能用我的數據科學知識來建立一個車輛檢測模型,在智能交通管理中發揮作用嗎?想想看,如果你能在紅綠燈攝像頭中集成車輛檢測系統,你可以輕鬆地同時跟蹤許多有用的東西:白天交通路口有多少輛車?什麼時候交通堵塞?
  • 23個系列分類網絡,10萬分類預訓練模型,這是飛槳PaddleClas百寶箱
    嬰兒在能看清周圍事物後,父母除了教他認識爸爸媽媽之外,還會通過畫本告訴他,這是花,這是草,這是車,這是飛機等等,這其實就是訓練圖像分類的過程。可以說圖像分類是人類最先學到的一門本領。而在此基礎之上,才會繼續學會指出什麼物體在什麼位置(目標檢測),以及如何去接觸物體(圖像分割)等等。如果您仔細分析下計算機視覺的其它技術,您會發現,也確實是如此。
  • 十分鐘,小白的我用亞馬遜雲服務(AWS)的SageMaker訓練了一個ML模型
    好不容易碰到優質內容,耐著性子看完的人卻也不多,更尷尬的是,居然有人學了幾個月,連一個基本的模型都沒有訓練出來,不是沒有配置好環境,就是代碼運行出各種Bug,調試半天最後還是以失敗告終,機器學習果然還是挺有門檻的東西啊。曾經,我憑藉中學時代折騰電腦積累的電腦常識,按照網上教程搭建了機器學習環境,並根據別人提供的代碼和數據訓練出了機器學習模型,不過,前後花了不少時間。
  • 用Python爬取豆瓣數據模型訓練與檢測
    信息增益(information gain)是指信息劃分前後的熵的變化,也就是說由於使用這個屬性分割樣例而導致的期望熵降低。也就是說,信息增益就是原有信息熵與屬性劃分後信息熵(需要對劃分後的信息熵取期望值)的差值,具體計算法如下:代碼實現:劃分數據集在度量數據集的無序程度的時候,分類算法除了需要測量信息熵,還需要劃分數據集,度量花費數據集的熵,以便判斷當前是否正確的劃分了數據集。
  • 如何使用PySpark來利用機器學習模型對流數據進行預測?
    理解問題陳述在本節我們將使用真實數據集。我們的目標是檢測推文中的仇恨言論。為了簡單起見,如果一條推文包含帶有種族主義或性別歧視情緒的言論,我們就認為該推文包含仇恨言論。因此,任務是將種族主義或性別歧視的推文從其他推文中區分出來。我們將使用包含推文和標籤的訓練樣本,其中標籤「1」表示推文是種族主義/性別歧視的,標籤「0」則表示其他種類。
  • 乾貨| 算法工程師入門第三期——黃李超講物體檢測
    現在我們回歸物體檢測。 物體檢測是視覺感知的第一步,也是計算機視覺的一個重要分支。物體檢測的目標,就是用框去標出物體的位置,並給出物體的類別。物體檢測和圖像分類不一樣,檢測側重於物體的搜索,而且物體檢測的目標必須要有固定的形狀和輪廓。圖像分類可以是任意的目標,這個目標可能是物體,也可能是一些屬性或者場景。
  • 輕鬆識別小目標的物體檢測算法揭秘
    EasyDL是百度大腦的定製化模型訓練和服務平臺,用戶通過EasyDL可以低成本地訓練自己的深度學習模型,從而獲得效果優異的定製化AI服務。自上線以來,EasyDL的用戶規模和使用場景迅速增長,也收到了深度學習業內人士的讚賞和青睞。