Imbetten der Bildeinbettungen nicht erzeugen: Die Größe des Tensors A (1246) muss mit der Größe des Tensors B (77) in de
Posted: 05 Mar 2025, 07:33
Ich verwende ein Modell für Satztransformatoren, um Einbetten von Bilddateien (PIL-Image-Datei) zu erstellen. Es gibt jedoch den Fehler im Titel. Ich habe eine Reihe von Dingen versucht, um es zu lösen, aber ohne Erfolg. Ich denke, es kann eine einfache Lösung geben, aber ich kann sie nicht finden.
Ich habe versucht, den Tensor abzuschneiden, aber ich konnte keinen Weg finden, dies zu tun.>
Code: Select all
import pandas as pd
from sentence_transformers import SentenceTransformer
import os
import numpy as np
from PIL import Image, ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True
image_files = ['.jpg', '.jpeg', '.png']
class Analyzer:
def __init__(self):
self.image_model = SentenceTransformer("clip-ViT-B-32")
def analyze_directory(self, path):
files_data = []
with os.scandir(path) as dir_iter:
for entry in dir_iter:
try:
if entry.is_file():
_, ext = os.path.splitext(entry.name)
if ext in image_files:
try:
with Image.open(os.path.join(path, entry.name)) as img:
img.convert("RGB")
file_data = {
"Path": entry.name,
"Content": img,
"Type": "image"
}
except Exception as e:
file_data = {
"Path": entry.name,
"Content": "",
"Type": "image"
}
else:
file_data = {
"Path": entry.name,
"Content": "",
"Type": "unknown"
}
files_data.append(file_data)
except Exception as e:
continue
df = pd.DataFrame(files_data)
embeddings = []
for _, row in df.iterrows():
if row["Type"] == "image":
try:
img = img.resize((224, 224))
# Convert PIL Image to tensor
img_tensor = np.array(img)
# Normalize pixel values to [-1, 1] range expected by CLIP
img_normalized = (img_tensor / 255.0 * 2.0) - 1.0
img_batch = np.expand_dims(img_normalized, axis=0)
embedding = self.image_model.encode(str(img_batch)).numpy()[0]
except Exception as e:
raise RuntimeError(f"Failed to generate image embeddings: {str(e)}")
else:
# Handle unknown types
embedding = np.zeros(384)
embeddings.append(embedding)
embeddings = np.array(embeddings)
return embeddings