Начать разработку решений с использованием Deep Learning становится все проще и проще. Недавно Google запустил Colaboratory, бесплатную облачную службу, в которой вы можете бесплатно разрабатывать приложения для глубокого обучения на GPU.

Colaboratory - это предварительно настроенная среда для ноутбуков Jupyter, которая работает полностью в облаке, без необходимости загружать, устанавливать или запускать что-либо на вашем собственном компьютере. Более того, записные книжки хранятся на Google Диске, и к ним можно предоставить общий доступ, как если бы вы делали это с Google Docs.

Среда поддерживает Python для выполнения кода и предустановлена ​​TensorFlow, фреймворк с открытым исходным кодом для глубокого обучения, выпущенный Google к концу 2015 года. Если вы не привыкли к Python , сейчас хорошее время для изучения, так как это самый популярный язык программирования для ИИ.

Вы можете напрямую перейти в Совместную записную книжку, которую мы создали для этой статьи, и протестировать свои изображения, выполнив следующий код Runtime ›Run all и загрузив файл на пятом шаге.

Распознавание изображений и CNN

Распознавание изображений - это проблема идентификации и классификации объектов на изображении. Что представляют собой изображенные объекты? -. Возможно, наиболее простым приложением является автоматическая пометка изображений для управления веб-контентом. Автоматическое распознавание людей, одежды, еды, домашних животных и всего, что имеет отношение к делу, может быть очень полезным, когда дело доходит до управления и обработки больших наборов изображений, от электронной коммерции до ведения блогов.

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

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

Существует множество архитектур CNN, доступных для бесплатного и неограниченного использования, которые могут обеспечить разумную производительность при сложных задачах визуального распознавания. Например, Keras - библиотека нейронной сети высокого уровня, которая служит простым в использовании слоем абстракции поверх Tensorflow - обеспечивает доступ к некоторым победившим в соревнованиях (ImageNet ILSVRC) CNN, таким как ResNet50 (разработан Microsoft Research) или InceptionV3 (разработан Google Research), готов распознавать 1000 общих объектов (Список объектов ILSVRC).

Начало работы с Colaboratory

Чтобы начать играть с классификацией изображений, нам просто нужно войти в Colaboratory и создать новый блокнот, следуя New Notebook ›New Python 3 Notebook, и начать установку Keras.

!pip install -q keras

Помимо написания кода, Colaboratory позволяет писать в записной книжке команды оболочки, которым предшествует символ «!». Это дает нам контроль над виртуальной машиной (ВМ) для установки других пакетов, отличных от пакетов по умолчанию.

Загрузка и запуск модели

Любая модель распознавания изображений, доступная в Keras, может быть загружена всего двумя строками кода. Это автоматически загружает веса предварительно обученной модели с использованием набора данных Imagenet, готовой для классификации 1000 общих объектов.

from keras.applications.inception_v3 import InceptionV3
model = InceptionV3(weights=’imagenet’, include_top=True)

Модуль keras.applications предоставляет некоторые стандартные стандартные архитектуры, такие как VGG16, ResNet50, InceptionV3 или MobileNet. Мы выбрали архитектуру Inception-v3 от Google, потому что она одна из лучших, с рейтингом ошибок в топ-5 3,46%. Это измеряет, как часто модель не может предсказать правильный ответ, как одна из их пяти главных догадок - топ-5 ошибок.

Функция прогнозирования

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

import numpy as np
from keras.preprocessing import image
from keras.applications.inception_v3 import preprocess_input, decode_predictions
def predict(model, img_path, target_size=(299, 299), top_n=5):
    img = image.load_img(img_path, target_size=target_size)
    x = image.img_to_array(img)
    x = np.expand_dims(x, axis=0)
    x = preprocess_input(x)
    preds = model.predict(x)
    return decode_predictions(preds, top=top_n)[0]

Сначала нужно изменить размер изображения до фиксированного входного размера Inception_v3, в этом случае target_size=(299, 299), другие сети, такие как VGG16 или ResNet50, должны быть равны (224, 224). Функция image.load_img из keras.preprocessing напрямую загружает изображение из img_path и изменяет размер изображения до указанного target_size.

Следующим шагом является преобразование изображения img в массив numpy с image.img_to_array и с np.expand_dim, чтобы изменить форму массива с (3, 299, 299) на (1, 3, 299, 299) - одно изображение с 3 каналами RGB и размером 299 на 299 -. Это связано с тем, что функция model.predict требует в качестве входных данных 4-мерного массива, что означает, что она может классифицировать несколько изображений одновременно.

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

Наконец, мы выполняем вывод с model.predict и decode_predictions, возвращая понятные человеку метки из ImageNet ILSVRC и прогнозируемую вероятность.

Загрузка изображения и предсказание

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

from google.colab import files
uploaded = files.upload()
for fn in uploaded.keys():
 print(‘User uploaded file “{name}” with length {length} bytes’.format(
 name=fn, length=len(uploaded[fn])))

Загрузили изображение, делаем прогноз и показываем результаты.

pred = predict(model, fn)
plot_image(fn)
plot_pred(pred)

Мы используем matplotlib, чтобы отображать входное изображение и прогнозируемый результат в виде горизонтальной гистограммы.

Выводы

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

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