Ar reikia daryti pavyzdį, artimą realybei, arba su vienodu klasių balansu, mokant YOLO aptikti retus objektus?
sobes.tech AI
Atsakymas iš AI
Sėkmingai mokant YOLO aptikti retus objektus, svarbu atsižvelgti į klasių pusiausvyrą, tačiau požiūris priklauso nuo užduoties ir duomenų. Jei naudojate pavyzdžių atranką, artimą tikrajai paskirstymui (t. y. su natūraliu disbalansu), modelis gali blogai išmokti atpažinti retus klases dėl trūkstamų pavyzdžių.
Todėl dažnai taikomos balansavimo technikos, pavyzdžiui, atranka su vienodu pavyzdžių skaičiumi kiekvienai klasei arba duomenų didinimo metodų naudojimas retoms klasėms. Tai padeda modeliui geriau išskirti retus objektus.
Tačiau pernelyg didelis dirbtinis balansavimas gali sukelti permokymąsi retose klasėse ir pabloginti bendrą našumą.
Optimalus požiūris yra derinti klasių balansą, atsižvelgiant į tikrąjį paskirstymą, pavyzdžiui, naudoti svorines nuostolių funkcijas arba fokuso praradimą (focal loss), kuris sumažina dažnai pasitaikančių klasių įtaką ir sutelkia dėmesį į retas.
Pavyzdys, naudojant svorinius pavyzdžių atranką:
# Pavyzdys pseudokodo, kaip subalansuoti klases
from torch.utils.data import WeightedRandomSampler
class_sample_counts = [1000, 100, 50] # kiekvienos klasės pavyzdžių skaičius
weights = 1. / torch.tensor(class_sample_counts, dtype=torch.float)
samples_weight = weights[labels]
sampler = WeightedRandomSampler(samples_weight, num_samples=len(samples_weight), replacement=True)
# Naudoti sampler DataLoader