MkItYs

MkItYs > AI・交渉・物語の自動生成 > 

images

系列データの処理とマルチモーダル:Transformer, CLIP

images

マルチモーダルのライブラリ:CLIP



テキストとイメージの相関を示すライブラリに、CLIPがあります。[※1]

拡散モデルでも、指定したテキスト(プロンプト)と生成するイメージの違いを測り〜調整を繰り返しながら、最終のイメージを出力するために使われています。


導入

次から導入します:

$ pip install git+https://github.com/openai/CLIP.git

利用

次は、引数に指定したテキストとイメージの違いがどれだけあるかを、表示するコードになります(数字が大きいほど類似度は高くなります):[※2]

import sys
from PIL import Image
import torch
import clip

imgpth=sys.argv[1] # イメージのパス
txtstr=sys.argv[2] # テキスト
device='cpu'
vtform='ViT-B/32'
cmodel,preprc=clip.load(vtform,device=device)

imgprc=preprc(Image.open(imgpth)).unsqueeze(0).to(device)
txttkn=clip.tokenize(txtstr).to(device)
with torch.no_grad():
  imgftr=cmodel.encode_image(imgprc)
  txtftr=cmodel.encode_text(txttkn)
print(torch.matmul(txtftr,imgftr.T)[0][0]) # 積
print(torch.cosine_similarity(txtftr,imgftr)) # コサイン類似度



※1
テキストとイメージの相関を測るライブラリはCLIP以前も研究〜開発されてきましたが、精度の大きな向上は望めませんでしたーーとくに系列データ(順次構造)になっているテキストは、逐次的に処理するしかなかったため、この部分がボトルネックになっていたためです。その状況を変えたのが、Transformer ですーー系列データを並列に処理できるようになり、処理速度が大幅に向上しました。CLIPはそのTransformer を採用し、それまでになかった規模のテキストとイメージのデータを学習することで、マルチモーダル(異なる種類のデータをあつかうこと)を実現しています。
※2
参考:
https://github.com/openai/CLIP/blob/main/README.md
https://pub.towardsai.net/what-is-clip-contrastive-language-image-pre-training-and-how-it-can-be-used-for-semantic-image-b02ccf49414e