PyCon JP 2026で画像検索システムの裏側を話します
2026年8月21日から、広島でPyCon JP 2026が開催されます。会場は広島国際会議場で、カンファレンスは8月21日(金)と22日(土)の2日間です。
私にとってPyCon JPは長く関わってきたホームともいえる場所です。今年はスピーカーとして、実際に構築した画像検索システムの裏側を紹介します。また、株式会社CMSコミュニケーションズとしてシルバースポンサーにもなっています。
2.3万枚の写真を検索するシステム
トークのタイトルは、「VLMで2.3万枚のPyCon JP写真を検索!無料クラウド枠で実用的なマルチモーダル&顔認識検索システムを構築した裏側」です。
8月21日(金)の11:45から12:30まで、ダリア1でお話しします。レベルは上級です。
PyCon JPには、過去のカンファレンスで撮影された2.3万枚を超える写真があります。この大量の写真から、自然言語による画像検索と顔検索を行えるシステムを構築しました。
単にVLMで画像をベクトル化して検索するだけではありません。実際に利用できるWebサービスとして動かすには、クラウドの無料枠という制約の中で、計算量、検索コスト、実行環境をどのように組み合わせるかを考える必要がありました。
gihyo.jpの記事から、さらにその先へ
今回のトークは、gihyo.jpで公開した次の2本の記事を基礎編・応用編とし、その先にある実装と試行錯誤を紹介する上級編という位置付けです。
これらの記事では、Embeddingの生成、Vector DBへの保存、近傍検索、画像とテキストを同じベクトル空間で扱うマルチモーダル検索、ANNの基本までを段階的に解説しました。
PyCon JP 2026では、それらの技術を実際のデータと制約条件の中でどのように組み合わせたのかを掘り下げます。教科書どおりの構成を説明するのではなく、実験で何を確かめ、どの選択肢を採用し、どこに独自の工夫を入れたのかという裏側を中心にする予定です。
制約の中でどう画像検索を成立させたか
このシステムでは、VLMによる約2.3万件の画像ベクトルに加え、顔認識モデルによる約7万件の顔ベクトルも扱います。
一方で、検索のたびに広い範囲をスキャンすると、Firestoreの読み取りコストが増えてしまいます。そこで、あらかじめ画像ベクトルをクラスタリングし、検索対象を絞ってからkNN検索を行う仕組みを実装しました。
この部分は、3月に公開したImage Vector PoC: Voronoi分割によるFirestoreのベクトル検索最適化で紹介した内容の深掘りでもあります。記事ではVoronoi分割による事前フィルタリングの考え方と結果を紹介しましたが、トークでは、そこへ至る実験や実装上の判断を分かりやすくお話しします。
また、テキストクエリのEmbeddingをブラウザ側で実行することで、サーバー側の計算資源を抑える工夫もしています。Python側でのモデル検証と、ブラウザ上で動くONNXモデルの出力をどのように揃えたのかも、実装上の重要なポイントです。
実際に動くものを見せながら話します
今回紹介するのは、アイデアだけではなく、Image Vector PoCとして実験し、実際に動作するところまで実装したシステムです。
当日は動くものをお見せしながら、画像検索と顔検索をどのように成立させたのか、無料クラウド枠という制約が設計にどのような影響を与えたのか、そしてPythonによる実験をWebサービスの実装へどうつなげたのかをお話しできればと思っています。
ベクトル検索やマルチモーダル検索を、デモではなく実際に運用できる形へ持っていくとき、どのような問題が起き、どのように工夫できるのか。そうした実践的な話に興味がある方は、ぜひ会場でお会いしましょう。
上級トークではありますが、初心者にも理解しやすくなるよう、見せ方や説明の工夫も検討しています。