Оё лозим аст, ки дар омӯзиши 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)
# DataLoaderда samplerдан фойдаланиш