Share
Embed
VLMで2.3万枚のPyCon JP写真を検索!
VLMで2.3万枚のPyCon JP写真を検索!
「PyCon JP 2026」 2026年8月21日
– 無料クラウド枠で実用的なマルチモーダル&顔認識検索システムを構築した裏側 –
Python Asia Organization Founder and Board member / PSF Fellow
株式会社CMSコミュニケーションズ
代表取締役 寺田 学 (Manabu TERADA)
Manabu TERADA
August 21, 2026
Transcript
72 slides
-
「PyCon JP 2026」 2026年8月21日 VLMで2.3万枚 PyCon JP写真を検索! – 無料クラウド枠で実用的なマルチモーダル&顔認 識検索システムを構築した裏側
– Python Asia Organization Founder and Board member / PSF Fellow 株式会社CMSコミュニケーションズ 代表取締役 寺田 学 (Manabu TERADA) copyright © 2026 CMS Comunications Inc. all rights reserved. -
自己紹介 寺田 学 (Manabu TERADA) • Pythonエンジニア -> ベクトル検索研究家 •
Podcast 「terapyon channel」(https://podcast.terapyon.net) • 主な関連書籍(共著・監修・監訳) ◦ Python実践レシピ改訂新版 (技術評論社: 2026年3月) ◦ Pythonによるあたらしいデータ分析 ◦ Pythonデータ分析 実践ハンドブック (インプレス: 2023年9月) ◦ スラスラわかる Python第2版(翔泳社:2021年11月) ◦ 機械学習図鑑(翔泳社 : 2019年4月) copyright © 2026 CMS Comunications Inc. all rights reserved. 教科書第 3版(翔泳社:2025年5月) -
主な役職 寺田 学 (Manabu TERADA) PyCon JP 2026シルバースポンサー 株式会社 CMSコミュニケーションズ
代表取締役 • Python Asia Organization Founder and Board member • Python Software Foundation (PSF) Fellow • 一般社団法人Pythonエンジニア育成推進協会顧問理事 • 国立大学法人一橋大学 社会学研究科 元客員准教授(2022) • 元 PyCon JP Association理事 • NVDA日本語チーム理事 copyright © 2026 CMS Comunications Inc. all rights reserved. -
Python技術支援 コンサルサービス (株)CMSコミュニケーションズ サービス copyright © 2026 CMS Comunications Inc.
all rights reserved. -
トーク 補助 ベクトル検索と • 理解を助ける薄い本 【なぜ「意味」でさがす か】 ◦ 本日、無料配布します。 2026年4月・5月ベクトル検索
記事 • Pythonによるベクトル検索 基礎と実践: https://gihyo.jp/article/2026/04/monthly-python-2604 • Pythonマルチモーダル検索とANN: https://gihyo.jp/article/2026/05/monthly-python-2605 copyright © 2026 CMS Comunications Inc. all rights reserved. -
• PyCon JP 23,000枚 • 無料枠へ 写真を検索 こだわり • 技術的な工夫
深掘り 3つ • 検索技術を再確認 • ベクトル検索 現状 課題 • ベクトル診断とそ 他 例 copyright © 2026 CMS Comunications Inc. all rights reserved. -
事例紹介 PyCon JP 23,000枚 copyright © 2026 CMS Comunications Inc.
all rights reserved. 写真を検索 -
PyCon JP 写真を検索 • 画像共有サイト(Flickr)にある約23,000枚 写真 ◦ https://www.flickr.com/photos/pyconjp/albums ◦ ライセンス
自由に使える (CC-BY PyCon JP) • テキスト文字列で検索できないか? copyright © 2026 CMS Comunications Inc. all rights reserved. -
PyCon JP Image Search 機能 • 自然言語で画像を検索 ◦ アノテーション文字列を検索していない(VLM利用) •
画像から似た画像を抽出 • 顔認識し同一人物を検索 • イベント(開催年)など フィルタリング • PyCon JP運営/主催メンバー み利用可能 イベント広報やあ copyright © 2026 CMS Comunications Inc. all rights reserved. 時に写真にたどり着く -
PyCon JP Image Search 規模 • 利用者: 10人程度に想定(アカウント • 画像数:
約23,000枚 • 顔認識: 約70,000個 100程度) 小規模なシステム アプリ コード 公開済み (実験コードも含めて) https://github.com/pyconjp/pyconjp-image-search copyright © 2026 CMS Comunications Inc. all rights reserved. -
無料枠へ あえて こだわり 制約事項をいれて構築 copyright © 2026 CMS Comunications Inc.
all rights reserved. -
無料で提供したい • Python Web UIフレームワークで なく、 ◦ Gradio / Streamlit
で最初作ったが・・・ ◦ Webアプリとして公開したい • コミュニティー向けであること • どれだけ使われるかわからない 制約条件を厳しく設定 copyright © 2026 CMS Comunications Inc. all rights reserved. -
Google Firebase無料枠 • • • • Google PaaS(クラウドサービス) Firebase Hosting:
無料枠あり DB - Firestore: 無料枠あり Functionsが無料で 使えない copyright © 2026 CMS Comunications Inc. all rights reserved. -
Firebase Hosting無料枠 • 利用者が少なけれ 問題ない • 大きなファイル ダウンロードをすると無料枠を超える ◦ ベクトルをDuckDBなどで配布することができない
◦ (DuckDB WASMで NG) • 料金プラン ◦ ストレージ: 10 GB ◦ データ転送: 360 MB/日 ◦ https://firebase.google.com/pricing?hl=ja copyright © 2026 CMS Comunications Inc. all rights reserved. -
Firebase Firestore無料枠 • クエリ単位で課金 • ベクトル永続化が可能 • 料金プラン ◦ Stored
data: 1 GiB total ◦ ドキュメント 読み取り: 50K reads/day ◦ https://firebase.google.com/pricing?hl=ja copyright © 2026 CMS Comunications Inc. all rights reserved. -
Firebase Functions無料枠 • 有料課金を登録しないと利用不可 • クエリベクトルをEmbeddingするに • Functions以外 選択肢を模索 クエリ側
CPUリソース必要 Embeddingするリソース忘れがち copyright © 2026 CMS Comunications Inc. all rights reserved. -
利用技術 ホスティング Firebase Hosting Embeddingモデル Google Siglip 2 データベース Firestore
近似近傍検索(ANN) 独自工夫+Firestore 認証 Firebase Authentication データ整形 / ベクトル化 Python / CUDA copyright © 2026 CMS Comunications Inc. all rights reserved. -
技術的な工夫 深掘り 3つ Embedding / ANN / DB copyright ©
2026 CMS Comunications Inc. all rights reserved. -
画像検索 Embedding (モデル選定 ) • VLMモデル 比較 ◦ OpenAI CLIP
◦ Google SigLIP ◦ 他 copyright © 2026 CMS Comunications Inc. all rights reserved. -
顔認識及び Embedding (モデル選定 ) • InsightFaceフレームワーク 活用 • 十分な機能、認識力、ベクトル表現 •
ArcFaceを使った https://github.com/cmscom/image-vector-poc/blob/main/notebooks/51-face-detection-insightface.ipynb • • • • InsightFace (buffalo_l) で顔検出・Embedding抽出・属性推定が正常動作 各カテゴリ 顔検出特性を把握 ArcFace 512次元 Embedding 正規化済み (ノルム ≈ 1.0) 同一人物 (terada) Embedding 高いコサイン類似度を示す copyright © 2026 CMS Comunications Inc. all rights reserved. -
Embedding をどこでやるか ? (リソース ) • • • • 画像が増えない(アップロード機能なし)
ローカルGPUでEmbeddingし、parquetで管理 メタデータなどを含めてDuckDBを活用 クエリ 時が課題としてど リソースを使うか? ◦ ブラウザでEmbeddingできないか? copyright © 2026 CMS Comunications Inc. all rights reserved. -
ブラウザで Embedding • Transformers.js 活用 • ONNXモデル 存在確認 ◦ onnx-community/siglip2-base-patch16-224-ONNX
• PythonでPyTorch ベクトルと同じになるか? • 両モデル(画像検索用と顔画像用)で問題ないことを確認 ◦ OpenAI CLIP ・・日本語がちょっと良くなかった ◦ Google SigLIP ・・ONNXでNG ◦ Google SigLIP 2 (google/siglip2-base-patch16-224 768次元) copyright © 2026 CMS Comunications Inc. all rights reserved. -
ブラウザで Embedding VLM 確認 別プロジェクトで検証: https://github.com/cmscom/image-vector-poc/blob/main/notebooks/31-js-setup-and-embedding.ipynb https://github.com/cmscom/image-vector-poc/blob/main/notebooks/64-siglip2-js-embedding.ipynb SigLIP 2 fp32
• • Python-JS 類似度 0.924 で SigLIP 1 (0.906) より高い PIL (Python) と Sharp (JS) 画像前処理 差異があっても、0.924 高い類似度 CLIP-L (0.872) よりも大幅に高い互換性 → SigLIP 2 Python で事前計算、JS で検索というユースケースに適している …. SigLIP 1 と 速度差 • 小さい Python GPU (4.2 img/s) と比較しても差 copyright © 2026 CMS Comunications Inc. all rights reserved. 小さく、Node.js でも十分実用的 -
ブラウザで Embedding 罠 • モデルなどをブラウザ内にダウンロード・キャッシュ ◦ 約700MB copyright © 2026
CMS Comunications Inc. all rights reserved. -
3. 近似最近傍検索 (ANN) copyright © 2026 CMS Comunications Inc. all
rights reserved. -
FirestoreでANN • Firestoreに 厳密計算 kNN(近傍検索)がある • Firestore フィルタリング機能が強い で、イベント別 などが可能
copyright © 2026 CMS Comunications Inc. all rights reserved. フィルタ -
FirestoreでkNN 費用 • コストが気になる・・・ ◦ 1回 検索コストがベクトル数 1 / 100
reads ◦ 70Kベクトルあると、 70K / 100 -> 700 reads ◦ 1日 無料枠 50K reads ◦ つまり、約71回 検索で1日分を消費 ◦ (プラス実データ) copyright © 2026 CMS Comunications Inc. all rights reserved. -
Firestoreで独自 ANN • IVF / Voronoi分割をして、事前枝刈りできないか? ◦ 1/10程度にすれ コストも1/10になる •
事前学習した256分割 セントロイド点を作る • Firestoreに、ベクトル毎に2個を点(ID)をアサインする • ブラウザでクエリベクトル セントロイド所属 ID取得 • 上位5までクエリベクトル セントロイドIDとOR検索 copyright © 2026 CMS Comunications Inc. all rights reserved. -
制約事項 中でシステム構築 工夫を紹介した。 少し別 copyright © 2026 CMS Comunications Inc.
all rights reserved. 視点から見ていく -
• PyCon JP 23,000枚 • 無料枠へ 写真を検索 こだわり • 技術的な工夫
深掘り 3つ • 検索技術を再確認 • ベクトル検索 現状 課題 • ベクトル診断とそ 他 例 copyright © 2026 CMS Comunications Inc. all rights reserved. -
検索技術を再確認 モデル / アルゴリズム / DB を置き換えて考える copyright © 2026
CMS Comunications Inc. all rights reserved. -
そもそも検索と • • • • • 検索って何やっている ? キーワード検索 場合
? ベクトル検索に置き換えると? 画像検索に置き換えると? そ 他 工夫 copyright © 2026 CMS Comunications Inc. all rights reserved. -
PyCon JP Image Search copyright © 2026 CMS Comunications Inc.
all rights reserved. 構成 -
ANNとDB 関係 • ベクトルDBに 、ANN 機能が付いている • HNSW / IVF系などがある
• Firestore 専用 ベクトルDBで ない で少量にしか使えな い ◦ 工夫をすることである程度 データ量まで対応できた ◦ IVF 考え方 別 DBへ 応用、超大規模10億件(1B)とか に応用可能 copyright © 2026 CMS Comunications Inc. all rights reserved. -
ベクトル検索 現状 簡単そうで難しい事 みんなで考えて行きたい copyright © 2026 CMS Comunications Inc.
all rights reserved. 課題 -
ベクトル検索で DBで行う2つが関連 • マッチング ◦ 探したい対象 物か? • ランキング ◦
順位付けをどうするか? 完全一致 なく、マッチングとランキング バランス copyright © 2026 CMS Comunications Inc. all rights reserved. -
似ている物を出してくる • 「赤いスポーツカー」を検索して、ヒットしない ずが • 「赤い」や「カー」などに引っ張られて何か出してくる RAGに使うときに copyright © 2026
CMS Comunications Inc. all rights reserved. 確認が必要 -
ベクトル検索で 、ベクトル 近傍をみる • ベクトルが数値的に近いとか似ているという評価 • そ 評価が目的 タスクと合っているか? •
どうやって評価すべきか? 検索 ランキング タスクベースにするに copyright © 2026 CMS Comunications Inc. all rights reserved. 別 奥が深い。 評価指標も用いる -
ベクトル検索 メタデータフィルター • 事前フィルター出来るか? ◦ HNSW アルゴリズム的に事前に間引きにくい • 事後フィルターで良い か?
◦ フィルター条件が厳しい場合にTop-500に候補がある? 製品毎にさまざまな工夫がされている copyright © 2026 CMS Comunications Inc. all rights reserved. -
データ 追加・削除にも工夫が必要 • ベクトルが大幅に増えると ◦ HNSWネットワークや配置バランスが崩れる事がある • 削除もさまざまなアプローチが実践されている • メインDBと2相コミットするか
or 非同期更新するか 現段階でこれが決まり !! という決定打がない copyright © 2026 CMS Comunications Inc. all rights reserved. -
Vector Search Checkup • ベクトルデータ ローカル診断ができるアプリ • ベータ版公開 https://vectorcheckup.cmscom.jp/ copyright
© 2026 CMS Comunications Inc. all rights reserved. -
博物館 所蔵検索 • 100万件 CC-0 画像データを検索 • Firestoreで同様に動作している 当社 デモアプリとして内部公開
copyright © 2026 CMS Comunications Inc. all rights reserved. -
ベクトル検索 相談窓口 • 当社 サービスとして相談窓口を開設 • 無料相談が可能 ◦ https://vector.cmscom.jp copyright
© 2026 CMS Comunications Inc. all rights reserved. -
制約事項 中でシステム構築 工夫を紹介し、 検索全般、ベクトル検索 課題を紹介 copyright © 2026 CMS Comunications
Inc. all rights reserved. -
トーク 後 ディスカッション • 同様に画像検索や顔認識をやってみたいという人と話して、公 開コードを見ながらポイントを示したい • VLMモデル 選定方法や実際に行ったPoC前 事前検証方法
を、別途個人で公開しているNotebookを元に紹介やディスカッ ションしたい • ベクトル検索 詳しい人とベクトル 近似最近傍検索 現状と 課題について、無料枠で 限界など 苦労話をしたい copyright © 2026 CMS Comunications Inc. all rights reserved. -
(本日夕方 ??) オープンスペースを開催 & 会場内にいます で声を掛けてください copyright © 2026 CMS
Comunications Inc. all rights reserved. -
トーク 補助 ベクトル検索と • 理解を助ける薄い本 【なぜ「意味」でさがす か】 ◦ 本日、無料配布します。 2026年4月・5月ベクトル検索
記事 • Pythonによるベクトル検索 基礎と実践: https://gihyo.jp/article/2026/04/monthly-python-2604 • Pythonマルチモーダル検索とANN: https://gihyo.jp/article/2026/05/monthly-python-2605 copyright © 2026 CMS Comunications Inc. all rights reserved. -
リファレンス • • • • • • GitHub コード: https://github.com/pyconjp/pyconjp-image-search
GitHub PoC: https://github.com/cmscom/image-vector-poc 記事: https://gihyo.jp/article/2026/04/monthly-python-2604 記事: https://gihyo.jp/article/2026/05/monthly-python-2605 ベクトル診断アプリ: https://vectorcheckup.cmscom.jp/ 相談窓口: https://vector.cmscom.jp copyright © 2026 CMS Comunications Inc. all rights reserved.