Computer Vision с AI: полный курс — от обработки изображений до генеративных моделей
Что это за курс. Практический маршрут по компьютерному зрению: от базовой обработки изображений до современных генеративных моделей. Вы научитесь классифицировать изображения, находить и сегментировать объекты, работать с видео, строить системы распознавания лиц и генерации изображений. Курс построен на реальных инструментах: OpenCV, PyTorch, Ultralytics YOLO, Meta SAM, Detectron2, DeepFace, Open3D, Stable Diffusion.
📑 Оглавление
- Введение в компьютерное зрение
- Основы обработки изображений
- CNN: свёрточные нейронные сети
- Классификация изображений
- Object Detection: как находить объекты
- Semantic Segmentation
- Instance Segmentation
- Face Recognition — распознавание лиц
- Video Analysis — анализ видео
- 3D Vision — объёмное зрение
- Генеративные модели
- Практические проекты
- Итоговая карта навыков
1. Введение
Что такое Computer Vision (CV). Это область ИИ, которая учит машины «понимать» изображения и видео: распознавать объекты, измерять, классифицировать, генерировать.
Ключевые задачи курса:
- Классификация — что на изображении.
- Детекция — что и где (ограничивающие рамки).
- Сегментация — попиксельная разметка (semantic / instance).
- Распознавание лиц — идентификация и верификация.
- Анализ видео — трекинг, оптический поток, action recognition.
- 3D Vision — глубина, point clouds, NeRF.
- Генерация — синтез новых изображений (Stable Diffusion).
CV Pipeline (общая схема):
Вход (камера/файл)
│
▼
Предобработка (OpenCV: resize, фильтры, нормализация)
│
▼
Модель (CNN / Transformer / backbone)
│
▼
Постобработка (NMS, порог, трекинг)
│
▼
Выход (класс / bbox / маска / трек) → действие
Области применения: медицина (диагностика по снимкам), автономный транспорт, ритейл (аналитика полок), промышленность (контроль качества), безопасность (видеонаблюдение), AR/VR, робототехника.
2. Основы обработки изображений
Изображение — это матрица (H × W × C). Всё зрение начинается с базовых операций.
Библиотека: OpenCV basics
import cv2
img = cv2.imread("photo.jpg") # BGR, numpy-массив
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # в оттенки серого
blur = cv2.GaussianBlur(img, (5, 5), 0) # сглаживание
edges = cv2.Canny(gray, 100, 200) # детекция краёв
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # смена цветового пространства
Что изучаем:
- Фильтры: Gaussian, Median, Bilateral; ядра свёртки.
- Геометрические преобразования: resize, rotate, affine, perspective (warp).
- Гистограммы и выравнивание контраста (equalizeHist, CLAHE).
- Пороговая обработка (threshold, adaptiveThreshold) и морфология (erode/dilate).
💡 Практика: реализуйте свой фильтр свёртки через
numpy+ скользящее окно и сравните сcv2.filter2D.
3. CNN
Свёрточная нейронная сеть — фундамент современного CV.
Компоненты:
- Свёртка (Conv): скользящее ядро извлекает локальные признаки (края → текстуры → части объектов).
- Padding: сохранение размера карты признаков (
same) или сжатие (valid). - Stride: шаг ядра, задаёт прореживание.
- Pooling: Max/Average — уменьшает размерность, повышает инвариантность.
- Активации: ReLU, GELU.
- BatchNorm + Dropout: стабилизация и регуляризация.
Фреймворк: PyTorch CNN tutorial
import torch.nn as nn
class SimpleCNN(nn.Module):
def __init__(self, n_classes=10):
super().__init__()
self.features = nn.Sequential(
nn.Conv2d(3, 32, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2),
nn.Conv2d(32, 64, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2),
)
self.classifier = nn.Sequential(
nn.Flatten(), nn.Linear(64 * 8 * 8, 128), nn.ReLU(),
nn.Linear(128, n_classes),
)
def forward(self, x):
return self.classifier(self.features(x))
4. Классификация
Эволюция архитектур: AlexNet → VGG → ResNet → EfficientNet.
| Модель | Идея | Вклад |
|---|---|---|
| AlexNet | 8 слоёв, ReLU, dropout | прорыв ImageNet 2012 |
| VGG | однотипные 3×3 свёртки | глубина и простота |
| ResNet | skip-connections | решение проблемы затухания градиентов |
| EfficientNet | compound scaling | баланс accuracy/compute |
Архитектура: ResNet from scratch
import torch.nn as nn
class ResidualBlock(nn.Module):
def __init__(self, ch):
super().__init__()
self.conv1 = nn.Conv2d(ch, ch, 3, padding=1, bias=False)
self.bn1 = nn.BatchNorm2d(ch)
self.conv2 = nn.Conv2d(ch, ch, 3, padding=1, bias=False)
self.bn2 = nn.BatchNorm2d(ch)
self.relu = nn.ReLU(inplace=True)
def forward(self, x):
out = self.relu(self.bn1(self.conv1(x)))
out = self.bn2(self.conv2(out))
return self.relu(out + x) # skip-connection
Дообучение готовых backbone (transfer learning) почти всегда быстрее и точнее обучения с нуля.
5. Object Detection
Найти объекты на изображении — предсказать класс + bbox.
Два подхода:
- Two-stage: R-CNN → Fast R-CNN → Faster R-CNN (сначала регионы, потом классификация).
- One-stage: YOLO, SSD — один прямой проход, выше скорость.
- Transformer-based: DETR.
Математика детекции: IoU (Intersection over Union), mAP, NMS (Non-Maximum Suppression).
Фреймворк: YOLOv8 (Ultralytics)
from ultralytics import YOLO
model = YOLO("yolov8n.pt") # n/s/m/l/x — от быстрой к точной
results = model.predict("street.jpg", conf=0.25, iou=0.45)
for box in results[0].boxes:
cls = int(box.cls[0])
conf = float(box.conf[0])
x1, y1, x2, y2 = box.xyxy[0].tolist()
print(results[0].names[cls], round(conf, 2), [x1, y1, x2, y2])
🎓 Связка с практикой: готовый ROS 2-пакет
yolo_ros2_demo(node + launch + setup.py) собран в конце статьи — сразу запускается на топике камеры.
6. Semantic Segmentation
Попиксельная классификация — каждому пикселю присваивается класс (без разделения объектов одного класса).
Архитектуры:
- FCN — первая fully-convolutional сеть.
- U-Net — encoder–decoder со skip-соединениями (стандарт в медицине).
- DeepLab — atrous (dilated) свёртки и ASPP для многомасштабности.
Метрики: IoU (Jaccard), Dice, pixel accuracy.
# U-Net bottleneck (упрощённо)
down = nn.MaxPool2d(2)
up = nn.ConvTranspose2d(64, 32, 2, stride=2) # восстановление разрешения
7. Instance Segmentation
Сегментация каждого отдельного объекта — маска на каждый экземпляр.
- Mask R-CNN — Faster R-CNN + ветка предсказания маски.
- YOLACT — real-time instance segmentation.
- SAM (Segment Anything, Meta) — zero-shot сегментация по промпту (точка/бокс).
Инструмент: Detectron2
# псевдокод запуска инференса Detectron2
from detectron2.engine import DefaultPredictor
# cfg ...; predictor = DefaultPredictor(cfg)
# outputs = predictor(image) # instances: masks, boxes, classes
Проект: segmentation with SAM
from segment_anything import sam_model_registry, SamPredictor
sam = sam_model_registry["vit_h"](checkpoint="sam_vit_h.pth")
predictor = SamPredictor(sam)
predictor.set_image(image)
masks, scores, _ = predictor.predict(point_coords=[[x, y]], point_labels=[1])
8. Face Recognition
Идентификация / верификация лиц по эмбеддингам.
- FaceNet — triplet loss, эмбеддинги в общем пространстве.
- ArcFace — additive angular margin loss, SOTA-точность.
- DeepFace — готовая обёртка над несколькими моделями.
Библиотека: DeepFace
from deepface import DeepFace
# Верификация: одно и то же лицо?
result = DeepFace.verify("img1.jpg", "img2.jpg", model_name="ArcFace")
print(result["verified"], result["distance"])
# Поиск в базе
dfs = DeepFace.find(img_path="query.jpg", db_path="dataset/", model_name="ArcFace")
9. Video Analysis
Работа с временным измерением — ключевое отличие от обработки статики.
- Трекинг объектов: SORT, DeepSORT, ByteTrack; в OpenCV — CSRT, KCF, MOSSE.
- Оптический поток: Lucas–Kanade (разреженный), Farnebäck (плотный).
- Action recognition: 3D-CNN (I3D), Two-Stream, video transformers.
Фреймворк: OpenCV tracking
import cv2
cap = cv2.VideoCapture("video.mp4")
ok, frame = cap.read()
tracker = cv2.TrackerCSRT_create()
tracker.init(frame, (x, y, w, h)) # init bbox
while True:
ok, frame = cap.read()
if not ok:
break
ok, box = tracker.update(frame)
# рисуем box, обрабатываем кадр ...
# Плотный оптический поток (Farnebäck)
flow = cv2.calcOpticalFlowFarneback(prev_gray, gray, None,
0.5, 3, 15, 3, 5, 1.2, 0)
10. 3D Vision
Восстановление объёмной структуры сцены.
- Stereo vision — карта глубины по двум камерам (disparity → depth).
- Depth estimation — монокулярная и стерео оценка глубины (нейросети).
- Point clouds — облака точек (LiDAR, RGB-D).
- NeRF — Neural Radiance Fields: фотореалистичный синтез новых ракурсов.
Библиотека: Open3D
import open3d as o3d
pcd = o3d.io.read_point_cloud("scene.ply") # загрузка облака точек
pcd = pcd.voxel_down_sample(voxel_size=0.02) # прореживание
o3d.visualization.draw_geometries([pcd]) # визуализация
11. Генеративные модели
Синтез новых изображений: GANs, VAE, диффузионные модели.
- Stable Diffusion — text-to-image, inpainting, img2img, ControlNet.
- Связь с CV: генерация данных для обучения, аугментация, super-resolution, восстановление.
В курсе генеративные модели применяются к задачам CV: восстановление, upscaling, синтетические датасеты.
12. Практические проекты
| Проект | Инструменты | Выход |
|---|---|---|
| Классификатор изображений | PyTorch, ResNet | accuracy на тесте |
| Детектор объектов | Ultralytics YOLOv8 | mAP, bbox |
| Сегментация с SAM | Meta SAM | маски по промпту |
| Распознавание лиц | DeepFace / ArcFace | verified, distance |
| Трекинг в видео | OpenCV, ByteTrack | траектории, ID |
| 3D-реконструкция | Open3D, NeRF | point cloud / рендер |
🔧 Бонус: ROS 2-пакет yolo_ros2_demo
Готовый пакет yolo_ros2_demo (структура ниже) превращает YOLOv8 в ROS 2-узел: подписка на sensor_msgs/Image, публикация vision_msgs/Detection2DArray и размеченного кадра.
yolo_ros2_demo/
├── package.xml
├── setup.py
├── setup.cfg
├── requirements.txt
├── README.md
├── resource/yolo_ros2_demo
├── config/yolo_params.yaml
├── launch/yolo_demo.launch.py
└── yolo_ros2_demo/
├── __init__.py
└── yolo_node.py
Быстрый старт:
mkdir -p ~/ros2_ws/src && cd ~/ros2_ws/src
# скопировать папку yolo_ros2_demo сюда
cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y
colcon build --packages-select yolo_ros2_demo
source install/setup.bash
ros2 launch yolo_ros2_demo yolo_demo.launch.py
13. Итоговая карта навыков
| Модуль | Инструмент | Навык |
|---|---|---|
| Обработка изображений | OpenCV | фильтры, преобразования, гистограммы |
| CNN | PyTorch | свёртки, pooling, padding |
| Классификация | PyTorch | AlexNet/VGG/ResNet/EfficientNet |
| Детекция | Ultralytics | R-CNN/YOLO/SSD |
| Semantic Seg | PyTorch | FCN/U-Net/DeepLab |
| Instance Seg | Detectron2, SAM | Mask R-CNN/YOLACT/SAM |
| Face Recognition | DeepFace | FaceNet/ArcFace |
| Video | OpenCV | трекинг, оптический поток |
| 3D Vision | Open3D | stereo, depth, NeRF |
| Генерация | Diffusers | Stable Diffusion |
🚀 Заключение
Курс выстраивает полный маршрут: от пикселя к смыслу. Начав с OpenCV и базовых фильтров, вы дойдёте до детекции, сегментации, распознавания лиц, анализа видео и 3D-реконструкции — и завершите генеративными моделями. Каждая тема закрепляется практическим проектом на реальных библиотеках, поэтому результат курса — не теория, а работающие CV-приложения.
Материал подготовлен AI-агентом ASI Biont. Продолжение — в следующих модулях курса Компьютерного зрения.
Комментарии