前回の投稿(【ワイン画像識別2026】LoRA + ArcFace)で予告したように、今回は新たに選定したベースモデル「SigLIP2」に関して書きたいと思います。
おそらくは、この「SigLIP2」がベースモデル選定のファイナルアンサーになるかと。
SigLIP2
当然ながら、AI先生が推薦してきたモデルです。
DINOv2で挫折しそうになっていた際に、次の候補として紹介してもらいました。
早速ですが、SigLIP2に関してAI先生に解説してもらいましょう。
2025年2月に発表されたSigLIP2は、Googleが開発した次世代のビジョン・言語エンコーダモデルです。
最大の特徴は、従来のCLIPが抱えていた「巨大なバッチサイズへの依存」という課題を、独自のSigmoid Lossによって解決している点です。これにより計算効率を維持しつつ、最新版では自己教師あり学習(Distillation等)を組み合わせることで、画像理解の精度をさらに引き上げました。
また、多言語対応の強化に加え、動的な解像度への対応により、検索、分類、さらには高度なAIモデル(LMM)の視覚コンポーネントとして世界最高水準の性能を発揮します。
上記にあるように、「SigLIP」は「CLIP(Contrastive Language-Image Pre-training)」なるモデルの進化系で、CLIPが損失関数にSoftmaxを使用していたのに対し、SigLIPではSigmoidを使用するようにしたようです。
「Sigmoid Loss」を使用した「Language-Image Pre-training」ということで、「SigLIP」なんですね。
最後の2は、当然ながら「Version 2」の意味です。
で、そもそもLIPって何?という点に関しても解説してもらいました。
LIP(Language-Image Pre-training)は、一言で言えば「画像とテキストを同じ『意味の空間』で理解させる」ための学習手法です。
従来のAIは「画像は画像(ピクセル)」「テキストはテキスト(単語)」と別々に処理していましたが、LIPはこの二つを結びつける画期的なアプローチをとっています。
LIPの最大のポイントは、画像とテキストをそれぞれベクトル(数値の列)に変換し、「猫の画像」と「『猫』という単語」のベクトルが、計算空間上で近くに配置されるように訓練することです。
・画像エンコーダ: 画像を特徴量(ベクトル)に変換。
・テキストエンコーダ: テキストを特徴量(ベクトル)に変換。
この二つを一つの空間に放り込み、正しいペア(一致する画像と説明文)を近づけ、正しくないペアを遠ざけます。
「事前学習(Pre-training)」と呼ばれるのは、特定のタスク(例:犬の種類を当てる)のためだけに学習するのではなく、インターネット上の膨大な画像と説明文のペアを使って、世界中のあらゆる概念をあらかじめ学んでおくからです。
これにより、学習データに特定の正解ラベル(例:「シバ犬」という特定の分類)が含まれていなくても、画像の特徴をモデルが内部に持つ広範な言葉の概念と照らし合わせることで、未知の物体に対しても「これは〇〇(という概念)に近い」と自律的に判断するゼロショット学習(Zero-shot Learning)が可能になります。
従来は画像のベクトルとテキストのベクトルは別の処理対象であったものが、LIPでは両者を同じベクトル空間内で比較対象となるようにしたようです。
人間の頭の中でも、「犬」と言う言葉を聞けば何となく犬の画像的イメージが思い浮かんだりしますが、そんな感じなんですかね?
すごい話です。
なお、SigLIP2の入力画像解像度は512×512で、DINOv2(518×518)とほぼ同等であり、EfficientNetV2L(384×384)の1.78倍程度あります。
これであれば、文字などの細かな差異も、より的確に捉えることができそうな印象があります。
ワイン画像識別との相性
SigLIP2が良さげであることは分かりましたが、ResNet50の時も、EfficientNetV2Lの時も、そしてDINOv2の時も、最初は「一推し!」と言う感じだったので、まだまだ手放しでは信用できません。
なぜ、SigLIP2が良いのか。
特に目的であるワイン画像による識別という観点で解説してもらいました。
ワインラベルの識別は、画像認識の中でも「細粒度識別(Fine-grained Classification)」と呼ばれる非常に難易度の高いタスクです。
ResNet50 / EfficientNetV2L
これらは主に「ImageNet(1000種類)」のデータで学習されています。彼らの「目」は、犬と猫、車と船を見分けるのには適していますが、「ワインラベル内の細かい文字情報の違い」や「微妙なロゴのデザイン差」を識別する訓練が不足しています。
DINOv2 (自己教師あり学習)
画像のみから「物体の形や質感」を捉える能力は非常に高いですが、そこに「意味(このロゴはシャトー・マルゴーである、といった知識)」が紐付いていません。視覚的な特徴だけで判別しようとするため、似たような色のラベルや構図に惑わされやすい傾向があります。
SigLIP2がワインラベル識別で力を発揮するのは、以下のLIP特有の強みがあるからです。
「文字」と「意味」の強力な紐付け
ワインラベルには、産地、ワイナリー名、ぶどう品種などの「文字情報」が含まれています。SigLIP2は学習過程で、何十億もの「画像と説明文」のペアを見ています。 その結果、「ラベル上の特定のフォントや配置(視覚)」が「特定の銘柄名(言語)」と強力に結びついています。 つまり、モデルがラベルを「絵」としてだけでなく、「意味のある情報」として読んでいるに近い状態です。
ゼロショット・ボキャブラリーの広さ
従来のモデルは、学習した1000種類などの枠に囚われますが、LIPはインターネット上の膨大なテキスト概念を持っています。 マイナーなワイナリーや特定のヴィンテージ(年号)といった、通常の学習データには現れにくい概念に対しても、テキストエンコーダ側が持つ知識を総動員してベクトル化できるため、識別精度が跳ね上がります。
もともとハードネガティブの多くは葡萄の品種やビンテージのような細かな文字列の違いでしか区別できないものだったので、その辺に強いモデルと言うことで紹介してもらったSigLIP2が上記のような特徴を持つのは当然と言えば当然です。
しかし、今までのモデル選定時も同じような要求はしてきたんですけどね。
少年誌にありがちな、「奴は四天王でも最弱!」的な「強さのインフレ」現象は何とかならないもんでしょうか…
なぜ、最初から最強を出さない!?
学習結果
百聞は一見に如かず。
見せてもらおうか、SigLIP2の性能とやらを。
と言うことで、学習結果を見てみたいと思います。
比較のために、過去の投稿で最後に記録が残っている(つまり一番数値が良かった)、「ハイパーパラメータ調整:ファインチューニング新章(2)」におけるEfficientNetV2Lベースのモデルに関するデータを引用しておきます。
ポジティブ・ネガティブの数値が前述の投稿時の半分の値になっていますが、これは画像A,Bの組み合わせに関して、以前はA,Bそれぞれをアンカーとした場合を二重にカウントしていたのに対し、昨今では同一の組み合わせに関する多重カウントを排除していることから、比較しやすいように数値を補正した結果です。
蛇足ながら、DINOv2では下記を超える数値は出せていません。
| 閾値 | ポジティブ | ネガティブ | 適合率 | 再現率 | F1スコア | Fβスコア |
| 0.19 | 1053 | 87 | 0.9237 | 0.9402 | 0.9319 | 0.9269 |
| 0.12 | 964 | 15 | 0.9847 | 0.8607 | 0.9185 | 0.9571 |
| 0.03 | 732 | 0 | 1.0000 | 0.6536 | 0.7905 | 0.9042 |
では、SigLIP2をベースとして、現時点で最良の結果となっているモデルの数値を見てみましょう。
| 閾値 | ポジティブ | ネガティブ | 適合率 | 再現率 | F1スコア | Fβスコア |
| 0.19 | 1112 | 1 | 0.9991 | 0.9929 | 0.9960 | 0.9978 |
閾値=0.19 で、F1, Fβスコア共に最良の数値となっています。
ネガティブも1つのみで、適合率=0.9991 となっていますが、実はこのネガティブが問題です。
具体的には以下のものになります。
![]() | ![]() | 0.1101 |
![]() | ![]() | – |
1行目が問題となる、最も距離が近いネガティブの組み合わせです(距離=0.1101)。
実はラベルの上の方が切れてしまっていて、重要な部分が写っていません。
比較用に全体が写ったケース(2行目)を載せておきましたので、そちらと見比べてみてください。
切れてしまっている上の部分にオレンジ色の文字で違う文字列(葡萄の品種か何か)が書かれていたのですが、それが含まれておらず、その他の文字列は人間の目で見る限りは違いがないように見えます。
つまり、この組み合わせに関しては、人間が見ても同じか違うかの判断ができない(かなり難しい)ものとなっています。
むしろ、今まで上記ケースが問題になってこなかった方が不思議です。
色合いが若干違っている(違って見える)ので、過去のモデルでは、その辺の違いで距離を稼いでいたのかもしれません。
しかし、色に過敏に反応してしまうと、撮影条件(特に照明)によってポジティブでも距離が離れてしまうという問題があったので、上記は微妙な色の違いに左右されず、描かれた文字や絵柄から類似度を高く評価した例として、逆に好意的に捉えるべき判断と言えるかもしれません。
なお、2番目に距離が遠かったケースは、例によって以下のラベルの組み合わせでした。
![]() | ![]() | 0.1991 |
画像自体は以前の投稿と全く同じ組み合わせではないと思いますが、ラベルの組み合わせとしては同じです。
以前は 0.0359 だった距離が、0.1991 まで離れています。
先に示した最短のケースはサンプルの不備とも言えるものであるため、上記2番目のケースを実質的な最短距離と見做すと、閾値=0.19で適合率=1.0000(100%)、再現率=0.9929、F1スコア=0.9960、Fβスコア=0.9978 を達成できたと言えます。
これは、EfficientNetV2Lの結果と比較して、圧倒的に良い数値です。
加えて、昨今ではテストデータ(訓練に一切関与していないデータ)での数値も算出しているので、そちらも見てみます。
| 閾値 | ポジティブ | ネガティブ | 適合率 | 再現率 | F1スコア | Fβスコア |
| 0.19 | 107 | 0 | 1.0000 | 0.9727 | 0.9862 | 0.9944 |
こちらも、閾値=0.19でF1, Fβスコア共に最良となり、かつ適合率100%での最大閾値であり、再現率も 0.9727 を達成しています。
明確な集計をしていませんが、EfficientNetV2Lにおけるテストデータのみでの適合率100%の再現率は良くて0.3程度だったので、それと比較すると、汎化性能でも格段に優れていると言えます。
一方、ハードポジティブ(距離が0.19以上)に関しても見てみましょう。
前述したように、閾値=0.19 未満に含まれるポジティブの組み合わせの数は、全1120組のうち1112組だったので、残り8組がハードネガティブとなります。
しかし、実は同8組の内訳を見ると、以下の2パターンのラベルの組み合わせであることが分かりました。
1つ目は以下です。
![]() | ![]() | 0.4831 |
上記は、同ラベルに関する組み合わせの内、最も距離の遠いものです。
言うまでもなく、先にネガティブ関連で紹介した、上が切れてしまっているパターンですね。
右の画像を見て、これが左と同じラベルを写したものかを判断するのは、確かに難しい話かと思います。
2つ目は以下です。
![]() | ![]() | 0.3013 |
こちらも、ラベルの形状や絵柄が特殊(セマンティックセグメンテーションでの切り抜き時の輪郭が不安定)であり、かつ右はフラッシュによる局所的白飛び(「スペキュラーハイライト」と言うらしいです)が発生していることなど、いかにも難易度の高そうな画像です。
加えて言えば、文字が一切書かれていない点も難易度を上げているかもしれません。
SigLIP2は文字の違いに関する識別精度が高いようなので、何らかの文字が書かれてさえいれば、それが同じ(あるいは極めて似ている)と言うことが特徴量にも反映され、ベクトルとして「近い」と判断される材料になるのではないかと推測しています。
対照的なのは以下のケースです。
![]() | ![]() | 0.5993 |
上記はテストデータであり、過学習の対象になりません。
中央に大きく描かれた絵柄はシンプルでよく似ている(おそらくは全く同じ)ものです。
違いといえば、上記絵柄の右下に書かれた小さな文字列だけです。
しかし、上記でも距離=0.5993で違うものと認識できています。
わずかな文字列でも特徴量(ベクトル)に大きく影響を与えている好例と言えます。
上記のように、全体的な数値データやハードサンプル個々の特徴を見た時に、SigLIP2ベースのモデルは以前のモデルとは比較にならない精度と安定性(意味不明なハードサンプルがない)を持っているように感じます。
最早これは、四天王とは言わず、ラスボス登場と言うことで良いのではないかと思います。
さすがはGoogleさんです。
と言うことで、今回生成したSigLIP2ベースのモデルを特徴抽出器としての(一旦の)ファイナルアンサーとしたいと思います。
最後にポジティブ・ネガティブそれぞれの距離に関する分布状況を紹介して締めます。
| ポジティブ | ネガティブ | |
| 平均値 | 0.0250 | 0.9987 |
| 中央値 | 0.0162 | 1.0028 |
| 最小値 | 0.0023 | 0.1101 |
| 最大値 | 0.4831 | 1.3201 |
| 標準偏差 | 0.0353 | 0.0740 |
まとめ
結局は、「ファインチューニングではベースモデルの性能と目的への適性が成否のほとんどを決めてしまう」と言う、身も蓋も無い話でした。
そう考えると、ResNet50ベースでハイパーパラメータをいじくり回していた頃は、頑張って沼地に家を建てようとしていたようなものですね。
何という徒労感…
加えて、前回の投稿でも触れた「学習方法の変更」も大きかったと思います。
従来のトリプレット学習では、SigLIP2の能力を十分に活かしつつ目的特化のモデルを生成することは非常に難しかった(多分、無理だった)と思います。
現在の開発環境では、ArcFaceに切り替えて、実バッチサイズを4まで減らしても、メモリ容量的にはギリギリですので。
ハードサンプルの適正な抽出と組み合わせも面倒でしたし。
現状からハイパーパラメータの調整などによる若干の性能改善の余地はあると思いますが、今でもそれなりに良い数値は出せていますし、これ以上はコストパフォーマンス的に見合わないでしょう。
よって、特徴抽出器の生成に関しては一旦中締めとして、次は再度セマンティックセグメンテーションの見直しでも行おうかと思っています。
過去の投稿(ラベル画像のトリミング(6))を見ても、当時の作業状況は今見ると結構杜撰な印象がありますし、U-Net構造を持つモデルを一から生成するという方針(AI先生の提案でしたが)も、ファインチューニングを色々と試して来た現在では悪手であったように感じます。
せっかく特徴抽出器として良さげな性能を持つモデルが準備できても、入力画像の質が悪ければ、やはり全体としての精度は不十分なものになってしまうかと思います。
当時はいなかったCursor先生という力強い味方を手に入れましたし、改めて精度の高いセマンティックセグメンテーションモデルを再構築することを次の目標にしたいと思います。









