最近想用 clip-interrogator 來批次解析圖片

找到這個

https://github.com/pharmapsychotic/clip-interrogator

依照官方範例

from PIL import Image
from clip_interrogator import Config, Interrogator
image = Image.open(image_path).convert('RGB')
ci = Interrogator(Config(clip_model_name="ViT-L-14/openai"))
print(ci.interrogate(image))
照理講這樣應該能用

但是執行下去就跑出

The size of tensor a (8) must match the size of tensor b (64) at non-singleton dimension 0
這個錯誤

很明顯是模型的構造跟權重檔案對不上

但是這個配對應該都是固定的阿

沒理由出錯

 

然後我找到這篇文章

https://github.com/pharmapsychotic/clip-interrogator-ext/issues/59

 

就是說

transformers 版本要在 4.26.1 以下

我測試後發現可行

但是執行起來很慢

預測會在 flavor chain 這動作上卡很久

發現預測時候可以用

ci.interrogate_fast
這樣會快很多

然後模型也不用太大就是

這邊貼上我的程式碼

from PIL import Image
from clip_interrogator import Config, Interrogator
import torch
import csv
import os

print("torch.cuda.is_available() = ", torch.cuda.is_available())

inputDir = 'images/'
csv_file_path = 'data.csv'

ci = Interrogator(Config(
        clip_model_name     = "ViT-L-14/openai",
        )
    )
    
with open(csv_file_path, mode='w', newline='', encoding='utf-8') as file:
    writer = csv.writer(file)

    for root, dirs, files in os.walk(inputDir):
        for imgF in files:
            image = Image.open(root + imgF).convert('RGB')
            # imgDesc = ci.interrogate(image)
            imgDesc = ci.interrogate_fast(image)
            writer.writerow([imgF, imgDesc])

 

就是讀取後寫入CSV

給大家參考囉