Gemini 2.0 + Vertex AIでファインチューニングしてみた (画像分類タスク)

はじめに

2025年2月、GoogleからGemini 2.0がリリースされました。Geminiシリーズはテキスト・コード・画像・音声などマルチモーダルに対応したLLMであり、特にGemini 2.0では画像認識タスクにおいて精度や処理能力が向上しています。

本記事では、Gemini 2.0(gemini-2.0-flash-001)を使い、Vertex AI上で画像分類タスクのファインチューニングを紹介します。

タスク内容

今回の対象タスクは「航空機型式の2値分類(ボーイング787-8型 vs ボーイング787-10型)」です。
ボーイング787とは米・ボーイング社が開発・製造している最新型ジェット旅客機です。同じボーイング787シリーズの中で-8型と-10型を判別するという比較的難易度が高い画像識別となります。
1枚目の画像がボーイング787-8型、2枚目の画像がボーイング787-10型です。全長が-10型のほうが長い点が両型式を区別するポイントです。


ボーイング787-8型(注1)


ボーイング787-10型(注2)


以下のプロンプトを使い、与えられた画像に写っている航空機の型式が「ボーイング787-8」型か「ボーイング787-10」型かを分類させます。

# タスク
画像に写っている航空機の型式が「ボーイング787-8」型であるか「ボーイング787-10」型であるか回答してください。

# 出力形式
{
    "answer": "「ボーイング787-8」なら「0」、「ボーイング787-10」なら「1」を返却"
}

# 航空機の画像
 <航空機の画像>

モデルの素の性能を評価するため、またチューニングによる効果を最大限に享受するため、プロンプトは極力シンプルに設計しました。

ベースモデルの精度

まずは比較対象となるチューニング未実施のGemini 2.0の性能を検証します。

使用モデル:gemini-2.0-flash-001

テストデータとして各クラスの画像を15枚ずつ計30枚用意し、評価指標としてF1-scoreを採用しました。
結果は以下のとおりです。

  1. 混合行列
実際の型式\予測された型式 B787-10 B787-8
B787-10 1 14
B787-8 0 15
  1. F1-score:0.125

B787-10の判定がほぼできていない状態です。これはベースモデルが見たことのない画像分布に弱いことを示唆しています。 「ボーイング787-8型?ボーイング787-10型?そんなの知らないです!」とGemini 2.0は言っているわけですね。

データセットの作成

つぎに、チューニング時に必要となる学習・検証データセットを作成します。

{"contents":[{"role":"user","parts":[{"text":"\\n# タスク\\n画像に写っている航空機の型式が「ボーイング787-8」型であるか「ボーイング787-10」型であるか回答してください。\\n\\n# 出力形式\\n {\\n  \\"answer\\": \\"「ボーイング787-8」なら「0」、「ボーイング787-10」なら「1」を返却\\",\\n }\\n\\n# 航空機の画像\\n"},{"fileData":{"mimeType":"image/jpeg","fileUri":"gs://llm-image-fine-tuning/blog/train/788/images1.jpg"}}]},{"role":"model","parts":[{"text":"{\\n  \\"answer\\": \\"0\\",\\n}"}]}]}
{"contents":[{"role":"user","parts":[{"text":"\\n# タスク\\n画像に写っている航空機の型式が「ボーイング787-8」型であるか「ボーイング787-10」型であるか回答してください。\\n\\n# 出力形式\\n {\\n  \\"answer\\": \\"「ボーイング787-8」なら「0」、「ボーイング787-10」なら「1」を返却\\",\\n }\\n\\n# 航空機の画像\\n"},{"fileData":{"mimeType":"image/jpeg","fileUri":"gs://llm-image-fine-tuning/blog/train/78x/images1.jpg"}}]},{"role":"model","parts":[{"text":"{\\n  \\"answer\\": \\"1\\",\\n}"}]}]}
・・・

今回は学習用データセットとして各クラス25件ずつ計50件、検証用データセットとして各クラス10件ずつ計20件のデータを作成しました。
形式はJSONLで、チューニング時の読込先となるCloud Storageに配置しました。

Vertex AIでのチューニング手順

モデルのチューニングはCLIやPython SDKでも操作可能ですが、Vertex AIコンソールからも簡単な手順で行うことができます。詳しいチューニングの手順を以下のとおりです。

  • Vertex AI Studioのメニューから「チューニング」を押下

  • 「+チューニング済みモデルを作成」を押下

  • 【モデルの詳細】の設定
    1. チューニング済みモデル名の入力
    2. ベースモデルの選択
    3. リージョンの選択
    4. エポック数の設定
    5. 学習率の乗数の設定
    6. アダプタサイズの設定
  • 【チューニング用データセット】の設定
    1. チューニング用データセットとして前章で作成した学習用データセットのCloud Storageのパスを指定
    2. 検証データセットとして前章で作成した検証用データセットのCloud Storageのパスを指定
  • 「チューニングを開始」を押下

今回のチューニングではベースモデルをgemini-2.0-flash-001、その他のパラメータをすべてデフォルト設定としました。

チューニング済みモデルの精度

チューニング済みモデルに対してベースモデルの精度検証時に使用したものと同じ30枚のテストデータで精度検証してみたところ結果は以下のようになりました。

  1. 混合行列
実際の型式\予測された型式 B787-10 B787-8
B787-10 11 4
B787-8 4 11
  1. F1-score:0.733

F1-scoreベースで0.125⇒0.733と精度が大幅に向上する結果となりました!

まとめ

Gemini 2.0は画像タスクに対しても高いポテンシャルを持っていますが、今回のケースのようなベースモデルが学習していない領域では性能が限定的です。
プロンプトエンジニアリングにより、ベースモデルの性能を最大限まで活かすことはなにより重要ですが、精度が頭打ちになったときには、ファインチューニングも検討してみてはいかがでしょうか。


注1:画像はクリエイティブ・コモンズ 表示 2.0 一般ライセンスのもとに利用を許諾されています。
解説English: JA801A climbing out of Haneda Airport.
日付2016年12月18日
原典DSC08769
作者Masahiro TAKAGI
原典へのリンク
https://www.flickr.com/photos/m-takagi/31344175850/
作者ページへのリンク
https://www.flickr.com/photos/m-takagi/
ライセンスへのリンク
https://creativecommons.org/licenses/by/2.0/deed.ja

注2:画像は「Aviation Wire(アビエーションワイヤー)」2015年3月28日の記事「ANA、787-10正式発注 最大サイズの787、19年度から国内線に」内の画像を引用したものです。
出展元記事へのリンク
https://www.aviationwire.jp/archives/58252

ShtockData

お問い合わせフォーム

お問い合わせ項目を選択してください