Этот пост о предсказании атрибутов животных по изображению. Это было частью hackerearth.com Challenge, где было предоставлено 18 000 изображений. Некоторые изображения имеют ярлыки с характеристиками, а некоторые нет; цель состоит в том, чтобы создать решение, которое предсказывает эти атрибуты.

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

Первым, кто намеревался выполнить эту работу, было обучение модели InceptionV3 с использованием Keras и предварительно обученной модели, после 4 часов обучения на экземпляре P3 AWS наилучшая точность составила 97%. Однако эта точность оказалась не такой, как ожидалось, с количеством часов обучения. Кроме того, во время тренировки изображения дополнялись разными техниками, и тогда усилия не окупились. Некоторые подробности есть в этой записной книжке.

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

python retrain.py \
 — image_dir ./DL3Dataset \
 — tfhub_module https://tfhub.dev/google/imagenet/pnasnet_large/feature_vector/1

После того, как функции были готовы, я создал простую двухуровневую сетевую модель с помощью Keras; подробности здесь. И используя 30 эпох; где каждая эпоха длится менее 5 секунд, мне удалось получить модель с точностью 98,3%. Точность сохраняется как в обучающих, так и в проверочных и тестовых наборах. На изображении ниже показано, как это происходит, и кривые обучения, указывающие на то, что обучение было успешно выполнено.

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

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

Все детали и код находятся в этом репозитории GitHub, а более подробное объяснение можно найти в этом сообщении.