оригинал:All.Pull/статья/VIE…
Введение в SPP-Net
В последней статье R-CNN был подробно представлен алгоритм R-CNN, а также объяснен фатальный недостаток R-CNN.Основными причинами этого являются длительное время обучения (84 часа) и время тестирования (47 секунд). проблема.Причина - повторяющийся расчет свертки.В R-CNN вход изображения в сеть CNN представляет собой область, извлеченную алгоритмом ss, и каждое обнаруженное изображение будет генерировать 1000-2000 областей, что означает, что объем вычисление произведения нужно повторять 1000-2000 раз, но поскольку область, извлекаемая самим алгоритмом ss, имеет много перекрытий, этот повторный расчет совершенно не нужен.
Так может ли извлечение признаков всего изображения быть завершено только одним вычислением свертки? Это основной вклад SPP-Net и объединяющая цель многих сетевых структур после R-CNN — как разделить сверточные вычисления.
Основные улучшения SPP-Net заключаются в следующем:
1. Расчет общей свертки
2. Пространственная пирамида
Он также состоит из следующих частей в SPP-Net:
алгоритм сс
сеть CNN
SVM-классификатор
bounding box
Кадр предложения области алгоритма ss также генерируется на исходном изображении, но он извлекается на Conv5.Конечно, из-за изменения размера требуется преобразование масштаба при извлечении на слое Conv5.Это самая большая разница между его R-CNN и SPP-Net.Причина, которая может значительно сократить время. Поскольку он полностью использует вычисление свертки, то есть каждое изображение свертывается только один раз, но это улучшение создает новую проблему. масштаб также непостоянен, поэтому нет возможности выполнить полномасштабную свертку (Alexnet).
Таким образом, SPP-Net нужен алгоритм, который может генерировать унифицированный вывод из несогласованных входных данных.Это SPP, то есть объединение пространственных пирамид, которое заменяет слой объединения в R-CNN.Кроме того, он и R-CNN одинаковы.
Как поделиться вычислениями свертки
На приведенном выше рисунке показана разница между R-CNN и SPP-Net.Вход сверточной нейронной сети R-CNN представляет собой предполагаемую область (нормализованную по размеру), сгенерированную ss, в то время как вход сверточной нейронной сети сеть представляет собой все изображение.После извлечения сверточных признаков предлагаемая область извлекается на Conv5. Здесь есть проблема, заключающаяся в том, что размер изображения изменится после свертки, поэтому область ss, созданная на исходном изображении, не может быть напрямую вычтена на слое Conv5, поэтому вам нужно выполнить некоторое преобразование координат, чтобы адаптировать его к слою Conv5. размеры ширины и высоты.
Преобразование координат
Изменение ширины и высоты признака в CNN связано с выбором размера шага.При выборе размера шага 2 ширина и высота изображения станут вдвое меньше исходного размера, тогда для точки (x, y) в предложенной области), соответствующая позиция (x', y') на слое Conv5 должна удовлетворять следующему соотношению:
(x,y)=(Sх',Sу’) где S — произведение шагов всех слоев.
А из-за проблемы с паддингом в процессе свертки фичи на Conv5 будут ближе к центру изображения.Лично я думаю поэтому точку в левом верхнем углу нужно прибавить к пикселю 1, а точку в правом нижнем углу нужно вычесть 1 пиксель:
Вверху слева: x'=(x/S)+1
Внизу справа: x'=(x/S)-1
Объединение пространственных пирамид
После изменения координат кадр предложения региона, созданный на исходном изображении, может быть сопоставлен с Conv5, но возникает новая проблема. Извлеченные признаки не могут быть отправлены на полносвязный слой из-за несовместимых размеров. Решение, упомянутое выше - SPP:
Приведенное выше изображение объясняет принцип SPP, тогда для ввода любого размера SPP может разделить входные объекты на 16 частей, 4 части и 1 часть поровну и сделать максимальный пул для каждой части (Bin), Толщина остается неизменной, а наконец, эти объекты объединяются в качестве входных данных полностью связанного слоя, как показано на рисунке выше, при условии, что толщина объекта равна 256, тогда длина объекта (одномерный объект) после SPP составляет (16+4+1) * 256, поэтому размеры унифицированы.
Обучение и тестирование SPP-Net
Процесс обучения SPP-Net:
Сначала получите модель AlexNet, предварительно обученную в ImageNet, используйте AlexNet для расчета функций слоя Conv5, извлеките соответствующие функции SPP из Conv5 в соответствии с рекомендациями по регионам, сгенерированными ss, и используйте извлеченные функции для точной настройки полносвязного слоя (возьмите AlexNet в качестве модели классификации для обучения).
После обучения AlexNet классификатор SVM обучается с функциями уровня fc7, а ограничительная рамка обучается с функциями SPP (здесь так же, как R-CNN).
Процесс тестирования SPP-Net:
Сначала используйте обученную сеть AlexNet для извлечения особенностей слоев Conv5 и fc7 всего изображения на изображении и используйте алгоритм ss для создания 1000-2000 региональных предложений на изображении, а затем извлеките SPP на Conv5 после преобразования координат. объектов регионального предложения.Функции, функции уровня fc7 отправляются в SVM для прогнозирования категорий, а функции SPP отправляются в ограничивающую рамку для исправления ограничивающей рамки.
Оценка производительности SPP-Net
На приведенном выше рисунке показано сравнение производительности между SPP-Net и R-CNN.Время обучения SPP-Net занимает 25 часов, в то время как R-CNN занимает 84 часа; время тестирования одного изображения SPP-Net занимает всего 2,3 с, и R-NN требуется 47 с, что является улучшением скорости, вызванным вычислением общей свертки, а также является наиболее важным вкладом SPP-Net; последний показатель, mAP SPP-Net ниже, чем у R-CNN. это потому, что структура SPP-Net не может настроить сверточные уровни.
Проблемы с SPP-Net
Наконец, из приведенной выше оценки производительности видно, что SPP-Net значительно улучшилась в скорости, а предложенная ею идея вычисления общей свертки используется в последующих Fast R-CNN и Faster R-CNN, но может Из процесса обучения SPP-Net видно, что он не может точно настроить сверточный слой.Эта проблема решается многозадачной функцией потерь и Roi Pooling в Fast RCNN.
Процесс обучения SPP-Net по-прежнему является многоэтапным обучением, которое является таким же, как и R-CNN, но улучшенным.
Из-за многоступенчатого обучения в процессе необходимо сохранять большое количество признаков.