Если вы ничего не знаете о классификации изображений, предлагаю вам ознакомиться с моей предыдущей статьей о классификаторе рукописных цифр. Я ожидаю определенного уровня понимания нейронных сетей от читателей. Все коды доступны на github.
Введение
ИИ — одна из самых горячих тем сейчас. Знаем мы это или нет, но это уже вокруг нас. Крупные компании, такие как Amazon, Google, Apple и т. д., отслеживают данные своих пользователей, чтобы категоризировать и классифицировать своих клиентов для лучшего таргетинга на клиентов для рекламы, обслуживания продуктов и многих других областей. В этой статье я создам классификатор мусора. Он будет классифицировать мусор на данной картинке по 5 категориям: пластик, металл, бумага, стекло и картон. Мне не удалось повысить точность еще на 78%, но это просто проблема небольшого набора данных, с большим набором данных модель должна адаптироваться к более высокой точности.
увеличение данных keras
Чтобы справиться с проблемой небольшого набора данных, я использовал увеличение данных. По сути, он немного изменяет изображения, чтобы генерировать больше изображений. Если немного увеличить картинку пластиковой бутылки, смысл картинки не меняется. Точно так же отражение изображения по горизонтали (или, в некоторых случаях, по вертикали) не меняет смысла изображения. Увеличение данных keras сделает все эти модификации за вас.
flow_from_directory автоматически сгенерирует индексы классов меток из имен каталогов. Таким образом, train_generator имеет как данные изображения, так и данные метки.
Есть еще один способ справиться с проблемой небольшого набора данных — трансферное обучение. Трансферное обучение выходит за рамки этой статьи (может быть рассмотрено в следующих статьях).
Модель
Я использовал пять сверточных блоков, каждый из которых содержал два сверточных слоя и слой maxpool в конце. Если вы ничего не знаете о сверточных нейронных сетях, самое время прочитать об этом. Вот — хорошая статья.
Цифры довольно произвольны, вы можете играть с цифрами и даже получить лучшие результаты, чем я.
Обучение
С увеличением данных мы не можем использовать подгонку, как обычные модели keras. При увеличении данных мы используем fit_generator и передаем ему train_generator (помните, что он содержит данные изображения с метками).
Я обучил модель в google colab, а также предлагаю вам это сделать. CNN требует большой вычислительной мощности, поэтому, если у вас нет хорошего графического процессора, даже не пытайтесь обучать его на своем процессоре (если у вас много времени, то это другая история). Я тренировал модель на 500 эпох (5 раз по 100 эпох).
Рекомендуется всегда сохранять вашу модель. Я использовал контрольную точку, которая сохраняет модель, если точность проверки улучшилась.
Контрольная работа
Давайте протестируем нашу модель (спойлер: она не очень). Я оценил модель и получил точность 78%.
Теперь посмотрите на некоторые прогнозы из тестового набора.
Вывод
Я не эксперт в области ИИ, я просто студент инженерного факультета, который интересуется ИИ. Эта статья предназначена для того, чтобы помочь другим людям, которые также интересуются ИИ, и помочь мне лучше понять эту тему. Все коды доступны на моем github.
использованная литература
Предварительная обработка изображений — документация Keras
data_format: формат данных изображения, либо «channels_first, либо channels_last. Режим channels_last означает, что изображения…keras.io»