Estimativa de Profundidade Monocular com Ultralytics YOLO#
A estimativa de profundidade monocular prevê um mapa de profundidade por píxel a partir de uma única imagem RGB. Cada píxel de saída contém um valor de profundidade em metros que representa a distância estimada entre a câmara e esse ponto da superfície.
A saída de um modelo de profundidade é um mapa denso de floats com forma (H, W), alinhado com a imagem de entrada. Esta representação por píxel torna a estimativa de profundidade monocular adequada para reconstrução de cenas 3D, navegação de robôs, criação de conteúdo de RA/RV e qualquer aplicação que necessite da disposição espacial a partir de uma única câmara.
Usa task=depth ou a tarefa yolo depth da CLI para estimativa de profundidade monocular. Os ficheiros de modelos de profundidade YOLO26 usam o sufixo -depth, como yolo26n-depth.pt.
Watch: Monocular Depth Estimation with Ultralytics YOLO26 | Python Tutorial | Vision AI 🚀
Modelos#
Os modelos de profundidade YOLO26 pré-treinados numa ampla combinação de vários conjuntos de dados (interior + exterior, ~2,19M de imagens) são apresentados abaixo. As colunas de métricas são reportadas na divisão de teste Eigen do NYU Depth V2.
Os modelos são descarregados automaticamente da versão mais recente da Ultralytics na primeira utilização.
| Modelo | tamanho (píxeis) | delta1NYU | abs_relNYU | rmseNYU | Velocidade CPU ONNX (ms) | Velocidade T4 TensorRT10 (ms) | parâmetros (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 é a percentagem de píxeis em que a profundidade prevista está dentro de um fator de 1,25 da verdade fundamental, na divisão de teste Eigen do NYU Depth V2 (654 imagens), com TTA multiescala + inversão horizontal e alinhamento por mínimos quadrados logarítmicos.
- A precisão em escala única sem TTA pode ser reproduzida com
yolo depth val model=yolo26n-depth.pt data=nyu-depth.yaml imgsz=768 device=0(substituimodel=por cada tamanho), que usa alinhamento mediano (apenas de escala) e obtém pontuações inferiores: delta1 0,783 (n), 0,793 (s), 0,840 (m), 0,853 (l), 0,860 (x). - abs_rel é o erro relativo absoluto médio entre os valores de profundidade previstos e os da verdade fundamental.
- rmse é a raiz do erro quadrático médio em metros.
- Velocidade é a latência apenas da inferência (excluindo o pré e pós-processamento) em
imgsz=768,batch=1, reportada como média ± desvio-padrão ao longo de execuções cronometradas após o aquecimento. CPU ONNX é o ONNX Runtime fp32 num Intel Xeon de 32 núcleos (Skylake); T4 TensorRT10 é TensorRT fp16 numa Tesla T4. - parâmetros e FLOPs são medidos a 768×768, a resolução de treino dos pesos disponibilizados.
Consulta a pré-visualização não lançada do YOLO27 para resultados preliminares do NYU Depth V2.
Velocidade comparada com Depth Anything V2#
Depth Anything V2 é uma baseline aberta amplamente utilizada para profundidade monocular. O seu backbone DINOv2 de vision transformer e o descodificador DPT exigem muitos recursos computacionais; por isso, na mesma Tesla T4 com TensorRT fp16, o menor modelo Depth Anything V2 disponibilizado é mais lento do que todos os modelos de profundidade YOLO26 — incluindo o YOLO26x-depth, que tem mais do dobro de parâmetros.
A ~768 px — imgsz=768 para YOLO26, a resolução em que os seus pesos disponibilizados são treinados, e 770 px para Depth Anything V2, cujo backbone DINOv2 requer um múltiplo do seu tamanho de patch de 14:
| Modelo | parâmetros (M) | FLOPs (B) | T4 TensorRT10 (ms) | FPS | Aceleração vs V2 Small | Aceleração vs 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× |
A ~640 px — imgsz=640 e 644 px, respetivamente — a ordenação mantém-se, e YOLO26n-depth é 5,9× mais rápido do que Depth Anything V2 Small:
| Modelo | 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 |
- A latência refere-se apenas à inferência,
batch=1, TensorRT fp16 numa Tesla T4 — o mesmo sistema de teste da tabela de modelos acima, apresentado aqui com duas casas decimais; FPS é o recíproco da latência não arredondada. As colunas de Aceleração dividem a latência de Depth Anything V2 Small (20,99 ms) e Base (55,40 ms) pela latência do YOLO26. - Depth Anything V2 Small e Base são os checkpoints ViT-S e ViT-B disponibilizados.
- A comparação abrange apenas a latência — as duas famílias de modelos não são avaliadas aqui segundo um protocolo de precisão comum.
Intervalo de profundidade e a cabeça de log-profundidade#
A cabeça de profundidade prevê exp(logit) — sem limites (~0,02–150 m) — e desacopla a forma da cena da escala absoluta: a rede prevê um campo de log-profundidade relativo, e os metros absolutos são definidos por uma transformação separada de dois parâmetros (exp(a·log d + b)), recuperada durante a avaliação, através de calibração leve ou por ajuste fino. A alternativa comum, uma cabeça sigmoid × max_depth limitada, incorpora antes um limite máximo fixo na arquitetura, pelo que qualquer profundidade além de max_depth é truncada — o que impede o treino e a previsão de cenas a maior distância.
Porque é que a cabeça não tem limites: evidências em diferentes intervalos de profundidade#
A/B controlado — os mesmos dados, o mesmo agendamento, apenas a cabeça é diferente. Treino de ambas as cabeças desde o início numa combinação idêntica de dados de interior (≤10 m) e exterior (≤80 m):
| Cabeça | Intervalo de saída | δ1 de validação de intervalo misto | Comportamento durante o treino |
|---|---|---|---|
sigmoid × max_depth (10 m) | limitado a 0–10 m | 0.221 | estagna na época 1 |
log (sem limites) | 0–~150 m | 0.367 (+66%) | melhora durante todo o treino |
A cabeça limitada não consegue representar a maioria dos píxeis exteriores a >10 m, pelo que deixa de melhorar quase imediatamente; a cabeça log aprende a partir de todo o intervalo.
O modo de falha que corrige — ajuste fino num único conjunto de dados, estratificado por intervalo. O ajuste fino de uma cabeça limitada (10 m) em conjuntos de dados individuais funciona quando os dados cabem no limite e entra em colapso quando o ultrapassam:
| Conjunto de dados | Intervalo de profundidade | δ1 da cabeça limitada |
|---|---|---|
| SUN RGB-D | ≤10 m | 0.78 ✅ |
| Hypersim | principalmente ≤10 m | 0.74 ✅ |
| KITTI | ~80 m | 0,08 ❌ (abs_rel ≈ 7,0 — a discrepância de escala 80/10) |
| vKITTI2 | 80 m | 0.04 ❌ |
O colapso ocorre exatamente no limite máximo. A cabeça log não tem esse limite.
Modelos disponibilizados — desempenho entre intervalos. A família disponibilizada com cabeça log, avaliada em benchmarks que abrangem 10 m (NYU, iBims-1) a 80 m (KITTI), com δ1 alinhado à escala:
| Benchmark | Intervalo | YOLO26x-depth (log) | versão limitada anterior |
|---|---|---|---|
| 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 |
| Média | — | 0.819 | 0.799 |
Ambas as colunas são apresentadas conforme publicadas. As outras linhas são avaliadas com o protocolo de TTA e mínimos quadrados logarítmicos descrito nas páginas dos respetivos conjuntos de dados, que o validador neste repositório não implementa; por isso, a linha KITTI não pode ser novamente medida em condições equivalentes. A página do KITTI apresenta, em vez disso, valores medidos na divisão Eigen canónica de 652 frames.
Os maiores ganhos verificam-se nos benchmarks exteriores de maior alcance (KITTI, ETH3D) — precisamente onde um limite fixo de 10 m é mais prejudicial —, enquanto o desempenho em interiores é mantido.
Treinar#
Treina YOLO26n-depth no conjunto de dados Depth8 durante 100 épocas, com tamanho de imagem 640. Para obter uma lista completa dos argumentos disponíveis, consulta a página de Configuração.
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)Consulta os detalhes completos do modo train na página Treinar.
Ajuste fino nos teus próprios dados#
Ao adaptares um modelo de profundidade pré-treinado a um conjunto de dados personalizado, reduz a taxa de aprendizagem e usa o otimizador AdamW. As predefinições do otimizador estão ajustadas para treinar desde o início (SGD com lr0=0.01); aplicadas a um modelo de profundidade já convergido, podem substituir o conhecimento pré-treinado e degradar os resultados — especialmente ao fazer ajuste fino num único domínio.
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
)Dicas adicionais:
- A ampliação é controlada pelos argumentos padrão (
degrees,translate,scale,shear,perspective,flipud,fliplr,hsv_h,hsv_s,hsv_v); a deformação geométrica e as inversões são aplicadas de forma idêntica ao mapa de profundidade emparelhado. Para veres a receita exata utilizada nos pesos YOLO26-Depth disponibilizados, inspeciona otrain_argsarmazenado no checkpoint — consulta Inspecionar os argumentos de treino do checkpoint YOLO26. mosaic,mixup,cutmixecopy_pastenão estão implementados para profundidade. O carregador de conjuntos de dados de profundidade define automaticamente estas probabilidades como 0, pelo que transmiti-las não tem qualquer efeito. Estas ampliações não são suportadas porque combinam várias imagens, o que produziria mapas de profundidade emparelhados inválidos.- Qualquer intervalo de profundidade funciona imediatamente. Os modelos com cabeça
logpreveem profundidade sem limites, pelo que se adaptam a dados de curto alcance (macro) ou longo alcance (exteriores/condução) sem alterações. Definirmax_depth:no YAML do teu conjunto de dados (em metros) limita quais os píxeis GT contabilizados para as métricas de validação. - Mantém o desempenho geral. Se precisares que o modelo continue preciso em cenas para além do teu conjunto de treino, mistura uma pequena fração (~5–10%) de imagens gerais diversificadas nos teus dados de treino; isto reduz substancialmente o esquecimento durante o ajuste fino.
- Treina desde o início (
model=yolo26s-depth.yaml) apenas se o teu domínio for muito diferente e tiveres um conjunto de dados grande — nesse caso, o SGD padrãolr0=0.01é adequado, pois não há pesos pré-treinados a preservar.
Calibrar a escala de profundidade#
A cabeça de profundidade separa a forma (estrutura relativa da cena) da escala (metros absolutos). Se um modelo já produzir uma boa profundidade relativa nas tuas cenas, mas os valores absolutos estiverem incorretos para a tua câmara, podes corrigir a escala em segundos com model.calibrate() — um ajuste fechado log-afim de dois parâmetros sobre um pequeno conjunto rotulado, sem treino de gradientes e sem alterar os pesos da rede, pelo que não pode degradar a estrutura relativa.
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")A calibração precisa de profundidade ground truth para ajustar-se, por isso é executada numa divisão com rótulos — não pode ocorrer durante a inferência às cegas. Ela ajusta-se e calcula as pontuações nos mesmos píxeis avaliados pelas métricas de validação: valores GT iguais ou superiores a max_depth do YAML do dataset (100 m por predefinição) são excluídos. Usa-a quando a profundidade relativa já é boa e apenas a escala/alcance está incorreta; se a própria estrutura relativa precisar de mudar para o teu domínio, faz fine-tuning.
O treino faz isto automaticamente: depois de model.train(...) terminar, os melhores checkpoints e os últimos checkpoints são calibrados no conjunto de validação para produzirem profundidade com escala métrica desde o início.
Os checkpoints yolo26*-depth.pt disponibilizados já incluem esta calibração, ajustada com a mistura de validação do pré-treino. Trata-se de uma única escala global em todos os domínios; por isso, para obter a profundidade absoluta mais precisa numa câmara ou tipo de cenário específico, executa model.calibrate() numa pequena divisão com rótulos dos teus próprios dados — isso substitui o ajuste incorporado.
Formato do dataset#
Os datasets de estimativa de profundidade associam cada imagem RGB a um PNG de profundidade uint16 escalado ou a um mapa de profundidade NPY de ponto flutuante em metros. Por predefinição, os valores PNG usam milímetros; os datasets com outra convenção definem depth_scale no respetivo YAML. O carregador obtém o caminho da profundidade substituindo o componente images por depth, dando preferência a .png e usando .npy como alternativa.
dataset/
├── images/
│ ├── train/
│ └── val/
└── depth/
├── train/
└── val/Por exemplo, uma imagem em images/train/scene_001.jpg é associada a um mapa de profundidade em depth/train/scene_001.png. Consulta o Guia de Datasets de Estimativa de Profundidade para obter a especificação completa do formato.
Validação#
Valida a precisão de um modelo YOLO26n-depth treinado num dataset de estimativa de profundidade. Especifica data explicitamente para que a validação use o YAML do dataset pretendido. Os pesos disponibilizados foram treinados em imgsz=768; por isso, valida e faz previsões nesse tamanho para obter a melhor precisão.
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 errorPrevisão#
Usa um modelo YOLO26n-depth treinado para executar previsões em imagens.
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), metersConsulta todos os detalhes do modo predict na página Predict.
Saída dos resultados#
A estimativa de profundidade YOLO devolve um objeto Results por imagem. Cada resultado armazena um mapa de profundidade denso de ponto flutuante para a imagem completa.
| Atributo | Tipo | Forma | Descrição |
|---|---|---|---|
result.depth | DepthMap | (H,W) | Mapa de profundidade denso por píxel. |
result.depth.data | torch.Tensor | (H,W) | Valores de profundidade em metros; chama .cpu().numpy() para obter NumPy. |
result.boxes | - | - | Sem caixas de instâncias. |
result.masks | - | - | Sem máscaras de instâncias. |
Para consultar os campos Results específicos da tarefa em todas as tarefas, vê a secção Resultados de Previsão por Tarefa.
Colorir o mapa de profundidade#
O mapa de profundidade bruto é um array de ponto flutuante de um único canal, em metros — útil para cálculos, mas difícil de interpretar diretamente. Para o converter numa imagem a cores, usa o auxiliar colorize_depth em ultralytics.utils.plotting, que mapeia o array de profundidade (H, W) para uma imagem BGR (H, W, 3) uint8 (os píxeis inválidos <= 0 são apresentados a preto).
result.plot() já sobrepõe esta colorização à imagem de entrada usando as predefinições (cmap="jet", mode="disparity"); chama colorize_depth diretamente quando quiseres uma imagem de profundidade colorida autónoma ou um mapa de cores ou uma normalização diferentes.
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")Todos os mapas de cores vão de frio/escuro → quente/brilhante. mode determina qual das extremidades representa o que está perto, enquanto vmin/vmax fixa o intervalo entre frames para que uma cor represente sempre a mesma distância.
| Argumento | Valor | Descrição |
|---|---|---|
cmap | jet (predefinição) | Azul → verde → vermelho de alto contraste, a paleta usada por result.plot(). |
cmap | inferno | Preto → roxo → laranja → amarelo. Uniforme do ponto de vista percetual, adequada para pessoas daltónicas e legível em tons de cinzento. |
cmap | spectral | Vermelho → amarelo → verde → azul (Spectral_r do matplotlib). |
mode | disparity (predefinição) | Normaliza a profundidade inversa (1/d) entre os percentis 2 e 98; as cores quentes indicam proximidade e os valores extremos distantes são absorvidos. |
mode | metric | Normaliza linearmente a profundidade em metros entre vmin e vmax; as cores quentes indicam distância, pelo que as cores acompanham a distância real. |
Exportação#
Exporta um modelo YOLO26n-depth para um formato diferente, como ONNX, CoreML, etc.
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")Os formatos de exportação disponíveis para estimativa de profundidade YOLO26 estão na tabela abaixo. Podes exportar para qualquer formato usando o argumento format, por exemplo, format='onnx' ou format='engine'. Podes fazer previsões ou validações diretamente em modelos exportados, por exemplo, yolo predict model=yolo26n-depth.onnx. Os exemplos de utilização do teu modelo são apresentados após a conclusão da exportação.
| Formato | Argumento format | Modelo | Metadados | Argumentos |
|---|---|---|---|---|
| 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 por padrão utiliza saídas brutas para NMS externo. Define nms=False para selecionar uma cabeça livre de NMS disponível; os formatos não suportados recorrem ao seu caminho de saída nativo. As entradas nms acima identificam formatos que podem incorporar NMS com nms=True.
Consulta todos os detalhes de export na página Export.
Perguntas frequentes#
Prepara imagens RGB emparelhadas e PNGs de profundidade de 16 bits ou mapas de profundidade NPY de ponto flutuante em metros; em seguida, cria um YAML de dataset que aponte para o teu diretório
images/. O carregador encontra automaticamente os ficheiros de profundidade substituindoimagespordepthno caminho, dando preferência a.pnge usando.npycomo alternativa.Começa com pesos pré-treinados e usa uma taxa de aprendizagem baixa com AdamW para que o fine-tuning preserve o que o modelo já sabe (consulta Fine-tuning nos teus próprios dados para saberes porquê):
Exemplofrom 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, )Consulta a página de Configuração para veres mais argumentos disponíveis.
A validação da estimativa de profundidade reporta o conjunto de métricas usado por Depth Anything e por trabalhos relacionados de profundidade monocular:
- delta1 / delta2 / delta3 — percentagem de píxeis em que o rácio entre a profundidade prevista e a profundidade ground truth (ou o seu inverso) é inferior a 1.25, 1.25² e 1.25³, respetivamente. Quanto maior, melhor.
- abs_rel — erro relativo absoluto médio. Quanto menor, melhor.
- rmse — raiz do erro quadrático médio em metros. Quanto menor, melhor.
- silog — erro logarítmico invariante à escala. Quanto menor, melhor.
Cada previsão é alinhada pela mediana com o respetivo ground truth por imagem, cada métrica é finalizada nessa imagem e esses resultados por imagem são calculados como média no conjunto de validação; assim, todas as imagens têm o mesmo peso, independentemente do número de píxeis de profundidade válidos que contenham. As imagens com menos de 10 píxeis ground truth válidos são ignoradas e não entram nessa média, pois alinhar a mediana de apenas alguns píxeis não tem significado; as previsões não finitas são, em vez disso, avaliadas nos limites de profundidade. Isto corresponde à média por amostra e ao limite de 10 píxeis usados por Depth Anything V2.
O mapa de profundidade é armazenado como um
torch.Tensorcom forma(H, W), em que cada valor é a profundidade prevista em metros (usaresult.depth.data.cpu().numpy()para obter um arrayfloat32de NumPy). Acede-lhe através deresult.depth.datadepois de executares a previsão. O mapa está alinhado com a resolução da imagem de entrada.Ultralytics YOLO26 fornece configurações YAML de datasets integradas para vários datasets de estimativa de profundidade, incluindo NYU Depth V2, KITTI, Hypersim, SUN RGB-D e ARKitScenes. Consulta o Guia de Datasets de Estimativa de Profundidade para veres a lista completa e os detalhes do formato.
Valida um modelo YOLO26 pré-treinado de profundidade fornecendo o YAML do dataset usado para a avaliação:
Exemplofrom 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)Exporta um modelo YOLO26 de profundidade para ONNX com Python ou CLI:
Exemplofrom ultralytics import YOLO # Load a pretrained model model = YOLO("yolo26n-depth.pt") # Export the model to ONNX format model.export(format="onnx")Para obter mais detalhes sobre a exportação para vários formatos, consulta a página Export.