Использование инструментария глубокого обучения Matlab для проектов классификации изображений
Введение: Почему глубокое обучение для классификации изображений?
Классификация изображений — задача назначения метки изображению из заранее определенного набора категорий — стала краеугольным камнем современного компьютерного зрения. От медицинской диагностики до автономного вождения точная классификация приводит к бесчисленным приложениям реального мира. Глубокое обучение, особенно сверточные нейронные сети (CNN), значительно повысило точность классификации, часто превосходя производительность на уровне человека на контрольных наборах данных. Однако создание и обучение глубоких моделей с нуля требует значительных данных, вычислительных ресурсов и опыта. Именно здесь в картину входит инструментарий глубокого обучения MATLAB, обеспечивающий интегрированную среду, которая снижает барьер для входа, все еще предлагая гибкость, необходимую для передовых исследовательских и производственных систем.
MATLAB уже давно является фаворитом среди инженеров и ученых в области численных вычислений и прототипирования. Deep Learning Toolbox расширяет эту возможность с помощью предварительно построенных слоев, функций обучения и бесшовного аппаратного ускорения. Независимо от того, являетесь ли вы студентом, исследующим нейронные сети или профессионалом, развертывающим классификатор в реальном времени, набор инструментов предлагает структурированный рабочий процесс, который охватывает подготовку данных, проектирование моделей, обучение, оценку и развертывание.
Обзор инструментария Deep Learning Toolbox
Deep Learning Toolbox (ранее Neural Network Toolbox) предоставляет полный набор функций и приложений для проектирования, обучения и моделирования глубоких нейронных сетей. Он поддерживает широкий спектр архитектур, в том числе:
- Связные нейронные сети (CNN) для изображения и пространственных данных.
- Рекуррентные нейронные сети (RNN) и LSTM для данных последовательностей и временных рядов.
- Трансформаторные сети для обработки естественного языка и задач видения.
- Генеративные состязательные сети (GAN) для генерации изображений.
Инструментарий интегрируется с более широкой экосистемой MATLAB, включая Инструментарий обработки изображений, Инструментарий компьютерного зрения и Параллельный вычислительный инструментарий, что позволяет использовать комплексные решения. Ключевые функции, особенно полезные для классификации изображений, включают:
- Предварительно обученные модели , такие как AlexNet, VGG-16/19, GoogLeNet, ResNet, Inception и EfficientNet, которые могут использоваться для обучения передаче или извлечения функций.
- Увеличение данных через объект , что позволяет трансформациям на лету, таким как вращение, масштабирование, перевод и отражение, искусственно увеличивать наборы обучения и уменьшать переобучение.
- Автоматическая дифференциация и поддержка графического процессора с использованием Parallel Computing Toolbox и встроенной системы MATLAB для более быстрого обучения.
- Инструменты визуализации , такие как и , для проверки архитектуры слоев, карт активации и прогресса в обучении.
- Варианты развертывания, включая генерацию кода, экспорт в TensorFlow или ONNX и прямую интеграцию со встроенным оборудованием через MATLAB Coder.
Понимание сверточных нейронных сетей для классификации изображений
В основе большинства систем классификации изображений лежит CNN. Эти сети изучают иерархические особенности: ранние слои обнаруживают края и текстуры, средние слои распознают формы и части, а более глубокие слои идентифицируют объекты. В MATLAB Deep Learning Toolbox реализованы все стандартные типы слоев - Convolution2dLayer, maxPooling2dLayer, FullConnectedLayer, softmaxLayer и classificationLayer - что делает его простым в сборке пользовательских архитектур. В наборе инструментов также поддерживаются современные инновации, такие как стандартизация пакетов, отсев и остаточные соединения.
Зачем использовать MATLAB для дизайна CNN?
По сравнению с такими фреймворками, как TensorFlow или PyTorch, MATLAB предлагает несколько уникальных преимуществ:
- Интерактивная среда: Приложение позволяет создавать сети с перетаскиванием, что идеально подходит для начинающих или быстрого прототипирования.
- Интегрированная отладка: Вы можете пройти через итерации обучения и проверить активации на любом уровне, упрощая диагностику модели.
- Эффективность памяти: MATLAB автоматически обрабатывает память GPU, избегая распространенных ошибок вне памяти, которые мешают ручному кодированию.
- Построенные метрические трекеры : Обучение автоматически регистрирует точность, потери и показатели проверки, которые могут быть построены в режиме реального времени.
Подготовка данных: основа успешного классификатора
Независимо от того, насколько сложная модель, плохие данные приводят к плохой производительности. MATLAB предоставляет несколько утилит для эффективного управления наборами данных изображений.
Используя
Функция является стандартным способом загрузки больших коллекций изображений. Она автоматически маркирует изображения на основе названий папок, поддерживает разделение на обучающие, валидирующие и тестовые наборы и может считывать изображения с диска партиями, чтобы избежать переполнения памяти. Например:
imds = imageDatastore('path/to/images', 'IncludeSubfolders', true, 'LabelSource', 'foldernames');
[imdsTrain, imdsValidation, imdsTest] = splitEachLabel(imds, 0.7, 0.15, 'randomized');
Усовершенствование данных
Для улучшения обобщения, особенно с ограниченными данными, можно применять случайные преобразования во время обучения. MATLAB поддерживает:
- Случайное вращение (0-360 градусов)
- Случайные горизонтальные/вертикальные отражения
- Случайное масштабирование и перевод
- Корректировка сдвига и контраста
Эти преобразования применяются на лету, то есть модель видит несколько разное изображение каждую эпоху без хранения нескольких копий на диске. Это значительно снижает переобучение и повышает надежность.
Обработка несбалансированных наборов данных
Наборы данных реального мира часто имеют неравные распределения классов. MATLAB предлагает взвешенные классификационные слои () и может автоматически вычислять весы классов из частот набора учебных программ. Альтернативно, вы можете перепродавать классы меньшинств, используя пользовательский хранилище данных или свойство опции обучения .
Трансфертное обучение: ускорение развития с помощью предварительно обученных моделей
Обучение глубокому CNN с нуля на небольшом наборе данных редко бывает практичным. Трансферное обучение использует модель, предварительно обученную на большом наборе данных (например, ImageNet) и точно настраивает его для новой задачи. MATLAB делает этот процесс исключительно простым.
Загрузка предварительно обученной сети
Используйте или , и т. д. Эти функции загружают модель автоматически, если она еще не присутствует на диске. Сети возвращаются в качестве объекта или , сохраняя весы и структуру слоя.
Модифицировать сеть для пользовательской задачи
Окончательные слои предварительно обученной сети предназначены для классификации ImageNet 1000-го класса.Для адаптации к вашему количеству классов (скажем, 5) вы заменяете полностью подключенный слой и классификатор:
lgraph = layerGraph(net);
newLayers = [
fullyConnectedLayer(numClasses, 'Name', 'fc_new', 'WeightLearnRateFactor', 10, 'BiasLearnRateFactor', 10)
softmaxLayer('Name', 'softmax_new')
classificationLayer('Name', 'classoutput_new')
];
lgraph = replaceLayer(lgraph, 'fc1000', newLayers(1));
lgraph = replaceLayer(lgraph, 'fc1000_softmax', newLayers(2));
lgraph = replaceLayer(lgraph, 'ClassificationLayer_fc1000', newLayers(3));
Fine-Tuning vs. Feature Extraction (альбом)
Две общие стратегии:
- Экстракция характеристик : Заморозить ранние слои (установить их скорость обучения до 0) и только обучить новые слои классификации. Полезно, когда новый набор данных мал и похож на исходный набор данных.
- Точная настройка: Обучайте все слои с небольшой скоростью обучения. Лучше, когда новый набор данных больше или значительно отличается от ImageNet. MATLAB позволяет устанавливать коэффициенты скорости обучения на каждом уровне (как показано выше), чтобы контролировать, насколько каждый слой адаптируется.
Практические советы по трансферному обучению в MATLAB
- Всегда изменять размер изображения до размера ввода, ожидаемого предварительно обученной сетью (например, 224x224 для ResNet). Используйте для эффективного изменения размера во время обучения.
- Используйте данные проверки для мониторинга переобучения; если точность проверки на плато рано, уменьшите количество учебных эпох.
- Более легкие модели, такие как MobileNet, быстрее, но менее точны; более глубокие модели, такие как ResNet-152, предлагают более высокую точность при вычислительной стоимости.
Обучение классификатора: варианты, гиперпараметры и мониторинг
После того, как сеть определена и данные подготовлены, вы звоните с хранилищем данных, графом слоев и вариантами обучения.
Конфигурация вариантов обучения
Функция FLT:21 позволяет контролировать практически каждый аспект обучения:
- Солвер: «sgdm» (стохастический градиентный спуск с импульсом), «adam» или «rmsprop».Адам часто сходится быстрее для тонкой настройки.
- Начальная скорость обучения: Обычно 1e-4 для тонкой настройки, 1e-3 для обучения с нуля.
- MiniBatchSize: Зависит от памяти GPU; общие значения 32, 64 или 128.
- МаксЭпохи: Количество полных проходов по данным обучения. Начните с 10-20 для точной настройки.
- Данные проверки: Предоставьте хранилище данных для проверки производительности каждой эпохи.
- Частота проверки: Сколько итераций между проверками проверки.
- Плоты : «тренировочный прогресс» для просмотра живых участков точности и потери.
- Расписание обучаемости: Опустить скорость обучения после определенного количества эпох (например, «piecewise»).
- L2Регуляризация: Распад веса для предотвращения переобучения (по умолчанию 1e-4).
Прогресс в области мониторинга
На графике обучения MATLAB показаны как точность обучения, так и точность / потеря проверки с течением времени. Если точность проверки перестает улучшаться, в то время как точность обучения продолжается, модель переобучается - рассмотрите добавление отсева, уменьшение размера сети или использование более сильного увеличения. В наборе инструментов также регистрируется информация об обучении в структуре , которая может быть проанализирована позже.
Ранняя остановка и контрольная точка
Хотя вы не встроены напрямую, вы можете реализовать раннюю остановку, используя свойство опций обучения . Альтернативно, используйте опцию , чтобы сохранить промежуточные сети каждое фиксированное количество эпох, гарантируя, что вы не потеряете прогресс.
Оценка эффективности модели
После обучения нужно убедиться, что модель хорошо обобщает невидимые данные. MATLAB предоставляет несколько инструментов оценки.
Классификация тестовых изображений
YPred = classify(net, imdsTest);
YTest = imdsTest.Labels;
accuracy = sum(YPred == YTest) / numel(YTest);
Матрицы путаницы и метрики класса
Используйте , чтобы визуализировать, где модель делает ошибки. Для точности класса, отзыва и оценки F1 используйте:
confMat = confusionmat(YTest, YPred);
Затем вычислите метрики вручную или используйте выход с опцией , чтобы получить оценки прогнозирования для анализа ROC.
РПЦ и AUC
Для двоичной классификации или сценариев с одним против всех вы можете построить график кривых рабочих характеристик приемника (ROC) с использованием . Это особенно важно в медицинской визуализации, где важна пороговая настройка.
Развертывание: переход модели в производство
Сила MATLAB выходит за рамки прототипирования — она предлагает несколько путей для развертывания обученных моделей в реальных приложениях.
Экспорт в другие рамки
- TensorFlow/Keras: Используйте для экспорта в формат ONNX, а затем конвертируйте в TensorFlow.
- PyTorch: Аналогичный путь экспорта ONNX.
MATLAB Coder и GPU Coder
Создайте автономный код C/C++ из вашей обученной сети с помощью MATLAB Coder. Это идеально подходит для встраивания классификаторов в настольные или встроенные системы без необходимости выполнения MATLAB. GPU Coder генерирует код CUDA для NVIDIA GPU, позволяя делать выводы в реальном времени на краю.
Компилятор и производственный сервер MATLAB
Упакуйте классификатор в качестве автономного исполняемого файла или общей библиотеки. MATLAB Production Server позволяет развертывать модели в качестве RESTful API, которые могут быть использованы веб-приложениями, мобильными приложениями или корпоративным программным обеспечением.
Развертывание встроенного оборудования
С поддержкой Deep Learning Toolbox для ARM Cortex-A и NVIDIA Jetson вы можете развертывать оптимизированные сети непосредственно во встроенные системы. Функция может генерировать оптимизированный аппаратным обеспечением код, который вписывается в ограниченные ресурсами среды.
Реальные приложения и тематические исследования
Инженеры и исследователи использовали инструментарий глубокого обучения MATLAB для классификации изображений в различных областях:
- Медицинская визуализация: Классификация рентгеновских лучей грудной клетки для выявления пневмонии, изображения дна сетчатки для оценки диабетической ретинопатии и гистопатологические слайды для диагностики рака.
- Автономное вождение : распознавание дорожных знаков, пешеходов и разметки полос движения с использованием мобильных сетей, развернутых на встроенных системах транспортных средств.
- Сельское хозяйство: Выявление болезней растений по изображениям листьев, сортировка плодов по зрелости.
- Производство : визуальный осмотр дефектов на сборочных линиях, часто с выводом в реальном времени с использованием GPU Coder.
- Безопасность : распознавание лиц и обнаружение объектов на видеозаписях наблюдения.
Для конкретных примеров см. Официальный учебник по трансферному обучению MATLAB и эта статья о глубоком обучении в медицинской визуализации .
Сравнение MATLAB с другими фреймворками глубокого обучения
Хотя MATLAB не является открытым исходным кодом, его инструментальная цепочка предлагает беспрецедентную интеграцию для инженеров, которые уже работают в экосистеме MATLAB. Для команд, которым требуются бесплатные решения с открытым исходным кодом, могут быть предпочтительными TensorFlow или PyTorch. Однако преимущества MATLAB включают:
- Простота использования: Нет необходимости управлять средами Python, конфликтами версий или адом зависимостей.
- Интеграция симулинк : Для системного моделирования можно включить блоки глубокого обучения в более крупные симуляции.
- Обработка сигналов и изображений встроенными в систему : этапы предварительной обработки могут быть написаны на одном языке без импорта дополнительных библиотек.
Для проектов, где сотрудничество с пользователями, не являющимися MATLAB, имеет решающее значение, экспорт в ONNX обеспечивает совместимость. Узнайте больше об экспорте ONNX здесь
Обычные подводные камни и как их избежать
- Несоответствие размера ввода : Всегда проверяйте, что входной слой соответствует размеру ваших изображений. Используйте для изменения размера.
- Переподготовка : Увеличьте увеличение, добавьте выпадающие слои, уменьшите пропускную способность сети или используйте более сильную регуляризацию.
- Медленное обучение: Убедитесь, что у вас есть совместимый GPU и что MATLAB использует его (проверьте с ).
- Ошибки памяти: Уменьшите размер мини-серии или используйте массивы для наборов данных вне памяти.
- Игнорирование дисбаланса классов: Всегда проверяйте распределение этикеток; используйте взвешенную потерю или перепробование.
Продвинутые темы: пользовательские учебные петли и исследования
Для исследователей, продвигающих самые современные технологии, MATLAB поддерживает пользовательские учебные циклы с использованием объектов и автоматической дифференциации. Вы можете реализовать новые слои, функции потерь или процедуры обучения (например, мета-обучение, состязательное обучение). Документация на пользовательские учебные циклы приводит примеры.
Заключение
Инструментарий глубокого обучения MATLAB обеспечивает мощную, удобную для пользователя среду для решения проблем классификации изображений. От простого обучения передаче до пользовательских архитектур, инструментарий упрощает каждый шаг, сохраняя гибкость, необходимую для передовых приложений. Его интеграция с более широкой экосистемой MATLAB - в сочетании с несколькими вариантами развертывания - делает его отличным выбором как для академических исследований, так и для промышленного развертывания. Следуя структурированному рабочему процессу, изложенному в этой статье, вы можете использовать весь потенциал глубокого обучения для ваших проектов классификации изображений.