Эффективное обнаружение объектов: сверточная реализация метода скользящего окна 🚀 0:00
Алгоритм обнаружения объектов на основе скользящего окна, описанный в классических подходах, зачастую страдает от низкой скорости из-за избыточности вычислений. В данном видео, основанном на методах из статьи «OverFeat» (авторы Пьер Сермане, Дэвид Эган, Сяоцзян Ма, Мэтью Зейлер и Ян Лекун), демонстрируется, как преобразовать полносвязные слои нейронной сети в сверточные, что позволяет значительно ускорить выполнение алгоритма за счет совместного использования вычислений для разных фрагментов изображения.
Трансформация полносвязных слоев в сверточные 🧠 0:13
Чтобы понять, как работает сверточная реализация, необходимо сначала рассмотреть, как заменить стандартные полносвязные (fully connected) слои на сверточные операции.
- Пример структуры: Допустим, на вход подается изображение $14 \times 14 \times 3$, которое после ряда операций свертки и пулинга превращается в объем $5 \times 5 \times 16$.
- Замена полносвязного слоя: Вместо классического полносвязного слоя, связанного с 400 выходными нейронами, можно использовать 400 фильтров размером $5 \times 5 \times 16$. На выходе мы получим объем $1 \times 1 \times 400$.
- Математическая эквивалентность: С точки зрения математики, применение фильтров размером $5 \times 5$ к предыдущему слою $5 \times 5 \times 16$ дает результат, идентичный результату полносвязного слоя, так как каждый выходной узел является линейной функцией всех входных активаций.
- Последующие слои: Аналогично, последующие полносвязные слои можно реализовать с помощью сверток $1 \times 1$, превращая их в объемы $1 \times 1 \times 400$ и в конечном итоге $1 \times 1 \times 4$ для softmax-классификации.
Сверточная реализация метода скользящего окна 🖼️ 4:09
Традиционный метод скользящего окна требует многократного прогона нейронной сети через разные фрагменты (кропы) исходного изображения, что приводит к многократному повторению одних и тех же вычислительных операций для перекрывающихся областей.
Сверточный подход кардинально меняет этот процесс:
- Объединение вычислений: Вместо четырех независимых проходов для четырех участков изображения $14 \times 14$, алгоритм подает всё входное изображение (например, $16 \times 16 \times 3$) на вход сети один раз.
- Обработка объема: Вся сеть работает как сверточная, сохраняя структуру данных на каждом этапе. Вместо $1 \times 1$ на выходе, мы получаем объем, например, $2 \times 2 \times 4$.
- Соответствие результатов: Каждая ячейка выходного объема $1 \times 1 \times 4$ (например, верхний левый элемент) соответствует результату классификации для конкретного окна в исходном изображении.
- Масштабирование: При подаче большего изображения (например, $28 \times 28 \times 3$) алгоритм выдает результат $8 \times 8 \times 4$, что эквивалентно выполнению скользящего окна с шагом 2 по всему пространству.
Преимущества и ограничения ⚡ 10:00
Основной плюс сверточной реализации — колоссальная эффективность: вместо того чтобы последовательно вычислять каждую область, сеть выполняет один проход по всему изображению, совместно используя вычисления для пересекающихся частей.
Однако у данного алгоритма сохраняется важный недостаток: точность позиционирования ограничивающих рамок (bounding boxes) остается невысокой. Как отмечает автор, это является известной проблемой, которую планируется решить в следующих материалах курса.