În prezent cele mai avansate modele LLM multimodale sunt cele proprietare, dar noul model Molmo pare a dori să lanseze o provocare acestora. Molmo se alătură modelelor LLM multimodale de dimensiuni mici precum Qwen2-Vl, Llama 3.2 vision sau Phi 3.5 vision care sunt de tip open source și pot fi utilizate direct pe dispozitivele utilizatorilor fără a mai recurge la API-uri.
1. Introducere
În mod tradițional pentru a obține rezultate bune, modelele LLM sunt antrenate pe seturi mari de date. Acest lucru presupune un efort semnificativ, iar marii furnizori de sisteme AI au recurs la diferite tehnici inovative precum folosirea datelor sintetice și utilizarea altor limbaje LLM care să genereze corespondența între imagini și textele descriptive ale acestora.
Molmo a ales calea dificilă, respectiv folosirea oamenilor pentru a descrie în limbaj natural ceea ce văd în imagini. Acest lucru duce uneori la descrieri lungi și complexe de până la 90 de secunde care transcrise se pot întinde pe mai multe pagini de text.
Rezultatul e spectaculos, iar Molmo 72B dovedește o calitate mult mai mare decât modelele proprietare consacrate precum GPT-4o, Claude Sonet 3.5 sau Gemini 1.5.
2. Provocările antrenării modelului
Oamenii nu sunt identici și nu produc rezultate uniforme. Fiecare sesizează alte detalii în imagini sau are un stil propriu de a descrie ce dorește. Unii folosesc cuvinte puține enumerând obiectele din imagini, iar alții își folosesc imaginația și fac corelații la care nimeni nu se gândește în afară de ei.
Din acest motiv, creatorii Molmo au stabilit ca regulă generală folosirea unei descrieri vocale, în limbaj natural care să cuprindă cât mai multe detalii, informații despre obiectele identificate, precum și despre poziționarea lor în imagini.
S-au folosit întrebări standard precum:
- ce reprezintă imaginea la prima vedere?
- câte obiecte sunt în imagine?
- ce fel de obiecte sunt în imagine?
- dacă există text care este acesta?
- unde sunt poziționate obiectele în imagine?
- există detalii subtile care nu sunt sesizate imediat?
- ce obiecte sunt în fundal și în prim plan?
- care sunt nuațele și culorile folosite?
- care este stilul imaginii?
Răspunsurile umane au fost apoi transcrise printr-un sistem de recunoaștere vocală, iar rezultatele au fost procesate cu un model LLM care le-a uniformizat și rezynar.
Au fost folosite 712 000 de imagini diferite.
După antrenarea inițială a urmat o etapă de antrenare supervizată care a folosit alte modele LLM pentru a pune întrebări pe seama descrierilor și a identifica noi alte potențiale informații.
Astfel, un operator uman a selectat imagini și a generat întrebări pe seama lor, iar modelul LLM a dat răspunsuri. Dacă operatorul nu a acceptat răspunsul atunci a furnizat modelului motivele refuzului și a rugat modelul să facă corecțiile necesare. S-au folosit 162 000 întrebări puse pe 73 000 de imagini.
Aceeași stategie a fost aplicată imaginilor care conțineau text, cod software, reprezentări grafice sau imagini precum ceasuri analogice.
3. Instalare Molmo
Modelul LLM Molmo este disponibil gratuit pe platforma HuggingFace în mai multe variante sau pentru testare direct pe website-ul furnizorului.
Pentru testarea locală am ales să instalăm versiunea Molmo 7B-D care are o dimensiune de aproximativ 34 GB, dar poate fi rulată local fără probleme.
Pentru utilizarea interferenței prin python va fi necesar să instalăm câteva librării:
pip install einops torchvision
pip install git+https://github.com/huggingface/transformers
Un exemplu de cod python este următorul:
from transformers import AutoModelForCausalLM, AutoProcessor, GenerationConfig
from PIL import Image
import requests
# load the processor
processor = AutoProcessor.from_pretrained(
'allenai/Molmo-7B-D-0924',
trust_remote_code=True,
torch_dtype='auto',
device_map='auto'
)
# load the model
model = AutoModelForCausalLM.from_pretrained(
'allenai/Molmo-7B-D-0924',
trust_remote_code=True,
torch_dtype='auto',
device_map='auto'
)
# process the image and text
inputs = processor.process(
images=[Image.open(requests.get("https://picsum.photos/id/237/536/354", stream=True).raw)],
text="Describe this image."
)
# move inputs to the correct device and make a batch of size 1
inputs = {k: v.to(model.device).unsqueeze(0) for k, v in inputs.items()}
# generate output; maximum 200 new tokens; stop generation when <|endoftext|> is generated
output = model.generate_from_batch(
inputs,
GenerationConfig(max_new_tokens=200, stop_strings="<|endoftext|>"),
tokenizer=processor.tokenizer
)
# only get generated tokens; decode them to text
generated_tokens = output[0,inputs['input_ids'].size(1):]
generated_text = processor.tokenizer.decode(generated_tokens, skip_special_tokens=True)
# print the generated text
print(generated_text)
4. Teste Molmo 7B-D
Pentru a testa performanțele Molmo vom încerca să vedem cum descrie câteva imagini clasice și ce precizie are la extragerea textului (OCR).
Vom începe cu OCR:
Textul extras în format json este:
{
"magazine": {
"title": "Lyceria & Co.",
"issue": "2024",
"publisher": "Fashion Magazine",
"website": "www.reallygreatsite.com",
"issueNumber": "01"
},
"mainArticle": {
"title": "The Art of Dressing: Expressing Identity Through Personal Style",
"subtitle": "How Fashion Choices Reflect and Influence Individuality and Culture"
},
"sections": [
{
"title": "Fashion and Self-Perception",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam vulputate magna at justo commodo. Ut sagittis est lacinia. Duis tincidunt elementum eros at varius tellus rutrum et."
},
{
"title": "Fashion and Social Change",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam vulputate magna at justo commodo. Ut sagittis est lacinia. Duis tincidunt elementum eros at varius tellus rutrum et."
},
{
"title": "Mental Impact of Clothing Choices",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam vulputate magna at justo commodo. Ut sagittis est lacinia. Duis tincidunt elementum eros at varius tellus rutrum et."
}
]
}
Am remarcat că modelul nu identfică textul unei secțiuni, dar în rest identificarea literelor din text decurge fără probleme.
Al doilea test de OCR este mai simplu:
Textul returnat este:
{
"quote": "It was the best of times, it was the worst of times, it was the age of wisdom, it was the age of foolishness...",
"format": {
"type": "paragraph",
"spacing": "double"
},
"punctuation": {
"periods": 3,
"comma": 2
}
}
Următoarele teste vizează descrierea imaginilor.
Am instuit modelul Molmo să descrie imaginea și să genereze o poveste despre ceea ce vede, iar rezultatul este interesant:
Sarah and Michael were strolling down the bustling city street, hand in hand, enjoying a peaceful evening together. Sarah, wearing her favorite red dress, was lost in thought about their upcoming vacation, while Michael, in his casual blue plaid shirt, was deep in conversation about work.
Suddenly, Michael's head whipped around, his eyes wide with surprise. "Oh my," he gasped, his lips curling into an odd expression. Sarah, following his gaze, saw a woman in a blue shirt and jeans walking past.
"What is it, honey?" Sarah asked, her brow furrowing with concern.
Michael's mouth formed an "O" shape as he continued to stare. "I can't believe it," he muttered. "It's like seeing a ghost!"
Sarah looked confused. "What do you mean? Is that woman someone you know?"
Before Michael could answer, a group of people walked by, their laughter echoing down the street. Sarah elbowed Michael gently, pointing to the group. "Hey, look over there!" she said, trying to distract him from whatever had caught his attention.
As they continued their walk, Sarah couldn't help but wonder what had so captivated Michael. Was it the woman in blue? Or something else entirely? She made a mental note to ask him about it later, hoping to add a touch of mystery to their next date night.
Molmo dă viață personajelor și – ceea ce este interesant – descrie și forma buzelor bărbatului din imagine.
Pentru ultima imagine din test, Molmo nu a avut probleme:
The image displays five raw T-bone steaks arranged in a row on a dark blue surface. These steaks are characterized by their distinctive T-shaped bones protruding upwards, showcasing a beautiful marbling of fat and lean meat.
In the background, there's a white countertop with a gray base, which serves as a bar. Behind this bar, a variety of liquor bottles are visible, though they're slightly out of focus. Some identifiable brands include Jack Daniel's whiskey and Bacardi rum. The assortment of bottles suggests this could be a home bar or a small restaurant setting.
The composition of the image is striking, with the vibrant red of the raw steaks contrasting sharply against the dark blue surface and the neutral tones of the bar in the background. This creates an appetizing and visually appealing scene that would likely appeal to steak enthusiasts or those who appreciate fine dining.
5. Concluzii
Molmo 7B D este un model care se descurcă foarte bine și poate fi utilizat în aplicații care necesită computer vision de precizie ridicată precum citirea unor date furnizate de senzori, identificarea obiectelor din mediul înconjurător (de exemplu pentru roboți) sau pur și simplu pentru a genera descrierea unor imagini, pentru îmbunătățiri pentru SEO-ul unui website.
Molmo nu are o dimensiune la fel de mică ca alte modele open source, ci mai curând medie și pentru un răspuns rapid necesită o placă grafică cu resurse sporite (și aici mă refer la suficientă memorie VRAM), dar în schimb produce rezultate foarte bune.
Cu siguranță Molmo poate fi antrenat pe seturi de date specifice și printr-o cuantizare adecvată să fie redus la o dimensiune mult mai mică.