Вышел OpenCV 5 — крупнейшее обновление с 2018 года (мы протестировали)
BBetter Stack
컴퓨터/소프트웨어사진/예술AI/미래기술
스크립트
00:00:00Все мы знаем OpenCV, верно? Это главная библиотека компьютерного зрения, которую все используют для
00:00:07изменения размера изображений, обнаружения объектов и выполнения самых разных задач компьютерного зрения. И она только что
00:00:13получила первое крупное обновление со времен 2018 года. И это действительно серьезное обновление. В OpenCV 5 появился совершенно новый
00:00:21механизм глубокого обучения, способный запускать YOLO. Он также может выполнять заполнение изображений (in-painting) в стиле Stable Diffusion и
00:00:27даже запускать полноценные визуально-языковые модели, причем нативно, без PyTorch, без ONNX Runtime и без каких-либо
00:00:35дополнительных надстроек. Так что в сегодняшнем видео мы разберем, что именно нового в OpenCV 5, а затем протестируем
00:00:41новые функции самостоятельно с помощью крутых демо-примеров, работающих локально на моем компьютере. Это будет
00:00:47очень интересно, так что давайте начнем. Сначала расскажу, почему это обновление так важно.
00:00:57OpenCV повсюду. У неё более 86 000 звезд на GitHub, более миллиона установок в день, и
00:01:05уже два десятилетия она является фундаментом для робототехники, дополненной реальности, медицинской инженерии, промышленного
00:01:11контроля — в общем, любого программного обеспечения, связанного с компьютерным зрением. И на протяжении
00:01:17последних восьми лет все строили решения на версии 4.x. Так что серьезное обновление версии — это
00:01:24действительно большое событие. А главной особенностью этой версии является полная переработка модуля DNN,
00:01:32который отвечает за запуск нейронных сетей в OpenCV. Итак, вот самая важная цифра, на которую стоит
00:01:38обратить внимание. В OpenCV 4 движок DNN поддерживал лишь около 22% операторов ONNX. ONNX — это стандартный
00:01:47формат, в который вы экспортируете модель, чтобы запустить её не в той среде, где она была обучена.
00:01:53И 22% покрытия означали, что чаще всего, скачав современную модель и пытаясь её загрузить, вы
00:02:01сразу же сталкивались с проблемой. Какой-то оператор не поддерживался, и вы оказывались в тупике. Но OpenCV 5 увеличивает это покрытие
00:02:08до 80%. Так что теперь библиотека запускает большинство таких моделей «из коробки». А причина такого огромного
00:02:15скачка в том, как они перестроили движок. Старый движок обрабатывал сети слой за слоем. Новый же
00:02:22построен на графе типизированных операций. Он сначала анализирует всю сеть как граф, а затем выполняет
00:02:29правильный вывод формы, свертку констант и слияние операторов перед тем, как вообще что-либо запускать. Проще говоря,
00:02:36он понимает всю модель до выполнения, поэтому может работать с динамическими формами и
00:02:42современными архитектурами трансформеров, которые старый движок просто не мог осилить. И вот впечатляющая часть.
00:02:48Благодаря этим изменениям, движок не только стал более совместимым, но и очень быстрым. OpenCV сравнила свой новый
00:02:56движок с Microsoft ONNX Runtime. И на CPU OpenCV 5 сравнялся или даже превзошел его на реальных моделях. Например,
00:03:04он работал на 11,5% быстрее с YOLOv8, почти на 37% быстрее с OWL-ViT v2 и на 30% быстрее с XFeat.
00:03:15Это собственные данные OpenCV, так что относитесь к ним с долей скепсиса и тестируйте
00:03:22на своих задачах. Но если это правда, то результат впечатляет. Также в этом
00:03:27новом релизе есть много другого крутого: нативная поддержка типов данных FP16 и BF16, поддержка n-мерных массивов в CV::Mat,
00:03:36ориентация на Python, а устаревший C API удален, и теперь базовым стандартом является C++17.
00:03:44И важный нюанс: на данный момент новый движок работает только на CPU.
00:03:51Поддержка GPU появится позже в цикле обновлений 5-й версии. Так что если вам нужно GPU-ускорение сейчас,
00:03:58вам придется вернуться к классическому движку, который все еще имеет поддержку CUDA и OpenVINO.
00:04:03Поэтому всё, что я сейчас покажу в новой версии 5, работает на CPU. Итак, главная особенность —
00:04:10новый движок DNN. Давайте протестируем примеры и посмотрим на производительность.
00:04:16Итак, начнем с интересного примера. В OpenCV есть пример колоризации, где можно взять
00:04:22черно-белое изображение, а нейросеть предскажет цвета. Кстати, я недавно смотрел “Человека-паука: Нуар”
00:04:28и это довольно крутой сериал. Он тоже черно-белый, поэтому я подумал, что было бы весело
00:04:34раскрасить кадр из него и посмотреть, что получится. Я возьму это изображение и запущу
00:04:39пример колоризации, который использует новый движок DNN. И бум, готово. Посмотрите, как быстро это было.
00:04:47Что касается результата, он не идеален. Мы видим, что небо получилось неплохо,
00:04:53но другие части изображения раскрашены неудачно. И помните, что используется старая
00:04:59модель колоризации, которая осторожничает с цветами. Но суть не в самой модели,
00:05:05а в движке. Я хотел показать, что это изображение было создано с использованием нативной
00:05:11нейросети OpenCV без сторонних зависимостей, что очень круто. Теперь попробуем их пример
00:05:17обнаружения объектов. Опять же, в тематике Нуар-паука, я использую отрывок из сериала
00:05:24и прогоню его через конвейер. И когда я запустил скрипт, посмотрите на это.
00:05:29Обнаружение объектов происходит в реальном времени, работая на CPU через новый движок DNN. И
00:05:36вспомните тот бенчмарк раньше? Это как раз тот случай, когда OpenCV работает быстрее, чем
00:05:43ONNX Runtime. Так что вы не жертвуете производительностью ради удобства, вы получаете оба преимущества
00:05:49в этом сценарии. И не нужно устанавливать PyTorch или отдельный Runtime. И GPU не требуется.
00:05:56Все работает в чистом OpenCV. Теперь попробуем их пример заполнения (in-painting) через LDM.
00:06:03LDM означает латентную диффузию (latent diffusion), и OpenCV 5 поставляется с примером заполнения на базе этой модели.
00:06:11Давайте посмотрим, как это работает. Загрузим то же изображение Нуар-паука.
00:06:16Теперь я могу закрасить что-то, что хочу удалить. Человека, объект,
00:06:23что угодно. А диффузионная модель заполнит пустое место. Это работает медленнее, потому что классическое
00:06:31заполнение OpenCV использует один проход, что происходит мгновенно, а LDM использует диффузию,
00:06:39которая итеративна. Она начинает с шума и шаг за шагом его убирает. Так что выполняется
00:06:45множество шагов подряд. А поскольку мы делаем это на CPU, это еще медленнее, ведь диффузия
00:06:51больше подходит для GPU. Но, тем не менее, вот результат, который я получил всего за несколько
00:06:58шагов. И я бы сказал, что результат достойный. Не идеально, все еще видны некоторые
00:07:05артефакты диффузии. Но это можно исправить, увеличив количество шагов или сменив модель.
00:07:11И напоследок, я хочу показать пример вывода VLM, который демонстрирует, как можно использовать
00:07:17визуально-языковые модели или LLM нативно внутри OpenCV для таких задач, как создание описаний изображений.
00:07:25В этом примере мы используем модель PaliGemma для описания нашего изображения с Нуар-пауком.
00:07:32Как видите, это мучительно медленно. И результат тоже не впечатляет. Так что я
00:07:39точно не стал бы использовать для этого OpenCV. Есть гораздо лучшие варианты. Например,
00:07:45можно запустить 12-миллиардную модель Gemma 4 локально на ONNX и получить результат в сто раз быстрее.
00:07:53Я показывал этот пример в одном из своих прошлых видео про модель Gemma 4.
00:07:58Так что посмотрите, если интересно. Но суть этого демо — показать, что OpenCV теперь обладает
00:08:04всеми компонентами для работы LLM: токенизатором, слоями внимания и KV-кэшем,
00:08:11все встроено. И тот факт, что это вообще работает без стороннего Runtime, говорит о том,
00:08:18куда движется эта библиотека. Скоро зрение и язык будут объединены в одном месте. И
00:08:24как только они выпустят обновление для GPU, станет еще лучше и быстрее. Итак, друзья,
00:08:29это OpenCV версии 5 вкратце. Одна библиотека, работающая на CPU без лишних
00:08:37зависимостей. Мы использовали её для колоризации, обнаружения объектов, диффузионного заполнения
00:08:43и описания изображений. Конечно, обучать модели вам все равно придется, например, в PyTorch.
00:08:50Это не то, для чего предназначена OpenCV. Но когда дело доходит до исполнения этих моделей
00:08:56внутри конвейера зрения, OpenCV 5 — отличный выбор и огромный скачок вперед по сравнению с тем, что было
00:09:03всего месяц назад. Что вы думаете об OpenCV 5? Собираетесь ли вы использовать её
00:09:09в своих проектах? Дайте нам знать в комментариях ниже. И друзья, если вам нравятся такие
00:09:14технические разборы, пожалуйста, дайте мне знать, нажав на кнопку лайка под этим видео.
00:09:19И не забудьте подписаться на наш канал. С вами был Андрус из BetterStack,
00:09:24и увидимся в следующих видео.