itmo_conspects

Методы машинного обучения в компьютерном зрении

Компьютерное зрение (Computer Vision, CV) - это область создания технологий, позволяющих анализировать и интерпретировать визуальную информацию (то есть изображения и видео) с помощью алгоритмов машинного и глубокого обучения

На этом курсе будут рассматриваться базовые операции и цифровая обработка над изображениями, свёрточные нейронные сети, детектирование, основы трекинга объектов и генерация изображений

Лекция 1. Введение в компьютерное зрение

Компьютерное зрение появилось в 1960-ых годах в университетах, изучающих искусственный интеллект. В 1970-ых были разработаны базовые алгоритмы обнаружение углов, контуров, краев, а в 1990-ых годах методы компьютерного зрения применялись в компьютерной графике. В наше время машинное и глубокое обучение применяется в компьютерном зрении

Сейчас компьютерное зрение применяется в таких областях:


Основной объект при работе с изображениями - это тензор. Тензор - это многомерный массив

Ранг тензора определяет размерность массива. Так тензор ранга 0 - это скалярное число, тензор ранга 1 - вектор, ранга 2 - матрица

Изображение в памяти компьютера хранится в виде матриц, как правило состоящих из беззнаковых 8-битных чисел

Сейчас самая распространенная цветовая модель - это модель RGB (Red-Green-Blue, Красный-Зеленый-Синий), поэтому изображения можно представить в виде 3 матриц, где каждая определяет цвет какого-либо пикселя

Самые распространенные операции, которые нам пригодятся:

Лекция 2. Обработка изображений

Помимо RGB-модели, где цвет пикселя кодируется используют и другие цветовые пространства:

Если модель RGB представить как куб, где оси определяют значения в красном, зеленом и синем каналах, то этот куб можно деформировать так, что бы получить цилиндры, представляющие модели HSV и HSL

HSL и HSV

Алгебраически преобразования из RBG в HSL и HSV выглядят так:

  1. Вычисляются максимум, минимум и диапазон значений RBG:

    $M = \max(R, G, B)$

    $m = \min(R, G, B)$

    $C = \mathrm{range}(R, G, B) = M - m$

  2. Тон вычисляется так:

    \[H^\prime = \begin{cases} \text{не определено} & \text{если } C = 0 \\ \frac{G - B}{C} \ \mathrm{mod} \ 6 & \text{если } M = R \\ \frac{B - R}{C} + 2 & \text{если } M = G \\ \frac{R - G}{C} + 4 & \text{если } M = B \end{cases}\] \[H = 60^\circ \cdot H^\prime\]

    Как можно заметить, тон - это угол между лучами из центра цилиндра, направленным к красному цвету (#FF0000) и целевому цвету

  3. Светлота находится как среднее в интервале: $L = \mathrm{mid}(R, G, B) = \frac{1}{2} (M + m)$

  4. Значение определяется как максимум: $V = \max(R, G, B) = M$

  5. Насыщенность вычисляется так:

    \[S_V = \begin{cases}0 & \text{если } V = 0 \\ \frac{C}{V} & \text{в других случаях}\end{cases}\] \[S_L = \begin{cases}0 & \text{если } L = 1 \text{ или } L = 0 \\ \frac{C}{1 - \vert 2L - 1 \vert} & \text{в других случаях}\end{cases}\]

Также некоторые модели вместо значения и светлоты используют:


Теперь рассмотрим базовые алгоритмы обработки изображений:

Лекция 3. Основы глубокого обучения

Ключевым открытием в машинном обучении стало разработка архитектуры нейронных сетей

В человеческом мозге примерно 100 миллиардов нейронов, которые обмениваются сигналами

Человек распознает картинки с помощью множества областей в мозге. Сам нейрон выдает сигналы с частотой ~200 Гц в активированном состоянии, из-за чего мозг распознает изображение за ~200 мс, а также способен обучаться на малой выборке, благодаря пластичность (способности перестраиваться) мозга

Сейчас процессор компьютера работает с частотой 3-6 ГГц (на 7 порядков больше), что позволяется использоваться модели сетей из нейронов для решения задач с нетривиальной зависимостью

Сейчас предпринимается множество попыток смоделировать работу структур мозга. Ученые уже смогли построить трехмерную модель синапса, включающего 300 тысяч белков, с помощью которого нейроны общаются


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

В 1943 году появилась модель нейрона МакКаллока-Питтса, в 1948 Алан Тьюринг высказал идею искусственных сетей, а в 1958 году Розенблатт разработал первый перцептрон - полносвязную нейросеть

В 1969 году Брисон и Хобэк разработали алгоритм обратного распространения, который применили в 1974 году к нейросетям, благодаря чему стало возможным обучение нейросети

В 1990-ых развитие пришло в тупик из-за слабых мощностей железа, но в 2000-ых появились графические ускорители, алгоритмы инициализации весов и регуляризации и так далее. С середины 2010-ых нейросети начали применятся в обработке текстов на естественном языке, что привело к созданию ChatGPT, Gemini, Grok и так далее


Нейрон в типичной нейронной сети представляет из себя линейную комбинацию значений на предыдущем слое и применение функции активации

Подробнее нейронные сети описаны в курсе машинного обучения

Вместо функции активации используют:

Функции активации

Функции активации Softplus и Swish


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

Оптимизировать сложную функцию можно с помощью градиентного спуска. Мы измеряем эффективность нашей нейросети с помощью функции потерь $\mathcal{L}(W)$, которая представляет различие между предсказанным результатом и истинным, где $W$ - это веса нейронов, поэтому можно найти градиент от этой функции, который равен вектору наибольшего роста функции потерь

Если веса изменять в противоположном направлении градиента:

\[W^\prime = W - \eta \nabla \mathcal{L}(W),\]

где $\eta$ - скорость обучения, то функция потерь будет уменьшаться

Проблем с градиентным спуском есть несколько:

Эти проблемы решаются с помощью правильного выбора оптимизатора и скорости обучения

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

Еще одним полезным приемом являются стохастический или пакетный градиентные спуски. Вместо всей тренировочной выборки используются лишь часть для обновления весов

Рассмотрим подходы для адаптивной скорости обучения и оптимизаторы:

Оптимизатор Adam получился настолько удачным, что его применяют в большинстве публикаций, и он получается множество модификаций


Роль функции потерь могут исполнять:


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

Для борьбы с переобучением используются:

Лекция 4. Сверточные нейронные сети

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

Ядро свертки может быть тензором одномерным, двумерным, трехмерным и так далее в зависимости от размерности входных данных

Примерами свертки являются:

Фильтры

В сверточных нейросетях фильтры не задаются вручную, а обучаются под конкретную задачу


Но во время свертки появляются проблемы:

Ширина матрицы после свертки определяется так – $O = \frac{I - K + 2 P}{S} + 1$, где $I$ – ширина исходной матрицы, $K$ – размер ядра, $P$ – добавленный отступ, $S$ – шаг свёртки

Для уменьшения размерности матрицы применяют субдискретизацию (или пулинг, от pooling) – в участке матрицы выбирается одно значение в зависимости от тех, что находятся в этом участке. Применяют пулинг по среднему значению или по максимуму

Пулинг прекрасен тем, что у него нет обучаемых параметров

Свертка и пулинг

Для борьбы с переобучением в сверточных нейросетях применяют индивидуальную нормализацию (Instance normalization), где она происходит по каждому отдельному объекту

\[\mu_{ni} = \frac{1}{HW} \sum_{l=1}^{H} \sum_{m=1}^{W} x_{nilm}\]

Для увеличения изображения применяют:

Методы увеличения размерности


Популярным примером сверточной нейросети является LeNet-5, которая использовалась для распознавания рукописных цифр. Ее архитектура показывает типичную структуру CNN: чередование сверточных и субдискретизирующих слоев, затем полносвязные слои

Архитектура LeNet-5

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


Основными идеями обработки изображений в сверточных нейросетях являются:

Как рассматривалось ранее, основными задачи анализа изображения являются:

В последнее время, с развитием Интернета и технологий, тренировочных данных стало кратно больше. Если раньше надо было своими силами создавать датасеты, то сейчас для обучения можно использовать:

Самыми популярными датасетами являются:

Классификация

Для классификации применяют метрики из машинного обучения:

В качестве функции потерь используют:


Рассмотрим популярные архитектуры таких сверточных сетей:


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

Backbone (бекбоун, позвоночник) - сеть для извлечения признаков изображения Neck (шея) - сеть для обработки признаков разных масштабов

Head (голова) - модель для получения результата для конкретной задачи

Такая архитектура позволяет заменять голову для решения разных задач, сохраняя общий бекбоун

Три уровня

Лекция 5. Задача детектирования объектов

Задача детектирования объекта - обнаружение местоположения (ограничивающего прямоугольника, bounding box) и класса объекта на изображении

Детекция объектов

Допустим, модель нашла прямоугольник, в котором находится объект. Чтобы понять, насколько прямоугольник $D$ хорош, по сравнению с тем прямоугольником $T$, который мы задали в качестве истинного, используют метрики:

Для оценки качества на уровне классификации используют:

Всего модели по принципу работы можно разделить:

Одностадийная детекция

Самая популярная модуль одностадийной детекции - YOLO (от You Only Look Once). Работает она так:

Первая версия YOLO появилась в 2016 и получила развитие в виде семи последующих версий

Другая более ранняя модель SSD (Single-Shot Multibox Detector) предсказывала объекты с карт признаков разных масштабов

В SSD крупные объекты предсказываются из поздних карт признаков. Мелкие же объекты предсказываются из ранних карт, но в них нет информации о контексте, что является недостатком модели


В задаче детекции возникает проблема, что при детектировании количество фонового класса (отрицательных примеров) сильно превосходит количество объектов (положительных примеров). Стандартная функция потерь уделяет слишком много внимания лёгким примерам, поэтому используют функцию фокальных потерь (Focal Loss):

\[\mathrm{FL}(p_t) = -(1 - p_t)^\gamma \cdot \log(p_t),\]

где $p_t$ - вероятность правильного класса, $\gamma > 0$ - параметр фокусировки

Модулирующий множитель $(1 - p_t)^\gamma$ уменьшает вклад хорошо классифицированных (лёгких) объектов, заставляя модель фокусироваться на сложных примерах

Двухстадийная детекция

Двухстадийный подход разделяет задачу на два этапа:

  1. Генерация кандидатов - нахождение областей, где вероятно есть объект. Такую роль может играть модель Region Proposal Network (RPN), основанная на классических методах компьютерного зрения
  2. Классификация и уточнение боксов - анализ каждого кандидата. Такие действия выполняет модель RoI Pooling (Region of Interest Polling), которая приводит области разного размера к единому размеру для последующей классификации

Для каждого кандидата предсказываются: координаты центра $(b_x, b_y)$, ширина и высота $(b_w, b_h)$, метка класса и уверенность

Самые популярных модели двухстадийной детекции - семейство R-CNN:

Детектирование на основе точек

Есть две популярных модели, работающих на основе точек:


На практике детектируются множество объектов в реальной среде:

Распознавание текста

Задача распознавания текста (или оптическое распознавание символов) - задача нахождения расположения текста на изображении и предсказывания содержимое текста

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

Чтобы убрать это, применяют:

Существуют:

Для распознавания текста существуют популярные библиотеки:

Лекция 6. Сегментация изображений и обработка видеопотока

Сегментация изображений

Задача сегментации изображений заключается в разбиении изображения на области и в присвоении пикселям меток классов или конкретных объектов

Выделяют несколько постановок задачи:

В задачах сегментации сеть должна выдавать не один класс для всего изображения, а карту предсказаний того же или близкого пространственного размера, что и входное изображение

На последних слоях образуются карты активации классов. По ним можно понять, какие части изображения повлияли на предсказание и где модель ошибается

Чаще всего используют полносверточные сети (Fully Convolutional Networks, FCN). Обычно такая архитектура состоит из двух частей:

При уменьшении разрешения из-за пулинга и страйдов часть точной пространственной информации теряется. Поэтому при восстановлении разрешения часто используют соединения с пропуском (skip-connections): признаки из ранних слоев кодировщика передаются в декодировщик и помогают точнее восстановить границы объектов

Именно по такому принципу устроена U-Net. В ней:

В качестве кодировщика могут использоваться обычные CNN, например ResNet

Для сегментации часто применяют следующие функции потерь:

Коэффициент Dice для бинарной сегментации можно записать так: $\mathrm{Dice} = \frac{2 \sum_{x, y} p_{x,y} t_{x,y}}{\sum_{x, y} p_{x,y} + \sum_{x, y} t_{x,y}}$, где $p_{x,y}$ - предсказание модели, а $t_{x,y}$ - истинная разметка

На основе U-Net появились различные модификации:

Также существуют и другие семейства моделей:

Расширенная свертка применяет ядро не к соседним пикселям подряд, а с промежутками. Это позволяет захватывать более широкий контекст, не увеличивая число параметров слишком сильно


Сегментация активно применяется:

Обработка видеопотока

Видео - это упорядоченная последовательность кадров одинакового разрешения, отображаемая с определенной частотой. Частота обычно измеряется в кадрах в секунду (Frames Per Second, FPS)

Обработка видео сложнее обработки одиночного изображения, потому что нужно учитывать:

Обработка видеопотока позволяет решать такие задачи:

Обычно обработка видео включает:

Важно соблюдать баланс между точностью и скоростью, поскольку во многих задачах результат нужен в реальном времени.

Для ускорения моделей могут использоваться:

Оптический поток

Одна из классических задач обработки видео - оценка оптического потока

Оптический поток - это поле векторов смещения пикселей между соседними кадрами. Для каждого пикселя или характерной точки оценивается, куда она переместилась на следующем кадре

Оптический поток применяют для:

Классический подход - метод Лукаса-Канаде. Его идея состоит в следующем:

У такого подхода есть ограничения:

Для обучения нейросетевых моделей оптического потока используют, например, датасеты:

В нейросетевых методах часто используют ошибку конечной точки (End-Point Error, EPE): $\mathcal{L} = \frac{1}{H W} \sum_{i = 1}^{H W} \vert \hat{u}_i - u_i \vert_2^2$, где $\hat{u}_i$ - предсказанный вектор смещения, а $u_i$ - истинный.

Примеры моделей для оценки оптического потока:

Отслеживание объектов

Отслеживание объектов (Object tracking) - задача обнаружения и сопровождения объекта или нескольких объектов в видеопоследовательности с сохранением их идентичности между кадрами

Обычно в многообъектном трекинге на входе есть:

Трекинг нужен потому, что:

Во многих системах используются два основных шага:

SORT (Simple Online Realtime Tracking) - простой и быстрый алгоритм многообъектного трекинга. Основные шаги SORT:

  1. Детекция объектов на текущем кадре любым детектором, например YOLO или Faster R-CNN
  2. Предсказание новых положений уже известных объектов с помощью фильтра Калмана
  3. Сопоставление старых треков и новых детекций по IoU с использованием венгерского алгоритма
  4. Создание новых треков и удаление пропавших

Преимущество SORT - высокая скорость. Недостаток - зависимость почти только от геометрии движения

Далее появилась модификация DeepSORT (Deep Simple Online Realtime Tracking), которая расширяет SORT и использует не только движение, но и внешний вид объекта. Дополнительно:

Это делает трекинг устойчивее при перекрытиях, пропаданиях детекций и сложных траекториях

X. Программа экзамена 2025/2026

  1. Задачи компьютерного зрения, классические методы компьютерного зрения.
  2. Ключевые точки и их дескрипторы, сопоставление ключевых точек, матрица гомографии. Методы сопоставления ключевых точек.
  3. Полносвязные нейронные сети, метод обратного распространения ошибки, стохастический градиентный спуск, его виды, использование для изображений.
  4. Параметры и гиперпараметры. Обучающая, тестовая и валидационная выборка. Регуляризация. Дропаут. Батчевая нормализация.
  5. Сверточные нейронные сети. Виды сверток. Пуллинг. Увеличение изображения. Обратная свертка.
  6. Задача классификации, известные архитектуры (VGG, ResNet, Inception), перенос знаний.
  7. Задача детектирования объектов на изображении, одностадийные детекторы.
  8. Задача детектирования объектов на изображении, двустадийные детекторы.
  9. Задача семантической сегментации, архитектуры нейронных сетей.
  10. Построение карты глубины, вырезание объектов.
  11. Особенности обработки видеопотока.
  12. Автокодировщики. Вариационные автокодировщики, базовые метрики качества для генерации изображений.
  13. VQ-VAE, VQ-VAE 2
  14. Архитектура генеративно-состязательных сетей, их виды (условный, сверточный). Проблемы GAN и способы улучшения сходимости. Задачи генерации изображения, для решения которых применяется GAN.
  15. Трансляция изображения в изображение, генерация изображения по сегментации. Модели Pix2Pix, Pix2PixHD, SPADE, GauGAN, OASIS.
  16. Модель StyleGAN, ее архитектура, применение и эволюция.
  17. Механизм внимания, Vision Transformer.
  18. Авторегрессионные методы генерации изображений, модель VQ-GAN.
  19. Условная генерация изображений, распутывание вектора шума, обход латентного пространства GAN, модели CLIP и StyleCLIP.
  20. NeRF, описание задачи и методы решения, архитектуры.
  21. Диффузионные модели, принципы их работы, применение для генерации изображений, Imagen, ControlNet.