Slide 1

Slide 1 text

「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.

Slide 2

Slide 2 text

自己紹介 寺田 学 (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月)

Slide 3

Slide 3 text

主な役職 寺田 学 (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.

Slide 4

Slide 4 text

Python技術支援 コンサルサービス (株)CMSコミュニケーションズ サービス copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 5

Slide 5 text

トーク 補助 ベクトル検索と ● 理解を助ける薄い本 【なぜ「意味」でさがす か】 ○ 本日、無料配布します。 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.

Slide 6

Slide 6 text

検索で重要な要素 どうやって決めて実装していったか copyright © 2026 CMS Comunications Inc. all rights reserved. 話

Slide 7

Slide 7 text

● PyCon JP 23,000枚 ● 無料枠へ 写真を検索 こだわり ● 技術的な工夫 深掘り 3つ ● 検索技術を再確認 ● ベクトル検索 現状 課題 ● ベクトル診断とそ 他 例 copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 8

Slide 8 text

事例紹介 PyCon JP 23,000枚 copyright © 2026 CMS Comunications Inc. all rights reserved. 写真を検索

Slide 9

Slide 9 text

PyCon JP 写真を検索 ● 画像共有サイト(Flickr)にある約23,000枚 写真 ○ https://www.flickr.com/photos/pyconjp/albums ○ ライセンス 自由に使える (CC-BY PyCon JP) ● テキスト文字列で検索できないか? copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 10

Slide 10 text

Demo 1 copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 11

Slide 11 text

PyCon JP Image Search 機能 ● 自然言語で画像を検索 ○ アノテーション文字列を検索していない(VLM利用) ● 画像から似た画像を抽出 ● 顔認識し同一人物を検索 ● イベント(開催年)など フィルタリング ● PyCon JP運営/主催メンバー み利用可能 イベント広報やあ copyright © 2026 CMS Comunications Inc. all rights reserved. 時に写真にたどり着く

Slide 12

Slide 12 text

Demo 2 copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 13

Slide 13 text

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.

Slide 14

Slide 14 text

無料枠へ あえて こだわり 制約事項をいれて構築 copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 15

Slide 15 text

無料で提供したい ● Python Web UIフレームワークで なく、 ○ Gradio / Streamlit で最初作ったが・・・ ○ Webアプリとして公開したい ● コミュニティー向けであること ● どれだけ使われるかわからない 制約条件を厳しく設定 copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 16

Slide 16 text

Google Firebase無料枠 ● ● ● ● Google PaaS(クラウドサービス) Firebase Hosting: 無料枠あり DB - Firestore: 無料枠あり Functionsが無料で 使えない copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 17

Slide 17 text

無料枠 難しさと解決方法 copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 18

Slide 18 text

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.

Slide 19

Slide 19 text

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.

Slide 20

Slide 20 text

Firebase Functions無料枠 ● 有料課金を登録しないと利用不可 ● クエリベクトルをEmbeddingするに ● Functions以外 選択肢を模索 クエリ側 CPUリソース必要 Embeddingするリソース忘れがち copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 21

Slide 21 text

利用技術 ホスティング Firebase Hosting Embeddingモデル Google Siglip 2 データベース Firestore 近似近傍検索(ANN) 独自工夫+Firestore 認証 Firebase Authentication データ整形 / ベクトル化 Python / CUDA copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 22

Slide 22 text

技術的な工夫 深掘り 3つ Embedding / ANN / DB copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 23

Slide 23 text

ここで決める 3つ copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 24

Slide 24 text

1. Embeddingモデル copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 25

Slide 25 text

画像検索 Embedding (モデル選定 ) ● VLMモデル 比較 ○ OpenAI CLIP ○ Google SigLIP ○ 他 copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 26

Slide 26 text

モデル選定 コードと考察 別プロジェクトで検証: https://github.com/cmscom/image-vector-poc/blob/main/notebooks/24-multilingual-text-search.ipynb copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 27

Slide 27 text

顔認識及び 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.

Slide 28

Slide 28 text

顔認識及び Embedding (認識度確認 ) https://github.com/cmscom/image-vector-poc/blob/main/notebooks/51-face-detection-insightface.ipynb copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 29

Slide 29 text

2. Embedding実行リソース copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 30

Slide 30 text

Embedding をどこでやるか ? (リソース ) ● ● ● ● 画像が増えない(アップロード機能なし) ローカルGPUでEmbeddingし、parquetで管理 メタデータなどを含めてDuckDBを活用 クエリ 時が課題としてど リソースを使うか? ○ ブラウザでEmbeddingできないか? copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 31

Slide 31 text

ブラウザで 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.

Slide 32

Slide 32 text

ブラウザで 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 でも十分実用的

Slide 33

Slide 33 text

ブラウザで Embedding 罠 ● モデルなどをブラウザ内にダウンロード・キャッシュ ○ 約700MB copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 34

Slide 34 text

3. 近似最近傍検索 (ANN) copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 35

Slide 35 text

FirestoreでANN ● Firestoreに 厳密計算 kNN(近傍検索)がある ● Firestore フィルタリング機能が強い で、イベント別 などが可能 copyright © 2026 CMS Comunications Inc. all rights reserved. フィルタ

Slide 36

Slide 36 text

FirestoreでkNN 費用 ● コストが気になる・・・ ○ 1回 検索コストがベクトル数 1 / 100 reads ○ 70Kベクトルあると、 70K / 100 -> 700 reads ○ 1日 無料枠 50K reads ○ つまり、約71回 検索で1日分を消費 ○ (プラス実データ) copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 37

Slide 37 text

Firestoreで独自 ANN ● IVF / Voronoi分割をして、事前枝刈りできないか? ○ 1/10程度にすれ コストも1/10になる ● 事前学習した256分割 セントロイド点を作る ● Firestoreに、ベクトル毎に2個を点(ID)をアサインする ● ブラウザでクエリベクトル セントロイド所属 ID取得 ● 上位5までクエリベクトル セントロイドIDとOR検索 copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 38

Slide 38 text

k-means copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 39

Slide 39 text

k-means copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 40

Slide 40 text

システム構成 copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 41

Slide 41 text

制約事項 中でシステム構築 工夫を紹介した。 少し別 copyright © 2026 CMS Comunications Inc. all rights reserved. 視点から見ていく

Slide 42

Slide 42 text

● PyCon JP 23,000枚 ● 無料枠へ 写真を検索 こだわり ● 技術的な工夫 深掘り 3つ ● 検索技術を再確認 ● ベクトル検索 現状 課題 ● ベクトル診断とそ 他 例 copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 43

Slide 43 text

検索技術を再確認 モデル / アルゴリズム / DB を置き換えて考える copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 44

Slide 44 text

そもそも検索と ● ● ● ● ● 検索って何やっている ? キーワード検索 場合 ? ベクトル検索に置き換えると? 画像検索に置き換えると? そ 他 工夫 copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 45

Slide 45 text

検索で重要な要素 (再掲) copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 46

Slide 46 text

検索って何やっている copyright © 2026 CMS Comunications Inc. all rights reserved. ?

Slide 47

Slide 47 text

キーワード検索 場合 copyright © 2026 CMS Comunications Inc. all rights reserved. ?

Slide 48

Slide 48 text

ベクトル検索に置き換えると copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 49

Slide 49 text

画像検索に置き換えると copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 50

Slide 50 text

PyCon JP Image Search copyright © 2026 CMS Comunications Inc. all rights reserved. 構成

Slide 51

Slide 51 text

検索で重要な要素で選択した物 copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 52

Slide 52 text

ANNとDB 関係 ● ベクトルDBに 、ANN 機能が付いている ● HNSW / IVF系などがある ● Firestore 専用 ベクトルDBで ない で少量にしか使えな い ○ 工夫をすることである程度 データ量まで対応できた ○ IVF 考え方 別 DBへ 応用、超大規模10億件(1B)とか に応用可能 copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 53

Slide 53 text

ベクトル検索 現状 簡単そうで難しい事 みんなで考えて行きたい copyright © 2026 CMS Comunications Inc. all rights reserved. 課題

Slide 54

Slide 54 text

1. ベクトル検索ランキング copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 55

Slide 55 text

ベクトル検索で DBで行う2つが関連 ● マッチング ○ 探したい対象 物か? ● ランキング ○ 順位付けをどうするか? 完全一致 なく、マッチングとランキング バランス copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 56

Slide 56 text

似ている物を出してくる ● 「赤いスポーツカー」を検索して、ヒットしない ずが ● 「赤い」や「カー」などに引っ張られて何か出してくる RAGに使うときに copyright © 2026 CMS Comunications Inc. all rights reserved. 確認が必要

Slide 57

Slide 57 text

ベクトル検索で 、ベクトル 近傍をみる ● ベクトルが数値的に近いとか似ているという評価 ● そ 評価が目的 タスクと合っているか? ● どうやって評価すべきか? 検索 ランキング タスクベースにするに copyright © 2026 CMS Comunications Inc. all rights reserved. 別 奥が深い。 評価指標も用いる

Slide 58

Slide 58 text

2. ベクトル検索とフィルター copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 59

Slide 59 text

ベクトル検索 メタデータフィルター ● 事前フィルター出来るか? ○ HNSW アルゴリズム的に事前に間引きにくい ● 事後フィルターで良い か? ○ フィルター条件が厳しい場合にTop-500に候補がある? 製品毎にさまざまな工夫がされている copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 60

Slide 60 text

データ 追加・削除にも工夫が必要 ● ベクトルが大幅に増えると ○ HNSWネットワークや配置バランスが崩れる事がある ● 削除もさまざまなアプローチが実践されている ● メインDBと2相コミットするか or 非同期更新するか 現段階でこれが決まり !! という決定打がない copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 61

Slide 61 text

ベクトル診断とそ 他 copyright © 2026 CMS Comunications Inc. all rights reserved. 例

Slide 62

Slide 62 text

Vector Search Checkup ● ベクトルデータ ローカル診断ができるアプリ ● ベータ版公開 https://vectorcheckup.cmscom.jp/ copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 63

Slide 63 text

博物館 所蔵検索 ● 100万件 CC-0 画像データを検索 ● Firestoreで同様に動作している 当社 デモアプリとして内部公開 copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 64

Slide 64 text

ベクトル検索 相談窓口 ● 当社 サービスとして相談窓口を開設 ● 無料相談が可能 ○ https://vector.cmscom.jp copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 65

Slide 65 text

まとめ copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 66

Slide 66 text

制約事項 中でシステム構築 工夫を紹介し、 検索全般、ベクトル検索 課題を紹介 copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 67

Slide 67 text

検索で重要な要素で選択した物 copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 68

Slide 68 text

トーク 後 ディスカッション ● 同様に画像検索や顔認識をやってみたいという人と話して、公 開コードを見ながらポイントを示したい ● VLMモデル 選定方法や実際に行ったPoC前 事前検証方法 を、別途個人で公開しているNotebookを元に紹介やディスカッ ションしたい ● ベクトル検索 詳しい人とベクトル 近似最近傍検索 現状と 課題について、無料枠で 限界など 苦労話をしたい copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 69

Slide 69 text

(本日夕方 ??) オープンスペースを開催 & 会場内にいます で声を掛けてください copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 70

Slide 70 text

トーク 補助 ベクトル検索と ● 理解を助ける薄い本 【なぜ「意味」でさがす か】 ○ 本日、無料配布します。 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.

Slide 71

Slide 71 text

ご清聴 ありがとうございました。 copyright © 2026 CMS Comunications Inc. all rights reserved.

Slide 72

Slide 72 text

リファレンス ● ● ● ● ● ● 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.