はじめに
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を採用しました。
結果は以下のとおりです。
- 混合行列
実際の型式\予測された型式 | B787-10 | B787-8 |
---|---|---|
B787-10 | 1 | 14 |
B787-8 | 0 | 15 |
- 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のメニューから「チューニング」を押下
- 「+チューニング済みモデルを作成」を押下
- 【モデルの詳細】の設定
- チューニング済みモデル名の入力
- ベースモデルの選択
- リージョンの選択
- エポック数の設定
- 学習率の乗数の設定
- アダプタサイズの設定
- 【チューニング用データセット】の設定
- チューニング用データセットとして前章で作成した学習用データセットのCloud Storageのパスを指定
- 検証データセットとして前章で作成した検証用データセットのCloud Storageのパスを指定
- 「チューニングを開始」を押下


今回のチューニングではベースモデルをgemini-2.0-flash-001
、その他のパラメータをすべてデフォルト設定としました。
チューニング済みモデルの精度
チューニング済みモデルに対してベースモデルの精度検証時に使用したものと同じ30枚のテストデータで精度検証してみたところ結果は以下のようになりました。
- 混合行列
実際の型式\予測された型式 | B787-10 | B787-8 |
---|---|---|
B787-10 | 11 | 4 |
B787-8 | 4 | 11 |
- 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
