Лаура Мартинес Молера

Это сообщение от Oge Marques, PhD и профессора технических и компьютерных наук FAU. Оге является Заслуженным спикером Sigma Xi, автором книги и стипендиатом Лешнера AAAS. Он также является поклонником MATLAB и использует MATLAB в своих классах более 20 лет. Вы можете следить за ним в Твиттере (@ProfessorOge). В этой записи блога Оге расскажет, как выполнять глубокое обучение с использованием Python и MATLAB для примера Computer Vision.

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

Успеху и популяризации ГО в компьютерном зрении и смежных областях (например, анализе медицинских изображений) в значительной степени способствовало наличие богатых инструментов, приложений и фреймворков в экосистемах Python и MATLAB.

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

Фон

Python — язык программирования, созданный Гвидо ван Россумом в начале 1990-х годов. Он был принят многими учеными данных и исследователями машинного/глубокого обучения благодаря популярным пакетам (например, scikit-learn) и фреймворкам (например, Keras, TensorFlow, PyTorch).

MATLAB — это платформа для программирования и научных вычислений, используемая для анализа данных, разработки алгоритмов и создания моделей в различных областях науки и техники. Он имеет успешную историю широкого внедрения инженерами и исследователями в промышленности и научных кругах. Он содержит множество специализированных наборов инструментов, которые инкапсулируют соответствующие алгоритмы, интерактивные инструменты и богатые примеры в таких областях, как машинное обучение, глубокое обучение, обработка изображений и компьютерное зрение (и это лишь некоторые из них). MATLAB также имеет активное сообщество пользователей, которые вносят дополнительные функциональные возможности (включая приложения и целые наборы инструментов) и растущее присутствие в популярных репозиториях для совместного использования кода, таких как GitHub.

По моему личному опыту, я использовал как MATLAB (в течение 25 лет и больше), так и Python (менее десяти лет) в различных исследовательских проектах, классах, учебных курсах и публикациях, в основном в контексте обработки/анализа изображений, компьютерного зрения и (совсем недавно) наука о данных, машинное обучение и глубокое обучение.

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

Контекст и масштаб

Взаимодействие MATLAB и Python подробно описано в видео, вебинарах, сообщениях в блогах и официальной документации MATLAB. Эти ресурсы могут оказаться чрезвычайно полезными при изучении того, как вызывать скрипты Python из MATLAB и наоборот. Некоторые из основных причин вызова MATLAB из Python могут быть мотивированы необходимостью:

  1. Содействуйте интеграции кода между членами команды и соавторами, используя различные платформы и инструменты.
  2. Используйте функции, доступные только в MATLAB, такие как приложения и наборы инструментов (в том числе сторонние, предоставленные сообществом MATLAB).

В этой записи блога я сосредоточусь на интеграции приложений MATLAB в рабочий процесс глубокого обучения Python для задач компьютерного зрения и анализа изображений, уделяя особое внимание этапу подготовки данных традиционного рабочего процесса глубокого обучения (рис. 1). В частности, я покажу, как ваша команда может использовать богатые интерактивные возможности выбранных приложений MATLAB для подготовки, маркировки, аннотирования и предварительной обработки ваших данных, используя их в качестве входных данных для вашей нейронной сети — и все остальное, что следует в традиционном конвейере глубокого обучения. .

Рисунок 1: Базовый рабочий процесс глубокого обучения.

Я предполагаю, что: (1) у вас есть конвейер глубокого обучения для компьютерного зрения в Python, который вы планируете адаптировать и повторно использовать для нового (набора) задач; и (2) изображения, связанные с новой задачей (задачами), потребуют интерактивных действий, таких как аннотация, маркировка и сегментация.

Основной рецепт

Предполагая, что у вас MATLAB установлен и настроен на вашем компьютере и ваша любимая настройка Python (например, использование ноутбуков Jupyter), вызов MATLAB из скрипта Python — это простой процесс, основные этапы которого:

  1. (В MATLAB) Установите MATLAB Engine API for Python, который предоставляет пакет Python под названием matlab, позволяющий вызывать функции MATLAB и обмениваться данными между Python и MATLAB.
  2. (в Python) Настройте пути и рабочий каталог.
  3. (В Python) Запустите новый процесс MATLAB в фоновом режиме:

import matlab.engineeng = matlab.engine.start_matlab('-desktop')

  1. (в Python) Настройте свои переменные (например, путь к папкам с изображениями).
  2. (В Python) Вызовите приложение MATLAB по вашему выбору (например, приложение Image Labeler).
  3. (В MATLAB) Работайте (в интерактивном режиме) с выбранным приложением и экспортируйте результаты в переменные в рабочей области.
  4. (в Python) Сохраните переменные, необходимые для остальной части рабочего процесса, например, имена файлов изображений и связанные с ними метки (и их ограничивающие рамки).
  5. (В Python) Используйте переменные по мере необходимости, например, обрабатывая табличные данные с помощью панд и используя метки, связанные с изображениями, в качестве основных правд.
  6. Повторите шаги с 3 по 7 столько раз, сколько необходимо в вашем рабочем процессе.
  7. (В Python) Закройте движок MATLAB:

eng.exit()

Пример

Вот пример того, как использовать Python и MATLAB вместе для двух разных задач в рамках анализа медицинских изображений (с использованием глубокого обучения): сегментации кожных повреждений и маркировки (медицинских) изображений (ROI).

Несмотря на различия между ними, каждая задача выполняется по одному и тому же базовому рецепту, представленному ранее. Далее описаны особенности каждого случая.

Задача A: Сегментация поражения кожи

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

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

Основной рабочий процесс обычно состоит из использования сверточных сетевых архитектур, таких как U-net и его вариаций, для которых есть множество примеров реализации в Python и MATLAB. Однако важным компонентом решения является ручное создание бинарных масок, необходимых для обучения и проверки. За исключением нескольких общедоступных наборов данных, эта трудоемкая и специализированная задача должна выполняться с использованием мощного интерактивного инструмента.

Решение: используйте приложение MATLAB Image Segmenter для создания бинарных масок и используйте существующий рабочий процесс (например, Python) для всего остального. Image Segmenter позволяет создавать маски вручную и предоставляет несколько (полу-) автоматических методов для ускорения процесса и уточнения результатов (рис. 3 и 4). Как окончательное изображение маски сегментации, так и сегментированную версию исходного изображения можно экспортировать в рабочее пространство MATLAB и/или сохранить на диск.

Задача B: Маркировка (медицинских) изображений (ROI)

Задача. В контексте, аналогичном Задаче A, мы хотим создать решение для глубокого обучения для обнаружения областей интереса (ROI) на каждом изображении, т. е. поместить границу вокруг каждой соответствующей области на изображении. . Наиболее распространенной областью интереса будет поражение; другие возможные ROI могут включать наклейки, маркеры линейки, водяные пузыри, чернильные метки и другие артефакты.

Проблема. Чтобы обучить и проверить глубокую нейронную сеть для обнаружения ROI/объектов, нам нужно ввести как изображения, так и метки и координаты соответствующих ROI, которые могут быть выражены в виде прямоугольников ( чаще всего), многоугольники или маски на основе пикселей (аналогично маскам, используемым при сегментации). Задача сети состоит в том, чтобы узнать местоположение и метки соответствующих ROI для новых изображений.

Опять же, подобно тому, что мы видели в задаче A, важным компонентом решения является ручное создание ROI (многоугольников и меток), необходимых для обучения и проверки. За исключением нескольких общедоступных наборов данных, эта трудоемкая и специализированная задача должна выполняться с использованием мощного интерактивного инструмента.

Решение. Используйте приложение MATLAB Image Labeler для создания и маркировки областей интереса и использования существующего рабочего процесса для всего остального. Image Labeler позволяет создавать метки областей интереса различной формы, назначать им разные имена и цвета, а также предоставляет несколько алгоритмов, помогающих автоматизировать и ускорить процесс и уточнить результаты (рис. 5). Полученные ROI можно экспортировать в рабочее пространство MATLAB и впоследствии использовать в качестве переменных в вашем коде Python (подробности см. в примере на GitHub).

Основные выводы

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

Интеграция Python и MATLAB значительно выходит за рамки этого сообщения в блоге; проверьте ресурсы, перечисленные ниже для получения дополнительной информации.

Узнайте больше об этом

Этот пост в блоге был вдохновлен последними сообщениями в блоге Лукаса Гарсии и серией отличных видео Хизер Горр, Яна Дебре и его коллег. Я настоятельно рекомендую вам следовать за ними и ознакомиться с их очень информативными примерами и учебными пособиями. Если вас интересуют другие аспекты рабочего процесса глубокого обучения, вот несколько сообщений в блоге, в которых я:

Первоначально опубликовано на https://blogs.mathworks.com 3 января 2022 г.