Houdini 20.5 機械学習

事例から学ぶ: ML Deformer H20.5

On this page

ML Deformer H20.5コンテンツライブラリのサンプルは、Houdini20.5でリリースされたサンプルベースのMLノードのみを使用して構築されました。 このシーンファイルとMLキャッシュは、コンテンツライブラリからダウンロードすることができます。

このセットアップ(train.hip)は、MLをアニメーションに適用します。 これは、MLが準静的シミュレーションから学習して、線形ブレンドスキニングを改善する方法を説明しています。 このタイプのシミュレーションは、通常では、線形ブレンドスキニングよりも処理が重いです。 しかし、シミュレーションされたサンプルの十分に大きなデータセットを用意することで、MLモデルは、シミュレーション結果を効率良く、且つ、正確にトレーニングして近似化することができます。 これは、そのデータセットの一部でない未知ポーズでも機能します。

このMLの応用は、 Regression(回帰) カテゴリに分類されます。 つまり、MLは、関数を近似化するために使用します。 この場合では、関数は、指定した各リグポーズをスキンのシミュレーション変形にマッピングします。

ステージ

ML Deformer H20.5セットアップは、主に次の3つのステージで構成されています:

  • データセット生成

  • MLトレーニング

  • 推論(トレーニング済みモデルの適用)

これらの各ステージは、さらに小さな工程で構成されていて、いくつかの異なるサブネットワーク内でそれらの工程を見つけることができます。 データセット生成ステージは、ほとんどが ML Example で始まる名前のMLノードを使用します。 MLトレーニングステージと推論ステージは、ほとんどが ML Regression で始まる名前のMLノードを使用します。

データセット生成

データセット生成ステージは以下の工程で構成されています:

  • 入力生成

  • ターゲットの計算

  • 前処理

これらの各工程は、SOPで行ないますが、TOPネットワークから制御されます。

入力生成

各入力はランダムなポーズです。 ポーズの各ジョイントは回転のみを格納するものと想定されています(移動部分は使用されず、ゼロであると想定されます)。 入力ポーズのコレクションは、ランダムサンプリングを使用してML Pose Generateから生成されます。 全360度範囲からランダム角度を生成するのは、非効率的な戦略です。 代わりに、一連の代表的なアニメーションから決定された適切な範囲から選択されたランダム角度が各ジョイントに割り当てられます。 これらの角度範囲をML Pose Generateの入力のジョイント制限として指定します。

ジョイント制限からランダムな入力ポーズを生成。

ターゲットの計算

ランダムに生成された入力ポーズ毎に、それに呼応したターゲットスキン変形を生成する必要があります。 この処理は、2つの別々の小さな工程で構成されています:

  • 準静的シミュレーションを実行して、変形した四面体ケージを取得します。

  • その変形した四面体ケージを使用して、スキンを変形させます。

与えられた入力ポーズ毎に、準静的シミュレーションを使用して、変形した四面体ケージ(四面体メッシュ)を取得します。 これは、ML Deformerの pose cages サブネットワーク内で行なわれています。 このシミュレーションを開始する前に、四面体ケージを全体的に入力ポーズと整列するように回転/移動させます。 その後に、いくつかのシミュレーションタイムステップを実行し、その間に、整列された静止ポーズが徐々に入力ポーズに向かって線形にブレンドされます。 タイムステップ毎に、シミュレーションの拘束として作用する解剖学的なボーンを変形する際に、その補間されたポーズが使用されます。

入力ポーズに対して準静的シミュレーションを実行して、変形された四面体ケージを取得します。

さらに処理を進めるために、各入力ポーズをそれに呼応して変形した四面体ケージ(ターゲット)に結合します。 ラベル付きサンプルのコレクションは、ML Exampleを使用して形成され、それぞれのラベル付きサンプルは、入力コンポーネントとして入力ポーズを、ターゲットコンポーネントとしてその結果の四面体ケージを持ちます。 シミュレーション工程はフレーム依存なので、それぞれのラベル付きサンプルは、(SOPベースのForループを使用するというよりも)ROP Geometry Outputを使用してそれぞれTOPレベルから取得されます。 それらの別々のラベル付きサンプルファイルから、File Mergeと別のROP Geometry Outputを併用して、すべてのラベル付きサンプルのコレクションの単一ファイルが形成されます。

ML手法は、四面体ケージではなく変形スキンの頂点から学習します。 つまり、それぞれの変形四面体ケージを変形スキンに変換する必要があります。 次の工程は、ラベル付きサンプルのコレクションを、各ターゲットコンポーネントがその四面体ケージではなく変形スキンになっている新しいコレクションに変換します。 これは、ML Deformerの pose skins サブネットワーク内で行なわれています。 ForループのSOPは、前の工程からのそれぞれのラベル付きサンプルを変換します。 ForループのSOP 内のML Example Decompose SOPは、それぞれのラベル付きサンプルを、それを構成する入力コンポーネントとターゲットコンポーネントに分割します。 入力コンポーネントを表現したパックプリミティブは、その埋め込みジオメトリをコピーせずにそのまま保持されます。 四面体ケージのターゲットは、スキンを変形させて、変形スキンと呼ばれる新しいタイプのターゲットを生成します。 次に、その既存の入力とその新しいターゲットタイプをML Exampleを使用して再びまとめます。

それぞれの四面体ケージを使用してスキンを変形させる。

ラベル付きサンプルの変換に加えて、さらにこの工程は、サンプルベースのMLノードで用意されている検証機構を使用して、外れ値を破棄します。 検証工程は、スキンが変形される度に実行されます。 スキンにNAN(不正な数値)が含まれていた場合、ML Exampleで認識されるDetailアトリビュートを使用して、そのスキンが無効であるとマークします。 これによって、空っぽの出力が生成され、そのサンプルが破棄されます。 各入力とそれに呼応するターゲットは、常に単一のラベル付きサンプルにまとめられます。 つまり、この検証工程ではインデックス生成の問題は発生しません。

前処理

前処理を開始する前に、各ラベル付きサンプルは、入力コンポーネントとしてポーズを、ターゲットコンポーネントとして変形スキンを持っています。 変形スキンのポイント数が50,000個ある場合、フルスキン変形を格納するのに150,000個の浮動小数点値が必要となります。 150,000ユニットの出力レイヤを持つニューラルネットワークをトレーニングするには、非常に処理が重くなってしまいます。 そのようなモデルは推論でも処理が重くなります。 これを修復するために、この前処理工程は、トレーニングに使用されるターゲットのサイズを小さくすることを目標にしています。

前処理ステージは2つの小さな工程で構成されています:

  • 静止位置を基準にしたスキン変位の計算。

  • Principal Component Analysis(PCA:主成分分析)を使用して、それらのスキン変位を近似化。

1つ目の前処理工程は、前のステージでの変形四面体ケージから変形スキンへの変換と同様です。 入力をそのままにターゲットに変換を適用します。 1つ目の前処理工程は、各変形スキンを、静止空間でのLBS(Linear Blend Skinning:線形ブレンドスキニング)アニメーションのスキンを基準にした変位に変換します。 これは、 pose_displacements サブネットワーク内で行なわれています。 ポーズと前のステージからの変形スキンの組み合わせ毎に、そのポーズは、その変形スキンとLBSを使用して変形されたスキンとの間の差分を計算します。 これによって、その変形スキンを基準にしたスキン変位が生成されます。 LBSの逆変換を各変位ベクトルに適用すると、静止スキンを基準にしたスキン変位が生成されます。 静止位置を基準にした変位でスキン変形を表現するこの新しい方法の利点は、入力ポーズの全体的な位置と向きに依存しないことです。

変形スキン毎に、それに呼応した静止空間での変位を計算する。

2つ目の前処理工程は、Principal Component Analysis(PCA:主成分分析)を使用して、静止変位をはるかに小さな表現で近似化します。 これは、 data_set サブネットワーク内で行なわれています。 ラベル付きサンプルのコレクション内のすべてのスキン変位から、Principal Component Analysisを使用して、新しくてはるかに小さいスキン変位が形成されます。 Analyzeモードでは、それぞれの元のスキン変位を、新しいスキン変位の線形結合を使用して正確に近似化することができます。 ML Deformer H20.5は、これらの係数のうち128個のみを使用するので、元の150,000個ではなく128個の出力のみを持つニューラルネットワークを作成することができます。 この128個の数は変更することができます。

Principal Component Analysisを実行する。

トレーニング用の最終データセットは、別の For Loop SOP を使用して組み立てられています。 そこでは、入力のラベル付きサンプルは、入力コンポーネントとしてポーズを、ターゲットコンポーネントとしてスキン変位を持っています。 各ポーズは、ML Pose Serializeを使用して、浮動小数点Pointアトリビュートに変換されています。 各スキン変形は、ProjectモードでPrincipal Component Analysisを使用して、128個のPCAコンポーネントに変換されています。 その結果のサンプルは、ML Example Outputを使用して回帰トレーニング用のデータセットとして書き出されています。

ポーズをシリアライズ化し、静止変位から主成分を抽出します。

トレーニング

TOPネットワークの COOK_RECIPE は、データセット全体を作成し、トレーニングを実行します。 このネットワークは、上記で説明しているすべての工程とこのトレーニングステージが正しい順序で実行されるようにします。

回帰トレーニング用のデータセットは、トレーニングノードのML Regression Train TOPによって、TOPレベルで読み込まれます。 このTOPセットアップは、それぞれ異なるハイパーパラメータ設定で複数のトレーニングセッションを実行します。 ここでトレーニングする特定のハイパーパラメータは1つだけです。つまり、ニューラルネットワークの隠れ層の数です。 ML Regression Train TOPが呼び出される度に、その結果が別々のモデルファイルに書き出されます。

色々なハイパーパラメータのトレーニングを実行する。

推論

推論ステージは、トレーニング済みのニューラルネットワークを使用して、未知ポーズに対してスキン変形を予測することができるステージです。 ML Deformer H20.5コンテンツライブラリのサンプルは、2つの異なる場所で推論を実行します:

  • モデルのパフォーマンスを評価することができる分析ネットワーク。

  • トレーニング済みモデルを様々なユーザ制御のポーズに対して試行することができるAPEXセットアップ。

分析ネットワークは、どのトレーニング済みモデルが最もパフォーマンスが良いのか判断することができます。 APEXノードを含んだ別のpose_using_ml.hipシーンファイルでは、トレーニング済みモデルをアニメーションワークフローに組み込む方法を説明しています。

入力ポーズを変換し、推論を実行し、変形スキンを取得します。
APEXを使用して、トレーニング済みモデルをアニメーションさせる。

分析ネットワーク

分析ネットワークの analyze_trained_model は、ML Regression Inference SOPを使用しています。 ML Regression Inference SOPは、ML Regression Train TOPで生成されたモデルを参照することができます。

ML Regression Inference SOPは、トレーニング済みモデルを入力に適用します。 これらの入力には、データセットの入力コンポーネントとして含まれていた 既知入力 を接続することができます。 また、データセットのどのサンプルの一部でもない 未知入力 を接続することもできます。 ML Regression Inference SOPは、それらの入力を受け取り、データセット内の入力とターゲットと同じ形式で出力を計算します。 つまり、ML Regression Inference SOPを入力ポーズに適用したい場合、まず最初にその入力ポーズにML Pose Serialize SOPを適用しなければなりません。 ML Regression Inference SOPの出力はPCAコンポーネントで構成されています。 これらのPCAコンポーネントは、前処理ステージで各スキン変形に適用されている工程の逆を使用して、スキン変形に戻されます。:

  • PCAコンポーネントからスキン変位を計算します。

  • そのスキン変位を変形スキンに適用します。

この分析ネットワークは、線形ブレンドスキニングと機械学習モデルの両方の結果をGround Truthと比較することもできます。 これによって、そのモデルのトレーニング済みポーズに対する精度を確認することができます。 また、未知ポーズに対して別途生成されたGround Truthを使用して、そのモデルのトレーニングデータセット外のポーズに対する精度を確認することもできます。

APEXセットアップ

トレーニング済みモデルにポーズを付ける方法を示したpose_using_ml.hipシーンファイルが別途用意されています。 このシーンファイルでは、MLモデルで生成されたPCAコンポーネントから自動的に変形スキンへ変換するのに役立つ2個のアセットを使用しています。 入力ポーズを手動で変更して、トレーニング済みMLモデルによって予測されたスキン変形がどのように見えるのか確認することができます。

機械学習

一般的なサポート

サンプルベースのML

リファレンス