Vision Encoder
encode_image(images)
Encode images into embedding vectors.
from multimodal import VisionEncoder
encoder = VisionEncoder.from_pretrained("clip-vit-l14")
# Single image
embedding = encoder.encode_image(image) # [1, 768]
# Batch of images
embeddings = encoder.encode_image(images) # [B, 768]
# With preprocessing
embedding = encoder.encode_image(
image,
normalize=True,
return_tensors="pt"
)
Parameters:
images- PIL Image, tensor, or batch of imagesnormalize- L2 normalize output (default: True)return_tensors- Output format: "pt", "np"
Text Encoder
encode_text(texts)
Encode text strings into embedding vectors.
from multimodal import TextEncoder
encoder = TextEncoder.from_pretrained("clip-vit-l14")
# Single text
embedding = encoder.encode_text("a photo of a cat") # [1, 768]
# Multiple texts
embeddings = encoder.encode_text([
"a photo of a cat",
"a photo of a dog"
]) # [2, 768]
# Class prompts for zero-shot
prompts = [f"a photo of a {c}" for c in classes]
text_features = encoder.encode_text(prompts)
tokenize(texts)
Tokenize text for manual processing.
tokens = encoder.tokenize(
texts,
max_length=77,
padding="max_length",
truncation=True
)
# Returns: {"input_ids": [B, 77], "attention_mask": [B, 77]}
Audio Encoder (Whisper)
transcribe(audio)
Transcribe audio to text with timestamps.
from multimodal import WhisperEncoder
whisper = WhisperEncoder.from_pretrained("whisper-medium")
# Basic transcription
result = whisper.transcribe(audio_path)
print(result["text"])
# With options
result = whisper.transcribe(
audio_path,
language="en",
task="transcribe", # or "translate"
word_timestamps=True,
beam_size=5
)
# Access word-level timestamps
for segment in result["segments"]:
for word in segment["words"]:
print(f"{word['text']}: {word['start']}-{word['end']}")
encode_audio(audio)
Get audio embeddings from encoder.
# Get encoder representations
embeddings = whisper.encode_audio(audio) # [B, T, D]
# Pool to single vector
pooled = embeddings.mean(dim=1) # [B, D]
Similarity & Retrieval
compute_similarity(a, b)
from multimodal import compute_similarity
# Image-text similarity
similarity = compute_similarity(
image_features, # [N, D]
text_features, # [M, D]
mode="cosine" # or "dot"
) # [N, M]
# Get predictions
probs = similarity.softmax(dim=-1)
ImageTextRetriever
from multimodal import ImageTextRetriever
retriever = ImageTextRetriever(
vision_encoder="clip-vit-l14",
text_encoder="clip-vit-l14",
index_type="faiss" # or "exact"
)
# Build index from images
retriever.index_images(image_paths)
# Search with text query
results = retriever.search(
query="a sunset over the ocean",
top_k=10
)
for r in results:
print(f"{r['path']}: {r['score']:.3f}")
Visual Question Answering
VQAModel
from multimodal import VQAModel
vqa = VQAModel.from_pretrained("llava-1.5-7b")
# Ask questions about an image
answer = vqa.generate(
image=image,
question="What objects are in this image?",
max_tokens=100,
temperature=0.7
)
print(answer) # "I can see a cat sitting on a couch..."
# Batch processing
answers = vqa.generate_batch(
images=[img1, img2],
questions=["What is this?", "Describe the scene"]
)
Multimodal Fusion
MultimodalFusion
from multimodal import MultimodalFusion
fusion = MultimodalFusion(
vision_dim=768,
text_dim=768,
audio_dim=512,
fusion_type="cross_attention", # or "late", "early"
output_dim=512
)
# Fuse modalities
fused = fusion(
vision_features=img_emb,
text_features=txt_emb,
audio_features=aud_emb # optional
)
# For classification
logits = fusion.classify(fused, num_classes=10)
Configuration
# config.yaml
model:
vision:
name: "clip-vit-l14"
input_size: 224
normalize: true
text:
name: "clip-vit-l14"
max_length: 77
audio:
name: "whisper-medium"
sample_rate: 16000
inference:
device: "cuda"
batch_size: 32
fp16: true
retrieval:
index_type: "faiss"
metric: "cosine"
nprobe: 32