想象一下,你是一名機(jī)器人或機(jī)器學(xué)習(xí) (ML) 工程師,負(fù)責(zé)開發(fā)一個(gè)模型來檢測(cè)托盤,以便叉車可以操縱它們。 ?你熟悉傳統(tǒng)的深度學(xué)習(xí)流程,已經(jīng)整理了手動(dòng)標(biāo)注的數(shù)據(jù)集,并且已經(jīng)訓(xùn)練了成功的模型。
推薦:用 NSDT設(shè)計(jì)器 快速搭建可編程3D場(chǎng)景。
你已準(zhǔn)備好迎接下一個(gè)挑戰(zhàn),即大堆密集堆放的托盤。 你可能想知道,應(yīng)該從哪里開始? ?2D 邊界框檢測(cè)或?qū)嵗指顚?duì)于此任務(wù)最有用嗎? ?應(yīng)該進(jìn)行 3D 邊界框檢測(cè)嗎?如果是的話,我將如何對(duì)其進(jìn)行標(biāo)注? ?是否最好使用單目相機(jī)、立體相機(jī)或激光雷達(dá)進(jìn)行檢測(cè)? 考慮到自然倉庫場(chǎng)景中出現(xiàn)的托盤數(shù)量巨大,手動(dòng)標(biāo)注并不是一件容易的事。 如果我弄錯(cuò)了,代價(jià)可能會(huì)很高。
這是我在遇到類似情況時(shí)所想的。 幸運(yùn)的是,我有一種簡(jiǎn)單的方法可以以相對(duì)較低的投入開始:合成數(shù)據(jù)。
1、合成數(shù)據(jù)概述
合成數(shù)據(jù)生成 (SDG:Synthetic Data Generation) 是一種使用渲染圖像而不是真實(shí)圖像生成數(shù)據(jù)來訓(xùn)練神經(jīng)網(wǎng)絡(luò)的技術(shù)。 ?使用綜合渲染數(shù)據(jù)的優(yōu)點(diǎn)是,你隱式地知道場(chǎng)景中對(duì)象的完整形狀和位置,并且可以生成標(biāo)注,例如 2D 邊界框、關(guān)鍵點(diǎn)、3D 邊界框、分割蒙版等。 ??
合成數(shù)據(jù)是引導(dǎo)深度學(xué)習(xí)項(xiàng)目的好方法,因?yàn)樗鼓隳軌蛟谶M(jìn)行大量手動(dòng)數(shù)據(jù)標(biāo)注工作之前或在數(shù)據(jù)有限、受限或根本不存在的情況下快速迭代想法。 對(duì)于這種情況,你可能會(huì)發(fā)現(xiàn)具有域隨機(jī)化的合成數(shù)據(jù)非常適合你的應(yīng)用程序開箱即用的第一次嘗試,而且還可以節(jié)省時(shí)間。
或者,你可能會(huì)發(fā)現(xiàn)需要重新定義任務(wù)或使用不同的傳感器模式。 使用合成數(shù)據(jù),可以嘗試這些決策,而無需進(jìn)行昂貴的標(biāo)注工作。
在許多情況下,你仍然可以從使用一些真實(shí)世界的數(shù)據(jù)中受益。 ?好的部分是,通過嘗試合成數(shù)據(jù),你將更加熟悉問題,并且可以將標(biāo)注工作投入到最重要的地方。 每個(gè)機(jī)器學(xué)習(xí)任務(wù)都有自己的挑戰(zhàn),因此很難準(zhǔn)確確定合成數(shù)據(jù)如何適應(yīng),是否需要使用真實(shí)數(shù)據(jù),或者合成數(shù)據(jù)和真實(shí)數(shù)據(jù)的混合。
2、使用合成數(shù)據(jù)訓(xùn)練托盤分割模型
在考慮如何使用合成數(shù)據(jù)來訓(xùn)練托盤檢測(cè)模型時(shí),我們的團(tuán)隊(duì)從小規(guī)模開始。 在我們考慮 3D 框檢測(cè)或任何復(fù)雜的東西之前,我們首先想看看是否可以使用用合成數(shù)據(jù)訓(xùn)練的模型來檢測(cè)任何東西。 為此,我們渲染了一個(gè)簡(jiǎn)單的場(chǎng)景數(shù)據(jù)集,其中僅包含一個(gè)或兩個(gè)托盤,頂部有一個(gè)盒子。 ?我們使用這些數(shù)據(jù)來訓(xùn)練語義分割模型。
我們選擇訓(xùn)練語義分割模型,因?yàn)槿蝿?wù)定義明確并且模型架構(gòu)相對(duì)簡(jiǎn)單。 還可以直觀地識(shí)別模型失敗的位置(錯(cuò)誤分割的像素)。
為了訓(xùn)練分割模型,團(tuán)隊(duì)首先渲染粗略的合成場(chǎng)景(圖 1)。
圖 1. 兩個(gè)托盤的粗略合成渲染,頂部有一個(gè)盒子
團(tuán)隊(duì)?wèi)岩蓛H這些渲染圖像缺乏訓(xùn)練有意義的托盤檢測(cè)模型的多樣性。 ?我們還決定嘗試使用生成式AI增強(qiáng)合成渲染,以生成更真實(shí)的圖像。??在訓(xùn)練之前,我們將生成式人工智能應(yīng)用于這些圖像以添加變化,我們相信這將提高模型推廣到現(xiàn)實(shí)世界的能力。
這是使用深度條件生成模型完成的,該模型大致保留了渲染場(chǎng)景中對(duì)象的姿勢(shì)。 請(qǐng)注意,使用 SDG 時(shí)不需要使用生成式 AI。 你也可以嘗試使用傳統(tǒng)的域隨機(jī)化,例如改變托盤的合成紋理、顏色、位置和方向。 ?你可能會(huì)發(fā)現(xiàn)通過改變渲染紋理進(jìn)行的傳統(tǒng)域隨機(jī)化對(duì)于應(yīng)用程序來說已經(jīng)足夠了。
圖 2. 使用生成式 AI 增強(qiáng)的合成渲染
在渲染大約 2,000 張合成圖像后,我們使用 PyTorch 訓(xùn)練了基于 resnet18 的 Unet 分割模型。 很快,結(jié)果就在現(xiàn)實(shí)世界的圖像上顯示出了巨大的希望(圖 3)。
圖 3. 使用分割模型測(cè)試的真實(shí)托盤圖像
該模型可以準(zhǔn)確地分割托盤。 基于這一結(jié)果,我們對(duì)工作流程更有信心,但挑戰(zhàn)還遠(yuǎn)未結(jié)束。 到目前為止,該團(tuán)隊(duì)的方法沒有區(qū)分托盤的實(shí)例,也沒有檢測(cè)到未放置在地板上的托盤。 ?對(duì)于如圖 4 所示的圖像,結(jié)果幾乎無法使用。 這可能意味著我們需要調(diào)整我們的訓(xùn)練分布。
圖 4. 語義分割模型無法檢測(cè)堆疊的托盤
3、迭代增加數(shù)據(jù)多樣性以提高準(zhǔn)確性
為了提高分割模型的準(zhǔn)確性,團(tuán)隊(duì)添加了更多以不同隨機(jī)配置堆疊的各種托盤的圖像。 我們向數(shù)據(jù)集添加了大約 2,000 張圖像,使圖像總數(shù)達(dá)到大約 4,000 張。 ?我們使用 USD Scene Construction Utilities 開源項(xiàng)目創(chuàng)建了堆疊托盤場(chǎng)景。
USD Scene Construction Utilities 用于在反映現(xiàn)實(shí)世界中可能看到的分布的配置中相對(duì)于彼此定位托盤。 ?我們使用了通用場(chǎng)景描述(OpenUSD)SimReady Assets,它提供了多種托盤模型可供選擇。
圖 5. 使用 USD Python API 和 USD 場(chǎng)景構(gòu)建實(shí)用程序創(chuàng)建結(jié)構(gòu)化場(chǎng)景,并使用 Omniverse Replicator 進(jìn)一步隨機(jī)化和渲染
通過使用堆疊托盤和更廣泛的視角進(jìn)行訓(xùn)練,我們能夠提高模型在這些情況下的準(zhǔn)確性。
如果添加這些數(shù)據(jù)對(duì)模型有幫助,那么為什么在不增加標(biāo)注成本的情況下只生成 2,000 張圖像呢? 我們沒有從很多圖像開始,因?yàn)槲覀兪菑南嗤暮铣煞植贾胁蓸拥摹??添加更多圖像并不一定會(huì)給我們的數(shù)據(jù)集增加太多多樣性。 相反,我們可能只是添加許多相似的圖像,而沒有提高模型在現(xiàn)實(shí)世界中的準(zhǔn)確性。
從小規(guī)模開始,團(tuán)隊(duì)能夠快速訓(xùn)練模型,查看失敗的地方,并調(diào)整 SDG 管道并添加更多數(shù)據(jù)。 例如,在注意到模型對(duì)托盤的特定顏色和形狀有偏見后,我們添加了更多的合成數(shù)據(jù)來解決這些失敗案例。
圖 6. 各種顏色塑料托盤的渲染圖
這些數(shù)據(jù)變化提高了模型處理遇到的故障場(chǎng)景(塑料和彩色托盤)的能力。
如果數(shù)據(jù)變化很好,為什么不全力以赴并立即添加大量變化呢? 在我們的團(tuán)隊(duì)開始測(cè)試真實(shí)數(shù)據(jù)之前,很難判斷可能需要什么差異。 ?我們可能錯(cuò)過了使模型良好運(yùn)行所需的重要因素。 或者,我們可能高估了其他因素的重要性,不必要地耗盡了我們的努力。 通過迭代,我們更好地了解了任務(wù)需要哪些數(shù)據(jù)。
4、托盤側(cè)面中心檢測(cè)
一旦我們?cè)诜指罘矫嫒〉昧艘恍┯邢M慕Y(jié)果,下一步就是將任務(wù)從語義分割調(diào)整為更實(shí)用的任務(wù)。 ?我們決定,下一個(gè)最簡(jiǎn)單的評(píng)估任務(wù)是檢測(cè)托盤側(cè)面的中心。
圖 7. 托盤側(cè)面中心檢測(cè)任務(wù)的示例數(shù)據(jù)
托盤側(cè)面中心點(diǎn)是叉車在操縱托盤時(shí)將自身居中的位置。 ?雖然在實(shí)踐中可能需要更多信息來操縱托盤(例如此時(shí)的距離和角度),但我們認(rèn)為這一點(diǎn)是此過程中的一個(gè)簡(jiǎn)單的下一步,使團(tuán)隊(duì)能夠評(píng)估我們的數(shù)據(jù)對(duì)于任何下游應(yīng)用程序有多大用處 。
檢測(cè)這些點(diǎn)可以通過熱力圖回歸來完成,與分割一樣,熱力圖回歸是在圖像域中完成的,易于實(shí)現(xiàn),并且易于直觀解釋。 通過為此任務(wù)訓(xùn)練模型,我們可以快速評(píng)估我們的合成數(shù)據(jù)集在訓(xùn)練模型以檢測(cè)重要的操作關(guān)鍵點(diǎn)方面的有用性。
訓(xùn)練后的結(jié)果很有希望,如圖 8 所示。
圖 8. 托盤側(cè)面檢測(cè)模型的真實(shí)檢測(cè)結(jié)果
團(tuán)隊(duì)確認(rèn)了使用合成數(shù)據(jù)檢測(cè)托盤側(cè)面的能力,即使是緊密堆疊的托盤也是如此。 我們繼續(xù)迭代數(shù)據(jù)、模型和訓(xùn)練管道,以改進(jìn)此任務(wù)的模型。
5、角點(diǎn)檢測(cè)
當(dāng)我們對(duì)側(cè)面中心檢測(cè)模型達(dá)到滿意的程度時(shí),我們探索將任務(wù)提升到一個(gè)新的水平:檢測(cè)盒子的角點(diǎn)。 最初的方法是對(duì)每個(gè)角使用熱力圖,類似于托盤側(cè)面中心的方法。
圖 9. 使用熱力圖的托盤角點(diǎn)檢測(cè)模型
然而,這種方法很快就帶來了挑戰(zhàn)。 由于檢測(cè)對(duì)象的尺寸未知,如果托盤的角不是直接可見的,則模型很難精確推斷托盤的角應(yīng)該在哪里。 使用熱力圖,如果峰值不一致,則很難可靠地解析它們。
因此,我們沒有使用熱力圖,而是選擇在檢測(cè)到面中心峰值后對(duì)角位置進(jìn)行回歸。 我們訓(xùn)練了一個(gè)模型來推斷一個(gè)向量場(chǎng),該向量場(chǎng)包含角點(diǎn)相對(duì)于給定托盤面中心的偏移量。 ?這種方法很快就顯示出了完成這項(xiàng)任務(wù)的希望,即使有很大的遮擋,我們也可以提供對(duì)角位置的有意義的估計(jì)。
圖 10. 使用面中心熱力圖和基于矢量場(chǎng)的角點(diǎn)回歸的托盤檢測(cè)結(jié)果
現(xiàn)在團(tuán)隊(duì)擁有了一個(gè)有前途的工作流程,我們迭代并擴(kuò)展了這個(gè)流程,以解決出現(xiàn)的不同失敗案例。 總的來說,我們的最終模型接受了大約 25,000 張渲染圖像的訓(xùn)練。 我們的模型以相對(duì)較低的分辨率(256 x 256 像素)進(jìn)行訓(xùn)練,能夠通過以更高分辨率運(yùn)行推理來檢測(cè)小托盤。 最終,我們能夠以相對(duì)較高的準(zhǔn)確度檢測(cè)到具有挑戰(zhàn)性的場(chǎng)景,如上面的場(chǎng)景。
這是我們可以使用的東西——所有這些都是用合成數(shù)據(jù)創(chuàng)建的。 這就是我們今天的托盤檢測(cè)模型的立場(chǎng)。
圖 11.最終托盤模型檢測(cè)結(jié)果,為了便于可視化,僅顯示檢測(cè)的正面
圖 12. 實(shí)時(shí)運(yùn)行的托盤檢測(cè)模型
6、用合成數(shù)據(jù)構(gòu)建你自己的模型
通過使用合成數(shù)據(jù)進(jìn)行迭代開發(fā),我們的團(tuán)隊(duì)開發(fā)了一種適用于真實(shí)圖像的托盤檢測(cè)模型。 通過更多的迭代,可能會(huì)取得進(jìn)一步的進(jìn)展。 除此之外,我們的任務(wù)可能會(huì)受益于添加真實(shí)世界的數(shù)據(jù)。 然而,如果沒有合成數(shù)據(jù)生成,我們就無法快速迭代,因?yàn)槲覀兯龅拿總€(gè)更改都需要新的標(biāo)注工作。
如果你有興趣嘗試此模型,或者正在開發(fā)可以使用托盤檢測(cè)模型的應(yīng)用程序,可以通過訪問 GitHub 上的 SDG 托盤模型來找到模型和推理代碼。 該存儲(chǔ)庫包括預(yù)訓(xùn)練的 ONNX 模型以及使用 TensorRT 優(yōu)化模型并在圖像上運(yùn)行推理的說明。 該模型可以在 NVIDIA Jetson AGX Orin 上實(shí)時(shí)運(yùn)行,因此你將能夠在邊緣設(shè)備上運(yùn)行它。
你還可以查看最近的開源項(xiàng)目 USD Scene Construction Utilities,其中包含使用 USD Python API 構(gòu)建 USD 場(chǎng)景的示例和實(shí)用程序。
我們希望我們的經(jīng)驗(yàn)?zāi)軌騿l(fā)你探索如何使用合成數(shù)據(jù)來引導(dǎo)你的人工智能應(yīng)用程序。 如果想開始生成合成數(shù)據(jù),NVIDIA 提供了一套工具來簡(jiǎn)化該過程。 這些包括:
- 通用場(chǎng)景描述(OpenUSD):USD被描述為metaverse的HTML,是一個(gè)完整描述3D世界的框架。 USD 不僅包含 3D 對(duì)象網(wǎng)格等基元,而且還具有描述材質(zhì)、照明、相機(jī)、物理等的能力。
- NVIDIA Omniverse Replicator:Replicator 是 NVIDIA Omniverse 平臺(tái)的核心擴(kuò)展,使開發(fā)人員能夠生成大量且多樣化的合成訓(xùn)練數(shù)據(jù),以引導(dǎo)感知模型訓(xùn)練。 憑借易于使用的 API、域隨機(jī)化和多傳感器模擬等功能,Replicator 可以解決數(shù)據(jù)缺乏的挑戰(zhàn)并加速模型訓(xùn)練過程。
- SimReady 資產(chǎn):模擬就緒資產(chǎn)是物理上精確的 3D 對(duì)象,包含精確的物理屬性、行為和連接的數(shù)據(jù)流,以代表模擬數(shù)字世界中的現(xiàn)實(shí)世界。 NVIDIA 提供了一系列真實(shí)資產(chǎn)和材質(zhì),可開箱即用地用于構(gòu)建 3D 場(chǎng)景。 這包括與倉庫物流相關(guān)的各種資產(chǎn),例如托盤、手推車和紙板箱。 要在將 SimReady 資產(chǎn)添加到活動(dòng)階段之前搜索、顯示、檢查和配置它們,你可以使用 SimReady Explorer 擴(kuò)展。 每個(gè) SimReady 資產(chǎn)都有自己的預(yù)定義語義標(biāo)簽,可以更輕松地生成用于分割或?qū)ο髾z測(cè)模型的標(biāo)注數(shù)據(jù)。
如果你對(duì)托盤模型、NVIDIA Omniverse 合成數(shù)據(jù)生成或 NVIDIA Jetson 推理有疑問,請(qǐng)?jiān)L問 GitHub 或訪問 NVIDIA Omniverse 合成數(shù)據(jù)生成開發(fā)者論壇和 NVIDIA Jetson Orin Nano 開發(fā)者論壇。文章來源:http://www.zghlxwxcb.cn/news/detail-620719.html
原文鏈接:基于合成數(shù)據(jù)的托盤檢測(cè) — BimAnt文章來源地址http://www.zghlxwxcb.cn/news/detail-620719.html
到了這里,關(guān)于用合成數(shù)據(jù)訓(xùn)練托盤檢測(cè)模型【機(jī)器學(xué)習(xí)】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!