26.4 Detektálási pipeline és hibaelemzés

26.4.1 Cél, előismeret és induló kérdés

A 26.3. NMS, confidence és AP egységben a detektálás utófeldolgozását (NMS, score-küszöb) és az AP-metrikát tárgyaltuk, de nem kérdeztük meg: hogyan jut el a nyers kép a detektor bemenetéig úgy, hogy a doboz annotációk is érvényesek maradjanak? Amikor egy képet átméretezünk, kivágunk vagy tükrözünk, a pixelkoordinátákban megadott dobozok külön transzformációt igényelnek. Ez az egység a synchronized transform fogalmát, a dataset contract-ot és az objektumszintű hibajegyzéket építi fel. Előismeret: a 26.3. NMS, confidence és AP IoU-, NMS- és AP-definíciói; a 22.4. Augmentációs kísérlet és domainváltozás alfejezetből a train augmentáció és a rögzített tesztkorrupció elkülönítése; a 25.4. Nyílt halmaz és ismeretlen input alfejezetből a nyílt halmaz szemlélete, amely itt a negatív, objektum nélküli képek kezelésében tér vissza.

Induló kérdés: ha egy 24×2424\times 24-es képen a (2,3,10,11)(2,3,10,11) dobozt tartalmazó képet 12×1212\times 12-re resize-oljuk, de a dobozt változatlanul hagyjuk, akkor a betanított detektor melyik koordinátarendszerben értelmezi a dobozt, és ez hogyan torzítja az IoU-t?

26.4.2 Definíciók és dataset contract

A felhasznált konvenciók a fejezet elején bevezetett 26.1. Dobozkoordináta, IoU és lokalizációs loss dobozdefiníciót követik. Egy kép X∈ℝC×H×WX\in\mathbb R^{C\times H\times W}, ahol HH a magasság, WW a szélesség pixelben. Egy doboz félig nyílt xyxy intervallum:

b=(xmin,ymin,xmax,ymax),0≤xmin<xmax≤W,0≤ymin<ymax≤H.b=(x_{\min}, y_{\min}, x_{\max}, y_{\max}),\qquad 0\le x_{\min}<x_{\max}\le W,\quad 0\le y_{\min}<y_{\max}\le H.

A doboz területe area(b)=(xmax−xmin)(ymax−ymin)\operatorname{area}(b)=(x_{\max}-x_{\min})(y_{\max}-y_{\min}). A detektálási target egy képen MM objektumot ír le; a leggyakoribb szerződés szerint a dobozok tömbje 𝐁∈ℝM×4\mathbf{B}\in\mathbb R^{M\times 4} float32, a címkék vektora 𝐲∈{0,…,K−1}M\mathbf{y}\in\{0,\ldots,K-1\}^M int64, ahol a KK osztályhalmaz a háttérosztályt nem tartalmazza. A torchvision-stílusú target dict ezt boxes és labels kulcsokkal tárolja; az üres képet M=0M=0, azaz 0×40\times 4 alakú üres doboztömb és 00 hosszú címkevektor jelöli [D18].

Definíció (detektálási adathalmaz szerződés). A tanító és kiértékelő pipeline-ra érvényes szerződés:

  1. Minden képhez egy target tartozik; az üres képet explicit M=0M=0 jelöli, nem hiányzó rekord.
  2. A dobozok mindig az aktuális, már transzformált kép méretéhez tartozó koordinátákban vannak.
  3. Geometriai transzformáció esetén a képet és az összes dobozt ugyanazzal a leképezéssel, egy időben transzformáljuk; ezt nevezzük synchronized transformnak.
  4. A train augmentáció csak a train halmazon hat; a valid és test transzformáció determinisztikus, és a testhez tartozó annotációt a geometriai műveleten kívül nem módosítjuk.

Az utolsó pont a 22.4. Augmentációs kísérlet és domainváltozás alfejezetben bevezetett elvet viszi át: a train policy a cél-eloszlás mintavételét módosítja, míg a tesztkorrupció a befagyasztott modell értékelésére szolgáló rögzített leképezés.

Definíció (synchronized transform). Legyen ϕ:ℝC×H×W→ℝC′×H′×W′\phi:\mathbb R^{C\times H\times W}\to\mathbb R^{C'\times H'\times W'} képtranszformáció, amely egy ψ:ℝ2→ℝ2\psi:\mathbb R^2\to\mathbb R^2 térbeli leképezésből származik, azaz minden pixelpozícióra ϕ(X)(c,ψ(p))=X(c,p)\phi(X)(c, \psi(p))=X(c,p) módon viselkedik. A ϕ\phi szinkronizált alkalmazása a (X,𝐁)(X, \mathbf B) párra a következő: X′=ϕ(X)X'=\phi(X), és minden b=(xmin,ymin,xmax,ymax)b=(x_{\min},y_{\min},x_{\max},y_{\max}) dobozra

b′=ψ(b):=(ψ(xmin,ymin),ψ(xmax,ymax)),b'=\psi(b):=(\psi(x_{\min},y_{\min}), \psi(x_{\max},y_{\max})),

ahol a két sarokpontot külön-külön transzformáljuk, majd a koordinátákat a H′×W′H'\times W' képbe vágjuk. Ha a levágás után a doboz érvénytelen (x′min≥x′maxx'_{\min}\ge x'_{\max} vagy y′min≥y′maxy'_{\min}\ge y'_{\max}), akkor az objektum eltűnik a targetből, és MM csökken.

26.4.3 Lemma: resize doboztranszformációja

Lemma (resize geometriája). Legyen a kép eredeti mérete H×WH\times W, az átméretezett méret H′×W′H'\times W', és legyen αx=W′/W\alpha_x=W'/W, αy=H′/H\alpha_y=H'/H. Az átméretezés, mint ϕ\phi, a ψ(x,y)=(αxx,αyy)\psi(x,y)=(\alpha_x x, \alpha_y y) térbeli leképezést indukálja. Ekkor egy b=(xmin,ymin,xmax,ymax)b=(x_{\min},y_{\min},x_{\max},y_{\max}) doboz szinkronizált transzformáltja

b′=(αxxmin,αyymin,αxxmax,αyymax),b'=(\alpha_x x_{\min},\ \alpha_y y_{\min},\ \alpha_x x_{\max},\ \alpha_y y_{\max}),

és area(b′)=αxαyarea(b)\operatorname{area}(b')=\alpha_x\alpha_y\,\operatorname{area}(b).

Bizonyítás. Az átméretezés definíciója szerint a bemeneti kép (x,y)(x,y) pixelpozíciója a kimeneti kép (αxx,αyy)(\alpha_x x, \alpha_y y) pozíciójára kerül, tehát a sarokpontokra ψ\psi a fenti lineáris leképezés. Az érvényességhez ellenőrizzük a határokat: mivel αx>0\alpha_x>0 és xmin<xmaxx_{\min}<x_{\max}, ezért αxxmin<αxxmax\alpha_x x_{\min}<\alpha_x x_{\max}; továbbá xmax≤Wx_{\max}\le W miatt αxxmax≤αxW=W′\alpha_x x_{\max}\le \alpha_x W=W', így az új doboz a kép határain belül marad. Ugyanez áll az yy-koordinátára. A terület:

area(b′)=(αxxmax−αxxmin)(αyymax−αyymin)=αxαy(xmax−xmin)(ymax−ymin)=αxαyarea(b).\operatorname{area}(b')=(\alpha_x x_{\max}-\alpha_x x_{\min})(\alpha_y y_{\max}-\alpha_y y_{\min})=\alpha_x\alpha_y(x_{\max}-x_{\min})(y_{\max}-y_{\min})=\alpha_x\alpha_y\,\operatorname{area}(b).

Ezzel a lemma bizonyítását befejeztük. A bizonyítás során kihasználtuk, hogy a doboz sarokpontokkal adott; a félig nyílt intervallum jellege a lineáris leképezés alatt megmarad, mert nyílt intervallum képe nyílt, zárt határpont képe zárt. Az állítás bias nélküli, konstans eltolást nem tartalmazó resize-ra vonatkozik; ha a resize-t crop követi vagy előzi meg, a kompozíciót külön kell kezelni.

26.4.4 Crop, kompozíció és üres cél

Crop. Legyen a kivágott ablak [x0,x0+Wc)×[y0,y0+Hc)[x_0, x_0+W_c)\times[y_0, y_0+H_c), ahol Wc≤WW_c\le W, Hc≤HH_c\le H. A crop önmagában eltolás: ψ(x,y)=(x−x0,y−y0)\psi(x,y)=(x-x_0,\ y-y_0). Mivel a doboz egy része kieshet az ablakból, a szinkronizált transzformáció után a dobozt a [0,Wc)×[0,Hc)[0,W_c)\times[0,H_c) tartományra vágjuk:

x′min=max(0,xmin−x0),y′min=max(0,ymin−y0),x'_{\min}=\max(0,\ x_{\min}-x_0),\qquad y'_{\min}=\max(0,\ y_{\min}-y_0),

x′max=min(Wc,xmax−x0),y′max=min(Hc,ymax−y0).x'_{\max}=\min(W_c,\ x_{\max}-x_0),\qquad y'_{\max}=\min(H_c,\ y_{\max}-y_0).

Ha x′min≥x′maxx'_{\min}\ge x'_{\max} vagy y′min≥y′maxy'_{\min}\ge y'_{\max}, a doboz eltűnik.

Kompozíció. A pipeline gyakran crop + resize sorozatot alkalmaz. Mivel a leképezések kompozíciója a leképezések egymás utáni alkalmazása, a dobozokra ugyanazt a sorrendet kell alkalmazni, mint a képre. A következő feladat (F2) ezt számszerűen begyakoroltatja.

Empty target. A negatív kép M=0M=0 eset. A pipeline-nak ez nem hibás állapot, hanem érvényes adatpont: a boxes tömb (0,4) alakú, a labels üres. A transzformációs függvényeknek ezt az esetet explicit módon kezelniük kell, mert az üres tömbön végzett koordináta-művelet shape-hibához vezethet, vagy ami rosszabb, csendben üres marad, és a downstream összehasonlítás félreértelmezi.

26.4.5 Objektumszintű hibajegyzék

A 26.3. NMS, confidence és AP greedy matching eljárása után minden ground truth (GT) doboz vagy kapott predikciót (IoU≥τ\operatorname{IoU}\ge\tau, tipikusan τ=0,5\tau=0{,}5), vagy nem; minden predikció vagy kapott GT-párt, vagy nem. Ebből a következő objektumszintű hibakategóriákat definiáljuk:

Kategória Definíció Következmény
Missed detection GT doboz, amelyhez nem tartozik predikció False negative, recall-csökkenés
Duplicate detection Ugyanahhoz a GT-hez több predikció is kapcsolódna Precision-csökkenés, kettős számlálás
Localization error A predikció osztálya helyes, a legközelebbi GT-vel 0<IoU<τ0<\operatorname{IoU}<\tau False positive, rossz doboz
False positive (háttér) Predikció, amelyhez nincs azonos osztályú GT Precision-csökkenés

A lokalizációs hiba és a téves osztály (classification error) megkülönböztetése fontos, mert a javítás módja eltér: a lokalizáció a regressziós fej, az osztálytévesztés a klasszifikációs fej problémájára utal. A fenti táblázat csak a greedy matching utáni durva osztályozás; a részletes hibaelemzés a predikció score-ját és az IoU hisztogramját is vizsgálja.

Heurisztika (hibajegyzék célja). A hibajegyzék nem helyettesíti az AP-metrikát, hanem diagnosztikai eszköz: megmutatja, hogy a detektor mely hibatípusban veszít. A diagnózis akkor megbízható, ha a jegyzéket ugyanazon a rögzített teszthalmazon, ugyanazzal a matching konvencióval számoljuk, mint az AP-t. Ez heurisztika, nem tétel: a hibatípusok aránya nem azonosítható egyetlen okkal.

26.4.6 Kézi kis példa és kód

Kézi példa. Legyen H=W=8H=W=8, H′=W′=4H'=W'=4, tehát αx=αy=0,5\alpha_x=\alpha_y=0{,}5. A doboz b=(2,3,6,7)b=(2,3,6,7). A transzformált: b′=(0,5⋅2,0,5⋅3,0,5⋅6,0,5⋅7)=(1,1,5,3,3,5)b'=(0{,}5\cdot 2,\ 0{,}5\cdot 3,\ 0{,}5\cdot 6,\ 0{,}5\cdot 7)=(1,\ 1{,}5,\ 3,\ 3{,}5). Terület: area(b)=(6−2)(7−3)=16\operatorname{area}(b)=(6-2)(7-3)=16, area(b′)=(3−1)(3,5−1,5)=4=0,25⋅16\operatorname{area}(b')=(3-1)(3{,}5-1{,}5)=4=0{,}25\cdot 16. A doboz a 4×44\times 4-es kép belsejében marad.

Minimális kód. A következő függvény a resize szinkronizált doboztranszformációját valósítja meg NumPy-ban. Az input és a futtatási környezet: munkakönyvtár lab/det_pipeline, CPU, NumPy 2.x, dtype float32, seed 20261020 (a seed a szintetikus adat előállításához használatos, maga a transzformáció determinisztikus).

# resize_boxes.py
"""Szinkronizált resize doboztranszformáció, NumPy referencia."""
import numpy as np

def resize_boxes(boxes: np.ndarray, old_hw: tuple[int, int],
                 new_hw: tuple[int, int]) -> np.ndarray:
    """Dobozok átméretezése a kép resize-zal együtt.

    boxes: float32, shape (M, 4), félig nyílt xyxy.
    old_hw: (H, W), new_hw: (H', W').
    Visszatér: float32, shape (M, 4).
    Üres M=0 esetén (0,4) alakú tömböt ad vissza.
    """
    boxes = np.asarray(boxes, dtype=np.float32)
    if boxes.shape[0] == 0:
        return boxes.reshape(0, 4).astype(np.float32)
    H_old, W_old = old_hw
    H_new, W_new = new_hw
    alpha_y = H_new / H_old
    alpha_x = W_new / W_old
    out = boxes.copy()
    out[:, 0] *= alpha_x
    out[:, 2] *= alpha_x
    out[:, 1] *= alpha_y
    out[:, 3] *= alpha_y
    return out

if __name__ == "__main__":
    # Ellenőrző példa
    boxes = np.array([[2, 3, 6, 7]], dtype=np.float32)
    result = resize_boxes(boxes, (8, 8), (4, 4))
    print(result)  # várható [[1.  1.5 3.  3.5]]

Futtatási parancs: python resize_boxes.py. A várt kimenet [[1. 1.5 3. 3.5]], tolerancia ϵ=10−6\epsilon=10^{-6} abszolút hibahatárral ellenőrizhető, mert a műveletek szorzásból állnak és float32-ben a 4/8=0,54/8=0{,}5 pontosan reprezentálható.

26.4.7 Labor: szintetikus detektálási kísérleti terv és hibajegyzék

A következő labor nem futtatott kimenet, hanem a Futtatás és tudományos bizonyíték szerződésnek megfelelően jelölt szemléltető terv. A tényleges futtatáshoz a kódot külön kell végrehajtani.

Kérdés. Hogyan változik az objektumszintű hibajegyzék, ha a tesztképeket 24×2424\times 24-ről 12×1212\times 12-re resize-oljuk, és a dobozokat (a) nem transzformáljuk, (b) szinkronizáltan transzformáljuk?

Hipotézis. Az (a) változatban a dobozok a régi koordinátarendszerben maradnak, ezért a predikciók és a GT közötti IoU szisztematikusan csökken; a lokalizációs hibák aránya megnő. A (b) változatban a hibajegyzék a transzformáció előttihez hasonló marad.

Adat és split. 40 szintetikus kép, 24×2424\times 24, egy csatorna, float32, seed 20261020. Minden képen 0–3 egyszerű téglalap objektum, osztályok {0,1,2}\{0,1,2\}. Legalább 10 kép üres (M=0M=0). A split: 20 train, 10 val, 10 test, az objektumok számára rétegezve, a scene_id csoportosítással (ha több nézet van). A test annotációt a protokoll végéig nem nézzük.

Baseline és változó. A baseline egy egyszerű csúszóablakos detektor, amely rögzített méretű ablakot csúsztat, és osztályoz + regresszál. A változó tényező a pipeline transzformációja: (a) kép resize doboztranszformáció nélkül, (b) szinkronizált resize a fenti függvénnyel. Minden más paraméter rögzített.

Metrika. Objektumszintű hibajegyzék: missed, duplicate, localization, false positive darabszám; valamint AP @ IoU=0,5\operatorname{IoU}=0{,}5 a 26.3. NMS, confidence és AP konvencióval. A kiértékelés a befagyasztott, val halmazon kiválasztott modellen történik.

Ellenőrzés. A szinkronizált transzformáció után minden dobozra ellenőrizzük, hogy 0≤xmin<xmax≤W′0\le x_{\min}<x_{\max}\le W' és 0≤ymin<ymax≤H′0\le y_{\min}<y_{\max}\le H'. Az üres képeknél M=0M=0 megmarad.

Szemléltető hibajegyzék. A következő számpélda a módszer formáját mutatja, nem futtatott eredmény. Tegyük fel, hogy a test halmaz 4 képet tartalmaz, összesen 5 GT dobozzal. A detektor 6 predikciót ad; a greedy matching után a hibák: 1 missed, 1 duplicate, 1 localization, 1 false positive. Ekkor a jegyzék:

Kép GT Predikció Eredmény
1 1 2 1 TP, 1 duplicate
2 1 1 1 localization (IoU 0,3)
3 2 1 1 missed, 1 FP
4 1 2 2 TP, 0 hiba

A példa számsorai kézzel konstruáltak; a kísérleti következtetéshez tényleges futtatás és nyers számok szükségesek.

26.4.8 Feladatok

F1 (fogalmi, nehézség 1). Adott egy kép egyetlen GT dobozzal b=(0,0,10,10)b=(0,0,10,10), osztály 0, és a detektor egyetlen predikciója p=(5,5,15,15)p=(5,5,15,15), osztály 0. Számítsa ki az IoU-t (τ=0,5\tau=0{,}5), és sorolja be a predikciót a fenti hibajegyzékbe. Adja meg, miért nem missed detection, és miért nem duplicate.

F2 (levezetési, nehézség 2). Vezesse le a crop + resize kompozíció doboztranszformációját. Bemenet: 12×1212\times 12-es kép, crop ablak x0=2x_0=2, y0=2y_0=2, Wc=Hc=8W_c=H_c=8, majd resize 4×44\times 4-re. A bemeneti doboz (1,3,9,11)(1,3,9,11). Adja meg a transzformált dobozt lépésről lépésre, és ellenőrizze az érvényességet.

F3 (implementációs, nehézség 2). Írjon crop_boxes függvényt, amely a crop doboztranszformációját végzi el: bemenet boxes (M,4)(M,4) float32, a crop ablak (x0,y0,Wc,Hc)(x_0, y_0, W_c, H_c); a kimenet a levágott, érvényes dobozok (M′,4)(M',4) alakban. Kezelje az M=0M=0 és a teljesen kieső doboz esetét. Ellenőrizze a fenti F2 példa crop lépésén.

F4 (hibakeresési, nehézség 2). Adott a következő pipeline-részlet:

def transform(image, boxes):
    image = resize(image, (12, 12))
    # itt hiányzik valami
    return image, boxes

Magyarázza el, mi a hiba, mi a következménye a tanításra és az AP-számításra, és adja meg a javítást. Visszaellenőrzésként mondja ki, milyen invariánsnak kell teljesülnie a javított függvény kimenetére.

F5 (kísérleti, nehézség 3). Tervezzen kísérletet annak számszerűsítésére, hogy a csak pozitív képeken mért AP mennyiben torzítja a detektor értékelését a teljes teszt halmazon mért AP-hez képest. Adja meg a kérdést, a hipotézist, az adat összetételét (pozitív/negatív arány), a baseline detektort, a változó tényezőt, a metrikát és a következtetés érvényességi korlátját.

26.4.9 Megoldások és indoklás

F1 megoldás. Az interszekció: a két doboz közös része a [5,10)×[5,10)[5,10)\times[5,10) négyzet, területe (10−5)⋅(10−5)=25(10-5)\cdot(10-5)=25. Az unió: 10⋅10+10⋅10−25=17510\cdot 10+10\cdot 10-25=175. Tehát IoU=25/175≈0,1429<0,5\operatorname{IoU}=25/175\approx 0{,}1429<0{,}5. A greedy matching során ez a predikció nem kap GT-párt, tehát false positive a matching szerint. Mivel a predikció osztálya megegyezik az egyetlen GT osztályával, és az IoU pozitív, de τ\tau alatt van, a hibajegyzékben localization error kategóriába esik. Nem missed detection, mert van predikció; nem duplicate, mert csak egy predikció van, és az sem érte el a küszöböt.

F2 megoldás. Első lépés, crop az eltolással: x′=x−2x'=x-2, y′=y−2y'=y-2. A doboz: (1−2,3−2,9−2,11−2)=(−1,1,7,9)(1-2,\ 3-2,\ 9-2,\ 11-2)=(-1,\ 1,\ 7,\ 9). Levágás a [0,8)×[0,8)[0,8)\times[0,8) ablakra: x′min=max(0,−1)=0x'_{\min}=\max(0,-1)=0; y′min=max(0,1)=1y'_{\min}=\max(0,1)=1; x′max=min(8,7)=7x'_{\max}=\min(8,7)=7; y′max=min(8,9)=8y'_{\max}=\min(8,9)=8. Tehát a crop utáni doboz (0,1,7,8)(0,1,7,8), érvényes, mert 0<7≤80<7\le 8 és 1<8≤81<8\le 8. Második lépés, resize 4×44\times 4-re: αx=αy=4/8=0,5\alpha_x=\alpha_y=4/8=0{,}5. A szorzás után (0,0,5,3,5,4)(0,\ 0{,}5,\ 3{,}5,\ 4). Ellenőrzés: 0<3,5≤40<3{,}5\le 4, 0<0,5<40<0{,}5<4, a doboz érvényes a 4×44\times 4-es képen. A terület a crop után (7−0)(8−1)=49(7-0)(8-1)=49, a resize után (3,5−0)(4−0,5)=3,5⋅3,5=12,25=0,25⋅49(3{,}5-0)(4-0{,}5)=3{,}5\cdot 3{,}5=12{,}25=0{,}25\cdot 49, ami megfelel a lemma állításának.

F3 megoldás. A függvény kódja:

import numpy as np

def crop_boxes(boxes: np.ndarray, crop: tuple[int, int, int, int]) -> np.ndarray:
    """Crop doboztranszformációja.

    boxes: float32, shape (M, 4), xyxy.
    crop: (x0, y0, W_c, H_c) félig nyílt ablak.
    Visszatér: float32, shape (M', 4), M' <= M.
    """
    boxes = np.asarray(boxes, dtype=np.float32)
    if boxes.shape[0] == 0:
        return boxes.reshape(0, 4).astype(np.float32)
    x0, y0, W_c, H_c = crop
    out = boxes.copy()
    out[:, 0] -= x0
    out[:, 2] -= x0
    out[:, 1] -= y0
    out[:, 3] -= y0
    out[:, 0] = np.maximum(out[:, 0], 0.0)
    out[:, 1] = np.maximum(out[:, 1], 0.0)
    out[:, 2] = np.minimum(out[:, 2], float(W_c))
    out[:, 3] = np.minimum(out[:, 3], float(H_c))
    valid = (out[:, 2] > out[:, 0]) & (out[:, 3] > out[:, 1])
    return out[valid].astype(np.float32)

if __name__ == "__main__":
    boxes = np.array([[1, 3, 9, 11]], dtype=np.float32)
    result = crop_boxes(boxes, (2, 2, 8, 8))
    print(result)  # várható [[0. 1. 7. 8.]]

A függvény az M=0M=0 esetben üres tömböt ad, a teljesen kieső dobozokat kiszűri. A valid maszk a szigorú egyenlőtlenséget használja, mert a félig nyílt intervallum akkor érvényes, ha xmin<xmaxx_{\min}<x_{\max}.

F4 megoldás. A hiba: a transform a képet resize-olja, de a dobozokat nem transzformálja a szinkronizált módon. A dobozok koordinátái az eredeti 24×2424\times 24-es képre vonatkoznak, míg a kép már 12×1212\times 12-es. Következmény: a training során a regressziós loss téves célokat lát, mert a dobozok a képen kívülre vagy rossz helyre mutatnak; a kiértékelésnél az IoU hamis, az AP alábecsült, a lokalizációs hibák aránya mesterségesen megnő. Javítás: a resize_boxes hívása a resize után:

def transform(image, boxes):
    H, W = image.shape[-2], image.shape[-1]
    image = resize(image, (12, 12))
    boxes = resize_boxes(boxes, (H, W), (12, 12))
    return image, boxes

Visszaellenőrzés: a kimeneti dobozoknak teljesíteniük kell, hogy minden dobozra 0≤xmin<xmax≤120\le x_{\min}<x_{\max}\le 12 és 0≤ymin<ymax≤120\le y_{\min}<y_{\max}\le 12; az üres képeknél a dobozok tömbje (0,4)(0,4) alakú marad.

F5 megoldásminta. Kérdés: mennyivel nagyobb a detektor AP-ja, ha a tesztből eltávolítjuk a negatív (objektum nélküli) képeket? Hipotézis: a csak pozitív képeken számolt AP magasabb, mert a false positive-ok nagy része a negatív képekről származik. Adat: 100 szintetikus tesztkép: 20 pozitív, 80 negatív, seed 20261020, a pozitív képeken 1–3 objektum. Baseline: egy egyszerű detektor, amely minden pozitív képen 1 helyes dobozt ad (IoU 0,7 felett), de minden negatív képen is ad 1 hamis dobozt. Változó: a kiértékelés halmaza — csak pozitív képek (20) vs. az összes kép (100). Metrika: AP @ IoU=0,5\operatorname{IoU}=0{,}5. Várható számítás: a csak pozitív halmazon a precision 20/(20+0)=120/(20+0)=1, míg a teljes halmazon 20/(20+80)=0,220/(20+80)=0{,}2, így a teljes AP lényegesen alacsonyabb. Következtetési korlát: a szintetikus baseline nem valós detektor; a kísérlet csak a torzítás mechanizmusát mutatja, nem ad általános nagyságrendet. A valós értékeléshez a negatív képeket is tartalmazó, rögzített teszt szükséges.

26.4.10 Tipikus tévedés: csak pozitív képeken mért kísérlet

A gyakori hiba az, hogy a detektálási teljesítményt olyan teszt halmazon mérik, amely csak objektumot tartalmazó képeket tartalmaz. Ez nem teljes detektálási értékelés. A fenti F5 ellenpéldája mutatja: ha a baseline mind a 80 negatív képen hamis dobozt ad, akkor a csak pozitív halmazon mért AP 1,0, míg a teljes halmazon 0,2 körüli. A torzítás oka, hogy a false positive-ok jelentős része a negatív képekből származik, és a csak pozitív képek kiértékelése ezt a hibaforrást kizárja.

Az állítás formálisan: legyen ℰ+\mathcal E^+ a pozitív képek halmaza, ℰ\mathcal E a teljes teszt. Ha egy detektor minden X∈ℰ\ℰ+X\in\mathcal E\setminus\mathcal E^+ képen legalább egy false positive predikciót ad, akkor az ℰ+\mathcal E^+-n számolt empirikus precision nagyobb vagy egyenlő, mint az ℰ\mathcal E-n számolt, feltéve, hogy a true positive-ok száma azonos. A bizonyítás közvetlen: a precision nevezője TP+FP\mathrm{TP}+\mathrm{FP}, és a ℰ+\mathcal E^+-ra szűkítés az FP-k egy részét eltávolítja, így a nevező nem nő, a hányados nem csökken. Ez levezetés, nem empirikus állítás; a konkrét különbség mértéke adatfüggő.

26.4.11 Önellenőrzés és korábbi fogalom visszahívása

Önellenőrző kérdések. (1) Miért marad a félig nyílt intervallum jelleg a resize alatt? (2) Mi történik, ha a crop ablak teljesen levág egy dobozt? (3) Melyik hibakategóriába esik az a predikció, amelyik ugyanazt a GT-t másodikként fedi le IoU≥τ\operatorname{IoU}\ge\tau értékkel?

Válaszok. (1) A lineáris leképezés a nyílt/zárt határokat megtartja, mert pozitív skalárral szorzunk. (2) A doboz kikerül a targetből, MM csökken, és az objektum missed detectionnek számít, ha a detektor nem találja. (3) Duplicate detection, amennyiben a greedy matching után a második predikció FP-ként jelenik meg, de a hibajegyzékben a közeli azonos GT miatt duplicate-ként tartjuk számon.

Visszahívás. A 26.3. NMS, confidence és AP egységben a greedy matching, az NMS és az AP fogalmát építettük fel; a mostani hibajegyzék az ottani matching konvenciót használja. A 22.4. Augmentációs kísérlet és domainváltozás egység a train augmentációt és a tesztkorrupciót különítette el: itt a train synchronized augmentáció címkemegőrző, a test transzformáció pedig determinisztikus és befagyasztott modellre vonatkozik. A 25.4. Nyílt halmaz és ismeretlen input egység a nyílt halmazú döntést tárgyalta; a detektálásban a negatív, üres kép hasonló szerepet tölt be, mint az ismeretlen input az osztályozóban, mert a “nincs objektum” explicit kimenet. A 14.4. Csoportos és depthwise konvolúció egység a grouped konvolúció blokkszerkezetét elemezte; a mostani pipeline-szerződés ugyanazt a modularitási elvet követi absztrakt szinten: az adatpipeline és a modell belső transzformációi különválasztva ellenőrizhetők.

26.4.12 Rövid összefoglaló

A detektálási pipeline a képet és a dobozokat szinkronizáltan transzformálja, hogy a koordinátarendszer mindig az aktuális képhez igazodjon. A resize a doboz sarokpontjait a képméret-aránnyal szorozza; a crop eltolásból és levágásból áll, a kieső dobozok eltűnnek. Az üres cél explicit M=0M=0 állapot, amelyet a kódnak kezelnie kell. Az objektumszintű hibajegyzék a greedy matching után missed, duplicate, localization és false positive kategóriákat ad, és az AP-t diagnosztikailag egészíti ki. A csak pozitív képeken mért AP torzít, mert kihagyja a negatív képek false positive-jait. A transzformációs hibák közvetlenül lokalizációs hibának látszanak, ezért a pipeline ellenőrzés a kísérlet része. A tanult transzformációk nélküli AP összehasonlítás félrevezető.

26.4.13 Következő alkalmazás

A 27.1. Pixelszintű klasszifikáció és FCN egység a szemantikus szegmentálásba lép át: ott a doboz helyett minden pixel kap osztálycímkét, és a synchronized transform a képet és a maszkot együtt transzformálja. A pipeline-szerződés és a hibaelemzés gondolata átvihető, de a metrika IoU-ból pixel-alapú Dice/IoU lesz.

26.4.14 Források