Depth Anything и SmolVLM – маленькие модели компьютерного зрения на устройстве

Автор: Николай СапуновОбновлено: август 202624 мин чтения
Содержание статьи +

TL;DR

Depth Anything V2 и SmolVLM2 – две open-source-модели, благодаря которым в 2026 году малые модели компьютерного зрения на устройстве стали полноценным инженерным вариантом, а не только research-демо. Самая маленькая версия Depth Anything V2 (24,8 миллиона параметров, лицензия Apache 2.0) выдаёт пиксельную карту глубины из одного RGB-кадра со скоростью более 50 кадров в секунду на потребительском GPU и работает в реальном времени на телефоне после экспорта в ONNX или Core ML. SmolVLM2 поставляется в трёх размерах – 256M, 500M и 2,2B параметров, – а вариант 500M стоит за демо-приложением Hugging Face для iPhone, которое анализирует видео локально и не отправляет ни одного кадра в облако. Статья объясняет, как устроена каждая модель, где проходит граница между специализированным примитивом вроде Depth Anything и универсальной мультимодальной моделью вроде SmolVLM, и как объединить обе в единый low-latency-конвейер, работающий на телефоне, Jetson или во вкладке браузера.

Зачем Это Нужно

Главное про 2026 год – не то, что ИИ стал больше. Главное – что маленькие модели стали полезными. Два года назад глубина из одной камеры была research-задачей; сегодня модель с 25 миллионами параметров, обученная на синтетических данных, выдаёт карты глубины, которые для большинства продуктовых задач неотличимы от того, что даёт стереокамера. Два года назад VLM, способный описать видеоклип, требовал мульти-GPU-сервера; сегодня модель с 500 миллионами параметров внутри iPhone-приложения делает то же самое. Если вы делаете продукт, в котором есть видео – surveillance, телемедицина, e-learning, OTT, видеоконференции, AR, – вопрос больше не в том, возможно ли делать computer vision на устройстве. Вопрос в том, какие два-три из этих примитивов собрать в стек, чтобы ответить на продуктовый вопрос. Статья – для продакт-менеджера, основателя или video-инженера, которому нужно оценить фичу с пониманием того, что внутри кадра: его геометрии, его содержания, отношений между объектами, – без оплаты по API-вызовам и без отправки каждого кадра с телефона пользователя на сервер.

Две Половины On-Device-Зрения

Удобный способ думать про computer vision на маленьких моделях в 2026 – представить, что задача разбивается на две взаимодополняющие половины. Первая – измерение: превращение пикселей в числа о физической сцене (где поверхности, как далеко они находятся, как они движутся). Вторая – понимание: превращение тех же пикселей в естественный язык о содержании и смысле сцены. Depth Anything и SmolVLM покрывают по половине этого разделения.

Depth Anything – это измерительный примитив. На входе один RGB-кадр, на выходе значение глубины для каждого пикселя – число с плавающей точкой, говорящее, как далеко эта точка мира находится от камеры. Выход плотный (одно число на пиксель, а не одно число на детектированный объект) и геометрический (числа уважают реальную геометрию сцены, а не только относительный порядок). Downstream-задачи потребляют эти числа напрямую: планировщик использует глубину, чтобы обходить препятствия; AR-приложение – чтобы перекрывать виртуальный объект реальным; surveillance-система – чтобы превратить 2D-bounding-box в 3D-позицию.

SmolVLM – это понимающий примитив. На входе один или несколько кадров плюс prompt на естественном языке, на выходе текст. Текст может быть описанием того, что в кадре, ответом на вопрос про кадр, структурированным извлечением факта или классификацией. Модель достаточно маленькая, чтобы работать локально, но интерфейс тот же, что у GPT-4o – даёте пиксели и prompt, получаете текст обратно.

Почти никогда не выбирают одно и игнорируют другое. Интересные продукты на устройстве в 2026 году используют оба: глубину для геометрии, маленький VLM для семантики и тонкий orchestration-слой сверху, превращающий объединённый сигнал в продуктовое поведение. Остаток статьи разбирает обе модели в деталях и показывает, как их складывать.

Рис. 1. Две половины on-device-зрения малых моделей. Depth Anything выдаёт геометрию; SmolVLM выдаёт язык. Большинство production-конвейеров комбинируют оба.

Depth Anything V2 – Что Это И Как Работает

Depth Anything V2 был выпущен оригинальной командой Depth Anything в 2024 году и принят на NeurIPS 2024. Это foundation-модель для монокулярной оценки глубины – одна нейросеть, которая по любому RGB-изображению с любой камеры в любой сцене выдаёт плотную карту глубины. «Anything» в названии – заявка на ширину входов: помещения, улица, дневной свет, low light, реальные фото, картины, сгенерированные изображения. Методология обучения – то, что делает эту заявку обоснованной.

Архитектура – Vision Transformer-энкодер и Dense Prediction Transformer-декодер. Энкодер переиспользует DINOv2 – self-supervised foundation-модель от Meta, которая даёт general-purpose-фичи изображения. Декодер DPT агрегирует фичи нескольких трансформерных слоёв и апсемплит их в полноразмерную карту глубины. Входные изображения масштабируются до короткой стороны 384 пикселя и центрально кропаются до 384 на 384 перед попаданием в модель.

Команда выпустила четыре размера: ViT-Small (24,8 миллиона параметров), ViT-Base (97,5 миллиона), ViT-Large (335,3 миллиона) и ViT-Giant (1,3 миллиарда). На потребительских GPU ViT-Small и ViT-Base работают со скоростью более 50 кадров в секунду; ViT-Large – sweet spot по точности и эффективности для оффлайн-применения; ViT-Giant – самый точный teacher, на котором учатся младшие student-модели. Inference примерно в десять раз быстрее предыдущей diffusion-based depth-модели (Marigold) при сопоставимой точности.

Тренировочный трюк, который V2 добавил к V1, – трёхступенчатый teacher-student-конвейер. Шаг один обучает самую большую модель (ViT-Giant) только на синтетических изображениях с идеальным ground-truth depth, потому что реальные depth-сенсоры дают шумные метки, а синтетика – нет. Шаг два использует ViT-Giant teacher для генерации псевдо-меток на 62 миллионах неразмеченных реальных изображений. Шаг три обучает младшие student-модели на этих псевдо-метках. Результат: V2 даёт гораздо более тонкую и устойчивую глубину, чем V1, особенно на прозрачных и зеркальных поверхностях, где старые сенсорные метки были систематически неверными.

Есть критическая лицензионная деталь. Чекпоинт ViT-Small выпущен под Apache 2.0, что разрешает коммерческое использование. Чекпоинты Base, Large и Giant выпущены под CC-BY-NC-4.0, что запрещает коммерческое использование. Если вы строите коммерческий продукт, в коробке вы можете поставить только Small-вариант. Чекпоинты Base/Large/Giant годятся для исследований, оценки и предобучения собственной модели на коммерчески лицензированном датасете, но встроить их в платный продукт нельзя. Это самая частая compliance-ловушка: команда прототипирует на Large (потому что он точнее), показывает демо стейкхолдеру, а перед релизом обнаруживает, что нужно всё пересобирать на Small.

Depth Anything V2 по умолчанию выдаёт относительную глубину – значения, которые уважают порядок и относительный масштаб, но не выражены в метрических единицах. Для продуктов, где нужны реальные расстояния в метрах (дрон решает, два метра до препятствия или двадцать), команда выпускает метрические варианты, дообученные на двух датасетах: Hypersim для помещений (max depth 20 метров) и Virtual KITTI 2 для улицы (max depth 80 метров). Берите тот вариант, который соответствует среде развёртывания – outdoor-модель в помещении даст значения, плавающие в абсурдных диапазонах.

Для видео у ванильного Depth Anything V2 есть известное ограничение: запуск кадр-за-кадром даёт временное мерцание – соседние кадры получают значения глубины, которые дрожат даже на статичной сцене. Две follow-up-модели 2025 года это исправляют. Video Depth Anything (CVPR 2025 Highlight) заменяет пер-кадровый DPT-head на spatial-temporal-head, который ограничивает градиент глубины между кадрами и обрабатывает произвольно длинные видео консистентно. FlashDepth (2025) сохраняет пер-кадровый backbone, но добавляет рекуррентную нейросеть, выравнивающую depth-фичи между кадрами для real-time-стриминга на 2K. Обе – расширения V2; выбирайте Video Depth Anything для обработки сохранённого клипа с консистентной глубиной, FlashDepth – для live-стрима с low latency.

SmolVLM2 – Что Это И Как Работает

SmolVLM – семейство малых open-source мультимодальных моделей от Hugging Face, vision-language-моделей, достаточно маленьких, чтобы реально работать на устройстве, которое пользователь держит в руке. Семейство стартовало в конце 2024 года с оригинального SmolVLM (2,2B параметров); в начале 2025 года команда выпустила меньшие варианты 256M и 500M под брендом SmolVLM; позже в 2025 году вышел SmolVLM2, расширивший все три размера для работы с видео, а не только статичными изображениями. Модель 2,2B – самая сильная; 500M – sweet spot для on-device; 256M – для браузера и сильно ограниченного edge.

Архитектура состоит из трёх частей: SigLIP vision-энкодер, шаг сжатия pixel-shuffle и Llama-3 language-декодер.

Vision-энкодер – SigLIP-B/16 (93 миллиона параметров, патчи 16 на 16) для моделей 256M и 500M и SigLIP-SO400M (428 миллионов параметров, патчи 14 на 14) для модели 2,2B. Энкодер превращает каждое изображение в сетку визуальных feature-векторов – маленькие плитки, каждая суммирует регион изображения. Заметное архитектурное решение: vision-башня маленькая относительно language-башни. Большие vision-энкодеры быстро перестают добавлять точность, когда language-модель тоже маленькая.

Шаг pixel-shuffle – трюк, который делает всю конструкцию эффективной. Наивный дизайн скармливает каждый визуальный feature-вектор в language-модель как токен, и счётчик токенов взрывает стоимость attention – изображение из 256 плиток становится 256 токенами плюс токены prompt плюс токены ответа. SmolVLM применяет 2 на 2 pixel-shuffle, переупорядочивающий каждый блок 2 на 2 feature-векторов в один вектор с в четыре раза большим числом каналов. Счётчик токенов падает в четыре раза, а стоимость attention – в шестнадцать, потому что attention квадратичен по числу токенов. Это и есть то, что делает 500M-модель с визуальным входом запускаемой на телефоне.

Language-декодер – семейство SmolLM-2 малых language-моделей Llama-3-архитектуры. Это та же архитектура, что у любой малой open LLM: трансформер, RMSNorm, SwiGLU, rotary position embeddings – просто на малом числе параметров (135M для SmolVLM2-256M, 360M для 500M, 1,7B для 2,2B). Визуальные и текстовые токены подаются вперемешку; модель выдаёт текст авторегрессивно.

Для видео SmolVLM2 сэмплит пятьдесят кадров на клип (настраиваемо) и обрабатывает их как упорядоченную последовательность изображений, добавляя текстовый маркер вида «Here are 50 frames sampled from a video», чтобы модель могла различить «один и тот же объект в разных кадрах» и «разные объекты». Бюджет в 50 кадров сохраняет счётчик токенов разумным даже после pixel-shuffle, а бенчмарки на Video-MME (стандартный бенчмарк понимания видео в 2026 году) показывают, что модель 2,2B конкурентна с гораздо более крупными open-моделями, тогда как варианты 500M и 256M с большим отрывом – самые маленькие video-capable VLM, когда-либо выпущенные.

Числа по ресурсам, потому что они определяют, какое железо нужно:

  • SmolVLM2-256M помещается в менее чем 1 GB GPU RAM. На 14-дюймовом MacBook Pro M4 Max в браузере через WebGPU выдаёт около 80 decode-токенов в секунду. Это вариант «работает во вкладке браузера».
  • SmolVLM2-500M – iPhone-friendly-вариант. Демо iPhone-приложение Hugging Face использует 500M для анализа видеоклипов целиком на устройстве, без сетевых вызовов.
  • SmolVLM2-2.2B требует около 5,2 GB GPU RAM для video-inference. Это самый сильный вариант; ставьте на ноутбук или Jetson Orin, не на телефон.

Все чекпоинты SmolVLM2, датасеты и training-рецепты выпущены под Apache 2.0. Никаких carve-out, никаких NC-ограничений. Можно встраивать в коммерческий продукт без выплат.

Рис. 2. Архитектура SmolVLM2. SigLIP-энкодер превращает изображение в feature-плитки; pixel-shuffle сжимает счётчик плиток в 4×; малый Llama-3-декодер выдаёт текст авторегрессивно. Pixel-shuffle – трюк, делающий 500M-модель размером с телефон.

Где Какая Модель Уместна – Decision Frame

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

Берите Depth Anything, когда нужно число на пиксель. Примеры: AR-приложение решает, рисовать виртуальный объект перед реальным или за ним; surveillance-конвейер поднимает 2D-детекцию в 3D-позицию; робот решает, двигаться или нет; видеоконференц-приложение генерирует размытие фона, уважающее реальную физическую глубину сцены; редактор видео извлекает foreground-субъект для композитинга. Во всех этих случаях выход геометрический и плотный, и VLM не может его выдать – VLM говорит текстом, а не картой глубины.

Берите SmolVLM, когда нужна фраза про кадр. Примеры: модерационный конвейер спрашивает «есть ли в этом клипе человек с оружием?»; e-learning-аналитика спрашивает «что студент пишет на доске прямо сейчас?»; surveillance-дашборд спрашивает «опиши, что произошло в этом пятисекундном клипе»; OTT-поиск спрашивает «какой это тип сцены – спорт, драма, новости?». Во всех этих случаях выход – текст, вопрос меняется от продукта к продукту, и не хочется обучать отдельный классификатор под каждый вопрос.

Берите оба, когда продуктовый вопрос – «что это и где это в сцене?» Стэкуйте depth-модель и VLM параллельно на одном кадре; объедините выходы в orchestration-слое. VLM говорит, что интересно; depth-модель говорит, как далеко и какого размера.

Частая ловушка: команды задают VLM геометрический вопрос – «насколько далеко человек в этом кадре?» – и удивляются, когда ответ неверный. SmolVLM, как и любой малый VLM, ненадёжен для абсолютных геометрических вопросов. Он может случайно оказаться правым в одном кадре и ошибиться на порядок в следующем. Модель не училась на метрических depth-метках; она училась на подписях и диалогах. Нужны числа – берите модель, выдающую числа. Нужны слова – берите модель, выдающую слова.

Тип вопросаПравильный примитивВыходПочему
Как далеко каждый пиксель от камеры?Depth Anything V2 (metric-вариант)Плотная пер-пиксельная карта глубины в метрахГеометрическая задача; специализированная модель
Есть ли в кадре человек?Малый детектор (YOLO-N) или SmolVLMBounding box или текстДетектор быстрее; VLM гибче
Что делает человек?SmolVLMЕстественно-языковое описаниеОткрытый вопрос; нельзя заранее задать список классов
Движется ли камера?Optical flow (RAFT, Lucas-Kanade)Пер-пиксельное motion fieldГеометрическая задача
Нужно ли алертить оператора?SmolVLM с structured-output-prompt"alert: true/false, reason: ..."Композирует другие сигналы в решение
Где именно движущийся объект в 3D?Depth + детектор + простая геометрия(x, y, z) на объектКомбинация геометрии и идентичности

Последняя строка – канонический on-device-CV-конвейер. Детектор находит объекты; глубина даёт им 3D-позицию; VLM (опционально) добавляет семантический контекст. Каждый примитив делает работу, в которой он силён.

Конкретный Стек – Depth + SmolVLM Вместе

Вот рабочий пример конвейера, который может поставлять реальный продукт. Представьте домашнюю security-камеру. Продуктовый вопрос: «предупреди меня, когда кто-то заходит ночью на кухню с чем-то похожим на инструмент». Наивный способ ответить одним большим API-вызовом – слать каждый кадр в GPT-4o и платить за вызов. On-device-способ использует три примитива последовательно, каждый настроенный под свою работу.

Стадия один – motion gate. Дешёвый классический детектор (background subtraction или крошечный YOLO-N) работает на 30 FPS и решает, изменился ли хоть один пиксель достаточно, чтобы тратить на этот кадр большие модели. Стоимость: несколько миллисекунд на кадр на NPU камеры. Результат: 99% входных кадров отфильтровано до запуска любой нейросети.

Стадия два – depth + detection на оставшихся кадрах. На каждом сохранённом кадре параллельно запускается малый person detector и Depth Anything V2 Small. Детектор выдаёт bounding box; depth-модель – карту глубины. Объединяете, читая depth-значение в центре bounding box – это даёт расстояние до человека. Если расстояние помещает человека в геометрический объём, заранее размеченный как «кухня», переходим к стадии три. Иначе дроп. Стоимость на Jetson Orin Nano: около 50 мс на кадр суммарно.

Стадия три – семантическая проверка SmolVLM2. На редких кадрах, прошедших стадию два (на кухне реально кто-то есть), сэмплируем пятикадровый клип и скармливаем SmolVLM2-500M с prompt: «Похоже ли, что человек в этом видеоклипе держит какой-либо инструмент или приспособление? Ответь "yes" или "no" с одним предложением обоснования». Модель работает локально на том же Jetson и возвращает структурированный ответ менее чем за секунду. Если «yes» – алерт.

Весь конвейер крутится на 30 FPS на edge-устройстве дешевле 500 долларов, ничего не стоит за inference, потому что не делает сетевых вызовов, и уважает приватность домохозяйства, потому что видео ни разу не попадает на облачный сервер. Тот же паттерн адаптируется к телемедицине («пациент всё ещё в кадре и в сознании?»), к e-learning («студент смотрит на экран?»), к OTT-модерации («безопасно ли играть этот клип ребёнку?»). Архитектура та же; меняются только prompts и геометрические пороги.

Рис. 3. Трёхстадийный on-device-конвейер. Дешёвый motion gate фильтрует 99% кадров; depth + detection геометрически фильтруют оставшиеся; SmolVLM2 запускается только на маленьком подмножестве, которое того стоит. Каждый шаг работает локально.

Production-Режимы Отказа И Инженерные Фиксы

Три режима отказа стабильно вылезают в реальных деплоях. Закладывайте их в план с первого дня.

Отказ 1 – мерцание в depth-треке. Запуск Depth Anything V2 кадр-за-кадром на видео даёт depth-значения, дрожащие даже на статичной сцене. Для продуктов, где downstream-потребитель просто смотрит на одно число на кадр (одна проверка дистанции, грубый occlusion-тест), дрожь терпимая. Для продуктов, рисующих depth-карту прямо пользователю (любое AR-приложение; любая визуализация), дрожь выглядит ужасно. Фикс: переключиться на Video Depth Anything (CVPR 2025) для сохранённого видео или FlashDepth (2025) для live-стрима. Обе – расширения V2 с модулем temporal consistency. Ожидайте примерно в два-три раза более высокую пер-кадровую compute-стоимость по сравнению с ванильным V2; взамен – стабильный выход.

Отказ 2 – неверный metric-вариант. Метрические depth-варианты дообучены либо на Hypersim (indoor, 20 м), либо на VKITTI (outdoor, 80 м). Использование outdoor-варианта на indoor-съёмке даёт depth-значения, плавающие в абсурдных диапазонах; использование indoor-варианта на outdoor-съёмке клампит всё дальше 20 м в одно и то же значение. Фикс: выбирайте вариант, соответствующий сцене на конфигурации, а не на тренировке. Surveillance-камера, иногда смотрящая внутрь, иногда наружу, должна включать оба варианта и роутить на runtime по разовой setup-классификации.

Отказ 3 – галлюцинации SmolVLM на out-of-distribution-входах. SmolVLM2 обучен на большом количестве данных, но его варианты 500M и 256M всё равно малые модели. Когда задаёшь им вопрос про контент, которого они не видели в обучении, ответы могут быть уверенно неверными. Фикс: ограничьте выход structured-prompt и guard-проверкой. Задавайте «yes/no»-вопросы, а не open-ended. Сопровождайте каждый вызов SmolVLM вторым проходом, переспрашивающим тот же вопрос на другом сэмплированном кадре, и действуйте только при совпадении. Для high-stakes-решений роутите survivors к большей модели на сервере – on-device VLM это дешёвый фильтр, а не финальный судья.

Реальность Железа И Развёртывания

Где какая модель реально работает в production? Краткий справочник.

ЖелезоDepth Anything V2 SmallSmolVLM2-256MSmolVLM2-500MSmolVLM2-2.2B
Современный телефон (iPhone 15 Pro / Pixel 9)30+ FPS через Core ML или NNAPIДа, демо естьДа, официальный HF-demoМаржинально – возможно, но греется
Браузер через WebGPU10–15 FPS на MacBook80 decode-токенов/с на M4 MaxДа, медленноНет
Jetson Orin Nano50+ FPS через TensorRTДа, комфортноДа, комфортноДа
Jetson Orin AGX100+ FPS через TensorRTТривиальноТривиальноДа, с запасом по бюджету
Consumer GPU (RTX 4070)100+ FPSТривиальноТривиальноТривиально

Паттерн конвертации устоявшийся. Экспортируете PyTorch-чекпоинт в ONNX, затем конвертируете в TensorRT на NVIDIA, Core ML на Apple или NNAPI / Qualcomm AI Hub на Android. Квантизуете в FP16 или INT8, чтобы вдвое-вчетверо уменьшить память и примерно удвоить throughput на поддерживаемом железе. Для Depth Anything V2 конкретно: Small-вариант экспортируется в ONNX чисто; для больших вариантов нужно пару operator-workarounds на экспорте, но в комьюнити есть рабочие скрипты.

Практическое правило 2026 года для выбора compute: устройство тянет конвейер, если может держать самый большой weight-файл, который вам нужен, в RAM в FP16 и при этом оставлять память под ОС, video buffer и другие приложения. Для Depth Anything V2 Small это около 50 MB весов; для SmolVLM2-500M – около 1 GB; практический минимум для комбинированного использования – устройство с 4 GB RAM и hardware-ИИ-акселератором. Всё начиная с iPhone 13 и со среднего Android современных поколений проходит по этому порогу.

Где Тут Фора Софт

Мы поставляем on-device CV внутри surveillance-, e-learning-, телемедицинских, OTT- и конференц-продуктов со времён оригинального MobileNet, и переход на Depth Anything + малые VLM поменял, какие вопросы можно скоупить в какие бюджеты. Три паттерна, которые мы использовали в клиентских проектах 2026 года: depth-aware размытие и замена фона, уважающие реальную геометрию сцены, а не плоскую 2D-сегментацию, которую до сих пор поставляют старые видеоконференц-приложения; on-device privacy-редактура в e-learning-записях, где малая VLM помечает кадры с лицами студентов или рукописным контентом, и редактура выполняется локально, прежде чем что-либо доходит до нашей инфраструктуры; edge-surveillance-конвейеры для retail и industrial-сайтов, где камера делает тяжёлую работу, а в облако приходят только алерты. Если вы скоупите фичу из одного из этих паттернов, build-or-buy-ответ в 2026 году – обычно «build, потому что open-примитивов теперь хватает».

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

  • Depth Anything V2 Small (24,8M параметров, Apache 2.0) – единственный коммерчески лицензированный вариант; Base/Large/Giant – только non-commercial.
  • Для консистентной глубины на видео используйте Video Depth Anything (offline) или FlashDepth (live), а не ванильный V2 кадр-за-кадром.
  • SmolVLM2 – Apache 2.0 на всех размерах (256M, 500M, 2.2B); pixel-shuffle – трюк, делающий 500M запускаемой на телефоне.
  • Depth Anything – для измерения (числа на пиксель), SmolVLM – для понимания (текст); никогда не спрашивайте у VLM абсолютную геометрию.
  • Production-конвейер на устройстве фильтрует дорогие модели дешёвыми: motion → depth + detection → VLM только на тех кадрах, которые того стоят.
  • Выбирайте metric-depth-вариант (Hypersim в помещении, VKITTI на улице) по среде развёртывания, а не по бенчмарку точности.

Что Читать Дальше

Поговорить с video-инженером · Посмотреть кейсы · Скачать чеклист on-device CV

Строите такую систему?

Подберём параметры кодирования под ваш контент и посчитаем стоимость доставки до старта разработки.