見出し画像

Kaolin:3Dディープラーニング研究を加速するためのPyTorchライブラリ (Paper)

以下の記事を参考にして書いてます。

Kaolin: A PyTorch Library for Accelerating 3D Deep Learning Research

1. Abstract

3Dディープラーニングの研究を加速することを目的としたPyTorchライブラリ「Kaolin」を紹介します。深層学習システムで使用するための微分可能な3Dモジュールの効率的な実装を提供します。一般的な3Dデータセットを読み込んで前処理する機能、およびメッシュ、ポイントクラウド、符号付き距離関数、ボクセルグリッドを操作するネイティブ関数により、「Kaolin」は無駄な定型コードの記述を軽減します。

「Kaolin」は、レンダリング、ライティング、シェーディング、ビューワーピングなど、いくつかの差別化可能なグラフィックモジュールをパッケージ化しています。また、シームレスな評価のために一連の損失関数と評価指標をサポートし、3D結果をレンダリングする視覚化機能を提供します。重要なことは、多くの最先端の3Dディープラーニングアーキテクチャを含む包括的な「Model Zoo」を提供し、将来の研究活動の出発点になることを目指しています。

「Kaolin」は、githubでオープンソースとして公開しています。

2. Introduction

3Dディープラーニングは、「ロボット工学」「自動運転車」「AR」「VR」などの複雑なタスクとの関連性が高いため、注目を集めています。ディープラーニングと成長し続けるコンピューティングインフラストラクチャの出現により、以前は手に負えなかった非常に複雑な3Dデータの分析が可能になりました。さらに、3Dビジョンの研究は、ロボット工学やコンピューターグラフィックスなどの関連分野のよく知られた概念を活用されはじめました。

このように関心は高まっていますが、研究を行うには、標準化されたツールがなく急な学習曲線が必要になります。研究者が一般的な3Dデータセットを簡単にロードし、さまざまな表現や複雑さのレベルで3Dデータを変換し、最新の機械学習フレームワークにプラグインし、ディープラーニングアーキテクチャを訓練および評価できるシステムはまだありません。3Dディープラーニングの研究者は、さまざまなコードベースから不一致のコードスニペットをコンパイルして、基本的なタスクを実行する必要があり、その結果、さまざまな最先端手法間での比較が困難になっています。

3Dディープラーニングへの参入障壁を取り除き、研究を促進するために、PyTorchの3Dディープラーニングライブラリ「Kaolin」を紹介します。「Kaolin」は、3D深層学習アプリケーションを迅速に構築するために必要なコアモジュールの実装を提供します。データの読み込みと前処理から、一般的な3D表現(メッシュ、ボクセル、符号付き距離関数、ポイントクラウドなど)への変換、これらの表現での深層学習タスクの実行、タスク固有のメトリックの計算、3Dデータの視覚化まで、3Dディープラーニングアプリケーションのライフサイクル全体を、直感的で親しみやすいものにします。さらに、「Kaolin」は、3Dタスク用の一般的な手法を学習済みモデルを「Model-Zoo」として提供し、最新手法を容易に実装できることを示し、将来の研究活動の出発点になることを目指しています。

3D深層学習アプリケーションの幾何学的構造および物理プロセス(照明、シェーディング、投影など)の明示的なモデリングのための微分可能レンダリングの出現により、「Kaolin」は一般的なモジュラー微分可能レンダラーを特徴としており、これは一般的な微分可能レンダリング方法すべてに簡単に拡張でき、将来の研究開発のために簡単に構築できます。

3. Kaolin - Overview

「Kaolin」は、3Dディープラーニングアーキテクチャを構築し、3Dデータを操作するための効率的で使いやすいツールを提供することを目指しています。有用な定型コードを広く提供することにより、3Dディープラーニングの研究者は、アプリケーションの新しい側面の開発に専念することができます。次のセクションでは、この3Dディープラーニングパッケージの各主要機能について簡単に説明します。概要については、図1を参照してください。

◎ 3D表現
3Dディープラーニングプロジェクトでの表現の選択は、3Dデータタイプの所有者によってさまざまなプロパティがあるため、成否に大きな影響を与えます。この表現の選択で高い柔軟性を確保するために、「Kaolin」はすべての一般的な3D表現をサポートしています。

・ポリゴンメッシュ
・ポイントクラウド
・ボクセルグリッド
・符号付き距離関数
・深度画像(2.5D)

各表現タイプは、独立したクラス内にPyTorchテンソルのコレクションとして保存されます。これにより、パッケージでサポートされているデータの増強と変更のために、一般的な機能をオーバーロードすることができます。各クラス内では、表現全体にわたる効率的な(可能な限り微分可能な)変換が提供されます。たとえば、再パラメータ化トリックの適用により、ポリゴンメッシュからポイントクラウドへの変換を可能にする微分可能な表面サンプリングメカニズムを提供します。メッシュ畳み込みネットワークとメッシュのメッシュCNN、ボクセルの3D畳み込み、ポイントクラウドのPointNetとPointNet++など、各表現のネットワークアーキテクチャもサポートされています。次のサンプルコードは、メッシュモデルを「Kaolin」にロードし、ポイントクラウドに変換し、両方の表現でレンダリングできることを示しています。

画像1

◎ データセット
「Kaolin」は、多くの一般的な3Dデータセットを完全にサポートしています。ファイルの処理、解析、および1つの関数呼び出しへの拡張に伴う大きなオーバーヘッドを削減します。すべてのデータへのアクセスは、「PyTorch Dataset」および「DataLoader」クラスの拡張機能を介して提供されます。これにより、3Dデータの前処理とロードが簡単かつ直感的になります。すべてのデータは、「Universal Scene Description」(USD)形式でインポートおよびエクスポートできます。これは、グラフィックアプリケーション全体で3Dデータを定義、パッケージ化、アセンブル、および編集するための共通言語を提供します。

現在サポートされているデータセットには、「ShapeNet」「Part-Net」「SHREC」「ModelNet」「ScanNet」「HumanSeg」、およびより多くの一般的なカスタムコレクションが含まれます。たとえば、「ShapeNet」を介して、数十のクラスにまたがる何万ものオブジェクトを含む、CADモデルの巨大なリポジトリが提供されます。「ScanNet」を介して、250万を超える一意の深度マップを含む1500を超えるRGD-Bビデオスキャンが、カメラポーズ、表面再構成、およびセマンティックセグメンテーションの完全な注釈とともに提供されます。これらの3D情報の大規模なコレクション、およびそれ以上の多くは、単一の関数呼び出しを通じて簡単にアクセスできます。たとえば、「ModelNet」にアクセスしてPytorchデータローダーに提供し、ボクセルモデルのバッチをロードするのは次のように簡単です。

画像2

◎ 3Dジオメトリ関数
「Kaolin」の中核となるのは、3Dコンテンツの操作を可能にする3D幾何関数の効率的なスイートです。剛体変換は、いくつかのパラメーター化(オイラー角、リー群、および四元数)で実装されます。GVNN(幾何学的視覚のためのニューラルネットワークライブラリ)で定義された遠近法ワーピングレイヤーなどの微分可能な画像ワーピングレイヤーも実装されています。ジオメトリサブモジュールは、「3D剛体」「アフィン」「射影変換」「3D-2D投影」「2D-3D逆投影」を可能にします。現在、「正投影」と「遠近法(ピンホール)投影」をサポートしています。

◎ モジュラー微分可能レンダラー
最近、微分可能なレンダリングが研究の活発な分野に現れ、ディープラーニング研究者が主に2Dの観察を使用して3Dタスクを実行できるようになりました。ただし、微分可能なレンダリングツールを開発するのは簡単なことではありません。関連する操作は計算量が多く複雑です。これらの障害を取り除き、この分野のさらなる研究を行い、一般的な微分可能なレンダリング方法を簡単に使用できるようにするために、「Kaolin」は柔軟でモジュール式の微分可能なレンダラーを提供します。「Kaolin」は、レンダリングパイプラインの各コンポーネントの抽象メソッド(幾何学的変換、ライティング、シェーディング、ラスター化、投影)を含む抽象基本クラス、「DifferentiableRenderer」を定義します。コンポーネントを組み立て、モジュールを交換し、この抽象クラスを使用して新しいテクニックを開発するのは簡単で直感的です。

「Kaolin」は、「複数の照明」(アンビエント、指向性、鏡面反射)、「シェーディング」(ランバート、フォン、コサイン)、「投影」(透視、正投影、歪曲)、「ラスタライズモード」をサポートしています。「DifferentiableRenderer」クラスのアーキテクチャの図を図4に示します。
最適なパフォーマンスを得るために、必要に応じて実装はCUDAで記述されています。この領域での開発のオーバーヘッドの削減を実証するために、「DifferentiableRenderer」クラスの具体的なインスタンスとして、複数の公的に利用可能な微分可能なレンダラーを利用できます。そのような例の1つである「DIB-Renderer」はインスタンス化され、次の数行のコードで「Kaolin」を使用してメッシュを微分可能に画像にレンダリングします。

画像3

◎ 損失関数とメトリック
3Dディープラーニングアプリケーションの一般的な課題は、パフォーマンスを評価し、ニューラルネットワークを監視するためのツールを定義および実装することです。たとえば、メッシュやポイントクラウドなどのサーフェス表現を比較するには、数千のポイントまたは三角形の位置を一致させる必要があり、CUDA関数が必要です。その結果、「Kaolin」は各3D表現に対して一般的に使用される3Dメトリックの配列の実装を提供します。このメトリックのコレクションには、ボクセルのユニオンの交差部分、ポイントクラウドの面取り距離と(距離の2次近似)距離、メッシュのポイントツーサーフェス損失、およびその他の多くのメッシュメトリック(ラプラシアンなど)が含まれます。

◎ Model-Zoo
3Dディープラーニングの分野の新しい研究者は、3D表現、モデルアーキテクチャ、損失関数などの選択についての嵐の嵐に直面しています。ベースラインの豊富なコレクションと最新の状態を提供することでこれを改善します。分類、セグメンテーション、画像からの3D再構築、超解像、微分可能なレンダリングを含むがこれらに限定されない、さまざまな3Dタスクのためのアートアーキテクチャ。ソースコードに加えて、一般的なベンチマークでこれらのタスクの事前トレーニングモデルをリリースし、将来の研究のベースラインとして使用します。また、これにより、評価方法と評価基準がまだ初期段階にある分野での標準化が促進されることを期待しています。「Model-Zoo」には、「Pixel2Mesh」「GEOMetrics」「AtlasNet」「M3DR」「Soft-Rasterizer」「Dib-Renderer」「MeshCNN」などの手法が含まれています。

◎ 視覚化
コンピュータビジョンタスクの重要な側面は、データの視覚化です。しかし、3Dデータの場合、これは決して簡単ではありません。ボクセルやポイントクラウドなどの一部のデータ型を視覚化するためのPythonパッケージが存在しますが、一般的な3D表現全体の視覚化をサポートするパッケージはありません。「Kaolin」の主要な機能の1つは、すべての表現タイプの視覚化をサポートします。これは、Trimeshなどの軽量の視覚化ライブラリ、および実行時間の視覚化のためのpptkを介して実装されます。すべてのデータはUSDにエクスポート可能であるため、3Dの結果は、より集中的なグラフィックアプリケーションではるかに高い忠実度で簡単に視覚化することもできます(レンダリングの例については図5を参照)。ディスプレイが接続されていないサーバーで実行する場合などのヘッドレスアプリケーションの場合、後の視覚化のために、画像やアニメーションをディスクにレンダリングするコンパクトユーティリティを提供します。

4. Roadmap

「Kaolin」は3D DL研究を加速するための主要なステップであると考えていますが、努力はこれで終わりではありません。「Kaolin」周辺の強力なオープンソースコミュニティを育成し、他の3Dディープラーニング研究者や実務家からの貢献を歓迎します。このセクションでは、オープンソースソフトウェアとしての「Kaolin」の一般的なロードマップを示します。

(1) Model-Zoo
特に「Kaolin」は、新しいメソッドの実装に必要な時間を短縮する広範な機能を提供しているため、「Model-Zoo」を常に改善し続けています(ほとんどのアプローチは1日か2日で実装できます)。

(2) 微分可能レンダリング
新しい微分可能レンダリングツールへのサポートの拡張を計画しており、ドメインランダム化、マテリアルリカバリなどの追加タスクの機能を含めます。

(3) LiDARデータセット
いくつかの大規模なセマンティックおよびインスタンスセグメンテーションデータセットを含める予定です。たとえば、S3DISおよびnuScenesのサポートは、将来のリリースの優先度の高いタスクです。

(4) 3Dオブジェクト検出
現在、「Kaolin」の「Model-Zoo」には3Dオブジェクト検出用のモデルはありません。これは、将来のリリースの重要な領域です。

(5) 自動混合精度
3Dニューラルネットワークアーキテクチャをよりコンパクトかつ高速にするために、一般的に使用される3Dアーキテクチャ(PointNet、MeshCNN、Voxel U-Netなど)への自動混合精度(AMP)の適用性を調査しています。
Nvidia Apexは、一般的な2DディープラーニングアーキテクチャのほとんどのAMPモードをサポートしています。このサポートを3Dに拡張することを検討したいと思います。

(6) 二次光効果
「Kaolin」は現在、微分可能なレンダリングクラスに対して一次照明効果のみをサポートしています。これにより、影などのより複雑なシーン情報について推論するアプリケーションの能力が制限されます。将来のリリースでは、これらの二次的効果がパッケージの範囲内に収まるように、パストレーシングとレイトレーシングのサポートを含める予定です。

3Dコミュニティが「Kaolin」を試し、フィードバックを提供し、その開発に貢献することを楽しみにしています。

【図1】

画像4

「Kaolin」は、3Dディープラーニングの研究を促進することを目的としたPyTorchライブラリです。以下の機能を提供します。

(1) 人気のある3Dデータセットを読み込んで前処理する機能。
(2) ポイントクラウド、メッシュ、ボクセルグリッド、符号付き距離関数、震度画像の、3Dタスクで一般的に使用されるニューラルアーキテクチャと損失関数の大規模なZoo。
(3) いくつかの既存の微分可能なレンダラーの提供。
(4) 研究結果を簡単に評価するための一般的な3Dメトリックスの提供。
(5) 3D結果を視覚化する機能。 

【図2】

画像5

「Kaolin」は3D DLモデルの訓練を簡単にします。5行のコードで、車と飛行機のPointNet++分類器の訓練とテストを行います。

【図3】

画像6

「Kaolin」は、3D表現を変換するための効率的なPyTorch操作を提供します。 メッシュ、ポイントクラウド、ボクセルグリッドは引き続き最も人気のある3D表現ですが、「Kaolin」は符号付き距離関数(SDF)、正投影深度マップ(ODM)、および深度画像(RGB-D)を幅広くサポートしています。

【図4】

画像7

モジュラー微分可能レンダラー:「Kaolin」は、柔軟なモジュラー式の微分可能なレンダラーをホストします。これにより、個々のサブ操作を簡単に交換して、新しいバリエーションを構成できます。

【図5】

画像8

「Kaolin」のアプリケーション:(左上から時計回り)2D監視による3Dオブジェクト予測、生成的敵対ネットワークによる3Dコンテンツ作成、3Dセグメンテーション、TurboSquidからの3Dアセットへの自動タグ付け 、3D監視による3Dオブジェクトの予測などなど...

【表1】

画像9

「Kaolin」は、最初の包括的な3D DLライブラリです。 さまざまな表現、データセット、モデルを幅広くサポートすることで、TensorFlow Graphics 、Kornia、GVNNなどの既存の3Dライブラリを補完します。

【表2】

画像10

既存のオープンソースコードに対して「Kaolin」が実現したサンプルの高速化。



この記事が気に入ったらサポートをしてみませんか?