Ultralytics YOLO를 활용한 단안 깊이 추정#
단안 깊이 추정은 단일 RGB 이미지에서 픽셀별 깊이 맵을 예측합니다. 각 출력 픽셀에는 해당 표면 지점까지의 추정 거리를 미터 단위로 나타내는 깊이 값이 저장됩니다.
깊이 모델의 출력은 입력 이미지에 맞춰 정렬된 (H, W) 형태의 dense float 맵입니다. 이러한 픽셀별 표현은 단안 깊이 추정을 3D 장면 재구성, 로봇 내비게이션, AR/VR 콘텐츠 제작 및 단일 카메라에서 공간 배치가 필요한 모든 애플리케이션에 적합하게 만듭니다.
단안 깊이 추정에는 task=depth 또는 yolo depth CLI task를 사용합니다. YOLO26 깊이 모델 파일은 -depth 접미사를 사용하며, 예를 들어 yolo26n-depth.pt과 같습니다.
Watch: Monocular Depth Estimation with Ultralytics YOLO26 | Python Tutorial | Vision AI 🚀
모델#
광범위한 다중 데이터셋 혼합(실내 + 실외, ~2.19M 이미지)으로 사전 학습된 YOLO26 깊이 모델을 아래에 표시합니다. 메트릭 열은 NYU Depth V2 Eigen 테스트 분할에서 측정한 결과입니다.
모델은 처음 사용할 때 최신 Ultralytics 릴리스에서 자동으로 다운로드됩니다.
| 모델 | 크기 (픽셀) | delta1NYU | abs_relNYU | rmseNYU | 속도 CPU ONNX (ms) | 속도 T4 TensorRT10 (ms) | 파라미터 (M) | FLOPs (B) |
|---|---|---|---|---|---|---|---|---|
| YOLO26n-depth | 768 | 0.882 | 0.109 | 0.414 | 272.0 ± 27.2 | 2.7 ± 0.1 | 6.3 | 46.9 |
| YOLO26s-depth | 768 | 0.896 | 0.104 | 0.399 | 393.7 ± 13.1 | 3.8 ± 0.0 | 13.2 | 68.0 |
| YOLO26m-depth | 768 | 0.921 | 0.089 | 0.364 | 621.5 ± 49.7 | 6.0 ± 0.1 | 23.3 | 130.4 |
| YOLO26l-depth | 768 | 0.930 | 0.083 | 0.351 | 821.9 ± 50.7 | 7.7 ± 0.1 | 27.7 | 157.0 |
| YOLO26x-depth | 768 | 0.933 | 0.080 | 0.344 | 1240.9 ± 73.3 | 13.6 ± 0.2 | 57.0 | 301.7 |
- **delta1NYU**는 NYU Depth V2 Eigen 테스트 분할(654개 이미지)에서 멀티스케일 + 수평 플립 TTA 및 로그 최소제곱 정렬을 적용했을 때, 예측 깊이가 실제 깊이의 1.25배 이내인 픽셀의 비율입니다.
- TTA를 사용하지 않는 단일 스케일 정확도는
yolo depth val model=yolo26n-depth.pt data=nyu-depth.yaml imgsz=768 device=0으로 재현할 수 있으며(각 크기에 대해model=로 대체), 중앙값(스케일만) 정렬을 사용하므로 더 낮은 점수를 기록합니다: delta1 0.783 (n), 0.793 (s), 0.840 (m), 0.853 (l), 0.860 (x). - abs_rel은 예측 깊이 값과 실제 깊이 값 간 평균 절대 상대 오차입니다.
- rmse는 미터 단위의 평균 제곱근 오차입니다.
- 속도는
imgsz=768,batch=1에서의 추론 전용 지연 시간(전처리 및 후처리 제외)이며, 워밍업 후 측정된 실행에서 평균 ± 표준편차로 보고합니다. CPU ONNX는 32코어 Intel Xeon(Skylake)에서의 ONNX Runtime fp32이고, T4 TensorRT10은 Tesla T4에서의 TensorRT fp16입니다. - params와 FLOPs는 공개된 가중치의 학습 해상도인 768×768에서 측정됩니다.
초기 NYU Depth V2 결과는 미출시 YOLO27 미리보기를 참조하십시오.
Depth Anything V2와의 속도 비교#
Depth Anything V2는 널리 사용되는 단안 깊이 추정 오픈 베이스라인입니다. 이 모델의 DINOv2 비전 트랜스포머 백본과 DPT 디코더는 연산량이 많기 때문에, 동일한 Tesla T4에서 TensorRT fp16을 사용할 경우 공개된 Depth Anything V2 모델 중 가장 작은 모델도 모든 YOLO26 깊이 모델보다 느립니다. 여기에는 파라미터 수가 두 배 이상 많은 YOLO26x-depth도 포함됩니다.
약 ~768 px에서 — YOLO26의 경우 공개된 가중치가 학습된 해상도인 imgsz=768, Depth Anything V2의 경우 DINOv2 백본이 패치 크기 14의 배수를 요구하므로 770 px에서 — 다음과 같습니다:
| 모델 | 파라미터 (M) | FLOPs (B) | T4 TensorRT10 (ms) | FPS | V2 Small 대비 속도 향상 | V2 Base 대비 속도 향상 |
|---|---|---|---|---|---|---|
| Depth Anything V2 Base | 97.5 | 1025.5 | 55.40 | 18.1 | — | — |
| Depth Anything V2 Small | 24.8 | 346.9 | 20.99 | 47.6 | — | — |
| YOLO26x-depth | 57.0 | 301.7 | 13.57 | 73.7 | 1.5× | 4.1× |
| YOLO26l-depth | 27.7 | 157.0 | 7.68 | 130.2 | 2.7× | 7.2× |
| YOLO26m-depth | 23.3 | 130.4 | 6.00 | 166.7 | 3.5× | 9.2× |
| YOLO26s-depth | 13.2 | 68.0 | 3.82 | 261.6 | 5.5× | 14.5× |
| YOLO26n-depth | 6.3 | 46.9 | 2.73 | 365.8 | 7.7× | 20.3× |
약 ~640 px에서 — 각각 imgsz=640 및 644 px에서 — 순서는 변하지 않으며, YOLO26n-depth는 Depth Anything V2 Small보다 5.9배 빠릅니다:
| 모델 | T4 TensorRT10 (ms) | FPS |
|---|---|---|
| Depth Anything V2 Base | 35.10 | 28.5 |
| Depth Anything V2 Small | 13.62 | 73.4 |
| YOLO26x-depth | 10.26 | 97.5 |
| YOLO26l-depth | 6.14 | 162.8 |
| YOLO26m-depth | 4.71 | 212.1 |
| YOLO26s-depth | 3.08 | 324.4 |
| YOLO26n-depth | 2.29 | 436.9 |
- 지연 시간은 추론 전용이며,
batch=1, Tesla T4에서의 TensorRT fp16 기준입니다. 이는 위 모델 표와 동일한 하네스를 사용하고 소수점 둘째 자리까지 표시한 값이며, FPS는 반올림하지 않은 지연 시간의 역수입니다. Speedup 열은 Depth Anything V2 Small(20.99 ms) 및 Base(55.40 ms)의 지연 시간을 YOLO26 지연 시간으로 나눈 값입니다. - Depth Anything V2 Small과 Base는 공개된 ViT-S 및 ViT-B 체크포인트입니다.
- 이 비교는 지연 시간만 다루며, 여기서는 두 모델 제품군을 동일한 정확도 프로토콜로 평가하지 않았습니다.
깊이 범위와 로그 깊이 헤드#
깊이 헤드는 exp(logit)을 예측합니다 — 범위가 제한되지 않으며(~0.02–150 m), 장면 형태와 절대 스케일을 분리합니다: 네트워크는 상대 로그 깊이 필드를 예측하고, 절대 미터 값은 평가 시 복원되는 별도의 두 파라미터 변환(exp(a·log d + b)), 경량 calibration 또는 fine-tuning을 통해 설정됩니다. 일반적인 대안인 범위가 제한된 sigmoid × max_depth 헤드는 대신 아키텍처에 고정된 상한을 내장하므로 max_depth을 초과하는 깊이는 모두 잘립니다 — 이로 인해 더 먼 거리의 장면을 학습하거나 예측할 수 없습니다.
헤드의 범위가 제한되지 않는 이유: 깊이 범위 전반의 근거#
통제된 A/B 테스트 — 동일한 데이터, 동일한 스케줄, 헤드만 다릅니다. 동일한 실내(≤10 m) 및 실외(≤80 m) 데이터 혼합으로 두 헤드를 처음부터 학습한 결과:
| 헤드 | 출력 범위 | 혼합 범위 val δ1 | 학습 동작 |
|---|---|---|---|
sigmoid × max_depth (10 m) | 범위 제한 0–10 m | 0.221 | epoch 1에서 정체됩니다 |
log (범위 제한 없음) | 0–~150 m | 0.367 (+66%) | 전체 학습 과정에서 계속 개선됩니다 |
범위가 제한된 헤드는 실외 픽셀의 대부분을 차지하는 10 m 초과 깊이를 표현할 수 없으므로 거의 즉시 개선을 멈춥니다. 반면 log 헤드는 전체 범위에서 학습합니다.
해결되는 실패 모드 — 범위별로 계층화한 단일 데이터셋 fine-tuning. 개별 데이터셋에서 범위가 제한된(10 m) 헤드를 fine-tuning하면 데이터가 상한에 맞을 때는 작동하지만 상한을 초과하면 성능이 붕괴합니다:
| 데이터셋 | 깊이 범위 | 범위 제한 헤드 δ1 |
|---|---|---|
| SUN RGB-D | ≤10 m | 0.78 ✅ |
| Hypersim | 대부분 ≤10 m | 0.74 ✅ |
| KITTI | ~80 m | 0.08 ❌ (abs_rel ≈ 7.0 — 80/10 스케일 불일치) |
| vKITTI2 | 80 m | 0.04 ❌ |
성능 붕괴는 정확히 상한 경계에서 발생합니다. log 헤드에는 이러한 경계가 없습니다.
공개 모델 — 범위 전반의 성능. 10 m(NYU, iBims-1)에서 80 m(KITTI)까지의 범위를 아우르는 벤치마크에서 평가한, 제공된 log 헤드 제품군과 스케일 정렬 δ1:
| 벤치마크 | 범위 | YOLO26x-depth (log) | 이전 범위 제한 릴리스 |
|---|---|---|---|
| NYU Eigen | 10 m | 0.933 | 0.934 |
| iBims-1 | 10 m | 0.961 | 0.945 |
| ETH3D | ~60 m | 0.959 | 0.931 |
| Make3D | ~70 m | 0.302 | 0.296 |
| KITTI Eigen | 80 m | 0.942 | 0.891 |
| 평균 | — | 0.819 | 0.799 |
두 열의 값은 공개된 결과입니다. 다른 행은 각 데이터셋 페이지에 설명된 TTA 및 로그 최소제곱 프로토콜로 평가되지만, 이 저장소의 validator는 이를 구현하지 않으므로 KITTI 행은 동일한 기준으로 재측정할 수 없습니다. 대신 KITTI 페이지에 표준 652프레임 Eigen 분할에서 측정한 수치가 제공됩니다.
가장 큰 향상은 더 긴 범위의 실외 벤치마크(KITTI, ETH3D)에서 나타납니다. 고정된 10 m 상한이 바로 이러한 환경에서 가장 큰 제약으로 작용하기 때문이며, 실내 성능은 유지됩니다.
학습#
이미지 크기 640에서 Depth8 데이터셋으로 100 epochs 동안 YOLO26n-depth를 학습합니다. 사용 가능한 전체 인수 목록은 Configuration 페이지를 참조하세요.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-depth.yaml") # build a new model from YAML
model = YOLO("yolo26n-depth.pt") # load a pretrained model (recommended for training)
model = YOLO("yolo26n-depth.yaml").load("yolo26n-depth.pt") # build from YAML and transfer weights
# Train the model
results = model.train(data="depth8.yaml", epochs=100, imgsz=640)자세한 train mode 내용은 Train 페이지에서 확인하세요.
사용자 데이터로 fine-tuning하기#
사전 학습된 깊이 모델을 사용자 정의 데이터셋에 맞게 조정할 때는 learning rate를 낮추고 AdamW optimizer를 사용하세요. 기본 optimizer 설정은 처음부터 학습하는 경우(SGD 및 lr0=0.01)에 맞춰져 있으므로, 이미 수렴한 깊이 모델에 적용하면 사전 학습된 지식을 덮어쓰고 결과를 저하시킬 수 있습니다. 특히 단일 도메인에서 fine-tuning할 때 그렇습니다.
from ultralytics import YOLO
model = YOLO("yolo26s-depth.pt") # start from pretrained weights
model.train(
data="path/to/your_dataset.yaml",
epochs=20,
imgsz=640,
optimizer="AdamW",
lr0=1e-4, # ~100x below the from-scratch default
warmup_bias_lr=1e-4, # keep warmup gentle too
)추가 팁:
- Augmentation은 표준 args로 제어됩니다 (
degrees,translate,scale,shear,perspective,flipud,fliplr,hsv_h,hsv_s,hsv_v). geometric warp와 flip은 쌍을 이루는 깊이 맵에 동일하게 적용됩니다. 공개된 YOLO26-Depth 가중치에 사용된 정확한 레시피를 확인하려면 checkpoint에 저장된train_args을 살펴보세요. 자세한 내용은 YOLO26 Checkpoint Training Args 검사를 참조하세요. mosaic,mixup,cutmix,copy_paste은 depth에 구현되어 있지 않습니다. 깊이 데이터셋 로더는 이러한 확률을 자동으로 0으로 설정하므로, 전달해도 효과가 없습니다. 이러한 augmentation은 여러 이미지를 결합하기 때문에 유효하지 않은 쌍별 깊이 맵이 생성되므로 지원되지 않습니다.- 모든 깊이 범위가 기본적으로 지원됩니다.
log-head 모델은 범위가 제한되지 않은 깊이를 예측하므로 변경 없이 근거리(매크로) 또는 원거리(실외/주행) 데이터에 적응합니다. 데이터셋 YAML에서max_depth:을 설정하면 검증 메트릭에 반영할 GT 픽셀의 범위를 미터 단위로 제한할 수 있습니다. - 일반적인 성능을 유지하세요. 학습 세트 밖의 장면에서도 모델이 정확도를 유지해야 한다면, 다양한 범용 이미지의 소량(~5–10%)을 학습 데이터에 혼합하세요. 이렇게 하면 fine-tuning 중 망각을 크게 줄일 수 있습니다.
- 처음부터 학습(
model=yolo26s-depth.yaml)은 도메인이 매우 다르고 대규모 데이터셋을 보유한 경우에만 수행하세요. 이 경우에는 보존할 사전 학습 가중치가 없으므로 기본 SGDlr0=0.01이 적절합니다.
깊이 스케일 calibration#
깊이 헤드는 형태(상대적 장면 구조)와 스케일(절대 미터)을 분리합니다. 모델이 장면에서 이미 양호한 상대 깊이를 생성하지만 카메라에 대한 절대값이 맞지 않는 경우, model.calibrate()을 사용하여 몇 초 만에 스케일을 보정할 수 있습니다. 이는 소규모 레이블 데이터셋에 대해 두 파라미터 로그-아핀을 폐쇄형으로 fitting하는 방식이며, gradient 학습이 필요 없고 네트워크 가중치도 변경하지 않으므로 상대적 구조를 저하시킬 수 없습니다.
from ultralytics import YOLO
model = YOLO("yolo26s-depth.pt")
# Fit scale on a labeled split (~100+ images is enough), then persist it
model.calibrate(data="path/to/your_dataset.yaml")
model.save("yolo26s-depth-calibrated.pt")Calibration에는 기준 깊이값이 필요하므로 이를 기준으로 fitting하며, 레이블이 지정된 분할에서 실행됩니다. 따라서 blind inference에서는 수행할 수 없습니다. Calibration은 val metric이 평가하는 것과 동일한 픽셀에서 fitting 및 scoring을 수행합니다. 데이터셋 YAML의 max_depth(기본값 100 m) 이상인 GT는 제외됩니다. 상대 깊이가 이미 양호하고 scale/range만 잘못된 경우 사용하며, 도메인에 맞게 상대 구조 자체를 변경해야 한다면 대신 fine-tune하십시오.
Training에서는 이 작업을 자동으로 수행합니다. model.train(...)이 완료되면 best 및 last checkpoint를 validation set에서 calibration하여, 별도의 설정 없이 metric-scaled depth를 출력합니다.
배포된 yolo26*-depth.pt checkpoint에는 이 calibration이 이미 적용되어 있으며, pretraining validation mix를 기준으로 fitting되었습니다. 모든 도메인에 걸쳐 단일 global scale을 사용하므로, 특정 camera 또는 scene type에서 가장 정확한 absolute depth를 얻으려면 자체 데이터의 소규모 labeled split에 model.calibrate()을 실행하십시오. 그러면 기존에 적용된 fit이 교체됩니다.
데이터셋 형식#
Depth estimation 데이터셋은 각 RGB 이미지에 scale이 적용된 uint16 depth PNG 또는 미터 단위의 floating-point NPY depth map을 연결합니다. PNG 값은 기본적으로 millimeter를 사용하며, 다른 convention을 사용하는 데이터셋은 YAML에서 depth_scale을 설정합니다. Loader는 images component를 depth로 교체하여 depth path를 도출하며, .png을 우선 사용하고 없으면 .npy로 대체합니다.
dataset/
├── images/
│ ├── train/
│ └── val/
└── depth/
├── train/
└── val/예를 들어 images/train/scene_001.jpg에 있는 이미지는 depth/train/scene_001.png의 depth map과 연결됩니다. 전체 형식 사양은 Depth Estimation Dataset Guide를 참조하십시오.
검증#
Depth estimation 데이터셋에서 학습된 YOLO26n-depth 모델의 accuracy를 검증합니다. 검증에서 의도한 dataset YAML을 사용하도록 data을 명시적으로 전달하십시오. 배포된 weight는 imgsz=768에서 학습되었으므로, 최상의 accuracy를 위해 해당 size로 검증 및 prediction을 수행하십시오.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-depth.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Validate the model
metrics = model.val(data="nyu-depth.yaml")
metrics.delta1 # percentage of pixels within threshold δ=1.25
metrics.abs_rel # mean absolute relative error
metrics.rmse # root mean squared error (meters)
metrics.silog # scale-invariant logarithmic errorPrediction#
학습된 YOLO26n-depth 모델을 사용하여 이미지에 prediction을 실행합니다.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-depth.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Predict with the model
results = model("https://ultralytics.com/images/bus.jpg") # predict on an image
# Access the results
for result in results:
depth_map = result.depth.data.cpu().numpy() # torch.Tensor -> NumPy float32, shape (H, W), meters전체 predict mode 세부 정보는 Predict 페이지를 참조하십시오.
결과 출력#
YOLO depth estimation은 이미지당 하나의 Results object를 반환합니다. 각 result에는 전체 이미지에 대한 하나의 dense float depth map이 저장됩니다.
| Attribute | 유형 | Shape | 설명 |
|---|---|---|---|
result.depth | DepthMap | (H,W) | 픽셀별 dense depth map입니다. |
result.depth.data | torch.Tensor | (H,W) | 깊이 값은 미터 단위이며, NumPy를 사용하려면 .cpu().numpy()을 호출합니다. |
result.boxes | - | - | Instance box는 없습니다. |
result.masks | - | - | 인스턴스 마스크가 없습니다. |
모든 task에서 task-specific Results field를 확인하려면 Predict Results by Task 섹션을 참조하십시오.
Depth map 색상화#
Raw depth map은 미터 단위의 single-channel float array로, 계산에는 유용하지만 직접 읽기는 어렵습니다. 이를 color image로 변환하려면 ultralytics.utils.plotting의 colorize_depth helper를 사용하십시오. 이 helper는 (H, W) depth array를 (H, W, 3) BGR uint8 image로 매핑하며, invalid pixel <= 0는 검은색으로 렌더링됩니다.
result.plot()은 기본값(cmap="jet", mode="disparity")을 사용하여 이 색상화를 input image 위에 이미 blend합니다. 독립적인 colorized depth image 또는 다른 colormap이나 normalization을 원할 때는 colorize_depth을 직접 호출하십시오.
import cv2
from ultralytics import YOLO
from ultralytics.utils.plotting import colorize_depth
model = YOLO("yolo26n-depth.pt")
result = model("https://ultralytics.com/images/bus.jpg")[0]
depth = result.depth.data.cpu().numpy() # (H, W) float32, meters
# Colorize with near = warm and save
cv2.imwrite("depth_colored.png", colorize_depth(depth, cmap="spectral")) # (H, W, 3) BGR uint8
# Fix the range to 0-20 m so the same color means the same distance across frames
cv2.imwrite("depth_metric.png", colorize_depth(depth, vmin=0.0, vmax=20.0, cmap="inferno", mode="metric"))
# Blended overlay straight from the Results object (uses cmap="jet", mode="disparity")
result.save("depth_overlay.png")모든 colormap은 차갑고 어두운 색에서 따뜻하고 밝은 색으로 진행됩니다. mode은 가까운 쪽을 어느 끝에 표시할지 결정하며, vmin/vmax는 frame 간 range를 고정하여 항상 동일한 색이 동일한 거리를 의미하도록 합니다.
| 인수 | 값 | 설명 |
|---|---|---|
cmap | jet (기본값) | 고대비 blue → green → red 팔레트로, result.plot()이 사용하는 palette입니다. |
cmap | inferno | Black → purple → orange → yellow입니다. 지각적으로 균일하고 색각 이상에 친화적이며 grayscale에서도 읽기 쉽습니다. |
cmap | spectral | Red → yellow → green → blue(matplotlib Spectral_r)입니다. |
mode | disparity (기본값) | Inverse depth(1/d)를 2번째 및 98번째 percentile 사이에서 정규화하며, 따뜻한 색은 가까운 outlier와 먼 outlier가 흡수되었음을 나타냅니다. |
mode | metric | 깊이를 미터 단위로 vmin과 vmax 사이에서 선형 정규화합니다. 따뜻한 색은 먼 곳을 나타내므로 색상이 실제 거리를 반영합니다. |
내보내기#
YOLO26n-depth 모델을 ONNX, CoreML 등의 다른 형식으로 export합니다.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-depth.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Export the model
model.export(format="onnx")사용 가능한 YOLO26 depth estimation export 형식은 아래 표에 나와 있습니다. format argument를 사용하여 어떤 형식으로든 export할 수 있으며, 예를 들면 format='onnx' 또는 format='engine'입니다. export된 모델에서 직접 prediction 또는 validation을 수행할 수도 있으며, 예를 들면 yolo predict model=yolo26n-depth.onnx입니다. export가 완료되면 모델에 대한 사용 예제가 표시됩니다.
| 형식 | format Argument | 모델 | Metadata | Arguments |
|---|---|---|---|---|
| PyTorch | - | yolo26n-depth.pt | ✅ | - |
| TorchScript | torchscript | yolo26n-depth.torchscript | ✅ | imgsz, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n-depth.onnx | ✅ | imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n-depth_openvino_model/ | ✅ | imgsz, quantize, dynamic, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n-depth.engine | ✅ | imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n-depth.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| TF SavedModel | saved_model | yolo26n-depth_saved_model/ | ✅ | imgsz, keras, quantize, opset, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n-depth.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n-depth_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-depth_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n-depth.mnn | ✅ | imgsz, batch, dynamic, quantize, simplify, opset, nms, device |
| NCNN | ncnn | yolo26n-depth_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n-depth_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n-depth_rknn_model/ | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| ExecuTorch | executorch | yolo26n-depth_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n-depth_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n-depth_deepx_model/ | ✅ | imgsz, quantize, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n-depth_qnn.onnx | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| LiteRT | litert | yolo26n-depth.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| Hailo | hailo | yolo26n-depth_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou |
| Huawei Ascend | ascend | yolo26n-depth_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms |
| Apple Core AI | coreai | yolo26n-depth.aimodel | ✅ | imgsz, batch, quantize |
nms=None은(는) 외부 NMS에 대해 기본적으로 원시 출력을 사용합니다. 사용 가능한 NMS 프리 헤드를 선택하려면 nms=False을(를) 설정하세요. 지원되지 않는 형식은 기본 출력 경로로 대체됩니다. 위의 nms 항목은 nms=True(으)로 NMS를 임베드할 수 있는 형식을 식별합니다.
전체 export 세부 정보는 Export 페이지를 참조하십시오.
FAQ#
RGB 이미지와 16-bit depth PNG 또는 미터 단위의 floating-point NPY depth map을 쌍으로 준비한 다음,
images/directory를 가리키는 dataset YAML을 생성하십시오. Loader는 path에서images을depth로 교체하여 depth file을 자동으로 찾으며,.png을 우선 사용하고 없으면.npy로 대체합니다.Pretrained weight에서 시작하고 AdamW와 함께 낮은 learning rate를 사용하여 fine-tune이 모델이 이미 학습한 내용을 유지하도록 하십시오(그 이유는 자체 데이터에서 Fine-tuning을 참조하십시오).
예시from ultralytics import YOLO # Load a pretrained YOLO26 depth model model = YOLO("yolo26s-depth.pt") # Fine-tune on a custom depth dataset results = model.train( data="path/to/your_dataset.yaml", epochs=20, imgsz=640, optimizer="AdamW", lr0=1e-4, warmup_bias_lr=1e-4, )사용 가능한 추가 argument는 Configuration 페이지를 확인하십시오.
Depth estimation validation은 Depth Anything 및 관련 monocular-depth 연구에서 사용하는 metric set을 보고합니다.
- delta1 / delta2 / delta3 — 예측 depth와 ground-truth depth의 비율(또는 그 역수)이 각각 1.25, 1.25², 1.25³ 미만인 픽셀의 비율입니다. 높을수록 좋습니다.
- abs_rel — 평균 absolute relative error입니다. 낮을수록 좋습니다.
- rmse — 미터 단위의 root mean squared error입니다. 낮을수록 좋습니다.
- silog — scale-invariant logarithmic error입니다. 낮을수록 좋습니다.
각 prediction은 이미지별로 ground truth에 median-alignment되고, 각 metric은 해당 이미지에서 확정된 후 이미지별 결과를 validation set 전체에서 평균합니다. 따라서 valid depth pixel 수와 관계없이 모든 이미지가 동일한 가중치를 갖습니다. 유효한 ground-truth pixel이 10개 미만인 이미지는 제외되어 평균에 포함되지 않습니다. 소수의 pixel median을 정렬하는 것은 의미가 없기 때문입니다. 반면 non-finite prediction은 depth bound에서 scoring됩니다. 이는 Depth Anything V2에서 사용하는 per-sample averaging 및 10-pixel floor와 일치합니다.
Depth map은 shape이
(H, W)인torch.Tensor으로 저장되며, 각 값은 미터 단위의 predicted depth입니다(NumPyfloat32array에는result.depth.data.cpu().numpy()를 사용하십시오). Prediction을 실행한 후result.depth.data를 통해 접근합니다. Map은 input image resolution에 맞춰 정렬됩니다.Ultralytics YOLO26은 NYU Depth V2, KITTI, Hypersim, SUN RGB-D, ARKitScenes를 비롯한 여러 depth estimation 데이터셋에 대한 built-in dataset YAML configuration을 제공합니다. 전체 목록과 형식 세부 정보는 Depth Estimation Dataset Guide를 참조하십시오.
Evaluation에 사용한 dataset YAML을 제공하여 pretrained YOLO26 depth model을 검증합니다.
예시from ultralytics import YOLO # Load a pretrained model model = YOLO("yolo26n-depth.pt") # Validate the model metrics = model.val(data="nyu-depth.yaml") print("delta1:", metrics.delta1) print("abs_rel:", metrics.abs_rel) print("rmse:", metrics.rmse)Python 또는 CLI를 사용하여 YOLO26 depth model을 ONNX로 export합니다.
예시from ultralytics import YOLO # Load a pretrained model model = YOLO("yolo26n-depth.pt") # Export the model to ONNX format model.export(format="onnx")다양한 형식으로 export하는 방법에 대한 자세한 내용은 Export 페이지를 참조하십시오.