Научный руководитель: Вильданов Алмаз Нафкатович
к.ф.-м.н., Уфимский университет науки и технологий, Нефтекамский филиал
Современные технологии все чаще наделяют машины способностью видеть и понимать визуальную информацию. Компьютерное зрение стало неотъемлемой частью нашей повседневности — от распознавания лиц в смартфонах до медицинской диагностики и автономных транспортных средств. В основе этих достижений лежат сверточные нейронные сети, которые представляют собой специальный архитектурный тип нейронных сетей, особенно эффективный для работы с изображениями. Эти сети успешно справляются с задачами классификации, обнаружения объектов и сегментации изображений. Цель данной статьи — избегая сложного математического аппарата, наглядно разобрать архитектуру сверточной нейронной сети на конкретном примере кода, чтобы понять, как именно организованы и взаимодействуют ее основные компоненты.

Параметр input_shape играет ключевую роль в определении структуры входных данных для нейронной сети. В данном конкретном случае input_shape=(39, 30, 1) указывает на то, что нейросеть ожидает на вход изображения высотой 39 пикселей и шириной 30 пикселей. Третья цифра в кортеже обозначает количество цветовых каналов изображения. Значение 1 соответствует черно-белому изображению, где каждый пиксель описывается единственным числом, определяющим его яркость. В случае цветного изображения использовалось бы значение 3, что соответствует трем каналам: красному, зеленому и синему. Таким образом, вся входная информация представляется в виде трехмерного массива чисел размерностью 39 на 30 на 1, где первые два измерения отвечают за пространственные координаты пикселей, а третье – за их цветовые характеристики.
Сверточные слои служат основными детекторами признаков в нейронной сети. Их можно представить как набор специализированных фильтров, которые последовательно сканируют изображение в поиске характерных особенностей. Каждый фильтр работает как детектор определенных шаблонов — на первом уровне это могут быть простые элементы вроде горизонтальных или вертикальных линий, границ и углов. Размер ядра свертки, в данном случае составляющий 3 на 3 пикселя, определяет область изображения, которую фильтр анализирует в каждый момент времени. Такой размер является компромиссом между способностью улавливать значимые паттерны и вычислительной эффективностью. После операции свертки полученные значения пропускаются через функцию активации ReLU, которая обнуляет все отрицательные значения и сохраняет положительные. Эта нелинейная операция критически важна, поскольку позволяет сети обучаться сложным зависимостям, не ограничиваясь линейными преобразованиями. Без ReLU нейронная сеть не смогла бы эффективно описывать иерархические представления данных, независимо от количества слоев в ее архитектуре.
Слои пулинга выполняют важнейшую функцию сжатия информации в сверточных нейронных сетях. Операция MaxPooling2D с размером окна 2 на 2 проходит по всем участкам входного изображения с заданным шагом, выбирая максимальное значение в каждой области 2×2 пикселя. Этот процесс уменьшает пространственные размеры карты признаков в два раза по каждой оси, что существенно снижает вычислительную нагрузку на последующие слои сети. Но уменьшение размерности – не единственная цель пулинга. Выбирая максимальное значение в каждой области, операция максимума подчеркивает наиболее выраженные признаки и обеспечивает небольшую инвариантность к смещениям изображения. Если какой-то признак активировался сильно в пределах окна 2×2, он сохраняется, а слабые активации отфильтровываются. Такой подход позволяет сети сосредоточиться на самых важных особенностях изображения, игнорируя незначительные вариации и шумы, что в конечном счете улучшает ее обобщающую способность и предотвращает переобучение. По сути, пулинг оставляет только самые сильные “сигналы” из извлеченных сверточными слоями признаков, создавая более абстрактное и емкое представление исходных данных.
Рассматриваемая нейронная сеть построена по последовательной архитектуре с использованием модели Sequential. Данный подход предполагает линейное расположение слоев, где выход каждого предыдущего слоя последовательно передается на вход следующего. Архитектура начинается с входного слоя, принимающего изображения заданного размера. Затем следует первый сверточный блок, состоящий из слоя свертки и слоя пулинга, который выполняет первичную обработку изображения и выделение простых признаков. Далее подключен второй сверточный блок аналогичной структуры, но с увеличенным количеством фильтров, что позволяет выявлять более сложные и абстрактные особенности обрабатываемых данных. После завершения сверточной части архитектуры выполняется преобразование multidimensionalных данных в одномерный вектор с помощью операции вытягивания. Затем подключаются полносвязные слои, которые осуществляют финальный этап обработки признаков и классификацию. Такая поэтапная организация преобразования информации от простых признаков к сложным абстракциям является характерной чертой глубинных нейронных сетей и позволяет эффективно решать задачи компьютерного зрения.
Первый сверточный блок выполняет фундаментальную задачу извлечения базовых признаков из исходного изображения. На этом начальном этапе обработки сеть учится выделять простейшие элементы визуальной информации: границы объектов, переходы яркости, углы и элементарные текстуры. Конфигурация слоя Conv2D с параметрами 32 фильтра размером 3×3 означает, что сеть одновременно применяет тридцать два различных ядра свертки к входному изображению. Каждый из этих фильтров настраивается в процессе обучения для реагирования на определенный тип визуальных паттернов. Фильтры работают как детекторы особенностей, скользя по всему изображению и создавая тридцать две отдельные карты признаков. Эти карты активации представляют собой отклики сети на различные элементарные шаблоны в разных участках изображения. Такой подход позволяет сети сформировать многогранное представление входных данных, где каждый фильтр отвечает за обнаружение своего типа признаков, создавая тем самым богатое и разнообразное описание обрабатываемого изображения на самом низком уровне абстракции.
Второй сверточный блок выполняет принципиально иную задачу по сравнению с первым, работая с уже предобработанными данными. Если первый блок обнаруживал элементарные паттерны, то здесь происходит их комбинаторное объединение в более сложные и абстрактные структуры. На этом уровне формируются составные признаки: из простых линий и градиентов собираются углы, пересечения, простые геометрические формы и текстуры. Параметры слоя Conv2D с 39 фильтрами размером 3×3 демонстрируют усложнение архитектуры: увеличение количества фильтров до 39 означает, что сеть теперь способна детектировать больше разнообразных комбинаций признаков, извлеченных на предыдущем этапе. Каждый из этих 39 фильтров работает уже не с исходным изображением, а с картами признаков, полученными после первого блока, что позволяет анализировать более сложные пространственные взаимосвязи. Такой каскадный принцип обработки, когда каждый последующий слой оперирует выходами предыдущего, создает иерархическое представление информации, где сложность обнаруживаемых паттернов постепенно нарастает от слоя к слою, имитируя принципы работы зрительной системы живых организмов.
Слой Flatten выполняет критически важную функцию преобразования данных в архитектуре нейронной сети. После завершения работы сверточных и пулинг-слоев информация сохраняется в виде многомерных карт признаков, которые представляют собой набор двумерных матриц. Однако последующие полносвязные слои требуют подачи данных в формате одномерного вектора. Именно здесь вступает в операция вытягивания, которая последовательно преобразует все элементы многомерных массивов в длинный одномерный вектор. Этот процесс можно представить как разворачивание всех карт признаков в единую строку, где сохраняется вся извлеченная ранее информация, но меняется ее структурная организация. Такой подход позволяет совместить преимущества сверточных слоев, эффективно работающих с пространственными данными, и полносвязных слоев, способных к сложным нелинейным преобразованиям и классификации. Важно отметить, что операция вытягивания не приводит к потере информации, а лишь изменяет форму ее представления, подготавливая данные для финальных этапов обработки в плотных слоях нейронной сети.
Финальные слои нейронной сети выполняют ключевую задачу интерпретации извлеченных признаков и формирования итогового решения. Предпоследний полносвязный слой с 171 нейроном служит своеобразным аналитическим центром, где происходит комплексная обработка всех признаков, полученных после сверточных операций и преобразования в вектор. Количество нейронов в этом слое определяется архитектурными соображениями и представляет собой баланс между вычислительной эффективностью и способностью модели к обучению сложным зависимостям. Этот слой осуществляет нелинейные преобразования данных, выявляя сложные комбинации признаков, необходимые для точной классификации. Выходной слой с 9 нейронами и функцией активации softmax выполняет роль финального классификатора. Количество нейронов соответствует числу распознаваемых категорий, где каждый нейрон вычисляет вероятность принадлежности входного изображения к одному из девяти классов. Функция softmax обеспечивает нормализацию выходных значений, преобразуя произвольные числа в вероятностное распределение, где сумма выходов всех нейронов равна единице, что позволяет интерпретировать результат как уверенность сети в каждой из возможных категорий.
Процесс преобразования данных в сверточной нейронной сети представляет собой последовательную цепочку вычислений. Исходное черно-белое изображение размером 30 на 39 пикселей поступает на вход сети в виде числовой матрицы. Первый сверточный слой с 32 фильтрами анализирует фрагменты изображения размером 3×3 пикселя, выделяя базовые признаки и создавая 32 карты активации. Слой максимального пулинга уменьшает размерность этих карт в два раза, оставляя только наиболее значимые активации. Затем второй сверточный слой с 39 фильтрами применяется к уже обработанным данным, выявляя более сложные комбинации признаков. После повторного пулинга полученные многомерные данные преобразуются в одномерный вектор путем вытягивания, что позволяет подключить полносвязные слои. Слой с 171 нейроном анализирует извлеченные признаки и формирует промежуточное представление, на основе которого выходной слой с 9 нейронами вычисляет вероятности принадлежности к каждому из классов с помощью функции softmax. Таким образом, архитектура модели включает два сверточных слоя с 32 и 39 фильтрами соответственно и два полносвязных слоя с 171 и 9 нейронами, что образует законченную систему для классификации изображений.
Рассмотренная архитектура наглядно демонстрирует, как последовательность относительно простых слоев позволяет компьютеру эффективно анализировать визуальную информацию. Путем поэтапного преобразования от пикселей к простым признакам, а затем к сложным абстракциям, сверточная нейронная сеть формирует иерархическое представление данных, необходимое для осмысленного понимания изображений. Важно подчеркнуть, что разобранная модель представляет собой лишь базовый пример — современные архитектуры, такие как ResNet, VGG или Inception, обладают значительно большей глубиной и сложностью, используя механизмы skip-connections, батч-нормализацию и другие усовершенствования. Сфера применения сверточных сетей давно вышла за рамки статичной классификации изображений, охватывая обработку видео, системы компьютерного зрения для беспилотных автомобилей, медицинскую диагностику, генерацию и стилизацию изображений, а также анализ спутниковых снимков. Принципы иерархического представления признаков, реализованные в CNN, продолжают оставаться фундаментальной основой для большинства современных систем компьютерного зрения, постоянно находя новые применения в различных областях искусственного интеллекта.
Библиографический список
- Ян Гудфелло, Йошуа Бенджио, Аарон Курвилль. — «Глубокое обучение». — М.: ДМК Пресс, 2022.
- Ян Эрик Солем. — «Программирование компьютерного зрения на Python». — СПб.: БХВ-Петербург, 2021.
- Эли Стивенс, Лука Анталь, Томас Вьежман. — «PyTorch в действии». — М.: Питер, 2023.
