Sobes.tech
Middle

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