README.md 5.81 KB
Newer Older
bailuo's avatar
init  
bailuo committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# Depth-Anything
一个简单而强大的单目深度估计基础模型。

## 论文
`Depth Anything: Unleashing the Power of Large-Scale Unlabeled Data`
- https://arxiv.org/abs/2401.10891
- CVPR 2024

## 模型结构
<!-- 此处一句话简要介绍模型结构 -->
本文方法通过联合利用带标签和未标记图像,充分利用大规模未标记数据的优势,通过深度模型的自我挑战和语义辅助感知,实现了更强大的单目深度估计性能。
<!-- <div align=center>
    <img src="./doc/pipeline.png"/>
</div> -->

## 算法原理
Depth-Anything 利用标记和未标记的图像来促进更好的单目深度估计(MDE)。形式上,标记集和未标记集分别表示为Dl和Du。工作目标是从Dl学习教师模型T。然后,利用T为Du分配伪深度标签。最后,在标记集和伪标记集的组合上训练了一个学生模型S。如图提供了一个简短的说明,流水线包括如下。实线:标记的图像流,虚线:未标记的图像,特别强调大规模未标记图像的价值,S表示添加强扰动。为了使深度估计模型具有丰富的语义先验,在在线的学生模型和冻结的编码器之间强制执行辅助约束,保持语义能力。

<div align=center>
    <img src="./doc/pipeline.png"/>
</div>

## 环境配置
```
mv depth-anything_pytoch depth-anything # 去框架名后缀
# -v 路径、docker_name和imageID根据实际情况修改
```
### Docker(方法一)
<!-- 此处提供[光源](https://www.sourcefind.cn/#/service-details)拉取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(方法二)
<!-- 此处提供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(方法三)
<!-- 此处提供本地配置、编译的详细步骤,例如: -->

chenzk's avatar
chenzk committed
49
关于本项目DCU显卡所需的特殊深度学习库可从[光合](https://developer.sourcefind.cn/tool/)开发者社区下载安装。
bailuo's avatar
init  
bailuo committed
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
```
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

<!-- 数据下载、预处理脚本的使用方法
```
cd /your_code_path/depth-anything/
python get_davis.py # 下载数据集DAVIS-2017-trainval-480p
python main_processing.py # 预处理数据集
``` -->

训练数据目录结构如下,用于正常训练的完整数据集请按此目录结构进行制备:
```
├──sync
    ├──class_1
        ├──rgb_00000.jpg
        ├──sync_depth_00000.png
        ├──...
    ├──class_2
    ├──...
```

## 训练
<!-- 一般情况下,ModelZoo上的项目提供单机训练的启动方法即可,单机多卡、单机单卡至少提供其一训练方法。 -->
<!-- ### 单机多卡
```
python train.py --config configs/default.txt # 注意修改configs文件以及config.py文件
``` -->
90
91
训练只采用了部分数据集`NYUv2`,在GPU和DCU上完全保持一致。\
注意:修改配置文件 metric_depth/zoedepth/utils/comfig.py 中对应字段数据地址路径。
bailuo's avatar
init  
bailuo committed
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
### 单机单卡
```
cd ./metric_depth
python train_mono.py -m zoedepth --pretrained_resource="local::../checkpoints/depth_anything_vitb14.pth" -d nyu
# 这里是在预训练权重depth_anything_vitb14.pth上进行的微调,可根据情况自行选择。
```

<!-- ## 测试
```
python evaluate.py -m zoedepth --pretrained_resource="local::./depth_anything_finetune/model_best.pt" -d nyu
# model_best.pt替换成训练后要测试的模型
``` -->

## 推理
```
bailuo's avatar
bailuo committed
107
108
python run_img.py --encoder vitb --img-path assets/examples --outdir depth_vis
# 注意更改模型文件路径
bailuo's avatar
init  
bailuo committed
109
110
111
```
## result
<!-- 此处填算法效果测试图(包括输入、输出) -->
bailuo's avatar
bailuo committed
112
训练结果:loss情况,红色为GPU,蓝色为DCU
bailuo's avatar
init  
bailuo committed
113
114
115
<div align=center>
    <img src="./doc/loss.png"/>
</div>
bailuo's avatar
bailuo committed
116
117
118
119
120


推理结果

DCU
bailuo's avatar
init  
bailuo committed
121
<div align=center>
bailuo's avatar
bailuo committed
122
    <img src="./doc/demo1_img_depth_dcu.png"/>
bailuo's avatar
init  
bailuo committed
123
</div>
bailuo's avatar
bailuo committed
124
GPU
bailuo's avatar
init  
bailuo committed
125
<div align=center>
bailuo's avatar
bailuo committed
126
    <img src="./doc/demo1_img_depth_gpu.png"/>
bailuo's avatar
init  
bailuo committed
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
</div>

### 精度
GPU:A800,DCU:Z100L
<div align=center>
    <img src="./doc/metric.png"/>
</div>

<!-- dcu
'a1': 0.09, 'a2': 0.194, 'a3': 0.322, 'abs_rel': 0.575, 'rmse': 2.178, 'log_10': 0.419, 'rmse_log': 1.063, 'silog': 48.049, 'sq_rel': 1.33
gpu
'a1': 0.09, 'a2': 0.194, 'a3': 0.322, 'abs_rel': 0.575, 'rmse': 2.178, 'log_10': 0.419, 'rmse_log': 1.063, 'silog': 48.049, 'sq_rel': 1.33 -->

<!-- 根据测试结果情况填写表格:
| xxx | xxx | xxx | xxx | xxx |
| :------: | :------: | :------: | :------: |:------: |
| xxx | xxx | xxx | xxx | xxx  |
| xxx | xx | xxx | xxx | xxx |  -->

## 应用场景
### 算法类别
bailuo's avatar
bailuo committed
148
`深度估计`
bailuo's avatar
init  
bailuo committed
149
150
151
152
153

### 热点应用行业
`制造,电商,医疗,教育`

## 源码仓库及问题反馈
chenzk's avatar
chenzk committed
154
- https://developer.sourcefind.cn/codes/modelzoo/depth-anything_pytorch
bailuo's avatar
init  
bailuo committed
155
156
157
158

## 参考资料
- https://github.com/LiheYoung/Depth-Anything