26.2 Egy- és kétlépcsős detektor

26.2.1 1. Cél, előismeret és induló kérdés

A 26.1. Dobozkoordináta, IoU és lokalizációs loss egység rögzítette a doboz reprezentációját: xyxy, félig nyílt intervallum, IoU, normalizált koordináta és dobozregressziós cél. Ott azonban csak az értékeléshez és a finomításhoz szükséges geometriai nyelvet építettük fel. Most a detektort mint egész rendszert vizsgáljuk, és elválasztjuk egymástól a három különböző felelősséget: a régiójavaslatot (region proposal), az objektumosságot (objectness) és az osztálydöntést.

A 25.2. Multilabel és hierarchikus cél multilabel egységben a szigmoid és a BCE szétválasztotta a független döntéseket; a 22.2. Címkemegőrző transzformációk megmutatta, hogy a geometriai transzformáció és a doboz szinkronizálása a feladattól függ; a 14.2. Több bemeneti és kimeneti csatorna pedig a kernel bank és a csatornakeverés alakjait adta meg, amit a detektor fejében ismét használni fogunk.

Induló kérdés. Egy 24×2424\times24-es képen egy 2×22\times2-es cellarácsra épülő egylépcsős detektornak négy dobozslotja van, minden cella maga egy 12×1212\times12-es horgonydoboz. A kép közepén egyetlen 12×1212\times12-es célként megadott doboz áll. Hány pozitív mintát ad a matching, ha a pozitív küszöb τpos=0,5\tau_{pos}=0{,}5? A választ a kézi példában számoljuk ki; előzetes becslésként gondoljuk meg, hány cellával lehet a cél középpontja átfedésben.

26.2.2 2. Definíció és intuíció: a három elkülönített felelősség

Definíció (régiójavaslat). Legyen X∈ℝN×Cin×H×WX\in\mathbb R^{N\times C_{in}\times H\times W} képbatch. Egy régiójavaslat-generáló minden XnX_n képhez egy jelölt dobozhalmazt ad:

R(Xn)={rn,1,…,rn,T},rn,t∈ℝ4, R(X_n)=\{r_{n,1},\dots,r_{n,T}\},\qquad r_{n,t}\in\mathbb R^4,

ahol minden rn,tr_{n,t} xyxy koordináta a 26.1. Dobozkoordináta, IoU és lokalizációs loss konvenció szerint. A javaslat önmagában nem hordoz osztálydöntést; csak azt állítja, hogy a jelölt területen érdemes részletes elemzést végezni. A kétlépcsős detektorban a második fokozat kizárólag ezen a TT jelöltön dolgozik.

Definíció (javaslati recall). Ha G={g1,…,gM}G=\{g_1,\dots,g_M\} a ground truth dobozok halmaza, M>0M>0, akkor a τ\tau IoU-küszöbhöz tartozó javaslati recall:

Recallτ(R,G)=1M∑m=1M𝟏[maxt=1,…,TIoU(rt,gm)≥τ]. \mathrm{Recall}_\tau(R,G)=\frac{1}{M}\sum_{m=1}^{M}\mathbf 1\!\left[\max_{t=1,\dots,T}\mathrm{IoU}(r_t,g_m)\ge\tau\right].

Az indikátor azt vizsgálja, hogy minden valódi objektumhoz van-e legalább egy elég jól illeszkedő javaslat. Az M=0M=0 esetben a mennyiség definiálatlan; üres képen nincs mit felidézni.

Definíció (objectness, objektumosság). Az objectness egy skalár kimenet, amely azt a kérdést válaszolja meg, hogy az adott slot felelős-e egy objektumért, függetlenül annak osztályától. Formálisan egy ô∈ℝ\hat o\in\mathbb R logithoz tartozó Bernoulli-döntés: σ(ô)=11+e−ô\sigma(\hat o)=\frac{1}{1+e^{-\hat o}} annak a becsült valószínűsége, hogy a slot előtér. Ez különbözik a 25.2. Multilabel és hierarchikus cél többcímkés osztályfejétől: ott minden címke külön jelenlétet dönt el, itt a háttér–előtér döntés megelőzi az osztályozást. A fejezet didaktikai detektora a háttér és a három tárgyosztály közötti döntést objectness-logittal és előtérre értelmezett hármas osztályozóval faktorizálja. Alternatív architektúra közös, háttérosztályt is tartalmazó softmaxot alkalmazhat; a két parametrizáció nem azonos gradiensű tanítási szerződés, noha megfelelő kapacitással ugyanazt a négyosztályos prediktív eloszlást is leírhatják.

Definíció (anchor, horgonydoboz; slot). Az egylépcsős detektor sűrűn helyez el predikciós slottokat. Minden slot egy a=(acx,acy,aw,ah)a=(a_{cx},a_{cy},a_w,a_h) horgonydobozhoz tartozik, ahol aw,ah>0a_w,a_h>0; a cx,cycx,cy jelöli a doboz középpontjának képpont-koordinátáját. A hálózat nem közvetlenül a végleges dobozt, hanem a horgonyhoz viszonyított Δ\Delta eltolást prediktálja, majd a dekódolás:

bcx=acx+Δcxaw,bcy=acy+Δcyah,bw=awexp(Δw),bh=ahexp(Δh). b_{cx}=a_{cx}+\Delta_{cx}a_w,\quad b_{cy}=a_{cy}+\Delta_{cy}a_h,\quad b_w=a_w\exp(\Delta_w),\quad b_h=a_h\exp(\Delta_h).

A célkódolás ennek inverze: Δcx=(gcx−acx)/aw\Delta_{cx}=(g_{cx}-a_{cx})/a_w, Δcy=(gcy−acy)/ah\Delta_{cy}=(g_{cy}-a_{cy})/a_h, Δw=log(gw/aw)\Delta_{w}=\log(g_w/a_w), Δh=log(gh/ah)\Delta_{h}=\log(g_h/a_h), feltéve, hogy a horgony és a cél doboz nem degenerált. Az exponenciális forma garantálja a pozitív szélességet és magasságot; ez a 26.1. Dobozkoordináta, IoU és lokalizációs loss normalizált koordinátagondolat továbbfejlesztése, és nem az egyetlen lehetséges szerződés — a választott fejnek és a targetnek ugyanazt a kódolást kell használnia.

Intuíció a két családhoz. A kétlépcsős detektor először kevés, jó jelöltet keres, majd mindegyiket drága fejjel osztályozza és finomítja. Az egylépcsős detektor minden sloton egyszerre dönt, és a slotok sűrű rácsát implicit javaslathalmazként kezeli. Az elsőnél a javaslat minősége, a másodiknál a pozitív–negatív egyensúly válik központi tervezési kérdéssé.

26.2.3 3. A két család felelősségtérképe

Kétlépcsős út: R-CNN és Faster R-CNN. A korai R-CNN vonal először külső javaslatokat vágott ki, és minden régiót külön osztályozott. A [P12] absztraktja szerint a Faster R-CNN ezt a javaslatgenerálást tanulhatóvá teszi: a Region Proposal Network (RPN) a detektáló hálózattal közös, teljes képre számolt konvolúciós jellemzőtérképre épül, és maga is végponttól végpontig tanított, teljesen konvolúciós hálózat. Ezzel a javaslatgenerálás megszűnik külső, nem tanulható előfeldolgozás lenni. A rendszer felelősségtérképe:

Fokozat Felelősség Kimeneti alak
Backbone közös sűrű jellemzőtérkép 1×C×H′×W′1\times C\times H'\times W'
RPN javaslat + objectness P×4P\times4 és PP logit
Detektáló fej osztály + finomítás P×(K+1)P\times(K+1) és P×4P\times4

Itt PP a javaslatok száma. A második fokozat csak az RPN által kiadott PP régión dolgozik; az osztályozási teljesítmény ezért függ az első fokozat recalljától, a javaslatok közös jellemzőtérképe pedig a 14.2. Több bemeneti és kimeneti csatorna alfejezetben megismert csatornakeverés újrafelhasználása.

Egylépcsős út: YOLO és SSD család. A [P13] preprint absztraktja a detektálást egyetlen hálózati kiértékelésként fogalmazza meg: a rendszer közvetlenül, egyetlen előremenetben ad dobozokat és osztályvalószínűségeket. Az SSD-szerű család ugyanezt a sűrű default-box gondolatot különböző léptékű jellemzőtérképekre teríti ki; a jelen fejezet forráskatalógusa azonban nem tartalmazza az SSD eredeti cikkét, ezért annak részletes képletét nem tárgyalom (a részletes küszöb- és slotkonvenciók alkalmazásspecifikusak).

Az egylépcsős felosztásban a BB slot cellánkénti felelőssége:

gij=maxb=1,…,Bmijb, g_{ij}=\max_{b=1,\dots,B} m_{ijb},

ahol mijb∈{0,1}m_{ijb}\in\{0,1\} a matchingből származó pozitív címke: a cella akkor felelős egy objektumért, ha valamelyik slotja az. Az objectness fej minden slotra külön logitot ad, az osztályfej a felelős cella osztályát adja; a dobozfej csak a pozitív slotokon kap regressziós célt.

26.2.4 4. Pontos matching-szabály és többtagú cél

A levezetési kötelezettség a választott detektor céljának és mintapárosításának pontos felírása. Ehhez előbb a matching szabályt rögzítjük.

Definíció (matching szabály). Legyen G={g1,…,gM}G=\{g_1,\dots,g_M\} a célok, A={a1,…,aT}A=\{a_1,\dots,a_T\} a slotok horgonydobozai. Minden ss slothoz keressük a legjobban illeszkedő célt, és minden mm célhoz a legjobban illeszkedő slotot:

i*(s)=argmaxmIoU(as,gm),s*(m)=argmaxsIoU(as,gm). i^*(s)=\arg\max_{m}\mathrm{IoU}(a_s,g_m),\qquad s^*(m)=\arg\max_{s}\mathrm{IoU}(a_s,g_m).

Adott 0<τneg≤τpos<10<\tau_{neg}\le\tau_{pos}<1 küszöbök mellett a pozitív halmaz

P={s:IoU(as,gi*(s))≥τpos}∪{s*(m):m=1,…,M}. P=\{s:\mathrm{IoU}(a_s,g_{i^*(s)})\ge\tau_{pos}\}\;\cup\;\{s^*(m):m=1,\dots,M\}.

A negatív halmaz

N={s:maxmIoU(as,gm)<τneg}\P, N=\big\{s:\max_{m}\mathrm{IoU}(a_s,g_m)<\tau_{neg}\big\}\setminus P,

a maradék I={1,…,T}\(P∪N)I=\{1,\dots,T\}\setminus(P\cup N) figyelmen kívül hagyott, és nem járul a célhoz. A {s*(m)}\{s^*(m)\} tag minden ground truth dobozhoz rendel legalább egy pozitív jelöltet akkor is, ha egyetlen slot sem éri el a τpos\tau_{pos} küszöböt. Ha több cél ugyanazt a slotot választaná, külön ütközésfeloldás (például egy-egy megfeleltetés) kell: egyetlen slot ugyanis nem tanítható egyszerre két különböző dobozra. A fejezet kis példája egy cellán belül legfeljebb egy felelős objektumot és ütközésmentes párosítást feltételez; ennél sűrűbb jelenethez slotonkénti osztályfej vagy általánosabb matching szükséges. Ha M=0M=0, akkor P=I=⌀P=I=\varnothing és N={1,…,T}N=\{1,\dots,T\}. Ez a szabály a könyv saját, didaktikai célú leírása; a konkrét küszöbértékek architektúránként és cikkenként eltérnek (a küszöbértékeket külön protokollban kell rögzíteni).

Definíció (saját, didaktikai egylépcsős cél). Legyen S×SS\times S a cellarács, cellánként BB slot, KK osztály. A predikció cellánkénti osztálylogit ẑij∈ℝK\hat z_{ij}\in\mathbb R^K, slotonkénti dobozparaméter t̂ijb∈ℝ4\hat t_{ijb}\in\mathbb R^4 és objectness logit ôijb∈ℝ\hat o_{ijb}\in\mathbb R. A target oldalán mijb∈{0,1}m_{ijb}\in\{0,1\} a matching, vijb=𝟏[(i,j,b)∈P∪N]v_{ijb}=\mathbf 1[(i,j,b)\in P\cup N] az objectness-veszteség érvényességi maszkja, yijcls∈{0,…,K−1}y^{cls}_{ij}\in\{0,\dots,K-1\} a felelős cella osztálya, yijbbox∈ℝ4y^{box}_{ijb}\in\mathbb R^4 a cél dobozparaméter, és Npos=|{(i,j):gij=1}|N_{pos}=|\{(i,j):g_{ij}=1\}|. A teljes cél:

L=Lcls+Lbox+Lobj, L=L_{cls}+L_{box}+L_{obj},

ahol

Lcls=1Npos∑i,jgij=1ℓCE(ẑij,yijcls),ℓCE(z,y)=−logsoftmax(z)y, L_{cls}=\frac{1}{N_{pos}}\sum_{\substack{i,j\\g_{ij}=1}}\ell_{CE}(\hat z_{ij},y^{cls}_{ij}), \quad \ell_{CE}(z,y)=-\log\mathrm{softmax}(z)_y,

Lbox=λcoordNpos∑i,j,bmijbℓreg(t̂ijb,yijbbox),ℓreg(a,b)=14∥a−b∥22, L_{box}=\frac{\lambda_{coord}}{N_{pos}}\sum_{i,j,b}m_{ijb}\,\ell_{reg}(\hat t_{ijb},y^{box}_{ijb}), \quad \ell_{reg}(a,b)=\frac14\|a-b\|_2^2,

Lobj=λobjS2B∑i,j,bvijbℓBCE(ôijb,mijb),ℓBCE(z,m)=softplus(z)−mz. L_{obj}=\frac{\lambda_{obj}}{S^2B}\sum_{i,j,b}v_{ijb}\,\ell_{BCE}(\hat o_{ijb},m_{ijb}), \quad \ell_{BCE}(z,m)=\mathrm{softplus}(z)-mz.

A BCE logit-formája a 25.2. Multilabel és hierarchikus cél alfejezetben levezetett stabil alak; a softmax előtti logit itt is megmarad, mert a 7.2. Softmax és többosztályos cross-entropy szerint a könyvtári cross-entropy logitot vár. Az osztály- és doboztag a felelős cellák átlaga, az objectness-tag az összes slot számával normalizált, de csak érvényes (pozitív vagy negatív) slotokat tartalmazó veszteség. A figyelmen kívül hagyott II slotokra vijb=0v_{ijb}=0, ezért nem keletkezik gradiens. A különböző nevezőket és az érvényességi maszkot minden implementációban explicit módon kell kezelni. Ha Npos=0N_{pos}=0, akkor Lcls=Lbox=0L_{cls}=L_{box}=0 konvencióval élünk, és a cél csak a negatív objectness tagból áll; üres batch esetén a teljes cél definiálatlan.

Állítás (a cél gradiense). A fenti cél komponensenkénti gradiense:

∂Lobj∂ôijb=λobjvijbS2B(σ(ôijb)−mijb), \frac{\partial L_{obj}}{\partial \hat o_{ijb}} =\frac{\lambda_{obj}v_{ijb}}{S^2B}\big(\sigma(\hat o_{ijb})-m_{ijb}\big),

∂Lbox∂t̂ijb;k=λcoordmijb2Npos(t̂ijb;k−yijb;kbox), \frac{\partial L_{box}}{\partial \hat t_{ijb;k}} =\frac{\lambda_{coord}\,m_{ijb}}{2N_{pos}}\big(\hat t_{ijb;k}-y^{box}_{ijb;k}\big),

a negatív slotokra pedig mijb=0m_{ijb}=0 miatt a doboztag gradiense nulla; az osztálytag gradiense a 7.2. Softmax és többosztályos cross-entropy alfejezetből (softmax(ẑij)−eyijcls)/Npos\big(\mathrm{softmax}(\hat z_{ij})-e_{y^{cls}_{ij}}\big)/N_{pos} a felelős cellákra, és nulla máshol.

Bizonyítás. A BCE-re ddzsoftplus(z)=σ(z)\frac{d}{dz}\mathrm{softplus}(z)=\sigma(z), így ℓBCE(z,m)=softplus(z)−mz\ell_{BCE}(z,m)=\mathrm{softplus}(z)-mz deriváltja σ(z)−m\sigma(z)-m; az érvényességi maszk vijbv_{ijb} és a λobj/(S2B)\lambda_{obj}/(S^2B) konstans kiemelhető. Az ℓreg\ell_{reg}-re 14∑k(ak−bk)2\frac{1}{4}\sum_k(a_k-b_k)^2 deriváltja az aka_k változó szerint 12(ak−bk)\frac12(a_k-b_k), és a szumma csak a pozitív slotokat tartalmazza, ezért a mijbm_{ijb} szorzó kívülről is megjelenik. ▫\square

A gradiens alakja egy heurisztikus tervezési motivációt tesz láthatóvá: ha |N|≫|P||N|\gg|P|, a negatív objectness tagok dominálhatják a lépést, ezért a gyakorlatban λ\lambda-súlyozással vagy negatív mintavételezéssel egyensúlyoznak. Ez heurisztika, nem bizonyított optimalitási garancia: a gradiens képlete algebrai tény, de hogy a súlyozás minden adatnál jobb modellhez vezet-e, azt csak kísérlettel lehet eldönteni.

26.2.5 5. Eredeti kézi kis példa

Legyen W=H=24W=H=24, S=2S=2, tehát a négy cella 12×1212\times12-es. Egyetlen slot cellánként (B=1B=1), a slot horgonya maga a cella. Egyetlen ground truth doboz:

g=(10,10,22,22),ycls=1. g=(10,10,22,22),\qquad y^{cls}=1.

A jobb alsó cella horgonya a=(12,12,24,24)a=(12,12,24,24); a többi celláé rendre (0,0,12,12)(0,0,12,12), (0,12,12,24)(0,12,12,24), (12,0,24,12)(12,0,24,12). A GT területe 12⋅12=14412\cdot12=144, a jobb alsó horgony területe szintén 144144. A metszet:

[12,22]×[12,22],|∩|=100, [12,22]\times[12,22],\qquad |\cap|=100,

az unió 144+144−100=188144+144-100=188, tehát

IoU=100188≈0,5319. \mathrm{IoU}=\frac{100}{188}\approx0{,}5319.

A másik három horgony átfedése nem nulla: a bal felső cellánál 4/(144+144−4)=4/284≈0,01414/(144+144-4)=4/284\approx0{,}0141, a bal alsó és jobb felső cellánál pedig egyaránt 20/(144+144−20)=20/268≈0,074620/(144+144-20)=20/268\approx0{,}0746. Mindhárom érték a negatív küszöb alatti. A τpos=0,5\tau_{pos}=0{,}5, τneg=0,4\tau_{neg}=0{,}4 választással:

P={a1,1},N={a0,0,a0,1,a1,0},I=⌀, P=\{a_{1,1}\},\quad N=\{a_{0,0},a_{0,1},a_{1,0}\},\quad I=\varnothing,

tehát a matching szerint pontosan egy pozitív slot van, a jobb alsó cella. Ebben a kézi példában — a korábban bemutatott, horgonyközépponthoz viszonyított és logaritmikus szélességet használó Δ\Delta-kódolástól eltérően — a középpontot a cella bal felső sarkához, a méretet a teljes kép méretéhez normalizáljuk. A dekódolás bcx=xbal+12txb_{cx}=x_{bal}+12t_x, bcy=yfelső+12tyb_{cy}=y_{felső}+12t_y, bw=24twb_w=24t_w, bh=24thb_h=24t_h. Ezt a kódolást a hozzá tartozó fejjel és targettel együtt kell használni; a két konvenció nem keverhető össze. A cél dobozparaméter ezzel a cella-normalizált kódolással: a GT középpontja (16,16)(16,16), a cella bal felső sarka (12,12)(12,12), a cellaméret 1212, így

tx=ty=16−1212=13,tw=th=1224=0,5. t_x=t_y=\frac{16-12}{12}=\frac13,\qquad t_w=t_h=\frac{12}{24}=0{,}5.

A célvektorok: m1,1,1=1m_{1,1,1}=1, a többi slotra m=0m=0; y1,1cls=1y^{cls}_{1,1}=1; a dobozcél a pozitív sloton (13,13,12,12)(\frac13,\frac13,\frac12,\frac12).

Most legyen a predikció a pozitív sloton

t̂=(0,3,0,3,0,6,0,4),ô=1,2,ẑ=(0,2,1,8,0,7), \hat t=(0{,}3,\;0{,}3,\;0{,}6,\;0{,}4),\qquad \hat o=1{,}2,\qquad \hat z=(0{,}2,\;1{,}8,\;0{,}7),

a három negatív sloton pedig ô=−0,5\hat o=-0{,}5. A λcoord=λobj=1\lambda_{coord}=\lambda_{obj}=1 választással számoljuk a három tagot. A doboztag:

ℓreg=14[2(0,3−13)2+(0,6−0,5)2+(0,4−0,5)2]=14(2900+0,01+0,01)≈0,00556. \ell_{reg}=\frac14\left[2\left(0{,}3-\frac13\right)^2+(0{,}6-0{,}5)^2+(0{,}4-0{,}5)^2\right] =\frac14\left(\frac{2}{900}+0{,}01+0{,}01\right) \approx 0{,}00556.

Az objectness BCE a pozitív sloton:

ℓBCE(1,2;1)=ln(1+e1,2)−1,2≈0,26326, \ell_{BCE}(1{,}2;1)=\ln(1+e^{1{,}2})-1{,}2\approx 0{,}26326,

a negatív sloton:

ℓBCE(−0,5;0)=ln(1+e−0,5)≈0,47408. \ell_{BCE}(-0{,}5;0)=\ln(1+e^{-0{,}5})\approx0{,}47408.

Mivel az objektumosság nevezője S2B=4S^2B=4:

Lobj≈0,26328+3⋅0,474084=0,42138. L_{obj}\approx\frac{0{,}26328+3\cdot0{,}47408}{4}=0{,}42138.

Az osztálytag: softmax(0,2;1,8;0,7)\mathrm{softmax}(0{,}2;1{,}8;0{,}7) komponensei az ee-hatványokból 6,04965/9,28480≈0,651566{,}04965/9{,}28480\approx0{,}65156, így

Lcls=−ln0,65156≈0,42838. L_{cls}=-\ln 0{,}65156\approx0{,}42838.

A teljes cél:

L≈0,42838+0,00556+0,42138=0,85532≈0,8553. L\approx0{,}42838+0{,}00556+0{,}42138=0{,}85532\approx0{,}8553.

Az induló kérdésre tehát a válasz: egy pozitív minta keletkezik, mert a GT középpontja a jobb alsó cellában van, és annak horgonya a τpos\tau_{pos} küszöb felett illeszkedik; a szomszédos cellák IoU-ja nulla.

A minimális ellenőrző kód ezt a célösszeget reprodukálja:

# n102_target_demo.py
# Munkakönyvtár: lab/. Nem futtatott ellenőrző példa; a várt 0.8553 a fenti
# kézi számításból származik, a futtatást a tanuló végzi el.
import numpy as np

def softplus(z):
    return np.log1p(np.exp(-np.abs(z))) + np.maximum(z, 0.0)

def bce_logit(z, m):
    return softplus(z) - m * z

def ce_logit(z, y):
    z = z - np.max(z)
    return -z[y] + np.log(np.exp(z).sum())

m = np.zeros((2, 2, 1), dtype=np.float64)
m[1, 1, 0] = 1.0
g = m.max(axis=2)
N_pos = int(g.sum())

t_hat = np.zeros((2, 2, 1, 4))
t_hat[1, 1, 0] = [0.3, 0.3, 0.6, 0.4]
t_gt = np.zeros((2, 2, 1, 4))
t_gt[1, 1, 0] = [1/3, 1/3, 0.5, 0.5]

o_hat = np.full((2, 2, 1), -0.5)
o_hat[1, 1, 0] = 1.2

z_hat = np.zeros((2, 2, 3))
z_hat[1, 1] = [0.2, 1.8, 0.7]
y_cls = np.zeros((2, 2), dtype=np.int64)
y_cls[1, 1] = 1

L_box = (1.0 / N_pos) * np.sum(g[..., None] * m[..., None] * (0.25 * (t_hat - t_gt)**2))
v = np.ones_like(m)  # a kézi példában nincs figyelmen kívül hagyott slot
L_obj = (1.0 / (2 * 2 * 1)) * np.sum(v * bce_logit(o_hat, m))
Z = z_hat.reshape(-1, 3)
Y = y_cls.reshape(-1)
G = g.reshape(-1).astype(bool)
L_cls = np.mean([ce_logit(z, y) for z, y, ok in zip(Z, Y, G) if ok])
L = L_cls + L_box + L_obj
print(f"L = {L:.4f}")            # várt: 0.8553 (kézi számításból)
assert abs(L - 0.855313) < 5e-4

26.2.6 6. Labor: architektúra- és outputalak-táblázat, minimális dobozfej

A labor átadandó eredménye kettős. Először rögzítjük, hogy ugyanaz a 24×2424\times24-es GlyphLab-kép milyen alakokon halad át a két családban; a táblázat szemléltetett számokat ad, nem mért futást.

Elem Felelősség Kimeneti alak (N=1)
Backbone sűrű jellemzőtérkép 1×64×6×61\times64\times6\times6
Kétlépcsős RPN javaslat és objectness P×4P\times4, PP logit
Kétlépcsős detektáló fej osztály és finomítás P×4P\times4, P×4P\times4
Egylépcsős grid fej doboz, objectness, osztály 1×(5B+K)×S×S1\times(5B+K)\times S\times S

Másodszor egyetlen kis dobozfejet építünk. A fej egy 1×11\times1-es konvolúció: a 14.2. Több bemeneti és kimeneti csatorna kernel bankja itt tisztán csatornát kever, térbeli kiterjedés nélkül. A kimenet csatornasorrendje: az első 4B4B csatorna a dobozparaméter, a következő BB az objectness logit, az utolsó KK az osztálylogit. A kód a [D18] irányába mutató teljes TorchVision-finetuning előtti lokális kontroll; a TorchVision-bővítés külön labor, és külső előtanított súlyt a főúton nem használunk.

# n102_lab_box_head.py
# Munkakönyvtár: lab/. CPU, float32, rögzített seed.
# A könyvgeneráló ezt nem futtatja; a tanuló a lab/ mappában futtatja.
import torch

torch.manual_seed(0)
C, B, K, S = 8, 1, 3, 2

head = torch.nn.Conv2d(C, B * 4 + B + K, kernel_size=1, bias=True)
head = head.to(dtype=torch.float32, device="cpu")

x = torch.randn(1, C, S, S, dtype=torch.float32, device="cpu")
p = head(x)
assert p.shape == (1, 8, 2, 2), p.shape

box = p[:, :4]          # B slot, 4 dobozparaméter
obj_logit = p[:, 4:5]   # objectness logit
cls_logit = p[:, 5:]    # K osztálylogit, softmax nélkül
obj = torch.sigmoid(obj_logit)

print("p shape:", tuple(p.shape))
print("obj logit min/max:", float(obj_logit.min()), float(obj_logit.max()))
print("obj sigmoid min/max:", float(obj.min()), float(obj.max()))
# Ellenőrzés: az osztálylogitok összege nem 1 (logit, nem valószínűség),
# az objectness a sigmoid után [0,1]-ben van.

Futtatási parancs a lab/ munkakönyvtárból:

python n102_lab_box_head.py

Elvárt tulajdonság: a kimeneti alak (1,8,2,2)(1,8,2,2), az objectness sigmoid után a [0,1][0,1] intervallumba esik, az osztálycsatornák pedig nyers logitok maradnak. Az értelmezés: ez a fej még nem detektor, hanem a detektor predikciós szerződésének legkisebb ellenőrizhető darabja; a célfüggvény és a matching nélkül nem tanulható.

26.2.7 7. Feladatok

F1. (fogalmi, nehézség 2) Magyarázza el, miben tér el az objectness és az előtérre kondicionált osztályozó egyetlen, „háttér” osztályt is tartalmazó softmax-fejtől, és adjon olyan konkrét esetet, ahol a két tanítási cél eltérő gradienshez vezet. Használja a 25.2. Multilabel és hierarchikus cél BCE/softmax megkülönböztetést.

F2. (levezetési, nehézség 2) Legyen τpos=0,5\tau_{pos}=0{,}5, τneg=0,4\tau_{neg}=0{,}4, két ground truth doboz, M=2M=2, és négy slot. Az első GT-hez tartozó IoU-listája (0,6;0,2;0,45;0,1)(0{,}6;\;0{,}2;\;0{,}45;\;0{,}1), a másodikhoz (0,2;0,3;0,1;0,05)(0{,}2;\;0{,}3;\;0{,}1;\;0{,}05). Adja meg a P,N,IP,N,I halmazokat a matching szabály alapján, és nevezze meg, melyik slot kerül be a teljes lefedés miatt a pozitív halmazba.

F3. (implementációs, nehézség 2) Valósítsa meg NumPyban a háromtagú célfüggvényt úgy, hogy a BCE stabil softplus-formát használjon, és Npos=0N_{pos}=0 esetén a Lcls=Lbox=0L_{cls}=L_{box}=0 elágazást alkalmazzon. Bemenet: a fenti kézi példa target- és predikciótensorai; elvárt kimenet L≈0,8553L\approx0{,}8553, tolerancia 5⋅10−45\cdot10^{-4}.

F4. (hibakeresési, nehézség 2) Az alábbi matching-kód hibás:

pos = {s for s in slots
       if iou[s, best_gt[s]] >= tau_pos}

A teljes lefedés hiányzik. Magyarázza el a hiba okát, következményét, és adja meg a javítást, majd olyan ellenőrző tesztet, amelyben minden slot IoU-ja τpos\tau_{pos} alatt van, és a javítás után mégis van pozitív minta.

F5. (kísérleti/transzfer, nehézség 3) Tervezzen GlyphLab-alapú egyszerű lokalizációs kísérletet: a meglévő osztályozó CNN utolsó rétege elé egy dobozfejet kell illeszteni, a cél a metadata.csv dobozoszlopaiból kódolt normalizált koordináta. Írja le a protokollt: megfigyelési egység, split, baseline, metrika, a tesztelés egyszeri korlátja. Nem kell futtatni; a terv érvényességi határát is adja meg.

26.2.8 8. Megoldások és indoklás

F1. Az objectness és az előtér-osztályozó faktorizált modell: külön Bernoulli-veszteség tanítja az objektum jelenlétét, és csak a pozitív helyeken használjuk az osztályozási cross-entropyt. A négyosztályos (háttér + három tárgyosztály) softmax ehelyett közös normalizálást alkalmaz, ezért a logitok gradiensei kölcsönösen összefüggnek. Konkrétan pozitív slotnál, nulla objectness-logit mellett a pozitív BCE deriváltja σ(0)−1=−1/2\sigma(0)-1=-1/2. Ha ehelyett négy nulla logitból induló softmaxot használunk, a valódi tárgyosztály logitjának deriváltja 1/4−1=−3/41/4-1=-3/4. A különbség nem jelenti azt, hogy egyik módszer általánosan helyesebb lenne: az architektúra, a címkézés és a veszteség közösen határozza meg a tanítási szerződést.

F2. A slotonkénti legnagyobb IoU értéke rendre 0,60{,}6, 0,30{,}3, 0,450{,}45 és 0,10{,}1. A küszöb alapján az 1. slot pozitív, a 2. és 4. negatív, a 3. figyelmen kívül hagyandó lenne. Az első GT legjobb slotja az 1., a második GT-é a 2.; a kötelező lefedés tehát a 2. slotot átteszi a pozitív halmazba. Az eredmény P={1,2}P=\{1,2\}, N={4}N=\{4\}, I={3}I=\{3\}. Az II slot objectness-veszteségének érvényességi maszkja nulla; nem szabad automatikusan negatívnak tekinteni.

F3. Az 5. szakasz NumPy-megoldásában Npos=1N_{pos}=1, és az eredmény három tagja pontosabban Lcls≈0,428379L_{cls}\approx0{,}428379, Lbox≈0,005556L_{box}\approx0{,}005556 és Lobj≈0,421378L_{obj}\approx0{,}421378; összegük 0,8553130{,}855313, tehát a kért tolerancián belül van. Az üres pozitívhalmaz elágazásának ellenőrzésére az m és g címkéket állítsuk nullára, a háttérként figyelembe vett slotok v maszkját egyre: ekkor a megoldásban L_cls = L_box = 0.0, és csak az érvényes slotokra átlagolt softplus(o_hat) marad. Ha egyes slotok figyelmen kívül hagyandók, azok v értéke nulla.

F4. A hibás kód csak a pozitív IoU-küszöböt vizsgálja, így egy nehezen illeszkedő GT dobozhoz egyetlen pozitív slot sem kerülhet. A javítás előtt minden célhoz válasszuk ki a legjobb IoU-jú slotot, majd képezzük a két feltétel unióját: pos = threshold_pos | forced_pos. Például egyetlen GT és a iou = np.array([[0.1], [0.2], [0.3]]) tömb esetén, τpos=0,5\tau_{pos}=0{,}5 mellett a küszöbös rész üres, de forced_pos = {2} (nullától indexelve), így a javított pozitív halmaz nem üres. Több GT esetén ellenőrizni kell, hogy a kényszerített kiválasztások nem ugyanazt a slotot igénylik-e; ütközéskor egyedi hozzárendelési szabály szükséges.

F5. A kísérlet alapegysége a scene_id: két nézet ugyanabból a jelenetből nem kerülhet eltérő splitbe. A bemenet kizárólag a kép; a metadata.csv dobozadatait célként használjuk. A splitet a tanítás előtt rögzítjük, a dobozokat a megadott félig nyílt xyxy konvenció szerint dekódoljuk, a választott fej és célkódolás egyezését alak- és geometriai próbákkal ellenőrizzük. Baseline lehet a train alapján becsült, osztályonkénti medián doboz. A modellválasztás train/val adaton történik, a rögzített modell test-IoU-ját egyszer mérjük; a jelenetekhez kötődő függőséget csoportszintű bizonytalanságbecslésben is megőrizzük. Az eredmény a GlyphLab mesterséges alakzatain érvényes, természetes képi lokalizációra nem általánosítható automatikusan.