- Принципы работы
- Плюсы и минусы
- Где применяются
- Параметры слоя в keras
- Пример, как поменяется размер изображения по данной свёрточной сети
- Что такое MaxPooling
- Что такое Flatten, GlobalMaxPooling и GlobalAveragePooling
- Какой будет размер слоя после свёрточного блока и одного из слоёв уменьшения размерности (Flatten, GlobalMaxPooling или GlobalAveragePooling)
- Как обработать слоем Conv2D одноканальное изображение
- Где еще, помимо изображений, можно использовать сверточные сети
Сверточные нейронные сети (convolutional neural network, CNN) – класс архитектур нейросетей, основная идея которых состоит в том, чтобы переиспользовать одни и те же участки нейронной сети для работы с маленькими участками входных данных. К идее сверточных сетей подтолкнули исследования зрительной коры головного мозга. Принцип работы сверточной сети применительно к обработке изображений состоит в том, что входное изображение обрабатывается не целяком как в полносвязной сети, а небольшими участками. По изображению как будто скользит ядро свертки. См. рисунок.
Плюсами свёрточных сетей являются:
- Меньшее количество настраиваемых весов, что приводит к экономии компьютерных ресурсов
- Отсутствие попиксельного запоминания, когда нейросеть стремиться обобщить полученную информацию
- Устойчивость сети к повороту, сдвигу или изменению масштаба изображения
Минусы свёрточных нейросетей:
- Длительное время обучения
- Необходимость в большой базе для обучения
- Пригодна, по большей части, только для распознавания изображений
- Склонность к переобучению при недостаточной базе
- Множество изменяемых параметров сети: количество слоёв, размер ядра свёртки для каждого из слоёв, количество ядер для каждого из слоёв, шаг сдвига, необходимость использования слоёв подвыборки, степень уменьшения ими размерности, функция по уменьшению размерности (выбор максимума, среднего и т.п.), передаточная функция нейронов, наличие и параметры выходной полносвязанной нейросети на выходе свёрточной. Эти параметры существенно влияют на результат, но выбираются исследователями эмпирически для каждой новой задачи
Сверточный слой в Keras. Пример из документации
Сonv2D(
filters, # количество фильтров (выходных каналов)
kernel_size, # размер матриц ядерstrides=(1, 1), # шаг свёртки
padding=”valid”, # расширение матрицы изображения
data_format=None, # положение оси канала в форме изображения
dilation_rate=(1, 1), # разрежение свёртки
groups=1, # количество параллельных групп свёрток
activation=None, # функция активации
use_bias=True, # наличие bias
kernel_initializer=”glorot_uniform”,# инициализатор весов ядра
bias_initializer=”zeros”, # инициализатор весов bias
kernel_regularizer=None, # регуляризация ядра
bias_regularizer=None, # регуляризация bias
activity_regularizer=None, # регуляризация выхода слоя
kernel_constraint=None, # ограничения весов ядра
bias_constraint=None, # ограничения весов bias
**kwargs,
)
tf.keras.layers.Conv2D(
filters, kernel_size, strides=(1, 1), padding=”valid”,
data_format=None,
dilation_rate=(1, 1),
groups=1,
activation=None,
use_bias=True,
kernel_initializer=”glorot_uniform”,
bias_initializer=”zeros”,
kernel_regularizer=None,
bias_regularizer=None,
activity_regularizer=None,
kernel_constraint=None,
bias_constraint=None,
**kwargs
)
В последовательную сеть слой добавляется командой add и обычно содержит только эти аргументы
model.add(Conv2D(32, (3, 3), padding=’same’, activation=’relu’, strides=(1,1))
32 – количество ядер (фильтров) свертки.
(3, 3) – размер ядра свертки.
padding=’same’ – тип заполнения краев, нужен для сохранения размеров изображения, по умолчанию значение padding=’valid’.
activation=’relu’ – указание функции активации.
strides=(1, 1) – шаг смещения фильтра
Stride
Основные задачи слоев типа Pooling:
1. Распознавание объектов вне зависимости от масштаба;
2. Факт наличия признака важнее знания места его точного положения на изображении.
Этот слой немного похож на сверточный, поскольку у него тоже есть ядро (окно фильтра). Но, в отличие от сверточного слоя, он уменьшает размер изображения, выбирая максимальное (MaxPooling), среднее (AveragePooling) или суммарное (SumPooling) значение из окна фильтра. В некотором смысле слой подвыборки делает информацию более сконцентрированной, обобщенной.
Слой подвыборки имеет один обязательный параметр — pool_size (размер окна подвыборки), и один необязательный – strides (шаг смещения окна). Причем если strides не указан, то по умолчанию strides=pool_size, то есть окно смещается на размер фильтра.
Наиболее часто используется слой MaxPooling с ядром (2, 2) и смещением по умолчанию – он уменьшает размеры входного тензора по ширине и высоте в два раза. Поэтому рекомендуется использовать такие разрешения изображений, чтобы размеры по обоим измерениям делились на 2 без остатка, иначе при уменьшении размеров часть информации будет потеряна.
Если “сжать” слоем MaxPooling изображение размером 15 x 15, на выходе получим 7 x 7. А при “разжатии” изображения слоем Upsampling или Conv2DTranspose (выполняют что-то вроде обратной к MaxPooling операции) получим 14 x 14, что не совпадет с исходными размерами.
Flatten() – “сплющивает” многомерные входные данные в одномерный вектор, при этом размеры данных по всем осям перемножаются; дополнительных параметров нет. Flatten возьмет тензор любой формы и преобразует его в одномерный тензор (плюс размер выборки), но сохранит все значения в тензоре. Например, тензор (выборки, 10, 20, 1) будет сглажен до (выборки, 10 * 20 * 1).
GlobalAveragePooling2D делает что-то другое. Он применяет усреднение к пространственным измерениям до тех пор, пока каждое пространственное измерение не станет единым, а остальные измерения остаются неизменными. В этом случае значения не сохраняются, так как они усредняются. Например, тензор (выборки, 10, 20, 1) будет выводиться как (выборки, 1, 1, 1), предполагая, что 2-е и 3-е измерения являются пространственными (каналы в последнюю очередь).
Предполагая, что конечным выходом сверточного слоя является трехмерная карта признаков с размерами 6 × 6 × 3, после преобразования GlobalAveragePooling2D он становится выходным значением размера 1 × 1 × 3, то есть каждый Слой h × w будет усреднен до значения.
Хорошая статья на тему сверточных сетей
https://www.bizkit.ru/2020/02/25/17169/?ysclid=l6qlth05w927097508
0