Как преобразовать изображения в качестве входных данных в классификатор ML? - PullRequest
0 голосов
/ 14 апреля 2020

Я хочу построить классификатор изображений, я собрал изображения из Интернета и изменил их размеры, используя библиотеку PIL. Теперь я хочу, чтобы эти изображения были преобразованы в качестве входных данных. Какие операции мне нужно выполнить с этими изображениями. Я также скрывал изображения в numpy массивов и сохранить их в списке именованных функций и что делать дальше

1 Ответ

0 голосов
/ 14 апреля 2020

Ну, есть ряд решений, которые нужно принять. Одним из них является разделение ваших изображений на тренировочный набор, набор для проверки и, как правило, также на набор тестов. Обычно я использую 10% изображений в качестве набора для проверки и 10% изображений в качестве тестового набора. Далее вам нужно решить, как вы хотите предоставлять свои изображения в сеть. Я предпочитаю использовать Keras ImageDataGenerator.flow из каталога. Это требует от вас создания 3 каталогов для хранения изображений. Я поместил тестовые изображения в каталог с именем «test», проверочные изображения - в каталог «valid», а обучающие изображения - в каталог «train». Теперь в каждом из этих каталогов вам нужно создать каталоги классов с одинаковыми именами. Например, если вы пытаетесь классифицировать изображения собак и кошек. Вы должны создать подкаталог 'dogs' и подкаталог 'cats' в тестовых, обучающих и допустимых каталогах. Обязательно назовите их одинаково, потому что имена подкаталогов определяют имена ваших классов. Теперь заполните каталоги классов своими изображениями. Это могут быть изображения в стандартных форматах, таких как JPG. Теперь создайте 3 генератора: генератор поездов, генератор проверки и генератор испытаний, как в

train_gen=ImageDataGenerator(preprocessing_function=pre_process).flow_from_directory('train', target_size=(height, width), batch_size=train_batch_size, seed=rand_seed, class_mode='categorical', color_mode='rgb')

, сделайте то же самое для генератора проверки и генератора испытаний. Документация для ImageDataGenerator и flow_from_directory здесь. . Теперь у вас есть сохраненные изображения и генераторы данных, настроенные для предоставления данных вашей модели в пакетном режиме в зависимости от размера пакета. Так что теперь мы можем приступить к созданию модели. Вы можете создать свою собственную модель, однако есть отличные модели для обработки изображений, доступные для вас. Это называется трансферным обучением. Мне нравится использовать модель под названием Mobil eNet. Я предпочитаю это, потому что он имеет небольшое количество обучаемых параметров (около 4 миллионов) по сравнению с другими моделями, которые имеют десятки миллионов. У Keras есть эта и многие другие модели обработки изображений. Документация здесь. Теперь вам нужно изменить последний слой модели, чтобы адаптировать его к вашему приложению. Mobil eNet прошел обучение на базе данных Imag eNet, в которой было 1000 классов. Вам нужно удалить этот последний слой и сделать его плотным слоем, имеющим столько узлов, сколько у вас есть классов, и использовать функцию активации softmax. Пример для случая 2 классов показан ниже.

 mobile = tf.keras.applications.mobilenet.MobileNet( include_top=Top,
                                                           input_shape=(height,width,3),
                                                           pooling='avg', weights='imagenet',
                                                           alpha=1, depth_multiplier=1)
        x=mobile.layers[-2].output        
        predictions=Dense (2, activation='softmax')(x)
        model = Model(inputs=mobile.input, outputs=predictions)
        for layer in model.layers:
            layer.trainable=True
        model.compile(Adam(lr=.001, loss='categorical_crossentropy', metrics=['accuracy'])

Последняя строка кода компилирует вашу модель с использованием оптимизатора Adam со скоростью обучения 0,001. Теперь мы, наконец, можем приступить к обучению модели , Я использую генератор модели соответствия, как показано ниже:

data = model.fit_generator(generator = train_gen,validation_data=val_gen,  epochs=epochs, initial_epoch=start_epoch,
                               callbacks = callbacks, verbose=1)

Документация для вышеупомянутого здесь . Модель будет тренироваться на вашем тренировочном наборе и проверяться на валидационном наборе. Для каждой эпохи (цикла обучения) вы будете получать распечатки данных о потере обучения, точности обучения, потере проверки и точности проверки, чтобы вы могли отслеживать, как работает ваша модель. Последний шаг - запустить тестовый набор, чтобы увидеть, насколько хорошо ваша модель работает с данными, на которых она не была обучена. Для этого воспользуйтесь приведенным ниже кодом:

resultspmodel.evaluate(test_gen, verbose=0)
print('Model accuracy on Test Set is {0:7.2f} %'.format(results[1]* 100)

Вот и все, но, конечно, есть много деталей, которые нужно заполнить. Если вы новичок в Convolutional Neural Networks и машинном обучении, я бы порекомендовал отличный учебник на YouTube по адресу здесь. В списке воспроизведения есть около 20 последовательных обучающих программ. Я использовал этот урок как новичок и нашел его превосходным. В нем будут рассмотрены все темы, необходимые для освоения использования классификаторов CNN. Удачи!

...