Computer vision: the image as measurement
Explanation
Magyarázat
Hajdu Csaba, 2026
Computer vision: the image as measurement
Mi romlik el a modell előtt — kalibráció, cellaméret, csempézés —, milyen feladattípusok vannak és mit jelent a címkéjük az adatban, és mit mérünk valójában, amikor egy képi modellt jónak mondunk.
Hajdu Csaba, 2026
The semester
Három hiba, amelyik a modell előtt keletkezik
Ez a modul a gépi látásról szól, és rögtön az elején elmondom, mi lesz a vezérfonal. A kép nem illusztráció, hanem MÉRÉS. Van mértékegysége — milliméter per képpont —, van referenciája, és van hibája. Ebben a blokkban három olyan hibát nézünk meg, amelyik a modell ELŐTT keletkezik. Ezeket egyetlen háló sem javítja meg, mert nincs bennük az információ, amit elvesztettünk.
A skála a távolsággal arányos. Aki síkon kívül kalibrál, arányos méretbeli hibát kap.
Ez a hiba RENDSZERES, nem véletlen: több felvétel átlagolása nem csökkenti. A mérési lánc hibája csak a mérési láncban javítható — a kalibráló etalont a tárgy síkjába kell tenni.
Az oldalsó rajz a `cv-calibration` demóé, és a jobb oldali oszlop a meglepő: a lencsetorzítás a SAROKBAN 10,5 % hibát okoz, miközben a képmező felénél csak 2,6 %-ot. Egy 85 mm-es tárgy a sarokban 76,1 mm-nek látszik — anélkül, hogy bármi hibásnak tűnne a képen.
A `cv-calibration` demó esete: 5 %-kal távolabb kalibrálva.
h=100 * (2,1 / 2 - 1)=5% méretbeli hiba
Húzd a csúszkát, és nézd, mi mozdul.
Két csúszka: hol volt a kalibráló etalon, és hol van a tárgy. Az alapbeállítás öt százalék eltérés — és a méretbeli hiba pontosan öt százalék. Nézd meg, hogy a hiba ARÁNYOS: tíz százalék távolsághiba tíz százalék méretbeli hibát ad. És ami a fontosabb: ez RENDSZERES hiba. Nem csökken attól, hogy több felvételt készítesz, mert minden felvételen ugyanabba az irányba téved. A mérési lánc hibája csak a mérési láncban javítható.
A demó a mért görbét a zárt alakkal is összeveti: az eltérés 2,22e-16, vagyis a számábrázolás pontossága. Ehhez jön hozzá a lencsetorzítás, ami viszont NEM arányos: a képmező felénél −2,6 %, a sarokban −10,5 %. A kettő külön hibaforrás, és külön is kell kezelni őket.
Az ábra betöltése…
Itt a teljes mérés. A bal oldali panel a távolsághibát mutatja: egyenes arány, és a mért pontok a zárt alakon ülnek. A jobb oldali a lencsetorzítás a képmező sugara mentén — és ez nem lineáris, hanem a szélek felé gyorsuló. Ezért van az, hogy a középen mért tárgy pontos, a sarokban mért pedig tíz százalékkal téved. Ha a mérési feladatod méretbecslés, akkor vagy torzításkorrekciót kell futtatnod, vagy a képmező közepére kell tenni a tárgyat.
A demó a zárt alakkal való egyezést is kiírja: 2,22e-16. Ez a szám nem a modell jósága, hanem a mérés önellenőrzése — ha ez eltérne, a szimuláció lenne hibás, nem a képlet.
A cella betöltése…
A cella itt fut. A csavar a torzítási együttható: erősítsd mínusz nulla nulla nyolcra, és nézd meg, mennyit visz el a képmező széle. Ebből megtudod, hogy a saját objektíveddel mekkora képmezőrészt szabad mérésre használni — és ez a szám a projekt első oldalára való.
A torzítás korrigálható, ha a kamerát bekalibráljuk — sakktáblamintával, néhány tucat felvételen. A modul projektjei ezt nem követelik meg, de a mérés határát ki kell mondani: melyik képmezőrészen belül hiszed el a saját számodat.
A hiba nem a tábla méretétől függ, hanem a KERÜLET/TERÜLET aránytól.
A második hiba a cellaméret. Egy műholdas vagy drónos rács celláinak egy része a táblaszélen ül: félig tábla, félig út vagy árok. Ezek a keverékképpontok, és az átlagot LEFELÉ húzzák, mert a táblán kívüli érték kisebb. A demó ezt két táblaalakon mérte meg, azonos területtel. A zömök táblán harminc méteres cellánál a képpontok tizennégy egész egy százaléka kevert. A keskeny táblán ugyanez sokkal rosszabb — mert nem a terület számít, hanem a kerület per terület arány.
Az oldalsó rajz a `cv-resolution` demóé. Mindkét tábla 12,0 hektár, de a zömöké 117,85 m/ha kerület–terület arányú, a keskenyé 216,67 — majdnem kétszeres. Ugyanaz a cellaméret tehát a keskeny táblán közel kétszer akkora hibát okoz, és ezt a tábla mérete nem árulja el.
A hiba a kevert hányad és a kontraszt szorzata. Mindkettő csökkenthető, de máshogy.
A képletből két beavatkozás olvasható ki: kisebb cella (a kevert hányad csökken) vagy negatív puffer (a kevert cellák kiesnek). A második olcsóbb, mert a felbontás pénzbe kerül, a puffer nem.
Az oldalsó rajz tengelye nem nullánál kezdődik, mert mindkét érték negatív: a kérdés az, hogy a nullához képest hol áll. A `cv-resolution` demó mind az öt cellaméretre megmérte, és a pufferelt érték mindegyiken négy tizedesjegyig nulla.
Az ábra betöltése…
A teljes mérés. Nézd meg a két táblaalak görbéit egymás mellett: azonos területnél a keskeny tábla végig rosszabb, és a különbség a cellamérettel nő. És figyeld meg a területhiba oszlopát is — ott van egy tanulságos szabálytalanság: ahol a tábla szélessége éppen egész számú cella, ott a hiba kisebb. Ez nem zaj, hanem a rács és a tábla illeszkedése, és pontosan ezért átlagol a demó több rácseltolásra.
A demó csavarja a tábla területe. Állítsd 2,0 hektárra — egy kisparcellára —, és nézd meg, mit visz el ugyanaz a felbontás. A kerület–terület arány kis táblán sokkal rosszabb, tehát ugyanaz a műhold ott lényegesen kevesebbet ér.
A cella betöltése…
A cella itt fut. Érdemes a saját tábláid alakjával végigszámolni: a kerület és a terület egy térinformatikai fájlból kiolvasható, és onnantól a képlet megmondja, mekkora cellaméretnél mennyi a várható torzítás. Ez az a fajta számítás, amit érdemes egyszer megcsinálni, mielőtt drága felbontást vásárolunk.
A negatív puffer nem ingyen van: 30 méteres cellánál egy cellányi sáv a 12 hektáros zömök táblából nagyjából 1 hektárt visz el. A döntés tehát az, hogy a szél pontatlan adatát hordozzuk tovább, vagy bevalljuk, hogy arról a sávról nincs adatunk.
800 valódi objektum. Átfedés nélkül 815, elegendő átfedéssel pontosan 800.
A harmadik hiba a csempézés. A nagy felvételt darabokra vágjuk, mert egyben nem fér a memóriába — és a csempék határán álló objektumok vagy kettévágódnak, vagy mindkét csempén megjelennek. A demó nyolcszáz objektumot tett egy kétezerszer kétezres képre, és megmérte, mennyit számol a csempézés. Átfedés nélkül nyolcszáztizenötöt. Az átfedés növelésével a hiba csökken — de csak akkor, ha az átfedés legalább akkora, mint az objektum ÁTMÉRŐJE.
Az oldalsó rajz a `cv-tiling` demóé, és a jobb szélén van a legtanulságosabb pont: 32 képpontos átfedésnél összevonás NÉLKÜL 1284 objektum jön ki 800 helyett — a nagy átfedés önmagában nem megoldás, hanem rontás. Az átfedés és az összevonás együtt működik, külön egyik sem.
Az ábra betöltése…
A teljes görbe. A két sorozat közti rés az, amit az összevonás megtakarít. Az objektum sugara hét képpont, tehát az átmérője tizennégy — és nézd meg, hol találja el a pontos darabszámot az összevonásos sorozat: pontosan tizennégynél. Ez nem véletlen egybeesés, hanem a szabály: az átfedés legyen legalább akkora, mint a legnagyobb objektum átmérője.
A demó csavarja az objektum sugara. Állítsd 14-re, és nézd meg, hova tolódik az a pont, ahol a darabszám pontossá válik. Ha a szabály igaz, a 28 képpontos átfedésnél kell megtörténnie.
A cella betöltése…
A cella itt fut. Ez a demó azért fontos, mert a hiba itt nem a modellben van: a detektálás TÖKÉLETES, minden objektumot megtalál. A darabszám mégis téved, pusztán a feldarabolástól. Ez a modul egyik visszatérő gondolata — a feldolgozási lánc hibája nem a modell hibája, és nem is ott javítható.
Az összevonás a gyakorlatban nem magától értetődő: el kell dönteni, két közeli detektálás ugyanaz az objektum-e. A demó a távolságot használja küszöbként; valódi rendszerben az átfedési arány (IoU) szokásos.
A modul eszközeit is érdemes egészben látni. A lánc hét lépés, és a modell csak az ötödik. Ez nem stílus: a hiba nagy része az első négyben keletkezik, és ott is kell megjavítani. Felvétel, georeferálás, előfeldolgozás, címkézés, modell, futtatás, mérce. Figyeld meg, hogy a modell két oldalán is van munka — és hogy a lánc a MÉRCÉVEL ér véget, nem a modellel.
A lánc első négy lépése eszközökkel megoldott és tanulható; az ötödik cserélődik évente. Ezért van az, hogy egy modellcsalád nevét nem érdemes megtanulni, a formátumokét és a mérce kiszámítását viszont igen — azok a következő modellcsaláddal is ugyanazok maradnak.
Egy drónos számlálás rendszeresen három százalékkal kevesebbet mutat, mint a kézi számlálás. A detektáló modell F1-értéke 0,95. Mi az első, amit megnézel?
Egy drónos számlálás rendszeresen három százalékkal kevesebbet mutat, mint a kézi számlálás. A detektáló modell F1-értéke 0,95. Mi az első, amit megnézel?
a kép széle felé gyorsuló geometriai torzítás; a képmező felénél 2,6 %, a sarokban 10,5 % méretbeli hiba
Az első blokk fogalmai. Mindhárom a képalkotásról szól, nem a modellről — és mind a három a modell előtt dől el.
A feladattípust a CÍMKE alakja adja, nem a modell
Az első blokk arról szólt, mi romlik el a modell ELŐTT. Ez a blokk arról, hogy mi az a feladat, amit egyáltalán megfogalmazunk. És itt jön a modul leggyakoribb hibája: a feladatot a modell után választják — valaki talál egy jól működő detektort, és onnantól minden kérdés detektálási kérdés lesz. Pedig a feladattípus nem modell. Címkeforma.
Amikor a modellmérőszám szép, a feladaté pedig nem
A második blokk arról szól, mit mérünk valójában, amikor egy képi modellt jónak mondunk. Öt mérés, és mind az ötben ugyanaz a szerkezet: a szokásos modellmérőszám szép, a FELADAT mérőszáma viszont nem. Ez a modul legfontosabb blokkja, mert a projektmunkában ezen múlik minden.
Alulról felfelé nő a címke felbontása, és vele a címkézés ára. Legalul a képszintű címke: egy szó az egész képre. Fölötte a folytonos szám ugyanoda. Aztán a doboz objektumonként, aztán a képpontonkénti osztály, aztán a képpontonkénti EGYED. A kulcspont külön ág: nem több terület, hanem megnevezett pontok. És legfölül a követés, ami időben is összeköt. A lényeg a nyíl iránya: durvább címkéből a finomabb kérdés NEM válaszolható meg. Ez a címkefelbontás felső korlátja, és ezt a projekt legelején kell eldönteni.
A sorrend nem nehézségi, hanem címkefelbontás szerinti: felfelé haladva egy kép címkézése percekből órákba megy át. Ezért a helyes kérdés nem az, hogy „melyik a legjobb feladat”, hanem az, hogy MI A LEGDURVÁBB címke, amelyből a feltett kérdés még megválaszolható.
Két szorzás, két kivonás, egy küszöb. Déli fényen 93,3 % — ez az alapvonal.
A normálás azért segít, mert a megvilágítás erőssége mindhárom csatornát nagyjából ugyanazzal a szorzóval változtatja: a hányadosban ez kiesik. A színHŐMÉRSÉKLET változását viszont nem üti ki, mert az a csatornákat KÜLÖNBÖZŐ mértékben mozgatja.
Az oldalsó rajz a `cv-baseline` demóé. A nyers ExG délután 5,1 pontot esik, a normált viszont nem esik — 95,0 és 95,2. A jel tehát megvolt délután is: a demó kiszámolja, hogy újrahangolt küszöbbel 94,3 %-ot lehetne elérni. Nem a képlet romlott el, hanem a küszöb csúszott el 0,0826-tal.
| feladat | mi van a címkefájlban | mi a mérce |
|---|---|---|
| képosztályozás | képazonosító + egy osztálynév; egyetlen szöveges oszlop | pontosság, F₁, ROC-AUC — osztályonként, ha kiegyensúlyozatlan |
| képi regresszió | képazonosító + egy szám | MAE, RMSE, R² — ugyanúgy, mint táblázatos adaton |
| objektumdetektálás | objektumonként (osztály, x, y, szélesség, magasság), normálva vagy képpontban | mAP IoU-küszöbön (0,5 vagy 0,5–0,95), precizitás és fedés méretsávonként |
| szemantikus szegmentálás | osztálytérkép: a képpel azonos méretű egész értékű raszter | IoU vagy Dice osztályonként, majd átlag (mIoU) |
| példányszegmentálás | egyedenként poligon vagy futáshossz-kódolt (RLE) maszk + osztály | maszk-alapú mAP; darabszámnál külön a darabszámhiba |
| kulcspont-detektálás | objektumonként pontlista (x, y, látható-e) rögzített sorrendben | OKS-alapú mAP; a láthatósági jelző kezelése külön szabály |
| számlálás | darabszám képenként, vagy sűrűségtérkép | a darabszám hibája ÉS annak IRÁNYA — nem a detektálási F₁ |
| objektumkövetés | képkockánként (azonosító, doboz); az azonosító képkockákon át állandó | MOTA és IDF1 külön; a detektálás és az azonosság két különböző hiba |
Ez a blokk legfontosabb táblázata. A középső oszlop az, amit a legtöbb tananyag kihagy: hogy néz ki az adat. Nem elvont — ez az, amit a címkéző eszköz kiír, és amit a betöltőnek olvasnia kell. A jobb oldali oszlop pedig a mérce, és figyeld meg, hogy MINDEGYIK más. Ugyanaz a modell két feladathoz két különböző számot ad, és a kettő nem hasonlítható össze.
A leggyakoribb néma hiba a formátumkonverzió: a koordináták normáltak-e nullától egyig, vagy képpontban vannak; a doboz középpont-plusz-méret vagy bal-felső-plusz-jobb-alsó alakú; a kezdőpont a kép bal felső vagy bal alsó sarka. Mindhárom eltérés ugyanúgy néz ki a fájlban — és a modell tanul is valamit, csak nem azt.
Az ábra betöltése…
Itt a teljes mérés. A bal oldali panel a két megvilágítás hisztogramja a nyers indexszel: látszik, hogy a délutáni eloszlás egyben eltolódott, és a rögzített küszöb rossz helyre került. A jobb oldalon ugyanez normálva: a két eloszlás egymásra esik, és ugyanaz a küszöb mindkettőn jó. Ez a modul egyik legfontosabb képe, mert megmutatja, hogy az üzemi romlás gyakran nem a modellben van, hanem egyetlen beállított számban.
A demó csavarja a délutáni fény sötétítése. Állítsd 0,5-re, és nézd meg, meddig bírja a normálás. Van egy pont, ahol már az sem elég — és azt a pontot érdemes tudni, mielőtt egy rendszert éles üzembe adunk.
Képosztályozásegyetlen osztálycímke a TELJES képre; a modell bármiből dolgozhat, ami a képen van — a háttér is tanulható.
borítottság, beérettség, becsült tömeg. Ugyanaz a szerkezet, más címketípus.
lokalizáció nélkül nincs mire visszakérdezni
A két legolcsóbb címkeforma, és a két legkönnyebben félrevezető. Az ok közös: egyikben sincs lokalizáció, tehát a modell BÁRMIBŐL dolgozhat, ami a képen van. A rozsdás leveleket délután fényképezték, az egészségeseket délelőtt? A modell a fényt tanulja meg, és a teszten is jól teljesít — amíg a teszt ugyanabból a napból van. Ezt a hibát nem a modell mérőszáma mutatja meg, hanem a szétvágás, és ez a következő blokk tárgya.
Az oldalsó rajz a `cv-leakage` demóé: ugyanaz a modell, ugyanaz az adat, kétféle szétvágás. Véletlen szétvágáson 99,8 %, növény szerintin 64,0 — a különbség 35,8 százalékpont, és nem a modellről szól. A mechanizmus mérve is van: a tesztképek 98,4 %-ának a legközelebbi szomszédja ugyanannak a növénynek egy másik felvétele. A modell tehát az EGYEDET ismeri fel, nem a betegséget.
A cella betöltése…
A cella itt fut. Ez negyven sor numpy, és kilencvenöt százalékot ad. Mielőtt bárki hálót tanít erre a feladatra, ezt le kell futtatnia — mert ez lesz az a szám, amit meg kell verni. És ha a háló kilencvenhat százalékot ad tízezer címkézett képért cserébe, az nem győzelem, hanem költség.
A demó a küszöb elmozdulását is kiírja: −0,0826. Ez az a szám, ami egy üzemi rendszerben figyelhető: ha a küszöb körüli eloszlás elmozdul, riasztani lehet, még mielőtt a pontosság érezhetően romlana.
Objektumdetektálásbefoglaló doboz és osztály EGYEDENKÉNT — darabszámhoz elég, területhez durva (a doboz hátteret is tartalmaz). · Szemantikus szegmentálás: képpontonkénti osztály, egyedek nélkül — területarányra pontos, darabszámra alkalmatlan. · Példányszegmentálás: képpontonkénti maszk egyedenként — terület ÉS darabszám, a legdrágább címkézéssel. · A választás a KÉRDÉSBŐL jön: borítottság
A három lokalizáló feladat, és a különbségük egy mondatban. A detektálás dobozt ad: gyors, olcsó, és a darabszámhoz elég. A szemantikus szegmentálás képpontonkénti osztályt ad: TERÜLETRE pontos, de két összeérő levél egyetlen folt — darabszámhoz alkalmatlan. A példányszegmentálás mindkettőt adja, és háromszor-ötször annyi címkézési időbe kerül. A választás tehát nem pontossági kérdés: a feltett kérdés dönti el. Ha a kérdés borítottság, szemantikus kell. Ha darabszám, detektálás. Ha mindkettő, példány.
Az oldalsó rajz a `cv-tiling` demóé, és a lokalizáló feladatok közös gyakorlati korlátjára mutat: a nagy felvételt csempékre kell vágni, és a csempehatárra eső objektum kétszer félbevágva egyszer sem lesz teljes. Átfedés nélkül a mért darabszám 786 a valódi 800 helyett; az objektum átmérőjével egyenlő, 14 képpontos átfedés pontosan 800-at ad. Az ábra az ELTÉRÉST rajzolja, nem a darabszámot: így a tengely nullától indulhat, és a nulla itt valódi jelentéssel bír — az a hibátlan mérés. A darabszámot rajzolva a 786 és a 800 közti különbség csak csonkolt tengelyen látszana, azt pedig az 5. hét kifejezetten tiltja.
| megközelítés | mikor elég | mi az ára |
|---|---|---|
| színindex és küszöb (ExG, NDVI) | zöld kontra talaj, borítottság, folthatárok | nulla címke — de a küszöb megvilágításfüggő |
| klasszikus képfeldolgozás (OpenCV) | alak, méret, kontúr, morfológia; kalibrált mérés | nulla címke — de kézi szabályok, és törékeny |
| előretanított detektor finomhangolása | objektumonkénti számlálás, betegségosztályozás | néhány száz–ezer címkézett kép, és videokártya |
| irányítható szegmentálás (SAM-vonal) | maszk pontból vagy dobozból — CÍMKÉZÉST gyorsít | osztálycímkét nem ad: nem tudja, mit rajzolt körbe |
Négy szint, növekvő költséggel. A képlet alapú index ingyen van, és a demónk szerint kilencvenöt százalékot ad — ez az alapvonal. A klasszikus képfeldolgozás akkor jön, ha alakot is kell nézni. Az előretanított detektor finomhangolása akkor, ha az objektumokat egyenként kell megszámolni — és itt már címkézett adat kell. Az irányítható szegmentálás pedig nem osztályozó: címkézést gyorsít. A jobb oldali oszlop a valódi döntés: nem a pontosság, hanem az, mibe kerül.
A sorrend egyben a próbálkozás sorrendje is. A `cv-baseline` demó azért van ebben a blokkban, hogy a legfelső sor ne maradjon ki: 95,0 % normált indexszel, negyven sor numpyból. Aki ezt átugorja, nem tudja, mihez képest jó a modellje.
A Dice és az IoU ugyanazt méri, más skálán. 0,5-ös IoU = 0,67-es Dice — a két szám sosem vethető össze közvetlenül.
Az mAP küszöbfüggése a leggyakoribb félreolvasás: a „mAP 0,72” önmagában nem szám. Az mAP@0,5 megengedő — egy lazán elhelyezett doboz is találat —, az mAP@0,5:0,95 tíz küszöb átlaga, és jellemzően a fele akkora. Ugyanaz a modell mindkettőt adja.
Az IoU szigorúbbsága apró objektumnál drámai: egy 10 képpontos objektumnál két képpont eltolás már 0,5 alá viszi az IoU-t, egy 100 képpontosnál alig mozdítja. Ezért esik a detektálási mérőszám a kis objektumokon — és ezért mér a `cv-metric` demó a legkisebb negyeden 64,9 százalékos fedést a többi 97,2 százaléka helyett.
11,6 pont esés, és a modell közben nem jelez semmit.
Ugyanez a jelenség egy tanult modellen. A demó egy színalapú osztályozót tanít déli fényen, aztán délutánin teszteli. Az esés tizenegy egész hat százalékpont. És most jön a lényeg: a modell NEM JELEZ hibát. A döntési rés — az, hogy mennyire magabiztos — hetven százalékról ötvenre megy, vagyis nem omlik össze. A modell ugyanolyan magabiztosan mond rosszat. Ezért nem elég a modell kimenetét figyelni: a BEMENET eloszlását kell nézni.
Az oldalsó rajz a `cv-domainshift` demóé. A négy oszlop egy sorrendet ad: a képpontonkénti fényerő-normálás a romlásból 22 %-ot hoz vissza, a csatornánkénti szürkevilág 85 %-ot. A különbség oka az, hogy a fény nem csak erősebb vagy gyengébb lett, hanem MÁS SZÍNŰ — és azt csak csatornánkénti korrekció üti ki.
A Dice mindig nagyobb az IoU-nál. A két szám ugyanazt a maszkot írja le — csak más skálán.
d=2 * 0,5 / (1 + 0,5)=0,67Dice
Húzd a csúszkát, és nézd, mi mozdul.
Egy csúszka, és egy számpár, amit érdemes fejben tartani. Állítsd az IoU-t nulla egész ötre: a Dice nulla egész hatvanhét. Nulla egész hétnél nulla egész nyolcvankettő. Nulla egész kilencnél nulla egész kilencvenöt. A Dice MINDIG nagyobb, és a kettő közti rés a középső tartományban a legnagyobb. Aki Dice-t jelent és IoU-t olvas, az minden esetben jobbnak látja a modellt, mint amilyen — és fordítva.
A képlet abból jön, hogy |A∪B| = |A| + |B| − |A∩B|: a metszetet az unióban egyszer, a Dice nevezőjében kétszer számoljuk. Ugyanaz a mennyiség, más normálással — és épp ezért monoton egymás függvénye, tehát RANGSOROLNI mindkettővel ugyanúgy lehet. Csak az abszolút értéküket nem szabad összekeverni.
Az ábra betöltése…
A teljes kép. A bal oldalon a két tartomány színeloszlása, a jobb oldalon a pontosság a négy kezeléssel. A tanulság sorrendje itt is fontos: először MÉRD MEG, hogy van-e eltolódás — ehhez nem kell címke, elég a bemenetek eloszlása. Csak utána válassz korrekciót. Aki fordítva csinálja, az vaktában normalizál, és néha ront vele.
A 8. hét eloszláseltolódás-diája ugyanezt a három fajtát különbözteti meg: itt bemeneti eltolódás van, a kapcsolat maga nem változott. Ezért is működik a korrekció — fogalmi sodródásnál nem működne.
Az ábra betöltése…
Itt a mérés. Kétszáz felvétel, közel huszonnégyezer objektum. Az F-egy nulla egész kilencszáztizennyolc — ezt a számot bátran leírná bárki egy jelentésbe. A darabszám mégis átlagosan mínusz öt egész nyolc százalékkal téved, és kétszáz felvételből SZÁZKILENCVENEN lefelé. Ha a hiba véletlen volna, ez a fele lenne. Az ok a méretfüggés: a legkisebb negyedet a detektor hatvannégy egész kilenc százalékban találja meg, a többit kilencvenhét egész kettőben. A téves riasztások ezt részben elfedik, de nem javítják — egy hiányzó kalász helyére nem az kerül, amit tévesen bejelöltünk.
Ez a dia az egész blokk tétele számokban: a feladat mércéje és a modell mérőszáma nem ugyanaz. A jelentésbe a darabszám hibája ÉS az iránya való, nem az F₁ — mert a felhasználó a darabszámot fogja használni, nem az F₁-et.
A cella betöltése…
A cella itt fut. A csavar a színhőmérséklet-váltás: erősítsd, és nézd meg, meddig bírja a szürkevilág-korrekció. Az önellenőrzés is a cellában van: az azonos fényen mért kilencvenegy egész egy százalék a felső határ — ha egy korrekció ezt túllépné, valami hibás a mérésben.
A döntési rés a leggyakorlatiasabb szám ezen a dián: 70,4 %-ról 50,5 %-ra megy, tehát szűkül, de nem omlik össze. Egy üzemi riasztás, ami csak a magabiztosság csökkenését figyeli, ezt a 11,6 pontos esést nem venné észre.
A darabszám akkor pontos, ha a fedés és a precizitás EGYENLŐ — nem akkor, ha mindkettő magas.
n=0,89 / 0,95=0,94× a valódi darabszám
Húzd a csúszkát, és nézd, mi mozdul.
Két csúszka, és egy képlet, ami az előző dia számát magyarázza. A mért darabszám a valódinak a fedés osztva precizitás-szorosa — ez egyszerű algebra, nem közelítés. A `cv-metric` demó értékeivel: fedés nulla egész nyolcszázkilencvenegy, precizitás nulla egész kilencszáznegyvenhét, a hányados nulla egész kilencszáznégy, tehát mínusz öt egész kilenc százalék. A demó felvételenként átlagolva mínusz öt egész nyolcat mér; a különbség a két átlagolás sorrendjéből jön, nem hibából. És a fontos következmény: a darabszám akkor és csak akkor pontos, ha a fedés és a precizitás EGYENLŐ — nem akkor, ha mindkettő magas.
Ebből az is következik, hogy a küszöb hangolásával a darabszám torzítása kinullázható: lejjebb vitt küszöb nagyobb fedést és kisebb precizitást ad. Ez nem csalás, hanem a feladat mércéjére hangolás — de ki kell mondani, mert a modell így EGY feladatra lesz kalibrálva, és másikra nem.
Az F1 a két mérőszám közepét méri. A darabszám a HÁNYADOSUKAT.
0,891 / 0,947 − 1 = −5,9 %. A mért érték −5,8 %. Vagyis a darabszám hibája nem külön jelenség: a két mérőszám különbségéből pontosan kiszámolható — csak az F1-ből nem.
Az oldalsó rajz a `cv-metric` demóé, és a negyedik oszlop mondja meg az okot: a legkisebb objektumok negyedén a fedés csak 64,9 %. A detektáló a kicsiket veszíti el — és mivel a kicsik mindenhol ott vannak, a hiba rendszeres lesz.
Kulcspont-detektálásmegnevezett pontok objektumonként, rögzített sorrendben, láthatósági jelzővel — méret, tartás, irány mérésére. A befoglaló doboz ezeket nem hordozza.
a MOTA összegzi, az IDF1 külön az azonosságot méri
A két feladat, amit agrárban a legritkábban vesznek elő, pedig gyakran ezek a helyesek. A kulcspont akkor kell, ha a kérdés MÉRET, TARTÁS vagy IRÁNY: a kalász hossza a tövétől a csúcsáig, az állat ízületeinek szöge. Ezt a befoglaló doboz nem hordozza — egy ferdén álló kalász doboza nagyobb, mint egy egyenesé, ugyanolyan hossz mellett. A követés pedig akkor, ha a kérdés IDŐBELI: mennyit mozog egy egyed, mennyit eszik, mikor sántít.
Az oldalsó rajz a `cv-tracking` demóé, és egy meglepő eredményt mutat: a detektálás VÉGIG tökéletes, mégis az egyedek közötti szórás 52 százalékpontról 31-re olvad száz azonosítóváltással. Az azonosítóváltás nem tüntet el időt, csak áthelyezi egyik egyedről a másikra — a csordaszintű átlag ezért pontos marad. Ami elvész, az a KÜLÖNBSÉG: pontosan az, amiért a rendszer épült.
A szokásos találatküszöb 0,5. Ez megállapodás, nem tétel — a feladat dönti el, mennyi elég.
A második alak a számolható: az uniót nem kell külön kiszámolni, mert a két terület összegéből a metszet kivonásával megkapjuk. Ferde vagy hosszúkás objektumnál a befoglaló doboz fele háttér lehet — ott a maszk alapú IoU sokkal szigorúbb, mint a dobozé.
A küszöb megválasztása közvetlenül mozgatja a precizitást és a fedést, tehát az F1-et is — és ezen keresztül a darabszám hibáját, amit a `cv-metric` demó mér. Egy jelentésben ezért az IoU-küszöböt ki kell írni: enélkül két modell F1-értéke nem összehasonlítható.
| agrárkérdés | a hozzá tartozó feladat | a gyakori tévedés |
|---|---|---|
| Mekkora a gyomborítottság a táblán? | szemantikus szegmentálás | detektálás: a doboz hátteret is tartalmaz, tehát a területet felülbecsli |
| Hány kalász van a négyzetméteren? | detektálás vagy sűrűségbecslés | szegmentálás: az összeérő kalászok egyetlen folttá olvadnak |
| Beteg-e ez a levél? | képosztályozás | detektálás: fölösleges címkézés, ha a kérdésben nincs „hol” |
| Milyen arányban érett be a tábla? | képi regresszió vagy szemantikus szegmentálás | osztályozás három kategóriára: a folytonos válasz kerekítése információt dob el |
| Mekkorák az egyedi kalászok? | kulcspont | detektálás: a ferde objektum doboza nagyobb, mint a hossza |
| Hány állat és mennyit mozog? | detektálás + követés | képkockánkénti detektálás követés nélkül: a darabszám jó, az egyedi idő nem |
| Mekkora a kártétel foltja és hány folt van? | példányszegmentálás | szemantikus szegmentálás: területet ad, darabszámot nem |
És a záró táblázat: kérdés, feladat, és a leggyakoribb tévedés. A jobb oldali oszlopot olvasd el figyelmesen — mindegyik sor egy valódi projekthiba. A leggyakoribb közülük az első: valaki gyomborítottságot akar mérni, és detektálást tanít, mert az volt kéznél. A doboz viszont hátteret is tartalmaz, tehát a területet rendszeresen felülbecsli — és ez a hiba nem véletlen, hanem irányított.
Egy szabály, amivel a legtöbb hiba elkerülhető: írd le a kérdést egyetlen mondatban, és nézd meg, milyen SZÁM a válasz. Ha arány, szegmentálás kell. Ha darab, detektálás vagy számlálás. Ha hossz vagy szög, kulcspont. Ha idő, követés. A modellválasztás csak ezután jön.
Az ábra betöltése…
A teljes mérés. A bal oldali panel a darabszám-hiba eloszlása kétszáz felvételen: nézd meg, hogy az egész eloszlás a nulla BAL oldalán ül. Ez a rendszeres torzítás képe. A jobb oldalon a fedés méret szerint — innen jön a magyarázat. A tanulság: ha a feladat számlálás, akkor a jelentésbe a DARABSZÁM hibája való, nem az F1. A modellmérőszám eszköz; a mérce a feladaté.
A demó csavarja a kis objektumok mérete. Állítsd 3,0-ra — vagyis tedd jobbá a detektálót a kicsiken —, és nézd meg, eltűnik-e az alulszámlálás. Ha igen, akkor a diagnózis helyes volt.
A cella betöltése…
A cella itt fut. Ezt a mérést érdemes a saját projektedre is megcsinálni: vedd a detektálásaidat, számold ki az F1-et, aztán számold ki a darabszám hibáját is — és nézd meg, egy irányba téved-e. Ha igen, akkor rendszeres torzításod van, és azt kalibrációval javítani lehet, modellcserével nem feltétlenül.
A rendszeres alulszámlálás egy szorzóval korrigálható — ha stabil. A demó ezt is megadja: a hiba szórása 3,3 százalékpont a −5,8 %-os átlag körül, tehát a korrekció értelmes, de nem tünteti el a bizonytalanságot.
Három fénykép, három predikció, és mérés ground truth nélkül
Eddig szintetikus képeken mértünk, és ennek jó oka volt: ott pontosan tudjuk, mennyi a növény, tehát a hibát a forrásáig lehet vinni. Most megfordítjuk. Három valódi fénykép, szabad licenccel, és három predikció rajtuk: egy képlet, egy kézzel tanított osztályozó, és egy előtanított mély háló. Egyik mérésnél sincs annotált igazságmaszk — és a blokk egyik tanulsága éppen az, hogy enélkül is lehet becsületesen mérni, ha jól teszed fel a kérdést.
99,8 % kontra 64,0 %. A különbséget a szétvágás adja, nem a modell.
A negyedik mérés a 8. hét anyagának képi változata. Száz növény, mindegyikről öt felvétel. Ha képenként sorsolunk szétvágást, ugyanannak a növénynek a képei a tanítóba ÉS a tesztbe is kerülnek — és a modell kilencvenkilenc egész nyolc százalékot ad. Ha növény szerint vágunk, hatvannégyet. Harmincöt egész nyolc százalékpont, amit a rossz szétvágás ingyen ad. A demó a mechanizmust is megméri: véletlen szétvágásnál a legközelebbi szomszéd az esetek kilencvennyolc egész négy százalékában ugyanaz a növény.
Az oldalsó rajz a `cv-leakage` demóé, és a két görbe alakja a lényeg: a véletlen szétvágás görbéje a felvételszámmal NŐ — több kép ugyanarról a növényről több szivárgást jelent. A helyes szétvágásé alig mozdul. A hibás mérés tehát a több adattól látszólag jobb lesz.
Könnyű · nehéz · nulla-kontroll. Ground truth maszk nincs — de a kontrollon ismert a helyes válasz.
A képek nem véletlenül ezek. Az első könnyű eset: zöld kukorica vörös talajon, éles színkontraszt. A második nehéz: zöld zab száraz kukoricaszár alatt, jó részben árnyékban. A harmadik a legfontosabb — sávos talajművelés után gyakorlatilag nincs rajta zöld. Ez a NULLA-KONTROLL, és ez az egyetlen kép, amelynek az igazságát ránézésre ki lehet mondani. Enélkül a másik kettőn csak azt tudnánk mérni, melyik eljárás mást mond; a kontrollal azt is, melyik mond rosszat.
A fényképek Alan Manson felvételei a Wikimedia Commonsról (CC0, CC BY-SA 3.0 és CC BY-SA 4.0); a `kepek/kredit.json` tartja nyilván a szerzőt, a licencet és azt, hogy mit vágtunk le róluk. Az oldalsó rajz előre megmutatja a blokk legmeglepőbb számát: a kontrollon az Otsu 98,8 %-ot jelez ott, ahol nincs zöld.
Az ábra betöltése…
A teljes mérés. Ez az a dia, amit érdemes megjegyezni a projektmunkához: a képi adatnál a szétvágás egysége szinte SOHA nem a kép. Ugyanaz a növény, ugyanaz a tábla, ugyanaz a felvételi nap — mindhárom szivárgási csatorna. A szabály egyszerű: a szétvágás egysége az legyen, amiről a modellnek majd üzemben is nyilatkoznia kell.
A 8. hét blokkos keresztvalidációja ugyanez a gondolat térben: ott a tábla a szivárgás egysége, itt a növény. A mechanizmus azonos — a szomszédság, ami a tanítóban és a teszten is megvan.
Az ábra betöltése…
Itt a mérés, és ezt az ábrát érdemes lassan végignézni. A sorok a képek, az oszlopok az eljárások, a sárga az, amit a gép növénynek nevezett. Felül a kukorica: a nyers zöldindex a talajra is ráfest, a normált szorosabb, az Otsu óvatos. Középen a zab: a nyers index az egész képet befedi, ötvenkilenc százalék. És most nézd meg a legalsó sort, a jobb szélső panelt. Ez a tarlós kép. Nincs rajta zöld. És az egész kép sárgán világít: kilencvennyolc egész nyolc százalék.
Az ok szerkezeti, nem hangolási. Az Otsu azt a küszöböt keresi, amely a hisztogramot két legjobban elkülönülő osztályra bontja — de azt nem kérdezi meg, van-e egyáltalán két osztály. Egyetlen zöld nélküli képen is vág, és a nagyobbik oldalt növénynek nevezi. Ez az az eset, amikor egy adaptív eljárás MINDIG talál valamit, akkor is, ha nincs mit.
A cella betöltése…
A cella itt fut. A csavar az egyedi jel erőssége: gyengítsd nulla egész négyre, és nézd meg, mennyivel kisebb a szivárgás ára. Ebből megtudod, hogy a szivárgás nagysága attól függ, MENNYIRE egyedi a növény — vagyis hogy a te adatodon mekkora kockázat.
A demó a mechanizmust külön is kiírja: a legközelebbi szomszéd 98,4 %-ban ugyanaz a növény. Ez a szám azért hasznos, mert a SAJÁT adatodon is kiszámolható, mielőtt bármit tanítanál — és előre megmondja, hogy a véletlen szétvágás hazudni fog.
A nyers index a fénnyel szorzódik. A normált nem — az f kiesik, azonosan.
A negyedik sor nem trükk, hanem mértékegység-javítás. A kérdés az volt, milyen SZÍNŰ a képpont; a nyers index ehelyett azt is beleméri, mennyi fény érte. A normálás pontosan ezt a fölösleges mennyiséget osztja ki.
A valóságban a kiesés nem tökéletes: a szenzor telítődik, és a kiégett képpontból már nem jön vissza információ. A demó mérése ezért nem nullát ad a normált eljárásra, hanem 3,0 százalékpontot — a nyers 24,4-gyel szemben. Nyolcszoros különbség, egyetlen osztásért.
| formátum | ahogy a dobozt leírja | ahol elcsúszik |
|---|---|---|
| COCO JSON | [x_bal, y_felső, szélesség, magasság] képpontban | a sarok vagy a középpont: itt a BAL FELSŐ sarok |
| Pascal VOC XML | [x_min, y_min, x_max, y_max] képpontban | két sarok, nem sarok és méret — más szám négy helyen |
| YOLO szöveges | osztály, x_közép, y_közép, szélesség, magasság — NORMÁLVA | 0 és 1 közötti értékek: képpontként olvasva minden a bal felső sarokba kerül |
| maszk (RLE vagy poligon) | képpontonkénti hovatartozás | a maszk és a doboz nem ugyanaz: egy ferde objektum doboza fele háttér |
És egy gyakorlati dia, ami sok órát megspórol. Három elterjedt címkeformátum van, és a köztük való átváltás a modul leggyakoribb néma hibaforrása. Nem azért, mert bonyolult, hanem mert mindegyik MÁST ért doboz alatt: az egyik két sarkot, a másik középpontot és méretet; az egyik képpontban, a másik a kép szélességére normálva. Ha rosszul konvertálsz, a modell tanul valamit — csak nem azt, amit akartál —, és a hiba csak a kirajzolt dobozokon látszik.
Az ellenőrzés egyetlen lépés, és mindig érdemes megtenni: konvertálás után rajzold ki tíz kép dobozait, és nézd meg a szemeddel. Ez tíz perc, és a leggyakoribb hiba — az elcsúszott koordináta — azonnal látszik rajtuk.
Told a fény csúszkáját. Az index vele mozog — pedig a szín nem változott.
e=2 * (1 * 0,5) - (1 * 0,3) - (1 * 0,3)=0,4ExG
Húzd a csúszkát, és nézd, mi mozdul.
Négy csúszka: a három csatorna és a megvilágítás. Ez a NYERS index. Állítsd be a zöldre nulla egész ötöt, a másik kettőre nulla egész hármat — az index nulla egész négy. Most told a fényt egy egész ötre, és nézd meg a számot: nulla egész hat lett. Ugyanaz a növény, ugyanaz a szín, másfélszeres index. Ha a küszöböd nulla egész ötvenen áll, akkor ez a képpont délelőtt talaj, délután növény.
A következő dia ugyanezt a számot mutatja a normált képlettel. Ott a fény csúszkája NEM mozdít semmit — és ez a két dia egymás mellett többet mond a mértékegység megválasztásáról, mint bármelyik magyarázat.
Tökéletes detektálás mellett is: 100 azonosítócsere = 14,9 pont egyedi hiba.
Az utolsó mérés. Tizenkét egyed, egy óra felvétel, TÖKÉLETES detektálás — minden egyed minden képkockán megvan. Csak az azonosítók cserélődnek néha. A csordaszintű átlag ettől nem mozdul, egyáltalán nem: ha csak összeadjuk az aktív egyedeket, a csere nem számít, mert az egyik egyedtől elvett időt a másiknak adja. Az EGYEDI mérés viszont romlik: száz cserénél tizennégy egész kilenc százalékpont. Ha tehát egyedi viselkedést mérsz, a követés minősége maga a mérés minősége.
Az oldalsó rajz a `cv-tracking` demóé. A csordaszintű hiba végig 0,00 százalékpont — és ez nem mérés, hanem azonosság: a cserék az összeget nem változtatják meg. Ezért van az, hogy egy csordaszintű mutató akkor is szép marad, amikor az egyedi adat már használhatatlan.
Ugyanaz a fény-csúszka, és a szám meg sem rezdül. Az f kiemelhető, tehát kiesik.
e=(2 * (1 * 0,5) - (1 * 0,3) - (1 * 0,3)) / ((1 * 0,3) + (1 * 0,5) + (1 * 0,3))=0,36ExG (normált)
Húzd a csúszkát, és nézd, mi mozdul.
Ugyanaz a négy csúszka, ugyanazok az alapértékek, csak a képlet normált. Told a fény csúszkáját nulla egész háromtól kettőig. A szám NEM mozdul. Nem alig — egyáltalán nem, mert az f a számlálóból és a nevezőből is kiemelhető, és kiesik. Ez az a pillanat, amikor egy mérnöki probléma megoldása nem nagyobb modell, hanem egy osztás.
A csúszkák alsó határa itt 0,01, nem 0: mindhárom csatorna nullájánál a nevező is nulla lenne. A demó kódja ugyanezt a szélső esetet külön kezeli — a fekete képpontra nullát ad, ami a küszöb alatt marad, tehát nem lesz belőle növény.
Az ábra betöltése…
A teljes mérés. A felső görbe az egyedi mérés hibája a cseregyakoriság függvényében: monoton nő. Az alsó vonal a csordaszintű hiba, és az végig a nullán fekszik. Két dolgot érdemes leolvasni. Az első: a csordaszintű nulla nem mérési eredmény, hanem azonosság — az összeg a cseréktől definíció szerint nem változik. A második: a görbe nem egyenletes. Tizenöt cseréig meredeken nő, aztán ellaposodik, mert egy már összekevert egyedet nehéz tovább rontani.
A valódi aktív hányad egyedenként 10,4 és 62,4 % között szór. Egy 14,9 százalékpontos hiba ebben a tartományban a különbségek nagy részét elmossa — vagyis pontosan azt a jelet, amiért az egyedi mérést egyáltalán csináljuk.
Az ábra betöltése…
És itt a söprés. Három panel, mindegyikben ugyanaz a három kép, a vízszintes tengelyen a megvilágítás nulla egész héttől egy egész háromig. A bal panel a nyers index: a zab görbéje negyvenhatról hetvenre mászik, tehát ugyanaz a tábla huszonnégy százalékponttal többnek látszik, ha kisüt a nap. A középső a normált: vízszintes vonalak. A jobb oldali az Otsu — szintén vízszintes, de nézd meg, hol fut a zöld vonal: kilencvenkilencen. Stabilan téved.
Ez a dia párban van az előzővel: ott a képlet mondta ki, hogy az f kiesik, itt a mérés mutatja meg, mennyire esik ki a valóságban. A kettő nem azonos — a szenzor telítődése miatt a normált görbe sem tökéletesen vízszintes —, és éppen ez a különbség az, amiért a képletet le is kell mérni.
A cella betöltése…
Az utolsó cella. A csavar az egyedszám: állítsd harmincra. A kérdés az, hogy nagyobb csordánál ugyanannyi csere mennyit ront. A várakozás az, hogy kevesebbet, mert a cserék több egyed között oszlanak el — de ezt meg kell mérni, nem elég várni.
A valódi aktív hányad egyedenként 10,4 és 62,4 % között szór — éppen ez az, amit egy egyedi viselkedésmérés meg akar fogni. Egy 14,9 pontos hiba ebben a tartományban a jelet nagyrészt elviszi.
Az ábra betöltése…
A második predikció tanul. Kilenc foltot jelöltem meg kézzel ezen a képen — négyet növénynek, ötöt talajnak —, és ez a kép mutatja, hol vannak. Egy dolgot mondok el róla, mert tanulság: az első körben a jelölt növényfoltjaim fele talaj lett, mert kétszáz képponttal mellébecsültem a koordinátákat. Nem hibaüzenet mondta meg. Az, hogy kivágtam a foltokat, egymás mellé raktam, és ránéztem. A rosszul jelölt folt csendben rossz modellt ad.
A jelölés a projekt legdrágább része, és a legkevesebbet dokumentált. A címkézési szabálykönyv — mit számítunk növénynek, mit a részben takart levéllel, mit az árnyékkal — pontosan ugyanolyan adat, mint a kép maga. Ha nincs leírva, a projekt második annotátora más adatot állít elő, mint az első.
Egy istállói kameraredszer csordaszinten stabil aktivitási átlagot mutat, de az állatorvos szerint az egyedi riasztások használhatatlanok. Mi a legvalószínűbb ok?
Egy istállói kameraredszer csordaszinten stabil aktivitási átlagot mutat, de az állatorvos szerint az egyedi riasztások használhatatlanok. Mi a legvalószínűbb ok?
Az ábra betöltése…
Balra a fénykép, középen amit a modell mond: minden képpontra egy valószínűség, sárga a növény. A növények tisztán kirajzolódnak. Jobbra viszont a fontosabb rész. Ugyanaz a modell, ugyanaz az adat, kétféle szétvágás: képpont szerint véletlenül, és folt szerint. A rés a logisztikus regressziónál egy egész kettő, a véletlen erdőnél egy egész nyolc, a magoló 1-NN-nél három egész négy százalékpont. A sorrend a magyarázat: a szivárgás akkor nagy, ha a modell MEGJEGYEZNI tud.
És itt jön a kellemetlen rész: ezen a feladaton a rés még a legrosszabb esetben is csak néhány százalékpont, mert a foltok színben tisztán szétválnak. A rossz szétvágás tehát NEM mindig látszik a számokon — aki csak a képpont szerinti értéket nézi, nem tudja megmondani, szerencséje volt-e. A `cv-leakage` demó ugyanezt egyedek szerint méri, ahol a rés már 35,8 százalékpont.
| mérés | ami szépen néz ki | ami a feladatról szól |
|---|---|---|
| alapvonal | ExG 93,3 % déli fényen | ugyanaz a küszöb délután 88,2 % — a küszöb csúszott, nem a képlet |
| tartományeltolódás | a modell magabiztos marad (rés 50,5 %) | a pontosság 11,6 ponttal esik, és semmi nem jelez |
| detektálás | F1 = 0,918 | a darabszám rendszeresen 5,8 %-kal kevesebb |
| szétvágás | 99,8 % véletlen szétvágással | 64,0 % növény szerint — a különbség a szivárgás |
| követés | csordaszinten 0,00 pp hiba | egyedi szinten 14,9 pp száz azonosítócserénél |
Az egész modul összefoglalása. Minden sor ugyanazt a szerkezetet mutatja: van egy szám, ami szép, és van egy másik, ami a feladatról szól. A projektmunkádban a második oszlop az, amit a beadandó első oldalára kell írni.
A táblázat harmadik oszlopa mind az öt sorban MÉRT szám, nem becslés — a `cv-*` demók futtathatók, és a jegyzetfüzetben mindegyik ott van. Ha egy projektbeadandóban az első oszlop számai szerepelnek csak, akkor a beadandó nem a feladatról szól.
Az ábra betöltése…
A harmadik predikció egy igazi mély modell: a MobileNetV2, ahogy az ImageNet ezer osztályára betanították. Nem tanítjuk tovább, csak megkérdezzük. A kukoricatáblára azt mondja: cserép, huszonnyolc százalék. A zabosra: kalász, harminc. És a tarlós képre — nézzétek meg — lábtörlő, hetvenhét egész két százalék. Hetvenhét százalékos magabiztossággal. Egyik címke sem téves az ImageNet értelmében; egyik sem válasz arra, amit a gazdálkodó kérdez.
A modell az ONNX Model Zoo MobileNetV2-je, Apache 2.0 licenccel; a `modellek/LICENC.md` mondja meg, honnan jött. A YOLO-vonal szándékosan nem jöhetett szóba: annak az AGPL licence a ráépülő művekre is kiterjedne, és ezzel a teljes kurzustárolót terhelné. A licenc a modellnél ugyanolyan tervezési korlát, mint a pontosság.
a kép széle felé gyorsuló geometriai hiba; a sarokban 10,5 % méretbeli eltérés
a metszet osztva az unióval; ez dönti el, mi számít találatnak, és a küszöbét ki kell írni
nem a modellé: számlálásnál a darabszám hibája, riasztásnál a téves riasztás ára
más fény, más évszak, más tábla; a modell nem jelzi, csak rosszabbul dönt
Ennyi a modul. Ezek a fogalmak mind a nyolc projektben előkerülnek, és mindegyikhez tartozik futtatható mérés.
Az ábra betöltése…
És a stabilitás. Bal oldalon a megvilágítás: öt beállítás, és a három képre összesen öt különböző top-1 címke jön ki — három volna a stabil eset. Jobb oldalon a kivágás: ugyanabból a képből vett öt részlet, és tizenegy különböző címke. A kukoricatábla öt részletére a modell azt mondta: cserép, indiai kobra, tatu, kalász, fejes káposzta. Ugyanaz a tábla. Öt részlet. Öt állat és növény.
Ez a dia zárja le a „miért nem elég egy előtanított modell” kérdést. Nem a pontosságával van baj: az ImageNet-en a MobileNetV2 tisztességes osztályozó. A baj az, hogy a mi kérdésünkre a válasza nem is értelmezhető, és ráadásul a felvétel körülményeitől függ. A következő dia arról szól, mit lehet ezzel kezdeni.
Transzfer tanulásegy nagy adathalmazon előtanított modell ÚJRAFELHASZNÁLÁSA egy másik, jellemzően kisebb feladatra — az alsó rétegek általános képi jellemzőit megtartva, a feladatspecifikus fejet lecserélve és a saját címkéken hangolva.
ezek feladatfüggetlenek
ha a saját képeink is más napszakban készülnek, mint az üzemiek, a hiba megmarad
A meghatározás a dián, és a lényeg a második mondatban: nem a modellt dobjuk el, hanem a FEJÉT. Az előtanított háló alsó rétegei éleket, textúrákat, foltokat ismernek fel — ez minden képen ugyanaz, akár macska van rajta, akár kukorica. Amit cserélni kell, az a legfelső réteg, amelyik ezerféle ImageNet-osztályra szavaz. A helyére a MI címkéink kerülnek, és néhány száz saját kép elég szokott lenni a hangoláshoz. Ez az, ami a projektmodult egy félév alatt teljesíthetővé teszi.
Az oldalsó rajz a `cv-eloretanitott` demóé. A transzfer tanulás a címkekészlet problémáját oldja meg, a stabilitásét nem: ahhoz adatbővítés kell — a tanítóképek mesterséges változatai, fényerőben, kivágásban, forgatásban —, hogy a modell megtanulja, MI NEM számít. Ez a `cv-domainshift` demó tárgya.
| Rövidítés | Feloldás | Mit jelent |
|---|---|---|
| IoU | Intersection over Union — átfedési arány | a metszet osztva az unióval; a szokásos találatküszöb 0,5, de ez megállapodás |
| Dice | Dice-együttható | 2·metszet osztva a két terület összegével; ugyanazt méri, mint az IoU, de megengedőbb — D = 2·IoU/(1+IoU) |
| mAP | mean Average Precision | a PR-görbe alatti terület osztályonként, IoU-küszöb mellett; a küszöb nélkül nem értelmezhető |
| OKS | Object Keypoint Similarity | a kulcspont IoU-megfelelője: a ponthiba az objektum méretéhez mérve |
| MOTA | Multiple Object Tracking Accuracy | a követés összesített hibája: hiányzás, téves riasztás és azonosítóváltás együtt |
| IDF1 | Identity F1 | kifejezetten az AZONOSSÁG megtartását méri; tökéletes detektálás mellett is lehet alacsony |
| MAE | Mean Absolute Error — átlagos abszolút hiba | a képi regresszió mércéje, a kimenet egységében |
| RMSE | Root Mean Squared Error — négyzetes középhiba | ugyanott, de a nagy hibákat aránytalanul bünteti |
| ROC-AUC | Receiver Operating Characteristic — görbe alatti terület | a rangsorolás jósága küszöbtől függetlenül; a véletlen rangsoroló 0,500 |
| ExG | Excess Green — zöldtöbblet-index | 2G − R − B; a legolcsóbb növény–talaj szétválasztás |
| NDVI | Normalized Difference Vegetation Index | (NIR − vörös) ÷ (NIR + vörös); infravöröset látó kamera kell hozzá |
| RGB | Red, Green, Blue | a kamera három csatornája; ebből számol az ExG |
| NIR | Near InfraRed — közeli infravörös | a növény ebben erősen visszaver, a talaj nem — ezen áll az NDVI |
| TP, FP, FN, TN | a zavarási mátrix négy cellája | valódi találat, téves riasztás, kimaradt eset, helyes nem — itt IoU-küszöb dönti el, mi a találat |
| K/T | kerület ÷ terület | a táblaalak mérőszáma; ettől függ a keverékképpontok aránya, nem a tábla méretétől |
A gépi látás rövidítései két csoportba esnek, és ezért két táblán állnak. Ez az első: amivel MÉRÜNK. Az átfedési aránytól a zavarási mátrixig, plusz a képi indexek. Ezeket tudni kell, mert ezek a számok kerülnek a jelentésbe — és ezeket keverik össze a leggyakrabban.
A TP, FP, FN és TN jelentését a 8. hét rövidítés-táblája adja meg — ugyanaz a négy cella, ugyanazokkal a mérőszámokkal. A gépi látásban annyi a különbség, hogy a „találat” meghatározásához előbb az IoU-küszöböt is ki kell mondani.
| eljárás | mit kíván | mikor jó, és mikor nem |
|---|---|---|
| zöldindex küszöbbel (`cv-fedettseg`) | semmit: egy képlet és egy szám | azonnal indul, és normálva stabil is; de csak SZÍN alapján dönt — a sárguló növényt nem látja meg |
| kézzel tanított pixelosztályozó (`cv-pixelosztalyozo`) | tíz perc jelölés képenként, szakértői szemmel | színen túli jellemzőket is használ (textúra); de a jelölés minősége a felső korlát, és folt szerint kell értékelni |
| előtanított mély háló (`cv-eloretanitott`) | semmit — de a címkéi nem a mi kérdésünkre válaszolnak | önmagában használhatatlan agrárkérdésre; transzfer tanulással viszont néhány száz saját kép is elég |
| transzfer tanulással hangolt háló | néhány száz SAJÁT, címkézett kép és egy GPU-óra | ez a projektmodul valódi célja; a doméneltolódás ellen adatbővítés kell mellé |
Összefoglaló táblázat. A jobb oldali oszlopot olvasd el először: mindhárom eljárásnak van olyan helyzete, ahol rossz választás. És figyeld meg a középső oszlopot — a címkézési költséget. Ez az, ami a projekttervben a leggyakrabban hiányzik, pedig ez a legnagyobb tétel.
A sorrend egyben javasolt menet is. Először a képletet kell megmérni — ha az elég, kész vagyunk, és nem kell se címkézni, se tanítani. A `cv-fedettseg` normált eljárása a kukoricaképen 30,6 %-ot ad, a tanult osztályozó 38,7-et; hogy melyik a helyes, azt ground truth nélkül nem lehet eldönteni — és ez már önmagában megmondja, mi a projekt következő lépése.
| Rövidítés | Feloldás | Mit jelent |
|---|---|---|
| CC | Creative Commons | szabad licenccsalád; a licenc a képpel EGYÜTT utazik |
| CC0 | Creative Commons Zero | közkincs: a származékos mű sem terhelt |
| BY-SA | Attribution-ShareAlike | a származékos művet is ugyanezzel a licenccel kell továbbadni |
| AGPL | Affero General Public License | a ráépülő művekre is kiterjed — ezért esett ki modellként |
| MobileNetV2 | könnyű konvolúciós háló | beágyazott futtatásra; a kurzus az ImageNet-en tanított, Apache 2.0 változatát futtatja |
| GPU | Graphics Processing Unit | párhuzamos számolóegység; a háló tanítása ezen megy |
| COCO | Common Objects in Context | annotációs formátum; a doboz [x_bal, y_felső, szélesség, magasság] képpontban |
| VOC | Visual Object Classes (Pascal VOC) | annotációs formátum; a doboz két sarokkal, képpontban |
| YOLO | You Only Look Once | detektorcsalád, és az annotációs formátum neve is: osztály és NORMÁLT középpont-méret |
| SAM | Segment Anything Model | irányítható szegmentálás: pontból vagy dobozból ad maszkot, osztálycímke nélkül |
| ONNX | Open Neural Network eXchange | keretrendszer-független modellformátum; a tanítás és az üzemeltetés így válik szét |
| RLE | Run-Length Encoding | futamhossz-kódolás; a maszkok tömör tárolása |
| JSON, XML | adatcsere-formátumok | a COCO JSON-ban, a Pascal VOC XML-ben tárolja a címkéket |
| GDAL | Geospatial Data Abstraction Library | térinformatikai raszterkönyvtár: vetületváltás, csempézés, mintavétel |
| QGIS | Quantum GIS | nyílt forráskódú térinformatikai felület |
| CVAT | Computer Vision Annotation Tool | címkéző felület több annotátorral és verziókövetéssel |
| OpenCV | Open Source Computer Vision Library | programkönyvtár, nem rövidítés: a klasszikus képfeldolgozás munkalova |
A második tábla az eszközöké, a formátumoké és a licenceké. Ezeket nem kell fejből tudni — vissza lehet lapozni. Egyet emelnék ki, az utolsó hármat: a licenc ugyanolyan tervezési korlát, mint a pontosság. A modul modellje azért MobileNetV2 és nem a YOLO-vonal, mert az utóbbi AGPL, és az ráragadna az egész kurzustárolóra.
Az annotációs formátumok közti átváltás a leggyakoribb néma hibaforrás: a COCO bal-felső sarkot és méretet tárol, a Pascal VOC két sarkot, a YOLO középpontot és NORMÁLT méretet. Mindhárom ugyanúgy néz ki a fájlban — négy szám —, és a modell mindhárommal tanul is valamit, csak nem azt.
Az ábra betöltése…
Ahogy minden diasor végén: a használt típusok egymás mellett, ugyanazon az öt értéken. Ebben a modulban három szerepel. Az oszlop a kezelések és a szétvágások összevetésére, a vonal ott, ahol egy folytonos paraméter mentén nézünk végig valamit — a csempeátfedésen vagy a cseregyakoriságon. A harmadik panel a demóábra: a képi eloszlások és a hisztogramok olyan rajzot kívánnak, amit a dia saját rajzolója nem tud.
Az ábra a `w05-encoding` demóé (`chartindex 4`). A paneleket a demó `TIPUSKESZLETEK` táblája sorolja fel, és pontosan annyi panel van rajta, ahány típust a következő dia táblázata felsorol — ezt a `check_diagramok.py` ellenőrzi is.
%pip install -q unigaku-demofrom demo.lite import futtatfuttat('cv-eloretanitott')A Python a böngésződben indul el, telepítés nélkül. Az első indítás néhány másodperc, mert a futtatókörnyezet ekkor töltődik be. Utána átírhatod a paramétert, és újrafuttathatod.
A demó a saját gépeden fut — a böngészős futtatókörnyezetben nincs onnxruntime, és a tizennégy megabájtos modell sem utazik a kerékkel. A csavar a `KIVAGAS`: állítsd tizenkettőre. A kérdés: hány különböző címke jön ki ugyanarról az EGY tábláról, ha tizenkét részletet nézünk meg belőle? És a második kérdés, ami fontosabb: ha egy modell ugyanarra a táblára több különböző dolgot mond a kivágástól függően, mit jelent az, hogy „nyolcvan százalékos pontosságú”?
A demó `extras = ('PIL', 'onnxruntime')` jelöléssel fut, és a modellt is ellenőrzi: ha hiányzik, megmondja, mi hiányzik, ahelyett hogy elszállna. A modell a tárolóban van, a kerékben nincs — a `pyproject.toml` `exclude` sora zárja ki.
| diagramtípus | mit olvasol le róla | mire NEM jó |
|---|---|---|
| oszlop | kategóriák nagyságrendje és sorrendje — a hossz maga az érték | időbeli alakulás: a sorrend nem látszik rajta |
| vonal | folytonos paraméter menti alakulás: a meredekség és a fordulópontok | kategóriák összevetése: a vonal sorrendet állít oda is, ahol nincs |
| demóábra | amit a keretrendszer rajza nem tud: eloszlás, hisztogram, képi panel | saját adatod: ez a demó kimenete, nem szerkeszthető a dián |
És a táblázat. A modul szinte végig összevetéseket mutat — ez a kezelés kontra az a kezelés, ez a szétvágás kontra az a szétvágás —, oda pedig az oszlop való. A vonal ott jelenik meg, ahol a köztes értékekről is állítunk valamit: a csempeátfedésen és a cseregyakoriságon. A középső oszlop a fontos, a jobb oldali még inkább.
A felsorolás nem kézi lista: a `check_diagramok.py` ellenőrzi, hogy pontosan ezek a típusok szerepelnek-e a diasorban — ha egy új dia más típust hoz be, vagy egy típus kikopik, az építés szól.