建設(shè)訓(xùn)練和測(cè)試場(chǎng)地以幫助將運(yùn)動(dòng)分析 AI 解決方案從實(shí)驗(yàn)室推進(jìn)到現(xiàn)實(shí)世界是一項(xiàng)極具挑戰(zhàn)性的任務(wù)。在以團(tuán)隊(duì)為基礎(chǔ)的體育運(yùn)動(dòng)中,在冠軍賽季前制定正確的比賽策略是任何職業(yè)教練和俱樂(lè)部所有者成功的關(guān)鍵。
盡管教練們努力在比賽中提供最佳提示并指出錯(cuò)誤,但他們?nèi)匀粺o(wú)法在重新觀看比賽時(shí)注意到雙方的每一個(gè)細(xì)節(jié)和行為模式。要收集這些數(shù)據(jù),分析它們,并對(duì)團(tuán)隊(duì)行為做出推斷,您可以使用復(fù)雜的 AI 算法。
特別是,我們想要解決的任務(wù)類型是培養(yǎng)橄欖球隊(duì)的分析能力,即比賽期間每個(gè)球員的位置以及每個(gè)球員在球場(chǎng)上的 3D 姿勢(shì)。實(shí)時(shí)獲得這些信息為制定更好的游戲策略提供了必要的證據(jù)。
在許多體育分析案例中,一類問(wèn)題已經(jīng)找到了有效的解決方案,但無(wú)法有效應(yīng)用——主要瓶頸是缺少數(shù)據(jù)。
收集和標(biāo)記數(shù)據(jù)的過(guò)程可能既昂貴又耗時(shí)。人類必須手動(dòng)分析圖像,與計(jì)算機(jī)相比,這種重復(fù)性工作不僅速度慢、成本高,而且精確度也較低。
此外,還有一些情況需要現(xiàn)代設(shè)備來(lái)生成標(biāo)記數(shù)據(jù),并需要高素質(zhì)的專家來(lái)維護(hù)生產(chǎn)過(guò)程。這種情況顯著增加了項(xiàng)目成本,或者在許多情況下,使利益相關(guān)者無(wú)法實(shí)現(xiàn)體育分析項(xiàng)目。
基于團(tuán)隊(duì)的運(yùn)動(dòng):機(jī)器學(xué)習(xí)和計(jì)算機(jī)視覺(jué)的誘人機(jī)會(huì)
如果你能自動(dòng)生成圖像和視頻數(shù)據(jù),完全適合手頭的任務(wù),并內(nèi)置完整且始終正確的地面真相,會(huì)怎么樣?
在這篇文章中,我們將以足球或橄欖球運(yùn)動(dòng)員的 3D 姿勢(shì)識(shí)別為例,展示我們實(shí)現(xiàn)這一目標(biāo)的嘗試。目標(biāo)是訓(xùn)練人工智能模型,以準(zhǔn)確識(shí)別足球運(yùn)動(dòng)員及其姿勢(shì),將其作為真實(shí)比賽畫(huà)面上 3D 空間中的人體關(guān)鍵點(diǎn)。
人工智能模型專門(mén)針對(duì)使用 SKY ENGINE 人工智能平臺(tái)和 NVIDIA RTX 機(jī)器生成的人工合成數(shù)據(jù)進(jìn)行訓(xùn)練。生成的圖像是完全由 SKY ENGINE 渲染器控制的模擬場(chǎng)景。根據(jù)模型的要求,可以提供各種基本事實(shí)。
具有 NVIDIA RTX 核心的 SKY ENGINE AI 渲染引擎為深度學(xué)習(xí)提供基于物理的渲染。異構(gòu)系統(tǒng)由 NVIDIA Titan RTX 和 NVIDIA V100 GPU 組成。這是一種高效且功能強(qiáng)大的配置,可以同時(shí)生成標(biāo)記的多光譜 (如果需要)數(shù)據(jù)集和訓(xùn)練神經(jīng)網(wǎng)絡(luò)。
這種方法的主要優(yōu)點(diǎn)包括:
有效處理不平衡數(shù)據(jù)
準(zhǔn)確檢測(cè)制服和體育場(chǎng)上的標(biāo)識(shí)(誤報(bào))
通常,帶有壓縮偽影的噪聲、低質(zhì)量數(shù)據(jù)流不會(huì)降低 AI 驅(qū)動(dòng)的推理精度
可以有效地導(dǎo)出廣播攝像機(jī)的未知參數(shù)
提供高質(zhì)量的 3D 貼圖
可以精確地對(duì)小目標(biāo)進(jìn)行姿態(tài)估計(jì)
運(yùn)動(dòng)和構(gòu)造的復(fù)雜結(jié)構(gòu)可以準(zhǔn)確識(shí)別
NVIDIA RTX 體系結(jié)構(gòu)的高效數(shù)據(jù)處理和計(jì)算優(yōu)化
下面是 SKY ENGINE AI 平臺(tái)中解決的 3D 姿勢(shì)估計(jì)問(wèn)題的完整解決方案。
使用 SKY ENGINE AI 平臺(tái)的運(yùn)動(dòng)分析案例
首先,必須配置渲染引擎,定義渲染數(shù)據(jù)源,并訓(xùn)練 AI 模型以進(jìn)行人體檢測(cè)和 3D 姿勢(shì)估計(jì)。
資源加載和渲染引擎配置
從加載體育場(chǎng)幾何體的資源開(kāi)始。這些資源在標(biāo)準(zhǔn) 3D 建模軟件中準(zhǔn)備,并以 Alembic 格式加載到 SKY ENGINE 中。
renderer_ctx.load_abc_scene('stadium') renderer_ctx.setup()
接下來(lái),顯示體育場(chǎng)的加載幾何體:
with example_assistant.get_visualizer() as visualizer: visualizer(renderer_ctx.render_to_numpy())

stadium_base_textures = SubstanceTextureProvider(renderer_ctx, 'concrete') stadium_base_params = PBRShader.create_parameter_provider(renderer_ctx, tex_scale=50) renderer_ctx.set_material_definition('stadion_base_GEO', ??MaterialDefinition(stadium_base_textures, parameter_set=stadium_base_params))
如前所示, SKY ENGINE 提供了對(duì)程序紋理的完全支持,這帶來(lái)了各種數(shù)據(jù)的快速生成以及基于物理的渲染( PBR 著色器)。
定義環(huán)境地圖如下:
renderer_ctx.define_env(Background(renderer_ctx, EnvMapMiss(renderer_ctx), HdrTextureProvider(renderer_ctx, 'light_sky')))
此時(shí),場(chǎng)景中已渲染體育場(chǎng)。下一步是配置整個(gè)場(chǎng)景并用播放器填充它。您可以使用一種方便的實(shí)例化機(jī)制來(lái)實(shí)現(xiàn)這一點(diǎn)。
“天空引擎”( SKY ENGINE )渲染器提供了幾乎無(wú)限的可能性來(lái)洗牌、乘法、隨機(jī)化和組織資源。從某個(gè)玩家的單個(gè) Alembic 動(dòng)畫(huà)中,您將創(chuàng)建兩個(gè)團(tuán)隊(duì),每個(gè)團(tuán)隊(duì)由 20 名玩家組成。
renderer_ctx.layout().duplicate_subtree(renderer_ctx, 'player_GEO_NUL', suffix='team2') renderer_ctx.layout().get_node('player_GEO_NUL').n_instances = 20 renderer_ctx.layout().get_node('player_GEO_NUL_team2').n_instances = 20
默認(rèn)情況下,所有材質(zhì)都是隨機(jī)繪制的。要?jiǎng)?chuàng)建兩個(gè)合適的球隊(duì),您需要確保給定球隊(duì)中的每個(gè)球員都有相同顏色的球衣。保持所有其他輸入的隨機(jī)性,例如頭發(fā)、膚色、襪子顏色、襯衫編號(hào)等。
要實(shí)現(xiàn)這一點(diǎn),您必須將玩家分成不同的隨機(jī)分組,并定義他們的繪圖策略。控制襯衫顏色的 Substance archive 輸入為 Colors _ select 。在隨機(jī)化組內(nèi)需要相同(同步),組間需要不同。默認(rèn)情況下,所有其他輸入保持隨機(jī)化。
shirt_sync = SynchronizedInput(SynchronizationDescription( in_strategy=Synchronization.DISTINCT_EQUAL_GROUPS)) player_material_strategy = DrawingStrategy(renderer_ctx, inputs_strategies={'Colors_select': shirt_sync}) renderer_ctx.instancers['player_GEO'].modify_material_definition(strategy=player_material_strategy) renderer_ctx.instancers['player_GEO_team2'].modify_material_definition(randomization_group='team2', strategy=player_material_strategy)
圖 5 顯示了每個(gè)玩家都處于相同的姿勢(shì)。默認(rèn)情況下, SKY ENGINE 逐幀播放 Alembic 文件中的動(dòng)畫(huà),因此必須隨機(jī)化此參數(shù)。
player_geometry_strategy = DrawingStrategy(renderer_ctx, frame_numbers_strategy=UniformRandomInput()) renderer_ctx.instancers['player_GEO'].modify_geometry_definition(strategy=player_geometry_strategy)
橄欖球比賽中,球員分布不均勻;他們傾向于聚集在一起,靠得更近。為了使場(chǎng)景看起來(lái)更自然,可以更改繪制球員位置的方式。您可以使用隨機(jī)高斯分布,而不是均勻地繪制它們。它是雙重隨機(jī)的,因?yàn)槭紫?img alt="\mu" class="latex" src="https://s0.wp.com/latex.php?latex=%5Cmu&bg=ffffff&fg=000&s=0&c=20201002" style="border:0px;vertical-align:baseline;margin:0px;padding:0px;font:inherit;height:auto;width:auto;" />and然后使用這些參數(shù)隨機(jī)繪制玩家的位置。
gauss_strategy = DrawingStrategy(renderer_ctx, default_input_strategy=RandomGaussianRandomInput(sigma_relative_limits=(0.1, 0.2))) renderer_ctx.layout().get_node('player_GEO_NUL').modify_locus_definition(strategy=gauss_strategy)
在這篇文章中,我們跳過(guò)了相機(jī)、燈光和后處理的額外配置,但我們鼓勵(lì)您從 GitHub repo 獲取詳細(xì)信息。移動(dòng)到與場(chǎng)景語(yǔ)義和基本事實(shí)相關(guān)的配置。
關(guān)鍵點(diǎn)已出現(xiàn)在播放器的動(dòng)畫(huà)中。默認(rèn)情況下, SKY ENGINE 會(huì)計(jì)算有關(guān)關(guān)鍵點(diǎn)的所有信息(如果它在輸入資源中接收到這些信息)。您只需將它們可視化,以確保所有配置都正確。綠色關(guān)鍵點(diǎn)可見(jiàn),紅色關(guān)鍵點(diǎn)隱藏。
example_assistant.visualized_outputs = {SceneOutput.BEAUTY, SceneOutput.SEMANTIC, SceneOutput.KEYPOINTS}
場(chǎng)景看起來(lái)正確,因此可以為 AI 培訓(xùn)創(chuàng)建渲染器數(shù)據(jù)源。
datasource = MultiPurposeRendererDataSource(renderer_context=renderer_ctx, images_number=20, cache_folder_name='rugby_presentation_new')
人工智能模型訓(xùn)練過(guò)程
在培訓(xùn)階段,您將使用在 DeepSky 庫(kù)中實(shí)現(xiàn)的模型和培訓(xùn)器,該庫(kù)是 SKY ENGINE AI 平臺(tái)的一部分。
main_datasource = SEWrapperForDistancePose3D(datasource, imgs_transform=transform) train_data_loader = DataLoader(dataset, batch_size=Constants.TRAIN_BATCH_SIZE, num_workers=Constants.NUM_WORKERS, drop_last=Constants.DROP_LAST, shuffle=Constants.VALID_SHUFFLE, collate_fn=collate_fn) model = get_pose_3d_model(main_datasource.joint_num, backbone_pretrained=True) trainer = DefaultTrainer( data_loader=train_data_loader, model=model, epochs=Constants.EPOCHS, save_freq=1, valid_data_loader=valid_data_loader, optimizer=optimizer, evaluator=evaluator, scheduler=scheduler, serializer=serializer) trainer.train()
現(xiàn)在檢查人工智能模型在合成數(shù)據(jù)上的訓(xùn)練結(jié)果,以驗(yàn)證所有配置是否正確。在每個(gè)歷元之后,保存一個(gè)檢查點(diǎn)并生成一些推理示例以查看訓(xùn)練進(jìn)度。
show_jupyter_picture('gtc03_assets/trained/img2.png')
人工智能模型在真實(shí)圖像上的結(jié)果
在下一步中,將在真實(shí)視頻上驗(yàn)證結(jié)果。首先,使用預(yù)訓(xùn)練模型進(jìn)行玩家檢測(cè),以找到邊界框。有關(guān)更多信息,請(qǐng)參閱 GTC 2019 上提供的播放器檢測(cè)教程,該教程可在天空引擎 AI GitHub repo 上獲得。
checkpoint = torch.load('gtc03_assets/trained/rugby_detection.pth.tar') for k, v in sorted(checkpoint.items()): ??checkpoint[''.join(['_model.', k])] = checkpoint.pop(k) detection_model.load_state_dict(checkpoint) detection_model = detection_model.to(device) real_dataset = ImageInferenceDatasource(dir='gtc03_assets/real_data', extension='png') out = outputs.pop() bboxes = out['boxes'].cpu().detach().numpy() bboxes = bboxes[np.where(labels == 1)[0]] labels = out['labels'].cpu().detach().numpy() bbox_image = bboxes_viz(orig_img, bboxes)
with torch.no_grad(): ??results = model((img,), ({'boxes': torch.from_numpy(bboxes).int()},)) results = results.pop() output_coords, output_bboxes = results['pred_poses_coords'].cpu(), \ ????????results['boxes'].cpu()
SKY ENGINE AI 能夠訓(xùn)練其關(guān)鍵點(diǎn) AI 模型之一,以檢測(cè)玩家并正確估計(jì)骨骼關(guān)節(jié)的 3D 坐標(biāo)??捎脭?shù)據(jù)的質(zhì)量極低是由于捕獲了分辨率較低、壓縮能力強(qiáng)的實(shí)況電視廣播。如果不使用具有完美地面真實(shí)性的合成數(shù)據(jù)方法,這種評(píng)估任務(wù)在使用真實(shí)畫(huà)面進(jìn)行人工智能模型訓(xùn)練的傳統(tǒng)方法中幾乎是不可能的。
結(jié)論
三維姿態(tài)估計(jì)是最復(fù)雜的計(jì)算機(jī)視覺(jué)任務(wù)之一,通常需要高質(zhì)量的圖像、校準(zhǔn)的攝像機(jī)和完美的照明條件。另一方面,訓(xùn)練用于運(yùn)動(dòng)分析的姿勢(shì)估計(jì)算法需要昂貴的運(yùn)動(dòng)捕捉課程,并在球場(chǎng)上安裝復(fù)雜的設(shè)備。
我們剛剛介紹了如何使用簡(jiǎn)單的 3D 資源和在 NVIDIA 硬件上工作的 SKY ENGINE AI 平臺(tái)解決這個(gè)問(wèn)題。
SKY ENGINE AI 工具用于構(gòu)建團(tuán)隊(duì)體育應(yīng)用程序,這可能會(huì)徹底改變這些游戲。球員、教練、俱樂(lè)部、決策者、球迷和廣播機(jī)構(gòu)可能會(huì)從這些運(yùn)動(dòng)的進(jìn)一步民主化中受益。例如,您可以使用 SKY ENGINE AI 快速評(píng)估來(lái)自代表性不足地區(qū)或較低聯(lián)賽的球員的技能,而無(wú)需個(gè)別球探的武斷判斷。
這種方法可以很容易地復(fù)制到訓(xùn)練模型中,以檢測(cè)人類,估計(jì)他們的位置,并分析他們?cè)谌魏螚l件下的運(yùn)動(dòng),而不考慮環(huán)境:工廠、車(chē)間或空間站。
關(guān)于天空引擎 AI
SKY ENGINE AI 是一個(gè)模擬和深度學(xué)習(xí)平臺(tái),可生成完全注釋的合成數(shù)據(jù),并按比例訓(xùn)練 AI 計(jì)算機(jī)視覺(jué)算法。該平臺(tái)生成照片級(jí)真實(shí)感環(huán)境和對(duì)象的高度平衡的圖像數(shù)據(jù),并提供高級(jí)域自適應(yīng)算法。 SKY ENGINE AI 平臺(tái)是一個(gè)工具,可供開(kāi)發(fā)人員、數(shù)據(jù)科學(xué)家和 ML /軟件工程師在任何行業(yè)創(chuàng)建計(jì)算機(jī)視覺(jué)項(xiàng)目。
SKY ENGINE AI 平臺(tái)能夠從頭開(kāi)始構(gòu)建優(yōu)化的定制 AI 模型,并在虛擬現(xiàn)實(shí)中對(duì)其進(jìn)行培訓(xùn)。 SKY ENGINE AI 軟件使您能夠創(chuàng)建任何傳感器、無(wú)人機(jī)或機(jī)器人的數(shù)字孿生模型,并在實(shí)際部署之前在虛擬環(huán)境中對(duì)其進(jìn)行測(cè)試和培訓(xùn)。
SKY ENGINE AI 數(shù)據(jù)生成通過(guò)為任何計(jì)算機(jī)視覺(jué)應(yīng)用程序提供完美平衡的合成數(shù)據(jù)集,使數(shù)據(jù)科學(xué)家的生活更加輕松。示例包括對(duì)象檢測(cè)和識(shí)別、 3D 定位和姿勢(shì)估計(jì)。其他復(fù)雜的案例包括使用雷達(dá)、激光雷達(dá)、衛(wèi)星、 X 射線等分析多傳感器數(shù)據(jù)。
關(guān)于作者
Jakub Pietrzak 是 Sky Engine AI 的首席技術(shù)官。他負(fù)責(zé) GPU 加速研究、數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)算法開(kāi)發(fā)。他是一名計(jì)算機(jī)視覺(jué)魔術(shù)師,在機(jī)器學(xué)習(xí)、光線跟蹤和數(shù)字圖像處理方面有 15 年以上的經(jīng)驗(yàn)。
審核編輯:郭婷
-
NVIDIA
+關(guān)注
關(guān)注
14文章
5304瀏覽量
106329 -
人工智能
+關(guān)注
關(guān)注
1806文章
48996瀏覽量
249241 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8501瀏覽量
134566
發(fā)布評(píng)論請(qǐng)先 登錄
NVIDIA計(jì)劃打造全球首個(gè)工業(yè)AI云平臺(tái)
NVIDIA Sky Hackathon即將再度起航
使用NVIDIA RTX PRO Blackwell系列GPU加速AI開(kāi)發(fā)
NVIDIA RTX 4500 Ada與NVIDIA RTX A5000的對(duì)比
0xmd公司通過(guò)NVIDIA GPU打造醫(yī)療AI解決方案
NVIDIA發(fā)布Cosmos平臺(tái),加速物理AI開(kāi)發(fā)
NVIDIA發(fā)布Cosmos?平臺(tái),助力物理AI系統(tǒng)發(fā)展
NVIDIA推出面向RTX AI PC的AI基礎(chǔ)模型
NVIDIA和GeForce RTX GPU專為AI時(shí)代打造
使用NVIDIA AI平臺(tái)確保醫(yī)療數(shù)據(jù)安全
NVIDIA RTX AI Toolkit擁抱LoRA技術(shù)

評(píng)論