Visio-kielimallit: kuvan alueista esityksiksi
Visio-kielimalli (vision-language model, VLM) yhdistää kuvallista tietoa ja kieltä. Se voi vastata kuvaa koskevaan kysymykseen, kuvailla näkymää tai valita tekstin avulla olennaista kuvasisältöä. Kuvapiirteiden ja kielen välinen laskentapolku vaihtelee arkkitehtuureittain.
Tavallinen lähtökohta jakaa kuvan pieniin osiin (patches). Kukin osa muuttuu vektoriksi, jota kuvankooderi käsittelee. Sijaintitieto kertoo kooderille osien alkuperäiset paikat.
Pikseleistä kuvaosien vektoreiksi
NumPy-funktio näyttää lineaarisen kuvaosaupotuksen. image on muotoa height × width × channels; korkeus ja leveys ovat jaollisia arvolla size. Opittu projektio on muotoa size² × channels kertaa haluttu tokenileveys.
import numpy as np
def patch_tokens(image, size, projection):
height, width, channels = image.shape
grid = image.reshape(height // size, size, width // size, size, channels)
patches = grid.transpose(0, 2, 1, 3, 4).reshape(-1, size * size * channels)
return patches @ projection
Muodonmuutos ja ulottuvuuksien vaihto säilyttävät kunkin osan pikselijärjestyksen mutta järjestävät osat riveiksi. Matriisikertolasku muuntaa pikseliarvot opituiksi piirrekoordinaateiksi. Tämä on syöteoperaatio, ei kokonainen kuvankooderi.
Kielimalli tarvitsee liitoksen
LLaVA:n kaltaiset arkkitehtuurit syöttävät koodatut kuvapiirteet liitoskerroksen kautta kielimallille. Muut rakenteet käyttävät risti-attentionia kuvalliseen esitykseen. Kielijärjestelmä voi tämän jälkeen tuottaa seuraavat tokenit kysymyksen ja kuvapiirteiden perusteella.
Suurempi tarkkuus voi tuottaa lisää kuvaosia tai -laattoja eikä yhtä suurempaa yleistä ”kuvatokenia”. Se lisää laskentaa ja voi säilyttää yksityiskohtia, jotka katoaisivat koko kuvaa pienennettäessä.
Pienen tekstin lukeminen ja ”vasemmalla”–”oikealla”-suhteiden erottaminen vaativat enemmän kuin objektien nimeämistä. Niihin tarvitaan hyödylliset kuvalliset esitykset ja oikea sijaintitulkinta. Sujuva kuvaus ei yksin osoita kumpaakaan.