Модель GoogLeNet
Архитектура
Модель GoogLeNet [1], известная также как Inception-v1, победила в соревновании ISLVRC в 2014. В основе архитектуры GoogLeNet лежит наблюдение, что классифицируемый объект на изображении может иметь разный размер.
Допустим, мы классифицируем изображение машины. Эта машина может быть изображена крупным, средним и мелким планом. Свёртка, как известно, имеет ограниченную область видимости (receptive field), задаваемую ядром свёртки (convolution kernel). Поэтому для распознавания мелкой машины потребуются свёртки с ядром небольшого размера, а для распознавания крупной машины - свёртки с более крупным ядром.
Поскольку модель должна выдавать один и тот же прогноз для объектов разного размера, в GoogLeNet предлагается использовать блок Inception, показанный ниже [1]:
В стандартном Inception-блоке (a) свёртки разных размеров действуют параллельно, после чего их результаты объединяются конкатенацией результатов вдоль каналов. Такой блок приводит к сильному разрастанию числа выходных каналов, содержащих выходы всех свёрток. Также, если число входных каналов велико, то свёртки будут работать медленно. Поэтому в GoogLeNet использовались усовершенствованные Inception-блоки (b), в которых перед применением свёрток 3x3 и 5x5 предварительно уменьшается число каналов за счёт вычислительно эффективных свёрток 1x1. Такое упрощение промежуточных представлений называется операцией "бутылочного горлышка" (bottleneck operation) и часто используется в сложных архитектурах.
Вся архитектура GoogLeNet состоит из предварительных свёрточных слоёв, за которыми применяется 9 Inception-блоков (с разными весами), как показано ниже [1]:
В блоках, отвечающих свёрткам и пулингам, используется обозначение , где - пространственный размер операции, задаваемый размером ядра свёртки (kernel size), а - шаг (stride).
Для уменьшения числа параметров, в GoogLeNet используется всего один полносвязный слой (fully-connected, FC) перед выдачей итогового прогноза (softmax2). Вместо векторизации промежуточного представления, оно обрабатывается глобальным усредняющим пулингом, выдающим вектор из глобальных (по пространственным координатам) средних активаций вдоль каждого канала.
Сравнение GoogLeNet с VGG
За счёт сильного снижения числа каналов свёртками 1x1, а также использования единственного полносвязного слоя, применённого к результату глобального усредняющего пулинга, число параметров GoogLeNet оказалось существенно ниже, чем в модели VGG, несмотря на возросшую глубину. Но GoogLeNet работает медленнее из-за увеличенного числа слоёв.
Возможность упрощённой обработки
Обратим внимание, что в Inception-блоке результаты действия свёрток объединяются с результатом максимизирующего пулинга 3x3. Это вызвано тем, что распознавать простые объекты оптимальнее меньшим количеством свёрток. Поэтому часть сигнала направляется через пулинг вместо его обработки последующими свёртками и операциями нелинейности. Этот пулинг не приводит к уменьшению размерности, поскольку применяется с шагом 1 (единичным stride).