Apple Depth Pro: Карта глубина с расчетом фокусного расстояния менее чем за сек…
Depth Pro – базовая модель для метрической монокулярной оценки глубины по по одному изображению в режиме zero-shot. Она позволяет синтезировать Hi-Res карты глубины с высокой точностью определения границ объектов, воспроизводя их форму, расположение и абсолютный масштаб без использования метаданных камеры.
Архитектура модели основана на применении энкодеров ViT к фрагментам изображения, извлеченным в нескольких масштабах.
Используются два кодировщика ViT: фрагментный энкодер, обрабатывающий блоки изображения для изучения масштабно-инвариантных представлений и энкодер изображения, фиксирующий предсказания в глобальном контексте.
Модель работает с фиксированным разрешением 1536×1536 пикселей, а каждый из модулей ViT – 384×384 пикселей.
Для обучения используются 5 целевых функций (LMAE, LMSE, LMAGE, LMALE и LMSGE ) на основе канонической обратной глубины и применяется двухэтапный план обучения. Набор данных состоит из 43 датасетов.
Первый этап учит обобщающим признакам, основанным на смеси реальных и синтетических данных, а второй — повышению резкости границ на синтетических данных с точной информацией о глубине.
Модель показала высокую точность на различных наборах данных (Booster, ETH3D, Middlebury, nuScenes, Sintel и Sun-RGBD91011) .
Depth Pro превзошла другие методы по точности оценки фокусного расстояния на наборах данных DDDP, FiveK, PPR10K, RAISE, SPAQ и ZOOM.
Скорость инференса, замеренная в тестировании – 0,3 секунды на генерацию карты глубины 2,25-мегапиксельного изображения.
# setting up a venv:
conda create -n depth-pro -y python=3.9
conda activate depth-pro
pip install -e .
# Download pretrained checkpoints:
source get_pretrained_models.sh
# Run the inference from CLI on a single image:
depth-pro-run -i ./data/example.jpg
# Running from python
from PIL import Image
import depth_pro
model, transform = depth_pro.create_model_and_transforms()
model.eval()
image, _, f_px = depth_pro.load_rgb(image_path)
image = transform(image)
prediction = model.infer(image, f_px=f_px)
depth = prediction["depth"] # Depth in [m].
focallength_px = prediction["focallength_px"] # Focal length in pixels.