建設訓練和測試場地以幫助將運動分析 AI 解決方案從實驗室推進到現(xiàn)實世界是一項極具挑戰(zhàn)性的任務。在以團隊為基礎的體育運動中,在冠軍賽季前制定正確的比賽策略是任何職業(yè)教練和俱樂部所有者成功的關鍵。
盡管教練們努力在比賽中提供最佳提示并指出錯誤,但他們?nèi)匀粺o法在重新觀看比賽時注意到雙方的每一個細節(jié)和行為模式。要收集這些數(shù)據(jù),分析它們,并對團隊行為做出推斷,您可以使用復雜的 AI 算法。
特別是,我們想要解決的任務類型是培養(yǎng)橄欖球隊的分析能力,即比賽期間每個球員的位置以及每個球員在球場上的 3D 姿勢。實時獲得這些信息為制定更好的游戲策略提供了必要的證據(jù)。
在許多體育分析案例中,一類問題已經(jīng)找到了有效的解決方案,但無法有效應用——主要瓶頸是缺少數(shù)據(jù)。
收集和標記數(shù)據(jù)的過程可能既昂貴又耗時。人類必須手動分析圖像,與計算機相比,這種重復性工作不僅速度慢、成本高,而且精確度也較低。
此外,還有一些情況需要現(xiàn)代設備來生成標記數(shù)據(jù),并需要高素質(zhì)的專家來維護生產(chǎn)過程。這種情況顯著增加了項目成本,或者在許多情況下,使利益相關者無法實現(xiàn)體育分析項目。
如果你能自動生成圖像和視頻數(shù)據(jù),完全適合手頭的任務,并內(nèi)置完整且始終正確的地面真相,會怎么樣?
在這篇文章中,我們將以足球或橄欖球運動員的 3D 姿勢識別為例,展示我們實現(xiàn)這一目標的嘗試。目標是訓練人工智能模型,以準確識別足球運動員及其姿勢,將其作為真實比賽畫面上 3D 空間中的人體關鍵點。
人工智能模型專門針對使用 SKY ENGINE 人工智能平臺和 NVIDIA RTX 機器生成的人工合成數(shù)據(jù)進行訓練。生成的圖像是完全由 SKY ENGINE 渲染器控制的模擬場景。根據(jù)模型的要求,可以提供各種基本事實。
具有 NVIDIA RTX 核心的 SKY ENGINE AI 渲染引擎為深度學習提供基于物理的渲染。異構系統(tǒng)由 NVIDIA Titan RTX 和 NVIDIA V100 GPU 組成。這是一種高效且功能強大的配置,可以同時生成標記的多光譜 (如果需要)數(shù)據(jù)集和訓練神經(jīng)網(wǎng)絡。
這種方法的主要優(yōu)點包括:
有效處理不平衡數(shù)據(jù)
準確檢測制服和體育場上的標識(誤報)
通常,帶有壓縮偽影的噪聲、低質(zhì)量數(shù)據(jù)流不會降低 AI 驅(qū)動的推理精度
可以有效地導出廣播攝像機的未知參數(shù)
提供高質(zhì)量的 3D 貼圖
可以精確地對小目標進行姿態(tài)估計
運動和構造的復雜結構可以準確識別
NVIDIA RTX 體系結構的高效數(shù)據(jù)處理和計算優(yōu)化
下面是 SKY ENGINE AI 平臺中解決的 3D 姿勢估計問題的完整解決方案。
使用 SKY ENGINE AI 平臺的運動分析案例
首先,必須配置渲染引擎,定義渲染數(shù)據(jù)源,并訓練 AI 模型以進行人體檢測和 3D 姿勢估計。
資源加載和渲染引擎配置
從加載體育場幾何體的資源開始。這些資源在標準 3D 建模軟件中準備,并以 Alembic 格式加載到 SKY ENGINE 中。
renderer_ctx.load_abc_scene('stadium') renderer_ctx.setup()
接下來,顯示體育場的加載幾何體:
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 提供了對程序紋理的完全支持,這帶來了各種數(shù)據(jù)的快速生成以及基于物理的渲染( PBR 著色器)。
定義環(huán)境地圖如下:
renderer_ctx.define_env(Background(renderer_ctx, EnvMapMiss(renderer_ctx), HdrTextureProvider(renderer_ctx, 'light_sky')))
此時,場景中已渲染體育場。下一步是配置整個場景并用播放器填充它。您可以使用一種方便的實例化機制來實現(xiàn)這一點。
“天空引擎”( SKY ENGINE )渲染器提供了幾乎無限的可能性來洗牌、乘法、隨機化和組織資源。從某個玩家的單個 Alembic 動畫中,您將創(chuàng)建兩個團隊,每個團隊由 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
默認情況下,所有材質(zhì)都是隨機繪制的。要創(chuàng)建兩個合適的球隊,您需要確保給定球隊中的每個球員都有相同顏色的球衣。保持所有其他輸入的隨機性,例如頭發(fā)、膚色、襪子顏色、襯衫編號等。
要實現(xiàn)這一點,您必須將玩家分成不同的隨機分組,并定義他們的繪圖策略??刂埔r衫顏色的 Substance archive 輸入為 Colors _ select 。在隨機化組內(nèi)需要相同(同步),組間需要不同。默認情況下,所有其他輸入保持隨機化。
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 顯示了每個玩家都處于相同的姿勢。默認情況下, SKY ENGINE 逐幀播放 Alembic 文件中的動畫,因此必須隨機化此參數(shù)。
player_geometry_strategy = DrawingStrategy(renderer_ctx, frame_numbers_strategy=UniformRandomInput()) renderer_ctx.instancers['player_GEO'].modify_geometry_definition(strategy=player_geometry_strategy)
橄欖球比賽中,球員分布不均勻;他們傾向于聚集在一起,靠得更近。為了使場景看起來更自然,可以更改繪制球員位置的方式。您可以使用隨機高斯分布,而不是均勻地繪制它們。它是雙重隨機的,因為首先and然后使用這些參數(shù)隨機繪制玩家的位置。
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)
在這篇文章中,我們跳過了相機、燈光和后處理的額外配置,但我們鼓勵您從 GitHub repo 獲取詳細信息。移動到與場景語義和基本事實相關的配置。
關鍵點已出現(xiàn)在播放器的動畫中。默認情況下, SKY ENGINE 會計算有關關鍵點的所有信息(如果它在輸入資源中接收到這些信息)。您只需將它們可視化,以確保所有配置都正確。綠色關鍵點可見,紅色關鍵點隱藏。
example_assistant.visualized_outputs = {SceneOutput.BEAUTY, SceneOutput.SEMANTIC, SceneOutput.KEYPOINTS}
場景看起來正確,因此可以為 AI 培訓創(chuàng)建渲染器數(shù)據(jù)源。
datasource = MultiPurposeRendererDataSource(renderer_context=renderer_ctx, images_number=20, cache_folder_name='rugby_presentation_new')
人工智能模型訓練過程
在培訓階段,您將使用在 DeepSky 庫中實現(xiàn)的模型和培訓器,該庫是 SKY ENGINE AI 平臺的一部分。
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ù)上的訓練結果,以驗證所有配置是否正確。在每個歷元之后,保存一個檢查點并生成一些推理示例以查看訓練進度。
show_jupyter_picture('gtc03_assets/trained/img2.png')
人工智能模型在真實圖像上的結果
在下一步中,將在真實視頻上驗證結果。首先,使用預訓練模型進行玩家檢測,以找到邊界框。有關更多信息,請參閱 GTC 2019 上提供的播放器檢測教程,該教程可在天空引擎 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 能夠訓練其關鍵點 AI 模型之一,以檢測玩家并正確估計骨骼關節(jié)的 3D 坐標??捎脭?shù)據(jù)的質(zhì)量極低是由于捕獲了分辨率較低、壓縮能力強的實況電視廣播。如果不使用具有完美地面真實性的合成數(shù)據(jù)方法,這種評估任務在使用真實畫面進行人工智能模型訓練的傳統(tǒng)方法中幾乎是不可能的。
結論
三維姿態(tài)估計是最復雜的計算機視覺任務之一,通常需要高質(zhì)量的圖像、校準的攝像機和完美的照明條件。另一方面,訓練用于運動分析的姿勢估計算法需要昂貴的運動捕捉課程,并在球場上安裝復雜的設備。
我們剛剛介紹了如何使用簡單的 3D 資源和在 NVIDIA 硬件上工作的 SKY ENGINE AI 平臺解決這個問題。
SKY ENGINE AI 工具用于構建團隊體育應用程序,這可能會徹底改變這些游戲。球員、教練、俱樂部、決策者、球迷和廣播機構可能會從這些運動的進一步民主化中受益。例如,您可以使用 SKY ENGINE AI 快速評估來自代表性不足地區(qū)或較低聯(lián)賽的球員的技能,而無需個別球探的武斷判斷。
這種方法可以很容易地復制到訓練模型中,以檢測人類,估計他們的位置,并分析他們在任何條件下的運動,而不考慮環(huán)境:工廠、車間或空間站。
關于天空引擎 AI
SKY ENGINE AI 是一個模擬和深度學習平臺,可生成完全注釋的合成數(shù)據(jù),并按比例訓練 AI 計算機視覺算法。該平臺生成照片級真實感環(huán)境和對象的高度平衡的圖像數(shù)據(jù),并提供高級域自適應算法。 SKY ENGINE AI 平臺是一個工具,可供開發(fā)人員、數(shù)據(jù)科學家和 ML /軟件工程師在任何行業(yè)創(chuàng)建計算機視覺項目。
SKY ENGINE AI 平臺能夠從頭開始構建優(yōu)化的定制 AI 模型,并在虛擬現(xiàn)實中對其進行培訓。 SKY ENGINE AI 軟件使您能夠創(chuàng)建任何傳感器、無人機或機器人的數(shù)字孿生模型,并在實際部署之前在虛擬環(huán)境中對其進行測試和培訓。
SKY ENGINE AI 數(shù)據(jù)生成通過為任何計算機視覺應用程序提供完美平衡的合成數(shù)據(jù)集,使數(shù)據(jù)科學家的生活更加輕松。示例包括對象檢測和識別、 3D 定位和姿勢估計。其他復雜的案例包括使用雷達、激光雷達、衛(wèi)星、 X 射線等分析多傳感器數(shù)據(jù)。
關于作者
Jakub Pietrzak 是 Sky Engine AI 的首席技術官。他負責 GPU 加速研究、數(shù)據(jù)科學和機器學習算法開發(fā)。他是一名計算機視覺魔術師,在機器學習、光線跟蹤和數(shù)字圖像處理方面有 15 年以上的經(jīng)驗。
審核編輯:郭婷
-
NVIDIA
+關注
關注
14文章
5072瀏覽量
103514 -
人工智能
+關注
關注
1793文章
47622瀏覽量
239571 -
機器學習
+關注
關注
66文章
8438瀏覽量
132906
發(fā)布評論請先 登錄
相關推薦
評論