Глубокое обучение в MATLAB

Что такое глубокое обучение?

Deep learning - эта ветвь машинного обучения, который учит компьютеры делать то, что приходит человеку естественным путем: учиться на опыте. Алгоритмы машинного обучения используют вычислительные методы, чтобы «узнать» информацию непосредственно из данных, не полагаясь на заранее определенное уравнение в качестве модели. Глубокое обучение особенно подходит для распознавания изображений, что важно для решения таких задач, как распознавание лиц, обнаружение движения и многие передовые технологии помощи драйверу, такие как автономное управление автомобилем, обнаружение маршрута, обнаружение пешеходов и автономная парковка.

Deep Learning Toolbox™ обеспечивает простой MATLAB® команды для создания и соединения слоев глубокой нейронной сети. Примеры и предварительно обученные сети облегчают использование MATLAB для глубокого обучения, даже без знания передовых алгоритмов компьютерного зрения или нейронных сетей.

Для свободного практического введения в практические методы глубокого обучения смотрите Deep Learning Onramp.

Что вы хотите сделать?Подробнее
Выполните передачу обучения, чтобы тонко настроить сеть с вашими данными

Начните глубокое обучение быстрее, используя Передача Обучения

Совет

Подстройка предварительно обученной сети, чтобы узнать новую задачу, как правило, намного быстрее и проще, чем обучение новой сети.

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

Создайте простую сеть глубокого обучения для классификации

Обучите сверточную нейронную сеть для регрессии

Измените размер, поворот или предварительную обработку изображений для обучения или предсказанияПредварительная обработка изображений для глубокого обучения
Пометьте данные изображения автоматически на основе имен папок или в интерактивном режиме с помощью приложения

Обучите сеть для классификации изображений

Image Labeler (Computer Vision Toolbox)

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

Классификация последовательностей с использованием глубокого обучения

Прогнозирование временных рядов с использованием глубокого обучения

Классифицируйте каждый пиксель изображения (для примера, дороги, автомобиля, пешехода)Начало работы с семантической сегментацией с использованием глубокого обучения (Computer Vision Toolbox)
Обнаружение и распознавание объектов на изображенияхРаспознавание, обнаружение объектов и семантическая сегментация (Computer Vision Toolbox)
Классификация текстовых данных Классификация текстовых данных с помощью глубокого обучения
Классификация аудио данных для распознавания речиРаспознание речевых команд с использованием глубокого обучения
Визуализация свойств обученной сети

Глубокие изображения мечты с использованием GoogLeNet

Визуализация активаций сверточной нейронной сети

Обучайте на центральном процессоре, графическом процессоре, нескольких графических процессорах, параллельно на рабочем столе или в кластерах в облаке и работайте с наборами данных, слишком большими, чтобы помещаться в памятиГлубокое обучение с большими данными на графических процессорах и параллельно

Подробнее о применение глубокого обучения областях, включая беспилотное вождение, см. Применения глубокого обучения.

Чтобы выбрать, использовать ли предварительно обученную сеть или создать новую глубокую сеть, рассмотрите сценарии в этой таблице.

 Используйте предварительно обученную сеть для передачи обученияСоздайте новую глубокую сеть
Обучающие данныеОт сотни до тысяч маркированных изображений (маленьких)От тысяч до миллионов маркированных изображений
РасчетУмеренные расчеты (опционально для графического процессора)Вычислите интенсивно (требует графический процессор для скорости)
Время обученияСекунды к минутамДни к неделям для реальных проблем
Точность моделиХорошо, зависит от предварительно обученной моделиВысокий, но может перегружаться небольшими наборами данных

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

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

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

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

  • Автоматическое чтение пакетов изображений для более быстрой обработки в приложениях машинного обучения и компьютерного зрения

  • Импорт данных из коллекций изображений, которые являются слишком большими, чтобы помещаться в памяти

  • Пометьте данные изображения автоматически на основе имен папок

Попробуйте Глубокое Обучение в 10 линиях КОДА MATLAB

В этом примере показано, как использовать глубокое обучение для идентификации объектов на веб-камере реального времени, используя только 10 линии кода MATLAB. Попробуйте пример, чтобы увидеть, насколько просто начать глубокое обучение в MATLAB.

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

    camera = webcam; % Connect to the camera
    net = alexnet;   % Load the neural network

    Если вам нужно установить webcam и alexnet add-on, появляется сообщение от каждой функции со ссылкой, которая поможет вам скачать бесплатные дополнения с помощью Add-On Explorer. Кроме того, смотрите Deep Learning Toolbox Model для AlexNet Network и MATLAB Support Package для веб-камер USB.

    После установки модели Deep Learning Toolbox для AlexNet Network можно использовать ее для классификации изображений. AlexNet является предварительно обученной сверточной нейронной сетью (CNN), которая была обучена на более чем миллионе изображений и может классифицировать изображения в 1000 категорий объектов (для примера, клавиатуры, мыши, кофейной кружки, карандаша и многих животных).

  2. Запустите следующий код, чтобы показать и классифицировать живые изображения. Наведите веб-камеру на объект, и нейронная сеть сообщает, какой класс объекта она думает, что веб-камера показывает. Он будет продолжать классифицировать изображения, пока вы не нажмете Ctrl + C. Код изменяет размер изображения для сети, используяimresize (Image Processing Toolbox).

    while true
        im = snapshot(camera);       % Take a picture
        image(im);                   % Show the picture
        im = imresize(im,[227 227]); % Resize the picture for alexnet
        label = classify(net,im);    % Classify the picture
        title(char(label));          % Show the class label
        drawnow
    end

    В этом примере сеть правильно классифицирует кружку кофе. Экспериментируйте с объектами в вашем окружении, чтобы увидеть, насколько точна сеть.

    Чтобы посмотреть видео этого примера, смотрите Глубокое Обучение в 11 линиях КОДА MATLAB.

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

    Для следующих шагов глубокого обучения можно использовать предварительно обученную сеть для других задач. Решите новые классификационные задачи на данных изображения с помощью передачи обучения или редукции данных. Для примеров смотрите Начать Глубокое Обучение Быстрее С Помощью Передачи обучения и Обучить Классификаторы С Использованием Функций, Извлеченных из Предварительно Обученных Сетей. Чтобы попробовать другие предварительно обученные сети, см. Pretrained Deep Neural Networks.

Начните глубокое обучение быстрее, используя Передача Обучения

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

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

Передача обучения позволяет вам:

  • Перенесите выученные функции предварительно обученной сети в новую задачу

  • Передача обучения происходит быстрее и проще, чем обучение новой сети

  • Уменьшите время обучения и размер набора данных

  • Выполняйте глубокое обучение, не нуждаясь в том, чтобы научиться создавать целую новую сеть

Интерактивный пример см. в разделе Передача Обучения with Deep Network Designer.

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

Обучите классификаторы, используя функции, извлеченные из предварительно обученных сетей

Редукция данных позволяет вам использовать степень предварительно обученных сетей, не вкладывая время и усилия в обучение. Редукция данных может быть самым быстрым способом использования глубокого обучения. Вы извлекаете выученные функции из предварительно обученной сети и используете эти функции для обучения классификатора, например, машины опорных векторов (SVM - требует Statistics and Machine Learning Toolbox™). Для примера, если SVM обучен с использованием alexnet может достигнуть > 90% точности на вашем наборе обучения и валидации, тогда подстройка с передачей обучения может не стоить усилий, чтобы получить некоторую дополнительную точность. Если вы выполняете подстройку на небольшом наборе данных, то также рискуете подгонкой. Если SVM не может достичь достаточно хорошей точности для вашего приложения, то подстройка стоит усилий, чтобы искать более высокую точность.

Для получения примера смотрите Извлечение изображения Функций с использованием предварительно обученной сети.

Глубокое обучение с большими данными на центральных процессорах, графических процессорах, параллельных процессорах и облаке

Нейронные сети по своей сути являются параллельными алгоритмами. Вы можете воспользоваться этим параллелизмом, используя Parallel Computing Toolbox™, чтобы распределить обучение между многоядерными центральными процессорами, графическими модулями (GPU) и кластерами компьютеров с несколькими центральными процессорами и графическими процессорами.

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

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

Чтобы узнать больше о оборудовании глубокого обучения и настройках памяти, смотрите Глубокое Обучение с Большими Данными на графических процессорах и в Parallel.

Похожие темы