Consulting Work Blog Kontakt
← Zpět na blog

Atlas ukrytý v našich fotkách: co 67 608 rodinných snímků vědělo o tom, kde jsme byli

Atlas ukrytý v našich fotkách: co 67 608 rodinných snímků vědělo o tom, kde jsme byli

Měl jsem 67 608 fotek. Dvacet let snímků, ty nejstarší z roku 2006, roztroušených po 73 různých fotoaparátech a telefonech, které za tu dobu rodina vlastnila. Všechny byly zazálohované, všechny „v bezpečí“ a naprosto nedosažitelné. Nikdo se neproklikává dvaceti lety fotek zpátky, aby našel jedno odpoledne v konkrétním městečku, protože hledat dá víc práce než si vzpomenout. Ten archiv nebyl bezcenný. Byl to druhý mozek, ke kterému nevedly žádné dveře. Tak jsem ty dveře postavil a na celou tu hromadu jsem pustil AI, abych zjistil, co v ní vlastně je. To, co z toho nakonec vzešlo, nebylo lepší vyhledávací políčko. Byla to sada map, o kterých jsem ani nevěděl, že je v sobě nosím.

Ve zkratce

  • 67 608 fotek za dvacet let a z 73 fotoaparátů, každá dostala strojově čitelný „cit“ pro to, co je na ní.
  • Naučil jsem běžný model svůj osobní vkus na zhruba 1 000 vlastních oblíbených snímcích — žádné obrovské trénování, jen malá nástavba navrch.
  • 53 242 fotek už vědělo, kde vznikly. U těch 14 363, které to nevěděly, model hádal jen z pixelů — působivě a zároveň nespolehlivě.
  • Nudná metoda (doplnit chybějící polohu podle snímků pořízených pár minut před a po) pokaždé porazila tu efektní.
  • Odměnou nebylo vyhledávací políčko. Bylo to 86 cest za dvacet let, vykreslených jako památeční mapy podle stopy, kterou fotky zanechaly.

Tenhle archiv má každá rodina — a má ho i každá firma

Ono to vlastně vůbec není o fotkách. Každá organizace, kterou jsem kdy viděl, sedí na tomtéž, jen ve větším měřítku: dvacet let e-mailů, ve kterých se nedá hledat podle významu, sdílený disk se 40 000 dokumenty a žádnou mapou, roky tiketů z podpory, ve kterých leží odpověď na příští týden, kdyby ji jen někdo dokázal najít. Ta data tam celá jsou, celá zazálohovaná, a přitom prakticky mrtvá, protože probrat je ručně stojí víc, než kolik má cenu kterýkoli jednotlivý nález. Moje galerie byla prostě ta verze takového archivu, která náhodou patřila mně — a dost malá na to, aby se ji jeden člověk pokusil o víkendu probudit.

Cíl byl skromný. Chtěl jsem, aby se dvacet let fotek proměnilo v něco, čeho se opravdu můžu na něco zeptat. Kde všude jsme vlastně byli. Které z nich za něco stojí. Ukaž mi ty dobré od moře, ten rok, kdy se dceři — no zkrátka takovou otázku, na kterou se dá odpovědět, jen když ta hromada ví, co obsahuje. Nic z toho se ze složky s 67 608 bezejmennými soubory nedá vytáhnout. A přitom to všechno leží přímo uvnitř těch snímků a čeká, až je něco přečte.

Krok první: dát každé fotce cit pro to, co je

První krok je ten, který teprve umožní všechno ostatní, a nenápadně hodně zlevnil. Každý snímek prožene přes obrazový model, který obrázek převede na seznam 768 čísel — tzv. „embedding“ —, jenž zachycuje, o čem fotka je. Dvě fotky pláže skončí s podobnými čísly, i kdyby je dělilo jedenáct let a dva kontinenty. Dělá to otevřený, běžně dostupný model; prohnal jsem přes něj všech 67 608 fotek na vlastním počítači, bez cloudu a bez poplatku za jednotlivý snímek.

Jakmile je každá fotka bodem v tomhle prostoru, „hledání“ přestane znamenat názvy souborů a začne znamenat význam. Můžeš obyčejnými slovy poprosit o „zasněženou horskou vesnici“ a dostaneš zpátky ty správné snímky, aniž by je kdy kdokoli oštítkoval. Pro firmu je v tomhle celý ten zlom: embedding je rozdíl mezi archivem, ve kterém grepuješ, a archivem, se kterým si můžeš opravdu povídat. Ten nudný infrastrukturní krok — jednou všechno převést na čísla — je přesně to, co později umožní ty zajímavé otázky.

Krok druhý: naučit ho mému vkusu, ne „dobrému vkusu“

Tady to začalo být osobní a tady se taky skrývá to nejpřenositelnější ponaučení. Existuje hotový model, který hodnotí, jak je fotka „esteticky líbivá“ — s chutí ti řekne, že západ slunce je hezčí než parkoviště. Užitečné, ale ne to, co jsem chtěl. Univerzální líbivost není ta moje. Moje nejoblíbenější fotky bývají technicky ničím výjimečné a osobně nenahraditelné.

Takže místo abych přijal tu obecnou známku, naučil jsem systém svému vkusu. Vzal jsem těch zhruba 1 000 fotek, které jsem si během let označil jako oblíbené, jako příklady „ano“, hromadu odložených záběrů jako příklady „ne“ a nad zmraženými embeddingy jsem natrénoval maličký model. Žádné obrovské trénování — ten těžký model zůstává přesně takový, jaký je —, jen malá nástavba, která se naučí to jediné, co neumí: co se líbí mně.

Fungovalo to líp, než jsem čekal. Na škále od nuly do jedné dostaly fotky, které jsem si ručně vybral jako oblíbené, v průměru 0,84. Celá knihovna měla průměr 0,20. Model se z tisíce příkladů opravdu naučil tvar mé záliby a teď ji dokázal použít na všech 67 608: 7 737 fotek překročilo 0,8 a 5 380 překročilo 0,9 — ručně vybrané to nejlepší, na jehož sesbírání jsem sám nikdy neměl trpělivost. Ponaučení pro každého, kdo má obecný model AI a konkrétní potřebu: vlastního obra trénovat potřebuješ jen málokdy. Stačí ti zmražený obecný model a pár set vlastních označených příkladů, aby ses ho naučil to jediné, co je tvoje.

Krok třetí: poloha, kterou nikdo nezaznamenal

Pak přišla ta část, která z vyhledávacího políčka udělala atlas. Z 67 608 fotek jich 53 242 už v sobě neslo GPS souřadnice, které do nich vepsal telefon, jenž je pořídil. Už to samo o sobě je mapa dvaceti let. Jenže 14 363 fotek nemělo žádnou polohu — starší fotoaparáty, osekaná metadata, screenshoty okamžiků.

Tak jsem se je pokusil vrátit na mapu — a právě tady se to efektní a to nudné utkalo tváří v tvář. U 10 867 z nich jsem použil model, který hádá, kde na Zemi snímek vznikl, jen z pixelů — bez metadat, jen podle toho, jak vypadá světlo a krajina. To, že tohle vůbec funguje, je vážně ohromující. Zároveň si tím ale jen málokdy je jistý — a poctivě to přiznává, průměrná jistota modelu byla 0,04: řekne ti, že pláž je „nejspíš středomořská”, a splete se dost často na to, abys nemohl věřit žádnému jednotlivému tipu.

Zbylých 3 496 jsem doplnil tím nudným způsobem: když fotka nemá polohu, ale snímky pořízené tři minuty před ní a po ní ji mají, byla skoro určitě na témže místě. Průměrná jistota téhle metody byla 0,74. Není to nic okázalého, funguje to jen tam, kde sousedi existují, a mělo to pravdu skoro pokaždé. Efektní model na pixely šel na mapy jako slabá nápověda; nudná interpolace šla jako fakt. Právě tahle propast — působivé, ale nejisté versus nudné, ale spolehlivé — je to nejužitečnější, co jsem si znovu osvojil, a platí to o každém předvádění ve stylu „koukni, co umí AI“, jaké ti kdy ukážou.

Dvacet let, osmdesát šest cest, vykreslených podle stopy

Jakmile každá fotka měla polohu — zaznamenanou, nebo dopočítanou — stopa se sama seskupila do 86 samostatných cest, dvaceti let. A cesta se souřadnicemi a daty už není seznam. Je to trasa. Tak jsem každou nakreslil na satelitní mapu — přesně tak, jak si ji vlastně chceš pamatovat.

Cesta napříč americkým Jihozápadem, zrekonstruovaná z GPS v našich fotkách: New York, Houston, San Antonio, Albuquerque, Grand Canyon, Los Angeles
Americký Jihozápad, 2017 — trasa složená podle GPS ukrytého v našich fotkách.

Tahle začala jako značka letu — „přílet z Moskvy“ do New Yorku, pak skok dolů do Houstonu — a stala se třemi tisíci kilometrů amerického Jihozápadu, celým obloukem od Golfského pobřeží až k Los Angeles, vyznačeným podle pořadí, ve kterém fotky vznikaly. Žádný itinerář jsem si nevedl. Vedl ho fotoaparát.

Německá Romantická cesta přes Bavorsko, nakreslená podle našich fotek: Würzburg, Rothenburg, Dinkelsbühl, Nördlingen, zámek Neuschwanstein a dolů do Füssenu
Bavorská Romantická cesta — tatáž cesta, přehraná z naší geolokované galerie.

Romantická cesta, smyčka z domova a zpátky, kde se každé městečko, ve kterém jsme zastavili, vynořilo jako popsaný bod jen proto, že jsme tam udělali snímek. Z toho týdne se nedochoval žádný plán. Tahle mapa vznikla celá podle toho, kde cvakla spoušť.

Západní Turecko z galerie: Istanbul a dál k Burse, dolů po egejském pobřeží přes Izmir a Manisu
Západní Turecko, z Istanbulu k Egejskému moři — další trasa získaná z metadat fotek.

Žádná z těchhle map ještě před měsícem neexistovala a všechny informace v nich existovaly celou tu dobu. To je to, co mi pořád vrtá hlavou. Nic jsem nepřidal. Ty cesty už byly zakódované ve dvaceti letech fotek; jen se nedaly přečíst, dokud každý snímek nevěděl, kde a kdy vznikl. Ty mapy jsou archiv, který konečně nahlas říká to, co odjakživa věděl.

Co bylo a co je, řečeno na rovinu

PředtímPotom
Fotky67 608 neprohledatelných souborůprohledatelné podle významu, slovy
Kvalitakaždý záběr v hromadě stejnýmůj vlastní vkus, 5 380 nejlepších nahoře
Poloha53 242 na mapě, 14 363 ztracenýchkaždá fotka umístěná — zaznamenaná, nebo dopočítaná
Dvacet lethromada bez dat86 cest, vykreslených jako mapy

Co bych příště udělal jinak

Na začátku jsem příliš dlouho věřil tomu efektnímu. Model určující polohu z pixelů je opravdový zázrak a já chtěl, aby byl hrdinou — aby nad těmi 14 363 neumístěnými fotkami mávl kouzelným proutkem a všechny mi je vrátil. Z toho mě musely vymluvit jeho vlastní hodnoty jistoty, které potichu křičely „v žádném jednotlivém případě mi nevěř“. Poctivý závěr tu byl od začátku: spolehni se na tu nudnou, spolehlivou metodu všude, kde se hodí, a tu efektní degraduj na pouhou nápovědu. Příště uvěřím číslům dřív než předváděčce.

To větší ponaučení pro každého, kdo sedí na mrtvém archivu a má ho za ztracený případ, zní, že se ekonomika obrátila a většina lidí si toho nevšimla. Přečíst dvacet let nestrukturovaného materiálu dřív znamenalo zaplatit člověka, který tím projde. Teď ta dřina — pochopit, co každá položka je, ohodnotit ji podle tvého vlastního úsudku, ba i obnovit metadata, která se nikdy nezaznamenala — běží levně, často rovnou na tvém vlastním počítači. Ten archiv nikdy nebyl bezcenný. Jen čekal, až cena za položení otázky klesne skoro na nulu — a to se už stalo.

Kde bys začal, kdybys věděl, že právě ten archiv, který všichni odepsali, teď jde probudit za jeden víkend?

Stack: Python · EXIF · SQLite

Potřebujete něco podobného pro svou vlastní firmu? Podívejte se, jak můžu pomoct →