Содержание
На столе один бланк. К нему три вопроса: где на листе поле, что написано в клетке, и стоит ли там пусто, пометка повтора или значение. Модель на линии уже отвечает. В отчёте доля верных кадров высокая, а брак уезжает дальше. В эту минуту команда спорит, как в коде назван класс: 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 — последний слой, когда цепочка уже знакома.
- Python и
NumPy - Изображения и
OpenCV - Тензоры и нейросети
- Свёртки и цикл обучения
- Метрики и честное разбиение
- Перенос обучения и классификация
- Обнаружение и сегментация
- Вывод в работу и наблюдение за ним
- Глубина в
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 проводят эту цепочку разными именами вызовов и разным окружением.
Данные, честная оценка, тип ответа (класс, рамка, маска или текст) и пакет вывода весят больше, чем спор, какая библиотека выиграла сравнительный тест. Следующий шаг — один сквозной мини-проект в той библиотеке, которая уже есть у команды: класс на кадр, метрики по цене ошибки, экспорт и простой сервис.
Три вопроса к одному листу, доведённые до сервиса, и вторая библиотека читается как перевод.


