Сверточные нейронные сети. Три вещи, которые необходимо знать
Перевод статьи Convolutional Neural Network 3 things you need to know
Что из себя представляют сверточные нейронные сети?
Сверточная нейронная сеть (также CNN или ConvNet) является одним из наиболее популярных алгоритмов в глубоком обучении, это такой вид машинного обучения, при котором модель учится выполнять задачи классификации непосредственно на изображении, видео, тексте или звуке.
Сверточные нейронные сети особенно полезны для поиска шаблонов (паттернов) на изображениях для распознавания объектов, лиц и сцен. Они учатся непосредственно на изображениях, используя шаблоны для классификации изображений и устраняя потребность в ручном извлечении признаков.
Приложения, требующие распознавания объектов и компьютерного зрения, такие как беспилотные автомобили и приложения для распознавания лиц, во многом зависят от CNN. В зависимости от вашего приложения вы можете построить свою CNN с нуля или использовать готовую модель на ваших данных.
Что делает свертночные нейронные сети такими полезными?
Использование CNN для глубокого обучения стало популярнее благодаря трем важным факторам:
- CNN устраняют необходимость ручного извлечения признаков - CNN сама извлекает признаки.
- CNN выдают самые современные результаты распознавания.
- CNN могут быть переобучены для выполнения новых задач распознавания, что позволит вам использовать существующие сети.
CNN обеспечивают прогресс обнаружения и распознавания объектов
CNN предоставляют оптимальную архитектуру для распознавания изображений и обнаружения шаблонов. В сочетании с достижениями в области графических процессоров и параллельных вычислений CNN являются ключевой технологией, лежащей в основе новых разработок в области беспилотного вождения и распознавания лиц.
Например, приложения используют CNN для изучения отчетов о патологии для визуального обнаружения раковых клеток. CNN также позволяют беспилотным автомобилям обнаруживать объекты и учиться различать дорожные знаки и пешеходов.
Подробнее
Create Simple Deep Learning Network for Classification
Train a Convolutional Neural Network for Regression - пример
Object Detection Using Deep Learning - пример
Train a Deep Learning Vehicle Detector - пример
Как работают сверточные нейронные сети?
Сверточная нейронная сеть может иметь десятки или сотни слоев, каждый из которых учится обнаруживать различные особенности изображения. Фильтры применяются к каждому обучающему изображению с разным разрешением, и выходные данные каждого свернутого изображения используются в качестве входных данных для следующего слоя. Фильтры могут начинаться обработки самых простых характеристик изображения, таких как яркость и края, и усложняться до характеристик, которые однозначно определяют объект.
CNN выполняют идентификацию и классификацию изображений, текста, звука и видео.
Изучение характеристик, слои и классификация
Как и другие нейронные сети, CNN состоит из входного слоя, выходного слоя и множества скрытых слоев между ними.
Эти уровни выполняют операции, которые изменяют данные с целью изучения характеристик, специфичных для этих данных. Три наиболее распространенных уровня: свертка, активация или ReLU и объединение (pooling).
- Свертка пропускает входные изображения через набор сверточных фильтров, каждый из которых активирует определенные характеристика изображений.
- Выпрямленный линейный блок (ReLU) позволяет проводить более быстрое и эффективное обучение, отображая отрицательные значения в ноль и сохранения положительных значений. Иногда это называют активацией, потому что только активированные характеристики переносятся на следующий уровень.
- Объединение (pooling) упрощает вывод, выполняя нелинейное понижение качества изображения, уменьшая количество параметров, которые необходимо изучить сети.
Эти операции повторяются на десятках или сотнях слоев, при этом каждый слой учится определять различные характеристики.
Пример сети с множеством сверточных слоев. Фильтры применяются к каждому обучающему изображению с разным разрешением, и выходные данные каждого свернутого изображения используются в качестве входных данных для следующего слоя.
Слои классификации
После изучения характеристик на многих уровнях архитектура CNN переходит к классификации.
Предпоследний слой — это полностью связанный слой, который выводит вектор размером K, где K - количество классов, которые сеть сможет предсказать. Этот вектор содержит вероятности для каждого класса любого классифицируемого изображения.
Последний слой архитектуры CNN использует уровень классификации, такой как softmax, для обеспечения вывода классификации.
Аппаратное ускорение с помощью графических процессоров
Сверточная нейронная сеть обучается на сотнях, тысячах или даже миллионах изображений. При работе с большими объемами данных и сложной сетевой архитектурой графические процессоры могут значительно сократить время обработки для обучения модели. После обучения CNN можно использовать в приложениях реального времени, таких как обнаружение пешеходов в системах помощи водителю.
Использование MATLAB с CNN
Использование MATLAB® с Deep Learning Toolbox ™ позволяет обучать собственную CNN с нуля или использовать предварительно обученную модель для выполнения так называемого transfer learning.
Выбор метода зависит от доступных ресурсов и типа создаваемого приложения.
Чтобы обучить сеть с нуля, архитектор должен определить количество слоев и фильтров, а также другие настраиваемые параметры. Обучение модели с нуля также требует огромных объемов данных, порядка нескольких миллионов образцов, что может занять большое количество времени.
Распространенной альтернативой обучению CNN с нуля является использование предварительно обученной модели для автоматического извлечения характеристик из нового набора данных. Этот метод, называемый transfer learning, представляет собой удобный способ применения глубокого обучения без огромного набора данных и длительного времени вычислений и обучения.
Обучение с нуля
Создание сети с нуля означает, что вы определяете конфигурацию сети. Этот подход дает максимальный контроль над сетью и может дать впечатляющие результаты, но он требует понимания структуры нейронной сети и множества типов и конфигурации слоев.
Хотя результаты иногда могут превосходить transfer learning (см. ниже), этот метод, как правило, требует большего количества изображений для обучения, так как новой сети требуется много примеров объекта, чтобы понять изменение характеристик. Время обучения часто больше, и существует так большое количество комбинаций слоев сети, что настраивать сеть с нуля может оказаться непосильной задачей. Обычно при построении сети и организации слоев полезно ссылаться на другие конфигурации сети, чтобы воспользоваться преимуществами того, было успешно выполнено ранее.
Подробнее
Create a Simple Deep Learning Network for Classification - пример
Demystifying Deep Learning: Semantic Segmentation and Deployment (47:09) - видео
Использование предварительно обученных моделей для transfer learning
Точная настройка предварительно обученной сети с помощью transfer learning обычно намного быстрее и проще, чем обучение с нуля. Это требует наименьшего количества данных и вычислительных ресурсов. Transfer learning использует знания одного типа задач для решения схожих задач. Вы начинаете с предварительно обученной сети и используете ее для изучения новой задачи. Одним из преимуществ transfer learning является то, что предварительно обученная сеть уже освоила большой набор характеристик. Эти характеристики могут быть применены к широкому кругу других аналогичных задач. Например, вы можете взять сеть, обученную на миллионах изображений, и переобучить ее для классификации новых объектов, используя только сотни изображений.
С помощью Deep Learning Toolbox вы можете выполнять transfer learning с предварительно обученными моделями CNN (такими как GoogLeNet, AlexNet, vgg16, vgg19) и моделями на основе Caffe и TensorFlow-Keras.
Подробнее
Pretrained Convolutional Neural Networks - документация
Приложения, использующие CNN
Распознавание объектов
Распознавание объектов — это процесс обнаружения и классификации объектов на изображениях и видео. Computer Vision Toolbox™ предоставляет тренировочный фреймворк для создания детекторов объектов на основе глубокого обучения с использованием R-CNN (области с CNN), Fast R-CNN и Faster R-CNN.
Вы можете использовать методы машинного обучения из пакета Statistics and Machine Learning Toolbox™ с Computer Vision Toolbox для создания систем распознавания объектов.
Deep Learning Toolbox предоставляет функции для построения и обучения CNN, а также для прогнозирования с помощью обученной модели CNN.
Распознавание объектов с использованием глубокого обучения
В этом примере показано, как обучить детектор объектов с помощью глубокого обучения и R-CNN (области со сверточными нейронными сетями).
Распознавание объектов с использованием более быстрого глубокого обучения R-CNN
В этом примере показано, как обучить детектор объектов с помощью метода глубокого обучения Faster R-CNN (области со сверточными нейронными сетями).
Как узнать больше о CNN
Продукты, поддерживающие использование CNN для анализа изображений, включают MATLAB, Computer Vision System Toolbox, Statistics and Machine Learning Toolbox и Deep Learning Toolbox.
Сверточные нейронные сети требуют Deep Learning Toolbox. Обучение и прогнозирование поддерживаются графическим процессором с поддержкой CUDA® и вычислительной мощностью 3.0 или выше. Рекомендуется использование графического процессора, для которого требуется Parallel Computing Toolbox ™.
Видео
Introduction to Deep Learning: What Are Convolutional Neural Networks? (4:44)
Object Recognition: Deep Learning and Machine Learning for Computer Vision (26:57)
Примеры и инструкции
Image Category Classification Using Deep Learning – пример
Training a Deep Neural Network for Digit Classification – пример
Object Detection Using Deep Learning – пример
Ссылки на программное обеспечение
Convolutional Neural Networks – документация
Autoencoders – документация
Deep Learning – документация
Комментарии