Как смешивать 3D- и 2D-свертки с использованием остаточных кросс-доменных связей

Недавно группа исследователей из Microsoft опубликовала статью [1], в которой была представлена ​​гибридная архитектура сверточной нейронной сети 3D / 2D для распознавания действий человека в видео. В документе сообщается о современных характеристиках наборов данных UCF-101 и HMDB-51 при одновременном снижении сложности модели за счет использования вдвое меньшего количества трехмерных сверток, чем в предыдущей работе.

Авторы заметили, что 3D ConvNets демонстрируют неутешительную производительность в этой задаче, потому что их трудно обучать, а их требования к памяти ограничивают их глубину. Их архитектура, получившая название Mixed Convolutional Tube Network или MiCT-Net, решает идею объединения эффективности магистрали 2D-CNN с дополнительными трехмерными остаточными свертками, введенными в ключевых местах, для создания более глубоких и информативных карт характеристик.

Исходный код авторов не является общедоступным, и этот пост является результатом моей попытки воспроизвести некоторые из их работ, в результате чего я реализовал MiCT-Net на PyTorch с использованием магистрали ResNet и назвал его MiCT-ResNet. Мой код доступен в этом репозитории и бесплатен для использования в ваших собственных проектах.

Смешанная сверточная трубка 3D / 2D (MiCT)

Блок MiCT построен на наблюдении, что двумерные и трехмерные свертки могут дополнять друг друга для повышения общей производительности сети.

С одной стороны, 2D ConvNets могут изучать глубокие пространственные представления, но пропускают временную структуру из видео, которая необходима для разделения похожих классов.

С другой стороны, 3D ConvNets эффективны при извлечении пространственно-временных характеристик, но их сложно объединить в глубокие сети, поскольку экспоненциальный рост пространства решений затрудняет их оптимизацию.

Идея авторов состоит в том, чтобы объединить лучшее из обоих миров, смешав ограниченное количество трехмерных сверточных слоев с опорной сетью 2D-CNN. Как показано выше, свертки 3D и 2D смешиваются двумя способами:

Между входом и выходом 2D-свертки добавляется трехмерная свертка. Эта трехмерная свертка добавляет еще один уровень изучения функций на временном уровне. Затем характеристики двух ветвей объединяются с помощью поэлементного кросс-доменного суммирования. Эта операция снижает сложность пространственно-временного слияния, поскольку ветвь трехмерной свертки изучает только остаточные временные особенности, которые представляют собой движение объектов и людей в видео, в то время как пространственные особенности изучаются посредством двумерной свертки.

Затем после суммирования добавляется двухмерная свертка, чтобы извлечь гораздо более глубокие особенности во время каждого цикла пространственно-временного слияния.

Реализация блока MiCT

Сетевой вход представляет собой мини-пакет видеоклипов, представленных в виде 5-мерного тензора размера NxCxDxHxW, где N обозначает размер мини-пакета, C количество каналов, D длительность клипа, а H и W представляют соответственно высоту и ширину в пространственной области.

Сразу возникает первая проблема, поскольку 3D- и 2D-свертки работают с тензорами разных размеров: для 3D-сверток требуются входные тензоры 5D, тогда как для 2D-сверток требуются входные тензоры 4D. Кроме того, нельзя напрямую суммировать выходные данные трехмерной и двумерной сверток.

Следовательно, нам нужно преобразовать тензоры назад и вперед из 5D в 4D, например, перед пропуском соединения и перед операцией слияния. К счастью, видеотензоры 5D - это не что иное, как мини-пакеты последовательностей изображений, которые можно сложить вместе, чтобы сформировать более крупный мини-пакет 4D с размером (NxD) xCxHxW.

Функция _to_4d_tensor реализует это преобразование вместе с необязательной временной понижающей дискретизацией, указанной с помощью параметра depth_stride.

Функция _to_5d_tensor выполняет обратное преобразование, принимая четырехмерный входной тензор и параметр глубины, определяющий длину восстанавливаемой последовательности.

Теперь мы готовы перейти к прямому проходу блока MiCT со следующим фрагментом кода. Первая часть выполняет трехмерную свертку после заполнения входного тензора, чтобы выполнить трехмерную свертку для обработки текущего кадра и следующих нескольких кадров. Затем мы выполняем первую двумерную свертку и объединяем результат с выводом трехмерной свертки в 5-мерном пространстве. Наконец, мы выполняем вторую двумерную свертку и возвращаем результат в виде 5D-тензора, готового для обработки следующим блоком MiCT.

Архитектура MiCT-ResNet

В документе используется нестандартная основа, вдохновленная Inception. Он состоит из 4 блоков MiCT, каждый из которых содержит несколько блоков Inception. Вместо этого я решил использовать магистраль ResNet, чтобы иметь возможность сравнивать результаты с 3D-ResNets и получать выгоду от предварительно обученных весов в ImageNet.

Как показано выше, с использованием ResNet-18, которая является самой неглубокой магистралью ResNet, архитектура использует пять трехмерных сверток, одну на входе в сеть и одну в начале каждого из четырех основных блоков ResNet. BasicBlock - это стандартный блок ResNet. Пакетная нормализация и слой ReLU после каждой свертки опущены для ясности.

Если вы не знакомы с реализацией ResNet в PyTorch, этот пост предоставляет пошаговое руководство, которое поможет вам быстрее освоиться.

Набор данных UCF-101

UCF-101 [3] - это известный набор данных распознавания действий реалистичных видеороликов, собранных с YouTube, имеющий 101 категорию действий. Все видео имеют размер 320x240 пикселей и скорость 25 кадров в секунду.

Следует отметить, что, несмотря на 13320 видео и более 100 клипов для каждой категории, это относительно небольшой набор данных для задачи, и он подвержен чрезмерной подгонке. Все клипы взяты только из 2,5 тыс. Отдельных видеороликов. Например, одно видео, в котором один и тот же человек играет на пианино, разделено на 7 клипов. Это означает, что вариаций гораздо меньше, чем если бы действие в каждом клипе выполнялось другим человеком с разными условиями освещения.

Экспериментальная установка

Цель эксперимента - сравнить производительность MiCT-ResNet и 3D-ResNet в контексте с ограниченными данными обучения. Предварительное обучение работе с крупномасштабными наборами данных, такими как Kinetics, выходит за рамки.

Для облегчения сравнения результатов обе сети основаны на магистрали ResNet-18 и имеют временной шаг 16 и пространственный шаг 32. Веса инициализируются из предварительно обученных весов ImageNet. Для 3D-ResNet 3D-фильтры загружаются путем повторения весов 2D-фильтров N раз по временному измерению и их повторного масштабирования путем деления на N.

Для поддержки обучения с большим количеством видеоклипов в пакете размер входных данных моделей установлен на 160x160. Каждое видео подвергается случайной понижающей дискретизации по временному измерению, и случайным образом выбирается набор из 16 последовательных кадров. Последовательность зацикливается по мере необходимости для получения 16 кадровых клипов. Во время тестирования выбираются первые 16 кадров видео.

Оптимизатор SGD используется со скоростью обучения 1e-2 и размером пакета 128. Снижение веса, выпадение и увеличение данных применяются для уменьшения чрезмерной подгонки. Подробнее о процедуре обучения можно узнать в репозитории.

Полученные результаты

Модели оцениваются по стандартной точности Top-1 и Top-5. Все результаты усреднены по трем стандартным расщеплениям UCF-101. MiCT-ResNet-18 опережает на 1,5 пункта при скорости в 3,1 раза, что подтверждает справедливость подхода авторов.

Во втором эксперименте временной шаг MiCT-ResNet уменьшен с 16 до 4, и сеть тестируется на различном количестве клипов длины. Лучшие результаты 69,3 Top-1 (перекрестная проверка) точности для MiCT-ResNet-18 и 72,8 Top-1 (перекрестная проверка) точности для MiCT-ResNet-34: достигается для последовательностей из 300 кадров.

Заключить

Мы увидели, что смешивание трехмерных и двумерных сверток является хорошей стратегией для повышения производительности по сравнению с глубокими трехмерными сверточными сетями на наборе данных UCF-101. MiCT-ResNet обеспечивает более высокую точность и более высокую скорость вывода.

Однако сделать окончательный вывод об относительной производительности этих двух архитектур невозможно. Параллельно с работой Microsoft над MiCT-Net, другая команда из Google DeepMind показала [2], что предварительное обучение 3D-ConvNets на очень больших наборах видеоданных, таких как Kinetics, значительно повышает их производительность при выполнении задач обучения передачи, таких как UCF-101.

Следовательно, остается открытым вопрос, как эти две архитектуры сравнивать, если они обе были предварительно обучены в ImageNet и Kinetics. Сообщите мне, если у вас есть доступ к набору данных Kinetics и вы готовы дать ответ!

Ссылки

[1] Y. Zhou, X. Sun, ZJ. Чжа и В. Цзэн. MiCT: Mixed 3D / 2D Convolutional Tube for Human Action Recognition, июнь 2018 г.

[2] Дж. Каррейра и А. Зиссерман. Quo Vadis, распознавание действий? Новая модель и набор данных кинетики, февраль 2018 г.

[3] К. Соомро, А. Рошан Замир и М. Шах, UCF101: набор данных из 101 класса человеческой деятельности из видео в дикой природе, CRCV-TR-12–01, ноябрь 2012 г.