ベクトル埋め込みベースの画像検索システム
今回はRAGシステムの練習でDBにembeddingした画像を探せるのか? トヨタの車の写真で他のトヨタ車を探せるのか テキストで画像を探せるのかをこの度試してみます
※正確には今回のシステムはRAG(Retrieval-Augmented Generation)ではありません
generationがないので画像マッチングシステムだと考えてください😊
使用 DB surrealdb
SurrealDB
エンベディングモデルは画像とテキスト統合モデルでopenAI clipモデルを使用(clip-ViT-B-32(途中変更)->clip-ViT-L-14)
モデル情報
1. 画像による画像検索 (Image-to-Image)
自動車テスト
同じ系のセダンは0.7以上の類似度だったが、トラクター、バスなどは違う車として認識するようです。
!同じ会社のセダンだったおかげか 日産セダンより類似度が0.8にちかいですね
モデルを変えて(clip-ViT-B-32->clip-ViT-L-14)車の特徴をもっと確認してほしかったので性能がもっと良いモデルで変えて再びやってみました

印象的ですね
トヨタの場合は1番と2番の順位が変わりました。 今回は特徴を細かく認識したようです。 日産の場合類似度が大きく下落しました。トラックに近くなりましたね。 トヨタと日産の違いをうまく区別したようです。
図面テスト
出典:TOYOTA CROWN セダン・ハードトップ新型車解説書1997年7月版
2-7、2-44
車関連の図面2つです 左側の図面をDBに入れた後右側の図面を入力して比較してみます

けっこう高い類似度ですね自動車関連の図面だったのでこうになったかもしれません
次は上の図面2つをDBにいれて、建物の図面をクエリーでやってみます

画像出典

図面は0.65ぐらいです 別のものに見えたのでしょうか
最後に建物の図面もいれてゲームコントローラーをクエリーで試してみます

画像出典

図面が先頭に出ますが何を基準にして判断するのかは、よくわからないですね

geminiでゲームコントローラーをちょっと修正してDBに入れて再検索してみます。

こんな結果が出ました
皆さんは上の図面と下の図面は似ていると思いますか?それとも完全に別のものだと思いますか?
画像類似度比較において、「この数値以上なら同じ物である」という決まった絶対的な基準はありません。
例えば、単に似たような形状の物を探す目的であれば、類似度が0.8以上でも「十分に類似している」と
判断できるかもしれません。一方で、セキュリティが重要となる顔認識の場合なら、0.95や0.98以上でなければ
「完全に別人」として扱うべきでしょう。 今回のような図面の場合、形状自体は完全に同じであっても、数値が変われば「完全に別物」として扱われます。
数値をちょっと変えた図面です


数値をわずかに変更しただけですが、0.9922という高い類似度が出ました。
ほぼ同じものだと考えても構わないスコアです。
ですが、これをそのまま機械に入れて加工したら、必ず問題が起こるはずです。
ここには記載されていませんが、使用されている素材の場合も、プラスチックからアルミニウムに変更されれば、形状が同じであっても「完全に別物の図面」と見なすことができます。 結局のところ、図面で何かを判断するのはまだ、無理があると思われますね。
2. テキストで画像検索 (Text-to-Image)
風景テスト



まずは左側をDBに入れて右側と画像との類似度を確認してみました
テキストで画像を探してみる 入力テキスト:日本の商店街 ![[TextToImage.png]]
結果:画像よりテキストの類似度が比較するまでもなく類似度が高いです。 テキストと画像のデータは全く形式の異なるデータであるためこう見るとわからないですね
自動車も探そうとしましたが、風景がこうだったので DBのテキストデータは削除した上で

ストレートなイメージもいれて質問も英語(モデルの学習データは英語が一番多いので)でやってみました
入力テキスト:toyota

ロゴの反応が車よりも高いですね はじめに見たときはスコアが低いから探せないのかなと思いましたが 風景の場合も意外と意味がある結果だったかもしれません
最後にDBにない画像を検索してみました。
入力テキスト:cat

車は1つも出ない、図面がさっきよりも低い類似度で出ました。
テキスト検索のまとめ
テキストから直接画像検索を行う実験を行いました。
当初は難しいと考えていましたが、実際には一定レベルで意味的な検索が可能でした。 例えば「toyota」というテキストで検索した場合、toyotaロゴや車両画像が上位に表示され、完全に無関係な画像とはある程度区別できていた。 ただし、画像とテキストは異なる形式のデータであるため、一般的な文章検索ほど高精度ではなく、類似度スコアも比較的低めになる傾向がありました。
画像検索のまとめ
車と図面を試してみました。
実際、サンプルが少ないため、これで判断するのは良くないですが
まだ、図面検索では依然として課題が多くあるようですね
- 記号の誤認識
- OCRの失敗(数字を一つでも間違えると致命的)
- 線の接続ミス(図面に複数の形状がある場合)
- 部品構造の理解不足 などが発生しやすく、特に産業用図面では精度が不安定
さらに産業図面には、
- 解像度が低い
- 会社ごとに記号規格が異なる
- 古いスキャン画像が多い といった問題も存在する。
そのため、単純な画像Embeddingだけではなく、画像解析モデルによる説明文生成やOCR結果を組み合わせた検索の方が、現時点ではより実用的だと感じました。
したがって、本システムは最初から完璧を求めるのではなく、類似図面の検索や3Dモデリング・加工のベースを作る「効率化の補助ツール」として使うのが良さそうです。実際の実務や最終検証は、やはり人間が直接確認して仕上げる形が現実的だと考えます




