В октябре 2020 года я прошел интенсивный буткемп по аналитике данных от Ironhack Amsterdam. Это учебный курс по программированию, который превратит вас в настоящего аналитика всего за 9 недель. Это очень интенсивная программа, где вы можете изучить аналитику данных с нуля и быть готовым к работе в отрасли.

Моим последним проектом было «Распознавание ориентиров», в котором я использовал методы машинного обучения для обнаружения ориентира на заданном изображении.

Мотивация

Вы когда-нибудь пробовали использовать Google Lens для определения достопримечательностей? Вы наводите камеру на здание, и она сообщает вам ориентир. Я впервые увидел эту функцию два года назад, я был поражен ею и подумал, что это волшебство, но не мог понять, как она работает. Пройдя этот курс, я подумал, что смогу его повторить. Я сделала несколько старых фотографий моего мужа, когда он был в Риме, и использовала модель, которую я обучила, чтобы найти на них ориентиры. Моя модель смогла предсказать правильный ориентир по 7 из 8 изображений.

Рабочий процесс

  • Изучите и поймите данные.
  • Подготовьте данные.
  • Постройте модель.
  • Обучите модель.
  • Протестируйте модель.
  • Улучшить модель.

Изучение модели

Для проекта я скачал набор изображений с Kaggle — Google Landmarks Dataset. Набор данных имеет изображения, разделенные на данные обучения и данные тестирования. Получив набор данных, я начал исследовательский анализ, загрузил CSV-файлы во фрейм данных и выяснил типы данных столбцов, а также удалил недействительные ссылки и нулевые данные. Я нашел более 4 миллионов изображений с тегами 14 946 уникальных достопримечательностей.

Подготовка данных

Каждый ориентир имел более 10 тысяч изображений. Чтобы ограничить объем и провести обучение на своем ноутбуке с ограниченной вычислительной мощностью, я использовал только 13 наиболее часто встречающихся ориентиров из набора данных. и только 2000 изображений для каждого ориентира. Из них я выбрал 1600 изображений для обучения и 400 для тестирования.

Вот некоторые изображения из набора данных, помеченные метками ориентиров.

Создание модели

Я использовал сверточные нейронные сети (CNN) для построения и обучения моделей из набора данных изображения. Для этого я использовал библиотеки Tensorflow и Keras.

Для построения модели я использовал два подхода:

  • CNN без трансферного обучения.
  • CNN с передачей обучения.

Что такое трансферное обучение?

Трансферное обучение — это метод машинного обучения, при котором модель, обученная одной задаче, переназначается для второй связанной задачи. Трансферное обучение — это оптимизация, быстрый способ сэкономить время или повысить производительность.

CNN без трансферного обучения

Во-первых, я изменил размер изображения, поскольку сверточная нейронная сеть принимает значения от 0 до 1, поскольку изображения являются цветными изображениями, у них есть три канала, т.е. красный, зеленый и синий широко известны как значения «RGB», и они находятся в диапазоне от 0 до 255.

Модель состоит из следующего:

  • Входной слой представляет собой изображение «RGB».
  • Выходной слой представляет собой метку с несколькими классами.
  • Скрытые слои, состоящие из слоев свертки, слоев ReLU (выпрямленных линейных единиц), слоев объединения и полностью подключенной нейронной сети.

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

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

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

Окончательный результат рассчитывается с использованием «softmax», который дает вероятность каждого класса для заданных функций.

После того, как модель построена, она компилируется и подгоняется. Эта модель достигла точности 61,29% для обучающих данных с 10 эпохами.

CNN с трансферным обучением

Существуют наиболее эффективные модели распознавания изображений, которые можно загрузить и использовать в качестве основы для распознавания изображений. Для этого проекта я использовал предварительно обученную модель остаточной сети — ResNet50, которая используется в качестве базового уровня, т.е. входной слой.

Что такое ResNet50?

ResNet-50 — это сверточная нейронная сеть с глубиной 50 слоев. Вы можете загрузить предварительно обученную версию сети, обученную на более чем миллионе изображений из базы данных ImageNet. Предварительно обученная сеть может классифицировать изображения по 1000 категориям объектов, таким как клавиатура, мышь, карандаш и множество животных. В результате сеть изучила богатые представления функций для широкого спектра изображений. Сеть имеет входной размер изображения 224 на 224.

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

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

Аргумент «weights» имеет значение ImageNet, так как в этом случае используются веса предварительно обученной модели.

Добавлены два скрытых слоя с функцией активации как ReLU (выпрямленная линейная единица) и полносвязная нейронная сеть.

Окончательный результат рассчитывается с использованием «softmax», который дает вероятность каждого класса для заданных функций.

После того, как модель построена, она компилируется и подгоняется. Эта модель достигла точности 97,50% для обучающих данных с 10 эпохами.

Тестирование модели

Для тестирования модели я использовал модель трансферного обучения, поскольку она дала мне точность 97,50%.

Я использовал модель на 9 снимках, и она правильно определила ориентиры на 7 из них с достоверностью 18,5%. Изображения кота и подземелья дали прогноз с гораздо меньшей достоверностью — 11,1%. Похоже, моя модель хорошо подошла для фотографий.

Улучшение модели

Чтобы улучшить проделанную работу, вот несколько следующих шагов.

  • Уровень достоверности прогнозов низкий. Это нужно исследовать и исправлять.
  • Для тестирования модели я использовал 20% проверочных данных из обучающего набора. В будущем я хочу проверить точность модели, используя весь набор тестовых данных.
  • Для обучения модели я выбрал только 13 ориентиров из-за ограничений вычислительной мощности, но хочу расширить список.

Код доступен на github — Распознавание ориентиров

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