Budova rozsáhlého modelu textu na obrázek, jako je PRX, začíná jednou věcí: daty. Hodně jich. Ale ne jen tak ledajakými – musí být různorodá, přesně popsaná a efektivně uložená. Zde je návod, jak jsme k této výzvě přistoupili.
Hlavní zásady pro předtrénovací data
Naším primárním cílem bylo sestavit velký a různorodý dataset pro předtrénování. V této fázi se model učí vizuální koncepty – objekty, scény, osvětlení, kompozici. Pokrytí a různorodost jsou mnohem důležitější než dokonalost jednotlivých obrázků. Široký korpus naučí model o vizuálním světě více než menší, pečlivě vybraný, i když je mnoho obrázků obyčejných snímků. Přílišné filtrování podle estetiky by zúžilo distribuci a model by přišel o koncepty, které by později nemohl získat zpět. Vyleštěné generace pocházejí z dolaďování a preferenčního sladění na malých, kurátorských sadách. Předtrénování je pro šíři; dolaďování je pro vkus.
Smíchali jsme veřejné a interní datasety, přičemž jsme upřednostňovali šíři a stávající kurátorství. Tam, kde zdroje již byly filtrovány na kvalitu, deduplikovány a očištěny od nevhodného obsahu a osobních údajů, jsme na tuto práci navázali. Zdroje přicházely v různých formátech – některé s obrázky, jiné jako metadata s popisky – které jsme standardizovali. Tento pragmatický přístup nám umožnil rychle sestavit solidní výchozí dataset pro předtrénování 7B modelu, i když nebyl absolutně nejlepší možný.
Naše filozofie popisků: používejte dlouhé, přesné popisy všeho na obrázku. Jak jsme viděli v části 2, přechod z krátkých na dlouhé popisky výrazně zlepšil kvalitu vzorků. Věrné popisování mění potenciální šum – screenshoty, reklamy, loga – na ovladatelné atributy, které může model vyvolat nebo se jim vyhnout. Proto bylo naše filtrování záměrně mírné: odstranili jsme jen to, co bylo skutečně nepoužitelné.
Pro datové formáty jsme použili Mosaic Streaming a MDS pro distribuované trénování v kombinaci s Mosaic Composer pro nenáročnou a flexibilní pipeline. Datasety MDS se snadno míchají a zamíchávají a podporují trénování přímo z objektového úložiště, jako je S3 nebo GCS. MDS je však rigidní – přidávání sloupců nebo filtrování vyžaduje prohledání a přepsání celého datasetu. Pro feature engineering a kurátorství jsme použili Lance, sloupcový formát s levným predicate pushdown, skalárními indexy a vektorovým vyhledáváním, ideální pro vytváření a prozkoumávání datasetů s miliardami řádků.

Tyto dva formáty se doplňují: Lance pro vytváření, MDS pro streamování.
Pro kódování textu jsme dříve předpočítávali textové latenty pomocí T5Gemma a ukládali je jako byty v MDS. S PRX jsme přešli na Qwen3-VL a počítáme textové latenty za běhu během trénování. Spuštění textového enkodéru uvnitř trénovací smyčky stojí asi 3–4 % propustnosti (zhruba jeden den navíc při 30denním běhu), ale udržuje MDS shardy mnohem menší – dostatečně malé na to, aby se celý dataset vešel na SSD-backed sdílený souborový systém místo streamování z objektového úložiště. Také nám to umožňuje později změnit textový enkodér, aniž bychom přepisovali terabajty uložených latentů, což jsme přesně udělali při přechodu na Qwen3-VL.
Pro kódování obrázků jsme použili JPEG s kvalitou 92 místo bezztrátového PNG. Reálné obrázky jsou již několikrát JPEG-komprimované, takže jsme změřili dopad. Při opakovaných cyklech dekódování/kódování na vysoce rozlišených (1–2 MP) a nižších rozlišeních (0,25–0,5 MP) je první překódování s kvalitou 92 nepostřehnutelné. Každý další cyklus přidá téměř nic – JPEG konverguje do stabilního stavu a i po 10 cyklech zůstávají obrázky dobře v nepostřehnutelném rozsahu. PNG by bylo 3–10× větší bez vjemového zisku.
Také jsme testovali, zda trénování na JPEG mění výstup modelu. Natrénovali jsme dva identické modely PRX na 1024px na stejných obrázcích – jeden uložený jako PNG, druhý jako JPEG s kvalitou 92. Oba se trénovaly stejně dobře podle našich metrik a generace byly prakticky k nerozeznání. Když jsme odhadovali kvalitu JPEG výstupů pomocí porovnávání kvantizačních tabulek, míra detekce (podíl generací s detekovatelnou kvantizační strukturou) byla 12 % pro JPEG-trénovaný a 10,8 % pro PNG-trénovaný, s průměrnou odhadovanou kvalitou JPEG 39,6 vs. 42,1. Rozdíly jsou zanedbatelné. Pro rozsáhlé trénování textu na obrázek nepřidává vysoce kvalitní JPEG úložiště nic měřitelného. Pro data citlivá na artefakty používaná v jiných modelech Photoroom, jako jsou AI Shadows, stále spoléháme na PNG.
Vytváření datasetu v Lance
Nelze interaktivně prozkoumávat Parquet tabulky se stovkami milionů řádků. Proto ukládáme data v Lance, kde můžeme efektivně indexovat, dotazovat a filtrovat. Lance nám umožňuje skenovat a vybírat podmnožiny dat bez přepisování všeho, což z něj dělá správný nástroj pro kurátorství datasetů ve velkém měřítku.
„Lance je sloupcový datový formát s levným predicate pushdown, skalárními indexy a vektorovým vyhledáváním – správný nástroj pro vytváření a prozkoumávání datasetů s miliardami řádků.“ – Photoroom Engineering
Použili jsme Lance k čištění, deduplikaci a filtrování našich dat. Například jsme odstranili obrázky s nízkým estetickým skóre nebo nevhodným obsahem pomocí predicate pushdown, abychom se vyhnuli skenování irelevantních řádků. Také jsme vytvořili podmnožiny pro různé fáze trénování – předtrénování, dolaďování a vyhodnocování – bez duplikování dat. Jakmile byl dataset připraven, exportovali jsme ho do MDS pro streamování během trénování.
Popisky pomocí modelu vidění a jazyka
Pro generování přesných, dlouhých popisků jsme použili model vidění a jazyka (VLM) k přepsání všech obrázků. To zajistilo konzistenci a úplnost: každý popisek popisuje každý objekt, scénu a atribut na obrázku. VLM jsme předložili surové obrázky a základní popisky, pokud byly k dispozici, a on vytvořil podrobné popisy, které jsme uložili spolu s obrázky v Lance.
Proces popisování VLM byl spuštěn jednou na celém datasetu. Poté jsme ručně ověřili vzorek popisků, abychom zajistili kvalitu. Tento přístup nám poskytl bohatý, popisný korpus, který výrazně zlepšil výkon modelu, jak ukázaly naše dřívější experimenty.
Do budoucna plánujeme dále vylepšit naši datovou pipeline – prozkoumat nové zdroje dat, zlepšit kvalitu popisků a optimalizovat úložné formáty. Cílem je neustále posouvat hranice toho, co modely textu na obrázek dokážou, počínaje daty, která je živí.



