# DeepLearning.AI: «Сверточная реализация метода скользящего окна»

Источник: https://www.youtube.com/watch?v=XdsmlBGOK-k
Канал: DeepLearning.AI
Опубликовано: 07.11.2017

---

## Эффективное обнаружение объектов: сверточная реализация метода скользящего окна 🚀
[[JUMP:0:00]]

Алгоритм обнаружения объектов на основе скользящего окна, описанный в классических подходах, зачастую страдает от низкой скорости из-за избыточности вычислений. В данном видео, основанном на методах из статьи «OverFeat» (авторы Пьер Сермане, Дэвид Эган, Сяоцзян Ма, Мэтью Зейлер и Ян Лекун), демонстрируется, как преобразовать полносвязные слои нейронной сети в сверточные, что позволяет значительно ускорить выполнение алгоритма за счет совместного использования вычислений для разных фрагментов изображения.

### Трансформация полносвязных слоев в сверточные 🧠
[[JUMP: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-классификации.

### Сверточная реализация метода скользящего окна 🖼️
[[JUMP:4:09]]

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

Сверточный подход кардинально меняет этот процесс:

1.  **Объединение вычислений:** Вместо четырех независимых проходов для четырех участков изображения $14 \times 14$, алгоритм подает всё входное изображение (например, $16 \times 16 \times 3$) на вход сети один раз.
2.  **Обработка объема:** Вся сеть работает как сверточная, сохраняя структуру данных на каждом этапе. Вместо $1 \times 1$ на выходе, мы получаем объем, например, $2 \times 2 \times 4$.
3.  **Соответствие результатов:** Каждая ячейка выходного объема $1 \times 1 \times 4$ (например, верхний левый элемент) соответствует результату классификации для конкретного окна в исходном изображении.
4.  **Масштабирование:** При подаче большего изображения (например, $28 \times 28 \times 3$) алгоритм выдает результат $8 \times 8 \times 4$, что эквивалентно выполнению скользящего окна с шагом 2 по всему пространству.

### Преимущества и ограничения ⚡
[[JUMP:10:00]]

Основной плюс сверточной реализации — колоссальная эффективность: вместо того чтобы последовательно вычислять каждую область, сеть выполняет один проход по всему изображению, совместно используя вычисления для пересекающихся частей.

Однако у данного алгоритма сохраняется важный недостаток: точность позиционирования ограничивающих рамок (bounding boxes) остается невысокой. Как отмечает автор, это является известной проблемой, которую планируется решить в следующих материалах курса.