Для распознавания изображений и видео используют особый тип нейросетей — сверточные. Например, они помогают анализировать результаты МРТ и рентгеновские снимки, чтобы поставить правильный диагноз.
Вместе с Марией Жаровой, Data Scientist Альфа-Банка, разбираемся, как устроены сверточные нейросети и что нужно знать для начала работы с ними.
Что такое сверточные нейронные сети
Сверточные нейронные сети — разновидность нейросетей для обработки данных с сеточной структурой: изображений и видео.
Сверточные нейросети анализируют пиксели, которые находятся близко друг к другу и содержат непрерывную визуальную информацию — яркость и оттенок. Например, если в одном пикселе нейросеть видит цветок, то и в стоящих рядом пикселях она тоже его распознает.
Идея создания сверточных нейронных сетей обсуждалась еще в середине XX века. Но к ней вернулись лишь в 2012 году. Тогда математики Алекс Крижевски и Джефф Хинтон представили на международном конкурсе нейросеть ImageNet. По сравнению с аналогичными моделями она совершала почти на 50% меньше ошибок при распознавании изображений: их количество снизилось с 26 до 15%. Сейчас точность стала еще выше. Например, при распознавании лиц в толпе показатель составляет 99,8%.
Структура сверточных нейросетей
У сверточных нейросетей два основных типа слоев — свертка и пулинг.
Сверточный слой
Сверточный слой, или свертка — ключевой. Здесь нейросеть убирает лишнее, например границы рисунка, линии, и оставляет только важную информацию, которая поможет ей исследовать и распознать изображение. Сверточный слой можно создавать для любого признака: форм, текстур и цветов. Нейронная сеть сама будет подбирать их на каждом слое.
Сверточные слои используют фильтры, или ядра свертки. Это заранее заданные матрицы небольшого размера, как правило, 3×3. Они нужны для распознавания картинки и выделения признаков, например краев изображения. Как это происходит в несколько шагов:
- Фильтр, подобно сканеру, последовательно перемещается по картинке.
- Каждый фильтр умножается на пиксели изображения под ним. Затем значения умноженных пар суммируются.
- Полученное число записывается в новую матрицу.
- Процесс повторяется для каждого возможного положения фильтра на изображении.
- Результат — готовая матрица или карта признаков, которая содержит информацию о том, как и где определенные признаки присутствуют на изображении.
Пулинг
После сверточного идет пулинговый слой, который помогает уменьшить размер карт признаков. Он выбирает только самые важные данные и убирает лишнее. Это также снижает нагрузку на компьютер при дальнейших расчетах.
Затем можно снова применить сверточный слой и повторить процесс несколько раз. Так получится постепенно выделить более сложные признаки на изображении. Например, сначала нейросеть найдет контуры цветка, а потом распознает его форму и оттенки лепестков.
Как работают сверточные нейронные сети
Работу сверточных нейросетей можно сравнить со зрительным восприятием человека. Сначала мы видим, например, машину, а уже потом обращаем внимание, какого она цвета и размера. Так и у нейросети: сначала распознается общее, а затем, слой за слоем, частное.
Работу сверточной нейросети можно разделить на два этапа:
- Подготовка изображения. Сверточная нейронная сеть воспринимает картинку в виде трехмерных массивов матриц или чисел. Поэтому перед поступлением в модель данные нужно подготовить. Для этого используют системы обработки изображений. Программа автоматически присваивает каждому пикселю определенное значение:
- В черно-белых картинках — число от 0 до 255 в зависимости от насыщенности.
- В цветных изображениях — трехмерную матрицу чисел в виде значений от 0 до 255 по интенсивности красного, зеленого и синего цветов.
- Применение фильтров к изображению. В процессе обработки фильтр умножает значение выбранного пикселя и значения его соседей в соответствии с матрицей фильтра. Затем полученные произведения складываются. Получившееся число заменяет исходное значение центрального пикселя. Например, если у пикселя значение 2, и после применения фильтра к нему и его соседям результат будет 13, это значение и заменит исходное. При этом значения остальных соседних пикселей не изменяются. Такой же процесс повторяется для каждого пикселя на изображении.
Для чего и где используются сверточные нейронные сети
Сверточные нейронные сети обычно применяются в задачах компьютерного зрения, потому что данные с сеточной структурой — это в основном картинки. Обычно в их задачи входят классификация, детекция и сегментация изображений.
В каких сферах чаще всего применяют свертку:
- Медицина. Сверточные нейронные сети анализируют изображения для обнаружения патологий и постановки точного диагноза. Например, они изучают рентгеновские снимки, результаты МРТ, КТ.
- Приборостроение. В беспилотных системах сверточные нейросети обрабатывают визуальные данные. Обычно это изображение видеопотока с видеорегистратора. Таким образом модели распознают дорожные знаки, полосы движения и другие объекты, чтобы сделать вождение более безопасным.
- Системы распознавания лиц. Сверточные нейронные сети используются для аутентификации в банке, в системах видеонаблюдения и других подобных сферах.
- Распознавание документов. Учреждения активно используют сверточные нейросети, чтобы расшифровывать сканы паспортов, СНИЛС и других документов.
Как сверточные нейросети будут развиваться в будущем
У сверточных нейросетей есть несколько наиболее вероятных направлений для развития:
- Интеграция с другими типами нейросетей. Например, уже сейчас активно применяется комбинация сверточных нейросетей с трансформерами — моделями преимущественно для обработки текстов. Они справляются с переводами, генерацией текстов и отвечают на вопросы. Это помогает обрабатывать многомодальные данные, то есть информацию из разных источников или в виде разных типов данных, например звука, видео, изображений, текста.
- Оптимизация вычислений. Будут разрабатываться более технологичные и эффективные архитектуры и алгоритмы. Они помогут ускорить обучение нейросетей и точность их работы.
- Расширение сфер использования. Сверточные нейронные сети показывают хорошие результаты не только при работе с изображениями — они эффективны и для других типов неструктурированных данных. Поэтому областей применения СНС будет становиться больше.
Как научиться работать со сверточными нейросетями
Сверточные нейронные сети — перспективное направление. Поэтому спрос на специалистов, которые умеют с ними обращаться, будет только расти. Если хотите развиваться в этой сфере, вам нужны знания в таких направлениях:
- Машинное обучение. Понимать процесс обучения моделей. Знать архитектуры нейронных сетей, их параметров и проблемных мест, оптимизации и т. д.
- Программирование. Уметь писать код на Python, работать с библиотеками для нейросетей и работы с изображениями — TensorFlow, PyTorch, OpenCV.
- Линейная алгебра и математика. Понимать матрицы, вектора и вычисления свертки.
Сверточные нейросети — запоминаем главное
- Сверточные нейросети нужны для распознавания изображений и видео. Они воспринимают объект в виде чисел или матриц.
- Если картинка черно-белая, то пиксели кодируются от 0 до 255 в зависимости от их насыщенности.
- В цветных изображениях пиксели распределяются по цветовым каналам на три части по насыщенности синего, зеленого и красного. В таком виде модель принимает информацию для обработки.
- Свертка применяется в разных областях: медицине, автомобилестроении, видеонаблюдении. Но может быть менее эффективна для работы с текстом и при одновременном распознавании картинок разного формата.