# Depth-Anything
一个简单而强大的单目深度估计基础模型。
## 论文
`Depth Anything: Unleashing the Power of Large-Scale Unlabeled Data`
- https://arxiv.org/abs/2401.10891
- CVPR 2024
## 模型结构
本文方法通过联合利用带标签和未标记图像,充分利用大规模未标记数据的优势,通过深度模型的自我挑战和语义辅助感知,实现了更强大的单目深度估计性能。
## 算法原理
Depth-Anything 利用标记和未标记的图像来促进更好的单目深度估计(MDE)。形式上,标记集和未标记集分别表示为Dl和Du。工作目标是从Dl学习教师模型T。然后,利用T为Du分配伪深度标签。最后,在标记集和伪标记集的组合上训练了一个学生模型S。如图提供了一个简短的说明,流水线包括如下。实线:标记的图像流,虚线:未标记的图像,特别强调大规模未标记图像的价值,S表示添加强扰动。为了使深度估计模型具有丰富的语义先验,在在线的学生模型和冻结的编码器之间强制执行辅助约束,保持语义能力。
## 环境配置
```
mv depth-anything_pytoch depth-anything # 去框架名后缀
# -v 路径、docker_name和imageID根据实际情况修改
```
### Docker(方法一)
```
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:1.13.1-ubuntu20.04-dtk23.10-py38 # 本镜像imageID为:0a56ef1842a7
docker run -it -v /path/your_code_data/:/path/your_code_data/ -v /opt/hyhal/:/opt/hyhal/:ro --shm-size=16G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name docker_name imageID bash
cd /your_code_path/depth-anything
pip install -r requirements.txt
```
### Dockerfile(方法二)
```
cd /your_code_path/depth-anything/docker
docker build --no-cache -t codestral:latest .
docker run -it -v /path/your_code_data/:/path/your_code_data/ -v /opt/hyhal/:/opt/hyhal/:ro --shm-size=16G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name docker_name imageID bash
cd /your_code_path/depth-anything
pip install -r requirements.txt
```
### Anaconda(方法三)
关于本项目DCU显卡所需的特殊深度学习库可从[光合](https://developer.sourcefind.cn/tool/)开发者社区下载安装。
```
DTK驱动:dtk23.10
python:python3.8
pytorch:1.13.1
```
`Tips:以上DTK驱动、python、pytorch等DCU相关工具版本需要严格一一对应`
其它非深度学习库参照requirements.txt安装:
```
pip install -r requirements.txt
```
## 数据集
数据集有`NYUv2`,`KITTI`等,这里提供了NYUv2
- https://cs.nyu.edu/~fergus/datasets/nyu_depth_v2.html \
- 也可用这里处理过的 https://github.com/cleinc/bts/tree/master/pytorch#nyu-depvh-v2
训练数据目录结构如下,用于正常训练的完整数据集请按此目录结构进行制备:
```
├──sync
├──class_1
├──rgb_00000.jpg
├──sync_depth_00000.png
├──...
├──class_2
├──...
```
## 训练
训练只采用了部分数据集`NYUv2`,在GPU和DCU上完全保持一致。\
注意:修改配置文件 metric_depth/zoedepth/utils/comfig.py 中对应字段数据地址路径。
### 单机单卡
```
cd ./metric_depth
python train_mono.py -m zoedepth --pretrained_resource="local::../checkpoints/depth_anything_vitb14.pth" -d nyu
# 这里是在预训练权重depth_anything_vitb14.pth上进行的微调,可根据情况自行选择。
```
## 推理
```
python run_img.py --encoder vitb --img-path assets/examples --outdir depth_vis
# 注意更改模型文件路径
```
## result
训练结果:loss情况,红色为GPU,蓝色为DCU
推理结果
DCU
GPU
### 精度
GPU:A800,DCU:Z100L
## 应用场景
### 算法类别
`深度估计`
### 热点应用行业
`制造,电商,医疗,教育`
## 源码仓库及问题反馈
- https://developer.sourcefind.cn/codes/modelzoo/depth-anything_pytorch
## 参考资料
- https://github.com/LiheYoung/Depth-Anything