Учебник Компьютерное зрение для начинающих
Компьютерное зрение учит машины «видеть»: превращать миллионы пикселей в осмысленные выводы — что на картинке, где находится объект, к какому классу он относится. Этот курс ведёт от самых основ (изображение — это просто матрица чисел) к свёрточным нейросетям, детекции, сегментации и современным моделям вроде Vision Transformers и диффузионных генераторов. Идеи мы делаем осязаемыми: свёртку, оператор Собеля, пулинг и морфологию вы прогоните прямо в браузере на маленьких матрицах «пикселей» через стандартный Python. Реальные библиотеки (OpenCV, PyTorch, PIL) показаны как код для чтения. От читателя нужны базовое понимание нейросетей и Python.
Курс «Компьютерное зрение» состоит из 6 разделов и 27 уроков: Основы: изображение как данные, Классическая обработка изображений, Признаки и границы, Свёрточные нейросети (CNN), Задачи распознавания и Современное CV и практика. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Основы: изображение как данные
- Что такое компьютерное зрение и какие задачи оно решает
Зачем нужно компьютерное зрение и четыре главные задачи: классификация, детекция, сегментация и генерация изображений.
- Изображение как данные: пиксели, каналы и градации серого
Картинка — это матрица чисел. Разбираем пиксели, каналы RGB и оттенки серого и собираем «картинку» из чисел руками на Python.
- Разрешение и битность: сколько информации в картинке
Что такое разрешение, битовая глубина и динамический диапазон, и как они влияют на качество, размер и обработку изображения.
- Цветовые пространства: RGB, HSV и оттенки серого
Зачем нужны разные цветовые модели: RGB для хранения, HSV для выделения цвета, grayscale для формы. Когда какое удобнее.
- Что такое компьютерное зрение и какие задачи оно решает
2 Классическая обработка изображений
- Точечные операции: яркость, контраст, инверсия, порог
Простейшие преобразования, где новый пиксель зависит только от старого: яркость, контраст, инверсия и бинаризация по порогу — руками на Python.
- Гистограмма яркости: характер картинки в одном графике
Гистограмма показывает распределение яркостей пикселей. Строим её руками и учимся читать: тёмная, светлая, контрастная картинка.
- Фильтры и свёртка: ядро, которое скользит по картинке
Главная операция обработки изображений — свёртка. Что такое ядро (kernel) и как оно применяется. Делаем свёртку 3×3 вручную на Python.
- Размытие, резкость и шумоподавление
Как разные ядра дают размытие и резкость, чем гауссово размытие лучше простого, и почему от шума спасает медианный фильтр.
- Точечные операции: яркость, контраст, инверсия, порог
3 Признаки и границы
- Выделение границ: градиент яркости и оператор Собеля
Граница — это резкий перепад яркости. Считаем градиент оператором Собеля вручную и видим, как всплеск магнитуды отмечает край объекта.
- Углы и ключевые точки: идея SIFT и ORB
Почему углы — лучшие ориентиры, чем края, и как дескрипторы SIFT/ORB позволяют находить один и тот же объект на разных снимках.
- Морфология: эрозия и дилатация
Операции над бинарными масками: эрозия сжимает объект и убирает шум, дилатация наращивает и заполняет дыры. Реализуем обе руками.
- Почему ручные признаки уступили нейросетям
Классический CV строился на признаках, которые придумывал инженер. Разбираем, почему этот подход упёрся в потолок и проиграл обучаемым признакам CNN.
- Выделение границ: градиент яркости и оператор Собеля
4 Свёрточные нейросети (CNN)
- Почему полносвязные сети плохи для картинок
Обычная полносвязная сеть на картинках взрывается по числу параметров и игнорирует пространственную структуру. Считаем, почему так, и зачем нужна свёртка.
- Свёрточный слой: фильтры обучаются сами
Как устроен свёрточный слой: обучаемые фильтры, карты признаков, несколько фильтров на слой и что задают stride и padding.
- Пулинг: уменьшаем карту, сохраняя суть
Слой пулинга сжимает карты признаков, давая устойчивость к сдвигу и экономию вычислений. Считаем max- и avg-пулинг 2×2 руками.
- Архитектура CNN и что «видят» её слои
Полная схема свёрточной сети: свёртки и пулинг как извлечение признаков, полносвязные слои как классификатор, и иерархия от краёв к объектам.
- Известные архитектуры: LeNet, AlexNet, VGG, ResNet
Краткая история ключевых CNN: от LeNet к AlexNet, глубокому VGG и революции остаточных связей в ResNet.
- Почему полносвязные сети плохи для картинок
5 Задачи распознавания
- Классификация изображений: как работает и как мерить
Полный путь классификатора от датасета до метрик: обучение, accuracy, top-5, матрица ошибок и почему точности мало при дисбалансе классов.
- Детекция объектов: bounding box, YOLO и R-CNN
Как сети находят несколько объектов и рисуют рамки. Метрика IoU, два семейства детекторов: точные R-CNN и быстрые одностадийные YOLO.
- Сегментация: семантическая, инстанс и U-Net
Сегментация присваивает класс каждому пикселю. Разница семантической и инстанс-сегментации и почему U-Net с её формой так удобна.
- Распознавание лиц и эмбеддинги
Почему распознавание лиц — это не классификация, а сравнение эмбеддингов, и как косинусная близость векторов решает, один ли это человек.
- Аугментация данных: больше пользы из тех же картинок
Зачем искусственно расширять датасет: повороты, отражения, кропы и сдвиги яркости борются с переобучением и учат сеть инвариантности.
- Классификация изображений: как работает и как мерить
6 Современное CV и практика
- Transfer learning: чужая сеть для своей задачи
Почему не нужно учить сеть с нуля: берём предобученную на ImageNet модель и дообучаем под свою задачу на малом датасете.
- Vision Transformers: мост к трансформерам
Как трансформеры из мира текста пришли в зрение: картинка как последовательность патчей, self-attention и в чём ViT сильнее и слабее CNN.
- Генеративные модели: GAN и диффузия
Как машины не распознают, а создают картинки: дуэль генератора и дискриминатора в GAN и постепенное «расшумление» в диффузионных моделях.
- Инструменты: OpenCV и PyTorch/torchvision
Обзор практического инструментария CV: OpenCV для классической обработки и PyTorch с torchvision для нейросетей. Код — для чтения.
- Этика, ограничения и что дальше
Где CV ошибается и кому это вредит: предвзятость датасетов, приватность распознавания лиц, обманчивость моделей. Итоги курса и куда двигаться.
- Transfer learning: чужая сеть для своей задачи