Классовый дисбаланс для классификации изображений

Я работаю над классификацией изображений с несколькими этикетками, где на некоторых этикетках очень мало изображений. Как справиться с этими случаями?


person Nandan Pandey    schedule 21.06.2020    source источник


Ответы (3)


Увеличение данных, что означает создание «клонов» (обратное изображение / установка другого ракурса и т. Д.)

person Kohelet    schedule 21.06.2020

Сделайте увеличение изображения для вашего набора данных. Увеличение изображения означает добавление вариаций (шум, изменение размера и т. Д.) К тренировочному изображению таким образом, чтобы классифицируемый объект можно было увидеть невооруженным глазом.

Некоторый код для увеличения изображения есть.

добавление шума

gaussian_noise=iaa.AdditiveGaussianNoise(10,20)
noise_image=gaussian_noise.augment_image(image)
ia.imshow(noise_image)

Обрезка

crop = iaa.Crop(percent=(0, 0.3)) # crop image
corp_image=crop.augment_image(image)
ia.imshow(corp_image)

Sheering

shear = iaa.Affine(shear=(0,40))
shear_image=shear.augment_image(image)
ia.imshow(shear_image)

Перелистывание

#flipping image horizontally
flip_hr=iaa.Fliplr(p=1.0)
flip_hr_image= flip_hr.augment_image(image)
ia.imshow(flip_hr_image)

Теперь вам просто нужно поместить это в свой генератор данных, и ваша проблема дисбаланса классов будет решена.

person Sohaib Anwaar    schedule 21.06.2020

Хотя вы можете увеличить свои данные, как это предлагается в ответах, вы можете использовать разные веса, чтобы сбалансировать потери, связанные с несколькими метками. Если n_c - количество образцов в классе c, тогда вы можете взвесить свое значение потери для класса c:

l_c' = (1/n_c) * l_c
person guibs35    schedule 27.08.2020