Bildbeskrivning och visuella frågor
Kunna använda en vision–language-modell och utvärdera dess svar.
Förkunskaper
Intuition
En vision–language-modell är en språkmodell som fått se. Receptet är förvånansvärt enkelt:
- En förtränad bildkodare (oftast en ViT) delar bilden i patchar och ger en vektor per patch.
- En liten projektion översätter de vektorerna till samma rum som språkmodellens tokenembeddingar.
- De projicerade patcharna läggs först i tokenströmmen, som om de vore ord.
- Språkmodellen fortsätter som vanligt.
Efter det är en bild bara ett gäng tokens, och allt språkmodellen kan — följa instruktioner, resonera stegvis, svara i JSON — fungerar på bilder.
Det som går fel är också förutsägbart: modellen beskriver det som brukar finnas i sådana bilder, snarare än det som faktiskt finns. Fråga «vilken färg har bilen?» om en bild utan bil, och många modeller svarar «blå».
Formellt
Visuella hallucinationer har tre typiska former:
| Typ | Exempel |
|---|---|
| Objekt | beskriver saker som inte finns i bilden |
| Attribut | rätt objekt, fel färg, antal eller position |
| Relation | rätt objekt, fel förhållande mellan dem |
Orsaken är att språkmodellens prior är stark. Har den sett hundratusentals köksbilder med både spis och kylskåp kommer den att nämna kylskåpet även när det inte syns. Bildsignalen konkurrerar med statistiken i språket, och förlorar ofta.
Motmedel, i ordning efter hur mycket de hjälper:
- Ge modellen en väg ut. «Svara "framgår inte av bilden" om informationen saknas» — den enskilt mest effektiva instruktionen.
- Fråga snävt. «Finns det en bil i bilden? Ja eller nej.» slår «beskriv bilden».
- Kräv lokalisering. Be om ungefärlig position för varje påstått objekt; hallucinerade objekt får ofta orimliga koordinater.
- Upplösning. Många fel är helt enkelt att texten eller detaljen inte syns — höj upplösningen eller beskär innan du skyller på modellen.
- Två frågor i motsatt riktning. «Finns X?» och «Saknas X?» ska ge konsekventa svar.
Utvärdering. Undvik att luta dig mot CIDEr och BLEU för bildbeskrivning — de mäter ordöverlapp med referenser och missar faktafel helt. Bättre:
| Metod | Mäter |
|---|---|
| POPE-liknande ja/nej-frågor | objekthallucination, balanserat |
| VQA-träffsäkerhet på egen data | din faktiska uppgift |
| Påståendekontroll mot bilden | trohet per påstående |
| Lokaliseringskrav | om objektet verkligen sågs |
POPE-tricket är enkelt och bra: för varje bild, fråga både om objekt som finns och om objekt som inte finns men som brukar förekomma tillsammans med dem. Andelen falska «ja» är ett rakt mått på hallucinationsbenägenhet.
Kod
import json, torch
from transformers import AutoProcessor, AutoModelForVision2Seq
namn = "HuggingFaceM4/idefics2-8b"
pro = AutoProcessor.from_pretrained(namn)
m = AutoModelForVision2Seq.from_pretrained(namn, torch_dtype=torch.bfloat16, device_map="auto")
STRIKT = ("Svara ENDAST utifrån bilden. Om något inte går att se, skriv \"framgår inte av bilden\". "
"Svara som JSON: {\"objekt\": [{\"namn\": str, \"position\": \"uppe vänster|...\"}], "
"\"osaker_pa\": [str]}")
def fraga(bild, text, max_tokens=300):
meddelanden = [{"role": "user", "content": [{"type": "image"}, {"type": "text", "text": text}]}]
prompt = pro.apply_chat_template(meddelanden, add_generation_prompt=True)
ind = pro(text=prompt, images=[bild], return_tensors="pt").to(m.device)
ut = m.generate(**ind, max_new_tokens=max_tokens, do_sample=False)
return pro.decode(ut[0, ind["input_ids"].shape[1]:], skip_special_tokens=True)
# POPE-liknande hallucinationsmätning
def pope(bild, finns: list[str], finns_inte: list[str]):
def ja(obj):
svar = fraga(bild, f"Finns det {obj} i bilden? Svara endast Ja eller Nej.", 5)
return svar.strip().lower().startswith("ja")
tp = sum(ja(o) for o in finns)
fp = sum(ja(o) for o in finns_inte)
return {"recall": tp / max(len(finns), 1),
"falska_ja": fp / max(len(finns_inte), 1)}
print(pope(bild, finns=["en stol", "ett bord"], finns_inte=["en katt", "en lampa"]))
# {'recall': 1.0, 'falska_ja': 0.5} ← hälften av de icke-existerande objekten «syntes»
Kör pope över ett par hundra bilder innan ni litar på en VLM i produktion. falska_ja är det tal som avgör om modellen duger, och det står aldrig i modellkortet.
Behärskning innebär
- Använder en VLM för beskrivning och visuella frågor
- Utvärderar svaren mot bilden
- Känner igen och hanterar visuella hallucinationer
Logga in för att göra övningarna och bygga upp din behärskning.
Källor
- arXiv — Visual Instruction Tuning (LLaVA) — arXiv (öppen åtkomst; licens per artikel)
- arXiv — Evaluating Object Hallucination in Large Vision-Language Models (POPE) — arXiv (öppen åtkomst; licens per artikel)
- Hugging Face — dokumentation (Apache-2.0) — Apache-2.0