В 2012 году компания AlexNet заняла первое место в конкурсе ImageNet Large Scale Visual Recognition Challenge, что стало первым случаем, когда сверточная нейронная сеть победила в конкурсе по классификации изображений. Еще одним фактором, сделавшим это достижение более значимым, является то, что AlexNet показал вдвое большую точность, чем участник, занявший второе место.

В последующие годы сверточные нейронные сети были быстро интегрированы в проекты компьютерного зрения для решения задач классификации, локализации, обнаружения объектов, сегментации и других задач с высочайшей точностью. CNN стали наиболее широко используемым алгоритмом для решения различных задач компьютерного зрения. CNN применимы ко всему, что связано с изображениями и видеопотоками. Беспилотные автомобили, системы безопасности, детекторы аномалий, фельдшеры и интеллектуальные системы регулирования дорожного движения - вот лишь несколько примеров применения нейронных сетей. Машинное обучение с компьютерным зрением - захватывающая область: инженеры компьютерного зрения пользуются большим спросом, и ведущие ресурсы СМИ даже предсказывают, что эта область будет продолжать развиваться как минимум 20 лет.

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

1. Создайте свою собственную модель классификации с помощью Keras

Вы когда-нибудь играли с кубиками Lego? Если это так, у вас не возникнет проблем с использованием Keras, потому что эта структура делает разработку моделей глубокого обучения невероятно простой - даже проще, чем собирать блоки Lego, чтобы построить замок. Конечно, архитектура модели зависит от сложности проблемы, количества данных и других параметров, но нет необходимости кодировать свертки или вычислять рекурсивные цепочки производных для обратного распространения с помощью Keras. Просто создайте свою сеть слой за слоем и наполните ее данными.

Как только вы усвоите основную идею обучения нейронных сетей, следующие элементы, которые нужно изучить, могут включать в себя, как правильно выбрать гиперпараметры, такие как скорость обучения или размер пакета, какую функцию активации выбрать, что такое импульс Нестерова и как скорость обучения может быть оптимизированным. С этой целью вы можете создать модель категориальной классификации, обученную на наборе данных Iris, а затем применить сверточные нейронные сети для обучения распознавателя рукописных цифр с набором данных MNIST. Не бойтесь, если что-то пойдет не так - обучение нейронных сетей обычно не удается с первой попытки.

Если все вышеперечисленное кажется вам скучным, смело создавайте свой собственный набор данных. Например, сделайте несколько сотен фотографий своих домашних животных и обучите свою собственную модель классификации домашних животных на основе архитектур VGG-16, Inception или ResNet или просто перейдите к следующему шагу.

2. Создайте сверточную нейронную сеть с нуля с помощью Numpy

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

3. Обучите модель обнаружения объектов с помощью API обнаружения объектов TensorFlow

После того, как вы удалите белые пятна, связанные с классификацией изображений, мы сможем глубже изучить компьютерное зрение. Теперь мы собираемся обучить модель обнаружения объектов FasterRCNN на основе ResNet, используя API обнаружения объектов TensorFlow на нашем собственном наборе данных, включающем от 3 до 10 классов, хотя количество классов может быть другим. Обучение детектора объектов - интересная задача: для начала просто клонируйте репозиторий моделей Tensorflow из Github и следуйте настройке установки.

Пришло время создать набор данных (или, по крайней мере, загрузить существующий). Чтобы начать создание набора данных, загрузите несколько сотен изображений для каждой желаемой категории и вручную сопоставьте все изображения с аннотациями. К счастью, нет недостатка в инструментах, упрощающих этот процесс, хотя маркировка изображений может занять до 80% времени.

[Статья по теме: Автоматизация машинного обучения: сколько?]

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

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

Если ваша машина достаточно мощная, стоит провести оценку вместе с обучением и запустить Tensorboard, чтобы визуализировать процесс обучения.

4. Узнайте, как работать с OpenCV

OpenCV считается универсальным инструментом для решения проблем компьютерного зрения. Он включает в себя множество алгоритмов обработки изображений и видео. Исходный код написан на C ++, чтобы он работал невероятно быстро. Более того, у него есть API Python, который делает OpenCV очень удобным и простым в использовании.

Первоначальная проблема для лучшего понимания OpenCV - это обнаружение объектов на видео, используя модель из предыдущего шага. Если это было легко, попробуйте покопаться в документации OpenCV, где вы найдете интересные алгоритмы, такие как модель обнаружения объектов YOLO v3, обученная на наборе данных COCO. Или используйте камеру, чтобы создать раствор, чтобы проверить, есть ли в холодильнике какие-либо продукты.

[Статья по теме: 20 бесплатных ресурсов ODSC для изучения машинного обучения]

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

Оригинальный пост здесь.

Прочтите больше статей по науке о данных на OpenDataScience.com, включая учебные пособия и руководства от новичка до продвинутого уровня! Подпишитесь на нашу еженедельную рассылку здесь и получайте последние новости каждый четверг.