自律運転アプリケーションのための基本的なビジョンモデルと視覚的なプロンプトエンジニアリング
「自律運転アプリケーションのための基本的なビジョンモデルと魅力的なプロンプトエンジニアリング」 (Jiritsu unten apurikēshon no tame no kihonteki na bijon moderu to miryokuteki na puronputo enjiniaringu)
プロンプトエンジニアリングは、大規模な言語モデル(LLM)を使用して高品質で関連性のあるテキストを生成するために、誰もが持つ必要なスキルになりました。テキストプロンプトエンジニアリングは広く議論されてきましたが、視覚的なプロンプトエンジニアリングは注目を集める途上の分野であり、注意を要します。視覚的なプロンプトは、バウンディングボックスやマスクなどを含めることができ、ビジョンモデルが関連性のある正確な出力を生成するためのガイドとなります。この記事では、視覚的なプロンプトエンジニアリングの基礎、その利点、および特定のユースケースである自動運転のための画像セグメンテーションの解決策としての利用方法について探っています。
近年、コンピュータビジョンの分野では画像セグメンテーションの領域で重要な進展が見られています。その中でも、Meta AIによる「Segment Anything Model (SAM)」はゼロショットまたはフューショットトレーニングによるオブジェクトレベルのセグメンテーションに革新的な可能性を秘めています。この記事では、SAMモデルを例に挙げ、多様な自律運転データセットである「BDD100Kデータセット」への適用を探ります。BDD100Kが提供する豊富なデータとSAMの強みを組み合わせることで、異なるバージョンのSAMを使用した視覚的なプロンプトエンジニアリングの可能性を示します。言語モデルのための「LangChain」フレームワークに着想を得て、物体検出モデルとSAMを組み合わせて視覚的なプロンプトを実行するためのビジュアルチェーンを提案します。
この記事は自動運転に焦点を当てていますが、議論されている概念は、医療・ライフサイエンス、メディア・エンターテイメントなど、ビジョンを活用したアプリケーションが豊富な領域に広く適用可能です。まず、SAMのような基礎的なビジョンモデルの内部の仕組みについて少し詳しく学びましょう。この記事では、ml.g5.16xlargeインスタンス上のAmazon SageMaker Studioを使用しました。
Segment Anything Model(SAM)
基盤モデルは、膨大なデータに対してトレーニングされており、タスク固有の使用例に対してプロンプトやファインチューニングが可能な大規模な機械学習(ML)モデルです。ここでは、「Segment Anything Model(SAM)」を探求し、これはビジョン、具体的には画像セグメンテーションのための基礎モデルです。SAMは、1,100万枚の画像と11億のマスクからなる巨大なデータセットで事前トレーニングされており、執筆時点で最大のセグメンテーションデータセットとなっています。この広範なデータセットは、様々なオブジェクトとカテゴリをカバーしており、SAMに多様かつ大規模なトレーニングデータソースを提供しています。
- Amazon SageMaker JumpStartを通じてLlama 2 Chat LLMを使用するための最適なプロンプトの実施方法
- Amazon SageMakerの自動モデルチューニングを使用して、事前に選択されたアルゴリズムを使用してカスタムのAutoMLジョブを実装します
- 主要な金融グループは、AWSのポストコール分析ソリューションを使用して、オムニチャネルの顧客洞察を抽出しています
SAMモデルは、オブジェクトを理解し、画像やビデオフレーム内の任意のオブジェクトに対するセグメンテーションマスクを出力するようにトレーニングされています。このモデルは視覚的なプロンプトエンジニアリングを可能にし、元の画像を変更せずにテキスト、ポイント、バウンディングボックス、またはマスクなどの入力を提供することでラベルを生成することができます。SAMは3つのサイズで提供されており、基本(ViT-B、9100万パラメータ)、大規模(ViT-L、3億800万パラメータ)、および巨大(ViT-H、6億3600万パラメータ)の違う計算要件と使用例に対応しています。
SAMの主な目的は、少ないトレーニングサンプルとエポックで興味のあるオブジェクトのオブジェクトレベルのセグメンテーションを改善することです。SAMの強力さは、事前知識なしで新しい画像分布とタスクに適応できるゼロショットトランスファーの機能にあります。この適応性は、SA-1Bデータセットのトレーニングによって実現されており、同データセットは多くの従来の完全な教師あり結果を上回る印象的なゼロショットパフォーマンスを示しています。
SAMの以下のアーキテクチャに示すように、セグメンテーションマスクの生成プロセスは以下の3つのステップで行われます:
- 画像エンコーダーが画像のための埋め込みを生成します。
- プロンプトエンコーダーは、プロンプトを埋め込みベクトルに変換します。
- 軽量デコーダーは、画像エンコーダーとプロンプトエンコーダーからの情報を組み合わせてセグメンテーションマスクを予測します。
例えば、画像と興味のあるオブジェクトの周りのバウンディングボックス(例:シルバーカーやドライビングレーンなど)を入力すると、SAMモデルはそのオブジェクトのセグメンテーションマスクを生成します。
視覚的なプロンプトエンジニアリング
プロンプトエンジニアリングとは、モデルが意図を理解し、望ましい結果を生成するために入力を構造化することを指します。テキストのプロンプトエンジニアリングでは、単語の選択、書式、順序などの変更を通じて入力テキストを構造化し、望ましい出力を得ることができます。ビジュアルのプロンプトエンジニアリングでは、ユーザーがビジュアルモダリティ(画像またはビデオ)で作業していると想定し、入力を提供します。以下は、ビジュアルドメインの生成AIモデルへの入力方法の一部です。
- ポイント-画像平面の単一の(x、y)座標ポイント
- ポイント-互いに関連していない複数の(x、y)座標ポイント
- 境界ボックス-画像平面内の矩形領域を定義する4つの値(x、y、w、h)のセット
- 輪郭-画像平面内の閉じた形状を形成する(x、y)座標ポイントのセット
- マスク-オブジェクトの部分的なマスクを持つ画像と同じサイズの配列
ビジュアルのプロンプトエンジニアリングのテクニックを考えながら、事前学習済みのSAMモデルに適用できる方法を探ってみましょう。我々は事前学習済みモデルのベースバージョンを使用しています。
事前学習済みSAMモデルを用いたゼロショットプロンプティング
まず、ゼロショットアプローチを試してみましょう。以下は、車のフロントカメラから取得したトレーニングデータセットのサンプル画像です。
入力画像だけで、明示的なビジュアルプロンプティングなしで、写真内のすべてのオブジェクトのセグメンテーションマスクを取得することができます。次の画像では、車、道路、交通標識、ナンバープレート、立体交差点、柱、看板などの一部がセグメンテーションされていることがわかります。
しかし、この出力は次の理由から直接利用できません:
- 車はまとまってセグメンテーションされていませんが、部分的に分割されています。たとえば、ほとんどの認識モデルでは、タイヤごとに個別の出力マスクが必要ではありません。同様に、道路、植生、看板などの他の既知の興味のあるオブジェクトを探している場合も同様です。
- 下流のタスクにとって有用な画像の部分が分割され、説明がありません。一方、似たようなインスタンスが別々に識別され、似たようなオブジェクトをグループ化することに興味があるかもしれません(パノプティック対インスタンスセグメンテーション)。
事前学習済みSAMモデルを用いたビジュアルプロンプトエンジニアリング
幸い、SAMは入力プロンプトの提供をサポートしており、ポイント、ポイント配列、および境界ボックスを入力として使用することができます。これらの特定の指示により、特定のポイントやエリアに焦点を当てたセグメンテーションにおいて、SAMがより良い結果を出すことが期待できます。これは、言語プロンプトテンプレート “会社が{product}を作るのに良い名前は何ですか?
” のようなもので、ユーザーからの入力スロットが{product}
です。ビジュアルプロンプティングでは、境界ボックス、ポイント、またはマスクが入力スロットとなります。
次の画像は、元の正解バウンディングボックス(緑のバウンディングボックス内の自動車)とBDD100K正解データから取得した走行可能エリアパッチを示しています。画像には、次の数節で参照する黄色のXの入力ポイントも表示されています。
左側の緑のバウンディングボックスをSAMに入力として使用して、車のためのマスクを生成してみましょう。以下の例に示すように、SAMのベースモデルは実際には何も見つけません。これは、セグメンテーションスコアが低いことでもわかります。セグメンテーションマスクをより詳しく見ると、実際には下流のアプリケーションで使用できない小さな領域がマスクとして返されていることがわかります(赤い矢印で示されています)。
バウンディングボックスとポイントの組み合わせを入力ビジュアルプロンプトとして試してみましょう。前の画像の黄色い十字はバウンディングボックスの中央です。この点の(x、y)座標をプロンプトとして、バウンディングボックスの制約と一緒に提供すると、次のマスクとわずかに高いスコアが得られます。これはまだどのような方法でも使えるものではありません。
最後に、事前学習済みのベースモデルを使用して、バウンディングボックスなしで入力ポイントだけをプロンプトとして提供することができます。次の画像は、興味深いと思われる上位3つのマスクのうち2つを示しています。
マスク1は車全体をセグメント化し、マスク3は黄色い十字(入力プロンプト)に近い車のナンバープレートのある領域をセグメント化します。マスク1はまだ車の周りにタイトでクリーンなマスクではありません。これはモデルの品質を示しており、モデルサイズが大きくなると想定されます。
同じ入力プロンプトで大きな事前学習済みモデルを試すこともできます。次の画像は、結果を示しています。巨大なSAM事前学習済みモデルを使用すると、マスク3は車全体になり、マスク1と2はナンバープレートを抽出するために使用できます。
SAMモデルの大型バージョンも同様の出力を提供します。
ここで行ったプロセスは、おそらく既にお馴染みのテキストプロンプトのための手動のプロンプトエンジニアリングに似ています。最近のSAMモデルの改良により、高品質でオブジェクトおよびコンテキストに特化した出力が提供されるようになりました。私たちの場合、テキストとビジュアルのプロンプト(ポイント、ボックス、ポイントおよびボックスの入力)を使ったゼロショットのプロンプティングは、上記で見たように結果を劇的に改善しません。
プロンプトテンプレートとビジュアルチェーン
前述のゼロショットの例からわかるように、SAMはシーンのすべてのオブジェクトを正確に識別するのに苦労しています。これはプロンプトテンプレートとビジュアルチェーンを活用できる良い例です。ビジュアルチェーンは、言語アプリケーションの人気のあるLangChainフレームワークでのチェーンコンセプトに触発されたものです。それはデータソースとLLMをチェーン化して出力を生成するのに役立ちます。例えば、APIチェーンを使用してAPIを呼び出し、APIの応答に基づいてLLMに質問に回答させることができます。
LangChainに触発されて、以下の図のような連続したビジュアルチェーンを提案します。事前学習済みのオブジェクト検出モデルのようなツールを使用して初期のバウンディングボックスを取得し、バウンディングボックスの中心にあるポイントを計算し、これを入力画像のプロンプトとしてSAMモデルに使用します。
たとえば、次の画像は、このチェーンを実行した結果としてのセグメンテーションマスクを示しています。
別の例では、ユーザーが識別しようとするオブジェクトのテキスト入力を含めることもできます。これを実現するために、Grounding DINO(オブジェクト検出モデル)を使用してSAMにセグメンテーションをプロンプトするパイプラインを構築しました。
グラウンディングDINOは、テキストを提供することでカテゴリ名(「信号機」や「トラック」など)や表現(「黄色いトラック」といったもの)を使用してオブジェクト検出を行うことができるゼロショットのオブジェクト検出モデルです。テキストと画像のペアを受け取ってオブジェクト検出を行います。トランスフォーマーアーキテクチャに基づいており、テキストと画像データのクロスモダリティを可能にします。グラウンディングDINOについて詳しくは、Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detectionを参照してください。これにより、バウンディングボックスとラベルが生成され、さらに処理を行って中心点を生成したり、ラベルや閾値などに基づいてフィルタリングしたりすることが可能です。これは、セグメンテーションのためのプロンプトとしてSAMに使用され、マスクが出力されます。
以下は、入力テキスト、DINOの出力(バウンディングボックス)、および最終的なSAMの出力(セグメンテーションマスク)を示すいくつかの例です。
以下の画像は「黄色いトラック」の出力を示しています。
以下の画像は「シルバーカー」の出力を示しています。
以下の画像は「車線」の出力を示しています。
このパイプラインを使用してビジュアルチェーンを構築することができます。次のコードスニペットはこの概念を説明しています:
pipeline = [object_predictor, segment_predictor]image_chain = ImageChain.from_visual_pipeline(pipeline, image_store, verbose=True)image_chain.run('All silver cars', image_id='5X3349')
これは単純な例ですが、このコンセプトはカメラからの映像を処理してオブジェクトトラッキング、個人情報のデータマスキングなどを行うために車両に組み込まれることがあります。小さなモデルからバウンディングボックスを取得したり、場合によっては標準のコンピュータビジョンツールを使用したりすることもできます。事前学習済みモデルやAmazon Rekognitionなどのサービスを使用して、プロンプトに対して最初の(視覚的な)ラベルを取得することも比較的簡単です。この記事の執筆時点では、Amazon SageMaker Jumpstartではオブジェクト検出に70以上のモデルが利用可能であり、Amazon Rekognitionは既に画像中の車両、歩行者など、いくつかの有用なカテゴリのオブジェクトを識別しています。
次に、BDD100Kデータの一部を使用したSAMモデルのパフォーマンスに関連するいくつかの定量的な結果を見てみましょう。
定量的な結果
私たちの目的は、同じ視覚プロンプトを与えられたときに、3つの事前学習モデルのパフォーマンスを比較することです。この場合、オブジェクトの場所の中心点を視覚的な入力として使用します。オブジェクトのサイズに関して(画像サイズに対する比例で)以下のようにパフォーマンスを比較します:小さい(領域<0.11%)、VoAGI(0.11%<領域<1%)、大きい(領域>1%)。バウンディングボックスの領域の閾値は、Common Objects in Context(COCO)の評価メトリクス [Lin et al., 2014]によって定義されています。
評価はピクセルレベルで行われ、次の評価メトリクスを使用します:
- 適合率 = (関連のある検出されたインスタンスの数)/(検出されたインスタンスの総数)
- 再現率 = (関連のある検出されたインスタンスの数)/(関連のあるインスタンスの総数)
- ここでのインスタンスは、対象物のバウンディングボックス内の各ピクセルを指します
以下の表は、SAMモデルの3つの異なるバージョン(base、large、huge)のパフォーマンスを報告しています。これらのバージョンには、ViT-B(base)、ViT-L(large)、ViT-H(huge)の3つの異なるエンコーダがあります。エンコーダには異なるパラメータ数があり、基本モデルはlargeよりも少なく、largeはhugeよりも少ないパラメータを持っています。パラメータの数を増やすと、大きなオブジェクトでは性能が向上しますが、小さなオブジェクトではそうではありません。
ユースケースに合わせたSAMの微調整
多くの場合、事前に学習されたSAMモデルを直接使用することはあまり有益ではありません。例えば、交通の典型的なシーンを見てみましょう。左側はランダムにサンプリングされたプロンプトポイントを入力として、SAMモデルからの出力であり、右側はBDD100Kのセマンティックセグメンテーションタスクの実際のラベルです。これらは明らかに非常に異なっています。
自動運転車の知覚スタックは、2番目の画像を簡単に使用できますが、最初の画像は使用できません。一方、最初の画像からも使用できる便利な出力があります。これらは、モデルが明示的にトレーニングされていないものです。例えば、車線マーキング、歩道のセグメンテーション、ナンバープレートのマスクなどです。セグメンテーションの結果を改善するために、SAMモデルの微調整を行うことができます。この微調整を行うために、BDD10Kデータセットからインスタンスセグメンテーションのサブセット(500枚の画像)を使用したトレーニングデータセットを作成しました。これは非常に小さなサブセットの画像ですが、私たちの目的は、基礎となるビジョンモデル(LLMsと同様)が、驚くほど少ない数の画像でユースケースに適したパフォーマンスを発揮できることを証明することです。次の画像は、入力画像、出力マスク(青色で、左側の車には赤色の境界線がある)、および可能なプロンプト(緑色の境界ボックスと黄色の中心点X)を示しています。
私たちはHugging Faceライブラリを使用して、Amazon SageMaker Studioでmicro-optimizationを行いました。SAM baseモデルのテストにはml.g4dn.xlargeインスタンスを使用し、SAM hugeモデルのテストにはml.g4dn.2xlargeを使用しました。初期の実験では、バウンディングボックスのみを使用して基本モデルを微調整することは成功しませんでした。微調整された事前学習モデルは、元のデータセットから車に特化した正解マスクを学習できませんでした。クエリポイントを微調整に追加しても、トレーニングの改善は見られませんでした。
次に、非常に小さなデータセット(500枚の画像)でSAM hugeモデルを30エポック微調整してみましょう。元の正解マスクは、ラベルタイプ「car」に対して次のようになります。
以下の画像に示すように、特定のバウンディングボックスプロンプト(緑色)を持つ元の事前学習済みhugeモデルは出力を生成せず、一方、微調整されたモデルは出力を生成します(まだ正確ではありませんが、微調整は40エポックで中断され、非常に小さなトレーニングデータセット(500枚の画像)を使用しています)。元の事前学習済みhugeモデルでは、テストしたいかなる画像に対してもマスクを予測することができませんでした。微調整されたモデルは、例えばAWS上のAuto-labeling module for deep learning-based Advanced Driver Assistance Systems on AWSで説明されているようなプリラベリングワークフローで使用することができます。
結論
この記事では、セグメント化モデル(SAM)とそのアーキテクチャについて説明しました。SAMモデルを使用して、視覚的なプロンプトと視覚的なプロンプトエンジニアリングへのさまざまな入力について議論しました。さまざまな視覚的プロンプトのパフォーマンスとその制約についても探求しました。また、LangChain APIと同様に、視覚的なチェーンが単一のプロンプトを使用するよりもパフォーマンスを向上させる方法について説明しました。その次に、3つの事前学習済みモデルの定量評価を行いました。最後に、元の基本モデルと比較して、ファインチューニングされたSAMモデルとその結果について説明しました。基本モデルのファインチューニングは、セグメンテーションなど特定のタスクのモデルパフォーマンスの向上に役立ちます。ただし、現在の状態では、リソース要件のために、SAMモデルの実時間使用やエッジでの推論には制限があります。今後の改善や改良を通じて、コンピュート要件の削減とレイテンシの向上が期待されます。
この記事が、ご使用のユースケースに視覚的なプロンプトを探求するきっかけとなることを願っています。まだ新興のプロンプトエンジニアリング形式であるため、視覚的プロンプト、視覚的チェーン、およびこれらのツールのパフォーマンスについての発見が多くあります。 Amazon SageMakerは、大規模な言語モデルや視覚モデルを探索し、生成的AIアプリケーションを構築することができる、完全に管理されたMLプラットフォームです。AWSで未来を構築しましょう。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- 「リトリーバル増強生成」とは何ですか?
- 未来を点火する:TensorRT-LLMのリリースにより、AI推論のパフォーマンスが向上し、RTXを搭載したWindows 11 PCで新しいモデルのサポートが追加されました
- 「速さの中で:NVIDIAがオムニバースクラウドサービスをMicrosoft Azure上で発表し、自動車のデジタル化を加速する」
- 「言語モデルは単語以上に推論できるのか?複雑なタスクのための多層隠れ状態における暗黙の推論の探求」
- 「ストリーミングLLMの紹介 無限長の入力に対するLLM」
- 自分自身のGPTをChatGPTのGPTで作成しましょう!
- 3Dボディモデルに音声が付きました:Meta AIが完全な人体に対して正確な3D空間音響を生成できる人工知能モデルを紹介