Lihe Yang 1 · Bingyi Kang 2† · Zilong Huang 2
Zhen Zhao · Xiaogang Xu · Jiashi Feng 2 · Hengshuang Zhao 1*
1 HKU 2 TikTok
†chef de projet *auteur correspondant
Cet ouvrage présente Depth Anything V2. Il surpasse considérablement le V1 en termes de détails fins et de robustesse. Par rapport aux modèles basés sur SD, il bénéficie d'une vitesse d'inférence plus rapide, de moins de paramètres et d'une précision de profondeur plus élevée.
Nous proposons quatre modèles à différentes échelles pour une estimation robuste de la profondeur relative :
Modèle | Paramètres | Point de contrôle |
---|---|---|
Profondeur-Tout-V2-Petit | 24,8 millions | Télécharger |
Profondeur-Anything-V2-Base | 97,5 millions | Télécharger |
Profondeur-Anything-V2-Large | 335,3 millions | Télécharger |
Profondeur-Anything-V2-Giant | 1,3B | À venir |
git clone https://github.com/DepthAnything/Depth-Anything-V2
cd Depth-Anything-V2
pip install -r requirements.txt
Téléchargez les points de contrôle répertoriés ici et placez-les dans le répertoire checkpoints
.
import cv2
import torch
from depth_anything_v2 . dpt import DepthAnythingV2
DEVICE = 'cuda' if torch . cuda . is_available () else 'mps' if torch . backends . mps . is_available () else 'cpu'
model_configs = {
'vits' : { 'encoder' : 'vits' , 'features' : 64 , 'out_channels' : [ 48 , 96 , 192 , 384 ]},
'vitb' : { 'encoder' : 'vitb' , 'features' : 128 , 'out_channels' : [ 96 , 192 , 384 , 768 ]},
'vitl' : { 'encoder' : 'vitl' , 'features' : 256 , 'out_channels' : [ 256 , 512 , 1024 , 1024 ]},
'vitg' : { 'encoder' : 'vitg' , 'features' : 384 , 'out_channels' : [ 1536 , 1536 , 1536 , 1536 ]}
}
encoder = 'vitl' # or 'vits', 'vitb', 'vitg'
model = DepthAnythingV2 ( ** model_configs [ encoder ])
model . load_state_dict ( torch . load ( f'checkpoints/depth_anything_v2_ { encoder } .pth' , map_location = 'cpu' ))
model = model . to ( DEVICE ). eval ()
raw_img = cv2 . imread ( 'your/image/path' )
depth = model . infer_image ( raw_img ) # HxW raw depth map in numpy
Si vous ne souhaitez pas cloner ce référentiel, vous pouvez également charger nos modèles via Transformers. Vous trouverez ci-dessous un simple extrait de code. Veuillez vous référer à la page officielle pour plus de détails.
from transformers import pipeline
from PIL import Image
pipe = pipeline ( task = "depth-estimation" , model = "depth-anything/Depth-Anything-V2-Small-hf" )
image = Image . open ( 'your/image/path' )
depth = pipe ( image )[ "depth" ]
python run.py
--encoder < vits | vitb | vitl | vitg >
--img-path < path > --outdir < outdir >
[--input-size < size > ] [--pred-only] [--grayscale]
Possibilités :
--img-path
: Vous pouvez soit 1) le pointer vers un répertoire d'images stockant toutes les images intéressées, 2) le pointer vers une seule image, ou 3) le pointer vers un fichier texte stockant tous les chemins d'image.--input-size
(facultatif) : par défaut, nous utilisons la taille d'entrée 518
pour l'inférence de modèle. Vous pouvez augmenter la taille pour des résultats encore plus fins.--pred-only
(facultatif) : enregistrez uniquement la carte de profondeur prédite, sans image brute.--grayscale
(facultatif) : enregistrez la carte de profondeur en niveaux de gris, sans appliquer la palette de couleurs.Par exemple:
python run.py --encoder vitl --img-path assets/examples --outdir depth_vis
python run_video.py
--encoder < vits | vitb | vitl | vitg >
--video-path assets/examples_video --outdir video_depth_vis
[--input-size < size > ] [--pred-only] [--grayscale]
Notre modèle plus grand a une meilleure cohérence temporelle sur les vidéos.
Pour utiliser notre démo gradio localement :
python app.py
Vous pouvez également essayer notre démo en ligne.
Remarque : Par rapport à la V1, nous avons apporté une modification mineure à l'architecture DINOv2-DPT (provenant de ce problème). Dans la V1, nous avons involontairement utilisé les fonctionnalités des quatre dernières couches de DINOv2 pour le décodage. Dans la V2, nous utilisons plutôt des fonctionnalités intermédiaires. Bien que cette modification n’ait pas amélioré les détails ou la précision, nous avons décidé de suivre cette pratique courante.
Veuillez vous référer à l'estimation de la profondeur métrique.
Veuillez vous référer au benchmark DA-2K.
Nous apprécions sincèrement tout le soutien de la communauté pour notre série Depth Anything. Merci beaucoup !
Nous sommes sincèrement reconnaissants à la formidable équipe de Hugging Face (@Pedro Cuenca, @Niels Rogge, @Merve Noyan, @Amy Roberts, et al.) pour leurs énormes efforts dans la prise en charge de nos modèles dans Transformers et Apple Core ML.
Nous remercions également l'équipe DINOv2 d'avoir fourni des modèles aussi impressionnants à notre communauté.
Le modèle Depth-Anything-V2-Small est sous la licence Apache-2.0. Les modèles Depth-Anything-V2-Base/Large/Giant sont sous la licence CC-BY-NC-4.0.
Si vous trouvez ce projet utile, pensez à citer :
@article { depth_anything_v2 ,
title = { Depth Anything V2 } ,
author = { Yang, Lihe and Kang, Bingyi and Huang, Zilong and Zhao, Zhen and Xu, Xiaogang and Feng, Jiashi and Zhao, Hengshuang } ,
journal = { arXiv:2406.09414 } ,
year = { 2024 }
}
@inproceedings { depth_anything_v1 ,
title = { Depth Anything: Unleashing the Power of Large-Scale Unlabeled Data } ,
author = { Yang, Lihe and Kang, Bingyi and Huang, Zilong and Xu, Xiaogang and Feng, Jiashi and Zhao, Hengshuang } ,
booktitle = { CVPR } ,
year = { 2024 }
}