C29 · Меняем и измеряем
Типы свёрток
Двигаем окна по пикселям, разделяем проходы, смешиваем каналы и собираем большую карту из малой.
Если нужны основы
Теория
1D, 2D, 3D: куда движется окно
Начнём с того же правила: значения в окне умножаются на веса, сумма записывается в клетку результата. В одномерной свёртке окно движется по дорожке, в двумерной — по строкам и столбцам, в трёхмерной — ещё и между срезами объёма или кадрами видео.
Каналы — отдельная ось. Три цветовых канала RGB не превращают обычную 2D-свёртку в 3D: её окно по-прежнему перемещается только вправо и вниз. На схемах ниже везде один канал; каждый маленький квадрат — один отсчёт.
Окно сдвигается по одной оси.
Окно сдвигается вправо и вниз.
Окно сдвигается ещё и между срезами. Здесь показано одно положение по глубине.
Одно правило — разные места отсчётов
В обычном фильтре 3×3 мы уже умножали девять соседей на девять весов. Здесь правило суммы то же. Меняем отдельно три вещи: куда сдвигаем окно, что добавляем за краем и насколько раздвигаем его отсчёты.
Где стоят девять отсчётов
Нажми клетку результата. Девять рамок слева — именно те числа, которые входят в расчёт. Сначала измени только шаг, затем только dilation. Сравни расположение рамок и размер результата.
Точные значения — в разборе точки
Серая шкала 0…9: от чёрного к белому.
Точные значения — в разборе точки
Серая шкала 0…9: от чёрного к белому.
Разобрать выбранную точку
Что показывает график
При dilation 2 окно охватывает 5×5 клеток, но использует только девять. Шаг 2 уменьшает число положений окна. Padding возвращает возможность считать клетки возле края, подставляя нули.
- Окно охватывает
- 3 px
- Весов
- 9
- Сторона выхода
- 5
Параметры и подробности
Выбери клетку справа: слева выделены ровно девять отсчётов. Dilation раздвигает отсчёты внутри окна, stride сдвигает всё окно; нулевая рамка — добавленные числа, а не новые данные камеры.
Выбери точку на изображении. Стрелки перемещают её; Home и End — к краям строки. Просмотр не изменяет вычисление.
Для изменения примера нужен JavaScript и Canvas. Рассчитанные изображения доступны выше.
Окно 1×1 тоже бывает полезным
У цветного изображения в точке три числа, у карты нейросети их может быть больше. Свёртка 1×1, или pointwise, берёт все эти числа в одной точке. Она создаёт новые сочетания каналов, но не размывает изображение и сама по себе не видит соседей.
1×1: меняем каналы, не соседей
Выбери цветной пиксель. Его R, G и B умножаются на три веса и складываются в одно число. Поставь один вес в 1, остальные в 0: выход повторит ровно один канал.
Точные значения — в разборе точки
RGB; диапазон показа 0…1
Точные значения — в разборе точки
Синий − · белый 0 · красный +; шкала -3…3
Разобрать выбранную точку
Что показывает график
Один выходной канал требует трёх весов. Для двух новых каналов понадобились бы две независимые тройки. Пространственный размер сохраняется; число каналов может измениться.
Параметры и подробности
1×1 смешивает каналы одной точки, не соседние пиксели. Отрицательный вес допустим: выходная карта — число со знаком, а не готовая яркость экрана.
Выбери точку на изображении. Стрелки перемещают её; Home и End — к краям строки. Просмотр не изменяет вычисление.
Для изменения примера нужен JavaScript и Canvas. Рассчитанные изображения доступны выше.
Разделить окно на два прохода
Иногда вместо одного квадрата 3×3 можно пройти по изображению дважды: узким столбцом 3×1, потом строкой 1×3. Между проходами хранится настоящая промежуточная карта. Это пространственно разделимая свёртка: меняется способ вычисления, а результат выбранного гауссова фильтра сохраняется.
Сначала по столбцу, потом по строке
Выбери клетку результата. На первом проходе видны три исходных пикселя в столбце; на втором — три уже посчитанных значения в строке. Переключи проход и проследи, откуда взялись числа.
- ВходОдна карта
Точные значения — в разборе точки
Серая шкала 0…9: от чёрного к белому.
Точные значения — в разборе точки
Серая шкала 0…9: от чёрного к белому.
Разобрать выбранную точку
Что показывает график
Два прохода дают то же гауссово сглаживание, что одно квадратное ядро 3×3. Три веса каждого прохода видны в расчёте; сумма делится на 4. Не всякое ядро можно так разделить.
Параметры и подробности
Нажми клетку. Во втором проходе берём уже сглаженные числа первого, а не исходные пиксели.
Выбери точку на изображении. Стрелки перемещают её; Home и End — к краям строки. Просмотр не изменяет вычисление.
Для изменения примера нужен JavaScript и Canvas. Рассчитанные изображения доступны выше.
Все каналы, группы или каждый отдельно
Теперь разделяем не строки и столбцы, а каналы. Полная свёртка берёт своё окно из каждой входной карты и складывает все вклады. Grouped разрешает смешивать карты только внутри группы. Depthwise даёт каждой карте отдельное ядро; в этом примере из неё получается одна выходная карта.
Depthwise-separable — два шага: сначала отдельная пространственная фильтрация, затем смешивание через 1×1. Она экономит веса, но не равна произвольной полной свёртке. Выбери выходную карту и проследи, какие входные окна участвуют в её расчёте.
Кто участвует в одной выходной карте
Здесь четыре разные карты признаков C1–C4, не четыре цвета фотографии. Выбери клетку выхода и меняй способ обработки. У полной свёртки участвуют все четыре карты; у двух групп — две; у depthwise — одна.
Точные значения — в разборе точки
Серая шкала 0…1: от чёрного к белому.
Точные значения — в разборе точки
Серая шкала 0…1: от чёрного к белому.
Разобрать выбранную точку
Что показывает график
Depthwise не смешивает карты. В последнем варианте сначала каждая карта фильтруется отдельно, затем свёртка 1×1 смешивает результаты. Это другое ограничение весов, а не гарантированно тот же результат полной свёртки.
Параметры и подробности
Выбери выходную карту и клетку. Сравни, какие входные слои участвуют: все, пара или один. В последнем варианте сначала своё ядро, затем смешивание 1×1.
Выбери точку на изображении. Стрелки перемещают её; Home и End — к краям строки. Просмотр не изменяет вычисление.
Для изменения примера нужен JavaScript и Canvas. Рассчитанные изображения доступны выше.
Транспонированная — не обратная
Обычная свёртка собирает входные значения в одну сумму. Транспонированная делает связанное линейное действие в другую сторону: каждое входное число умножается на ядро и добавляет отпечаток в выход. Там, где отпечатки перекрываются, их вклады складываются.
Перекрытия могут быть неравными: одна клетка получает больше вкладов, чем соседняя. Так возникает шахматный узор. Увеличение перед свёрткой устроено иначе: сначала повторяем ближайшие пиксели на более густой решётке, затем фильтруем её. Дальше в архитектурах сравним эти артефакты подробнее.
Это только вклад выделенной клетки. Остальные входные клетки добавляют свои отпечатки в тот же выход. Шаг 2 задаёт расстояние между началами соседних отпечатков.
Один вход оставляет целое окно
В транспонированном варианте нажми входной пиксель: справа отмечен его отпечаток 3×3. Нажми выходной пиксель — увидишь все вклады, которые в нём сложились. Сравни с увеличением изображения перед обычной свёрткой.
Точные значения — в разборе точки
Серая шкала 0…3: от чёрного к белому.
Точные значения — в разборе точки
Серая шкала 0…12: от чёрного к белому.
Разобрать выбранную точку
Что показывает график
Транспонированная свёртка складывает отпечатки. В другом варианте сначала создаётся более густая решётка, потом по ней идёт обычный фильтр. Одинаковый размер выхода не делает эти операции одинаковыми. Ни одна из них не возвращает автоматически потерянные подробности.
Параметры и подробности
Нажми входную клетку: её ядро оставляет отпечаток 3×3 справа. Нажми выходную: увидишь, какие входные числа сложились в ней.
Выбери точку на изображении. Стрелки перемещают её; Home и End — к краям строки. Просмотр не изменяет вычисление.
Для изменения примера нужен JavaScript и Canvas. Рассчитанные изображения доступны выше.
А если сдвинуть отдельные отсчёты?
Dilation одинаково раздвигает всю решётку отсчётов. Deformable convolution добавляет каждой точке собственное смещение: окно может подстраиваться под форму. Ниже — один рассчитанный пример со смещениями, заданными вручную; в нейросети такие смещения предсказываются для каждой точки изображения.
Обычная 3×3
Dilation 2
Отдельные смещения
Рамки показывают девять прочитанных клеток. В последнем примере точки подобраны вручную вдоль светлой фигуры. В настоящей deformable-свёртке смещения могут попадать между пикселями — тогда значение получают интерполяцией.
Как читать остальные названия
Справка и следующие методы
Словом convolution в нейросетях обычно называют корреляцию без переворота ядра. True convolution переворачивает его. Full, same и valid описывают политику края и размер выхода, а не новый способ умножения. FFT-convolution вычисляет ту же линейную операцию через спектр; круговые границы нужно учитывать отдельно.
Masked convolution обнуляет запрещённые веса: например, чтобы выход не увидел ещё не построенные пиксели. Causal convolution использует только настоящее и прошлое в последовательности. Это ограничения доступных данных; ни dilation, ни разделение по каналам сами по себе их не обеспечивают.
Практика
Проверь идею на другом условии. Следуй задаче над изображениями; разбор точки поможет объяснить результат. Эта практика не оценивается.
Большое окно с теми же девятью весами
Здесь dilation равен 2, шаг равен 1 и добавлена нулевая рамка. Найди выходную клетку, чьи отсчёты попали и на фигуру, и на фон. Сравни с dilation 1: какие клетки перестали участвовать? Затем увеличь шаг — число весов изменилось или только число выходов?
Точные значения — в разборе точки
Серая шкала 0…9: от чёрного к белому.
Точные значения — в разборе точки
Серая шкала 0…9: от чёрного к белому.
Разобрать выбранную точку
Что показывает график
При dilation 2 окно охватывает 5×5 клеток, но использует только девять. Шаг 2 уменьшает число положений окна. Padding возвращает возможность считать клетки возле края, подставляя нули.
- Окно охватывает
- 5 px
- Весов
- 9
- Сторона выхода
- 5
Параметры и подробности
Выбери клетку справа: слева выделены ровно девять отсчётов. Dilation раздвигает отсчёты внутри окна, stride сдвигает всё окно; нулевая рамка — добавленные числа, а не новые данные камеры.
Выбери точку на изображении. Стрелки перемещают её; Home и End — к краям строки. Просмотр не изменяет вычисление.
Для изменения примера нужен JavaScript и Canvas. Рассчитанные изображения доступны выше.
Свой эксперимент со свёртками
В отдельной лаборатории можно менять каждое число ядра, шаг, поля и связи каналов — на маленьком примере или своей фотографии.
Открыть лабораторию свёртокИгры
Проверь объяснение
Вопрос 1 из 6
Поле 7×7, ядро 3×3, шаг 2, без полей. Сколько положений окна по каждой стороне?
Точные значения — в разборе точки
Серая шкала 0…9: от чёрного к белому.
Точные значения — в разборе точки
Серая шкала 0…9: от чёрного к белому.
Точные значения — в разборе точки
Серая шкала 0…1: от чёрного к белому.
Точные значения — в разборе точки
Серая шкала 0…1: от чёрного к белому.
Точные значения — в разборе точки
Серая шкала 0…9: от чёрного к белому.
Точные значения — в разборе точки
Серая шкала 0…9: от чёрного к белому.
Выбери один ответ. Он проверится сразу.
Ограничения и материалы
Границы этого примера
Малые инструменты вычисляют показанные операции без обучения сети. Схемы 1D/2D/3D и смещений — статические примеры с настоящими значениями; они не обучают 3D-ядра или deformable-модель. Число выходных карт в примере групп фиксировано; смещения bias опущены, чтобы видеть только вклады пикселей.