PyTorch3D

PyTorch3D

  • ドキュメント
  • チュートリアル
  • API
  • GitHub

›データ

はじめに

  • PyTorch3Dを選ぶ理由

データ

  • ファイル入出力
  • ファイルからの読み込み
  • データローダー
  • バッチ処理

演算

  • Cubify
  • IoU3D

可視化

  • Plotlyによる可視化

レンダラー

  • 概要
  • はじめに
  • カメラ

バッチ処理

深層学習では、堅牢な学習のために、最適化の各ステップで複数の入力例を処理します。したがって、効率的なバッチ処理は非常に重要です。画像入力の場合、バッチ処理は簡単です。N個の画像は同じ高さ、幅にリサイズされ、N x 3 x H x Wの形状の4次元テンソルとしてスタックされます。しかし、メッシュの場合、バッチ処理はそれほど簡単ではありません。

batch_intro

メッシュのバッチモード

mesh1 = (v1: V1 x 3, f1: F1 x 3)(頂点V1個、面F1個)とmesh2 = (v2: V2 x 3, f2: F2 x 3)(頂点V2 (!= V1)個、面F2 (!= F1)個)の2つのメッシュを含むバッチを作成したいとします。Meshesデータ構造は、異なるヘテロジニアスなメッシュをバッチ処理する3つの異なる方法を提供します。meshes = Meshes(verts = [v1, v2], faces = [f1, f2])がデータ構造のインスタンス化である場合、

  • リスト: バッチ内の例をテンソルのリストとして返します。具体的には、meshes.verts_list()は頂点のリスト[v1, v2]を返し、meshes.faces_list()は面のリスト[f1, f2]を返します。
  • パディング済み: パディング済み表現は、余分な値をパディングすることでテンソルを作成します。具体的には、meshes.verts_padded()は2 x max(V1, V2) x 3の形状のテンソルを返し、余分な頂点を0でパディングします。同様に、meshes.faces_padded()は2 x max(F1, F2) x 3の形状のテンソルを返し、余分な面を-1でパディングします。
  • パック済み: パック済み表現は、バッチ内の例をテンソルに連結します。具体的には、meshes.verts_packed()は(V1 + V2) x 3の形状のテンソルを返します。同様に、meshes.faces_packed()は面に対して(F1 + F2) x 3の形状のテンソルを返します。パックモードでは、パックモードとパディング済みモードまたはリストモード間の効率的な変換を可能にする補助変数が計算されます。

batch_modes

バッチモードのユースケース

異なるメッシュバッチモードの必要性は、PyTorch演算子の実装方法に固有です。最適化されたPyTorch演算子を最大限に活用するために、Meshesデータ構造は、異なるバッチモード間の効率的な変換を可能にします。これは、高速で効率的なトレーニングサイクルを目指す際に重要です。Mesh R-CNNはその例です。ここでは、同じ順伝播パスでネットワークの異なる部分が異なる入力を受け入れ、それらは異なるバッチモード間を変換することで計算されます。具体的には、vert_alignはパディング済み入力テンソルを想定していますが、直後にgraph_convはパック済み入力テンソルを想定しています。

meshrcnn

← データローダーCubify →
  • メッシュのバッチモード
  • バッチモードのユースケース
pytorch3d
Facebook Open Source
Copyright © 2024 Meta Platforms, Inc
法務:プライバシー利用規約