← Все статьи

Computer Vision без привязки к фреймворку: 15 принципов PyTorch и TensorFlow

Computer Vision — это не выбор между PyTorch и TensorFlow. Данные, тензор, CNN, классификация, детекция, сегментация, transfer learning, метрики и путь в production — общий фундамент, который остаётся при смене API.

Computer Vision без привязки к фреймворку: 15 принципов PyTorch и TensorFlow
Содержание

На столе один бланк. К нему три вопроса: где на листе поле, что написано в клетке, и стоит ли там пусто, пометка повтора или значение. Модель на линии уже отвечает. В отчёте доля верных кадров высокая, а брак уезжает дальше. В эту минуту команда спорит, как в коде назван класс: nn.Module или tf.keras.Model.

Так на одном бланке выглядит задача зрения. PyTorch и TensorFlow делают с кадром одно и то же: данные становятся тензором, тензор проходит модель, ошибка сдвигает веса, на выводе получается ответ. Меняется стиль API, цепочка остаётся. Сравнение вызовов — в PyTorch vs TensorFlow; семейство библиотек — в ML-фреймворках.

Ключевые выводы

Сначала запишите, какой вопрос вы задаёте бланку на столе. Класс на весь лист, рамка вокруг поля, маска дефекта, чтение надписи и ход сцены во времени стоят на одних данных, одном виде картинки, одной схеме обучения и одних метриках. Библиотека эту схему исполняет.

Набор данных решает раньше архитектуры. Один и тот же бланк в обучающей и контрольной стопках, редкий дефект на фоне «всё годно» и чужие кадры в цехе ломают и ResNet, и сеть новее. Для модели картинка — тензор: форма, каналы, нормализация, пакет. Готовые веса с ImageNet — обычный промышленный старт, если цех не выглядит как другой мир.

Библиотеку выбирают под команду и инфраструктуру. Когда цепочка зрения уже понятна, переход между PyTorch и TensorFlow — смена инструмента.

Имя класса в коде бланк не читает

На планёрке бланк лежит на столе, а спор идёт про имена классов в коде. Вопрос к кадру другой: что на нём, где объект, какие пиксели к нему относятся, что написано, как сцена меняется во времени. Библиотека считает эту математику на устройстве. nn.Module и tf.keras.Model в этот вопрос не входят.

Дорогая путаница умещается на той же планёрке. Спорят про имена классов, а один и тот же лист лежит и в обучении, и в проверке. Доля верных ответов выглядит чистой и рассыпается в цехе.

Статья для тех, кто входит в зрение или уже пишет на одной библиотеке и хочет понимание, которое переживёт смену API. Ещё для технических руководителей, которым надо отделить выбор библиотеки от качества системы, и для инженеров рядом с чтением бланков, разбором схем и контролем качества — как в пилотах УЗТ и YOLO на схемах.

Цепочка ниже одинакова в зрелом стеке. Читайте её как порядок решений по тому же бланку: на каком шаге вы сейчас и какой шаг обычно пропускают.

задача → данные → разметка → предобработка → модель → обучение
      → оценка → экспорт → вывод → обратная связь в данные

Замыкает цепочку стрелка обратно в данные. Остановились на файле весов — следующая смена для модели невидима. Новый бланк на столе в эту минуту для неё не существует.

Три вопроса к одному листу

Со сканера на стол ложится бланк, как в пилоте УЗТ. Цеху не нужен вердикт «что это за фотография». Нужна область: где на листе поле. Детектор ставит рамку вокруг клетки. Рамка и есть ответ на вопрос «где».

Внутри рамки отдельный шаг читает надпись. Ещё один решает, пустая ли клетка, стоит ли там пометка повтора или записано значение. Три вопроса к одному листу — три разных выхода. Таблица ниже сверяет вопрос с выходом. Урок — порядок, который вы только что прошли по бланку; строка таблицы нужна, когда надо вспомнить имя выхода.

Задача Вопрос Типичный выход
Классификация (Classification) Что это? Класс или доли по классам
Обнаружение объектов (Object Detection) Где объект? Класс, рамка и уверенность
Семантическая сегментация (Semantic Segmentation) Какие пиксели относятся к классу? Маска по классам
Сегментация экземпляров (Instance Segmentation) Какие пиксели относятся к этому объекту? Маска на каждый объект
Распознавание текста (OCR) Что написано? Строка или структура полей
Улучшение изображения (Image Enhancement) Как очистить сигнал? Очищенное или восстановленное изображение
Поиск похожего (Image Retrieval) Что похоже на этот кадр? Список по убыванию сходства
Разбор видео (Video Analysis) Что происходит во времени? События, траектории, действия

Дерево ниже — те же вопросы, только развилками. Смотрите, на каком вопросе ваш следующий шаг останавливается.

Изображение
    │
    ├── Что это? ───────── классификация
    ├── Где объект? ────── обнаружение
    ├── Какие пиксели? ─── сегментация
    ├── Что написано? ──── распознавание текста
    └── Что происходит? ── разбор видео

Если дальше нужно вырезать область, остановитесь на рамке. Если нужна форма дефекта, идите к маске. На одном промышленном пути эти шаги стыкуют: нашли поле, прочитали надпись, решили «пусто / повтор / значение». Так устроен бланк УЗТ и разбор схем в инженерии YOLO.

Один бланк в двух стопках портит отчёт

В пилоте на бланках доля верных легко становится красивой: почти один и тот же лист попал и в обучение, и в проверку. Это ещё не правило «пусто / повтор / значение». Разрез по имени файла пропускает одну деталь, одну смену или одну камеру на обе стороны. Сеть узнаёт бланк, а не правило, которое вы хотели.

Набор — это контракт: откуда кадры, по каким правилам размечены, как разрезаны, каких классов мало, какие дыры уже известны. Редкий дефект тонет в ответе «всё годно». Два разметчика рисуют разные рамки на одном объекте — сеть учит их разногласие. Ночная смена, новый сканер или новый бланк уводят картинки из тех условий, на которых вы мерили качество.

Короткая памятка тех же дыр:

  • почти одинаковые кадры в обучении и в проверке;
  • разрез по файлам вместо разреза по объекту, листу, смене или камере;
  • редкий дефект тонет в доле «всё годно»;
  • рамки двух разметчиков на одном объекте не совпали;
  • ночь, другой сканер, другой бланк — проверка больше не про этот цех.

Большая модель эти дыры не зашивает. Смена основы с ResNet-50 на ResNet-101 быстрее запоминает артефакты разметки. Как собирать контракт — в серии про наборы данных; как говорить о цене ошибки — в метриках качества.

Сеть получает с бланка только числа

Глаз видит бланк на столе. Сеть видит массив чисел: высота, ширина, каналы и, на обучении, ось пакета. Один пиксель — число или три числа, если цвет собран из красного, зелёного и синего. Клетка, которую вы нашли глазом, для модели уже кусок этого массива.

Дальше важна договорённость, как этот массив лежит в памяти. В PyTorch часто порядок N×C×H×W, в Keras и TensorFlow часто N×H×W×C. Физика картинки одна, привычка библиотеки другая. Цепочка ниже — этот переход слева направо, от кадра к ответу.

Image → Pixels → Tensor → Model → Prediction

Без одинаковой нормализации обучение и вывод расходятся молча: в эксперименте пиксели масштабировали одним способом, в сервисе — другим, в журнале ошибки нет. Рядом фиксируют тип чисел (float32 и соседи) и устройство, CPU или GPU. Пакеты тензоров и свёртки живут на ускорителях; обзор устройств — в железе для ИИ.

Сеть начинает с края штриха

На бланке и на снимке шва глаз цепляется за край штриха, зерно дефекта, угол клетки. Ранние ядра свёрточной сети как раз откликаются на такие края; следующие карты — на части, дальнейшие — на объект. Сеть складывает эти ответы слоями.

Маленькое ядро скользит по карте признаков. Шаг окна и дополнение по краям задают геометрию, объединение соседних ячеек сжимает сетку, активация изгибает ответ, чтобы стопка слоёв не схлопнулась в одно линейное размытие. Карта признаков — ответ фильтра на местный узор, а не отдельная картинка «для человека». Цепочка ниже — эта стопка, снизу вверх.

Pixels → Edges → Textures → Shapes → Objects

Свёртка смотрит на соседние пиксели и делит одни веса на всю картинку, поэтому в цехе она держится. Трансформеры зрения и гибриды уместны, когда зависимость длинная, а корпус большой. Для многих промышленных задач рабочим стандартом остаются свёртки, U-Net и детекторы на свёрточной основе. От свёртки к моделям, которые читают последовательность символов, — разбор на рукописных цифрах.

Сначала один ответ на весь лист

Лист на столе сначала получает один ответ на весь кадр: годный или нет. Это классификация (Classification): одно решение на изображение целиком, без координат. Фотография кота устроена так же: «кот».

Сеть отдаёт сырые оценки (logits). softmax превращает их в доли одного класса; сигмоида нужна, когда меток несколько сразу. Потерю чаще считают перекрёстной энтропией. Доля верных ответов удобна для слайда и опасна, когда почти все кадры годные: модель, которая всегда говорит «годно», набирает высокий процент и пропускает редкий брак. Схема ниже — это одно решение на кадр.

Cat image → CNN → cat: 0.93 · dog: 0.05 · fox: 0.02

Дальше смотрите матрицу ошибок, точность, полноту и их среднее (F1), и отдельно цену ложной тревоги и пропуска. Порог уверенности — часть продукта: его двигают, когда цена ошибки уже ясна. Подробнее — в метриках качества.

Когда бланку хватает чужих весов

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

Два рабочих режима. Ранние слои заморожены, учится только последний — старые фильтры остаются, новое решение учит ваши классы. Или часть сети осторожно размораживают и делают шаг обучения меньше, чтобы не стереть уже найденные фильтры. ResNet, EfficientNet и семейства YOLO — старт. Задача всё равно живёт в вашем наборе. Цепочка ниже — эта передача весов.

Pretrained Model → Freeze / Fine-tune → Your Dataset → Your Model

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

Клетке хватает рамки, дефекту нужна маска

Класс на весь кадр говорит: «на изображении есть автомобиль». На бланке следующий вопрос уже про место: где поле. Обнаружение объектов (Object Detection) отвечает классом, рамкой [x, y, w, h] и уверенностью. Насколько рамка совпала с разметкой, меряют пересечением (IoU); почти одинаковые рамки на одном объекте схлопывают (NMS). Обычные семейства здесь — YOLO и R-CNN.

Рамки иногда мало. Сегментация (Segmentation) спрашивает, какие пиксели принадлежат объекту. Семантическая красит класс на каждый пиксель; сегментация экземпляров даёт отдельную маску на каждый объект. Обычные опоры — U-Net и Mask R-CNN. Две строки ниже — сам контракт: область или маска.

Рамка → область объекта
Маска → точная форма объекта

Если следующий шаг вырезает клетку и читает цифру, часто хватает рамки или даже геометрии самого бланка. Если нужна площадь поражения на снимке, без маски не обойтись. Инженерный разбор обнаружения — в YOLO; карта зрения на рентгене шва — в архитектуре анализа швов.

В обучение кладут только то, что бывает на линии

Бледный ночной бланк, если он бывает на линии, должен хотя бы похожим лечь в обучение. Выборку искусственно расширяют (augmentation): поворот, обрезка, отражение, масштаб, яркость, шум. Польза есть, когда такое искажение живёт в цехе. Ночной бланк здесь — условие смены, а не картинка «для разнообразия».

Тот же приём ломает задачу, если придумывает мир, которого на линии нет. Зеркальный символ на схеме — уже другой символ. Перевёрнутая цифра, объявленная «новым» классом, учит класс, которого нет. Искажения, которых в цехе не бывает, учат устойчивость к выдумке. Цикл ниже один и тот же в обеих библиотеках: смотрите, как ошибка двигает веса.

Image → Model → Prediction → Loss → Backpropagation → Optimizer → Updated Weights → Repeat

Эпоха, пакет и размер шага читаются одинаково при любом API. Доля верных на обучении растёт, на проверке падает — сеть запоминает дыры, а не открывает их. Ещё одна эпоха на тех же дырах их не лечит. Оценивайте обучающую, проверочную и отложенную контрольную части, затем кадры с площадки. Матрица ошибок, ложные тревоги и пропуски — язык разговора о цене. Эскиз ниже — этот разъезд кривых.

Training accuracy ↑
Validation accuracy ↓
        ↓
    Overfitting

В цех уезжает пакет из весов, предобработки и порогов

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

Файл весов без кода, который масштабирует пиксели, и без порога решения — это не та система, чью долю верных вы записали в отчёт. Три версии едут одним пакетом: веса, предобработка, пороги. Если поменяли только веса, а нормализацию оставили от старого эксперимента, отчёт больше не про сервис. Цепочка ниже — передача из обучения в приложение.

Training → Model → Export → Inference → Application

Сервер, Docker, телефон, устройство у камеры, браузер, квантование и дистилляция — разные ограничения на один и тот же математический объект. Часто учат в PyTorch, а выводят через ONNX Runtime или в браузере через WebGPU + Transformers.js. Библиотека обучения и среда вывода — разные слои.

В цехе смотрите долю отказов по уверенности, 95-й перцентиль времени ответа и новые виды ошибок в разборе кадров. Иначе дрейф кадров раньше вас заметят те, кому уходит продукция.

Две библиотеки читают один и тот же бланк

Один бланк можно спросить двумя библиотеками: где поле, что написано, пусто или значение. Ход мысли от этого не меняется: пакет, прямой проход, ошибка, шаг назад, обновление весов. Меняются имена, которые набирают в коде, и окружение вокруг библиотеки. Кто может объяснить шаг своими словами, найдёт тот же шаг во второй библиотеке.

Таблица ниже — таблица переименований, не рейтинг. Читайте строку поперёк, когда переносите цикл. Выбор под таблицей — про команду, не про «победителя».

Понятие PyTorch TensorFlow
Тензор torch.Tensor tf.Tensor
Модель nn.Module tf.keras.Model
Слои torch.nn tf.keras.layers
Выборка Dataset / DataLoader tf.data.Dataset
Обучение явный цикл fit() или свой цикл
Окружение для зрения TorchVision, Ultralytics, timm KerasCV, стеки TensorFlow, TF Hub
Вывод в работу экспорт SavedModel, Serving, Lite

Нейтральное сравнение — в PyTorch vs TensorFlow. Исследовательские группы и большая часть прикладного зрения чаще берут PyTorch. Уже собранный стек Keras или расчёт на TPU — серьёзная причина остаться на TensorFlow. Вопрос один: какой инструмент удобнее этой команде и этой инфраструктуре.

Сначала один бланк доведите до цеха

Два API сразу и ни одного бланка, доведённого до сервиса, — так пропадает год. Один кадр, один вопрос, одна библиотека, доведённые до сервиса, учат цепочку. Вторая библиотека после этого читается как перевод. Вопрос к листу, доведённый до цеха, и есть эта цепочка.

Порядок ниже — этот путь. Метрики и честное разбиение стоят раньше модной архитектуры. Готовые веса — раньше обучения с нуля. Обнаружение — после того, как на простом классе уже ясна цена ошибки. Глубина в PyTorch или TensorFlow — последний слой, когда цепочка уже знакома.

  1. Python и NumPy
  2. Изображения и OpenCV
  3. Тензоры и нейросети
  4. Свёртки и цикл обучения
  5. Метрики и честное разбиение
  6. Перенос обучения и классификация
  7. Обнаружение и сегментация
  8. Вывод в работу и наблюдение за ним
  9. Глубина в PyTorch или TensorFlow под ваш стек

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

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

REAL PROBLEM → DATA → ANNOTATION → PREPROCESS → AUGMENT
 → MODEL → TRAIN → EVAL → INFERENCE → DEPLOY → FEEDBACK → DATA

Обычная ранняя остановка — на обучении, до вывода и до того, как плохие кадры следующей смены вернулись в набор. Рядом типичные ошибки старта: учить два API, не закончив одну задачу; гнаться за самой свежей архитектурой из статей при кривой разметке; мерить только долю верных; забыть, что предобработка — часть модели. Дешевле один сквозной мини-проект: класс на кадр, метрики, экспорт, простой сервис. Стопка уроков, которые ни разу не доходят до вывода, обходится дороже.

Книги PyTorch Computer Vision Cookbook и Hands-On Computer Vision with TensorFlow 2 полезны как набор рабочих приёмов. Живой синтаксис сверяйте с документацией: API меняется. Рядом держите официальные руководства PyTorch, TorchVision, TensorFlow, Keras и OpenCV.

Частые вопросы

С чего начать Computer Vision в 2026?

С вопроса к одному бланку и с маленького честного набора. Дальше — классификация на готовых весах в той библиотеке, которая уже есть у команды, часто это PyTorch. Логотип «на всю карьеру» выбирать рано: цепочка ещё не проверена на своей задаче.

Нужно ли учить и PyTorch, и TensorFlow?

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

Почему на проверке доля верных высокая, а в цехе плохо?

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

Когда хватает OpenCV без нейросети?

Когда правило стабильно: порог, морфология, проекции, шаблон. Сеть нужна, когда картинка сильно меняется, а ручная эвристика уже дорогая. Геометрия бланка вместе с моделью часто держится крепче, чем сеть на всём кадре сразу.

Рамка или маска?

Рамка — если дальше вырезка, подсчёт или чтение текста в области. Маска — если нужны точная форма, площадь или отделение фона по пикселям.

Как связать зрение с LLM и RAG?

Сначала устойчивое зрение: объекты, поля, текст, структура. Языковую модель ставьте на уже извлечённые факты. Координаты она не заменяет. Пример стыковки на схемах — в YOLO.

Книги по Computer Vision ещё актуальны?

Тензор, свёртка, расширение выборки, метрики и перенос обучения — да. Конкретные вызовы и версии весов сверяйте с документацией и с теми весами, которые вы реально грузите.

Заключение

Цепочка зрения начинается с вопроса к бланку на столе и заканчивается тем, что ошибка с линии возвращается в набор. PyTorch и TensorFlow проводят эту цепочку разными именами вызовов и разным окружением.

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

Три вопроса к одному листу, доведённые до сервиса, и вторая библиотека читается как перевод.