点群分類用のディープ ラーニング モデルのトレーニング

点群の分類に使用されるディープ ラーニング モデルを作成するには、トレーニング データの準備と、実際のトレーニングの 2 つの主なステップがあります。 自分でトレーニング データを用意しなくてはならないため、一般的に前半のステップに大きな困難が伴います。 トレーニング データを用意すると、残りのほとんどの作業はコンピューターが実施します。

トレーニング データは、ニューラル ネットワークの学習用サンプルとして提供する分類済みのポイントです。 通常、サンプルが多いほどトレーニングの効果も高くなります。 できるだけ正確なサンプルが必要なので、正確さに細心の注意を払うことが重要です。 分類の範囲は、アプリケーションで使用するフィーチャや地形エレメントにする必要があります。 また、汎用性の高いモデルを作成できるよう、トレーニング データには多様性が必要です。さらに、より現実的なパフォーマンス指標を得るためには、整合チェック データの多様性も必要になります。 多様性があれば、より良好なトレーニング結果を得られます。

通常、点群にはレーザーや写真に捕捉されたあらゆるもののサンプルが含まれています。 すべてのポイントを特定の物として分類することは現実的ではなく、また望ましくありません。 必要なのは、対象ポイントを正確に分類することです。 背景にある他のポイントや、対象以外のポイントは、クラスとして残しておくことができます。 たとえば、送電線、植生、ビルディングを対象としている場合は、それらを正しく分類する必要があります。 他のすべてのポイントは未分類にしておくことができます (たとえば、LAS 形式の LIDAR をクラス 1 とするなど)。

トレーニングに使用するデータ量については、ルールは特に決められていません。 一般的に、提供するサンプルが多いほど良いとされています。 当然、現実的な限界はありますし、努力が報われないこともあります。

トレーニング データの準備

トレーニングを行うには、分類したいデータを適切に表す点群が必要です。 トレーニング データと同じプロジェクトの一部として、同じハードウェア仕様と同じ収集環境から、分類したいデータを収集することが理想です。 そうすることで、成功の確率を高めることができます。 他のデータを使用することもできますが、トレーニング データと特徴を揃えておくことをお勧めします。 名目ポイント間隔および密度は重要な要素です。 位置正確度も重要です。 モデル予測の精度を高めるために、LIDAR リターン番号や強度などのポイント属性をトレーニングに含める場合は、これらの属性が分類の対象となるデータに存在することを確認します。

トレーニング データは、手動でも自動でも分類できます。 対話形式の LAS クラス コード編集ツールと、一連のルールベースの分類指標があります。 場合によっては、これらを組み合わせると便利です。 たとえば、[LAS の地表分類 (Classify LAS Ground)] ジオプロセシング ツールと [LAS の建物分類 (Classify LAS Building)] ジオプロセシング ツールを使用し、基本的な分類を確立します。 次に、代表的なサブエリアまたはタイル (タイル化された LAS を使用する場合) を、トレーニング サイトとしてデータセットから選択します。 これらのエリアを手動でクリーンアップし、必要であれば他のクラスを追加します。 編集し、改良したこれらのサブエリアを、トレーニング データとして使用します。

整合チェック データも必要です。 整合チェック データは、トレーニング時にモデルをバイアスなく評価するために使用され、過剰適合を特定し、回避するうえで有益です。過剰適合とは、モデルがトレーニング データでは正常に動作するものの、他のデータでは動作しない状態を指します。 整合チェック データは、代表的な対象エリアを網羅する点と、同じ分類スキーマを使用する点はトレーニング データと似ていますが、取得される場所が異なります。 トレーニングと同じプロジェクト データを使用できますが、サブセットは異なります。 一般的に、整合チェックよりもトレーニングの方が多くのデータが必要です。 決まったルールはありませんが、トレーニング データを整合チェック データの数倍使用することは珍しくありません。

トレーニング データと整合チェック データを定義すると、トレーニングの評価ポイントとして使用する適切なサンプリング近傍やブロック サイズを特定する必要があります。

ブロック サイズ

ブロック サイズのトレーニング データと整合チェック データは、管理しやすい小さいブロックに分割されます。 これらのポイントのブロックを、ディープ ラーニング ライブラリでアクセスできる形式に配置します。 適切なブロック サイズを決定します。 ブロック サイズの目標は、利用可能な GPU メモリに対して適切な数のポイントを含めることです。 トレーニングでは、[バッチ サイズ] と呼ばれるトレーニング パラメーターで設定されたブロック数に準じて、ポイントと 2 次的なデータ構造が読み込まれます。 ここで、複数の変数の相互作用に注意する必要があります。 バッチは、一度に処理するブロック数を制御します。 ブロックとは、一連のポイントとその属性を指します。 ブロックに含まれるポイント数は、ブロックのサイズと、ブロックの場所のポイント密度によって決定します。 点群の密度が一定であれば、ブロックには比較的一貫した数のポイントが含まれます。 ポイント密度に大きな差異があるデータセットを使用することもできますが、うまく機能させるにはより多くのトレーニングが必要となります。

ブロック内のポイント数の推定値は平均的には正しくなるかもしれませんが、必ず分散があるので、ブロックのポイント数に上限を設定する必要があります。 そのためには、ブロック ポイント制限パラメーターを使用します。 ブロックに含まれるポイント数がこの値を超過すると、すべてのデータを確実に使用するために、同じ位置に対して複数のブロックが作成されます。

たとえば、平均でおよそ 8,000 個のポイントを含むようサイズ設定されたブロックを使用します。

ブロック サイズ (ブロックのサイドの長さ) を予測するには、データの名目ポイント間隔と、1 つのブロックに必要なポイント数を把握しておく必要があります。

block_size = square_root(target_point_count) * 2d_point_spacing

ブロック サイズを評価する場合は、対象のオブジェクトやフィーチャのサイズも考慮する必要があります。 たとえば、フィーチャが上記で予測したブロック サイズよりも大幅に小さい場合は、フィーチャに合わせてブロック サイズを小さくすることもできます。

8 GB の専用 RAM を持つ GPU では、デフォルトのバッチ サイズ (2) を使用して、一度に 2 ブロック相当のポイントを GPU に読み込みます。 GPU のメモリ使用状況を監視します。 トレーニング中に多くの使用可能な GPU メモリが残っている場合は、バッチ サイズを大きくして、一度に処理できるブロック数を増やすことができます。

トレーニング

トレーニングでは、トレーニング データと整合チェック データを使用して CNN (畳み込みニューラル ネットワーク) を作成します。 それによって生成されるモデルは、「推論」と呼ばれる処理を通じて、LAS 形式の点群を分類します。 PointCNN は、ArcGIS のトレーニングと推論で使用されるオープン ソースのディープ ラーニング フレームワークです。 独自のデータでモデルを使用することも、他のユーザーのデータで使用できるよう共有することもできます。 トレーニング処理は大量のリソースを使用するため、時間がかかることがあります。 幸いなことに、結果はコンパクトにまとめられます。 モデル自体のサイズは、通常、15 ~ 20 MB です。

出力モデルは複数ファイルで構成され、出力フォルダーに格納されます。 これには、パラメーター設定を含む JSON ファイルである Esri モデル定義 (*.emd) ファイル、*.pth データ ファイル、トレーニング結果の評価時に確認する追加ファイルが含まれます。 ディープ ラーニング パッケージ (*.dlpk) もフォルダーに出力されます。 共有と公開を行えるよう、すべての関連ファイルが 1 つのフォルダーにパッケージ化されています。

デフォルトでは、モデルをゼロからトレーニングしますが、処理の中でトレーニング済みのモデルを含めることができます。 その場合は、既存のモデルに改良を加えて、新しいモデルを生成します。 トレーニングを追加で実施することでサンプル数が増えるため、ポイントの正しい分類を予測するモデルの機能が向上します。

トレーニング ツールの、[ブロックごとの最小ポイント数] 設定は、ポイントが十分に含まれていないトレーニング ブロックをスキップするために使用されます。 多くの場合、プロジェクト周長のブロックにはあまりポイントがありません。 さらに、トレーニング データを作成するときに、1 つ以上のブロックでブロック制限値に達することがあります。 それ以降のブロックはオーバーフロー ポイントを保持するために作成されます。 いずれにせよ、ポイント数が比較的少ないブロックはあまり有用性がないため、トレーニング処理に含めないことをお勧めします。

クラスの管理

[点群分類モデルのトレーニングを実行 (Train Point Cloud Classification Model)] ジオプロセシング ツールの [クラスの管理] カテゴリには、クラスの再マッピング、対象クラス、クラスの命名に関するパラメーターが含まれています。

クラスの再マッピングは、出力モデルで異なるクラス コードや、入力トレーニング データに関連する意味を使用する必要がある場合に便利です。 また、クラスのマージにも便利です。 たとえば、3 つの植生クラスを 1 つにまとめる場合などです。

対象のクラス コードがトレーニングの焦点となります。 デフォルトでは、入力トレーニング データのすべてのクラスを使用してモデルを作成します。 関心があるフィーチャのクラスまたはタイプが 1 つだけである場合、複数のクラスがあるとトレーニングが無用に複雑になることがあります。 たとえば、送電線の導線を分類するモデルを作成するだけであれば、それだけを対象コードに設定できます (LAS 標準に準じてクラス 14 など)。 その場合は、バックグラウンド クラス コードを指定するように求められます。 それがすべてのコードになります。 したがって、トレーニング データに含まれるクラスが多くても、トレーニング済みのモデルは 2 つのクラス (対象クラスとバックグラウンド) を分類する方法だけを把握していることになります。

トレーニング パラメーター

[点群分類モデルのトレーニングを実行 (Train Point Cloud Classification Model)] ジオプロセシングの [トレーニング パラメーター] カテゴリには、関連するデータやクラスではなく、トレーニング処理自体に固有のパラメーターが含まれます。

トレーニングは反復的なプロセスです。 条件が満たされるまで、データのパスが繰り返し行われます。 その条件の 1 つに、[エポックの最大数] があります。 エポックとは、トレーニング データの 1 回のパスを表します。 エポック内で、データはバッチで処理されます。 バッチとは、1 つ以上のブロックのコレクションのことです。 エポックあたりの反復とは、エポック内で処理されるバッチの割合のことです。 したがって、100 パーセント未満を指定すると、バッチのサブセットが処理されます。 バッチ サイズとは、バッチ内のブロック数を指します。 バッチ内のブロックは並行処理されます。 お使いの GPU の専用 RAM が十分であれば、大きいバッチ サイズを使用してトレーニングを実施できます。これにより、トレーニングにかかる全体的な時間を短縮できます。

学習率

学習率とは、損失を最小限に抑える目標の達成に向けてモデルの重みを更新するたびにモデルをどれだけ調整するかを制御する調整パラメーターです。 新しい情報が古い情報をどの程度上書きするかを左右することから、モデルの学習速度を表します。

学習率を決定するには、トレードオフが発生します。 つまり、値が小さすぎるとトレーニング時間が長くなり、モデルが行き詰まる可能性もあります。 一方で値が大きすぎると、最適ではない重みを学習することになり、学習処理も不安定になります。

学習率の初期値を見出すことは容易ではありません。 [点群分類モデルのトレーニングを実行 (Train Point Cloud Classification Model)] ツールで、値を推定できます。 モデルの初回トレーニング時には、空白にしておくことをお勧めします (デフォルト設定)。 ツールが学習率を推定します。 [点群分類モデルのトレーニングを実行 (Train Point Cloud Classification Model)] ツールのメッセージに学習率が記されます。 また、model_metrics.html という名前のファイルでも学習率が示され、トレーニング処理が完了したときに出力モデル フォルダーに書き込まれます。 [点群分類モデルのトレーニングを実行 (Train Point Cloud Classification Model)] ツールで生成した結果の詳細については、「点群トレーニング結果の評価」をご参照ください。

関連トピック