VLMで2.3万枚のPyCon JP写真を検索!無料クラウド枠で実用的なマルチモーダル&顔認識検索システムを構築した裏側
最新のVLMやInsightFaceを活用したデータ処理から、Firebaseの無料枠に収めるために施した「独自のベクトル枝刈りアルゴリズム」の工夫、Transformers.jsを活用したエッジ(ブラウザ)側でのクエリ埋め込みなど、低コストで実用的なWebサービスの全アーキテクチャと工夫を、公開コードとともに紹介します。
【背景と課題】
PyCon JPには過去23,000枚を超える写真がありますが、「パネルディスカッションの写真」などを探すのは困難でした。
VLMを活用すれば実現可能ですが、コミュニティで運用するには「サーバー維持コスト」が大きな壁となります。
【無料枠に収める技術的工夫】
Pythonによる高速なデータ処理とPoC
Google SigLIP 2(VLM)による画像ベクトル(23K件)と、InsightFace(ArcFace)による顔ベクトル(70K件)を抽出。DuckDBとJupyter Notebookを用いたPoC。計算リソースのクライアントサイドへの委譲とONNXによるモデル選定
テキストクエリをベクトル化するためのEmbeddingモデルを、transformers.js を用いてユーザーのブラウザ側で実行。サーバーレス(無料枠)環境での計算リソース不足を解消。Python側での推論結果と、ブラウザ側(ONNX形式)に変換・実行した際の出力ベクトルが同一であることを検証しクロスプラットフォームで検索精度を担保できるモデルを採用。独自実装によるベクトル検索のコスト削減
Firestoreのベクトル検索機能は高コストです。これを回避するため、Python側でデータをクラスタリング(IVF的な考え方)し、独自に実装したインデックスを用いてFirestore側で対象データを約8%まで事前枝刈りしてからkNN検索。
このトピックに関するあなた自身の経験を教えてください
VLMモデルの選択、NotebookでのPoC、ローカルアプリの開発、Webアプリの構築からデプロイ、無料枠に収める工夫の検討。
既存の技術を組み合わせて実装・公開するすべてを実施。
さらには、データ利用の許諾を(内輪では有るが)倫理的に求めてた。つまり企画立案からサービス提供、倫理や利用プラットフォームの選定許諾まですべて。
VLMに限らずベクトル検索研究家として活動。ベクトル検索についてのWeb記事をgihyo.jpにて2件公開。2件目は本発表の概要を示した物である。
この発表を通じて、参加者とどんな議論が可能ですか?
3点あり、ディスカッションのレベルを分けている
- 同様に画像検索や顔認識をやってみたいという人と話して、公開コードを見ながらポイントを示したい
- VLMモデルの選定方法や実際に行ったPoC前の事前検証方法を、別途個人で公開しているNotebookを元に紹介やディスカッションしたい
- ベクトル検索の詳しい人とベクトルの近似最近傍検索の現状と課題について、無料枠での限界などの苦労話をしたい
Python Web関係の業務を中心にコンサルティングやシステム構築を(株)CMSコミュニケーションズ代表取締役として手がけている。
ベクトル研究家
Pythonをはじめとした技術話題を扱うPodcast「terapyon channel」https://podcast.terapyon.net/ を配信中。機械学習図鑑(翔泳社: 2019年4月)を共著、Pythonによるあたらしいデータ分析の教科書第3版(翔泳社: 2025年5月)を共著、スラスラわかるPython 第2版(翔泳社: 2021年12月)を監修、Pythonハッカーガイドブック(マイナビ出版: 2020年5月)を監訳、その他執筆活動も行っている。
- (株)CMSコミュニケーションズ 代表取締役 https://www.cmscom.jp
- Python Asia Organization Founder & Board Member https://pythonasia.org
- 一般社団法人Pythonエンジニア育成推進協会 顧問理事 https://www.pythonic-exam.com
- PSF(Python Software Foundation) Fellow https://www.python.org/psf/membership/
- Plone Foundation Ambassador https://plone.org