マルチモーダルのライブラリ: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