7.15. Pisanje vlastitog¶
Kada katalog ne pokriva model – istraživačku mrežu čiji je raspored izlaza prilagođen, preinaku postojeće arhitekture, tenzor čije je semantičko tumačenje specifično za aplikaciju – aplikacija pruža vlastiti naknadni procesor. Protokol je jednostavan: poziv koji uzima (model, inputs, outputs) i vraća što god aplikacija očekuje od predict().
Klasa s __call__ uobičajeni je oblik:
class MyPostprocessor:
def __init__(self, threshold=0.5):
self.threshold = threshold
def __call__(self, model, inputs, outputs):
...
return result
Funkcionira i obična funkcija – mehanizam samo provjerava je li objekt pozivljiv.
7.15.1. Povezivanje¶
Dvije točke povezivanja. Imenovani argument postprocess= u konstruktoru veže poziv za svaki poziv predict() na modelu:
model = ml.Model("/rom/my_model.tflite",
postprocess=MyPostprocessor())
Za nadjačavanje veze za jedan poziv – zamjenu dekodera bez ponovnog učitavanja modela – proslijedite callback= izravno funkciji predict:
result = model.predict([img], callback=MyOtherPostprocessor())
Potpis pozivljivog objekta isti je u oba slučaja.
7.15.2. Što pozivljivi objekt prima¶
model– instancaModel, korisna za parametre kvantizacije (output_scale,output_zero_point,output_dtype) i ulazne dimenzije (input_shape).inputs– lista ulaza koje je aplikacija proslijedila upredict(). Prvi element obično je vezana instancaNormalization; njezin atributroiono je štoNMSočekuje za vraćanje okvira natrag u izvornu sliku.outputs– sirovi izlazni tenzori kao lista objekatandarray, u svom izvornom dtype. Float izlazi stižu takvi kakvi jesu; cjelobrojni izlazi stižu kvantizirani.
7.15.3. Kvantizirana aritmetika¶
Svi isporučeni dekoderi posežu za istim pomoćnim funkcijama u ml.utils, a prilagođeni obično želi isti obrazac: quantize() podiže float prag u kvantizirani prostor modela, threshold() filtrira bez dekvantiziranja cijelog tenzora, a dequantize() izvodi se jednom na preživjelima. sigmoid() i logit() dostupni su za mreže čiji su izlazni kanali pred-sigmoid logiti (MediaPipe detektori kanonski su primjer).
Za modele s float izlazima – regresijske glave, modele s ugrađenim završnim slojem dekvantizacije – pomoćne funkcije za kvantizaciju prolaze nepromijenjene, pa isti kod naknadnog procesora radi s bilo kojim dtype bez posebnih iznimaka.
7.15.4. Povratna vrijednost¶
Što god pozivljivi objekt vrati, to vraća i predict(). Za dekodere koji emitiraju okvire konvencija je proslijediti kandidate kroz NMS i vratiti njegove liste po klasi – oblik poziva koji dokumentira potiskivanje koje nije najveće, a detaljni vodič kroz YOLOv8 gradi u kontekstu. Za sve ostalo vratite što god aplikaciji odgovara: jedan ndarray, niz oznake, torku (class, score, embedding), rječnik.