Классифицируйте изображения по разным возрастным группам с помощью CNN

Благодаря недавним достижениям в области глубокого обучения и искусственного интеллекта машины теперь могут выполнять все более сложные задачи. Эти вещи могут быть связаны с изображениями, видео, аудио или другими сложными данными. Сегодня у нас есть огромный объем данных, и у нас также есть адекватная инфраструктура для обработки этих данных и их использования.

В настоящее время доступны приложения для мобильных телефонов, которые позволяют прогнозировать ваш возраст. Но задумывались ли вы когда-нибудь о том, как эти приложения могут определить ваш возраст? Здесь роль глубокого и машинного обучения. Модель обнаруживает ваше лицо и передает данные о лице через классификатор глубокого обучения, который возвращает ваш (приблизительный) возраст.

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

В этой статье будет использоваться сверточная нейронная сеть (CNN), подход глубокого обучения, для обучения наших данных изображения. Короче говоря, CNN помогают нам более эффективно обрабатывать данные изображений.

В частности, CNN имеют многоуровневую структуру, которая помогает модели узнавать о различных характеристиках изображения. У него есть слой свертки, который помогает изучать различные части изображений, а затем у нас есть слой объединения, который помогает объединить основные функции изображения. Объединение в пул уменьшает размер входных данных за счет извлечения только выделенной части изображения.

И мы используем ReLU в качестве функции активации для нашей модели. Вы можете узнать больше об основах CNN здесь:



В этом руководстве мы будем использовать блокнот Jupyter для обучения нашей модели. В Jupyter Notebook мы можем запустить набор фрагментов кода и получить желаемый результат.

Установка Jupyter Notebook

Блокноты Jupyter являются частью дистрибутива Anaconda и имеют открытый исходный код. Используйте эту ссылку для установки. Обязательно установите флажок в конце, где он попросит добавить Anaconda в переменную среды.

После завершения установки откройте приглашение Anaconda и введите «jupyter notebook», и он запустит Jupyter Notebook в вашем браузере. Затем вы увидите интерактивное окно с несколькими кнопками и раскрывающимися списками.

Щелкните «новый», чтобы открыть новый блокнот Python.

Импортировать библиотеки

Когда у вас будет готовый блокнот Jupyter, вставьте приведенный ниже код. Это библиотеки, которые мы собираемся использовать для обучения, проверки и тестирования нашей модели.

Мы будем использовать TensorFlow для построения нашей модели глубокого обучения, а для загрузки данных мы будем использовать модуль ImageDataGenerator в Python для загрузки данных на основе папки классов:

Формат данных

Мы работаем с данными изображений и разделим эти данные на три класса: Young, Middle & Old. Эти данные я скачал с изображений Google. Вы можете искать там определенное поколение людей и загружать изображения в Google Images, я бы посоветовал использовать расширение для Chrome «Загрузить все изображения». Это расширение можно использовать бесплатно. После скачивания изображения вы можете сохранить их в отдельной папке. Имена наших папок представляют имена классов. Я создал разные папки для разных классов. Пожалуйста, проверьте изображение ниже:

Здесь в наших соответствующих папках есть изображения в зависимости от меток их классов. У меня около 5000 изображений на класс. Чем больше у вас качественных изображений, тем лучше будет модель. Тем не менее, если у вас меньше изображений, смело используйте техники увеличения изображений.

Определение параметров

batch_size_train = 25
num_classes= 3
IMAGE_SIZE=[200,200]
classes_required = ['MIDDLE','OLD','YOUNG']

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

Чтение данных изображения

Определение структуры модели

Я использовал последовательную модель с тремя наборами сверточных слоев, слоев ReLU и пула с пакетной нормализацией, чтобы наша модель не переборщила.

И, наконец, после выравнивания данных я использовал один плотный слой. Вы можете использовать другой набор слоев. Нет конкретного правила для количества слоев, но традиционно мы сначала должны использовать сверточный слой, затем функцию активации ReLU, а затем слой объединения:

Компиляция модели

opt = Adadelta(learning_rate=0.0001, decay=1e-6)
model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])

Нам нужно определить наш оптимизатор и функцию потерь. Оптимизатор использует функцию потерь для установки веса во время обратного распространения ошибки. Доступно множество оптимизаторов, и нам нужно попробовать разные оптимизаторы на основе данных, поскольку они ведут себя по-разному.

Мы используем функцию потерь categorical_crossentropy loss. Categorical_crossentropy loss работает с классификационными моделями.



Обучение модели

Наконец, у нас есть готовые данные, архитектура модели и оптимизатор. Пришло время обучить нашу модель. Выполнив команду ниже, ваша модель начнет обучение.

model.fit_generator(train_batches, steps_per_epoch=50, epochs=100, verbose=1)

Присядьте, возьмите чай или кофе или прогуляйтесь - обучение модели может занять около 1–3 часов в зависимости от конфигурации вашего компьютера, размера набора данных и количества эпох, для которых вы тренируетесь. Во время тренировки вы можете увидеть точность и потери в самом блокноте (выделено на изображении выше).

Сохраните вашу модель

После завершения обучения модели обязательно сохраните ее, чтобы вы могли использовать ее в любое время. Выполните приведенную ниже команду, чтобы сохранить модель на свой компьютер:

Загрузить сохраненную модель

После того, как модель обучена и сохранена, если вы хотите использовать ее на своем веб-сайте или в приложении для моделирования, вам не нужно будет повторно обучать ее. Просто импортируйте библиотеки и загрузите свою модель. Теперь пришло время сделать вывод.

Выполнение вывода с использованием модели

Мы будем использовать OpenCV для более эффективной загрузки наших изображений. Вы можете загрузить любое изображение по вашему выбору. Затем нам нужно передать его модели, и, если все работает правильно, модель предоставит нам возрастной класс, к которому принадлежит изображение.

В заключение

Прежде всего, поздравляю с созданием модели классификатора возраста! Мы сделали много: структурировали классы папок, подготовили данные для моделирования, определили наш классификатор глубокого обучения, определили оптимизатор и функцию потерь, обучили модель и, наконец, выполнили вывод для прогнозирования возраста входного изображения.

Попробуйте это со своими собственными изображениями. Вы можете точно настроить параметры своей модели или изменить количество эпох обучения, чтобы построить еще лучшую модель.

Продолжайте изучать науку о данных!

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

Независимая редакция, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по обработке данных и группам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим участникам и не продаем рекламу.

Если вы хотите внести свой вклад, отправляйтесь на наш призыв к участникам. Вы также можете подписаться на наши еженедельные информационные бюллетени (Deep Learning Weekly и Comet Newsletter), присоединиться к нам в » «Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов, событий и гораздо больше, что поможет вам быстрее и лучше строить модели машинного обучения.