SlideShare a Scribd company logo
Submit Search
Upload
画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15
Report
Share
S
Shuyo Nakatani
Software Engineer at Cybozu Labs Inc.
Follow
•
1 like
•
2,360 views
1
of
25
画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15
•
1 like
•
2,360 views
Report
Share
Download Now
Download to read offline
Technology
CLIP を使った画像検索を紹介します。学習済みモデルを利用すると、強力な画像検索を簡単に実装できます。
Read more
S
Shuyo Nakatani
Software Engineer at Cybozu Labs Inc.
Follow
Recommended
動作認識の最前線:手法,タスク,データセット by
動作認識の最前線:手法,タスク,データセット
Toru Tamaki
3.3K views
•
128 slides
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料 by
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Yusuke Uchida
16K views
•
38 slides
【DL輪読会】Segment Anything by
【DL輪読会】Segment Anything
Deep Learning JP
4K views
•
24 slides
【DL輪読会】An Image is Worth One Word: Personalizing Text-to-Image Generation usi... by
【DL輪読会】An Image is Worth One Word: Personalizing Text-to-Image Generation usi...
Deep Learning JP
973 views
•
22 slides
Lucas kanade法について by
Lucas kanade法について
Hitoshi Nishimura
20.8K views
•
15 slides
backbone としての timm 入門 by
backbone としての timm 入門
Takuji Tahara
7.4K views
•
19 slides
More Related Content
What's hot
[DL輪読会]画像を使ったSim2Realの現況 by
[DL輪読会]画像を使ったSim2Realの現況
Deep Learning JP
2.3K views
•
15 slides
【DL輪読会】How Much Can CLIP Benefit Vision-and-Language Tasks? by
【DL輪読会】How Much Can CLIP Benefit Vision-and-Language Tasks?
Deep Learning JP
1.1K views
•
27 slides
SfM Learner系単眼深度推定手法について by
SfM Learner系単眼深度推定手法について
Ryutaro Yamauchi
10.6K views
•
33 slides
Domain Adaptation 発展と動向まとめ(サーベイ資料) by
Domain Adaptation 発展と動向まとめ(サーベイ資料)
Yamato OKAMOTO
8.5K views
•
22 slides
画像認識の初歩、SIFT,SURF特徴量 by
画像認識の初歩、SIFT,SURF特徴量
takaya imai
228.6K views
•
22 slides
[DL輪読会]Focal Loss for Dense Object Detection by
[DL輪読会]Focal Loss for Dense Object Detection
Deep Learning JP
14.3K views
•
19 slides
What's hot
(20)
[DL輪読会]画像を使ったSim2Realの現況 by Deep Learning JP
[DL輪読会]画像を使ったSim2Realの現況
Deep Learning JP
•
2.3K views
【DL輪読会】How Much Can CLIP Benefit Vision-and-Language Tasks? by Deep Learning JP
【DL輪読会】How Much Can CLIP Benefit Vision-and-Language Tasks?
Deep Learning JP
•
1.1K views
SfM Learner系単眼深度推定手法について by Ryutaro Yamauchi
SfM Learner系単眼深度推定手法について
Ryutaro Yamauchi
•
10.6K views
Domain Adaptation 発展と動向まとめ(サーベイ資料) by Yamato OKAMOTO
Domain Adaptation 発展と動向まとめ(サーベイ資料)
Yamato OKAMOTO
•
8.5K views
画像認識の初歩、SIFT,SURF特徴量 by takaya imai
画像認識の初歩、SIFT,SURF特徴量
takaya imai
•
228.6K views
[DL輪読会]Focal Loss for Dense Object Detection by Deep Learning JP
[DL輪読会]Focal Loss for Dense Object Detection
Deep Learning JP
•
14.3K views
Semantic segmentation by Takuya Minagawa
Semantic segmentation
Takuya Minagawa
•
111.5K views
【DL輪読会】Perceiver io a general architecture for structured inputs & outputs by Deep Learning JP
【DL輪読会】Perceiver io a general architecture for structured inputs & outputs
Deep Learning JP
•
1.5K views
【メタサーベイ】Video Transformer by cvpaper. challenge
【メタサーベイ】Video Transformer
cvpaper. challenge
•
2.2K views
【メタサーベイ】数式ドリブン教師あり学習 by cvpaper. challenge
【メタサーベイ】数式ドリブン教師あり学習
cvpaper. challenge
•
5.9K views
Transformer メタサーベイ by cvpaper. challenge
Transformer メタサーベイ
cvpaper. challenge
•
27.4K views
全力解説!Transformer by Arithmer Inc.
全力解説!Transformer
Arithmer Inc.
•
9.6K views
SSII2021 [SS1] Transformer x Computer Visionの 実活用可能性と展望 〜 TransformerのCompute... by SSII
SSII2021 [SS1] Transformer x Computer Visionの 実活用可能性と展望 〜 TransformerのCompute...
SSII
•
2.8K views
【DL輪読会】DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Dri... by Deep Learning JP
【DL輪読会】DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Dri...
Deep Learning JP
•
1.4K views
12. Diffusion Model の数学的基礎.pdf by 幸太朗 岩澤
12. Diffusion Model の数学的基礎.pdf
幸太朗 岩澤
•
796 views
【DL輪読会】ViT + Self Supervised Learningまとめ by Deep Learning JP
【DL輪読会】ViT + Self Supervised Learningまとめ
Deep Learning JP
•
4K views
[DL輪読会]NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis by Deep Learning JP
[DL輪読会]NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
Deep Learning JP
•
4.6K views
【メタサーベイ】Vision and Language のトップ研究室/研究者 by cvpaper. challenge
【メタサーベイ】Vision and Language のトップ研究室/研究者
cvpaper. challenge
•
1.8K views
自己教師学習(Self-Supervised Learning) by cvpaper. challenge
自己教師学習(Self-Supervised Learning)
cvpaper. challenge
•
12.8K views
Point net by Fujimoto Keisuke
Point net
Fujimoto Keisuke
•
17.9K views
More from Shuyo Nakatani
Generative adversarial networks by
Generative adversarial networks
Shuyo Nakatani
5.2K views
•
20 slides
無限関係モデル (続・わかりやすいパターン認識 13章) by
無限関係モデル (続・わかりやすいパターン認識 13章)
Shuyo Nakatani
12.6K views
•
23 slides
Memory Networks (End-to-End Memory Networks の Chainer 実装) by
Memory Networks (End-to-End Memory Networks の Chainer 実装)
Shuyo Nakatani
9.5K views
•
25 slides
人工知能と機械学習の違いって? by
人工知能と機械学習の違いって?
Shuyo Nakatani
20.9K views
•
20 slides
RとStanでクラウドセットアップ時間を分析してみたら #TokyoR by
RとStanでクラウドセットアップ時間を分析してみたら #TokyoR
Shuyo Nakatani
3.5K views
•
43 slides
ドラえもんでわかる統計的因果推論 #TokyoR by
ドラえもんでわかる統計的因果推論 #TokyoR
Shuyo Nakatani
10.8K views
•
16 slides
More from Shuyo Nakatani
(20)
Generative adversarial networks by Shuyo Nakatani
Generative adversarial networks
Shuyo Nakatani
•
5.2K views
無限関係モデル (続・わかりやすいパターン認識 13章) by Shuyo Nakatani
無限関係モデル (続・わかりやすいパターン認識 13章)
Shuyo Nakatani
•
12.6K views
Memory Networks (End-to-End Memory Networks の Chainer 実装) by Shuyo Nakatani
Memory Networks (End-to-End Memory Networks の Chainer 実装)
Shuyo Nakatani
•
9.5K views
人工知能と機械学習の違いって? by Shuyo Nakatani
人工知能と機械学習の違いって?
Shuyo Nakatani
•
20.9K views
RとStanでクラウドセットアップ時間を分析してみたら #TokyoR by Shuyo Nakatani
RとStanでクラウドセットアップ時間を分析してみたら #TokyoR
Shuyo Nakatani
•
3.5K views
ドラえもんでわかる統計的因果推論 #TokyoR by Shuyo Nakatani
ドラえもんでわかる統計的因果推論 #TokyoR
Shuyo Nakatani
•
10.8K views
[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl... by Shuyo Nakatani
[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...
Shuyo Nakatani
•
13.4K views
星野「調査観察データの統計科学」第3章 by Shuyo Nakatani
星野「調査観察データの統計科学」第3章
Shuyo Nakatani
•
33.2K views
星野「調査観察データの統計科学」第1&2章 by Shuyo Nakatani
星野「調査観察データの統計科学」第1&2章
Shuyo Nakatani
•
28.7K views
言語処理するのに Python でいいの? #PyDataTokyo by Shuyo Nakatani
言語処理するのに Python でいいの? #PyDataTokyo
Shuyo Nakatani
•
21.2K views
Zipf? (ジップ則のひみつ?) #DSIRNLP by Shuyo Nakatani
Zipf? (ジップ則のひみつ?) #DSIRNLP
Shuyo Nakatani
•
4.6K views
ACL2014 Reading: [Zhang+] "Kneser-Ney Smoothing on Expected Count" and [Pickh... by Shuyo Nakatani
ACL2014 Reading: [Zhang+] "Kneser-Ney Smoothing on Expected Count" and [Pickh...
Shuyo Nakatani
•
5.8K views
ソーシャルメディアの多言語判定 #SoC2014 by Shuyo Nakatani
ソーシャルメディアの多言語判定 #SoC2014
Shuyo Nakatani
•
5K views
猫に教えてもらうルベーグ可測 by Shuyo Nakatani
猫に教えてもらうルベーグ可測
Shuyo Nakatani
•
28.2K views
アラビア語とペルシャ語の見分け方 #DSIRNLP 5 by Shuyo Nakatani
アラビア語とペルシャ語の見分け方 #DSIRNLP 5
Shuyo Nakatani
•
23.2K views
どの言語でつぶやかれたのか、機械が知る方法 #WebDBf2013 by Shuyo Nakatani
どの言語でつぶやかれたのか、機械が知る方法 #WebDBf2013
Shuyo Nakatani
•
11.4K views
Active Learning 入門 by Shuyo Nakatani
Active Learning 入門
Shuyo Nakatani
•
51.8K views
数式を綺麗にプログラミングするコツ #spro2013 by Shuyo Nakatani
数式を綺麗にプログラミングするコツ #spro2013
Shuyo Nakatani
•
50.5K views
ノンパラベイズ入門の入門 by Shuyo Nakatani
ノンパラベイズ入門の入門
Shuyo Nakatani
•
27.4K views
[Kim+ ICML2012] Dirichlet Process with Mixed Random Measures : A Nonparametri... by Shuyo Nakatani
[Kim+ ICML2012] Dirichlet Process with Mixed Random Measures : A Nonparametri...
Shuyo Nakatani
•
87.4K views
Recently uploaded
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」 by
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」
PC Cluster Consortium
68 views
•
12 slides
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向 by
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Hitachi, Ltd. OSS Solution Center.
110 views
•
26 slides
IPsec VPNとSSL-VPNの違い by
IPsec VPNとSSL-VPNの違い
富士通クラウドテクノロジーズ株式会社
610 views
•
8 slides
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」 by
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」
PC Cluster Consortium
29 views
•
36 slides
光コラボは契約してはいけない by
光コラボは契約してはいけない
Takuya Matsunaga
30 views
•
17 slides
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可 by
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可
Hitachi, Ltd. OSS Solution Center.
13 views
•
22 slides
Recently uploaded
(7)
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」 by PC Cluster Consortium
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」
PC Cluster Consortium
•
68 views
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向 by Hitachi, Ltd. OSS Solution Center.
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Hitachi, Ltd. OSS Solution Center.
•
110 views
IPsec VPNとSSL-VPNの違い by 富士通クラウドテクノロジーズ株式会社
IPsec VPNとSSL-VPNの違い
富士通クラウドテクノロジーズ株式会社
•
610 views
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」 by PC Cluster Consortium
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」
PC Cluster Consortium
•
29 views
光コラボは契約してはいけない by Takuya Matsunaga
光コラボは契約してはいけない
Takuya Matsunaga
•
30 views
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可 by Hitachi, Ltd. OSS Solution Center.
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可
Hitachi, Ltd. OSS Solution Center.
•
13 views
定例会スライド_キャチs 公開用.pdf by Keio Robotics Association
定例会スライド_キャチs 公開用.pdf
Keio Robotics Association
•
154 views
画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15
1.
画像をテキストで検索したい! (OpenAI CLIP) VRC-LT #15 2022/11/26
@shuyo
2.
物体検出ベースの画像検索 Google Photos
の検索機能 キーワードで絞り込み 画像からあらかじめ物体検出 今回対象外 顔認識して同一人物をグルーピング。 ラベルを付けておくと名前で検索できる 画像内のテキストで検索(一部の写真?)
3.
困るところ 想定外のキーワードに対応できない 「とんこつラーメン」「シャトルバス」では検索できない
キーワードでしか検索できない 「青いバス」「夜の教会」では検索できない ちょっとでも写っていたらヒットしてしまう 「バス」で検索→
4.
CLIP ってのを使ったら いい感じの画像検索できるよ!
5.
Python 70行 (webサーバ込) import
os, io, base64, glob, tqdm from PIL import Image import tornado.ioloop, tornado.web import torch import japanese_clip as ja_clip device = "cuda" if torch.cuda.is_available() else "cpu" model, preprocess = ja_clip.load("rinna/japanese-clip-vit-b-16", device=device) tokenizer = ja_clip.load_tokenizer() DATASETS = [ "/media/hdd/dataset/imagenette2-320/train/**/*.JPEG", "/media/hdd/dataset/imagenette2-320/test/**/*.JPEG", "/media/hdd/dataset/coco/val2017/*.jpg", "/media/hdd/dataset/coco/test2017/*.jpg", ] imglist = [] for path in DATASETS: imglist.extend(glob.glob(path)) features = [] for path in tqdm.tqdm(imglist): img = Image.open(path) image = preprocess(img).unsqueeze(0).to(device) with torch.no_grad(): features.append(model.get_image_features(image)) features = torch.cat(features) norm = features / torch.sqrt((features**2).sum(axis=1)).unsqueeze(1) def read(path): with open(path, "rb") as f: return base64.b64encode(f.read()).decode("utf-8") def search(query): encodings = ja_clip.tokenize(query, tokenizer=tokenizer) with torch.no_grad(): text_features = model.get_text_features(**encodings) textnorm = text_features / torch.sqrt((text_features**2).sum()) sim = norm.matmul(textnorm.squeeze(0)) topk = torch.topk(sim, 5) return [{"image_base64":read(imglist[topk.indices[i]]), "score":topk.values[i].item()} for i in range(5)] class MainHandler(tornado.web.RequestHandler): def get(self): query = self.get_argument("query", "").strip() if query!="": topk = search(query) else: topk = [] self.render("main.html", query=query, topk=topk) if __name__ == "__main__": dir = os.path.dirname(__file__) app = tornado.web.Application([("/", MainHandler)], template_path=os.path.join(dir, "template"), static_path=os.path.join(dir, "static"), ) app.listen(8000) tornado.ioloop.IOLoop.current().start() あとは CSS と HTML テンプレートだけ
6.
約5万枚の画像から テキストにあう画像を表示 (COCO & ImageNette
データセットより 抜粋) 検索テキストを入力 結果は瞬時に表示(<100ms)
23.
OpenAI CLIP (Contrastive
Language-Image Pre-training) 画像・テキストの組からそれぞれの ベクトル表現を事前学習 正しい組のベクトル表現のコサイン類 似度が大きく、異なる組のが小さくな るように対照学習 Encoder はなんでもいい text: transformer 系 image: ResNet か ViT Radford, Alec, et al. "Learning transferable visual models from natural language supervision." International Conference on Machine Learning. PMLR, 2021.
24.
CLIP で画像検索サービス CLIP
の学習済みモデルを使う 今回利用したのは rinna 社の日本語 CLIP モデル(商用利用可能) https://huggingface.co/rinna/japanese-clip-vit-b-16 画像を固定長ベクトル(512次元)にエンコード&長さ1に正規化 5万枚のベクトル化に約 8分(RTX3060) クエリーテキストをベクトル化し、画像ベクトルと比較 コサイン類似度が大きい画像を検索結果として出力 画像が多ければ SimHash などでコサイン類似度探索を高速化