Что возвращает ImageDataGenerator, и как сделать увеличение данных? - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь приспособить модель CNN (архитектура Ale xNet) с набором данных 4900 изображений (480 * 640 * 3), и я хотел бы сделать Data Augmentation, я сделал собственный генератор, который использует метод ImageDataGenerator, поскольку изображения находятся по разным путям и надписям, поэтому я создал класс, который берет все пути и сохраняет в двух списках пути к изображениям и их метки, затем он загружает пакеты из 32 изображений и меток и подходит для генератора данных изображений :

Это метод пользовательского генератора, который вызывается из модели, когда он подходит, и где я подгоняю ImageDataGenerator

def __getitem__(self,index) :
      batch_x=self.img_filenames[index * self.batch_size : (index+1) * self.batch_size]
      batch_y=self.labels[index * self.batch_size: (index+1) * self.batch_size] 
      gen=ImageDataGenerator(rescale=1./255,
                         rotation_range=90,
                         brightness_range=(0.1,0.9),
                         horizontal_flip=True)
      X=[plt.imread(filename) for filename in batch_x]
      X,Y = next(gen.flow(x= np.array(X), y= np.array(batch_y), batch_size=self.batch_size))
      return X,Y

У меня есть несколько вопросов:

Что предполагается, что ImageDataGenerator возвращает, если я передам 32 (batch_size) разных изображения, он вернет 32 измененных изображения, 1 для каждого или 32 изображения для каждого, и если я пропущу только 1 изображение с размером пакета 32 , он возвращает 32 измененных изображения из этого? Я почти уверен, что это 1 для каждого, но я хочу подтвердить.

Во-вторых, если я хочу иметь изображения 40 КБ, если я снова изменяю индекс на 0, когда он превышает образцы // batch_size, и измените метод len , умножив на 2 или что я хочу, предполагается, что, поскольку изображения генерируются случайным образом, у меня будет 4900 новых изображений или столько, сколько я хочу, не так ли?

Основная проблема в том, что когда он достигает точности 0,5, он перестает увеличиваться, я пробовал с 3 эпохами, и это то же самое, он увеличивается до 3 или 4 партий, а затем останавливается, поэтому я сомневаюсь.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2020

Я напечатал X.shape и, кажется, это 32 изображения, но они были изменены, поэтому они не умножают изображения. И метод увеличения данных, который я сказал, тоже работает отлично.

0 голосов
/ 21 февраля 2020

Позвольте мне попытаться ответить 1. Если вы передаете размер пакета от 32 до ImageDataGenerator только с horizontal_flip=True, он переворачивает все 32 изображения по горизонтали и пропускает эти 32 +32 (оригинал + отражение) для обучения.
Если вы установите horizontal_flip и vertical_flip, то 32 + 32 + 32 изображения будут переданы для обучения. Для brightness_range он создает одно изображение для каждой шкалы яркости, соответствующей одному исходному изображению. Это означает, что если ваша шкала яркости 0.1-0.5, то было получено 32*5 изображений.

Я не уверен насчет второго вопроса. Лучше выбрать больше данных как для тренировок, так и для тестовых данных.

Для третьего вопроса вам следует попробовать efficient net с focal loss

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...