Компьютерное зрение (Computer Vision): полный курс — от OpenCV до YOLO, SAM и генеративных моделей

Компьютерное зрение (Computer Vision): полный курс — от OpenCV до YOLO, SAM и генеративных моделей

Компьютерное зрение — это область ИИ, которая учит машины «видеть»: понимать, что изображено на картинке или в видео, находить объекты, распознавать лица, оценивать глубину сцены и даже генерировать новые изображения.

Этот материал — структурированный роадмап по Computer Vision: от базовой обработки изображений до современных генеративных моделей. Курс построен по принципу «теория → фреймворк → проект», и каждый блок закрепляется практикой на OpenCV, PyTorch, YOLO, SAM и Stable Diffusion.


Оглавление

  1. Введение в CV: задачи, история, области применения
  2. CV Pipeline: как устроен конвейер обработки
  3. Основы обработки изображений: фильтры, преобразования, гистограммы
  4. OpenCV basics — практическая библиотека
  5. CNN: свёрточные нейронные сети
  6. PyTorch CNN tutorial — реализация на практике
  7. Классификация изображений: AlexNet, VGG, ResNet, EfficientNet
  8. ResNet from scratch
  9. Object Detection: R-CNN, YOLO, SSD
  10. YOLOv8 — практический фреймворк
  11. Semantic Segmentation: FCN, U-Net, DeepLab
  12. Проект: сегментация с SAM
  13. Instance Segmentation: Mask R-CNN, YOLACT
  14. Detectron2 — инструмент от Meta
  15. Face Recognition: FaceNet, ArcFace, DeepFace
  16. Видеоанализ: трекинг, оптический поток, action recognition
  17. 3D Vision: stereo, depth, point clouds, NeRF
  18. Open3D — библиотека 3D-зрения
  19. Итоговый роадмап и куда двигаться дальше
  20. Бонус: ROS2-пакет yolo_ros2_demo

1. Введение в CV

Компьютерное зрение (Computer Vision, CV) — дисциплина на стыке ИИ, математики и обработки сигналов. Она решает задачу извлечения семантической информации из визуальных данных: пикселей (изображения) и их последовательностей (видео).

Ключевые задачи CV:

Задача Что делает Пример выхода
Классификация Определяет класс объекта на изображении «кот»
Детекция Находит объекты и ограничивающие рамки [кот, x1,y1,x2,y2]
Сегментация Классифицирует каждый пиксель маска объекта
Распознавание лиц Идентифицирует/верифицирует человека person_id
Оценка позы Находит суставы скелета keypoints
Генерация Создаёт новые изображения исходный файл

Области применения: беспилотные автомобили, медицинская диагностика, промышленный контроль качества, ритейл (аналитика полки), безопасность, AR/VR, робототехника, дополненная реальность на маркетплейсах.

История (кратко):
- 1960-е — первые эксперименты, «летний проект» MIT по зрению.
- 1999–2010 — эпоха классических методов: SIFT, HOG, каскады Хаара.
- 2012 — AlexNet побеждает на ImageNet → революция глубокого обучения.
- 2015 — ResNet, 2015+ — рост детекторов (YOLO, SSD).
- 2020-е — ViT (Vision Transformers), SAM, диффузионные модели (Stable Diffusion), мультимодальность (CLIP).


2. CV Pipeline

Типичный конвейер CV-системы:

  1. Захват данных — камера, видео, датасет.
  2. Препроцессинг — resize, нормализация, denoising, аугментация.
  3. Извлечение признаков — ручное (классика) или обучаемое (CNN).
  4. Модель — классификация / детекция / сегментация.
  5. Постпроцессинг — NMS, фильтрация по порогу, трекинг.
  6. Принятие решения / вывод — бизнес-логика, API, визуализация.

Понимание пайплайна критично: большинство реальных ошибок — не в модели, а в данных и препроцессинге.


3. Основы обработки изображений

Фундамент, без которого не понять нейросети.

  • Представление изображения: матрица пикселей (H×W×C), каналы BGR/RGB, градации серого.
  • Фильтры: размытие (Gaussian, median), повышение резкости, края (Sobel, Canny).
  • Преобразования: resize, поворот, аффинные и перспективные преобразования, кроп.
  • Цветовые пространства: RGB, HSV, LAB — важны для пороговых методов.
  • Гистограммы: распределение яркости, эквализация (выравнивание контраста), CLAHE.
  • Морфология: эрозия, дилатация, открытие/закрытие — чистка масок.

Это база для препроцессинга и для классических пайплайнов.


4. OpenCV basics

OpenCV — де-факто стандарт для обработки изображений.

import cv2

img = cv2.imread("image.jpg")                 # чтение
img = cv2.resize(img, (640, 640))             # resize
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # в серый
blur = cv2.GaussianBlur(gray, (5, 5), 0)      # размытие
edges = cv2.Canny(blur, 100, 200)             # края

cv2.imshow("edges", edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

Ключевые модули: imgproc (обработка), videoio (видео), dnn (запуск нейросетей), features2d (признаки).


5. CNN: свёрточные нейронные сети

CNN — основа современного CV. Ключевая идея — разделение весов и локальность: свёрточный фильтр (ядро) скользит по изображению, извлекая локальные признаки.

Компоненты слоя:
- Convolution — свёртка ядром (K×K), stride, padding.
- Padding — сохранение размера (same) или уменьшение (valid).
- Pooling — max/average — уменьшает размерность, даёт инвариантность.
- Activation — ReLU и др., вносит нелинейность.
- BatchNorm — стабилизирует обучение.

Формула выходного размера:

out = floor((W - K + 2P) / S) + 1

где W — размер входа, K — ядро, P — padding, S — stride.

Иерархия признаков: нижние слои — края и текстуры, средние — части объектов, верхние — целые объекты.


6. PyTorch CNN tutorial

Практика на PyTorch: собираем простую CNN для классификации.

import torch
import torch.nn as nn

class SimpleCNN(nn.Module):
    def __init__(self, num_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),
            nn.Conv2d(64, 128, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2),
        )
        self.classifier = nn.Sequential(
            nn.AdaptiveAvgPool2d(1), nn.Flatten(),
            nn.Linear(128, num_classes),
        )

    def forward(self, x):
        return self.classifier(self.features(x))

Типовой цикл обучения: DataLoader → forward → loss (CrossEntropy) → backward → optimizer.step().


7. Классификация изображений

Эволюция архитектур — гонка за точностью и эффективностью.

  • AlexNet (2012) — прорыв, показал силу глубоких CNN + ReLU + dropout.
  • VGG (2014) — глубина за счёт однотипных блоков 3×3 (16–19 слоёв), но тяжеловесна.
  • ResNet (2015) — skip-connections решили проблему затухающих градиентов, позволили 50–152+ слоёв.
  • EfficientNet (2019) — масштабирование ширины/глубины/разрешения через compound scaling, лучший баланс точность/размер.

Практический подход: не обучать с нуля, а использовать transfer learning — берём предобученную модель и дообучаем на своей задаче.


8. ResNet from scratch

Residual-блок — ядро ResNet:

class ResidualBlock(nn.Module):
    def __init__(self, ch):
        super().__init__()
        self.conv1 = nn.Conv2d(ch, ch, 3, padding=1)
        self.bn1 = nn.BatchNorm2d(ch)
        self.conv2 = nn.Conv2d(ch, ch, 3, padding=1)
        self.bn2 = nn.BatchNorm2d(ch)
        self.relu = nn.ReLU()

    def forward(self, x):
        identity = x
        out = self.relu(self.bn1(self.conv1(x)))
        out = self.bn2(self.conv2(out))
        out = out + identity          # skip connection
        return self.relu(out)

Реализация «с нуля» отлично тренирует понимание того, почему skip-connections работают.


9. Object Detection

Детекция = классификация + локализация (bounding box).

  • R-CNN (2014) — регионы-кандидаты + CNN, точная но медленная.
  • Fast/Faster R-CNN — RoI Pooling, Region Proposal Network → real-time.
  • YOLO (2016) — «You Only Look Once»: один проход сети, очень быстрая. Ставка на скорость.
  • SSD — multi-scale anchors, хороший баланс скорость/точность.

Ключевые понятия: anchor boxes, IoU, NMS (non-max suppression), метрики mAP@0.5 и mAP@0.5:0.95, precision/recall.


10. YOLOv8

Современный стандарт для детекции и не только (детекция, сегментация, поза, классификация).

from ultralytics import YOLO

model = YOLO("yolov8n.pt")            # nano-версия
results = model("image.jpg")          # inference
results[0].show()                     # визуализация

# обучение на своём датасете
model.train(data="data.yaml", epochs=50, imgsz=640)

Размеры: n/s/m/l/x — от быстрой к точной. Отличная стартовая точка для продакшена.


11. Semantic Segmentation

Попиксельная классификация — каждый пиксель получает класс.

  • FCN (2015) — заменил полносвязные слои свёртками, end-to-end сегментация.
  • U-Net (2015) — encoder-decoder со skip-connections, стандарт для медицины.
  • DeepLab — atrous (dilated) свёртки + ASPP, работа с многомасштабностью.

Метрики: IoU (Jaccard), Dice coefficient, pixel accuracy.


12. Сегментация с SAM

SAM (Segment Anything Model, Meta, 2023) — модель, которая сегментирует любой объект по подсказке (точка, бокс, текст-промпт), без дообучения. Построена на огромном датасете SA-1B (1 млрд масок).

from segment_anything import SamPredictor, sam_model_registry

sam = sam_model_registry["vit_h"](checkpoint="sam_vit_h.pth")
predictor = SamPredictor(sam)
predictor.set_image(image)
masks, scores, logits = predictor.predict(point_coords=[[500, 375]],
                                          point_labels=[1])

SAM совершил революцию в «универсальной» сегментации и стал базой для многих инструментов.


13. Instance Segmentation

Отделяет каждый экземпляр объекта, даже одного класса.

  • Mask R-CNN (2017) — Faster R-CNN + ветка маски (RoIAlign). Эталон качества.
  • YOLACT — real-time instance segmentation через прототипы масок.

Применения: подсчёт объектов, ритейл, медицинская микроскопия.


14. Detectron2

Detectron2 (Meta AI) — мощный фреймворк для детекции и сегментации: Mask R-CNN, RetinaNet, Faster R-CNN «из коробки», удобный тренер и конфиги.

from detectron2.engine import DefaultPredictor
from detectron2.config import get_cfg

cfg = get_cfg()
cfg.merge_from_file("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml")
cfg.MODEL.WEIGHTS = "model_final.pth"
predictor = DefaultPredictor(cfg)
outputs = predictor(image)

15. Face Recognition

Идентификация («кто это?») и верификация («это один и тот же человек?»).

  • FaceNet (2015) — триплет-лосс, эмбеддинги лиц в общее пространство.
  • ArcFace (2019) — additive angular margin loss, SOTA-точность.
  • RetinaFace — детекция лиц и landmarks.

DeepFace — удобная обёртка: FaceNet, ArcFace, VGG-Face, Dlib.

from deepface import DeepFace

result = DeepFace.verify("img1.jpg", "img2.jpg", model_name="ArcFace")
df = DeepFace.find("target.jpg", db_path="faces_db/", model_name="ArcFace")

16. Видеоанализ

Работа с временной осью.

  • Трекинг объектов — сопоставление объектов между кадрами:
  • SORT / DeepSORT / ByteTrack — трекинг + ассоциация.
  • OpenCV: cv2.TrackerCSRT, cv2.TrackerKCF.
  • Оптический поток — движение пикселей: Lucas-Kanade (sparse), Farneback (dense).
  • Action Recognition — распознавание действий: 3D-CNN (I3D), Two-Stream, SlowFast, видео-трансформеры (ViViT, TimeSformer).

17. 3D Vision

Восстановление трёхмерной структуры сцены.

  • Stereo vision — карта глубины из двух камер (stereo matching).
  • Depth estimation — монокулярная оценка глубины (MiDaS, DPT).
  • Point clouds — облака точек (LiDAR), регистрация, фильтрация.
  • NeRF (2020) — нейронные поля: представление сцены как непрерывной функции, реконструкция и novel view synthesis.
  • 3D Gaussian Splatting (2023) — быстрая альтернатива NeRF.

18. Open3D

Библиотека для 3D-данных: облака точек, меши, регистрация, визуализация.

import open3d as o3d

pcd = o3d.io.read_point_cloud("scene.ply")
pcd = pcd.voxel_down_sample(0.05)                 # прореживание
pcd.estimate_normals()
o3d.visualization.draw_geometries([pcd])          # визуализация

19. Итоговый роадмап

Путь обучения (последовательный):

  1. База: OpenCV → обработка изображений → гистограммы, фильтры.
  2. Глубокое обучение: PyTorch → CNN → классификация (ResNet/EfficientNet).
  3. Детекция: YOLO/SSD → обучение на своём датасете.
  4. Сегментация: U-Net → SAM → Mask R-CNN.
  5. Прикладное: Face Recognition, видеоанализ (DeepSORT/ByteTrack).
  6. Продвинутое: 3D (Open3D, NeRF), генеративные модели (Stable Diffusion, диффузия).
  7. Мультимодальность: CLIP, ViT, VLM (vision-language models).

Советы:
- Начинайте с готовых решений (transfer learning, YOLOv8, DeepFace) — быстрый результат.
- Сначала данные, потом модели: качество датасета важнее архитектуры.
- Держите практику: каждый блок — мини-проект.
- Для продакшена следите за latency, размером модели (ONNX, TensorRT, квантование).


20. Бонус: ROS2-пакет

Готовый пакет yolo_ros2_demo для интеграции YOLO в ROS2 — с setup.py, launch-файлами и requirements.txt — собран как отдельный демо-репозиторий (см. материал «yolo_ros2_demo»). Он подписывается на ROS2-топик с изображением, запускает YOLOv8 и публикует результаты детекции + аннотированное изображение.


Итог: Computer Vision сегодня — это не только классические CNN, но и трансформеры, диффузионные и мультимодальные модели. Начните с базы (OpenCV + CNN), закрепите детекцией и сегментацией, а затем двигайтесь к генерации и 3D. Такой роадмап даёт крепкий фундамент и выход на самые актуальные направления.

Материал подготовлен по программе курса «Computer Vision» на ASI Biont.

← Все статьи

Комментарии

Читайте также

OpenAI o3 против DeepSeek R2: Битва моделей рассуждений 2026 года

21 июня 2026

Курс Digital Transformation — цифровая трансформация бизнеса: как ускорить выпуск продуктов и сократить time-to-market

15 августа 2026

System Design — проектирование систем: как стать архитектором высоконагруженных проектов и зарабатывать от 350 000 ₽

18 июля 2026

TypeScript в 2026 году: почему каждому JavaScript-разработчику нужна статическая типизация (обзор курса)

17 августа 2026

ASI Biont MQTT интеграция: как управлять IoT-устройствами через Telegram без кода

16 июля 2026

Arduino Nano BLE Sense (TinyML) + ASI Biont: интеграция Edge AI для умных устройств

3 августа 2026

От задержки затвора до студийного профи: почему курс по фотографии и редактированию на Asibiont.com — ваш быстрый путь к мастерству

22 июня 2026

Я устал каждый проект объяснять ИИ правила инженерии. Поэтому я создал GEF

21 июля 2026

Английский для IT: Как AI-обучение на Asibiont готовит к собеседованиям в FAANG и daily standup

1 июля 2026