Советы по применению современных моделей компьютерного зрения к временным рядам и анализу ЭЭГ.
Помощь в диагностике с помощью глубокого обучения
Для таких заболеваний, как эпилепсия, сбор данных физиологических временных рядов (таких как ЭЭГ и ЭКГ) жизненно важен для постановки диагноза и назначения лечения. Тем не менее, эти данные часто представляют собой огромные объемы информации (одно 7-дневное исследование ЭЭГ представляет более 3 миллиардов точек данных!) и требуют, чтобы эксперты просмотрели их в поисках проблемных областей. Это может быть невероятно трудоемким процессом, что делает диагностику длительным и потенциально дорогостоящим процессом.
Чтобы преодолеть эти проблемы, Seer использует методы глубокого обучения, направленные на выделение клинически значимых областей в сигналах временных рядов, таких как ЭЭГ. Важно отметить, что клиницист остается в курсе и принимает все клинические решения, но, быстро привлекая его внимание к интересным частям исследования (некоторые из которых действительно трудно найти даже для подготовленных экспертов), процесс становится значительно быстрее и эффективнее. .
Выделяя области клинического значения, анализ ЭЭГ с помощью глубокого обучения может сократить время просмотра в 5–100 раз.
В этом сообщении блога я опишу некоторые приемы, которые мы используем в Seer для создания вспомогательных инструментов анализа ЭЭГ с использованием глубокого обучения. В частности, я продемонстрирую методы перевода многих современных сверточных нейронных сетей (CNN) из компьютерного зрения в область анализа ЭЭГ и анализа временных рядов в более широком смысле.
Удобные возможности глубокого обучения
В последние годы огромное количество работы (не говоря уже о времени, деньгах, данных, конкурсах, докторских диссертациях и т. д.) было затрачено на создание удивительных методов глубокого обучения для целого ряда различных приложений. Хотя часть этого была направлена конкретно на приложения ЭЭГ и другой тесно связанный анализ временных рядов (например, ЭКГ), подавляющее большинство было сосредоточено на приложениях в компьютерном зрении, обработке естественного языка и обработке звука — в основном, вещах, которые ИИ таких гигантов, как Google/Microsoft/Nvidia/OpenAI/и т. д. обратили свое внимание на.
К счастью, многие из достижений в этих, казалось бы, несвязанных областях могут быть легко перенесены в область анализа временных рядов и, в частности, автоматизированного просмотра ЭЭГ с некоторыми незначительными изменениями в их архитектуре.
Рассмотрим модель ResNet, которая является обычной CNN, используемой для классификации изображений, а также образует основу многих моделей обнаружения и сегментации объектов. Он работает с данными изображения, представленными [ширина в пикселях × высота в пикселях × количество цветовых каналов]. Напротив, данные ЭЭГ представлены [длиной во временных точках × количество сигнальных каналов]. Следовательно, каналы ЭЭГ состоят из 1 измерения (времени), тогда как изображения имеют 2 измерения (ширина и высота), и, сопоставляя 2D-операции с 1D-операциями, можно применить одну и ту же архитектуру модели к обоим типам данных.
Преобразование моделей изображений в одномерные модели позволяет нам воспользоваться десятилетиями достижений в области компьютерного зрения для решения задач временных рядов.
Преобразование моделей видения во временные ряды
Есть два основных способа использования модели компьютерного зрения для временных рядов. Первый — изменить архитектуру глубокого обучения для работы с данными ЭЭГ, а второй — изменить данные ЭЭГ, чтобы они больше походили на данные изображения. В этом блоге речь пойдет о первом, изложив подход на примере модели классификации изображений ResNet9.
Большинство глубоких сверточных моделей для компьютерного зрения состоят всего из нескольких различных слоев нейронной сети. К ним относятся двумерные свертки, пакетная нормализация, максимальное объединение, среднее объединение и слои нелинейности/активации (часто ReLU или выпрямленная линейная единица). В современных средах глубокого обучения, таких как PyTorch, поскольку каждый из этих слоев также имеет одномерную реализацию, преобразование в архитектуру временных рядов обычно относительно простое.
Рассмотрим следующий слой PyTorch torch.nn.Conv2d:
Как преобразовать приведенный выше двумерный сверточный слой в одномерный сверточный слой? Очень просто — мы можем просто изменить один символ и вместо этого использовать слой PyTorch torch.nn.Conv1d. Конечно, есть и более сложные случаи, включающие неквадратные сверточные ядра, пошаговое перемещение и заполнение ввода, но их также можно быстро согласовать с эквивалентным одномерным слоем.
Прежде чем перейти к коду и изменить 2D CNN для данных временных рядов, нам нужно рассмотреть несколько вещей. К ним относятся (1) размер наших сверточных ядер (и восприимчивого поля), (2) количество входных каналов в наших данных и (3) количество выходных узлов (т. е. классов). для модели классификации) нам нужно.
1. Рецептивное поле модели
Как правило, важным фактором при преобразовании 2D CNN в 1D CNN является размер сверточных ядер и восприимчивого поля модели в разных частях ее глубины. Рецептивное поле соответствует области входных данных, которая вносит свой вклад в каждую точку на выходе, продемонстрированную здесь для одного слоя:
Сверточные слои с более крупными ядрами имеют большие рецептивные поля, потому что они используют большие области входных данных для генерации выходных данных. Когда слои складываются вместе, рецептивное поле модели увеличивается, как показано ниже. Для приложений обработки звука и, в меньшей степени, анализа ЭЭГ и ЭКГ обычно используются более крупные ядра, чем в компьютерном зрении, из-за высокой частоты дискретизации данных и соображений скорости обработки.
Выбранный размер ядра для каждого из слоев в модели и соответствующее восприимчивое поле обычно должны определяться на основе рассматриваемой проблемы временных рядов. Допустим, модель изображения была оптимизирована для рецептивного поля размером 21x21 пиксель с использованием серии из 10 последовательных сверточных слоев с ядрами 3x3. Если эта модель была переведена в 1D CNN для ЭЭГ, то требуется большее рецептивное поле, поскольку для распознавания многих морфологий ЭЭГ требуется более 21 временной точки. Если вместо этого мы используем 10 ядер размера 7, у нас будет рецептивное поле размером 61, что позволит модели распознавать паттерны во входных данных, которые охватывают 61 момент времени (или 0,24 секунды при 256 Гц). Есть несколько других приемов увеличения рецептивного поля, например, использование расширения ядра. Если вам интересно узнать больше об арифметике рецептивного поля, об этом можно прочитать много; вот один пример.
2. Входные каналы
Очень распространенным требованием при переводе моделей глубокого обучения из одной задачи в другую является модификация входного и выходного слоев, чтобы приспособить форму входных данных и желаемые выходные метки. Для подавляющего большинства моделей компьютерного зрения на вход подаются 3 цветовых канала, обычно RGB. Это означает, что входное изображение размером 256x256 пикселей представлено данными размером 3x256x256. Данные временных рядов обычно имеют разное количество входных каналов, а звук обычно имеет 1 (моно) или 2 (стерео) канала. Для стандартных данных ЭЭГ 10–20 имеется 21 канал. Таким образом, для 10-секундного фрагмента данных ЭЭГ, отобранных с частотой 256 Гц, один вход будет представлен 21x2560 точками данных. Изменение модели для размещения другого количества входных каналов обычно является простой задачей и требует только модификации первого слоя в сети глубокого обучения. Обратите внимание, что для простоты на каждом из приведенных выше рисунков показан только один канал для каждой свертки. На самом деле может быть произвольное количество каналов, различающихся между входами и выходами.
3. Выходные классы
Точно так же при применении любой модели к проблеме, на которой она не была предварительно обучена, новая проблема часто требует другого количества выходных данных модели. Возьмем, к примеру, обнаружение изображений. Если вы обучили модель на 600 классах набора данных для обнаружения открытых изображений и хотели точно настроить модель на 80-классовом наборе данных COCO, количество выходных узлов на последнем слое модели пришлось бы изменить. от 600 до 80. Это верно при переводе модели компьютерного зрения в модель временных рядов. Что касается классификаторов изображений, то (очень) часто они обучались на классическом наборе данных ImageNet с 1000 классами. Для автоматизированного анализа ЭЭГ, напротив, может потребоваться только несколько классов (например, межприступный, судорожный, артефактный и т. д.).
Из-за частоты, с которой изменяются входные каналы и выходные классы, часто полезно параметризовать их, чтобы пользователь мог передать их в вашу модель, как это сделано в приведенном ниже фрагменте кода.
Собираем все вместе
Наконец, давайте реализуем все это и преобразуем классификатор 2D-изображений в классификатор 1D-временных рядов. Ниже приведен полный пример, показывающий, как изменить модель ResNet9, а также увеличить размер рецептивного поля за счет удлинения наших ядер.
Подводя итог этим изменениям, изменив всего 4 строки кода, мы преобразовали 2D-модель ResNet9 в классификатор временных рядов и увеличили восприимчивое поле ее сверточных слоев. Прелесть этого в том, что, как только вы освоите его, несмотря на то, что это относительно простой пример, тот же подход можно применить к подавляющему большинству глубоких сверточных моделей, включая большинство моделей из многих популярных глубинных моделей с открытым исходным кодом. библиотеки компьютерного зрения.