Начать разработку решений с использованием 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
, чтобы отображать входное изображение и прогнозируемый результат в виде горизонтальной гистограммы.
Выводы
Это проблеск того, насколько легко теперь можно начать прогнозирование объектов с помощью распознавания изображений и сверточных нейронных сетей. Но это только начало, потому что мы можем настроить одну из этих сетей для предсказания с высокой точностью наших собственных классов объектов с использованием трансферного обучения.
В следующей статье мы познакомимся с трансферным обучением для пользовательской классификации изображений.