Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Компьютерное зрение. Практикум
.pdf
Сверточные нейронные сети работают на основе фильтров, которые
занимаются распознаванием определенных характеристик изображения (например,
прямых линий, дуг и т. п.). Фильтр – это коллекция элементов, называемых
кернелами (чаще всего в фильтре используется один кернел). Кернел (ядро) – это
обычная матрица чисел, называемых весами, которые «обучаются» с целью поиска
на изображениях определенных характеристик. Фильтр перемещается вдоль
изображения и определяет, присутствует ли некоторая искомая характеристика в
конкретной его части. Если некоторая искомая характеристика присутствует во
фрагменте изображения, операция свертки на выходе будет выдавать число с
относительно большим значением. Если же характеристика отсутствует, на выходе
число будет маленьким. Более детально с характеристиками и возможностями
сверточных нейронных сетей можно познакомиться в специальной литературе.
Рассмотрим характеристики некоторых популярных моделей сверточных
нейронных сетей.
1 MobileNetV2. Нейронная сеть MobileNetV2 представляет собой весьма
эффективную модель, ориентированную на мобильные устройства, которую можно
использовать в качестве основы для многих задач визуального распознавания.
Появление MobileNet уже само по себе совершило революцию в компьютерном
зрении на мобильных платформах, однако MobileNetV2 – следующее поколение
нейросетей этого семейства – позволило достигать примерно такой же точности
распознавания при еще большей скорости работы. Например, при обнаружении
объектов новая модель работает примерно на 35% быстрее, чем MobileNetVl при той
же точности. С MobileNetV2 мобильные разработчики получили почти
неограниченный инструментарий в области компьютерного зрения. Помимо
относительно простых моделей для классификации изображений, теперь можно
использовать алгоритмы детектирования объектов и семантической сегментации на
мобильных устройствах. Это очень эффективное средство для извлечения признаков
в процессе обнаружения и сегментации объектов. При этом использовать MobileNet
с помощью Keras и TensorFlow настолько просто, что разработчики могут делать
это, даже не углубляясь во внутреннее устройство алгоритмов.
31

2 ResNet50. Глубокие сверточные нейронные сети (CNN) показали достаточно
высокий уровень классификации изображений. Что же произойдет с нейронной
сетью, когда мы существенно увеличим число слоев? Скорее всего, более глубокая
нейронная сеть покажет даже худшие результаты как при обучении, так и при
тестировании. Когда более глубокая сеть начинает сворачиваться, возникает
проблема: с увеличением глубины сети точность сначала увеличивается, а затем
быстро ухудшается. Создатели ResNet предположили, что проблема здесь кроется в
оптимизации – более глубокие модели гораздо хуже поддаются настройке. Тогда
они решили не накладывать слои друг на друга для изучения отображения нужной
функции напрямую, а использовать остаточные блоки, которые пытаются
«подогнать» это отображение. Так ResNet стала первой остаточной нейронной
сетью. ResNet – это сокращенное название от Residual Network (дословно
«остаточная сеть»), a residual learning– это остаточное обучение. Говоря простыми
словами, такая сеть в процессе работы при определенных ситуациях
«перепрыгивает» через некоторые слои. За счет этого сеть ResNet сходится быстрее,
чем ее простой аналог. ResNet50 – это CNN, которая имеет 50 основных слоев
(сверточные + полносвязные). Она была разработана в Microsoft в 2015 году для
решения задачи распознавания изображений. Эта модель Machine Learning обучена
на более чем миллионе изображений из базы данных ImageNet. Как и предыдущие
модели, ResNet50 может классифицировать до 1000 объектов.
3 Inceptionv3. Это сверточная нейронная сеть для анализа изображений и
обнаружения в них различных объектов. Она представляет собой развитие модели
нейронной сети GoogleNet – по сути, это третья версия модели Google Inception
Convolutional Neural Network. Модель Inceptionv3 используется для классификации
объектов в системах компьютерного зрения. В архитектуру этой модели заложены
следующие основные идеи:
– максимизация потока информации в сети за счет аккуратного баланса между
ее глубиной и шириной – перед каждым процессом pooling увеличиваются карты
свойств;
– с увеличением глубины также систематически увеличивается количество
32

свойств или ширина слоя;
– ширина каждого слоя увеличивается ради роста комбинации свойств перед
следующим слоем;
– по мере возможности используются только свертки 3*3 (учитывая, что
фильтры 5x5 и 7x7 можно декомпозировать с помощью нескольких фильтров 3x3).
4 DenseNetlH. Это плотная сверточная сеть, в которой выполнено соединение
предшествующих слоев с последующими слоями в режиме прямой связи. Сети
DenseNet имеют ряд неоспоримых преимуществ: они облегчают проблему
исчезающего градиента, улучшают распространение признаков, стимулируют
повторное использование признаков и существенно сокращают количество
параметров. Поскольку DenseNets требует меньше параметров и допускает
повторное использование функций, они приводят к более компактным моделям и
достигают самых современных характеристик и лучших результатов в
конкурирующих наборах данных по сравнению со своими стандартными аналогами
CNN или ResNet.
5 YOLO.YOLO обладает одним из самых быстрых алгоритмов обнаружения
объектов (хотя и не самым точным). К нему имеет смысл прибегать, когда требуется
обнаружение объектов в режиме реального времени при незначительной потере
точности. По сравнению с алгоритмами распознавания алгоритм обнаружения не
только предсказывает метки классов, но и определяет местоположение объектов.
Таким образом, он не только классифицирует изображение в категорию, но также
может обнаружить на изображении несколько объектов. Этот алгоритм применяет к
полному изображению одну нейронную сеть — эта сеть делит изображение на
области и показывает ограничивающие рамки, а также указывает в обработанном
изображении точность обнаружения объектов для каждой выделенной области.
Архитектура YOLO будет рассмотрена подробнее в следующей главе данного
пособия.
6 U-Net.U-Net считается одной из стандартных архитектур CNN для задач
сегментации изображений, когда нужно не только определить класс изображения
целиком, но и сегментировать его области по классу, т. е. создать маску, которая
33

будет разделять изображение на несколько классов. Архитектура состоит из
стягивающего пути для захвата контекста и симметричного расширяющегося пути,
который позволяет осуществить точную локализацию. Сеть обучается сквозным
способом на небольшом количестве изображений и превосходит предыдущий
наилучший метод (сверточную сеть со скользящим окном) на соревновании ISBI
по сегментации нейронных структур в электронно-микроскопических стеках.
U-Net была создана для сегментации биомедицинских изображений в отделении
Computer Science Фрайбургскогоуниверситета. Используя ту же сеть, которая была
обучена на изображениях световой микроскопии пропускания (фазовый контраст и
DIC), U-Net заняла первое место в конкурсе ISBI 2015 года по трекингу клеток в
этих категориях с большим отрывом. Кроме того, эта сеть работает быстро.
Сегментация изображения 512×512 занимает менее секунды на современном
графическом процессоре. Для U-Net характерно:
– достижение высоких результатов в различных реальных задачах, особенно
для биомедицинских приложений;
– использование небольшого количества данных для достижения хороших
результатов.
Архитектура сети представлена на рисунке 2.2.
34

Рисунок 2.2 – Принципиальная схема архитектуры U-Net нейросети
Кодер
Декодер
Свёртка 3x3 (ReLU)
Максимальное объединение 2x2
Транспонированная свёртка 2x2
Свёртка 1x1 (Сигмоид)
Пропуск соединения и конкатенация
Входное
изображение
Выходное
изображение
с масками
Как видим из рисунка 2.2, архитектура U-Net представляет собой полно
связную сверточную сеть, модифицированную так, чтобы она могла работать с
меньшим количеством примеров (обучающих образов) и делала более точную
сегментацию. Она состоит из двух частей: сверточной (слева) и разверточной
(справа), поэтому она похожа на букву U, что и отражено в названии.
2.1 Лабораторная работа № 2 Сверточные нейронные сети
Пусть стоит задача классификации. Есть некоторый набор изображений и
каждое изображение относится к некоторому классу.
Для того чтобы решить эту задачу очевидным решением может быть
«развернуть» изображение в вектор. То есть взять каждую строку пикселей
изображения и объединить их в одну длинную строку. Полученный вектор подать
на вход многослойной нейронной сети и затем обучить.
35

Подобное решение имеет несколько недостатков.
1 Количество параметров. Количество пикселей изображения может быть
очень большим. Так изображение, которое представлено на рисунке 1 имеет размер
(933x700), то есть ~ 600 000 пикселей, для сравнения современные бюджетные
смартфоны способны делать фотографии разрешения 4000x2000. Даже если сделать
несколько полносвязных слоев нейронной на 600 000 элементов скорость работы
сети может быть долгой, а также из-за большого количество параметров возможно
переобучение.
2 Не учитывается структура данных. Так, например, если изображение башни
отразить по горизонтали, масштабировать или повернуть на некоторый угол, то
определить, что на изображении находится башня все равно остается возможным.
Это означает что, результат работы модели должен быть инвариантен к
преобразованиям.
Для решения этих проблем используется операция свертки. Пример операции
свертки. Рассмотрим пример работы операции свертки. Предположим, что мы хотим
решить задачу распознавания текста на изображении. Пусть имеется некоторое
двухцветное изображение буквы русского алфавита, представленный на рисунке 2.3.
Рисунок 2.3 – Двухцветное изображение буквы «Ш»
А также есть некоторый шаблон, представленный на рисунке 2.4.
36

Рисунок 2.4 – Шаблон размером 3x3
Задача состоит в том, чтобы определить есть ли на изображении буквы «Ш»
части которые могут быть похожи на этот шаблон. Для этого представим
изображения как набор матриц , состоящих из 1 и 0. Пример на рисунке 2.5.
Рисунок 2.5 – Изображения в виде матриц.
Обычно шаблон называют ядром свертки (kernel). Пройдем поочередно по
каждой части изображения «буквы» и сопоставим ядро. Затем поэлементно
умножим часть изображения на ядро, и сложим все элементы. Полученное значение
запишем в новую матрицу. Пример прохода представлен на рисунке 2.6.
37

Рисунок 2.6 – Пример работы операции свертки
В результате получаем новую матрицу, каждый элемент которой обозначает
насколько часть изображения «похожа» на ядро свертки. Сверточный слой
нейронной сети – это слой, который выполняет операцию свертки.
Если выбрать ядро или ядра свертки, которые наиболее интенсивно выделяют
характерные признаки на изображении, то с помощью этих признаков можно будет
провести классификацию объекта на изображении. Обучение сверхточных
нейронных сетей заключается в подборе таких ядер.
Из примера выше становиться ясно, что размер «характерного признака»
поиск которого производится на изображении равен размеру ядра. Это означает мы
никак не учитываем «особенности», которые по размеру больше чем размер ядра.
Решить эту проблему можно последовательным применением сверточных слоев.
Так, например, после прохождения изображения через сверточный слой мы получим
новое изображение, которое выделяет некоторые признаки небольшого размера.
Если же передать новое изображение на следующий сверточный слой, то мы
получим изображение, которое учитывает признаки больших размеров и наиболее
сложных по структуре.
Гиперпараметры сверточного слоя. Padding (отступ) – это добавление
38

дополнительных пикселей (обычно нулевых) вокруг границ изображения перед
применением свертки. Это позволяет контролировать размеры выходной карты
признаков. Существует несколько типов отступов:
Stride (шаг) – это количество пикселей, на которое сдвигается свертка при
каждом применении. Например, при шаге 1 свертка перемещается на один пиксель,
а при шаге 2 – на два пикселя. Это влияет на размер выходной карты признаков:
больший шаг приводит к меньшему размеру выходного изображения.
Dilation (дилатация) – это увеличение расстояния между элементами ядра
свертки, что позволяет захватывать более широкий контекст без увеличения
количества параметров. Например, ядро 3x3 с дилатацией 2 будет вести себя как
5x5, что позволяет извлекать информацию из более широкой области входного
изображения.
Помимо сверточных слоев нейронная сеть состоит из слоев пулинга. Пулинг
(или субдискретизация) – это процесс уменьшения размеров карт признаков в
сверточных нейронных сетях. Он применяется после сверточных слоев и служит для
снижения пространственной размерности, что помогает уменьшить количество
параметров и вычислительную сложность модели, а также улучшает устойчивость к
смещениям и деформациям в изображениях.
Существует несколько типов пулинга:
1 Max Pooling: Выбирает максимальное значение из области, охватываемой
ядром пулинга. Это позволяет сохранить наиболее значимые признаки.
2 Average Pooling: Вычисляет среднее значение в области, что может быть
полезно для сглаживания карты признаков.
3 Global Average Pooling: Уменьшает каждую карту признаков до одного
значения, усредняя все активации, что часто используется перед полносвязными
слоями для уменьшения размерности
Реализация сверточной сети для решения задачи классификации.
Постановка задачи. Перед нами стоит задача классификации изображений,
на которых изображены рукописные цифры. Наша цель — разработать нейронную
сеть, способную распознавать и определять, какая именно цифра изображена на
39

каждом из этих изображений.
import torch
import torchvision
# Скачиваемдатасет.
from torchvision import datasets
download_dir = "./dataset"
# Скачиваемобучающуювыборку.
train_data = datasets.MNIST(root=download_dir, download=True, train=True)
# Скачиваем валидационную выборку (ВАЖНО - не используем её в
обучении).
val_data = datasets.MNIST(root=download_dir, download=True, train=False)
Датасет состоит из 60 тысяч изображений, размером 28x28 пикселей. Каждый
пиксель представляет собой насыщенность белого цвета. Значение насыщенности
изменяется от 0 до 255. Пример изображений из набора данных представлен на
рисунке 2.7.
Рисунок 2.7 – Пример изображений из набора данных
40
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
