皆さんの 3D アセットのライブラリを利用して、合成データを強化することができます。コンピュータービジョンでよく直面する問題を解決するために、3D コンテンツの収集源や、コンテンツを取得するためのテクニックについてご紹介します。
合成データを利用したコンピュータービジョンシステムの構築は、実データを使ったそれまでのやり方を大きく変えるものです。実世界のデータは手間をかけて収集し、アノテーションを行う必要がありますが、合成データセットは機械学習(ML)エンジニア 1 人が数分で構築できるため、これを使ってデータを中心とした迅速な開発サイクルを実現することができます。高速に開発を行えるので、一度に多くのデータセットのバリエーションを試して、モデルを改善するデータセットを見つけるというやり方も可能です。
しかし、元となるデータをどこから持ってくるかという問題がまだ難しい問題として残っています。何千枚もの画像やアノテーションを用意する必要がない代わりに、メッシュやテクスチャ、アニメーションといった 3D アセットを数十から数百個用意する必要があります。合成データを使うことで必要なコンテンツの量を減らすことができますが、3D という特性上、アセットの収集には工夫が必要です。
幸いなことに、映画業界とゲーム業界には、40 年以上前から同じようなコンテンツの課題に直面してきたことによる蓄積があります。その間に、彼らはコンテンツ制作のための新しい技術を開発するとともに、膨大な量のコンテンツを蓄積してきました。そして、その多くはすでに合成データに使う上で完璧なものになっています。
この記事では、3D コンテンツを調達するための最適な方法をいくつか紹介します。それぞれ、異なるタイプのコンピュータービジョンアプリケーションに適した方法となっています。
3D コンテンツを手に入れるための最も早く、安価な方法は、オンラインで配布されている既存の成果物を利用することです。Unity アセットストアのようなオンラインマーケットプレイスでは、ゲーム、映画、その他の 3D アプリケーションで使用するために 3D アーティストが作成した無料および有料のコンテンツが豊富に提供されています。
アセットは、様々な 3D モデル、テクスチャのバリエーション、マテリアル、アニメーションなどをひとまとめにした「パック」になっていることが多いです。こうした要素はすべてデータセット生成時にランダム化できるところで、そうすることで生成されるオブジェクトにほぼ無限のバリエーションを持たせることができます。さまざまなアーティストの作品を活用させてもらうことでデータの幅がさらに広がり、モデルの偏りや過剰適合を減らすことができます。
オンラインのアセットは、タスクが「椅子」や「猫」のようなオブジェクトの中の幅広いクラスを検出する必要があるもので、そのために多種多様なコンテンツが求められる場合には、素晴らしいデータソースとなります。モデルの汎用性を高めるためには、形状、素材、色、ポーズなど、あらゆる軸でバリエーションを持たせる必要があります。
漫画のような奇妙なテクスチャや色を使った非現実的なアセットも、モデルの汎用性を高める上で役立ちます。最近のあるプロジェクトでは、非常にリアルな少数のアセットだけを使っていたところから、Unity アセットストアで提供されているさまざまな 3D モデルとテクスチャを使うようにしたところ、モデルのパフォーマンスが大幅に向上したことがありました。その向上幅は、私たちが試したどの実験よりも大きなものでした。
特定の物体や製造物を検出するための合成データセットには、実世界の物体の正確な 3D モデルが必要ですが、こうしたモデルがオンラインで見つかることはほとんどありません。3D スキャンを使えば、これらのアセットを自分で作ることができます。
SynthDet のアセットはフラットベッドスキャナーと 3D モデリングを使って作られました。こちらのサイトでチュートリアルをご覧ください。
3D スキャンには様々な技術があり、対象物の種類や品質レベル、予算などに応じて使い分けられています。代表的な例を挙げてみましょう。
長所:対象物の大きさや形状を問わず、テクスチャや細かいディテールを捉えることができる。
短所:ライティング条件や物体の色に敏感で、やや作業が煩雑になる。
長所:安価で高精度なテクスチャが得られる。
短所:平たい形にできる対象物にしか使えない。いくらか手作業が必要。
長所:ほとんどの対象物の高精度なジオメトリを得られる。高速である。
短所:高価であること。対象物のサイズに制限があること。
スキャンされたオブジェクトやオンラインの 3D アセットは、たいていがある猫や椅子、木目など、実在するオブジェクトのスナップショットです。こうしたアセットとは別に、プロシージャルアセットと呼ばれるコンテンツが広がりを見せています。これは、ルールに基づいたアルゴリズムを使用して無限のバリエーションを持たせることのできるコンテンツです。プロシージャルアセットには、外観や形状をカスタマイズするためのパラメーターが用意されています。このため合成データを作る上で非常に便利なものとなっています。各パラメーターをランダム化することで、多様性に富んだアセットを生成することができます。そして、ランダム化に繰り返し調整を施し、モデルのパフォーマンスを向上させることができます。
プロシージャルアセットは、実世界から収集したアセットに一定の多様性はあるが、しかし全体として共通のパターンに従ってしまっているという場合に有効に使えます。道路や人の顔、布やコンクリートなどの素材などがその代表例です。傷み具合、経年変化、形状、色などの関連するパラメーターをランダム化アルゴリズムのパラメーターとして組み込むことができます。Unity のシェーダーグラフ、Adobe Substance 3D、Houdini はプロシージャルアセットを構築するための柔軟なツールであり、Unity アセットストアでは特定のタイプのコンテンツ向けにいくつかのプロシージャルツールを提供しています。
プロシージャル技術は、合成データのための環境生成にも威力を発揮します。環境ジェネレーターには、構造化されていないランダム性の高いものから、複雑で階層的なシーンを生成するシステムまで様々なものがあります。Unity の APIは、プロシージャルなシーンジェネレーターを書けるように設計されていますが、より構造を持たせたシーンを作りたい時には Houdini がよく使われます。
より多くの例が見たい方や、プロシージャルコンテンツに関する学習を始めたい方は、Unity Learn の「Getting Started with Houdini & Unity」と「シェーダーグラフの紹介」をチェックしてください。
ゲーム産業や映画産業にはダイナミックな 3D コンテンツが数多く存在しています。これを使って、合成データプロジェクトを素早く立ち上げ、データを使ってモデルの反復調整を始めることができます。Unity Perception パッケージを使えば、こうしたアセットを取り込み、ランダム化のための設定を行い、多様性の高いデータセットを非常に素早く生成することができます。
Unity Computer Vision チームは、合成データを構築する際に、ここまで紹介したコンテンツに関する戦略をすべて使用しています。特定のニーズに合わせて合成データセットを作成する方法や、合成データの活用に関するより詳しいガイダンスをご希望の方は、ぜひお問い合わせください。