Je třeba při tréninku YOLO na detekci vzácných objektů provádět vzorkování blízké realitě nebo s rovnoměrným vyvážením tříd?
sobes.tech AI
Odpověď od AI
Při tréninku YOLO na detekci vzácných objektů je důležité vzít v úvahu vyváženost tříd, ale přístup závisí na úkolu a datech. Pokud použijete vzorkování blízké skutečnému rozdělení (tedy s přirozenou nerovnováhou), může se model špatně naučit rozpoznávat vzácné třídy kvůli nedostatku příkladů.
Proto se často používají techniky vyvážení, například vzorkování s rovnoměrným počtem příkladů pro každou třídu nebo použití metod augmentace dat (data augmentation) pro vzácné třídy. To pomáhá modelu lépe rozlišovat vzácné objekty.
Nicméně nadměrné umělé vyvážení může vést k přeučení na vzácných třídách a ke zhoršení celkového výkonu.
Optimální přístup je kombinovat vyvážení tříd s ohledem na skutečné rozdělení, například použitím vážených funkcí ztráty nebo fokální ztráty (focal loss), které snižují vliv často se vyskytujících tříd a kladou důraz na vzácné.
Příklad použití váženého vzorkování:
# Příklad pseudokódu pro vyvážení tříd
from torch.utils.data import WeightedRandomSampler
class_sample_counts = [1000, 100, 50] # počet příkladů pro každou třídu
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)
# Použití sampleru v DataLoaderu