Компьютерное зрение
Свёрточные и пулинговые слои, классические архитектуры CNN (Inception, residual-блоки ResNet), аугментация на инференсе.
20 вопросов
JuniorТеорияОчень частоПочему CNN нужно намного меньше параметров, чем полносвязной сети на том же изображении?
Почему CNN нужно намного меньше параметров, чем полносвязной сети на том же изображении?
Полносвязный слой даёт каждому пикселю свой вес, поэтому число параметров растёт с размером изображения. Свёрточный слой учит одно небольшое ядро и переиспользует его в каждой позиции — цена зависит лишь от ядра и каналов, а признак находится в любом месте.
Типичные ошибки
- ✗Приписывают экономию пулингу, а не разделяемым весам свёртки
- ✗Считают свёрточные ядра заданными вручную, а не обучаемыми
- ✗Думают, что у свёрточного слоя своё ядро на каждую позицию
Уточняющие вопросы
- →Как разделяемые веса связаны с поиском признака в любом месте изображения?
- →Когда полносвязный слой всё же уместен на изображениях?
JuniorТеорияОчень частоЧто такое свёрточный слой в CNN?
Что такое свёрточный слой в CNN?
Основной строительный блок CNN. Содержит обучаемые фильтры (ядра); каждый фильтр охватывает ВСЕ входные каналы и скользит по входу, беря скалярное произведение с фрагментом в одно значение карты признаков. Несколько фильтров дают несколько выходных каналов.
Типичные ошибки
- ✗Думают, что фильтр видит один канал, тогда как он охватывает все входные каналы
- ✗Путают свёрточный слой с полносвязным
- ✗Считают свёрточные фильтры фиксированными, а не обучаемыми
Уточняющие вопросы
- →Как число фильтров связано с числом выходных каналов?
- →Почему разделяемые веса делают свёртки эффективными для изображений?
JuniorТеорияОчень частоЧто такое пулинговый слой в CNN и зачем он нужен?
Что такое пулинговый слой в CNN и зачем он нужен?
Пулинг уменьшает размерность карты признаков: делит её на небольшие блоки w×h и применяет к каждому фиксированную функцию — чаще максимум или среднее. Обучаемых параметров НЕТ. Цели: расширить рецептивное поле свёрток, добавить инвариантность к малым сдвигам и ускорить вычисления.
Типичные ошибки
- ✗Думают, что у пулинга есть обучаемые параметры
- ✗Считают, что пулинг увеличивает, а не уменьшает пространственный размер
- ✗Забывают, что пулинг добавляет инвариантность к сдвигам, а не только ускоряет
Уточняющие вопросы
- →Когда среднее предпочтительнее максимума при пулинге?
- →Как пулинг расширяет рецептивное поле последующих свёрток?
MiddleТеорияОчень частоДообучение готовой CNN на 2000 изображениях — что заморозить и в каком порядке размораживать?
Дообучение готовой CNN на 2000 изображениях — что заморозить и в каком порядке размораживать?
При таком объёме данных сначала замените голову и обучите только её, заморозив backbone. Затем размораживайте сверху вниз, начиная с самых глубоких блоков, с пониженным learning rate. Ранние слои держат общие края, а адаптировать нужно поздние слои.
Типичные ошибки
- ✗Размораживают весь backbone на исходном learning rate при крошечных данных
- ✗Переворачивают иерархию, считая ранние слои специфичными для задачи
- ✗Пропускают разогрев только головы, и случайные градиенты портят готовые веса
Уточняющие вопросы
- →Почему необученная голова портит backbone, если разморозить его сразу?
- →Как обращаться со слоями batch norm, пока backbone заморожен?
JuniorТеорияЧастоКак размер ядра, шаг (stride) и паддинг определяют форму выхода свёрточного слоя?
Как размер ядра, шаг (stride) и паддинг определяют форму выхода свёрточного слоя?
Каждая сторона становится floor((W − K + 2P)/S) + 1. Ядро K задаёт, сколько контекста видит выход, паддинг P защищает краевые пиксели и сохраняет размер, шаг S прореживает. Выходных каналов столько же, сколько фильтров, и от этих трёх не зависят.
Типичные ошибки
- ✗Забывают, что паддинг считается дважды (2P) — по одному на каждую сторону
- ✗Думают, что шаг увеличивает карту признаков, а не прореживает её
- ✗Связывают число выходных каналов с входными каналами, а не с числом фильтров
Уточняющие вопросы
- →Какой паддинг сохраняет размер выхода равным входу для ядра 3×3?
- →Чем шаг 2 отличается от пулингового слоя как способ понизить разрешение?
JuniorТеорияЧастоКакие аугментации изображений безопасны для задачи, а какие незаметно меняют метку?
Какие аугментации изображений безопасны для задачи, а какие незаметно меняют метку?
Аугментация безопасна, только если метка переживает её в семантике задачи. Отражения ломают цифры, кропы вырезают символы из OCR-целей, а color jitter убивает диагностический оттенок в медицинских снимках. Выбирайте по задаче, а не по списку.
Типичные ошибки
- ✗Берут стандартный пайплайн аугментаций, не проверив семантику меток задачи
- ✗Считают CNN полностью инвариантной к отражениям и поворотам
- ✗Полагают, что более сильная аугментация всегда лучше регуляризует
Уточняющие вопросы
- →Почему горизонтальное отражение опасно для распознавания цифр и символов?
- →Как проверить, что аугментация сохранила метку?
JuniorТеорияЧастоЧто такое рецептивное поле нейрона в CNN и за счёт чего оно растёт?
Что такое рецептивное поле нейрона в CNN и за счёт чего оно растёт?
Это область входа, которая может повлиять на одну выходную активацию. Глубина растит её аддитивно, шаг и пулинг умножают рост всех слоёв выше, а dilation раздвигает отсчёты ядра, расширяя поле без лишних весов.
Типичные ошибки
- ✗Переворачивают направление — это входные пиксели, а не нейроны ниже по сети
- ✗Думают, что важен только размер ядра, игнорируя шаг и пулинг
- ✗Считают, что глубина не меняет рецептивное поле
Уточняющие вопросы
- →Почему шаг 2 умножает, а не прибавляет к росту рецептивного поля?
- →Как приём разреженного ядра
dilated convolutionрасширяет поле без новых весов?
MiddleТеорияЧастоЧто такое depthwise-separable свёртка и сколько вычислений она экономит?
Что такое depthwise-separable свёртка и сколько вычислений она экономит?
Она разбивает обычную свёртку на depthwise-шаг — по одному фильтру k×k на входной канал, без смешивания каналов — и pointwise-свёртку 1×1, которая каналы смешивает. Цена падает примерно до 1/N + 1/k², слой 3×3 дешевеет раз в 8–9.
Типичные ошибки
- ✗Думают, что depthwise-шаг уже смешивает каналы
- ✗Опускают шаг 1×1, который и возвращает смешивание каналов
- ✗Приписывают экономию пониженной точности или уменьшённому входу
Уточняющие вопросы
- →Почему экономия зависит от числа выходных каналов N?
- →Какой компромисс по точности несёт эта факторизация?
MiddleТеорияЧастоКогда выбрать одностадийный детектор вместо двухстадийного вроде Faster R-CNN?
Когда выбрать одностадийный детектор вместо двухстадийного вроде Faster R-CNN?
Стадия предложений сначала отбирает несколько сотен вероятных областей, и голова видит сбалансированный локализованный набор — выше точность на мелких и плотных объектах. Одностадийные считают плотную сетку якорей за один проход, для жёсткой латентности.
Типичные ошибки
- ✗Считают стадию предложений оптимизацией скорости, а не точности
- ✗Думают, что семейства различаются лишь местом подавления рамок
- ✗Полагают, что двухстадийные детекторы нельзя обучать сквозным образом
Уточняющие вопросы
- →Как плотная сетка якорей порождает дисбаланс фона и объектов?
- →Что делает подавление немаксимумов (
NMS) с перекрывающимися рамками?
MiddleДебаггингЧастоCNN даёт 98% на курированной валидации и рушится на фото с телефонов — найдите и исправьте причину.
CNN даёт 98% на курированной валидации и рушится на фото с телефонов — найдите и исправьте причину.
Валидация состоит только из студийных снимков и не видит распределения продакшена, а инференс пропускает нормализацию, с которой модель обучалась. Исправьте оба — привести преобразование инференса к обучающему и валидировать на реальных фото.
Открыть задачу →Типичные ошибки
- ✗Называют это переобучением, хотя нерепрезентативна сама оценочная выборка
- ✗Думают, что нормализация важна только при обучении
- ✗Перенастраивают порог на выборке с тем же неверным распределением
Уточняющие вопросы
- →Как отслеживать сдвиг распределения входов в продакшене?
- →Почему преобразование на инференсе должно совпадать с обучающим?
MiddleТеорияЧастоПочему современные CNN ставят две свёртки 3×3 вместо одной 5×5?
Почему современные CNN ставят две свёртки 3×3 вместо одной 5×5?
Обе схемы дают рецептивное поле 5×5, но две свёртки 3×3 берут 18C² весов против 25C² и вставляют между собой нелинейность, поэтому композиция выразительнее. Выигрыш — лишняя активация и меньший бюджет параметров, а не размер поля.
Типичные ошибки
- ✗Думают, что стек расширяет рецептивное поле дальше 5×5
- ✗Забывают, что выразительность добавляет именно промежуточная нелинейность
- ✗Считают, что свёртка 3×3 по умолчанию понижает разрешение
Уточняющие вопросы
- →Откуда берутся числа параметров 18C² и 25C²?
- →Что изменится, если убрать активацию между двумя слоями 3×3?
MiddleТеорияЧастоЧто Vision Transformer делает вместо свёрток и почему он так требователен к данным?
Что Vision Transformer делает вместо свёрток и почему он так требователен к данным?
Он режет изображение на фиксированные патчи, кодирует каждый как токен, добавляет позиционные кодировки и применяет глобальное self-attention. Локальности и трансляционной эквивариантности в нём нет — приоры надо выучить из огромных данных или pretraining.
Типичные ошибки
- ✗Думают, что Vision Transformer сохраняет свёрточный приор локальности
- ✗Считают, что внимание вычисляется только внутри патча
- ✗Приписывают требовательность к данным числу параметров, а не отсутствию индуктивного смещения
Уточняющие вопросы
- →Как сильная аугментация и дистилляция снижают требования к данным?
- →Зачем нужны позиционные кодировки, если внимание видит патчи как множество?
SeniorТеорияЧастоЧто такое residual-блок и как он борется с затухающим/взрывающимся градиентом?
Что такое residual-блок и как он борется с затухающим/взрывающимся градиентом?
Глубокие сети страдают от затухающего/взрывающегося градиента: по цепному правилу перемножается много малых множителей, и сигнал затухает, не дойдя до ранних слоёв. Residual-блок добавляет identity-проброс мимо пары слоёв, вычисляя F(x) + x — «магистраль» для градиента, позволяющую ResNet быть глубокими.
Типичные ошибки
- ✗Думают, что skip-связь добавляет параметры, а не identity-путь
- ✗Считают, что блок вычисляет F(x) без слагаемого +x
- ✗Путают skip-связь с конкатенацией признаков
Уточняющие вопросы
- →Почему именно identity-путь помогает градиенту течь назад?
- →Что должно совпадать у x и F(x), чтобы сложение работало?
MiddleТеорияИногдаКак обучается image-text модель CLIP и почему из этого выпадает zero-shot классификация?
Как обучается image-text модель CLIP и почему из этого выпадает zero-shot классификация?
Два энкодера отображают изображения и подписи в одно общее пространство эмбеддингов и учатся контрастивно — совпадающие пары в батче сближаются, прочие разводятся. Zero-shot выходит сам — имена классов кодируются как промпты, берётся ближайший.
Типичные ошибки
- ✗Считают CLIP классификатором с учителем по фиксированному набору меток
- ✗Забывают, что общее пространство формируют именно негативы внутри батча
- ✗Полагают, что zero-shot требует генерации подписей, а не эмбеддингов промптов
Уточняющие вопросы
- →Почему формулировка промпта меняет точность zero-shot?
- →Как размер батча влияет на качество контрастивного обучения?
MiddleТеорияИногдаТрансляционная инвариантность и эквивариантность в CNN — что из них даёт какой компонент?
Трансляционная инвариантность и эквивариантность в CNN — что из них даёт какой компонент?
Свёртка эквивариантна — сдвиньте вход, и карта признаков сдвинется так же. Пулинг, особенно глобальный, превращает это в приблизительную инвариантность, отбрасывая позицию отклика. Flatten в полносвязную голову ломает оба свойства.
Типичные ошибки
- ✗Меняют термины местами — свёртка даёт эквивариантность, а не инвариантность
- ✗Считают CNN точно, а не приблизительно инвариантной к сдвигу
- ✗Забывают, что flatten в полносвязную голову возвращает зависимость от позиции
Уточняющие вопросы
- →Почему глобальный average pooling устойчивее к сдвигу, чем flatten?
- →Что ломает эквивариантность на краях при использовании паддинга?
MiddleКодИногдаНапишите функцию, возвращающую рецептивное поле стека свёрток по ядрам и шагам.
Напишите функцию, возвращающую рецептивное поле стека свёрток по ядрам и шагам.
Идём по слоям от входа к выходу, храня jump — произведение пройденных шагов. Стартуем с rf = 1, jump = 1; для каждого слоя делаем rf += (k − 1) × jump, затем jump ×= s. Вклад слоя — k − 1 пикселей, умноженных на накопленное прореживание.
Открыть задачу →Типичные ошибки
- ✗Игнорируют шаг и просто перемножают размеры ядер
- ✗Прибавляют k вместо k − 1 на каждый слой
- ✗Применяют шаг текущего слоя до того, как учли вклад его ядра
Уточняющие вопросы
- →Как меняется формула, если у слоя есть dilation?
- →Почему накопленный jump равен произведению всех предыдущих шагов?
MiddleДизайнИногдаВы уже обучили CNN для классификации изображений. Как выжать более высокий скор, не переобучая модель? Опишите приём и его цену.
Вы уже обучили CNN для классификации изображений. Как выжать более высокий скор, не переобучая модель? Опишите приём и его цену.
Используйте Test-Time Augmentation (TTA): на инференсе прогоните модель на нескольких аугментациях изображения — кропы, повороты, отражения — и усредните вероятности. Переобучение не нужно; цена — ≈N× проходов, аугментации должны сохранять метку.
Типичные ошибки
- ✗Дообучают на тестовой выборке, допуская утечку меток
- ✗Берут аугментации, меняющие истинную метку (например, отражение для цифр)
- ✗Забывают, что TTA умножает стоимость инференса на число вариантов
Уточняющие вопросы
- →Какие аугментации опасны для конкретной задачи и почему?
- →Как усреднение вероятностей по вариантам снижает ошибку?
MiddleТеорияИногдаЧем архитектура сегментации U-Net отличается от классификатора и что возвращают её skip-связи?
Чем архитектура сегментации U-Net отличается от классификатора и что возвращают её skip-связи?
Классификатор схлопывает карту в одну метку. U-Net добавляет декодер, поднимающий разрешение обратно до полного и предсказывающий класс на каждый пиксель. Skip-связи переносят высокоразрешающие признаки энкодера, возвращая утраченные границы.
Типичные ошибки
- ✗Думают, что skip нужны только для градиента, а не для пространственных деталей
- ✗Считают, что глубокий энкодер сам по себе сохраняет точность границ
- ✗Путают предсказание на каждый пиксель с классификацией всего изображения
Уточняющие вопросы
- →Чем семантическая сегментация отличается от instance-сегментации?
- →Почему границы объектов размываются, если убрать skip-связи энкодера?
MiddleТеорияИногдаКак расширить рецептивное поле, не добавляя глубины, и чего стоит каждый вариант?
Как расширить рецептивное поле, не добавляя глубины, и чего стоит каждый вариант?
Dilation раздвигает отсчёты ядра, расширяя поле без роста параметров и потери разрешения, но выборка разрежена и возможен gridding. Пулинг и шаг расширяют дёшево, теряя детали. Большое ядро сохраняет детали, но цена растёт квадратично.
Типичные ошибки
- ✗Думают, что dilation добавляет параметры или меняет разрешение выхода
- ✗Считают, что цена большого ядра растёт линейно по его стороне
- ✗Упускают, что пулинг и шаг покупают поле ценой потери деталей
Уточняющие вопросы
- →Из-за чего возникают gridding-артефакты в стеке свёрток с одинаковым dilation?
- →Когда потеря пространственного разрешения ради пулинга приемлема?
SeniorТеорияИногдаЧто такое Inception-модуль из GoogLeNet и что делает его версию с понижением размерности практичной?
Что такое Inception-модуль из GoogLeNet и что делает его версию с понижением размерности практичной?
Применяет параллельно несколько размеров ядра (1×1, 3×3, 5×5) плюс max-pooling 3×3 и конкатенирует выходы, так что один слой ловит многомасштабные признаки. Наивная версия раздувает число каналов; решение вставляет свёртки 1×1 как горлышко, дёшево срезая каналы, чтобы сеть шла вглубь.
Типичные ошибки
- ✗Думают, что параллельные ветки идут последовательно, а не параллельно
- ✗Считают, что свёртки 1×1 меняют пространственный размер, а не число каналов
- ✗Упускают, что рост числа каналов в наивном модуле и мешает идти вглубь
Уточняющие вопросы
- →Почему свёртка 1×1 уменьшает число каналов без потери пространственного разрешения?
- →Чем многомасштабная параллельная фильтрация помогает в сравнении с одним размером ядра?