• <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • 計算機視覺/視頻分析

    通過數據驅動的 SKY ENGINE AI 平臺和 NVIDIA RTX 推進 AI 體育分析

    建設訓練和測試場地以幫助將運動分析 AI 解決方案從實驗室推進到現實世界是一項極具挑戰性的任務。在以團隊為基礎的體育運動中,在冠軍賽季前制定正確的比賽策略是任何職業教練和俱樂部所有者成功的關鍵。

    盡管教練們努力在比賽中提供最佳提示并指出錯誤,但他們仍然無法在重新觀看比賽時注意到雙方的每一個細節和行為模式。要收集這些數據,分析它們,并對團隊行為做出推斷,您可以使用復雜的 AI 算法。

    Picture shows a virtual rugby field and synthetic data generated in SKY ENGINE AI platform.
    圖 1 。橄欖球分析解決方案

    特別是,我們想要解決的任務類型是培養橄欖球隊的分析能力,即比賽期間每個球員的位置以及每個球員在球場上的 3D 姿勢。實時獲得這些信息為制定更好的游戲策略提供了必要的證據。

    在許多體育分析案例中,一類問題已經找到了有效的解決方案,但無法有效應用——主要瓶頸是缺少數據。

    收集和標記數據的過程可能既昂貴又耗時。人類必須手動分析圖像,與計算機相比,這種重復性工作不僅速度慢、成本高,而且精確度也較低。

    此外,還有一些情況需要現代設備來生成標記數據,并需要高素質的專家來維護生產過程。這種情況顯著增加了項目成本,或者在許多情況下,使利益相關者無法實現體育分析項目。

    基于團隊的運動:機器學習和計算機視覺的誘人機會

    如果你能自動生成圖像和視頻數據,完全適合手頭的任務,并內置完整且始終正確的地面真相,會怎么樣?

    在這篇文章中,我們將以足球或橄欖球運動員的 3D 姿勢識別為例,展示我們實現這一目標的嘗試。目標是訓練人工智能模型,以準確識別足球運動員及其姿勢,將其作為真實比賽畫面上 3D 空間中的人體關鍵點。

    人工智能模型專門針對使用 SKY ENGINE 人工智能平臺和 NVIDIA RTX 機器生成的人工合成數據進行訓練。生成的圖像是完全由 SKY ENGINE 渲染器控制的模擬場景。根據模型的要求,可以提供各種基本事實。

    具有 NVIDIA RTX 核心的 SKY ENGINE AI 渲染引擎為深度學習提供基于物理的渲染。異構系統由 NVIDIA Titan RTX 和 NVIDIA V100 GPU 組成。這是一種高效且功能強大的配置,可以同時生成標記的多光譜 (如果需要)數據集和訓練神經網絡。

    這種方法的主要優點包括:

    • 有效處理不平衡數據
    • 準確檢測制服和體育場上的標識(誤報)
    • 通常,帶有壓縮偽影的噪聲、低質量數據流不會降低 AI 驅動的推理精度
    • 可以有效地導出廣播攝像機的未知參數
    • 提供高質量的 3D 貼圖
    • 可以精確地對小目標進行姿態估計
    • 運動和構造的復雜結構可以準確識別
    • NVIDIA RTX 體系結構的高效數據處理和計算優化

    下面是 SKY ENGINE AI 平臺中解決的 3D 姿勢估計問題的完整解決方案。

    使用 SKY ENGINE AI 平臺的運動分析案例

    首先,必須配置渲染引擎,定義渲染數據源,并訓練 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())
    
    A simple preview of stadium geometry with simple Phong shader, without materials. Grayscale image.
    圖 2 。體育場幾何圖形預覽

    下一步需要使用 Python API 加載幾何體的紋理:

    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 提供了對程序紋理的完全支持,這帶來了各種數據的快速生成以及基于物理的渲染( PBR 著色器)。

    定義環境地圖如下:

    renderer_ctx.define_env(Background(renderer_ctx,
    EnvMapMiss(renderer_ctx),
    HdrTextureProvider(renderer_ctx, 'light_sky')))
    
    Color image. Preview of a stadium including textures of grass, crowd, sky, goal posts, and so on. Images of commercial logos are overlaid on the pitch.
    圖 3 。使用紋理預覽渲染的體育場

    此時,場景中已渲染體育場。下一步是配置整個場景并用播放器填充它。您可以使用一種方便的實例化機制來實現這一點。

    “天空引擎”( SKY ENGINE )渲染器提供了幾乎無限的可能性來洗牌、乘法、隨機化和組織資源。從某個玩家的單個 Alembic 動畫中,您將創建兩個團隊,每個團隊由 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
    
    Preview of rendered stadium populated with players in uniformly randomized position with clothes in randomized colors and patterns
    圖 4 。由球員填充的渲染體育場預覽

    默認情況下,所有材質都是隨機繪制的。要創建兩個合適的球隊,您需要確保給定球隊中的每個球員都有相同顏色的球衣。保持所有其他輸入的隨機性,例如頭發、膚色、襪子顏色、襯衫編號等。

    要實現這一點,您必須將玩家分成不同的隨機分組,并定義他們的繪圖策略。控制襯衫顏色的 Substance archive 輸入為 Colors _ select 。在隨機化組內需要相同(同步),組間需要不同。默認情況下,所有其他輸入保持隨機化。

    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)
    
    Preview of rendered stadium populated with players with synchronized team colors. Now there are two teams visible where the clothes textures are identical for each team.
    圖 5 。渲染體育場的預覽.

    圖 5 顯示了每個玩家都處于相同的姿勢。默認情況下, SKY ENGINE 逐幀播放 Alembic 文件中的動畫,因此必須隨機化此參數。

    player_geometry_strategy = DrawingStrategy(renderer_ctx, frame_numbers_strategy=UniformRandomInput())
    renderer_ctx.instancers['player_GEO'].modify_geometry_definition(strategy=player_geometry_strategy)

    橄欖球比賽中,球員分布不均勻;他們傾向于聚集在一起,靠得更近。為了使場景看起來更自然,可以更改繪制球員位置的方式。您可以使用隨機高斯分布,而不是均勻地繪制它們。它是雙重隨機的,因為首先\muand\sigma然后使用這些參數隨機繪制玩家的位置。

    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)
    
    Preview of rendered stadium in full color. Stadium includes pitch, tribunes with fans, advertisements, jumbotrons, and is populated with players where the positions are randomized from the Gaussian distribution.
    圖 6 。由球員填充的渲染體育場預覽

    在這篇文章中,我們跳過了相機、燈光和后處理的額外配置,但我們鼓勵您從 GitHub repo 獲取詳細信息。移動到與場景語義和基本事實相關的配置。

    關鍵點已出現在播放器的動畫中。默認情況下, SKY ENGINE 會計算有關關鍵點的所有信息(如果它在輸入資源中接收到這些信息)。您只需將它們可視化,以確保所有配置都正確。綠色關鍵點可見,紅色關鍵點隱藏。

    example_assistant.visualized_outputs = {SceneOutput.BEAUTY, SceneOutput.SEMANTIC, SceneOutput.KEYPOINTS}
    Preview of stadium and players with visible overlays of 3D players skeletons.
    圖 7 。附加到玩家的關鍵點

    場景看起來正確,因此可以為 AI 培訓創建渲染器數據源。

    datasource = MultiPurposeRendererDataSource(renderer_context=renderer_ctx, images_number=20, cache_folder_name='rugby_presentation_new')

    人工智能模型訓練過程

    在培訓階段,您將使用在 DeepSky 庫中實現的模型和培訓器,該庫是 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()

    現在檢查人工智能模型在合成數據上的訓練結果,以驗證所有配置是否正確。在每個歷元之后,保存一個檢查點并生成一些推理示例以查看訓練進度。

    show_jupyter_picture('gtc03_assets/trained/img2.png')
     Inference of a model trained on 2000 synthetic images. The result after 90 epochs. The left Image shows ground truth; the right image shows the result of model inference. The difference between ground truth and inference is invisible.
    圖 8 。 2000 幅合成圖像人工智能模型的推理.

    人工智能模型在真實圖像上的結果

    在下一步中,將在真實視頻上驗證結果。首先,使用預訓練模型進行玩家檢測,以找到邊界框。有關更多信息,請參閱 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)
    
    Bounding boxes (in yellow color) around players detected on a real full color video frame captured during a real rugby game.
    圖 9 。在真實的橄欖球比賽錄像中發現橄欖球運動員
    model.eval()
    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()

    這里有幾個例子。圖 10 顯示, SKY ENGINE AI 能夠訓練其關鍵點 AI 模型之一,以檢測玩家并正確估計骨骼關節的 3D 坐標。可用數據的質量極低是由于捕獲了分辨率較低、壓縮能力強的實況電視廣播。如果不使用具有完美地面真實性的合成數據方法,這種評估任務在使用真實畫面進行人工智能模型訓練的傳統方法中幾乎是不可能的。

    圖 10 。基于這些低質量圖像,玩家的低質量裁剪圖像具有準確估計的 3D 骨骼

    結論

    三維姿態估計是最復雜的計算機視覺任務之一,通常需要高質量的圖像、校準的攝像機和完美的照明條件。另一方面,訓練用于運動分析的姿勢估計算法需要昂貴的運動捕捉課程,并在球場上安裝復雜的設備。

    我們剛剛介紹了如何使用簡單的 3D 資源和在 NVIDIA 硬件上工作的 SKY ENGINE AI 平臺解決這個問題。

    SKY ENGINE AI 工具用于構建團隊體育應用程序,這可能會徹底改變這些游戲。球員、教練、俱樂部、決策者、球迷和廣播機構可能會從這些運動的進一步民主化中受益。例如,您可以使用 SKY ENGINE AI 快速評估來自代表性不足地區或較低聯賽的球員的技能,而無需個別球探的武斷判斷。

    這種方法可以很容易地復制到訓練模型中,以檢測人類,估計他們的位置,并分析他們在任何條件下的運動,而不考慮環境:工廠、車間或空間站。

    關于天空引擎 AI

    SKY ENGINE AI 是一個模擬和深度學習平臺,可生成完全注釋的合成數據,并按比例訓練 AI 計算機視覺算法。該平臺生成照片級真實感環境和對象的高度平衡的圖像數據,并提供高級域自適應算法。 SKY ENGINE AI 平臺是一個工具,可供開發人員、數據科學家和 ML /軟件工程師在任何行業創建計算機視覺項目。

    SKY ENGINE AI 平臺能夠從頭開始構建優化的定制 AI 模型,并在虛擬現實中對其進行培訓。 SKY ENGINE AI 軟件使您能夠創建任何傳感器、無人機或機器人的數字孿生模型,并在實際部署之前在虛擬環境中對其進行測試和培訓。

    SKY ENGINE AI 數據生成通過為任何計算機視覺應用程序提供完美平衡的合成數據集,使數據科學家的生活更加輕松。示例包括對象檢測和識別、 3D 定位和姿勢估計。其他復雜的案例包括使用雷達、激光雷達、衛星、 X 射線等分析多傳感器數據。

    有關更多信息,請參閱 Sky Engine 人工智能平臺Sky Engine AI GitHub 庫

    ?

    0

    標簽

    人人超碰97caoporen国产