Sobes.tech
Middle

Трябва ли да се прави сэмплиране, близко до реалността, или с равен баланс на класовете при обучението на YOLO за откриване на редки обекти?

sobes.tech AI

Отговор от AI

При обучението на YOLO за откриване на редки обекти е важно да се вземе предвид балансът на класовете, но подходът зависи от задачата и данните. Ако използвате пробовземане, близко до реалното разпределение (т.е. с естествен дисбаланс), моделът може да се научи лошо да разпознава редките класове поради липса на примери.

Затова често се прилагат техники за баланс, като пробовземане с равен брой примери за всеки клас или използване на методи за увеличаване на данните (data augmentation) за редките класове. Това помага на модела по-добре да отличава редките обекти.

Обаче прекомерното изкуствено балансиране може да доведе до пренасищане на редките класове и да влоши цялостната производителност.

Оптималният подход е да се комбинира балансът на класовете с реалното разпределение, например чрез използване на тежести в функцията за загуба или фокусирана загуба (focal loss), която намалява влиянието на често срещаните класове и акцентира върху редките.

Пример за използване на тежестно пробовземане:

# Примерен псевдокод за баланс на класовете
from torch.utils.data import WeightedRandomSampler

class_sample_counts = [1000, 100, 50]  # брой примери за всеки клас
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)

# Използвайте sampler в DataLoader