├── .gitattributes
├── .github
└── images
│ └── sample.png
├── LICENSE
├── README.md
├── dataset
├── filenames
│ ├── eigen
│ │ └── test_files.txt
│ └── eigen_full
│ │ ├── all_files.txt
│ │ ├── test_files.txt
│ │ ├── train_files.txt
│ │ └── val_files.txt
├── kitti_archives_to_download.txt
└── kitti_dataset.py
├── main.py
├── model.py
├── network
├── depth_decoder.py
├── encoder.py
├── rsu_decoder.py
└── rsu_layer.py
├── nyuv2Testing
├── nyu_dataset.py
├── nyu_test.txt
└── nyuv2_testing.py
├── precompute_depth_hints.py
├── read_depth.py
└── tools.py
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/.github/images/sample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/prstrive/EPCDepth/84119c806741334b652749ee953e3eab60a3718c/.github/images/sample.png
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 prstrive
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # EPCDepth
2 | EPCDepth is a self-supervised monocular depth estimation model, whose supervision is coming from the other image in a stereo pair. Details are described in our paper:
3 | > Excavating the Potential Capacity of Self-Supervised Monocular Depth Estimation
4 | >
5 | > Rui Peng, Ronggang Wang, Yawen Lai, Luyang Tang, Yangang Cai
6 | >
7 | > ICCV 2021 ([arxiv](https://arxiv.org/abs/2109.12484))
8 |
9 |
10 |
11 |
12 |
13 | EPCDepth can produce the most accurate and sharpest result. In the last example, the depth of the person in the second red box should be greater than that of the road sign because the road sign obscures the person. Only our model accurately captures the cue of occlusion.
14 |
15 | ## ⚙ Setup
16 | #### 1. Recommended environment
17 | - PyTorch 1.1
18 | - Python 3.6
19 |
20 | #### 2. KITTI data
21 |
22 | You can download the raw KITTI dataset (about 175GB) by running:
23 | ```
24 | wget -i dataset/kitti_archives_to_download.txt -P /
25 | cd
26 | unzip "*.zip"
27 | ```
28 | Then, we recommend that you converted the png images to jpeg with this command:
29 | ```
30 | find / -name '*.png' | parallel 'convert -quality 92 -sampling-factor 2x2,1x1,1x1 {.}.png {.}.jpg && rm {}'
31 | ```
32 | or you can skip this conversion step and by manually adjusting the suffix of the image from `.jpg` to `.png` in `dataset/kitti_dataset.py`. Our pre-trained model is trained in jpg, and the test performance on png will slightly decrease.
33 |
34 | #### 3. Prepare depth hint
35 |
36 | Once you have downloaded the KITTI dataset as in the previous step, you need to prepare the depth hint by running:
37 | ```
38 | python precompute_depth_hints.py --data_path
39 | ```
40 | the generated depth hint will be saved to `/depth_hints`. You should also pay attention to the suffix of the image.
41 |
42 | ## 📊 Evaluation
43 | #### 1. Download models
44 | Download our pretrained model and put it to ``.
45 |
46 |
47 | Pre-trained |
48 | PP |
49 | HxW |
50 | Backbone |
51 | Output Scale |
52 | Abs Rel |
53 | Sq Rel |
54 | RMSE |
55 | δ < 1.25 |
56 |
57 |
58 | model18_lr |
59 | √ |
60 | 192x640 |
61 | resnet18 (pt) |
62 | d0 |
63 | 0.0998 |
64 | 0.722 |
65 | 4.475 |
66 | 0.888 |
67 |
68 |
69 | d2 |
70 | 0.1 |
71 | 0.712 |
72 | 4.462 |
73 | 0.886 |
74 |
75 |
76 | model18 |
77 | √ |
78 | 320x1024 |
79 | resnet18 (pt) |
80 | d0 |
81 | 0.0925 |
82 | 0.671 |
83 | 4.297 |
84 | 0.899 |
85 |
86 |
87 | d2 |
88 | 0.0920 |
89 | 0.655 |
90 | 4.268 |
91 | 0.898 |
92 |
93 |
94 | model50 |
95 | √ |
96 | 320x1024 |
97 | resnet50 (pt) |
98 | d0 |
99 | 0.0905 |
100 | 0.646 |
101 | 4.207 |
102 | 0.901 |
103 |
104 |
105 | d2 |
106 | 0.0905 |
107 | 0.629 |
108 | 4.187 |
109 | 0.900 |
110 |
111 |
112 |
113 | **Note:** `pt` refers to pre-trained on ImageNet, and the results of low resolution are a bit different from the paper.
114 |
115 | #### 2. KITTI evaluation
116 |
117 | This operation will save the estimated disparity map to ``. To recreate the results from our paper, run:
118 | ```
119 | python main.py
120 | --val --data_path --resume /model18.pth.tar
121 | --use_full_scale --post_process --output_scale 0 --disps_path
122 | ```
123 | The shape of saved disparities in numpy data format is `(N, H, W)`.
124 |
125 | #### 3. NYUv2 evaluation
126 |
127 | We validate the generalization ability on the NYU-Depth-V2 dataset using the mode trained on the KITTI dataset. Download the testing data [nyu_test.tar.gz](https://onedrive.live.com/?authkey=%21ANXK7icE%2D33VPg0&id=C43E510B25EDDE99%21106&cid=C43E510B25EDDE99), and unzip it to ``. All evaluation codes are in the `nyuv2Testing` folder. Run:
128 | ```
129 | python nyuv2_testing.py
130 | --data_path
131 | --resume /model50.pth.tar --post_process
132 | --save_dir
133 | ```
134 |
135 | By default, only the visualization results (png format) of the predicted disparity and ground-truth will be saved to `` on NYUv2 dataset.
136 |
137 | ## 📦 KITTI Results
138 | You can download our precomputed disparity predictions from the following links:
139 |
140 |
141 |
142 | Disparity |
143 | PP |
144 | HxW |
145 | Backbone |
146 | Output Scale |
147 | Abs Rel |
148 | Sq Rel |
149 | RMSE |
150 | δ < 1.25 |
151 |
152 |
153 | disps18_lr |
154 | √ |
155 | 192x640 |
156 | resnet18 (pt) |
157 | d0 |
158 | 0.0998 |
159 | 0.722 |
160 | 4.475 |
161 | 0.888 |
162 |
163 |
164 | disps18 |
165 | √ |
166 | 320x1024 |
167 | resnet18 (pt) |
168 | d0 |
169 | 0.0925 |
170 | 0.671 |
171 | 4.297 |
172 | 0.899 |
173 |
174 |
175 | disps50 |
176 | √ |
177 | 320x1024 |
178 | resnet50 (pt) |
179 | d0 |
180 | 0.0905 |
181 | 0.646 |
182 | 4.207 |
183 | 0.901 |
184 |
185 |
186 |
187 | ## 🖼 Visualization
188 |
189 | To visualize the disparity map saved in the KITTI evaluation (or other disparities in numpy data format), run:
190 | ```
191 | python main.py --vis --disps_path /disps50.npy
192 | ```
193 | The visualized depth map will be saved to `/disps_vis` in png format.
194 |
195 | ## ⏳ Training
196 | To train the model from scratch, run:
197 | ```
198 | python main.py
199 | --data_path --model_dir
200 | --logs_dir --pretrained --post_process
201 | --use_depth_hint --use_spp_distillation --use_data_graft
202 | --use_full_scale
203 | ```
204 |
205 | ## 🔧 Suggestion
206 | 1. The magnitude of performance improvement: Data Grafting > Full-Scale > Self-Distillation. We noticed that the performance improvement of self-distillation becomes insignificant when the model capacity is large. Therefore, it is potential to explore more accurate self-distillation label extraction methods and better self-distillation strategies in the future.
207 | 2. According to our experimental experience, the convergence of the self-supervised monocular depth estimation model using a larger backbone network is relatively unstable. You can verify your innovations on the small backbone first, and then adjust the learning rate appropriately to train on the big backbone.
208 | 3. We found that using a pure RSU encoder has better performance than the traditional Resnet encoder, but unfortunately there is no RSU encoder pre-trained on Imagenet. Therefore, we firmly believe that someone can pre-train the RSU encoder on Imagenet and replace the resnet encoder of this model to get huge performance improvement.
209 |
210 | ## ⚖ Citation
211 | If you find our work useful in your research please consider citing our paper:
212 | ```
213 | @inproceedings{epcdepth,
214 | title = {Excavating the Potential Capacity of Self-Supervised Monocular Depth Estimation},
215 | author = {Peng, Rui and Wang, Ronggang and Lai, Yawen and Tang, Luyang and Cai, Yangang},
216 | booktitle = {Proceedings of the IEEE International Conference on Computer Vision (ICCV)},
217 | year = {2021}
218 | }
219 | ```
220 |
221 | ## 👩 Acknowledgements
222 |
223 | Our depth hint module refers to [DepthHints](https://github.com/nianticlabs/depth-hints), the NYUv2 pre-processing refers to [P2Net](https://github.com/svip-lab/Indoor-SfMLearner), and the RSU block refers to [U2Net](https://github.com/xuebinqin/U-2-Net).
224 |
--------------------------------------------------------------------------------
/dataset/filenames/eigen/test_files.txt:
--------------------------------------------------------------------------------
1 | 2011_09_26/2011_09_26_drive_0002_sync 0000000069 l
2 | 2011_09_26/2011_09_26_drive_0002_sync 0000000054 l
3 | 2011_09_26/2011_09_26_drive_0002_sync 0000000042 l
4 | 2011_09_26/2011_09_26_drive_0002_sync 0000000057 l
5 | 2011_09_26/2011_09_26_drive_0002_sync 0000000030 l
6 | 2011_09_26/2011_09_26_drive_0002_sync 0000000027 l
7 | 2011_09_26/2011_09_26_drive_0002_sync 0000000012 l
8 | 2011_09_26/2011_09_26_drive_0002_sync 0000000075 l
9 | 2011_09_26/2011_09_26_drive_0002_sync 0000000036 l
10 | 2011_09_26/2011_09_26_drive_0002_sync 0000000033 l
11 | 2011_09_26/2011_09_26_drive_0002_sync 0000000015 l
12 | 2011_09_26/2011_09_26_drive_0002_sync 0000000072 l
13 | 2011_09_26/2011_09_26_drive_0002_sync 0000000003 l
14 | 2011_09_26/2011_09_26_drive_0002_sync 0000000039 l
15 | 2011_09_26/2011_09_26_drive_0002_sync 0000000009 l
16 | 2011_09_26/2011_09_26_drive_0002_sync 0000000051 l
17 | 2011_09_26/2011_09_26_drive_0002_sync 0000000060 l
18 | 2011_09_26/2011_09_26_drive_0002_sync 0000000021 l
19 | 2011_09_26/2011_09_26_drive_0002_sync 0000000000 l
20 | 2011_09_26/2011_09_26_drive_0002_sync 0000000024 l
21 | 2011_09_26/2011_09_26_drive_0002_sync 0000000045 l
22 | 2011_09_26/2011_09_26_drive_0002_sync 0000000018 l
23 | 2011_09_26/2011_09_26_drive_0002_sync 0000000048 l
24 | 2011_09_26/2011_09_26_drive_0002_sync 0000000006 l
25 | 2011_09_26/2011_09_26_drive_0002_sync 0000000063 l
26 | 2011_09_26/2011_09_26_drive_0009_sync 0000000000 l
27 | 2011_09_26/2011_09_26_drive_0009_sync 0000000016 l
28 | 2011_09_26/2011_09_26_drive_0009_sync 0000000032 l
29 | 2011_09_26/2011_09_26_drive_0009_sync 0000000048 l
30 | 2011_09_26/2011_09_26_drive_0009_sync 0000000064 l
31 | 2011_09_26/2011_09_26_drive_0009_sync 0000000080 l
32 | 2011_09_26/2011_09_26_drive_0009_sync 0000000096 l
33 | 2011_09_26/2011_09_26_drive_0009_sync 0000000112 l
34 | 2011_09_26/2011_09_26_drive_0009_sync 0000000128 l
35 | 2011_09_26/2011_09_26_drive_0009_sync 0000000144 l
36 | 2011_09_26/2011_09_26_drive_0009_sync 0000000160 l
37 | 2011_09_26/2011_09_26_drive_0009_sync 0000000176 l
38 | 2011_09_26/2011_09_26_drive_0009_sync 0000000196 l
39 | 2011_09_26/2011_09_26_drive_0009_sync 0000000212 l
40 | 2011_09_26/2011_09_26_drive_0009_sync 0000000228 l
41 | 2011_09_26/2011_09_26_drive_0009_sync 0000000244 l
42 | 2011_09_26/2011_09_26_drive_0009_sync 0000000260 l
43 | 2011_09_26/2011_09_26_drive_0009_sync 0000000276 l
44 | 2011_09_26/2011_09_26_drive_0009_sync 0000000292 l
45 | 2011_09_26/2011_09_26_drive_0009_sync 0000000308 l
46 | 2011_09_26/2011_09_26_drive_0009_sync 0000000324 l
47 | 2011_09_26/2011_09_26_drive_0009_sync 0000000340 l
48 | 2011_09_26/2011_09_26_drive_0009_sync 0000000356 l
49 | 2011_09_26/2011_09_26_drive_0009_sync 0000000372 l
50 | 2011_09_26/2011_09_26_drive_0009_sync 0000000388 l
51 | 2011_09_26/2011_09_26_drive_0013_sync 0000000090 l
52 | 2011_09_26/2011_09_26_drive_0013_sync 0000000050 l
53 | 2011_09_26/2011_09_26_drive_0013_sync 0000000110 l
54 | 2011_09_26/2011_09_26_drive_0013_sync 0000000115 l
55 | 2011_09_26/2011_09_26_drive_0013_sync 0000000060 l
56 | 2011_09_26/2011_09_26_drive_0013_sync 0000000105 l
57 | 2011_09_26/2011_09_26_drive_0013_sync 0000000125 l
58 | 2011_09_26/2011_09_26_drive_0013_sync 0000000020 l
59 | 2011_09_26/2011_09_26_drive_0013_sync 0000000140 l
60 | 2011_09_26/2011_09_26_drive_0013_sync 0000000085 l
61 | 2011_09_26/2011_09_26_drive_0013_sync 0000000070 l
62 | 2011_09_26/2011_09_26_drive_0013_sync 0000000080 l
63 | 2011_09_26/2011_09_26_drive_0013_sync 0000000065 l
64 | 2011_09_26/2011_09_26_drive_0013_sync 0000000095 l
65 | 2011_09_26/2011_09_26_drive_0013_sync 0000000130 l
66 | 2011_09_26/2011_09_26_drive_0013_sync 0000000100 l
67 | 2011_09_26/2011_09_26_drive_0013_sync 0000000010 l
68 | 2011_09_26/2011_09_26_drive_0013_sync 0000000030 l
69 | 2011_09_26/2011_09_26_drive_0013_sync 0000000000 l
70 | 2011_09_26/2011_09_26_drive_0013_sync 0000000135 l
71 | 2011_09_26/2011_09_26_drive_0013_sync 0000000040 l
72 | 2011_09_26/2011_09_26_drive_0013_sync 0000000005 l
73 | 2011_09_26/2011_09_26_drive_0013_sync 0000000120 l
74 | 2011_09_26/2011_09_26_drive_0013_sync 0000000045 l
75 | 2011_09_26/2011_09_26_drive_0013_sync 0000000035 l
76 | 2011_09_26/2011_09_26_drive_0020_sync 0000000003 l
77 | 2011_09_26/2011_09_26_drive_0020_sync 0000000069 l
78 | 2011_09_26/2011_09_26_drive_0020_sync 0000000057 l
79 | 2011_09_26/2011_09_26_drive_0020_sync 0000000012 l
80 | 2011_09_26/2011_09_26_drive_0020_sync 0000000072 l
81 | 2011_09_26/2011_09_26_drive_0020_sync 0000000018 l
82 | 2011_09_26/2011_09_26_drive_0020_sync 0000000063 l
83 | 2011_09_26/2011_09_26_drive_0020_sync 0000000000 l
84 | 2011_09_26/2011_09_26_drive_0020_sync 0000000084 l
85 | 2011_09_26/2011_09_26_drive_0020_sync 0000000015 l
86 | 2011_09_26/2011_09_26_drive_0020_sync 0000000066 l
87 | 2011_09_26/2011_09_26_drive_0020_sync 0000000006 l
88 | 2011_09_26/2011_09_26_drive_0020_sync 0000000048 l
89 | 2011_09_26/2011_09_26_drive_0020_sync 0000000060 l
90 | 2011_09_26/2011_09_26_drive_0020_sync 0000000009 l
91 | 2011_09_26/2011_09_26_drive_0020_sync 0000000033 l
92 | 2011_09_26/2011_09_26_drive_0020_sync 0000000021 l
93 | 2011_09_26/2011_09_26_drive_0020_sync 0000000075 l
94 | 2011_09_26/2011_09_26_drive_0020_sync 0000000027 l
95 | 2011_09_26/2011_09_26_drive_0020_sync 0000000045 l
96 | 2011_09_26/2011_09_26_drive_0020_sync 0000000078 l
97 | 2011_09_26/2011_09_26_drive_0020_sync 0000000036 l
98 | 2011_09_26/2011_09_26_drive_0020_sync 0000000051 l
99 | 2011_09_26/2011_09_26_drive_0020_sync 0000000054 l
100 | 2011_09_26/2011_09_26_drive_0020_sync 0000000042 l
101 | 2011_09_26/2011_09_26_drive_0023_sync 0000000018 l
102 | 2011_09_26/2011_09_26_drive_0023_sync 0000000090 l
103 | 2011_09_26/2011_09_26_drive_0023_sync 0000000126 l
104 | 2011_09_26/2011_09_26_drive_0023_sync 0000000378 l
105 | 2011_09_26/2011_09_26_drive_0023_sync 0000000036 l
106 | 2011_09_26/2011_09_26_drive_0023_sync 0000000288 l
107 | 2011_09_26/2011_09_26_drive_0023_sync 0000000198 l
108 | 2011_09_26/2011_09_26_drive_0023_sync 0000000450 l
109 | 2011_09_26/2011_09_26_drive_0023_sync 0000000144 l
110 | 2011_09_26/2011_09_26_drive_0023_sync 0000000072 l
111 | 2011_09_26/2011_09_26_drive_0023_sync 0000000252 l
112 | 2011_09_26/2011_09_26_drive_0023_sync 0000000180 l
113 | 2011_09_26/2011_09_26_drive_0023_sync 0000000432 l
114 | 2011_09_26/2011_09_26_drive_0023_sync 0000000396 l
115 | 2011_09_26/2011_09_26_drive_0023_sync 0000000054 l
116 | 2011_09_26/2011_09_26_drive_0023_sync 0000000468 l
117 | 2011_09_26/2011_09_26_drive_0023_sync 0000000306 l
118 | 2011_09_26/2011_09_26_drive_0023_sync 0000000108 l
119 | 2011_09_26/2011_09_26_drive_0023_sync 0000000162 l
120 | 2011_09_26/2011_09_26_drive_0023_sync 0000000342 l
121 | 2011_09_26/2011_09_26_drive_0023_sync 0000000270 l
122 | 2011_09_26/2011_09_26_drive_0023_sync 0000000414 l
123 | 2011_09_26/2011_09_26_drive_0023_sync 0000000216 l
124 | 2011_09_26/2011_09_26_drive_0023_sync 0000000360 l
125 | 2011_09_26/2011_09_26_drive_0023_sync 0000000324 l
126 | 2011_09_26/2011_09_26_drive_0027_sync 0000000077 l
127 | 2011_09_26/2011_09_26_drive_0027_sync 0000000035 l
128 | 2011_09_26/2011_09_26_drive_0027_sync 0000000091 l
129 | 2011_09_26/2011_09_26_drive_0027_sync 0000000112 l
130 | 2011_09_26/2011_09_26_drive_0027_sync 0000000007 l
131 | 2011_09_26/2011_09_26_drive_0027_sync 0000000175 l
132 | 2011_09_26/2011_09_26_drive_0027_sync 0000000042 l
133 | 2011_09_26/2011_09_26_drive_0027_sync 0000000098 l
134 | 2011_09_26/2011_09_26_drive_0027_sync 0000000133 l
135 | 2011_09_26/2011_09_26_drive_0027_sync 0000000161 l
136 | 2011_09_26/2011_09_26_drive_0027_sync 0000000014 l
137 | 2011_09_26/2011_09_26_drive_0027_sync 0000000126 l
138 | 2011_09_26/2011_09_26_drive_0027_sync 0000000168 l
139 | 2011_09_26/2011_09_26_drive_0027_sync 0000000070 l
140 | 2011_09_26/2011_09_26_drive_0027_sync 0000000084 l
141 | 2011_09_26/2011_09_26_drive_0027_sync 0000000140 l
142 | 2011_09_26/2011_09_26_drive_0027_sync 0000000049 l
143 | 2011_09_26/2011_09_26_drive_0027_sync 0000000000 l
144 | 2011_09_26/2011_09_26_drive_0027_sync 0000000182 l
145 | 2011_09_26/2011_09_26_drive_0027_sync 0000000147 l
146 | 2011_09_26/2011_09_26_drive_0027_sync 0000000056 l
147 | 2011_09_26/2011_09_26_drive_0027_sync 0000000063 l
148 | 2011_09_26/2011_09_26_drive_0027_sync 0000000021 l
149 | 2011_09_26/2011_09_26_drive_0027_sync 0000000119 l
150 | 2011_09_26/2011_09_26_drive_0027_sync 0000000028 l
151 | 2011_09_26/2011_09_26_drive_0029_sync 0000000380 l
152 | 2011_09_26/2011_09_26_drive_0029_sync 0000000394 l
153 | 2011_09_26/2011_09_26_drive_0029_sync 0000000324 l
154 | 2011_09_26/2011_09_26_drive_0029_sync 0000000000 l
155 | 2011_09_26/2011_09_26_drive_0029_sync 0000000268 l
156 | 2011_09_26/2011_09_26_drive_0029_sync 0000000366 l
157 | 2011_09_26/2011_09_26_drive_0029_sync 0000000296 l
158 | 2011_09_26/2011_09_26_drive_0029_sync 0000000014 l
159 | 2011_09_26/2011_09_26_drive_0029_sync 0000000028 l
160 | 2011_09_26/2011_09_26_drive_0029_sync 0000000182 l
161 | 2011_09_26/2011_09_26_drive_0029_sync 0000000168 l
162 | 2011_09_26/2011_09_26_drive_0029_sync 0000000196 l
163 | 2011_09_26/2011_09_26_drive_0029_sync 0000000140 l
164 | 2011_09_26/2011_09_26_drive_0029_sync 0000000084 l
165 | 2011_09_26/2011_09_26_drive_0029_sync 0000000056 l
166 | 2011_09_26/2011_09_26_drive_0029_sync 0000000112 l
167 | 2011_09_26/2011_09_26_drive_0029_sync 0000000352 l
168 | 2011_09_26/2011_09_26_drive_0029_sync 0000000126 l
169 | 2011_09_26/2011_09_26_drive_0029_sync 0000000070 l
170 | 2011_09_26/2011_09_26_drive_0029_sync 0000000310 l
171 | 2011_09_26/2011_09_26_drive_0029_sync 0000000154 l
172 | 2011_09_26/2011_09_26_drive_0029_sync 0000000098 l
173 | 2011_09_26/2011_09_26_drive_0029_sync 0000000408 l
174 | 2011_09_26/2011_09_26_drive_0029_sync 0000000042 l
175 | 2011_09_26/2011_09_26_drive_0029_sync 0000000338 l
176 | 2011_09_26/2011_09_26_drive_0036_sync 0000000000 l
177 | 2011_09_26/2011_09_26_drive_0036_sync 0000000128 l
178 | 2011_09_26/2011_09_26_drive_0036_sync 0000000192 l
179 | 2011_09_26/2011_09_26_drive_0036_sync 0000000032 l
180 | 2011_09_26/2011_09_26_drive_0036_sync 0000000352 l
181 | 2011_09_26/2011_09_26_drive_0036_sync 0000000608 l
182 | 2011_09_26/2011_09_26_drive_0036_sync 0000000224 l
183 | 2011_09_26/2011_09_26_drive_0036_sync 0000000576 l
184 | 2011_09_26/2011_09_26_drive_0036_sync 0000000672 l
185 | 2011_09_26/2011_09_26_drive_0036_sync 0000000064 l
186 | 2011_09_26/2011_09_26_drive_0036_sync 0000000448 l
187 | 2011_09_26/2011_09_26_drive_0036_sync 0000000704 l
188 | 2011_09_26/2011_09_26_drive_0036_sync 0000000640 l
189 | 2011_09_26/2011_09_26_drive_0036_sync 0000000512 l
190 | 2011_09_26/2011_09_26_drive_0036_sync 0000000768 l
191 | 2011_09_26/2011_09_26_drive_0036_sync 0000000160 l
192 | 2011_09_26/2011_09_26_drive_0036_sync 0000000416 l
193 | 2011_09_26/2011_09_26_drive_0036_sync 0000000480 l
194 | 2011_09_26/2011_09_26_drive_0036_sync 0000000800 l
195 | 2011_09_26/2011_09_26_drive_0036_sync 0000000288 l
196 | 2011_09_26/2011_09_26_drive_0036_sync 0000000544 l
197 | 2011_09_26/2011_09_26_drive_0036_sync 0000000096 l
198 | 2011_09_26/2011_09_26_drive_0036_sync 0000000384 l
199 | 2011_09_26/2011_09_26_drive_0036_sync 0000000256 l
200 | 2011_09_26/2011_09_26_drive_0036_sync 0000000320 l
201 | 2011_09_26/2011_09_26_drive_0046_sync 0000000000 l
202 | 2011_09_26/2011_09_26_drive_0046_sync 0000000005 l
203 | 2011_09_26/2011_09_26_drive_0046_sync 0000000010 l
204 | 2011_09_26/2011_09_26_drive_0046_sync 0000000015 l
205 | 2011_09_26/2011_09_26_drive_0046_sync 0000000020 l
206 | 2011_09_26/2011_09_26_drive_0046_sync 0000000025 l
207 | 2011_09_26/2011_09_26_drive_0046_sync 0000000030 l
208 | 2011_09_26/2011_09_26_drive_0046_sync 0000000035 l
209 | 2011_09_26/2011_09_26_drive_0046_sync 0000000040 l
210 | 2011_09_26/2011_09_26_drive_0046_sync 0000000045 l
211 | 2011_09_26/2011_09_26_drive_0046_sync 0000000050 l
212 | 2011_09_26/2011_09_26_drive_0046_sync 0000000055 l
213 | 2011_09_26/2011_09_26_drive_0046_sync 0000000060 l
214 | 2011_09_26/2011_09_26_drive_0046_sync 0000000065 l
215 | 2011_09_26/2011_09_26_drive_0046_sync 0000000070 l
216 | 2011_09_26/2011_09_26_drive_0046_sync 0000000075 l
217 | 2011_09_26/2011_09_26_drive_0046_sync 0000000080 l
218 | 2011_09_26/2011_09_26_drive_0046_sync 0000000085 l
219 | 2011_09_26/2011_09_26_drive_0046_sync 0000000090 l
220 | 2011_09_26/2011_09_26_drive_0046_sync 0000000095 l
221 | 2011_09_26/2011_09_26_drive_0046_sync 0000000100 l
222 | 2011_09_26/2011_09_26_drive_0046_sync 0000000105 l
223 | 2011_09_26/2011_09_26_drive_0046_sync 0000000110 l
224 | 2011_09_26/2011_09_26_drive_0046_sync 0000000115 l
225 | 2011_09_26/2011_09_26_drive_0046_sync 0000000120 l
226 | 2011_09_26/2011_09_26_drive_0048_sync 0000000000 l
227 | 2011_09_26/2011_09_26_drive_0048_sync 0000000001 l
228 | 2011_09_26/2011_09_26_drive_0048_sync 0000000002 l
229 | 2011_09_26/2011_09_26_drive_0048_sync 0000000003 l
230 | 2011_09_26/2011_09_26_drive_0048_sync 0000000004 l
231 | 2011_09_26/2011_09_26_drive_0048_sync 0000000005 l
232 | 2011_09_26/2011_09_26_drive_0048_sync 0000000006 l
233 | 2011_09_26/2011_09_26_drive_0048_sync 0000000007 l
234 | 2011_09_26/2011_09_26_drive_0048_sync 0000000008 l
235 | 2011_09_26/2011_09_26_drive_0048_sync 0000000009 l
236 | 2011_09_26/2011_09_26_drive_0048_sync 0000000010 l
237 | 2011_09_26/2011_09_26_drive_0048_sync 0000000011 l
238 | 2011_09_26/2011_09_26_drive_0048_sync 0000000012 l
239 | 2011_09_26/2011_09_26_drive_0048_sync 0000000013 l
240 | 2011_09_26/2011_09_26_drive_0048_sync 0000000014 l
241 | 2011_09_26/2011_09_26_drive_0048_sync 0000000015 l
242 | 2011_09_26/2011_09_26_drive_0048_sync 0000000016 l
243 | 2011_09_26/2011_09_26_drive_0048_sync 0000000017 l
244 | 2011_09_26/2011_09_26_drive_0048_sync 0000000018 l
245 | 2011_09_26/2011_09_26_drive_0048_sync 0000000019 l
246 | 2011_09_26/2011_09_26_drive_0048_sync 0000000020 l
247 | 2011_09_26/2011_09_26_drive_0048_sync 0000000021 l
248 | 2011_09_26/2011_09_26_drive_0052_sync 0000000046 l
249 | 2011_09_26/2011_09_26_drive_0052_sync 0000000014 l
250 | 2011_09_26/2011_09_26_drive_0052_sync 0000000036 l
251 | 2011_09_26/2011_09_26_drive_0052_sync 0000000028 l
252 | 2011_09_26/2011_09_26_drive_0052_sync 0000000026 l
253 | 2011_09_26/2011_09_26_drive_0052_sync 0000000050 l
254 | 2011_09_26/2011_09_26_drive_0052_sync 0000000040 l
255 | 2011_09_26/2011_09_26_drive_0052_sync 0000000008 l
256 | 2011_09_26/2011_09_26_drive_0052_sync 0000000016 l
257 | 2011_09_26/2011_09_26_drive_0052_sync 0000000044 l
258 | 2011_09_26/2011_09_26_drive_0052_sync 0000000018 l
259 | 2011_09_26/2011_09_26_drive_0052_sync 0000000032 l
260 | 2011_09_26/2011_09_26_drive_0052_sync 0000000042 l
261 | 2011_09_26/2011_09_26_drive_0052_sync 0000000010 l
262 | 2011_09_26/2011_09_26_drive_0052_sync 0000000020 l
263 | 2011_09_26/2011_09_26_drive_0052_sync 0000000048 l
264 | 2011_09_26/2011_09_26_drive_0052_sync 0000000052 l
265 | 2011_09_26/2011_09_26_drive_0052_sync 0000000006 l
266 | 2011_09_26/2011_09_26_drive_0052_sync 0000000030 l
267 | 2011_09_26/2011_09_26_drive_0052_sync 0000000012 l
268 | 2011_09_26/2011_09_26_drive_0052_sync 0000000038 l
269 | 2011_09_26/2011_09_26_drive_0052_sync 0000000000 l
270 | 2011_09_26/2011_09_26_drive_0052_sync 0000000002 l
271 | 2011_09_26/2011_09_26_drive_0052_sync 0000000004 l
272 | 2011_09_26/2011_09_26_drive_0052_sync 0000000022 l
273 | 2011_09_26/2011_09_26_drive_0056_sync 0000000011 l
274 | 2011_09_26/2011_09_26_drive_0056_sync 0000000033 l
275 | 2011_09_26/2011_09_26_drive_0056_sync 0000000242 l
276 | 2011_09_26/2011_09_26_drive_0056_sync 0000000253 l
277 | 2011_09_26/2011_09_26_drive_0056_sync 0000000286 l
278 | 2011_09_26/2011_09_26_drive_0056_sync 0000000154 l
279 | 2011_09_26/2011_09_26_drive_0056_sync 0000000099 l
280 | 2011_09_26/2011_09_26_drive_0056_sync 0000000220 l
281 | 2011_09_26/2011_09_26_drive_0056_sync 0000000022 l
282 | 2011_09_26/2011_09_26_drive_0056_sync 0000000077 l
283 | 2011_09_26/2011_09_26_drive_0056_sync 0000000187 l
284 | 2011_09_26/2011_09_26_drive_0056_sync 0000000143 l
285 | 2011_09_26/2011_09_26_drive_0056_sync 0000000066 l
286 | 2011_09_26/2011_09_26_drive_0056_sync 0000000176 l
287 | 2011_09_26/2011_09_26_drive_0056_sync 0000000110 l
288 | 2011_09_26/2011_09_26_drive_0056_sync 0000000275 l
289 | 2011_09_26/2011_09_26_drive_0056_sync 0000000264 l
290 | 2011_09_26/2011_09_26_drive_0056_sync 0000000198 l
291 | 2011_09_26/2011_09_26_drive_0056_sync 0000000055 l
292 | 2011_09_26/2011_09_26_drive_0056_sync 0000000088 l
293 | 2011_09_26/2011_09_26_drive_0056_sync 0000000121 l
294 | 2011_09_26/2011_09_26_drive_0056_sync 0000000209 l
295 | 2011_09_26/2011_09_26_drive_0056_sync 0000000165 l
296 | 2011_09_26/2011_09_26_drive_0056_sync 0000000231 l
297 | 2011_09_26/2011_09_26_drive_0056_sync 0000000044 l
298 | 2011_09_26/2011_09_26_drive_0059_sync 0000000056 l
299 | 2011_09_26/2011_09_26_drive_0059_sync 0000000000 l
300 | 2011_09_26/2011_09_26_drive_0059_sync 0000000344 l
301 | 2011_09_26/2011_09_26_drive_0059_sync 0000000358 l
302 | 2011_09_26/2011_09_26_drive_0059_sync 0000000316 l
303 | 2011_09_26/2011_09_26_drive_0059_sync 0000000238 l
304 | 2011_09_26/2011_09_26_drive_0059_sync 0000000098 l
305 | 2011_09_26/2011_09_26_drive_0059_sync 0000000112 l
306 | 2011_09_26/2011_09_26_drive_0059_sync 0000000028 l
307 | 2011_09_26/2011_09_26_drive_0059_sync 0000000014 l
308 | 2011_09_26/2011_09_26_drive_0059_sync 0000000330 l
309 | 2011_09_26/2011_09_26_drive_0059_sync 0000000154 l
310 | 2011_09_26/2011_09_26_drive_0059_sync 0000000042 l
311 | 2011_09_26/2011_09_26_drive_0059_sync 0000000302 l
312 | 2011_09_26/2011_09_26_drive_0059_sync 0000000182 l
313 | 2011_09_26/2011_09_26_drive_0059_sync 0000000288 l
314 | 2011_09_26/2011_09_26_drive_0059_sync 0000000140 l
315 | 2011_09_26/2011_09_26_drive_0059_sync 0000000274 l
316 | 2011_09_26/2011_09_26_drive_0059_sync 0000000224 l
317 | 2011_09_26/2011_09_26_drive_0059_sync 0000000372 l
318 | 2011_09_26/2011_09_26_drive_0059_sync 0000000196 l
319 | 2011_09_26/2011_09_26_drive_0059_sync 0000000126 l
320 | 2011_09_26/2011_09_26_drive_0059_sync 0000000084 l
321 | 2011_09_26/2011_09_26_drive_0059_sync 0000000210 l
322 | 2011_09_26/2011_09_26_drive_0059_sync 0000000070 l
323 | 2011_09_26/2011_09_26_drive_0064_sync 0000000528 l
324 | 2011_09_26/2011_09_26_drive_0064_sync 0000000308 l
325 | 2011_09_26/2011_09_26_drive_0064_sync 0000000044 l
326 | 2011_09_26/2011_09_26_drive_0064_sync 0000000352 l
327 | 2011_09_26/2011_09_26_drive_0064_sync 0000000066 l
328 | 2011_09_26/2011_09_26_drive_0064_sync 0000000000 l
329 | 2011_09_26/2011_09_26_drive_0064_sync 0000000506 l
330 | 2011_09_26/2011_09_26_drive_0064_sync 0000000176 l
331 | 2011_09_26/2011_09_26_drive_0064_sync 0000000022 l
332 | 2011_09_26/2011_09_26_drive_0064_sync 0000000242 l
333 | 2011_09_26/2011_09_26_drive_0064_sync 0000000462 l
334 | 2011_09_26/2011_09_26_drive_0064_sync 0000000418 l
335 | 2011_09_26/2011_09_26_drive_0064_sync 0000000110 l
336 | 2011_09_26/2011_09_26_drive_0064_sync 0000000440 l
337 | 2011_09_26/2011_09_26_drive_0064_sync 0000000396 l
338 | 2011_09_26/2011_09_26_drive_0064_sync 0000000154 l
339 | 2011_09_26/2011_09_26_drive_0064_sync 0000000374 l
340 | 2011_09_26/2011_09_26_drive_0064_sync 0000000088 l
341 | 2011_09_26/2011_09_26_drive_0064_sync 0000000286 l
342 | 2011_09_26/2011_09_26_drive_0064_sync 0000000550 l
343 | 2011_09_26/2011_09_26_drive_0064_sync 0000000264 l
344 | 2011_09_26/2011_09_26_drive_0064_sync 0000000220 l
345 | 2011_09_26/2011_09_26_drive_0064_sync 0000000330 l
346 | 2011_09_26/2011_09_26_drive_0064_sync 0000000484 l
347 | 2011_09_26/2011_09_26_drive_0064_sync 0000000198 l
348 | 2011_09_26/2011_09_26_drive_0084_sync 0000000283 l
349 | 2011_09_26/2011_09_26_drive_0084_sync 0000000361 l
350 | 2011_09_26/2011_09_26_drive_0084_sync 0000000270 l
351 | 2011_09_26/2011_09_26_drive_0084_sync 0000000127 l
352 | 2011_09_26/2011_09_26_drive_0084_sync 0000000205 l
353 | 2011_09_26/2011_09_26_drive_0084_sync 0000000218 l
354 | 2011_09_26/2011_09_26_drive_0084_sync 0000000153 l
355 | 2011_09_26/2011_09_26_drive_0084_sync 0000000335 l
356 | 2011_09_26/2011_09_26_drive_0084_sync 0000000192 l
357 | 2011_09_26/2011_09_26_drive_0084_sync 0000000348 l
358 | 2011_09_26/2011_09_26_drive_0084_sync 0000000101 l
359 | 2011_09_26/2011_09_26_drive_0084_sync 0000000049 l
360 | 2011_09_26/2011_09_26_drive_0084_sync 0000000179 l
361 | 2011_09_26/2011_09_26_drive_0084_sync 0000000140 l
362 | 2011_09_26/2011_09_26_drive_0084_sync 0000000374 l
363 | 2011_09_26/2011_09_26_drive_0084_sync 0000000322 l
364 | 2011_09_26/2011_09_26_drive_0084_sync 0000000309 l
365 | 2011_09_26/2011_09_26_drive_0084_sync 0000000244 l
366 | 2011_09_26/2011_09_26_drive_0084_sync 0000000062 l
367 | 2011_09_26/2011_09_26_drive_0084_sync 0000000257 l
368 | 2011_09_26/2011_09_26_drive_0084_sync 0000000088 l
369 | 2011_09_26/2011_09_26_drive_0084_sync 0000000114 l
370 | 2011_09_26/2011_09_26_drive_0084_sync 0000000075 l
371 | 2011_09_26/2011_09_26_drive_0084_sync 0000000296 l
372 | 2011_09_26/2011_09_26_drive_0084_sync 0000000231 l
373 | 2011_09_26/2011_09_26_drive_0086_sync 0000000007 l
374 | 2011_09_26/2011_09_26_drive_0086_sync 0000000196 l
375 | 2011_09_26/2011_09_26_drive_0086_sync 0000000439 l
376 | 2011_09_26/2011_09_26_drive_0086_sync 0000000169 l
377 | 2011_09_26/2011_09_26_drive_0086_sync 0000000115 l
378 | 2011_09_26/2011_09_26_drive_0086_sync 0000000034 l
379 | 2011_09_26/2011_09_26_drive_0086_sync 0000000304 l
380 | 2011_09_26/2011_09_26_drive_0086_sync 0000000331 l
381 | 2011_09_26/2011_09_26_drive_0086_sync 0000000277 l
382 | 2011_09_26/2011_09_26_drive_0086_sync 0000000520 l
383 | 2011_09_26/2011_09_26_drive_0086_sync 0000000682 l
384 | 2011_09_26/2011_09_26_drive_0086_sync 0000000628 l
385 | 2011_09_26/2011_09_26_drive_0086_sync 0000000088 l
386 | 2011_09_26/2011_09_26_drive_0086_sync 0000000601 l
387 | 2011_09_26/2011_09_26_drive_0086_sync 0000000574 l
388 | 2011_09_26/2011_09_26_drive_0086_sync 0000000223 l
389 | 2011_09_26/2011_09_26_drive_0086_sync 0000000655 l
390 | 2011_09_26/2011_09_26_drive_0086_sync 0000000358 l
391 | 2011_09_26/2011_09_26_drive_0086_sync 0000000412 l
392 | 2011_09_26/2011_09_26_drive_0086_sync 0000000142 l
393 | 2011_09_26/2011_09_26_drive_0086_sync 0000000385 l
394 | 2011_09_26/2011_09_26_drive_0086_sync 0000000061 l
395 | 2011_09_26/2011_09_26_drive_0086_sync 0000000493 l
396 | 2011_09_26/2011_09_26_drive_0086_sync 0000000466 l
397 | 2011_09_26/2011_09_26_drive_0086_sync 0000000250 l
398 | 2011_09_26/2011_09_26_drive_0093_sync 0000000000 l
399 | 2011_09_26/2011_09_26_drive_0093_sync 0000000016 l
400 | 2011_09_26/2011_09_26_drive_0093_sync 0000000032 l
401 | 2011_09_26/2011_09_26_drive_0093_sync 0000000048 l
402 | 2011_09_26/2011_09_26_drive_0093_sync 0000000064 l
403 | 2011_09_26/2011_09_26_drive_0093_sync 0000000080 l
404 | 2011_09_26/2011_09_26_drive_0093_sync 0000000096 l
405 | 2011_09_26/2011_09_26_drive_0093_sync 0000000112 l
406 | 2011_09_26/2011_09_26_drive_0093_sync 0000000128 l
407 | 2011_09_26/2011_09_26_drive_0093_sync 0000000144 l
408 | 2011_09_26/2011_09_26_drive_0093_sync 0000000160 l
409 | 2011_09_26/2011_09_26_drive_0093_sync 0000000176 l
410 | 2011_09_26/2011_09_26_drive_0093_sync 0000000192 l
411 | 2011_09_26/2011_09_26_drive_0093_sync 0000000208 l
412 | 2011_09_26/2011_09_26_drive_0093_sync 0000000224 l
413 | 2011_09_26/2011_09_26_drive_0093_sync 0000000240 l
414 | 2011_09_26/2011_09_26_drive_0093_sync 0000000256 l
415 | 2011_09_26/2011_09_26_drive_0093_sync 0000000305 l
416 | 2011_09_26/2011_09_26_drive_0093_sync 0000000321 l
417 | 2011_09_26/2011_09_26_drive_0093_sync 0000000337 l
418 | 2011_09_26/2011_09_26_drive_0093_sync 0000000353 l
419 | 2011_09_26/2011_09_26_drive_0093_sync 0000000369 l
420 | 2011_09_26/2011_09_26_drive_0093_sync 0000000385 l
421 | 2011_09_26/2011_09_26_drive_0093_sync 0000000401 l
422 | 2011_09_26/2011_09_26_drive_0093_sync 0000000417 l
423 | 2011_09_26/2011_09_26_drive_0096_sync 0000000000 l
424 | 2011_09_26/2011_09_26_drive_0096_sync 0000000019 l
425 | 2011_09_26/2011_09_26_drive_0096_sync 0000000038 l
426 | 2011_09_26/2011_09_26_drive_0096_sync 0000000057 l
427 | 2011_09_26/2011_09_26_drive_0096_sync 0000000076 l
428 | 2011_09_26/2011_09_26_drive_0096_sync 0000000095 l
429 | 2011_09_26/2011_09_26_drive_0096_sync 0000000114 l
430 | 2011_09_26/2011_09_26_drive_0096_sync 0000000133 l
431 | 2011_09_26/2011_09_26_drive_0096_sync 0000000152 l
432 | 2011_09_26/2011_09_26_drive_0096_sync 0000000171 l
433 | 2011_09_26/2011_09_26_drive_0096_sync 0000000190 l
434 | 2011_09_26/2011_09_26_drive_0096_sync 0000000209 l
435 | 2011_09_26/2011_09_26_drive_0096_sync 0000000228 l
436 | 2011_09_26/2011_09_26_drive_0096_sync 0000000247 l
437 | 2011_09_26/2011_09_26_drive_0096_sync 0000000266 l
438 | 2011_09_26/2011_09_26_drive_0096_sync 0000000285 l
439 | 2011_09_26/2011_09_26_drive_0096_sync 0000000304 l
440 | 2011_09_26/2011_09_26_drive_0096_sync 0000000323 l
441 | 2011_09_26/2011_09_26_drive_0096_sync 0000000342 l
442 | 2011_09_26/2011_09_26_drive_0096_sync 0000000361 l
443 | 2011_09_26/2011_09_26_drive_0096_sync 0000000380 l
444 | 2011_09_26/2011_09_26_drive_0096_sync 0000000399 l
445 | 2011_09_26/2011_09_26_drive_0096_sync 0000000418 l
446 | 2011_09_26/2011_09_26_drive_0096_sync 0000000437 l
447 | 2011_09_26/2011_09_26_drive_0096_sync 0000000456 l
448 | 2011_09_26/2011_09_26_drive_0101_sync 0000000692 l
449 | 2011_09_26/2011_09_26_drive_0101_sync 0000000930 l
450 | 2011_09_26/2011_09_26_drive_0101_sync 0000000760 l
451 | 2011_09_26/2011_09_26_drive_0101_sync 0000000896 l
452 | 2011_09_26/2011_09_26_drive_0101_sync 0000000284 l
453 | 2011_09_26/2011_09_26_drive_0101_sync 0000000148 l
454 | 2011_09_26/2011_09_26_drive_0101_sync 0000000522 l
455 | 2011_09_26/2011_09_26_drive_0101_sync 0000000794 l
456 | 2011_09_26/2011_09_26_drive_0101_sync 0000000624 l
457 | 2011_09_26/2011_09_26_drive_0101_sync 0000000726 l
458 | 2011_09_26/2011_09_26_drive_0101_sync 0000000216 l
459 | 2011_09_26/2011_09_26_drive_0101_sync 0000000318 l
460 | 2011_09_26/2011_09_26_drive_0101_sync 0000000488 l
461 | 2011_09_26/2011_09_26_drive_0101_sync 0000000590 l
462 | 2011_09_26/2011_09_26_drive_0101_sync 0000000454 l
463 | 2011_09_26/2011_09_26_drive_0101_sync 0000000862 l
464 | 2011_09_26/2011_09_26_drive_0101_sync 0000000386 l
465 | 2011_09_26/2011_09_26_drive_0101_sync 0000000352 l
466 | 2011_09_26/2011_09_26_drive_0101_sync 0000000420 l
467 | 2011_09_26/2011_09_26_drive_0101_sync 0000000658 l
468 | 2011_09_26/2011_09_26_drive_0101_sync 0000000828 l
469 | 2011_09_26/2011_09_26_drive_0101_sync 0000000556 l
470 | 2011_09_26/2011_09_26_drive_0101_sync 0000000114 l
471 | 2011_09_26/2011_09_26_drive_0101_sync 0000000182 l
472 | 2011_09_26/2011_09_26_drive_0101_sync 0000000080 l
473 | 2011_09_26/2011_09_26_drive_0106_sync 0000000015 l
474 | 2011_09_26/2011_09_26_drive_0106_sync 0000000035 l
475 | 2011_09_26/2011_09_26_drive_0106_sync 0000000043 l
476 | 2011_09_26/2011_09_26_drive_0106_sync 0000000051 l
477 | 2011_09_26/2011_09_26_drive_0106_sync 0000000059 l
478 | 2011_09_26/2011_09_26_drive_0106_sync 0000000067 l
479 | 2011_09_26/2011_09_26_drive_0106_sync 0000000075 l
480 | 2011_09_26/2011_09_26_drive_0106_sync 0000000083 l
481 | 2011_09_26/2011_09_26_drive_0106_sync 0000000091 l
482 | 2011_09_26/2011_09_26_drive_0106_sync 0000000099 l
483 | 2011_09_26/2011_09_26_drive_0106_sync 0000000107 l
484 | 2011_09_26/2011_09_26_drive_0106_sync 0000000115 l
485 | 2011_09_26/2011_09_26_drive_0106_sync 0000000123 l
486 | 2011_09_26/2011_09_26_drive_0106_sync 0000000131 l
487 | 2011_09_26/2011_09_26_drive_0106_sync 0000000139 l
488 | 2011_09_26/2011_09_26_drive_0106_sync 0000000147 l
489 | 2011_09_26/2011_09_26_drive_0106_sync 0000000155 l
490 | 2011_09_26/2011_09_26_drive_0106_sync 0000000163 l
491 | 2011_09_26/2011_09_26_drive_0106_sync 0000000171 l
492 | 2011_09_26/2011_09_26_drive_0106_sync 0000000179 l
493 | 2011_09_26/2011_09_26_drive_0106_sync 0000000187 l
494 | 2011_09_26/2011_09_26_drive_0106_sync 0000000195 l
495 | 2011_09_26/2011_09_26_drive_0106_sync 0000000203 l
496 | 2011_09_26/2011_09_26_drive_0106_sync 0000000211 l
497 | 2011_09_26/2011_09_26_drive_0106_sync 0000000219 l
498 | 2011_09_26/2011_09_26_drive_0117_sync 0000000312 l
499 | 2011_09_26/2011_09_26_drive_0117_sync 0000000494 l
500 | 2011_09_26/2011_09_26_drive_0117_sync 0000000104 l
501 | 2011_09_26/2011_09_26_drive_0117_sync 0000000130 l
502 | 2011_09_26/2011_09_26_drive_0117_sync 0000000156 l
503 | 2011_09_26/2011_09_26_drive_0117_sync 0000000182 l
504 | 2011_09_26/2011_09_26_drive_0117_sync 0000000598 l
505 | 2011_09_26/2011_09_26_drive_0117_sync 0000000416 l
506 | 2011_09_26/2011_09_26_drive_0117_sync 0000000364 l
507 | 2011_09_26/2011_09_26_drive_0117_sync 0000000026 l
508 | 2011_09_26/2011_09_26_drive_0117_sync 0000000078 l
509 | 2011_09_26/2011_09_26_drive_0117_sync 0000000572 l
510 | 2011_09_26/2011_09_26_drive_0117_sync 0000000468 l
511 | 2011_09_26/2011_09_26_drive_0117_sync 0000000260 l
512 | 2011_09_26/2011_09_26_drive_0117_sync 0000000624 l
513 | 2011_09_26/2011_09_26_drive_0117_sync 0000000234 l
514 | 2011_09_26/2011_09_26_drive_0117_sync 0000000442 l
515 | 2011_09_26/2011_09_26_drive_0117_sync 0000000390 l
516 | 2011_09_26/2011_09_26_drive_0117_sync 0000000546 l
517 | 2011_09_26/2011_09_26_drive_0117_sync 0000000286 l
518 | 2011_09_26/2011_09_26_drive_0117_sync 0000000000 l
519 | 2011_09_26/2011_09_26_drive_0117_sync 0000000338 l
520 | 2011_09_26/2011_09_26_drive_0117_sync 0000000208 l
521 | 2011_09_26/2011_09_26_drive_0117_sync 0000000650 l
522 | 2011_09_26/2011_09_26_drive_0117_sync 0000000052 l
523 | 2011_09_28/2011_09_28_drive_0002_sync 0000000024 l
524 | 2011_09_28/2011_09_28_drive_0002_sync 0000000021 l
525 | 2011_09_28/2011_09_28_drive_0002_sync 0000000036 l
526 | 2011_09_28/2011_09_28_drive_0002_sync 0000000000 l
527 | 2011_09_28/2011_09_28_drive_0002_sync 0000000051 l
528 | 2011_09_28/2011_09_28_drive_0002_sync 0000000018 l
529 | 2011_09_28/2011_09_28_drive_0002_sync 0000000033 l
530 | 2011_09_28/2011_09_28_drive_0002_sync 0000000090 l
531 | 2011_09_28/2011_09_28_drive_0002_sync 0000000045 l
532 | 2011_09_28/2011_09_28_drive_0002_sync 0000000054 l
533 | 2011_09_28/2011_09_28_drive_0002_sync 0000000012 l
534 | 2011_09_28/2011_09_28_drive_0002_sync 0000000039 l
535 | 2011_09_28/2011_09_28_drive_0002_sync 0000000009 l
536 | 2011_09_28/2011_09_28_drive_0002_sync 0000000003 l
537 | 2011_09_28/2011_09_28_drive_0002_sync 0000000030 l
538 | 2011_09_28/2011_09_28_drive_0002_sync 0000000078 l
539 | 2011_09_28/2011_09_28_drive_0002_sync 0000000060 l
540 | 2011_09_28/2011_09_28_drive_0002_sync 0000000048 l
541 | 2011_09_28/2011_09_28_drive_0002_sync 0000000084 l
542 | 2011_09_28/2011_09_28_drive_0002_sync 0000000081 l
543 | 2011_09_28/2011_09_28_drive_0002_sync 0000000006 l
544 | 2011_09_28/2011_09_28_drive_0002_sync 0000000057 l
545 | 2011_09_28/2011_09_28_drive_0002_sync 0000000072 l
546 | 2011_09_28/2011_09_28_drive_0002_sync 0000000087 l
547 | 2011_09_28/2011_09_28_drive_0002_sync 0000000063 l
548 | 2011_09_29/2011_09_29_drive_0071_sync 0000000252 l
549 | 2011_09_29/2011_09_29_drive_0071_sync 0000000540 l
550 | 2011_09_29/2011_09_29_drive_0071_sync 0000001054 l
551 | 2011_09_29/2011_09_29_drive_0071_sync 0000000036 l
552 | 2011_09_29/2011_09_29_drive_0071_sync 0000000360 l
553 | 2011_09_29/2011_09_29_drive_0071_sync 0000000807 l
554 | 2011_09_29/2011_09_29_drive_0071_sync 0000000879 l
555 | 2011_09_29/2011_09_29_drive_0071_sync 0000000288 l
556 | 2011_09_29/2011_09_29_drive_0071_sync 0000000771 l
557 | 2011_09_29/2011_09_29_drive_0071_sync 0000000000 l
558 | 2011_09_29/2011_09_29_drive_0071_sync 0000000216 l
559 | 2011_09_29/2011_09_29_drive_0071_sync 0000000951 l
560 | 2011_09_29/2011_09_29_drive_0071_sync 0000000324 l
561 | 2011_09_29/2011_09_29_drive_0071_sync 0000000432 l
562 | 2011_09_29/2011_09_29_drive_0071_sync 0000000504 l
563 | 2011_09_29/2011_09_29_drive_0071_sync 0000000576 l
564 | 2011_09_29/2011_09_29_drive_0071_sync 0000000108 l
565 | 2011_09_29/2011_09_29_drive_0071_sync 0000000180 l
566 | 2011_09_29/2011_09_29_drive_0071_sync 0000000072 l
567 | 2011_09_29/2011_09_29_drive_0071_sync 0000000612 l
568 | 2011_09_29/2011_09_29_drive_0071_sync 0000000915 l
569 | 2011_09_29/2011_09_29_drive_0071_sync 0000000735 l
570 | 2011_09_29/2011_09_29_drive_0071_sync 0000000144 l
571 | 2011_09_29/2011_09_29_drive_0071_sync 0000000396 l
572 | 2011_09_29/2011_09_29_drive_0071_sync 0000000468 l
573 | 2011_09_30/2011_09_30_drive_0016_sync 0000000132 l
574 | 2011_09_30/2011_09_30_drive_0016_sync 0000000011 l
575 | 2011_09_30/2011_09_30_drive_0016_sync 0000000154 l
576 | 2011_09_30/2011_09_30_drive_0016_sync 0000000022 l
577 | 2011_09_30/2011_09_30_drive_0016_sync 0000000242 l
578 | 2011_09_30/2011_09_30_drive_0016_sync 0000000198 l
579 | 2011_09_30/2011_09_30_drive_0016_sync 0000000176 l
580 | 2011_09_30/2011_09_30_drive_0016_sync 0000000231 l
581 | 2011_09_30/2011_09_30_drive_0016_sync 0000000275 l
582 | 2011_09_30/2011_09_30_drive_0016_sync 0000000220 l
583 | 2011_09_30/2011_09_30_drive_0016_sync 0000000088 l
584 | 2011_09_30/2011_09_30_drive_0016_sync 0000000143 l
585 | 2011_09_30/2011_09_30_drive_0016_sync 0000000055 l
586 | 2011_09_30/2011_09_30_drive_0016_sync 0000000033 l
587 | 2011_09_30/2011_09_30_drive_0016_sync 0000000187 l
588 | 2011_09_30/2011_09_30_drive_0016_sync 0000000110 l
589 | 2011_09_30/2011_09_30_drive_0016_sync 0000000044 l
590 | 2011_09_30/2011_09_30_drive_0016_sync 0000000077 l
591 | 2011_09_30/2011_09_30_drive_0016_sync 0000000066 l
592 | 2011_09_30/2011_09_30_drive_0016_sync 0000000000 l
593 | 2011_09_30/2011_09_30_drive_0016_sync 0000000165 l
594 | 2011_09_30/2011_09_30_drive_0016_sync 0000000264 l
595 | 2011_09_30/2011_09_30_drive_0016_sync 0000000253 l
596 | 2011_09_30/2011_09_30_drive_0016_sync 0000000209 l
597 | 2011_09_30/2011_09_30_drive_0016_sync 0000000121 l
598 | 2011_09_30/2011_09_30_drive_0018_sync 0000000107 l
599 | 2011_09_30/2011_09_30_drive_0018_sync 0000002247 l
600 | 2011_09_30/2011_09_30_drive_0018_sync 0000001391 l
601 | 2011_09_30/2011_09_30_drive_0018_sync 0000000535 l
602 | 2011_09_30/2011_09_30_drive_0018_sync 0000001819 l
603 | 2011_09_30/2011_09_30_drive_0018_sync 0000001177 l
604 | 2011_09_30/2011_09_30_drive_0018_sync 0000000428 l
605 | 2011_09_30/2011_09_30_drive_0018_sync 0000001926 l
606 | 2011_09_30/2011_09_30_drive_0018_sync 0000000749 l
607 | 2011_09_30/2011_09_30_drive_0018_sync 0000001284 l
608 | 2011_09_30/2011_09_30_drive_0018_sync 0000002140 l
609 | 2011_09_30/2011_09_30_drive_0018_sync 0000001605 l
610 | 2011_09_30/2011_09_30_drive_0018_sync 0000001498 l
611 | 2011_09_30/2011_09_30_drive_0018_sync 0000000642 l
612 | 2011_09_30/2011_09_30_drive_0018_sync 0000002740 l
613 | 2011_09_30/2011_09_30_drive_0018_sync 0000002419 l
614 | 2011_09_30/2011_09_30_drive_0018_sync 0000000856 l
615 | 2011_09_30/2011_09_30_drive_0018_sync 0000002526 l
616 | 2011_09_30/2011_09_30_drive_0018_sync 0000001712 l
617 | 2011_09_30/2011_09_30_drive_0018_sync 0000001070 l
618 | 2011_09_30/2011_09_30_drive_0018_sync 0000000000 l
619 | 2011_09_30/2011_09_30_drive_0018_sync 0000002033 l
620 | 2011_09_30/2011_09_30_drive_0018_sync 0000000214 l
621 | 2011_09_30/2011_09_30_drive_0018_sync 0000000963 l
622 | 2011_09_30/2011_09_30_drive_0018_sync 0000002633 l
623 | 2011_09_30/2011_09_30_drive_0027_sync 0000000533 l
624 | 2011_09_30/2011_09_30_drive_0027_sync 0000001040 l
625 | 2011_09_30/2011_09_30_drive_0027_sync 0000000082 l
626 | 2011_09_30/2011_09_30_drive_0027_sync 0000000205 l
627 | 2011_09_30/2011_09_30_drive_0027_sync 0000000835 l
628 | 2011_09_30/2011_09_30_drive_0027_sync 0000000451 l
629 | 2011_09_30/2011_09_30_drive_0027_sync 0000000164 l
630 | 2011_09_30/2011_09_30_drive_0027_sync 0000000794 l
631 | 2011_09_30/2011_09_30_drive_0027_sync 0000000328 l
632 | 2011_09_30/2011_09_30_drive_0027_sync 0000000615 l
633 | 2011_09_30/2011_09_30_drive_0027_sync 0000000917 l
634 | 2011_09_30/2011_09_30_drive_0027_sync 0000000369 l
635 | 2011_09_30/2011_09_30_drive_0027_sync 0000000287 l
636 | 2011_09_30/2011_09_30_drive_0027_sync 0000000123 l
637 | 2011_09_30/2011_09_30_drive_0027_sync 0000000876 l
638 | 2011_09_30/2011_09_30_drive_0027_sync 0000000410 l
639 | 2011_09_30/2011_09_30_drive_0027_sync 0000000492 l
640 | 2011_09_30/2011_09_30_drive_0027_sync 0000000958 l
641 | 2011_09_30/2011_09_30_drive_0027_sync 0000000656 l
642 | 2011_09_30/2011_09_30_drive_0027_sync 0000000000 l
643 | 2011_09_30/2011_09_30_drive_0027_sync 0000000753 l
644 | 2011_09_30/2011_09_30_drive_0027_sync 0000000574 l
645 | 2011_09_30/2011_09_30_drive_0027_sync 0000001081 l
646 | 2011_09_30/2011_09_30_drive_0027_sync 0000000041 l
647 | 2011_09_30/2011_09_30_drive_0027_sync 0000000246 l
648 | 2011_10_03/2011_10_03_drive_0027_sync 0000002906 l
649 | 2011_10_03/2011_10_03_drive_0027_sync 0000002544 l
650 | 2011_10_03/2011_10_03_drive_0027_sync 0000000362 l
651 | 2011_10_03/2011_10_03_drive_0027_sync 0000004535 l
652 | 2011_10_03/2011_10_03_drive_0027_sync 0000000734 l
653 | 2011_10_03/2011_10_03_drive_0027_sync 0000001096 l
654 | 2011_10_03/2011_10_03_drive_0027_sync 0000004173 l
655 | 2011_10_03/2011_10_03_drive_0027_sync 0000000543 l
656 | 2011_10_03/2011_10_03_drive_0027_sync 0000001277 l
657 | 2011_10_03/2011_10_03_drive_0027_sync 0000004354 l
658 | 2011_10_03/2011_10_03_drive_0027_sync 0000001458 l
659 | 2011_10_03/2011_10_03_drive_0027_sync 0000001820 l
660 | 2011_10_03/2011_10_03_drive_0027_sync 0000003449 l
661 | 2011_10_03/2011_10_03_drive_0027_sync 0000003268 l
662 | 2011_10_03/2011_10_03_drive_0027_sync 0000000915 l
663 | 2011_10_03/2011_10_03_drive_0027_sync 0000002363 l
664 | 2011_10_03/2011_10_03_drive_0027_sync 0000002725 l
665 | 2011_10_03/2011_10_03_drive_0027_sync 0000000181 l
666 | 2011_10_03/2011_10_03_drive_0027_sync 0000001639 l
667 | 2011_10_03/2011_10_03_drive_0027_sync 0000003992 l
668 | 2011_10_03/2011_10_03_drive_0027_sync 0000003087 l
669 | 2011_10_03/2011_10_03_drive_0027_sync 0000002001 l
670 | 2011_10_03/2011_10_03_drive_0027_sync 0000003811 l
671 | 2011_10_03/2011_10_03_drive_0027_sync 0000003630 l
672 | 2011_10_03/2011_10_03_drive_0027_sync 0000000000 l
673 | 2011_10_03/2011_10_03_drive_0047_sync 0000000096 l
674 | 2011_10_03/2011_10_03_drive_0047_sync 0000000800 l
675 | 2011_10_03/2011_10_03_drive_0047_sync 0000000320 l
676 | 2011_10_03/2011_10_03_drive_0047_sync 0000000576 l
677 | 2011_10_03/2011_10_03_drive_0047_sync 0000000000 l
678 | 2011_10_03/2011_10_03_drive_0047_sync 0000000480 l
679 | 2011_10_03/2011_10_03_drive_0047_sync 0000000640 l
680 | 2011_10_03/2011_10_03_drive_0047_sync 0000000032 l
681 | 2011_10_03/2011_10_03_drive_0047_sync 0000000384 l
682 | 2011_10_03/2011_10_03_drive_0047_sync 0000000160 l
683 | 2011_10_03/2011_10_03_drive_0047_sync 0000000704 l
684 | 2011_10_03/2011_10_03_drive_0047_sync 0000000736 l
685 | 2011_10_03/2011_10_03_drive_0047_sync 0000000672 l
686 | 2011_10_03/2011_10_03_drive_0047_sync 0000000064 l
687 | 2011_10_03/2011_10_03_drive_0047_sync 0000000288 l
688 | 2011_10_03/2011_10_03_drive_0047_sync 0000000352 l
689 | 2011_10_03/2011_10_03_drive_0047_sync 0000000512 l
690 | 2011_10_03/2011_10_03_drive_0047_sync 0000000544 l
691 | 2011_10_03/2011_10_03_drive_0047_sync 0000000608 l
692 | 2011_10_03/2011_10_03_drive_0047_sync 0000000128 l
693 | 2011_10_03/2011_10_03_drive_0047_sync 0000000224 l
694 | 2011_10_03/2011_10_03_drive_0047_sync 0000000416 l
695 | 2011_10_03/2011_10_03_drive_0047_sync 0000000192 l
696 | 2011_10_03/2011_10_03_drive_0047_sync 0000000448 l
697 | 2011_10_03/2011_10_03_drive_0047_sync 0000000768 l
698 |
--------------------------------------------------------------------------------
/dataset/filenames/eigen_full/test_files.txt:
--------------------------------------------------------------------------------
1 | 2011_09_26/2011_09_26_drive_0002_sync 0000000069 l
2 | 2011_09_26/2011_09_26_drive_0002_sync 0000000054 l
3 | 2011_09_26/2011_09_26_drive_0002_sync 0000000042 l
4 | 2011_09_26/2011_09_26_drive_0002_sync 0000000057 l
5 | 2011_09_26/2011_09_26_drive_0002_sync 0000000030 l
6 | 2011_09_26/2011_09_26_drive_0002_sync 0000000027 l
7 | 2011_09_26/2011_09_26_drive_0002_sync 0000000012 l
8 | 2011_09_26/2011_09_26_drive_0002_sync 0000000075 l
9 | 2011_09_26/2011_09_26_drive_0002_sync 0000000036 l
10 | 2011_09_26/2011_09_26_drive_0002_sync 0000000033 l
11 | 2011_09_26/2011_09_26_drive_0002_sync 0000000015 l
12 | 2011_09_26/2011_09_26_drive_0002_sync 0000000072 l
13 | 2011_09_26/2011_09_26_drive_0002_sync 0000000003 l
14 | 2011_09_26/2011_09_26_drive_0002_sync 0000000039 l
15 | 2011_09_26/2011_09_26_drive_0002_sync 0000000009 l
16 | 2011_09_26/2011_09_26_drive_0002_sync 0000000051 l
17 | 2011_09_26/2011_09_26_drive_0002_sync 0000000060 l
18 | 2011_09_26/2011_09_26_drive_0002_sync 0000000021 l
19 | 2011_09_26/2011_09_26_drive_0002_sync 0000000000 l
20 | 2011_09_26/2011_09_26_drive_0002_sync 0000000024 l
21 | 2011_09_26/2011_09_26_drive_0002_sync 0000000045 l
22 | 2011_09_26/2011_09_26_drive_0002_sync 0000000018 l
23 | 2011_09_26/2011_09_26_drive_0002_sync 0000000048 l
24 | 2011_09_26/2011_09_26_drive_0002_sync 0000000006 l
25 | 2011_09_26/2011_09_26_drive_0002_sync 0000000063 l
26 | 2011_09_26/2011_09_26_drive_0009_sync 0000000000 l
27 | 2011_09_26/2011_09_26_drive_0009_sync 0000000016 l
28 | 2011_09_26/2011_09_26_drive_0009_sync 0000000032 l
29 | 2011_09_26/2011_09_26_drive_0009_sync 0000000048 l
30 | 2011_09_26/2011_09_26_drive_0009_sync 0000000064 l
31 | 2011_09_26/2011_09_26_drive_0009_sync 0000000080 l
32 | 2011_09_26/2011_09_26_drive_0009_sync 0000000096 l
33 | 2011_09_26/2011_09_26_drive_0009_sync 0000000112 l
34 | 2011_09_26/2011_09_26_drive_0009_sync 0000000128 l
35 | 2011_09_26/2011_09_26_drive_0009_sync 0000000144 l
36 | 2011_09_26/2011_09_26_drive_0009_sync 0000000160 l
37 | 2011_09_26/2011_09_26_drive_0009_sync 0000000176 l
38 | 2011_09_26/2011_09_26_drive_0009_sync 0000000196 l
39 | 2011_09_26/2011_09_26_drive_0009_sync 0000000212 l
40 | 2011_09_26/2011_09_26_drive_0009_sync 0000000228 l
41 | 2011_09_26/2011_09_26_drive_0009_sync 0000000244 l
42 | 2011_09_26/2011_09_26_drive_0009_sync 0000000260 l
43 | 2011_09_26/2011_09_26_drive_0009_sync 0000000276 l
44 | 2011_09_26/2011_09_26_drive_0009_sync 0000000292 l
45 | 2011_09_26/2011_09_26_drive_0009_sync 0000000308 l
46 | 2011_09_26/2011_09_26_drive_0009_sync 0000000324 l
47 | 2011_09_26/2011_09_26_drive_0009_sync 0000000340 l
48 | 2011_09_26/2011_09_26_drive_0009_sync 0000000356 l
49 | 2011_09_26/2011_09_26_drive_0009_sync 0000000372 l
50 | 2011_09_26/2011_09_26_drive_0009_sync 0000000388 l
51 | 2011_09_26/2011_09_26_drive_0013_sync 0000000090 l
52 | 2011_09_26/2011_09_26_drive_0013_sync 0000000050 l
53 | 2011_09_26/2011_09_26_drive_0013_sync 0000000110 l
54 | 2011_09_26/2011_09_26_drive_0013_sync 0000000115 l
55 | 2011_09_26/2011_09_26_drive_0013_sync 0000000060 l
56 | 2011_09_26/2011_09_26_drive_0013_sync 0000000105 l
57 | 2011_09_26/2011_09_26_drive_0013_sync 0000000125 l
58 | 2011_09_26/2011_09_26_drive_0013_sync 0000000020 l
59 | 2011_09_26/2011_09_26_drive_0013_sync 0000000140 l
60 | 2011_09_26/2011_09_26_drive_0013_sync 0000000085 l
61 | 2011_09_26/2011_09_26_drive_0013_sync 0000000070 l
62 | 2011_09_26/2011_09_26_drive_0013_sync 0000000080 l
63 | 2011_09_26/2011_09_26_drive_0013_sync 0000000065 l
64 | 2011_09_26/2011_09_26_drive_0013_sync 0000000095 l
65 | 2011_09_26/2011_09_26_drive_0013_sync 0000000130 l
66 | 2011_09_26/2011_09_26_drive_0013_sync 0000000100 l
67 | 2011_09_26/2011_09_26_drive_0013_sync 0000000010 l
68 | 2011_09_26/2011_09_26_drive_0013_sync 0000000030 l
69 | 2011_09_26/2011_09_26_drive_0013_sync 0000000000 l
70 | 2011_09_26/2011_09_26_drive_0013_sync 0000000135 l
71 | 2011_09_26/2011_09_26_drive_0013_sync 0000000040 l
72 | 2011_09_26/2011_09_26_drive_0013_sync 0000000005 l
73 | 2011_09_26/2011_09_26_drive_0013_sync 0000000120 l
74 | 2011_09_26/2011_09_26_drive_0013_sync 0000000045 l
75 | 2011_09_26/2011_09_26_drive_0013_sync 0000000035 l
76 | 2011_09_26/2011_09_26_drive_0020_sync 0000000003 l
77 | 2011_09_26/2011_09_26_drive_0020_sync 0000000069 l
78 | 2011_09_26/2011_09_26_drive_0020_sync 0000000057 l
79 | 2011_09_26/2011_09_26_drive_0020_sync 0000000012 l
80 | 2011_09_26/2011_09_26_drive_0020_sync 0000000072 l
81 | 2011_09_26/2011_09_26_drive_0020_sync 0000000018 l
82 | 2011_09_26/2011_09_26_drive_0020_sync 0000000063 l
83 | 2011_09_26/2011_09_26_drive_0020_sync 0000000000 l
84 | 2011_09_26/2011_09_26_drive_0020_sync 0000000084 l
85 | 2011_09_26/2011_09_26_drive_0020_sync 0000000015 l
86 | 2011_09_26/2011_09_26_drive_0020_sync 0000000066 l
87 | 2011_09_26/2011_09_26_drive_0020_sync 0000000006 l
88 | 2011_09_26/2011_09_26_drive_0020_sync 0000000048 l
89 | 2011_09_26/2011_09_26_drive_0020_sync 0000000060 l
90 | 2011_09_26/2011_09_26_drive_0020_sync 0000000009 l
91 | 2011_09_26/2011_09_26_drive_0020_sync 0000000033 l
92 | 2011_09_26/2011_09_26_drive_0020_sync 0000000021 l
93 | 2011_09_26/2011_09_26_drive_0020_sync 0000000075 l
94 | 2011_09_26/2011_09_26_drive_0020_sync 0000000027 l
95 | 2011_09_26/2011_09_26_drive_0020_sync 0000000045 l
96 | 2011_09_26/2011_09_26_drive_0020_sync 0000000078 l
97 | 2011_09_26/2011_09_26_drive_0020_sync 0000000036 l
98 | 2011_09_26/2011_09_26_drive_0020_sync 0000000051 l
99 | 2011_09_26/2011_09_26_drive_0020_sync 0000000054 l
100 | 2011_09_26/2011_09_26_drive_0020_sync 0000000042 l
101 | 2011_09_26/2011_09_26_drive_0023_sync 0000000018 l
102 | 2011_09_26/2011_09_26_drive_0023_sync 0000000090 l
103 | 2011_09_26/2011_09_26_drive_0023_sync 0000000126 l
104 | 2011_09_26/2011_09_26_drive_0023_sync 0000000378 l
105 | 2011_09_26/2011_09_26_drive_0023_sync 0000000036 l
106 | 2011_09_26/2011_09_26_drive_0023_sync 0000000288 l
107 | 2011_09_26/2011_09_26_drive_0023_sync 0000000198 l
108 | 2011_09_26/2011_09_26_drive_0023_sync 0000000450 l
109 | 2011_09_26/2011_09_26_drive_0023_sync 0000000144 l
110 | 2011_09_26/2011_09_26_drive_0023_sync 0000000072 l
111 | 2011_09_26/2011_09_26_drive_0023_sync 0000000252 l
112 | 2011_09_26/2011_09_26_drive_0023_sync 0000000180 l
113 | 2011_09_26/2011_09_26_drive_0023_sync 0000000432 l
114 | 2011_09_26/2011_09_26_drive_0023_sync 0000000396 l
115 | 2011_09_26/2011_09_26_drive_0023_sync 0000000054 l
116 | 2011_09_26/2011_09_26_drive_0023_sync 0000000468 l
117 | 2011_09_26/2011_09_26_drive_0023_sync 0000000306 l
118 | 2011_09_26/2011_09_26_drive_0023_sync 0000000108 l
119 | 2011_09_26/2011_09_26_drive_0023_sync 0000000162 l
120 | 2011_09_26/2011_09_26_drive_0023_sync 0000000342 l
121 | 2011_09_26/2011_09_26_drive_0023_sync 0000000270 l
122 | 2011_09_26/2011_09_26_drive_0023_sync 0000000414 l
123 | 2011_09_26/2011_09_26_drive_0023_sync 0000000216 l
124 | 2011_09_26/2011_09_26_drive_0023_sync 0000000360 l
125 | 2011_09_26/2011_09_26_drive_0023_sync 0000000324 l
126 | 2011_09_26/2011_09_26_drive_0027_sync 0000000077 l
127 | 2011_09_26/2011_09_26_drive_0027_sync 0000000035 l
128 | 2011_09_26/2011_09_26_drive_0027_sync 0000000091 l
129 | 2011_09_26/2011_09_26_drive_0027_sync 0000000112 l
130 | 2011_09_26/2011_09_26_drive_0027_sync 0000000007 l
131 | 2011_09_26/2011_09_26_drive_0027_sync 0000000175 l
132 | 2011_09_26/2011_09_26_drive_0027_sync 0000000042 l
133 | 2011_09_26/2011_09_26_drive_0027_sync 0000000098 l
134 | 2011_09_26/2011_09_26_drive_0027_sync 0000000133 l
135 | 2011_09_26/2011_09_26_drive_0027_sync 0000000161 l
136 | 2011_09_26/2011_09_26_drive_0027_sync 0000000014 l
137 | 2011_09_26/2011_09_26_drive_0027_sync 0000000126 l
138 | 2011_09_26/2011_09_26_drive_0027_sync 0000000168 l
139 | 2011_09_26/2011_09_26_drive_0027_sync 0000000070 l
140 | 2011_09_26/2011_09_26_drive_0027_sync 0000000084 l
141 | 2011_09_26/2011_09_26_drive_0027_sync 0000000140 l
142 | 2011_09_26/2011_09_26_drive_0027_sync 0000000049 l
143 | 2011_09_26/2011_09_26_drive_0027_sync 0000000000 l
144 | 2011_09_26/2011_09_26_drive_0027_sync 0000000182 l
145 | 2011_09_26/2011_09_26_drive_0027_sync 0000000147 l
146 | 2011_09_26/2011_09_26_drive_0027_sync 0000000056 l
147 | 2011_09_26/2011_09_26_drive_0027_sync 0000000063 l
148 | 2011_09_26/2011_09_26_drive_0027_sync 0000000021 l
149 | 2011_09_26/2011_09_26_drive_0027_sync 0000000119 l
150 | 2011_09_26/2011_09_26_drive_0027_sync 0000000028 l
151 | 2011_09_26/2011_09_26_drive_0029_sync 0000000380 l
152 | 2011_09_26/2011_09_26_drive_0029_sync 0000000394 l
153 | 2011_09_26/2011_09_26_drive_0029_sync 0000000324 l
154 | 2011_09_26/2011_09_26_drive_0029_sync 0000000000 l
155 | 2011_09_26/2011_09_26_drive_0029_sync 0000000268 l
156 | 2011_09_26/2011_09_26_drive_0029_sync 0000000366 l
157 | 2011_09_26/2011_09_26_drive_0029_sync 0000000296 l
158 | 2011_09_26/2011_09_26_drive_0029_sync 0000000014 l
159 | 2011_09_26/2011_09_26_drive_0029_sync 0000000028 l
160 | 2011_09_26/2011_09_26_drive_0029_sync 0000000182 l
161 | 2011_09_26/2011_09_26_drive_0029_sync 0000000168 l
162 | 2011_09_26/2011_09_26_drive_0029_sync 0000000196 l
163 | 2011_09_26/2011_09_26_drive_0029_sync 0000000140 l
164 | 2011_09_26/2011_09_26_drive_0029_sync 0000000084 l
165 | 2011_09_26/2011_09_26_drive_0029_sync 0000000056 l
166 | 2011_09_26/2011_09_26_drive_0029_sync 0000000112 l
167 | 2011_09_26/2011_09_26_drive_0029_sync 0000000352 l
168 | 2011_09_26/2011_09_26_drive_0029_sync 0000000126 l
169 | 2011_09_26/2011_09_26_drive_0029_sync 0000000070 l
170 | 2011_09_26/2011_09_26_drive_0029_sync 0000000310 l
171 | 2011_09_26/2011_09_26_drive_0029_sync 0000000154 l
172 | 2011_09_26/2011_09_26_drive_0029_sync 0000000098 l
173 | 2011_09_26/2011_09_26_drive_0029_sync 0000000408 l
174 | 2011_09_26/2011_09_26_drive_0029_sync 0000000042 l
175 | 2011_09_26/2011_09_26_drive_0029_sync 0000000338 l
176 | 2011_09_26/2011_09_26_drive_0036_sync 0000000000 l
177 | 2011_09_26/2011_09_26_drive_0036_sync 0000000128 l
178 | 2011_09_26/2011_09_26_drive_0036_sync 0000000192 l
179 | 2011_09_26/2011_09_26_drive_0036_sync 0000000032 l
180 | 2011_09_26/2011_09_26_drive_0036_sync 0000000352 l
181 | 2011_09_26/2011_09_26_drive_0036_sync 0000000608 l
182 | 2011_09_26/2011_09_26_drive_0036_sync 0000000224 l
183 | 2011_09_26/2011_09_26_drive_0036_sync 0000000576 l
184 | 2011_09_26/2011_09_26_drive_0036_sync 0000000672 l
185 | 2011_09_26/2011_09_26_drive_0036_sync 0000000064 l
186 | 2011_09_26/2011_09_26_drive_0036_sync 0000000448 l
187 | 2011_09_26/2011_09_26_drive_0036_sync 0000000704 l
188 | 2011_09_26/2011_09_26_drive_0036_sync 0000000640 l
189 | 2011_09_26/2011_09_26_drive_0036_sync 0000000512 l
190 | 2011_09_26/2011_09_26_drive_0036_sync 0000000768 l
191 | 2011_09_26/2011_09_26_drive_0036_sync 0000000160 l
192 | 2011_09_26/2011_09_26_drive_0036_sync 0000000416 l
193 | 2011_09_26/2011_09_26_drive_0036_sync 0000000480 l
194 | 2011_09_26/2011_09_26_drive_0036_sync 0000000800 l
195 | 2011_09_26/2011_09_26_drive_0036_sync 0000000288 l
196 | 2011_09_26/2011_09_26_drive_0036_sync 0000000544 l
197 | 2011_09_26/2011_09_26_drive_0036_sync 0000000096 l
198 | 2011_09_26/2011_09_26_drive_0036_sync 0000000384 l
199 | 2011_09_26/2011_09_26_drive_0036_sync 0000000256 l
200 | 2011_09_26/2011_09_26_drive_0036_sync 0000000320 l
201 | 2011_09_26/2011_09_26_drive_0046_sync 0000000000 l
202 | 2011_09_26/2011_09_26_drive_0046_sync 0000000005 l
203 | 2011_09_26/2011_09_26_drive_0046_sync 0000000010 l
204 | 2011_09_26/2011_09_26_drive_0046_sync 0000000015 l
205 | 2011_09_26/2011_09_26_drive_0046_sync 0000000020 l
206 | 2011_09_26/2011_09_26_drive_0046_sync 0000000025 l
207 | 2011_09_26/2011_09_26_drive_0046_sync 0000000030 l
208 | 2011_09_26/2011_09_26_drive_0046_sync 0000000035 l
209 | 2011_09_26/2011_09_26_drive_0046_sync 0000000040 l
210 | 2011_09_26/2011_09_26_drive_0046_sync 0000000045 l
211 | 2011_09_26/2011_09_26_drive_0046_sync 0000000050 l
212 | 2011_09_26/2011_09_26_drive_0046_sync 0000000055 l
213 | 2011_09_26/2011_09_26_drive_0046_sync 0000000060 l
214 | 2011_09_26/2011_09_26_drive_0046_sync 0000000065 l
215 | 2011_09_26/2011_09_26_drive_0046_sync 0000000070 l
216 | 2011_09_26/2011_09_26_drive_0046_sync 0000000075 l
217 | 2011_09_26/2011_09_26_drive_0046_sync 0000000080 l
218 | 2011_09_26/2011_09_26_drive_0046_sync 0000000085 l
219 | 2011_09_26/2011_09_26_drive_0046_sync 0000000090 l
220 | 2011_09_26/2011_09_26_drive_0046_sync 0000000095 l
221 | 2011_09_26/2011_09_26_drive_0046_sync 0000000100 l
222 | 2011_09_26/2011_09_26_drive_0046_sync 0000000105 l
223 | 2011_09_26/2011_09_26_drive_0046_sync 0000000110 l
224 | 2011_09_26/2011_09_26_drive_0046_sync 0000000115 l
225 | 2011_09_26/2011_09_26_drive_0046_sync 0000000120 l
226 | 2011_09_26/2011_09_26_drive_0048_sync 0000000000 l
227 | 2011_09_26/2011_09_26_drive_0048_sync 0000000001 l
228 | 2011_09_26/2011_09_26_drive_0048_sync 0000000002 l
229 | 2011_09_26/2011_09_26_drive_0048_sync 0000000003 l
230 | 2011_09_26/2011_09_26_drive_0048_sync 0000000004 l
231 | 2011_09_26/2011_09_26_drive_0048_sync 0000000005 l
232 | 2011_09_26/2011_09_26_drive_0048_sync 0000000006 l
233 | 2011_09_26/2011_09_26_drive_0048_sync 0000000007 l
234 | 2011_09_26/2011_09_26_drive_0048_sync 0000000008 l
235 | 2011_09_26/2011_09_26_drive_0048_sync 0000000009 l
236 | 2011_09_26/2011_09_26_drive_0048_sync 0000000010 l
237 | 2011_09_26/2011_09_26_drive_0048_sync 0000000011 l
238 | 2011_09_26/2011_09_26_drive_0048_sync 0000000012 l
239 | 2011_09_26/2011_09_26_drive_0048_sync 0000000013 l
240 | 2011_09_26/2011_09_26_drive_0048_sync 0000000014 l
241 | 2011_09_26/2011_09_26_drive_0048_sync 0000000015 l
242 | 2011_09_26/2011_09_26_drive_0048_sync 0000000016 l
243 | 2011_09_26/2011_09_26_drive_0048_sync 0000000017 l
244 | 2011_09_26/2011_09_26_drive_0048_sync 0000000018 l
245 | 2011_09_26/2011_09_26_drive_0048_sync 0000000019 l
246 | 2011_09_26/2011_09_26_drive_0048_sync 0000000020 l
247 | 2011_09_26/2011_09_26_drive_0048_sync 0000000021 l
248 | 2011_09_26/2011_09_26_drive_0052_sync 0000000046 l
249 | 2011_09_26/2011_09_26_drive_0052_sync 0000000014 l
250 | 2011_09_26/2011_09_26_drive_0052_sync 0000000036 l
251 | 2011_09_26/2011_09_26_drive_0052_sync 0000000028 l
252 | 2011_09_26/2011_09_26_drive_0052_sync 0000000026 l
253 | 2011_09_26/2011_09_26_drive_0052_sync 0000000050 l
254 | 2011_09_26/2011_09_26_drive_0052_sync 0000000040 l
255 | 2011_09_26/2011_09_26_drive_0052_sync 0000000008 l
256 | 2011_09_26/2011_09_26_drive_0052_sync 0000000016 l
257 | 2011_09_26/2011_09_26_drive_0052_sync 0000000044 l
258 | 2011_09_26/2011_09_26_drive_0052_sync 0000000018 l
259 | 2011_09_26/2011_09_26_drive_0052_sync 0000000032 l
260 | 2011_09_26/2011_09_26_drive_0052_sync 0000000042 l
261 | 2011_09_26/2011_09_26_drive_0052_sync 0000000010 l
262 | 2011_09_26/2011_09_26_drive_0052_sync 0000000020 l
263 | 2011_09_26/2011_09_26_drive_0052_sync 0000000048 l
264 | 2011_09_26/2011_09_26_drive_0052_sync 0000000052 l
265 | 2011_09_26/2011_09_26_drive_0052_sync 0000000006 l
266 | 2011_09_26/2011_09_26_drive_0052_sync 0000000030 l
267 | 2011_09_26/2011_09_26_drive_0052_sync 0000000012 l
268 | 2011_09_26/2011_09_26_drive_0052_sync 0000000038 l
269 | 2011_09_26/2011_09_26_drive_0052_sync 0000000000 l
270 | 2011_09_26/2011_09_26_drive_0052_sync 0000000002 l
271 | 2011_09_26/2011_09_26_drive_0052_sync 0000000004 l
272 | 2011_09_26/2011_09_26_drive_0052_sync 0000000022 l
273 | 2011_09_26/2011_09_26_drive_0056_sync 0000000011 l
274 | 2011_09_26/2011_09_26_drive_0056_sync 0000000033 l
275 | 2011_09_26/2011_09_26_drive_0056_sync 0000000242 l
276 | 2011_09_26/2011_09_26_drive_0056_sync 0000000253 l
277 | 2011_09_26/2011_09_26_drive_0056_sync 0000000286 l
278 | 2011_09_26/2011_09_26_drive_0056_sync 0000000154 l
279 | 2011_09_26/2011_09_26_drive_0056_sync 0000000099 l
280 | 2011_09_26/2011_09_26_drive_0056_sync 0000000220 l
281 | 2011_09_26/2011_09_26_drive_0056_sync 0000000022 l
282 | 2011_09_26/2011_09_26_drive_0056_sync 0000000077 l
283 | 2011_09_26/2011_09_26_drive_0056_sync 0000000187 l
284 | 2011_09_26/2011_09_26_drive_0056_sync 0000000143 l
285 | 2011_09_26/2011_09_26_drive_0056_sync 0000000066 l
286 | 2011_09_26/2011_09_26_drive_0056_sync 0000000176 l
287 | 2011_09_26/2011_09_26_drive_0056_sync 0000000110 l
288 | 2011_09_26/2011_09_26_drive_0056_sync 0000000275 l
289 | 2011_09_26/2011_09_26_drive_0056_sync 0000000264 l
290 | 2011_09_26/2011_09_26_drive_0056_sync 0000000198 l
291 | 2011_09_26/2011_09_26_drive_0056_sync 0000000055 l
292 | 2011_09_26/2011_09_26_drive_0056_sync 0000000088 l
293 | 2011_09_26/2011_09_26_drive_0056_sync 0000000121 l
294 | 2011_09_26/2011_09_26_drive_0056_sync 0000000209 l
295 | 2011_09_26/2011_09_26_drive_0056_sync 0000000165 l
296 | 2011_09_26/2011_09_26_drive_0056_sync 0000000231 l
297 | 2011_09_26/2011_09_26_drive_0056_sync 0000000044 l
298 | 2011_09_26/2011_09_26_drive_0059_sync 0000000056 l
299 | 2011_09_26/2011_09_26_drive_0059_sync 0000000000 l
300 | 2011_09_26/2011_09_26_drive_0059_sync 0000000344 l
301 | 2011_09_26/2011_09_26_drive_0059_sync 0000000358 l
302 | 2011_09_26/2011_09_26_drive_0059_sync 0000000316 l
303 | 2011_09_26/2011_09_26_drive_0059_sync 0000000238 l
304 | 2011_09_26/2011_09_26_drive_0059_sync 0000000098 l
305 | 2011_09_26/2011_09_26_drive_0059_sync 0000000112 l
306 | 2011_09_26/2011_09_26_drive_0059_sync 0000000028 l
307 | 2011_09_26/2011_09_26_drive_0059_sync 0000000014 l
308 | 2011_09_26/2011_09_26_drive_0059_sync 0000000330 l
309 | 2011_09_26/2011_09_26_drive_0059_sync 0000000154 l
310 | 2011_09_26/2011_09_26_drive_0059_sync 0000000042 l
311 | 2011_09_26/2011_09_26_drive_0059_sync 0000000302 l
312 | 2011_09_26/2011_09_26_drive_0059_sync 0000000182 l
313 | 2011_09_26/2011_09_26_drive_0059_sync 0000000288 l
314 | 2011_09_26/2011_09_26_drive_0059_sync 0000000140 l
315 | 2011_09_26/2011_09_26_drive_0059_sync 0000000274 l
316 | 2011_09_26/2011_09_26_drive_0059_sync 0000000224 l
317 | 2011_09_26/2011_09_26_drive_0059_sync 0000000372 l
318 | 2011_09_26/2011_09_26_drive_0059_sync 0000000196 l
319 | 2011_09_26/2011_09_26_drive_0059_sync 0000000126 l
320 | 2011_09_26/2011_09_26_drive_0059_sync 0000000084 l
321 | 2011_09_26/2011_09_26_drive_0059_sync 0000000210 l
322 | 2011_09_26/2011_09_26_drive_0059_sync 0000000070 l
323 | 2011_09_26/2011_09_26_drive_0064_sync 0000000528 l
324 | 2011_09_26/2011_09_26_drive_0064_sync 0000000308 l
325 | 2011_09_26/2011_09_26_drive_0064_sync 0000000044 l
326 | 2011_09_26/2011_09_26_drive_0064_sync 0000000352 l
327 | 2011_09_26/2011_09_26_drive_0064_sync 0000000066 l
328 | 2011_09_26/2011_09_26_drive_0064_sync 0000000000 l
329 | 2011_09_26/2011_09_26_drive_0064_sync 0000000506 l
330 | 2011_09_26/2011_09_26_drive_0064_sync 0000000176 l
331 | 2011_09_26/2011_09_26_drive_0064_sync 0000000022 l
332 | 2011_09_26/2011_09_26_drive_0064_sync 0000000242 l
333 | 2011_09_26/2011_09_26_drive_0064_sync 0000000462 l
334 | 2011_09_26/2011_09_26_drive_0064_sync 0000000418 l
335 | 2011_09_26/2011_09_26_drive_0064_sync 0000000110 l
336 | 2011_09_26/2011_09_26_drive_0064_sync 0000000440 l
337 | 2011_09_26/2011_09_26_drive_0064_sync 0000000396 l
338 | 2011_09_26/2011_09_26_drive_0064_sync 0000000154 l
339 | 2011_09_26/2011_09_26_drive_0064_sync 0000000374 l
340 | 2011_09_26/2011_09_26_drive_0064_sync 0000000088 l
341 | 2011_09_26/2011_09_26_drive_0064_sync 0000000286 l
342 | 2011_09_26/2011_09_26_drive_0064_sync 0000000550 l
343 | 2011_09_26/2011_09_26_drive_0064_sync 0000000264 l
344 | 2011_09_26/2011_09_26_drive_0064_sync 0000000220 l
345 | 2011_09_26/2011_09_26_drive_0064_sync 0000000330 l
346 | 2011_09_26/2011_09_26_drive_0064_sync 0000000484 l
347 | 2011_09_26/2011_09_26_drive_0064_sync 0000000198 l
348 | 2011_09_26/2011_09_26_drive_0084_sync 0000000283 l
349 | 2011_09_26/2011_09_26_drive_0084_sync 0000000361 l
350 | 2011_09_26/2011_09_26_drive_0084_sync 0000000270 l
351 | 2011_09_26/2011_09_26_drive_0084_sync 0000000127 l
352 | 2011_09_26/2011_09_26_drive_0084_sync 0000000205 l
353 | 2011_09_26/2011_09_26_drive_0084_sync 0000000218 l
354 | 2011_09_26/2011_09_26_drive_0084_sync 0000000153 l
355 | 2011_09_26/2011_09_26_drive_0084_sync 0000000335 l
356 | 2011_09_26/2011_09_26_drive_0084_sync 0000000192 l
357 | 2011_09_26/2011_09_26_drive_0084_sync 0000000348 l
358 | 2011_09_26/2011_09_26_drive_0084_sync 0000000101 l
359 | 2011_09_26/2011_09_26_drive_0084_sync 0000000049 l
360 | 2011_09_26/2011_09_26_drive_0084_sync 0000000179 l
361 | 2011_09_26/2011_09_26_drive_0084_sync 0000000140 l
362 | 2011_09_26/2011_09_26_drive_0084_sync 0000000374 l
363 | 2011_09_26/2011_09_26_drive_0084_sync 0000000322 l
364 | 2011_09_26/2011_09_26_drive_0084_sync 0000000309 l
365 | 2011_09_26/2011_09_26_drive_0084_sync 0000000244 l
366 | 2011_09_26/2011_09_26_drive_0084_sync 0000000062 l
367 | 2011_09_26/2011_09_26_drive_0084_sync 0000000257 l
368 | 2011_09_26/2011_09_26_drive_0084_sync 0000000088 l
369 | 2011_09_26/2011_09_26_drive_0084_sync 0000000114 l
370 | 2011_09_26/2011_09_26_drive_0084_sync 0000000075 l
371 | 2011_09_26/2011_09_26_drive_0084_sync 0000000296 l
372 | 2011_09_26/2011_09_26_drive_0084_sync 0000000231 l
373 | 2011_09_26/2011_09_26_drive_0086_sync 0000000007 l
374 | 2011_09_26/2011_09_26_drive_0086_sync 0000000196 l
375 | 2011_09_26/2011_09_26_drive_0086_sync 0000000439 l
376 | 2011_09_26/2011_09_26_drive_0086_sync 0000000169 l
377 | 2011_09_26/2011_09_26_drive_0086_sync 0000000115 l
378 | 2011_09_26/2011_09_26_drive_0086_sync 0000000034 l
379 | 2011_09_26/2011_09_26_drive_0086_sync 0000000304 l
380 | 2011_09_26/2011_09_26_drive_0086_sync 0000000331 l
381 | 2011_09_26/2011_09_26_drive_0086_sync 0000000277 l
382 | 2011_09_26/2011_09_26_drive_0086_sync 0000000520 l
383 | 2011_09_26/2011_09_26_drive_0086_sync 0000000682 l
384 | 2011_09_26/2011_09_26_drive_0086_sync 0000000628 l
385 | 2011_09_26/2011_09_26_drive_0086_sync 0000000088 l
386 | 2011_09_26/2011_09_26_drive_0086_sync 0000000601 l
387 | 2011_09_26/2011_09_26_drive_0086_sync 0000000574 l
388 | 2011_09_26/2011_09_26_drive_0086_sync 0000000223 l
389 | 2011_09_26/2011_09_26_drive_0086_sync 0000000655 l
390 | 2011_09_26/2011_09_26_drive_0086_sync 0000000358 l
391 | 2011_09_26/2011_09_26_drive_0086_sync 0000000412 l
392 | 2011_09_26/2011_09_26_drive_0086_sync 0000000142 l
393 | 2011_09_26/2011_09_26_drive_0086_sync 0000000385 l
394 | 2011_09_26/2011_09_26_drive_0086_sync 0000000061 l
395 | 2011_09_26/2011_09_26_drive_0086_sync 0000000493 l
396 | 2011_09_26/2011_09_26_drive_0086_sync 0000000466 l
397 | 2011_09_26/2011_09_26_drive_0086_sync 0000000250 l
398 | 2011_09_26/2011_09_26_drive_0093_sync 0000000000 l
399 | 2011_09_26/2011_09_26_drive_0093_sync 0000000016 l
400 | 2011_09_26/2011_09_26_drive_0093_sync 0000000032 l
401 | 2011_09_26/2011_09_26_drive_0093_sync 0000000048 l
402 | 2011_09_26/2011_09_26_drive_0093_sync 0000000064 l
403 | 2011_09_26/2011_09_26_drive_0093_sync 0000000080 l
404 | 2011_09_26/2011_09_26_drive_0093_sync 0000000096 l
405 | 2011_09_26/2011_09_26_drive_0093_sync 0000000112 l
406 | 2011_09_26/2011_09_26_drive_0093_sync 0000000128 l
407 | 2011_09_26/2011_09_26_drive_0093_sync 0000000144 l
408 | 2011_09_26/2011_09_26_drive_0093_sync 0000000160 l
409 | 2011_09_26/2011_09_26_drive_0093_sync 0000000176 l
410 | 2011_09_26/2011_09_26_drive_0093_sync 0000000192 l
411 | 2011_09_26/2011_09_26_drive_0093_sync 0000000208 l
412 | 2011_09_26/2011_09_26_drive_0093_sync 0000000224 l
413 | 2011_09_26/2011_09_26_drive_0093_sync 0000000240 l
414 | 2011_09_26/2011_09_26_drive_0093_sync 0000000256 l
415 | 2011_09_26/2011_09_26_drive_0093_sync 0000000305 l
416 | 2011_09_26/2011_09_26_drive_0093_sync 0000000321 l
417 | 2011_09_26/2011_09_26_drive_0093_sync 0000000337 l
418 | 2011_09_26/2011_09_26_drive_0093_sync 0000000353 l
419 | 2011_09_26/2011_09_26_drive_0093_sync 0000000369 l
420 | 2011_09_26/2011_09_26_drive_0093_sync 0000000385 l
421 | 2011_09_26/2011_09_26_drive_0093_sync 0000000401 l
422 | 2011_09_26/2011_09_26_drive_0093_sync 0000000417 l
423 | 2011_09_26/2011_09_26_drive_0096_sync 0000000000 l
424 | 2011_09_26/2011_09_26_drive_0096_sync 0000000019 l
425 | 2011_09_26/2011_09_26_drive_0096_sync 0000000038 l
426 | 2011_09_26/2011_09_26_drive_0096_sync 0000000057 l
427 | 2011_09_26/2011_09_26_drive_0096_sync 0000000076 l
428 | 2011_09_26/2011_09_26_drive_0096_sync 0000000095 l
429 | 2011_09_26/2011_09_26_drive_0096_sync 0000000114 l
430 | 2011_09_26/2011_09_26_drive_0096_sync 0000000133 l
431 | 2011_09_26/2011_09_26_drive_0096_sync 0000000152 l
432 | 2011_09_26/2011_09_26_drive_0096_sync 0000000171 l
433 | 2011_09_26/2011_09_26_drive_0096_sync 0000000190 l
434 | 2011_09_26/2011_09_26_drive_0096_sync 0000000209 l
435 | 2011_09_26/2011_09_26_drive_0096_sync 0000000228 l
436 | 2011_09_26/2011_09_26_drive_0096_sync 0000000247 l
437 | 2011_09_26/2011_09_26_drive_0096_sync 0000000266 l
438 | 2011_09_26/2011_09_26_drive_0096_sync 0000000285 l
439 | 2011_09_26/2011_09_26_drive_0096_sync 0000000304 l
440 | 2011_09_26/2011_09_26_drive_0096_sync 0000000323 l
441 | 2011_09_26/2011_09_26_drive_0096_sync 0000000342 l
442 | 2011_09_26/2011_09_26_drive_0096_sync 0000000361 l
443 | 2011_09_26/2011_09_26_drive_0096_sync 0000000380 l
444 | 2011_09_26/2011_09_26_drive_0096_sync 0000000399 l
445 | 2011_09_26/2011_09_26_drive_0096_sync 0000000418 l
446 | 2011_09_26/2011_09_26_drive_0096_sync 0000000437 l
447 | 2011_09_26/2011_09_26_drive_0096_sync 0000000456 l
448 | 2011_09_26/2011_09_26_drive_0101_sync 0000000692 l
449 | 2011_09_26/2011_09_26_drive_0101_sync 0000000930 l
450 | 2011_09_26/2011_09_26_drive_0101_sync 0000000760 l
451 | 2011_09_26/2011_09_26_drive_0101_sync 0000000896 l
452 | 2011_09_26/2011_09_26_drive_0101_sync 0000000284 l
453 | 2011_09_26/2011_09_26_drive_0101_sync 0000000148 l
454 | 2011_09_26/2011_09_26_drive_0101_sync 0000000522 l
455 | 2011_09_26/2011_09_26_drive_0101_sync 0000000794 l
456 | 2011_09_26/2011_09_26_drive_0101_sync 0000000624 l
457 | 2011_09_26/2011_09_26_drive_0101_sync 0000000726 l
458 | 2011_09_26/2011_09_26_drive_0101_sync 0000000216 l
459 | 2011_09_26/2011_09_26_drive_0101_sync 0000000318 l
460 | 2011_09_26/2011_09_26_drive_0101_sync 0000000488 l
461 | 2011_09_26/2011_09_26_drive_0101_sync 0000000590 l
462 | 2011_09_26/2011_09_26_drive_0101_sync 0000000454 l
463 | 2011_09_26/2011_09_26_drive_0101_sync 0000000862 l
464 | 2011_09_26/2011_09_26_drive_0101_sync 0000000386 l
465 | 2011_09_26/2011_09_26_drive_0101_sync 0000000352 l
466 | 2011_09_26/2011_09_26_drive_0101_sync 0000000420 l
467 | 2011_09_26/2011_09_26_drive_0101_sync 0000000658 l
468 | 2011_09_26/2011_09_26_drive_0101_sync 0000000828 l
469 | 2011_09_26/2011_09_26_drive_0101_sync 0000000556 l
470 | 2011_09_26/2011_09_26_drive_0101_sync 0000000114 l
471 | 2011_09_26/2011_09_26_drive_0101_sync 0000000182 l
472 | 2011_09_26/2011_09_26_drive_0101_sync 0000000080 l
473 | 2011_09_26/2011_09_26_drive_0106_sync 0000000015 l
474 | 2011_09_26/2011_09_26_drive_0106_sync 0000000035 l
475 | 2011_09_26/2011_09_26_drive_0106_sync 0000000043 l
476 | 2011_09_26/2011_09_26_drive_0106_sync 0000000051 l
477 | 2011_09_26/2011_09_26_drive_0106_sync 0000000059 l
478 | 2011_09_26/2011_09_26_drive_0106_sync 0000000067 l
479 | 2011_09_26/2011_09_26_drive_0106_sync 0000000075 l
480 | 2011_09_26/2011_09_26_drive_0106_sync 0000000083 l
481 | 2011_09_26/2011_09_26_drive_0106_sync 0000000091 l
482 | 2011_09_26/2011_09_26_drive_0106_sync 0000000099 l
483 | 2011_09_26/2011_09_26_drive_0106_sync 0000000107 l
484 | 2011_09_26/2011_09_26_drive_0106_sync 0000000115 l
485 | 2011_09_26/2011_09_26_drive_0106_sync 0000000123 l
486 | 2011_09_26/2011_09_26_drive_0106_sync 0000000131 l
487 | 2011_09_26/2011_09_26_drive_0106_sync 0000000139 l
488 | 2011_09_26/2011_09_26_drive_0106_sync 0000000147 l
489 | 2011_09_26/2011_09_26_drive_0106_sync 0000000155 l
490 | 2011_09_26/2011_09_26_drive_0106_sync 0000000163 l
491 | 2011_09_26/2011_09_26_drive_0106_sync 0000000171 l
492 | 2011_09_26/2011_09_26_drive_0106_sync 0000000179 l
493 | 2011_09_26/2011_09_26_drive_0106_sync 0000000187 l
494 | 2011_09_26/2011_09_26_drive_0106_sync 0000000195 l
495 | 2011_09_26/2011_09_26_drive_0106_sync 0000000203 l
496 | 2011_09_26/2011_09_26_drive_0106_sync 0000000211 l
497 | 2011_09_26/2011_09_26_drive_0106_sync 0000000219 l
498 | 2011_09_26/2011_09_26_drive_0117_sync 0000000312 l
499 | 2011_09_26/2011_09_26_drive_0117_sync 0000000494 l
500 | 2011_09_26/2011_09_26_drive_0117_sync 0000000104 l
501 | 2011_09_26/2011_09_26_drive_0117_sync 0000000130 l
502 | 2011_09_26/2011_09_26_drive_0117_sync 0000000156 l
503 | 2011_09_26/2011_09_26_drive_0117_sync 0000000182 l
504 | 2011_09_26/2011_09_26_drive_0117_sync 0000000598 l
505 | 2011_09_26/2011_09_26_drive_0117_sync 0000000416 l
506 | 2011_09_26/2011_09_26_drive_0117_sync 0000000364 l
507 | 2011_09_26/2011_09_26_drive_0117_sync 0000000026 l
508 | 2011_09_26/2011_09_26_drive_0117_sync 0000000078 l
509 | 2011_09_26/2011_09_26_drive_0117_sync 0000000572 l
510 | 2011_09_26/2011_09_26_drive_0117_sync 0000000468 l
511 | 2011_09_26/2011_09_26_drive_0117_sync 0000000260 l
512 | 2011_09_26/2011_09_26_drive_0117_sync 0000000624 l
513 | 2011_09_26/2011_09_26_drive_0117_sync 0000000234 l
514 | 2011_09_26/2011_09_26_drive_0117_sync 0000000442 l
515 | 2011_09_26/2011_09_26_drive_0117_sync 0000000390 l
516 | 2011_09_26/2011_09_26_drive_0117_sync 0000000546 l
517 | 2011_09_26/2011_09_26_drive_0117_sync 0000000286 l
518 | 2011_09_26/2011_09_26_drive_0117_sync 0000000000 l
519 | 2011_09_26/2011_09_26_drive_0117_sync 0000000338 l
520 | 2011_09_26/2011_09_26_drive_0117_sync 0000000208 l
521 | 2011_09_26/2011_09_26_drive_0117_sync 0000000650 l
522 | 2011_09_26/2011_09_26_drive_0117_sync 0000000052 l
523 | 2011_09_28/2011_09_28_drive_0002_sync 0000000024 l
524 | 2011_09_28/2011_09_28_drive_0002_sync 0000000021 l
525 | 2011_09_28/2011_09_28_drive_0002_sync 0000000036 l
526 | 2011_09_28/2011_09_28_drive_0002_sync 0000000000 l
527 | 2011_09_28/2011_09_28_drive_0002_sync 0000000051 l
528 | 2011_09_28/2011_09_28_drive_0002_sync 0000000018 l
529 | 2011_09_28/2011_09_28_drive_0002_sync 0000000033 l
530 | 2011_09_28/2011_09_28_drive_0002_sync 0000000090 l
531 | 2011_09_28/2011_09_28_drive_0002_sync 0000000045 l
532 | 2011_09_28/2011_09_28_drive_0002_sync 0000000054 l
533 | 2011_09_28/2011_09_28_drive_0002_sync 0000000012 l
534 | 2011_09_28/2011_09_28_drive_0002_sync 0000000039 l
535 | 2011_09_28/2011_09_28_drive_0002_sync 0000000009 l
536 | 2011_09_28/2011_09_28_drive_0002_sync 0000000003 l
537 | 2011_09_28/2011_09_28_drive_0002_sync 0000000030 l
538 | 2011_09_28/2011_09_28_drive_0002_sync 0000000078 l
539 | 2011_09_28/2011_09_28_drive_0002_sync 0000000060 l
540 | 2011_09_28/2011_09_28_drive_0002_sync 0000000048 l
541 | 2011_09_28/2011_09_28_drive_0002_sync 0000000084 l
542 | 2011_09_28/2011_09_28_drive_0002_sync 0000000081 l
543 | 2011_09_28/2011_09_28_drive_0002_sync 0000000006 l
544 | 2011_09_28/2011_09_28_drive_0002_sync 0000000057 l
545 | 2011_09_28/2011_09_28_drive_0002_sync 0000000072 l
546 | 2011_09_28/2011_09_28_drive_0002_sync 0000000087 l
547 | 2011_09_28/2011_09_28_drive_0002_sync 0000000063 l
548 | 2011_09_29/2011_09_29_drive_0071_sync 0000000252 l
549 | 2011_09_29/2011_09_29_drive_0071_sync 0000000540 l
550 | 2011_09_29/2011_09_29_drive_0071_sync 0000001054 l
551 | 2011_09_29/2011_09_29_drive_0071_sync 0000000036 l
552 | 2011_09_29/2011_09_29_drive_0071_sync 0000000360 l
553 | 2011_09_29/2011_09_29_drive_0071_sync 0000000807 l
554 | 2011_09_29/2011_09_29_drive_0071_sync 0000000879 l
555 | 2011_09_29/2011_09_29_drive_0071_sync 0000000288 l
556 | 2011_09_29/2011_09_29_drive_0071_sync 0000000771 l
557 | 2011_09_29/2011_09_29_drive_0071_sync 0000000000 l
558 | 2011_09_29/2011_09_29_drive_0071_sync 0000000216 l
559 | 2011_09_29/2011_09_29_drive_0071_sync 0000000951 l
560 | 2011_09_29/2011_09_29_drive_0071_sync 0000000324 l
561 | 2011_09_29/2011_09_29_drive_0071_sync 0000000432 l
562 | 2011_09_29/2011_09_29_drive_0071_sync 0000000504 l
563 | 2011_09_29/2011_09_29_drive_0071_sync 0000000576 l
564 | 2011_09_29/2011_09_29_drive_0071_sync 0000000108 l
565 | 2011_09_29/2011_09_29_drive_0071_sync 0000000180 l
566 | 2011_09_29/2011_09_29_drive_0071_sync 0000000072 l
567 | 2011_09_29/2011_09_29_drive_0071_sync 0000000612 l
568 | 2011_09_29/2011_09_29_drive_0071_sync 0000000915 l
569 | 2011_09_29/2011_09_29_drive_0071_sync 0000000735 l
570 | 2011_09_29/2011_09_29_drive_0071_sync 0000000144 l
571 | 2011_09_29/2011_09_29_drive_0071_sync 0000000396 l
572 | 2011_09_29/2011_09_29_drive_0071_sync 0000000468 l
573 | 2011_09_30/2011_09_30_drive_0016_sync 0000000132 l
574 | 2011_09_30/2011_09_30_drive_0016_sync 0000000011 l
575 | 2011_09_30/2011_09_30_drive_0016_sync 0000000154 l
576 | 2011_09_30/2011_09_30_drive_0016_sync 0000000022 l
577 | 2011_09_30/2011_09_30_drive_0016_sync 0000000242 l
578 | 2011_09_30/2011_09_30_drive_0016_sync 0000000198 l
579 | 2011_09_30/2011_09_30_drive_0016_sync 0000000176 l
580 | 2011_09_30/2011_09_30_drive_0016_sync 0000000231 l
581 | 2011_09_30/2011_09_30_drive_0016_sync 0000000275 l
582 | 2011_09_30/2011_09_30_drive_0016_sync 0000000220 l
583 | 2011_09_30/2011_09_30_drive_0016_sync 0000000088 l
584 | 2011_09_30/2011_09_30_drive_0016_sync 0000000143 l
585 | 2011_09_30/2011_09_30_drive_0016_sync 0000000055 l
586 | 2011_09_30/2011_09_30_drive_0016_sync 0000000033 l
587 | 2011_09_30/2011_09_30_drive_0016_sync 0000000187 l
588 | 2011_09_30/2011_09_30_drive_0016_sync 0000000110 l
589 | 2011_09_30/2011_09_30_drive_0016_sync 0000000044 l
590 | 2011_09_30/2011_09_30_drive_0016_sync 0000000077 l
591 | 2011_09_30/2011_09_30_drive_0016_sync 0000000066 l
592 | 2011_09_30/2011_09_30_drive_0016_sync 0000000000 l
593 | 2011_09_30/2011_09_30_drive_0016_sync 0000000165 l
594 | 2011_09_30/2011_09_30_drive_0016_sync 0000000264 l
595 | 2011_09_30/2011_09_30_drive_0016_sync 0000000253 l
596 | 2011_09_30/2011_09_30_drive_0016_sync 0000000209 l
597 | 2011_09_30/2011_09_30_drive_0016_sync 0000000121 l
598 | 2011_09_30/2011_09_30_drive_0018_sync 0000000107 l
599 | 2011_09_30/2011_09_30_drive_0018_sync 0000002247 l
600 | 2011_09_30/2011_09_30_drive_0018_sync 0000001391 l
601 | 2011_09_30/2011_09_30_drive_0018_sync 0000000535 l
602 | 2011_09_30/2011_09_30_drive_0018_sync 0000001819 l
603 | 2011_09_30/2011_09_30_drive_0018_sync 0000001177 l
604 | 2011_09_30/2011_09_30_drive_0018_sync 0000000428 l
605 | 2011_09_30/2011_09_30_drive_0018_sync 0000001926 l
606 | 2011_09_30/2011_09_30_drive_0018_sync 0000000749 l
607 | 2011_09_30/2011_09_30_drive_0018_sync 0000001284 l
608 | 2011_09_30/2011_09_30_drive_0018_sync 0000002140 l
609 | 2011_09_30/2011_09_30_drive_0018_sync 0000001605 l
610 | 2011_09_30/2011_09_30_drive_0018_sync 0000001498 l
611 | 2011_09_30/2011_09_30_drive_0018_sync 0000000642 l
612 | 2011_09_30/2011_09_30_drive_0018_sync 0000002740 l
613 | 2011_09_30/2011_09_30_drive_0018_sync 0000002419 l
614 | 2011_09_30/2011_09_30_drive_0018_sync 0000000856 l
615 | 2011_09_30/2011_09_30_drive_0018_sync 0000002526 l
616 | 2011_09_30/2011_09_30_drive_0018_sync 0000001712 l
617 | 2011_09_30/2011_09_30_drive_0018_sync 0000001070 l
618 | 2011_09_30/2011_09_30_drive_0018_sync 0000000000 l
619 | 2011_09_30/2011_09_30_drive_0018_sync 0000002033 l
620 | 2011_09_30/2011_09_30_drive_0018_sync 0000000214 l
621 | 2011_09_30/2011_09_30_drive_0018_sync 0000000963 l
622 | 2011_09_30/2011_09_30_drive_0018_sync 0000002633 l
623 | 2011_09_30/2011_09_30_drive_0027_sync 0000000533 l
624 | 2011_09_30/2011_09_30_drive_0027_sync 0000001040 l
625 | 2011_09_30/2011_09_30_drive_0027_sync 0000000082 l
626 | 2011_09_30/2011_09_30_drive_0027_sync 0000000205 l
627 | 2011_09_30/2011_09_30_drive_0027_sync 0000000835 l
628 | 2011_09_30/2011_09_30_drive_0027_sync 0000000451 l
629 | 2011_09_30/2011_09_30_drive_0027_sync 0000000164 l
630 | 2011_09_30/2011_09_30_drive_0027_sync 0000000794 l
631 | 2011_09_30/2011_09_30_drive_0027_sync 0000000328 l
632 | 2011_09_30/2011_09_30_drive_0027_sync 0000000615 l
633 | 2011_09_30/2011_09_30_drive_0027_sync 0000000917 l
634 | 2011_09_30/2011_09_30_drive_0027_sync 0000000369 l
635 | 2011_09_30/2011_09_30_drive_0027_sync 0000000287 l
636 | 2011_09_30/2011_09_30_drive_0027_sync 0000000123 l
637 | 2011_09_30/2011_09_30_drive_0027_sync 0000000876 l
638 | 2011_09_30/2011_09_30_drive_0027_sync 0000000410 l
639 | 2011_09_30/2011_09_30_drive_0027_sync 0000000492 l
640 | 2011_09_30/2011_09_30_drive_0027_sync 0000000958 l
641 | 2011_09_30/2011_09_30_drive_0027_sync 0000000656 l
642 | 2011_09_30/2011_09_30_drive_0027_sync 0000000000 l
643 | 2011_09_30/2011_09_30_drive_0027_sync 0000000753 l
644 | 2011_09_30/2011_09_30_drive_0027_sync 0000000574 l
645 | 2011_09_30/2011_09_30_drive_0027_sync 0000001081 l
646 | 2011_09_30/2011_09_30_drive_0027_sync 0000000041 l
647 | 2011_09_30/2011_09_30_drive_0027_sync 0000000246 l
648 | 2011_10_03/2011_10_03_drive_0027_sync 0000002906 l
649 | 2011_10_03/2011_10_03_drive_0027_sync 0000002544 l
650 | 2011_10_03/2011_10_03_drive_0027_sync 0000000362 l
651 | 2011_10_03/2011_10_03_drive_0027_sync 0000004535 l
652 | 2011_10_03/2011_10_03_drive_0027_sync 0000000734 l
653 | 2011_10_03/2011_10_03_drive_0027_sync 0000001096 l
654 | 2011_10_03/2011_10_03_drive_0027_sync 0000004173 l
655 | 2011_10_03/2011_10_03_drive_0027_sync 0000000543 l
656 | 2011_10_03/2011_10_03_drive_0027_sync 0000001277 l
657 | 2011_10_03/2011_10_03_drive_0027_sync 0000004354 l
658 | 2011_10_03/2011_10_03_drive_0027_sync 0000001458 l
659 | 2011_10_03/2011_10_03_drive_0027_sync 0000001820 l
660 | 2011_10_03/2011_10_03_drive_0027_sync 0000003449 l
661 | 2011_10_03/2011_10_03_drive_0027_sync 0000003268 l
662 | 2011_10_03/2011_10_03_drive_0027_sync 0000000915 l
663 | 2011_10_03/2011_10_03_drive_0027_sync 0000002363 l
664 | 2011_10_03/2011_10_03_drive_0027_sync 0000002725 l
665 | 2011_10_03/2011_10_03_drive_0027_sync 0000000181 l
666 | 2011_10_03/2011_10_03_drive_0027_sync 0000001639 l
667 | 2011_10_03/2011_10_03_drive_0027_sync 0000003992 l
668 | 2011_10_03/2011_10_03_drive_0027_sync 0000003087 l
669 | 2011_10_03/2011_10_03_drive_0027_sync 0000002001 l
670 | 2011_10_03/2011_10_03_drive_0027_sync 0000003811 l
671 | 2011_10_03/2011_10_03_drive_0027_sync 0000003630 l
672 | 2011_10_03/2011_10_03_drive_0027_sync 0000000000 l
673 | 2011_10_03/2011_10_03_drive_0047_sync 0000000096 l
674 | 2011_10_03/2011_10_03_drive_0047_sync 0000000800 l
675 | 2011_10_03/2011_10_03_drive_0047_sync 0000000320 l
676 | 2011_10_03/2011_10_03_drive_0047_sync 0000000576 l
677 | 2011_10_03/2011_10_03_drive_0047_sync 0000000000 l
678 | 2011_10_03/2011_10_03_drive_0047_sync 0000000480 l
679 | 2011_10_03/2011_10_03_drive_0047_sync 0000000640 l
680 | 2011_10_03/2011_10_03_drive_0047_sync 0000000032 l
681 | 2011_10_03/2011_10_03_drive_0047_sync 0000000384 l
682 | 2011_10_03/2011_10_03_drive_0047_sync 0000000160 l
683 | 2011_10_03/2011_10_03_drive_0047_sync 0000000704 l
684 | 2011_10_03/2011_10_03_drive_0047_sync 0000000736 l
685 | 2011_10_03/2011_10_03_drive_0047_sync 0000000672 l
686 | 2011_10_03/2011_10_03_drive_0047_sync 0000000064 l
687 | 2011_10_03/2011_10_03_drive_0047_sync 0000000288 l
688 | 2011_10_03/2011_10_03_drive_0047_sync 0000000352 l
689 | 2011_10_03/2011_10_03_drive_0047_sync 0000000512 l
690 | 2011_10_03/2011_10_03_drive_0047_sync 0000000544 l
691 | 2011_10_03/2011_10_03_drive_0047_sync 0000000608 l
692 | 2011_10_03/2011_10_03_drive_0047_sync 0000000128 l
693 | 2011_10_03/2011_10_03_drive_0047_sync 0000000224 l
694 | 2011_10_03/2011_10_03_drive_0047_sync 0000000416 l
695 | 2011_10_03/2011_10_03_drive_0047_sync 0000000192 l
696 | 2011_10_03/2011_10_03_drive_0047_sync 0000000448 l
697 | 2011_10_03/2011_10_03_drive_0047_sync 0000000768 l
698 |
--------------------------------------------------------------------------------
/dataset/kitti_archives_to_download.txt:
--------------------------------------------------------------------------------
1 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_calib.zip
2 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0001/2011_09_26_drive_0001_sync.zip
3 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0002/2011_09_26_drive_0002_sync.zip
4 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0005/2011_09_26_drive_0005_sync.zip
5 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0009/2011_09_26_drive_0009_sync.zip
6 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0011/2011_09_26_drive_0011_sync.zip
7 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0013/2011_09_26_drive_0013_sync.zip
8 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0014/2011_09_26_drive_0014_sync.zip
9 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0015/2011_09_26_drive_0015_sync.zip
10 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0017/2011_09_26_drive_0017_sync.zip
11 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0018/2011_09_26_drive_0018_sync.zip
12 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0019/2011_09_26_drive_0019_sync.zip
13 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0020/2011_09_26_drive_0020_sync.zip
14 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0022/2011_09_26_drive_0022_sync.zip
15 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0023/2011_09_26_drive_0023_sync.zip
16 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0027/2011_09_26_drive_0027_sync.zip
17 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0028/2011_09_26_drive_0028_sync.zip
18 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0029/2011_09_26_drive_0029_sync.zip
19 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0032/2011_09_26_drive_0032_sync.zip
20 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0035/2011_09_26_drive_0035_sync.zip
21 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0036/2011_09_26_drive_0036_sync.zip
22 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0039/2011_09_26_drive_0039_sync.zip
23 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0046/2011_09_26_drive_0046_sync.zip
24 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0048/2011_09_26_drive_0048_sync.zip
25 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0051/2011_09_26_drive_0051_sync.zip
26 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0052/2011_09_26_drive_0052_sync.zip
27 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0056/2011_09_26_drive_0056_sync.zip
28 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0057/2011_09_26_drive_0057_sync.zip
29 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0059/2011_09_26_drive_0059_sync.zip
30 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0060/2011_09_26_drive_0060_sync.zip
31 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0061/2011_09_26_drive_0061_sync.zip
32 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0064/2011_09_26_drive_0064_sync.zip
33 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0070/2011_09_26_drive_0070_sync.zip
34 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0079/2011_09_26_drive_0079_sync.zip
35 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0084/2011_09_26_drive_0084_sync.zip
36 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0086/2011_09_26_drive_0086_sync.zip
37 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0087/2011_09_26_drive_0087_sync.zip
38 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0091/2011_09_26_drive_0091_sync.zip
39 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0093/2011_09_26_drive_0093_sync.zip
40 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0095/2011_09_26_drive_0095_sync.zip
41 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0096/2011_09_26_drive_0096_sync.zip
42 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0101/2011_09_26_drive_0101_sync.zip
43 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0104/2011_09_26_drive_0104_sync.zip
44 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0106/2011_09_26_drive_0106_sync.zip
45 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0113/2011_09_26_drive_0113_sync.zip
46 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0117/2011_09_26_drive_0117_sync.zip
47 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_28_calib.zip
48 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_28_drive_0001/2011_09_28_drive_0001_sync.zip
49 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_28_drive_0002/2011_09_28_drive_0002_sync.zip
50 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_29_calib.zip
51 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_29_drive_0004/2011_09_29_drive_0004_sync.zip
52 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_29_drive_0026/2011_09_29_drive_0026_sync.zip
53 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_29_drive_0071/2011_09_29_drive_0071_sync.zip
54 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_30_calib.zip
55 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_30_drive_0016/2011_09_30_drive_0016_sync.zip
56 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_30_drive_0018/2011_09_30_drive_0018_sync.zip
57 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_30_drive_0020/2011_09_30_drive_0020_sync.zip
58 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_30_drive_0027/2011_09_30_drive_0027_sync.zip
59 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_30_drive_0028/2011_09_30_drive_0028_sync.zip
60 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_30_drive_0033/2011_09_30_drive_0033_sync.zip
61 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_30_drive_0034/2011_09_30_drive_0034_sync.zip
62 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_10_03_calib.zip
63 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_10_03_drive_0027/2011_10_03_drive_0027_sync.zip
64 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_10_03_drive_0034/2011_10_03_drive_0034_sync.zip
65 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_10_03_drive_0042/2011_10_03_drive_0042_sync.zip
66 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_10_03_drive_0047/2011_10_03_drive_0047_sync.zip
67 |
--------------------------------------------------------------------------------
/dataset/kitti_dataset.py:
--------------------------------------------------------------------------------
1 | import os
2 | import cv2
3 | import torch
4 | import random
5 | import numpy as np
6 | import pandas as pd
7 | from PIL import Image
8 | import skimage.transform
9 | from torchvision import transforms
10 | from torch.utils.data import Dataset
11 | from read_depth import generate_depth_map
12 |
13 |
14 | class RandomFlipImage(object):
15 | def __init__(self, is_flip):
16 | self.is_flip = is_flip
17 |
18 | def __call__(self, x):
19 | if not self.is_flip:
20 | return x
21 |
22 | out = x.transpose(Image.FLIP_LEFT_RIGHT)
23 | return out
24 |
25 |
26 | class RandomColorAugImage(object):
27 | def __init__(self, is_color_aug, color_aug):
28 | self.color_aug = color_aug
29 | self.is_color_aug = is_color_aug
30 |
31 | def __call__(self, x):
32 | if not self.is_color_aug:
33 | return x
34 |
35 | out = self.color_aug(x)
36 | return out
37 |
38 |
39 | def pil_loader(path):
40 | # open path as file to avoid ResourceWarning
41 | # (https://github.com/python-pillow/Pillow/issues/835)
42 | with open(path, 'rb') as f:
43 | with Image.open(f) as img:
44 | return img.convert('RGB')
45 |
46 |
47 | def opencv_loader(path):
48 | img = cv2.imread(path)
49 | return cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
50 |
51 |
52 | class KittiDataset(Dataset):
53 | def __init__(self, data_path, img_height, img_width, train, split="eigen_full", depth_hint_path=None, use_depth_hint=False, test=False):
54 | super(KittiDataset, self).__init__()
55 | self.data_path = data_path
56 | self.train = train
57 | self.split = split
58 | self.img_height = img_height
59 | self.img_width = img_width
60 | self.depth_gt_size = (375, 1242)
61 | self.side_map = {"2": 2, "3": 3, "l": 2, "r": 3}
62 |
63 | self.use_depth_hint = use_depth_hint
64 | if self.use_depth_hint:
65 | if depth_hint_path is None:
66 | depth_hint_path = os.path.join(self.data_path, "depth_hints")
67 | self.depth_hint_path = depth_hint_path
68 |
69 | K = np.array([[0.58, 0, 0.5, 0],
70 | [0, 1.92, 0.5, 0],
71 | [0, 0, 1, 0],
72 | [0, 0, 0, 1]], dtype=np.float32)
73 | K[0, :] *= self.img_width
74 | K[1, :] *= self.img_height
75 | self.K = K
76 |
77 | filenames_file = os.path.join(os.path.dirname(__file__), "filenames", split)
78 | if self.train:
79 | filenames_file = os.path.join(filenames_file, "train_files.txt")
80 | elif not test:
81 | filenames_file = os.path.join(filenames_file, "val_files.txt")
82 | else:
83 | filenames_file = os.path.join(filenames_file, "test_files.txt")
84 |
85 | self.filenames = pd.read_table(filenames_file, names=["folder", "frame_idx", "side"], sep=' ')
86 |
87 | def get_img(self, folder, frame_idx, side, loader=pil_loader):
88 | img_path = os.path.join(self.data_path, folder, "image_0{}/data".format(self.side_map[side]), "{:010d}{}".format(frame_idx, ".jpg"))
89 | img = loader(img_path)
90 | return img
91 |
92 | def get_depth_hint(self, folder, frame_idx, side, is_flip):
93 | depth_hint_path = os.path.join(self.depth_hint_path, folder, "image_0{}".format(self.side_map[side]),
94 | "{:010d}{}".format(frame_idx, ".npy"))
95 | depth_hint = np.load(depth_hint_path)[0] # (h, w)
96 | if is_flip:
97 | depth_hint = np.fliplr(depth_hint)
98 | depth_hint = cv2.resize(depth_hint, dsize=(self.img_width, self.img_height), interpolation=cv2.INTER_NEAREST)
99 |
100 | depth_hint = torch.from_numpy(depth_hint).float().unsqueeze(0) # (1, h, w)
101 |
102 | return depth_hint
103 |
104 | def get_depth_gt(self, folder, frame_index, side, is_flip):
105 | calib_path = os.path.join(self.data_path, folder.split("/")[0])
106 |
107 | velo_filename = os.path.join(
108 | self.data_path,
109 | folder,
110 | "velodyne_points/data/{:010d}.bin".format(int(frame_index)))
111 |
112 | assert os.path.isfile(velo_filename), "Frame {} in {} don't have ground truth".format(frame_index, folder)
113 |
114 | depth_gt = generate_depth_map(calib_path, velo_filename, self.side_map[side], True)
115 |
116 | depth_gt = skimage.transform.resize(
117 | depth_gt, self.depth_gt_size, order=0, preserve_range=True, mode='constant')
118 |
119 | if is_flip:
120 | depth_gt = np.fliplr(depth_gt)
121 | # depth_gt = np.expand_dims(depth_gt, 0)
122 | depth_gt = torch.from_numpy(depth_gt.astype(np.float32)) # (h, w)
123 |
124 | return depth_gt
125 |
126 | def transform(self, x, is_flip, is_color_aug, color_aug):
127 | # will be [0,1]
128 | transform = transforms.Compose([
129 | transforms.Resize((self.img_height, self.img_width), interpolation=Image.ANTIALIAS),
130 | RandomFlipImage(is_flip=is_flip),
131 | RandomColorAugImage(is_color_aug=is_color_aug, color_aug=color_aug),
132 | transforms.ToTensor(),
133 | ])
134 | return transform(x)
135 |
136 | def __getitem__(self, index):
137 | """
138 | :param index:
139 | :return: this func need return img shape (b, c, h, w) or (c, h, w)
140 | """
141 | is_flip = random.random() > 0.5 and self.train
142 | is_color_aug = random.random() > 0.5 and self.train
143 | color_aug = transforms.ColorJitter.get_params(brightness=(0.8, 1.2),
144 | contrast=(0.8, 1.2),
145 | saturation=(0.8, 1.2),
146 | hue=(-0.1, 0.1))
147 |
148 | data = {}
149 |
150 | folder, frame_idx, side = self.filenames.loc[index]
151 | data["curr"] = self.transform(self.get_img(folder, frame_idx, side), is_flip, False, color_aug)
152 | data["id"] = index
153 | if self.train:
154 | data["side"] = self.side_map[side]
155 | data["curr_color_aug"] = self.transform(self.get_img(folder, frame_idx, side), is_flip, is_color_aug, color_aug)
156 |
157 | other_side = {"r": "l", "l": "r"}[side]
158 | data["other_side"] = self.transform(self.get_img(folder, frame_idx, other_side), is_flip, False, color_aug)
159 | data["other_side_color_aug"] = self.transform(self.get_img(folder, frame_idx, other_side), is_flip, is_color_aug, color_aug)
160 |
161 | stereo_T = np.eye(4, dtype=np.float32)
162 | baseline_sign = -1 if is_flip else 1
163 | side_sign = -1 if side == "l" else 1
164 | stereo_T[0, 3] = side_sign * baseline_sign * 0.1
165 | data["stereo_T"] = torch.from_numpy(stereo_T)
166 |
167 | if self.use_depth_hint:
168 | data["depth_hint"] = self.get_depth_hint(folder, frame_idx, side, is_flip)
169 |
170 | data["K"] = torch.from_numpy(self.K)
171 |
172 | else:
173 | data["depth_gt"] = self.get_depth_gt(folder, frame_idx, side, is_flip)
174 |
175 | return data
176 |
177 | def __len__(self):
178 | return self.filenames.shape[0]
179 |
180 | def getfilename(self):
181 | return self.filenames
182 |
--------------------------------------------------------------------------------
/main.py:
--------------------------------------------------------------------------------
1 | import os
2 | import argparse
3 | from model import Model
4 |
5 | file_dir = os.path.dirname(__file__)
6 |
7 | parser = argparse.ArgumentParser(description="EPCDepth args")
8 |
9 | # data
10 | parser.add_argument("--data_path", type=str, help="path to the data")
11 | parser.add_argument("--img_height", type=int, help="input image height", default=320)
12 | parser.add_argument("--img_width", type=int, help="input image width", default=1024)
13 |
14 | # device
15 | parser.add_argument("--gpu_id", type=str, default='0')
16 | parser.add_argument("--no_cuda", help="if set disables CUDA", action="store_true")
17 |
18 | # training
19 | parser.add_argument("--start_epoch", type=int, help="start epoch while train", default=0)
20 | parser.add_argument("--logs_dir", type=str, help="path to save the logs", default=os.path.join(file_dir, "logs"))
21 | parser.add_argument("--models_dir", type=str, help="path to save the checkpoints", default=os.path.join(file_dir, "models"))
22 | parser.add_argument("--split", type=str, help="which training split to use", choices=["eigen_full"], default="eigen_full")
23 | parser.add_argument("--num_layers", type=int, help="number of resnet layers", default=18, choices=[18, 34, 50, 101, 152])
24 | parser.add_argument("--batch_size", type=int, help="batch size", default=8)
25 | parser.add_argument("--epochs", type=int, help="number of epochs", default=20)
26 | parser.add_argument("--num_workers", type=int, help="number of dataloader workers", default=4)
27 | parser.add_argument("--learning_rate", type=float, help="learning rate", default=1e-4)
28 | parser.add_argument("--scheduler_step_size", type=int, help="step size of the scheduler", default=15)
29 | parser.add_argument("--disparity_smoothness", type=float, help="disparity smoothness weight", default=0)
30 | parser.add_argument("--spp_loss", type=float, default=1)
31 | parser.add_argument("--disable_automasking", help="if set, doesn't do auto-masking", action="store_true")
32 | parser.add_argument("--use_data_graft", action="store_true")
33 | parser.add_argument("--use_spp_distillate", action="store_true")
34 | parser.add_argument("--use_full_scale", action="store_true")
35 | parser.add_argument("--use_depth_hint", help="if use depth hint", action="store_true")
36 | parser.add_argument("--pretrained", help="if use pretrained encoder", action="store_true")
37 |
38 | # validate
39 | parser.add_argument("--output_scale", type=int, help="output disparity scale, -1 for mean", default=0, choices=[0, 1, 2, -1])
40 | parser.add_argument("--resume", type=str, help="path of models to resume", metavar="PATH", default="")
41 | parser.add_argument("--min_depth", type=float, help="minimum depth", default=0.1)
42 | parser.add_argument("--max_depth", type=float, help="maximum depth", default=100.0)
43 | parser.add_argument("--val_split", type=str, default="eigen", choices=["eigen"])
44 | parser.add_argument("--val", action="store_true")
45 | parser.add_argument("--post_process", action="store_true")
46 | parser.add_argument("--vis", action="store_true", help="visualization")
47 | parser.add_argument("--disps_path", type=str, help="path to the disparity")
48 |
49 |
50 | args = parser.parse_args()
51 |
52 | if __name__ == "__main__":
53 | os.environ['CUDA_VISIBLE_DEVICES'] = args.gpu_id
54 | model = Model(args)
55 | model.main()
56 |
--------------------------------------------------------------------------------
/model.py:
--------------------------------------------------------------------------------
1 | import os
2 | import torch
3 | import random
4 | import datetime
5 | import torch.nn.functional as F
6 | from torch.utils.data import DataLoader
7 | from tensorboardX import SummaryWriter
8 | import progressbar
9 | import numpy as np
10 |
11 | from network.rsu_decoder import RSUDecoder
12 | from network.depth_decoder import DepthDecoder
13 | from network.encoder import resnet_encoder
14 | from dataset.kitti_dataset import KittiDataset
15 | import tools
16 |
17 |
18 | class Model:
19 | def __init__(self, args):
20 | self.args = args
21 |
22 | if args.vis:
23 | return
24 |
25 | self.model = {}
26 | self.device = torch.device("cpu" if self.args.no_cuda or not torch.cuda.is_available() else "cuda")
27 |
28 | self.model["encoder"] = resnet_encoder(num_layers=self.args.num_layers, num_inputs=1,
29 | pretrained=self.args.pretrained).to(self.device)
30 |
31 | if self.args.use_full_scale:
32 | self.model["depth_decoder"] = RSUDecoder(num_output_channels=1, use_encoder_disp=True,
33 | encoder_layer_channels=self.model["encoder"].layer_channels).to(self.device)
34 | else:
35 | self.model["depth_decoder"] = DepthDecoder(num_output_channels=1,
36 | encoder_layer_channels=self.model["encoder"].layer_channels).to(self.device)
37 |
38 | val_dataset = KittiDataset(data_path=self.args.data_path, img_height=self.args.img_height, img_width=self.args.img_width,
39 | train=False, split=self.args.split, test=self.args.val)
40 | self.val_loader = DataLoader(dataset=val_dataset, batch_size=self.args.batch_size, shuffle=False,
41 | num_workers=self.args.num_workers, pin_memory=True)
42 |
43 | if self.args.val:
44 | return
45 |
46 | train_dataset = KittiDataset(data_path=self.args.data_path, img_height=self.args.img_height, img_width=self.args.img_width,
47 | train=True, split=self.args.split, use_depth_hint=self.args.use_depth_hint)
48 | self.train_loader = DataLoader(dataset=train_dataset, batch_size=self.args.batch_size, shuffle=True,
49 | num_workers=self.args.num_workers, pin_memory=True)
50 |
51 | parameters_to_train = list(self.model["encoder"].parameters()) + list(self.model["depth_decoder"].parameters())
52 |
53 | self.optimizer = torch.optim.Adam(parameters_to_train, self.args.learning_rate)
54 | self.lr_scheduler = torch.optim.lr_scheduler.StepLR(self.optimizer, self.args.scheduler_step_size, 0.1)
55 |
56 | self.ssim = tools.SSIM()
57 |
58 | current_time = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
59 | log_dir = os.path.join(self.args.logs_dir, current_time)
60 | self.writer = SummaryWriter(log_dir=log_dir, comment="Record network info")
61 |
62 | self.save_dir = os.path.join(self.args.models_dir, current_time)
63 | os.makedirs(self.save_dir, exist_ok=True)
64 |
65 | def main(self):
66 |
67 | if self.args.vis:
68 | self.visualization()
69 | return
70 |
71 | if self.args.resume:
72 | checkpoint = torch.load(self.args.resume, map_location=self.device)
73 | if not self.args.val:
74 | self.args.start_epoch = checkpoint["epoch"] + 1
75 | self.optimizer.load_state_dict(checkpoint["optimizer"])
76 | self.lr_scheduler.load_state_dict((checkpoint["lr_scheduler"]))
77 | for m_name, _ in self.model.items():
78 | if m_name in checkpoint:
79 | self.model[m_name].load_state_dict(checkpoint[m_name])
80 | else:
81 | print("There is no weight in checkpoint for model {}".format(m_name))
82 |
83 | if self.args.val:
84 | with torch.no_grad():
85 | self.validate()
86 | return
87 |
88 | for epoch in range(self.args.start_epoch, self.args.epochs):
89 |
90 | train_loss = self.train_epoch(epoch)
91 | self.writer.add_scalar("Train Losses", train_loss, epoch)
92 |
93 | with torch.no_grad():
94 | val_errors = self.validate()
95 | self.writer.add_scalar("abs_rel", val_errors[0], epoch)
96 | self.writer.add_scalar("sq_rel", val_errors[1], epoch)
97 | self.writer.add_scalar("rmse", val_errors[2], epoch)
98 | self.writer.add_scalar("rmse_log", val_errors[3], epoch)
99 | self.writer.add_scalar("a1", val_errors[4], epoch)
100 | self.writer.add_scalar("a2", val_errors[5], epoch)
101 | self.writer.add_scalar("a3", val_errors[6], epoch)
102 |
103 | save_filename = os.path.join(self.save_dir, "checkpoint_epoch{}.pth.tar".format(epoch))
104 | model_state = {
105 | "epoch": epoch,
106 | "abs_rel": val_errors[0],
107 | "sq_rel": val_errors[1],
108 | "rmse": val_errors[2],
109 | "rmse_log": val_errors[3],
110 | "a1": val_errors[4],
111 | "a2": val_errors[5],
112 | "a3": val_errors[6],
113 | "optimizer": self.optimizer.state_dict(),
114 | "lr_scheduler": self.lr_scheduler.state_dict()
115 | }
116 | for m_name, m in self.model.items():
117 | model_state[m_name] = m.state_dict()
118 | torch.save(model_state, save_filename)
119 |
120 | self.lr_scheduler.step()
121 | torch.cuda.empty_cache()
122 |
123 | def validate(self):
124 | for m in self.model.values():
125 | m.eval()
126 |
127 | pwidgets = [progressbar.Percentage(), " ", progressbar.Counter(format='%(value)02d/%(max_value)d'), " ", progressbar.Bar(), " ",
128 | progressbar.Timer(), ",", progressbar.Variable('abs_rel', width=1), ",", progressbar.Variable('sq_rel', width=1), ",",
129 | progressbar.Variable('rmse', width=1, precision=4), ",", progressbar.Variable('rmse_log', width=1), ",",
130 | progressbar.Variable('a1', width=1), ",", progressbar.Variable('a2', width=1), ",", progressbar.Variable('a3', width=1)]
131 | pbar = progressbar.ProgressBar(widgets=pwidgets, max_value=len(self.val_loader), prefix="Val:").start()
132 |
133 | all_disps = []
134 | depth_errors_meter = tools.AverageMeter()
135 | for batch, data in enumerate(self.val_loader):
136 | for key, ipt in data.items():
137 | data[key] = ipt.to(self.device, non_blocking=True)
138 |
139 | ipt = data["curr"]
140 | if self.args.post_process:
141 | # Post-processed results require each image to have two forward passes
142 | ipt = torch.cat((ipt, torch.flip(ipt, [3])), 0)
143 |
144 | pred_disps = self.model["depth_decoder"](self.model["encoder"](ipt))
145 | if self.args.output_scale != -1:
146 | pred_disps, _ = tools.disp_to_depth(pred_disps[self.args.output_scale], self.args.min_depth, self.args.max_depth)
147 | pred_disps = pred_disps.data.cpu()[:, 0].numpy()
148 | else:
149 | mean_disps = 0
150 | for i in range(3):
151 | tmp, _ = tools.disp_to_depth(pred_disps[i], self.args.min_depth, self.args.max_depth)
152 | tmp = F.interpolate(tmp, [self.args.img_height, self.args.img_width], mode="bilinear", align_corners=False)
153 | tmp = tmp.data.cpu()[:, 0].numpy()
154 | mean_disps = mean_disps + tmp
155 | mean_disps = mean_disps / 3
156 | pred_disps = mean_disps
157 |
158 | if self.args.post_process:
159 | N = pred_disps.shape[0] // 2
160 | pred_disps = tools.post_process_disparity(pred_disps[:N], pred_disps[N:, :, ::-1])
161 |
162 | all_disps.append(pred_disps)
163 |
164 | depth_gts = data["depth_gt"].data.cpu().numpy()
165 | depth_errors = tools.compute_depth_errors(depth_gts, pred_disps, self.args.val_split, False)
166 |
167 | depth_errors_meter.update(depth_errors, data["curr"].size(0))
168 |
169 | pbar.update(batch, abs_rel=depth_errors_meter.avg[0],
170 | sq_rel=depth_errors_meter.avg[1],
171 | rmse=depth_errors_meter.avg[2],
172 | rmse_log=depth_errors_meter.avg[3],
173 | a1=depth_errors_meter.avg[4],
174 | a2=depth_errors_meter.avg[5],
175 | a3=depth_errors_meter.avg[6])
176 |
177 | pbar.finish()
178 |
179 | all_disps = np.concatenate(all_disps)
180 | if self.args.val:
181 | np.save(os.path.join(self.args.disps_path, "disparities"), all_disps)
182 |
183 | return depth_errors_meter.avg
184 |
185 | def train_epoch(self, epoch):
186 | for m in self.model.values():
187 | m.train()
188 |
189 | pwidgets = [progressbar.Percentage(), " ", progressbar.Counter(format='%(value)02d/%(max_value)d'), " ", progressbar.Bar(), " ",
190 | progressbar.Timer(), ",", progressbar.ETA(), ",", progressbar.Variable('LR', width=1), ",",
191 | progressbar.Variable('Loss')]
192 | pbar = progressbar.ProgressBar(widgets=pwidgets, max_value=len(self.train_loader),
193 | prefix="Epoch {}/{}: ".format(epoch, self.args.epochs)).start()
194 |
195 | losses = tools.AverageMeter()
196 |
197 | for batch, data in enumerate(self.train_loader):
198 | for key, ipt in data.items():
199 | data[key] = ipt.to(self.device, non_blocking=True)
200 |
201 | if self.args.use_data_graft:
202 | data = self.data_graft(data)
203 |
204 | loss, predicts = self.train_step(data)
205 | if self.args.use_spp_distillate:
206 | spp_loss = self.spp_distillate(data, predicts)
207 | loss += self.args.spp_loss * spp_loss
208 |
209 | self.optimizer.zero_grad()
210 | loss.backward()
211 | self.optimizer.step()
212 |
213 | losses.update(val=loss.data, n=data["curr"].size(0))
214 | pbar.update(batch, LR=self.optimizer.state_dict()['param_groups'][0]['lr'],
215 | Loss="{losses.val:.3f}|{losses.avg:.3f}".format(losses=losses))
216 |
217 | pbar.finish()
218 |
219 | return losses.avg
220 |
221 | def spp_distillate(self, data, predicts):
222 | with torch.no_grad():
223 | disp_best = None
224 | decoder_disp_best = None
225 | reproj_loss_min = None
226 | for scale, disp in enumerate(predicts["disparity"]):
227 | reproj_loss = self.compute_reprojection_loss(predicts["warp_from_other_side"][scale], data["curr"])
228 | if scale == 0:
229 | disp_best = disp
230 | reproj_loss_min = reproj_loss
231 | elif scale == 5:
232 | decoder_disp_best = disp_best.clone()
233 | disp_best = disp
234 | reproj_loss_min = reproj_loss
235 | else:
236 | disp_best = torch.where(reproj_loss < reproj_loss_min, disp, disp_best)
237 | reproj_loss_min, _ = torch.cat([reproj_loss, reproj_loss_min], dim=1).min(dim=1, keepdim=True)
238 |
239 | if decoder_disp_best is not None:
240 | decoder_disp_best = decoder_disp_best.detach()
241 | encoder_disp_best = disp_best.detach()
242 | else:
243 | decoder_disp_best = disp_best.detach()
244 |
245 | pp_loss = []
246 | for scale, disp in enumerate(predicts["disparity"]):
247 | disp_best = decoder_disp_best if scale < 5 else encoder_disp_best
248 | pp_loss.append(torch.log(torch.abs(disp_best - disp) + 1).mean())
249 | return torch.stack(pp_loss).mean()
250 |
251 | def train_step(self, data):
252 | predicts = {}
253 | features = self.model["encoder"](data["curr_color_aug"])
254 | predicts["disparity"] = self.model["depth_decoder"](features)
255 | predicts["depth"] = []
256 | for i in range(len(predicts["disparity"])):
257 | predicts["disparity"][i] = F.interpolate(predicts["disparity"][i], [self.args.img_height, self.args.img_width], mode="bilinear",
258 | align_corners=False)
259 | _, depth = tools.disp_to_depth(predicts["disparity"][i], self.args.min_depth, self.args.max_depth)
260 | predicts["depth"].append(depth)
261 |
262 | warp_img = self.get_warp_img(data, predicts)
263 | predicts.update(warp_img)
264 | loss = self.compute_loss(data, predicts)
265 | return loss, predicts
266 |
267 | def data_graft(self, data):
268 | rand_w = random.randint(0, 4) / 5
269 | b, c, h, w = data["curr"].shape
270 | if int(rand_w * h) == 0:
271 | return data
272 | l_num = data["side"][data["side"] == 2].shape[0]
273 | r_num = data["side"][data["side"] == 3].shape[0]
274 | l_graft_idx = torch.randperm(l_num).to(self.device)
275 | r_graft_idx = torch.randperm(r_num).to(self.device)
276 | graft_h = int(rand_w * h)
277 | flip = random.random()
278 | for name in data:
279 | if "curr" in name or "other_side" in name or name == "depth_hint":
280 | data[name][data["side"] == 2, :, graft_h:] = data[name][data["side"] == 2].clone()[l_graft_idx, :, graft_h:]
281 | data[name][data["side"] == 3, :, graft_h:] = data[name][data["side"] == 3].clone()[r_graft_idx, :, graft_h:]
282 | if flip < 0.5:
283 | d = data[name].clone()
284 | data[name][:, :, :-graft_h] = d[:, :, graft_h:]
285 | data[name][:, :, -graft_h:] = d[:, :, :graft_h]
286 | return data
287 |
288 | def get_warp_img(self, data, predicts):
289 | warp_img = {}
290 |
291 | K = data["K"]
292 | T = data["stereo_T"]
293 |
294 | if self.args.use_depth_hint:
295 | D = data["depth_hint"]
296 | warp_img["warp_from_hint"] = tools.generate_warp_image(data["other_side"], K, T, D)
297 |
298 | warp_img["warp_from_other_side"] = []
299 | for D in predicts["depth"]:
300 | warp_img["warp_from_other_side"].append(tools.generate_warp_image(data["other_side"], K, T, D))
301 |
302 | return warp_img
303 |
304 | def compute_loss(self, data, predicts):
305 | target = data["curr"]
306 | losses = []
307 |
308 | proxy_supervised = None
309 | proxy_supervised_loss = None
310 | if self.args.use_depth_hint:
311 | depth_hint_reproj_loss = self.compute_reprojection_loss(predicts["warp_from_hint"], target)
312 | depth_hint_reproj_loss += 1000 * (data["depth_hint"] <= 0).float()
313 | if proxy_supervised_loss is None:
314 | proxy_supervised_loss = depth_hint_reproj_loss
315 | proxy_supervised = data["depth_hint"]
316 |
317 | for scale in range(len(predicts["disparity"])):
318 | scale_losses = []
319 |
320 | reprojection_loss = self.compute_reprojection_loss(predicts["warp_from_other_side"][scale], target)
321 | all_reprojection_loss = reprojection_loss
322 |
323 | if not self.args.disable_automasking:
324 | identity_reprojection_loss = self.compute_reprojection_loss(data["other_side"], target)
325 | identity_reprojection_loss += torch.randn(identity_reprojection_loss.shape).to(self.device) * 0.00001
326 | all_reprojection_loss = torch.cat((all_reprojection_loss, identity_reprojection_loss), dim=1)
327 |
328 | loss1 = self.compute_loss_with_proxy_supervised(all_reprojection_loss, proxy_supervised_loss, proxy_supervised,
329 | predicts, scale, data)
330 | scale_losses.append(loss1)
331 |
332 | if self.args.disparity_smoothness != 0:
333 | mean_disp = predicts["disparity"][scale].mean(2, True).mean(3, True)
334 | norm_disp = predicts["disparity"][scale] / (mean_disp + 1e-7)
335 | smooth_loss = self.args.disparity_smoothness * self.compute_smooth_loss(norm_disp, target) / (2 ** scale)
336 | scale_losses.append(smooth_loss)
337 |
338 | losses.append(torch.sum(torch.stack(scale_losses)))
339 |
340 | return torch.mean(torch.stack(losses))
341 |
342 | def compute_loss_with_proxy_supervised(self, all_reprojection_loss, proxy_supervised_loss, proxy_supervised, predicts, scale, data):
343 | if proxy_supervised_loss is not None:
344 | all_reprojection_loss = torch.cat((all_reprojection_loss, proxy_supervised_loss), dim=1)
345 | idxs = torch.argmin(all_reprojection_loss, dim=1, keepdim=True)
346 | if self.args.disable_automasking:
347 | reproj_loss_mask = torch.ones_like(all_reprojection_loss[:, [0]])
348 | proxy_supervised_mask = (idxs == 1).float() # will be zero if proxy_supervised_loss is None
349 | else:
350 | reproj_loss_mask = (idxs != 1).float()
351 | proxy_supervised_mask = (idxs == 2).float()
352 |
353 | reproj_loss = all_reprojection_loss[:, [0]] * reproj_loss_mask
354 | reproj_loss = reproj_loss.sum() / (reproj_loss_mask.sum() + 1e-7)
355 | reproj_loss_with_proxy_supervised = reproj_loss
356 |
357 | if proxy_supervised_loss is not None:
358 | proxy_supervised_loss = self.compute_proxy_supervised_loss(predicts["depth"][scale], proxy_supervised, proxy_supervised_mask)
359 | reproj_loss_with_proxy_supervised += proxy_supervised_loss
360 |
361 | return reproj_loss_with_proxy_supervised
362 |
363 | @staticmethod
364 | def compute_proxy_supervised_loss(pred, target, loss_mask):
365 | loss = torch.log(torch.abs(target - pred) + 1)
366 | loss = loss * loss_mask
367 | loss = loss.sum() / (loss_mask.sum() + 1e-7)
368 | return loss
369 |
370 | @staticmethod
371 | def compute_smooth_loss(disp, img):
372 | """Computes the smoothness loss for a disparity image
373 | The color image is used for edge-aware smoothness
374 | """
375 | img = F.interpolate(img, disp.shape[2:], mode="bilinear", align_corners=False)
376 |
377 | grad_disp_x = torch.abs(disp[:, :, :, :-1] - disp[:, :, :, 1:])
378 | grad_disp_y = torch.abs(disp[:, :, :-1, :] - disp[:, :, 1:, :])
379 |
380 | grad_img_x = torch.mean(torch.abs(img[:, :, :, :-1] - img[:, :, :, 1:]), 1, keepdim=True)
381 | grad_img_y = torch.mean(torch.abs(img[:, :, :-1, :] - img[:, :, 1:, :]), 1, keepdim=True)
382 |
383 | grad_disp_x *= torch.exp(-grad_img_x)
384 | grad_disp_y *= torch.exp(-grad_img_y)
385 |
386 | smooth_loss = grad_disp_x.mean() + grad_disp_y.mean()
387 |
388 | return smooth_loss
389 |
390 | def compute_reprojection_loss(self, pred, target):
391 | """Computes reprojection loss between a batch of predicted and target images
392 | """
393 | abs_diff = torch.abs(target - pred)
394 | l1_loss = abs_diff.mean(1, True)
395 |
396 | ssim_loss = self.ssim(pred, target).mean(1, True)
397 | reprojection_loss = 0.85 * ssim_loss + 0.15 * l1_loss
398 | return reprojection_loss
399 |
400 | def visualization(self):
401 | import matplotlib as mpl
402 | import matplotlib.cm as cm
403 | from PIL import Image
404 |
405 | assert self.args.disps_path is not None, "Your disparity save path is None!"
406 |
407 | save_dir = os.path.join(os.path.dirname(self.args.disps_path), "disps_vis")
408 | os.makedirs(save_dir, exist_ok=True)
409 | disps = np.load(self.args.disps_path)
410 | for idx, pred_disp in enumerate(disps):
411 | vmax = np.percentile(pred_disp, 95)
412 | normalizer = mpl.colors.Normalize(vmin=pred_disp.min(), vmax=vmax)
413 | mapper = cm.ScalarMappable(norm=normalizer, cmap='magma')
414 | colormapped_im = (mapper.to_rgba(pred_disp)[:, :, :3] * 255).astype(np.uint8)
415 | im = Image.fromarray(colormapped_im)
416 | im.save(os.path.join(save_dir, "disp{}.png".format(idx)))
417 |
418 | print("Successfully visualize {} disparity maps to {}".format(disps.shape[0], save_dir))
419 |
--------------------------------------------------------------------------------
/network/depth_decoder.py:
--------------------------------------------------------------------------------
1 | import torch
2 | import torch.nn as nn
3 |
4 |
5 | class Conv3x3(nn.Module):
6 | def __init__(self, in_channels, out_channels, use_refl=True):
7 | super(Conv3x3, self).__init__()
8 |
9 | if use_refl:
10 | self.pad = nn.ReflectionPad2d(1)
11 | else:
12 | self.pad = nn.ZeroPad2d(1)
13 | self.conv = nn.Conv2d(int(in_channels), int(out_channels), 3)
14 |
15 | def forward(self, inputs):
16 | inputs = self.pad(inputs)
17 | out = self.conv(inputs)
18 | return out
19 |
20 |
21 | class UpConv(nn.Module):
22 | def __init__(self, in_channels, out_channels):
23 | super(UpConv, self).__init__()
24 | self.upsamp = nn.UpsamplingNearest2d(scale_factor=2)
25 | self.conv = Conv3x3(in_channels=in_channels, out_channels=out_channels)
26 | self.elu = nn.ELU(inplace=True)
27 |
28 | def forward(self, inputs):
29 | out = self.upsamp(inputs)
30 | out = self.conv(out)
31 | out = self.elu(out)
32 | return out
33 |
34 |
35 | class IConv(nn.Module):
36 | def __init__(self, in_channels, out_channels):
37 | super(IConv, self).__init__()
38 | self.conv = Conv3x3(in_channels=in_channels, out_channels=out_channels)
39 | self.elu = nn.ELU(inplace=True)
40 |
41 | def forward(self, inputs):
42 | out = self.conv(inputs)
43 | out = self.elu(out)
44 | return out
45 |
46 |
47 | class DispConv(nn.Module):
48 | def __init__(self, in_channels, out_channels):
49 | super(DispConv, self).__init__()
50 | self.conv = Conv3x3(in_channels=in_channels, out_channels=out_channels)
51 | self.sigmod = nn.Sigmoid()
52 |
53 | def forward(self, inputs):
54 | out = self.conv(inputs)
55 | out = self.sigmod(out)
56 | return out
57 |
58 |
59 | class DepthDecoder(nn.Module):
60 | def __init__(self, encoder_layer_channels, num_output_channels=1):
61 | super(DepthDecoder, self).__init__()
62 |
63 | decoder_layer_channels = [256, 128, 64, 32, 16]
64 |
65 | self.upconv5 = UpConv(encoder_layer_channels[-1], decoder_layer_channels[0])
66 | self.iconv5 = IConv(in_channels=decoder_layer_channels[0] + encoder_layer_channels[-2], out_channels=decoder_layer_channels[0])
67 |
68 | self.upconv4 = UpConv(decoder_layer_channels[0], decoder_layer_channels[1])
69 | self.iconv4 = IConv(in_channels=decoder_layer_channels[1] + encoder_layer_channels[-3], out_channels=decoder_layer_channels[1])
70 |
71 | self.upconv3 = UpConv(decoder_layer_channels[1], decoder_layer_channels[2])
72 | self.iconv3 = IConv(in_channels=decoder_layer_channels[2] + encoder_layer_channels[-4], out_channels=decoder_layer_channels[2])
73 |
74 | self.upconv2 = UpConv(decoder_layer_channels[2], decoder_layer_channels[3])
75 | self.iconv2 = IConv(in_channels=decoder_layer_channels[3] + encoder_layer_channels[-5], out_channels=decoder_layer_channels[3])
76 |
77 | self.upconv1 = UpConv(decoder_layer_channels[3], decoder_layer_channels[4])
78 | self.iconv1 = IConv(in_channels=decoder_layer_channels[4], out_channels=decoder_layer_channels[4])
79 |
80 | self.disps = nn.ModuleList()
81 | for channel in decoder_layer_channels[1:]:
82 | self.disps.append(DispConv(channel, num_output_channels))
83 |
84 | def forward(self, inputs):
85 | # decoder
86 | up5 = self.upconv5(inputs[-1])
87 | i5 = self.iconv5(torch.cat([up5, inputs[-2]], dim=1))
88 |
89 | up4 = self.upconv4(i5)
90 | i4 = self.iconv4(torch.cat([up4, inputs[-3]], dim=1))
91 |
92 | up3 = self.upconv3(i4)
93 | i3 = self.iconv3(torch.cat([up3, inputs[-4]], dim=1))
94 |
95 | up2 = self.upconv2(i3)
96 | i2 = self.iconv2(torch.cat([up2, inputs[-5]], dim=1))
97 |
98 | up1 = self.upconv1(i2)
99 | i1 = self.iconv1(up1)
100 |
101 | disp_features = [i4, i3, i2, i1]
102 | disps = []
103 | for i in range(len(disp_features)):
104 | disps.append(self.disps[i](disp_features[i]))
105 |
106 | return disps[::-1]
--------------------------------------------------------------------------------
/network/encoder.py:
--------------------------------------------------------------------------------
1 | import torch
2 | import numpy as np
3 | import torch.nn as nn
4 | import torchvision.models as models
5 | import torch.utils.model_zoo as model_zoo
6 |
7 |
8 | class ResNetMultiImageInput(models.ResNet):
9 | """Constructs a resnet model with varying number of input images.
10 | Adapted from https://github.com/pytorch/vision/blob/master/torchvision/models/resnet.py
11 | """
12 | def __init__(self, block, layers, num_classes=1000, num_input_images=1):
13 | super(ResNetMultiImageInput, self).__init__(block, layers)
14 | self.inplanes = 64
15 | self.conv1 = nn.Conv2d(
16 | num_input_images * 3, 64, kernel_size=7, stride=2, padding=3, bias=False)
17 | self.bn1 = nn.BatchNorm2d(64)
18 | self.relu = nn.ReLU(inplace=True)
19 | self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)
20 | self.layer1 = self._make_layer(block, 64, layers[0])
21 | self.layer2 = self._make_layer(block, 128, layers[1], stride=2)
22 | self.layer3 = self._make_layer(block, 256, layers[2], stride=2)
23 | self.layer4 = self._make_layer(block, 512, layers[3], stride=2)
24 |
25 | for m in self.modules():
26 | if isinstance(m, nn.Conv2d):
27 | nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')
28 | elif isinstance(m, nn.BatchNorm2d):
29 | nn.init.constant_(m.weight, 1)
30 | nn.init.constant_(m.bias, 0)
31 |
32 |
33 | def resnet_multiimage_input(num_layers, pretrained=False, num_input_images=1):
34 | """Constructs a ResNet model.
35 | Args:
36 | num_layers (int): Number of resnet layers. Must be 18 or 50
37 | pretrained (bool): If True, returns a model pre-trained on ImageNet
38 | num_input_images (int): Number of frames stacked as input
39 | """
40 | assert num_layers in [18, 50], "Can only run with 18 or 50 layer resnet"
41 | blocks = {18: [2, 2, 2, 2], 50: [3, 4, 6, 3]}[num_layers]
42 | block_type = {18: models.resnet.BasicBlock, 50: models.resnet.Bottleneck}[num_layers]
43 | model = ResNetMultiImageInput(block_type, blocks, num_input_images=num_input_images)
44 |
45 | if pretrained:
46 | loaded = model_zoo.load_url(models.resnet.model_urls['resnet{}'.format(num_layers)])
47 | loaded['conv1.weight'] = torch.cat(
48 | [loaded['conv1.weight']] * num_input_images, 1) / num_input_images
49 | model.load_state_dict(loaded)
50 | return model
51 |
52 |
53 | class resnet_encoder(nn.Module):
54 | """Pytorch module for a resnet encoder
55 | """
56 | def __init__(self, num_layers, pretrained, num_inputs=1):
57 | super(resnet_encoder, self).__init__()
58 |
59 | self.layer_channels = np.array([64, 64, 128, 256, 512])
60 |
61 | resnets = {18: models.resnet18,
62 | 34: models.resnet34,
63 | 50: models.resnet50,
64 | 101: models.resnet101,
65 | 152: models.resnet152}
66 |
67 | if num_layers not in resnets:
68 | raise ValueError("{} is not a valid number of resnet layers".format(num_layers))
69 |
70 | if num_inputs > 1:
71 | self.encoder = resnet_multiimage_input(num_layers, pretrained, num_inputs)
72 | else:
73 | self.encoder = resnets[num_layers](pretrained)
74 |
75 | if num_layers > 34:
76 | self.layer_channels[1:] *= 4
77 |
78 | def forward(self, input_image):
79 | self.features = []
80 | x = (input_image - 0.45) / 0.225
81 | x = self.encoder.conv1(x)
82 | x = self.encoder.bn1(x)
83 | self.features.append(self.encoder.relu(x))
84 | self.features.append(self.encoder.layer1(self.encoder.maxpool(self.features[-1])))
85 | self.features.append(self.encoder.layer2(self.features[-1]))
86 | self.features.append(self.encoder.layer3(self.features[-1]))
87 | self.features.append(self.encoder.layer4(self.features[-1]))
88 |
89 | return self.features
90 |
--------------------------------------------------------------------------------
/network/rsu_decoder.py:
--------------------------------------------------------------------------------
1 | import torch
2 | import torch.nn as nn
3 | from network.rsu_layer import *
4 |
5 |
6 | class EncoderDisp(nn.Module):
7 | def __init__(self, bott_channels, out_channels, bottleneck):
8 | super(EncoderDisp, self).__init__()
9 | self.bottleneck = bottleneck
10 | self.disp = nn.Sequential(
11 | nn.Conv2d(bott_channels, out_channels, 3, 1, 1, padding_mode="reflect"),
12 | nn.Sigmoid()
13 | )
14 |
15 | def forward(self, inputs):
16 | features = self.bottleneck(inputs)
17 | out = self.disp(features)
18 | return out
19 |
20 |
21 | class RSUDecoder(nn.Module):
22 | def __init__(self, encoder_layer_channels, num_output_channels=1, use_encoder_disp=False):
23 | super(RSUDecoder, self).__init__()
24 |
25 | self.use_encoder_disp = use_encoder_disp
26 | decoder_layer_channels = [256, 128, 64, 32, 16]
27 |
28 | # decoder
29 | self.stage5d = RSU3(encoder_layer_channels[-1] + encoder_layer_channels[-2], 64, decoder_layer_channels[0], False)
30 |
31 | self.stage4d = RSU4(decoder_layer_channels[0] + encoder_layer_channels[-3], 32, decoder_layer_channels[1], False)
32 |
33 | self.stage3d = RSU5(decoder_layer_channels[1] + encoder_layer_channels[-4], 16, decoder_layer_channels[2], False)
34 |
35 | self.stage2d = RSU6(decoder_layer_channels[2] + encoder_layer_channels[-5], 8, decoder_layer_channels[3], False)
36 |
37 | self.stage1d = RSU7(decoder_layer_channels[3], 4, decoder_layer_channels[4], False)
38 |
39 | if use_encoder_disp:
40 | self.encoder_disps = nn.ModuleList()
41 | bottlenecks = [RSU7, RSU6, RSU5, RSU4, RSU3]
42 | mid_channels = [32, 32, 64, 128, 256]
43 | in_channels = encoder_layer_channels
44 | out_channels = [64, 64, 128, 256, 512]
45 | for c, mid_c, bott_c, bottleneck in zip(in_channels, mid_channels, out_channels, bottlenecks):
46 | self.encoder_disps.append(EncoderDisp(bott_c, num_output_channels, bottleneck(c, mid_c, bott_c, False)))
47 |
48 | self.disps = nn.ModuleList()
49 | for channel in decoder_layer_channels:
50 | self.disps.append(nn.Sequential(nn.Conv2d(channel, num_output_channels, 3, 1, 1, padding_mode="reflect"), nn.Sigmoid()))
51 |
52 | self.upsamp = nn.UpsamplingNearest2d(scale_factor=2)
53 |
54 | def forward(self, inputs):
55 |
56 | hx6up = self.upsamp(inputs[-1])
57 | hx5d = self.stage5d(torch.cat((hx6up, inputs[-2]), 1))
58 |
59 | hx5dup = self.upsamp(hx5d)
60 | hx4d = self.stage4d(torch.cat((hx5dup, inputs[-3]), 1))
61 |
62 | hx4dup = self.upsamp(hx4d)
63 | hx3d = self.stage3d(torch.cat((hx4dup, inputs[-4]), 1))
64 |
65 | hx3dup = self.upsamp(hx3d)
66 | hx2d = self.stage2d(torch.cat((hx3dup, inputs[-5]), 1))
67 |
68 | hx2dup = self.upsamp(hx2d)
69 | hx1d = self.stage1d(hx2dup)
70 |
71 | disp_features = [hx5d, hx4d, hx3d, hx2d, hx1d]
72 | disps = []
73 | for i in range(len(disp_features)):
74 | disps.append(self.disps[i](disp_features[i]))
75 |
76 | if self.use_encoder_disp:
77 | encoder_disps = []
78 | for i in range(len(inputs)):
79 | encoder_disps.append(self.encoder_disps[i](inputs[i]))
80 | disps = encoder_disps + disps
81 |
82 | return disps[::-1]
83 |
--------------------------------------------------------------------------------
/network/rsu_layer.py:
--------------------------------------------------------------------------------
1 | import torch
2 | import torch.nn as nn
3 | import torch.nn.functional as F
4 |
5 |
6 | class ConvBnRelu(nn.Module):
7 | def __init__(self, in_ch=3, out_ch=3, dirate=1):
8 | super(ConvBnRelu, self).__init__()
9 |
10 | self.conv_s1 = nn.Conv2d(in_ch, out_ch, 3, padding=1 * dirate, dilation=1 * dirate)
11 | self.bn_s1 = nn.BatchNorm2d(out_ch)
12 | self.relu_s1 = nn.ReLU(inplace=True)
13 |
14 | def forward(self, x):
15 | hx = x
16 | xout = self.relu_s1(self.bn_s1(self.conv_s1(hx)))
17 |
18 | return xout
19 |
20 |
21 | class ConvElu(nn.Module):
22 | def __init__(self, in_ch=3, out_ch=3, dirate=1):
23 | super(ConvElu, self).__init__()
24 |
25 | self.conv_s1 = nn.Conv2d(in_ch, out_ch, 3, padding=1 * dirate, dilation=1 * dirate, padding_mode="reflect")
26 | self.elu = nn.ELU(inplace=True)
27 |
28 | def forward(self, x):
29 | hx = x
30 | xout = self.elu(self.conv_s1(hx))
31 |
32 | return xout
33 |
34 |
35 | ## upsample tensor 'src' to have the same spatial size with tensor 'tar'
36 | def _upsample_like(src, tar):
37 | src = F.interpolate(src, size=tar.shape[2:], mode='bilinear')
38 |
39 | return src
40 |
41 |
42 | ### RSU-7 ###
43 | class RSU7(nn.Module):
44 |
45 | def __init__(self, in_ch=3, mid_ch=12, out_ch=3, encoder=True):
46 | super(RSU7, self).__init__()
47 |
48 | ConvBlock = ConvBnRelu if encoder else ConvElu
49 |
50 | self.rebnconvin = ConvBlock(in_ch, out_ch, dirate=1)
51 |
52 | self.rebnconv1 = ConvBlock(out_ch, mid_ch, dirate=1)
53 | self.pool1 = nn.MaxPool2d(2, stride=2, ceil_mode=True)
54 |
55 | self.rebnconv2 = ConvBlock(mid_ch, mid_ch, dirate=1)
56 | self.pool2 = nn.MaxPool2d(2, stride=2, ceil_mode=True)
57 |
58 | self.rebnconv3 = ConvBlock(mid_ch, mid_ch, dirate=1)
59 | self.pool3 = nn.MaxPool2d(2, stride=2, ceil_mode=True)
60 |
61 | self.rebnconv4 = ConvBlock(mid_ch, mid_ch, dirate=1)
62 | self.pool4 = nn.MaxPool2d(2, stride=2, ceil_mode=True)
63 |
64 | self.rebnconv5 = ConvBlock(mid_ch, mid_ch, dirate=1)
65 | self.pool5 = nn.MaxPool2d(2, stride=2, ceil_mode=True)
66 |
67 | self.rebnconv6 = ConvBlock(mid_ch, mid_ch, dirate=1)
68 |
69 | self.rebnconv7 = ConvBlock(mid_ch, mid_ch, dirate=2)
70 |
71 | self.rebnconv6d = ConvBlock(mid_ch * 2, mid_ch, dirate=1)
72 | self.rebnconv5d = ConvBlock(mid_ch * 2, mid_ch, dirate=1)
73 | self.rebnconv4d = ConvBlock(mid_ch * 2, mid_ch, dirate=1)
74 | self.rebnconv3d = ConvBlock(mid_ch * 2, mid_ch, dirate=1)
75 | self.rebnconv2d = ConvBlock(mid_ch * 2, mid_ch, dirate=1)
76 | self.rebnconv1d = ConvBlock(mid_ch * 2, out_ch, dirate=1)
77 |
78 | def forward(self, x):
79 | hx = x
80 | hxin = self.rebnconvin(hx)
81 |
82 | hx1 = self.rebnconv1(hxin)
83 | hx = self.pool1(hx1)
84 |
85 | hx2 = self.rebnconv2(hx)
86 | hx = self.pool2(hx2)
87 |
88 | hx3 = self.rebnconv3(hx)
89 | hx = self.pool3(hx3)
90 |
91 | hx4 = self.rebnconv4(hx)
92 | hx = self.pool4(hx4)
93 |
94 | hx5 = self.rebnconv5(hx)
95 | hx = self.pool5(hx5)
96 |
97 | hx6 = self.rebnconv6(hx)
98 |
99 | hx7 = self.rebnconv7(hx6)
100 |
101 | hx6d = self.rebnconv6d(torch.cat((hx7, hx6), 1))
102 | hx6dup = _upsample_like(hx6d, hx5)
103 |
104 | hx5d = self.rebnconv5d(torch.cat((hx6dup, hx5), 1))
105 | hx5dup = _upsample_like(hx5d, hx4)
106 |
107 | hx4d = self.rebnconv4d(torch.cat((hx5dup, hx4), 1))
108 | hx4dup = _upsample_like(hx4d, hx3)
109 |
110 | hx3d = self.rebnconv3d(torch.cat((hx4dup, hx3), 1))
111 | hx3dup = _upsample_like(hx3d, hx2)
112 |
113 | hx2d = self.rebnconv2d(torch.cat((hx3dup, hx2), 1))
114 | hx2dup = _upsample_like(hx2d, hx1)
115 |
116 | hx1d = self.rebnconv1d(torch.cat((hx2dup, hx1), 1))
117 |
118 | return hx1d + hxin
119 |
120 |
121 | ### RSU-6 ###
122 | class RSU6(nn.Module):
123 |
124 | def __init__(self, in_ch=3, mid_ch=12, out_ch=3, encoder=True):
125 | super(RSU6, self).__init__()
126 |
127 | ConvBlock = ConvBnRelu if encoder else ConvElu
128 |
129 | self.rebnconvin = ConvBlock(in_ch, out_ch, dirate=1)
130 |
131 | self.rebnconv1 = ConvBlock(out_ch, mid_ch, dirate=1)
132 | self.pool1 = nn.MaxPool2d(2, stride=2, ceil_mode=True)
133 |
134 | self.rebnconv2 = ConvBlock(mid_ch, mid_ch, dirate=1)
135 | self.pool2 = nn.MaxPool2d(2, stride=2, ceil_mode=True)
136 |
137 | self.rebnconv3 = ConvBlock(mid_ch, mid_ch, dirate=1)
138 | self.pool3 = nn.MaxPool2d(2, stride=2, ceil_mode=True)
139 |
140 | self.rebnconv4 = ConvBlock(mid_ch, mid_ch, dirate=1)
141 | self.pool4 = nn.MaxPool2d(2, stride=2, ceil_mode=True)
142 |
143 | self.rebnconv5 = ConvBlock(mid_ch, mid_ch, dirate=1)
144 |
145 | self.rebnconv6 = ConvBlock(mid_ch, mid_ch, dirate=2)
146 |
147 | self.rebnconv5d = ConvBlock(mid_ch * 2, mid_ch, dirate=1)
148 | self.rebnconv4d = ConvBlock(mid_ch * 2, mid_ch, dirate=1)
149 | self.rebnconv3d = ConvBlock(mid_ch * 2, mid_ch, dirate=1)
150 | self.rebnconv2d = ConvBlock(mid_ch * 2, mid_ch, dirate=1)
151 | self.rebnconv1d = ConvBlock(mid_ch * 2, out_ch, dirate=1)
152 |
153 | def forward(self, x):
154 | hx = x
155 |
156 | hxin = self.rebnconvin(hx)
157 |
158 | hx1 = self.rebnconv1(hxin)
159 | hx = self.pool1(hx1)
160 |
161 | hx2 = self.rebnconv2(hx)
162 | hx = self.pool2(hx2)
163 |
164 | hx3 = self.rebnconv3(hx)
165 | hx = self.pool3(hx3)
166 |
167 | hx4 = self.rebnconv4(hx)
168 | hx = self.pool4(hx4)
169 |
170 | hx5 = self.rebnconv5(hx)
171 |
172 | hx6 = self.rebnconv6(hx5)
173 |
174 | hx5d = self.rebnconv5d(torch.cat((hx6, hx5), 1))
175 | hx5dup = _upsample_like(hx5d, hx4)
176 |
177 | hx4d = self.rebnconv4d(torch.cat((hx5dup, hx4), 1))
178 | hx4dup = _upsample_like(hx4d, hx3)
179 |
180 | hx3d = self.rebnconv3d(torch.cat((hx4dup, hx3), 1))
181 | hx3dup = _upsample_like(hx3d, hx2)
182 |
183 | hx2d = self.rebnconv2d(torch.cat((hx3dup, hx2), 1))
184 | hx2dup = _upsample_like(hx2d, hx1)
185 |
186 | hx1d = self.rebnconv1d(torch.cat((hx2dup, hx1), 1))
187 |
188 | return hx1d + hxin
189 |
190 |
191 | ### RSU-5 ###
192 | class RSU5(nn.Module):
193 |
194 | def __init__(self, in_ch=3, mid_ch=12, out_ch=3, encoder=True):
195 | super(RSU5, self).__init__()
196 |
197 | ConvBlock = ConvBnRelu if encoder else ConvElu
198 |
199 | self.rebnconvin = ConvBlock(in_ch, out_ch, dirate=1)
200 |
201 | self.rebnconv1 = ConvBlock(out_ch, mid_ch, dirate=1)
202 | self.pool1 = nn.MaxPool2d(2, stride=2, ceil_mode=True)
203 |
204 | self.rebnconv2 = ConvBlock(mid_ch, mid_ch, dirate=1)
205 | self.pool2 = nn.MaxPool2d(2, stride=2, ceil_mode=True)
206 |
207 | self.rebnconv3 = ConvBlock(mid_ch, mid_ch, dirate=1)
208 | self.pool3 = nn.MaxPool2d(2, stride=2, ceil_mode=True)
209 |
210 | self.rebnconv4 = ConvBlock(mid_ch, mid_ch, dirate=1)
211 |
212 | self.rebnconv5 = ConvBlock(mid_ch, mid_ch, dirate=2)
213 |
214 | self.rebnconv4d = ConvBlock(mid_ch * 2, mid_ch, dirate=1)
215 | self.rebnconv3d = ConvBlock(mid_ch * 2, mid_ch, dirate=1)
216 | self.rebnconv2d = ConvBlock(mid_ch * 2, mid_ch, dirate=1)
217 | self.rebnconv1d = ConvBlock(mid_ch * 2, out_ch, dirate=1)
218 |
219 | def forward(self, x):
220 | hx = x
221 |
222 | hxin = self.rebnconvin(hx)
223 |
224 | hx1 = self.rebnconv1(hxin)
225 | hx = self.pool1(hx1)
226 |
227 | hx2 = self.rebnconv2(hx)
228 | hx = self.pool2(hx2)
229 |
230 | hx3 = self.rebnconv3(hx)
231 | hx = self.pool3(hx3)
232 |
233 | hx4 = self.rebnconv4(hx)
234 |
235 | hx5 = self.rebnconv5(hx4)
236 |
237 | hx4d = self.rebnconv4d(torch.cat((hx5, hx4), 1))
238 | hx4dup = _upsample_like(hx4d, hx3)
239 |
240 | hx3d = self.rebnconv3d(torch.cat((hx4dup, hx3), 1))
241 | hx3dup = _upsample_like(hx3d, hx2)
242 |
243 | hx2d = self.rebnconv2d(torch.cat((hx3dup, hx2), 1))
244 | hx2dup = _upsample_like(hx2d, hx1)
245 |
246 | hx1d = self.rebnconv1d(torch.cat((hx2dup, hx1), 1))
247 |
248 | return hx1d + hxin
249 |
250 |
251 | ### RSU-4 ###
252 | class RSU4(nn.Module):
253 |
254 | def __init__(self, in_ch=3, mid_ch=12, out_ch=3, encoder=True):
255 | super(RSU4, self).__init__()
256 |
257 | ConvBlock = ConvBnRelu if encoder else ConvElu
258 |
259 | self.rebnconvin = ConvBlock(in_ch, out_ch, dirate=1)
260 |
261 | self.rebnconv1 = ConvBlock(out_ch, mid_ch, dirate=1)
262 | self.pool1 = nn.MaxPool2d(2, stride=2, ceil_mode=True)
263 |
264 | self.rebnconv2 = ConvBlock(mid_ch, mid_ch, dirate=1)
265 | self.pool2 = nn.MaxPool2d(2, stride=2, ceil_mode=True)
266 |
267 | self.rebnconv3 = ConvBlock(mid_ch, mid_ch, dirate=1)
268 |
269 | self.rebnconv4 = ConvBlock(mid_ch, mid_ch, dirate=2)
270 |
271 | self.rebnconv3d = ConvBlock(mid_ch * 2, mid_ch, dirate=1)
272 | self.rebnconv2d = ConvBlock(mid_ch * 2, mid_ch, dirate=1)
273 | self.rebnconv1d = ConvBlock(mid_ch * 2, out_ch, dirate=1)
274 |
275 | def forward(self, x):
276 | hx = x
277 |
278 | hxin = self.rebnconvin(hx)
279 |
280 | hx1 = self.rebnconv1(hxin)
281 | hx = self.pool1(hx1)
282 |
283 | hx2 = self.rebnconv2(hx)
284 | hx = self.pool2(hx2)
285 |
286 | hx3 = self.rebnconv3(hx)
287 |
288 | hx4 = self.rebnconv4(hx3)
289 |
290 | hx3d = self.rebnconv3d(torch.cat((hx4, hx3), 1))
291 | hx3dup = _upsample_like(hx3d, hx2)
292 |
293 | hx2d = self.rebnconv2d(torch.cat((hx3dup, hx2), 1))
294 | hx2dup = _upsample_like(hx2d, hx1)
295 |
296 | hx1d = self.rebnconv1d(torch.cat((hx2dup, hx1), 1))
297 |
298 | return hx1d + hxin
299 |
300 |
301 | ### RSU-4F ###
302 | class RSU4F(nn.Module):
303 |
304 | def __init__(self, in_ch=3, mid_ch=12, out_ch=3, encoder=True):
305 | super(RSU4F, self).__init__()
306 |
307 | ConvBlock = ConvBnRelu if encoder else ConvElu
308 |
309 | self.rebnconvin = ConvBlock(in_ch, out_ch, dirate=1)
310 |
311 | self.rebnconv1 = ConvBlock(out_ch, mid_ch, dirate=1)
312 | self.rebnconv2 = ConvBlock(mid_ch, mid_ch, dirate=2)
313 | self.rebnconv3 = ConvBlock(mid_ch, mid_ch, dirate=4)
314 |
315 | self.rebnconv4 = ConvBlock(mid_ch, mid_ch, dirate=8)
316 |
317 | self.rebnconv3d = ConvBlock(mid_ch * 2, mid_ch, dirate=4)
318 | self.rebnconv2d = ConvBlock(mid_ch * 2, mid_ch, dirate=2)
319 | self.rebnconv1d = ConvBlock(mid_ch * 2, out_ch, dirate=1)
320 |
321 | def forward(self, x):
322 | hx = x
323 |
324 | hxin = self.rebnconvin(hx)
325 |
326 | hx1 = self.rebnconv1(hxin)
327 | hx2 = self.rebnconv2(hx1)
328 | hx3 = self.rebnconv3(hx2)
329 |
330 | hx4 = self.rebnconv4(hx3)
331 |
332 | hx3d = self.rebnconv3d(torch.cat((hx4, hx3), 1))
333 | hx2d = self.rebnconv2d(torch.cat((hx3d, hx2), 1))
334 | hx1d = self.rebnconv1d(torch.cat((hx2d, hx1), 1))
335 |
336 | return hx1d + hxin
337 |
338 |
339 | ### RSU-3 ###
340 | class RSU3(nn.Module):
341 |
342 | def __init__(self, in_ch=3, mid_ch=12, out_ch=3, encoder=True):
343 | super(RSU3, self).__init__()
344 |
345 | ConvBlock = ConvBnRelu if encoder else ConvElu
346 |
347 | self.rebnconvin = ConvBlock(in_ch, out_ch, dirate=1)
348 |
349 | self.rebnconv1 = ConvBlock(out_ch, mid_ch, dirate=1)
350 | self.pool1 = nn.MaxPool2d(2, stride=2, ceil_mode=True)
351 |
352 | self.rebnconv2 = ConvBlock(mid_ch, mid_ch, dirate=1)
353 |
354 | self.rebnconv3 = ConvBlock(mid_ch, mid_ch, dirate=2)
355 |
356 | self.rebnconv2d = ConvBlock(mid_ch * 2, mid_ch, dirate=1)
357 | self.rebnconv1d = ConvBlock(mid_ch * 2, out_ch, dirate=1)
358 |
359 | def forward(self, x):
360 | hx = x
361 |
362 | hxin = self.rebnconvin(hx)
363 |
364 | hx1 = self.rebnconv1(hxin)
365 |
366 | hx = self.pool1(hx1)
367 | hx2 = self.rebnconv2(hx)
368 |
369 | hx3 = self.rebnconv3(hx2)
370 |
371 | hx2d = self.rebnconv2d(torch.cat((hx3, hx2), 1))
372 |
373 | hx2dup = _upsample_like(hx2d, hx1)
374 | hx1d = self.rebnconv1d(torch.cat((hx2dup, hx1), 1))
375 |
376 | return hx1d + hxin
377 |
378 |
379 | ### RSU-2 ###
380 | class RSU2(nn.Module):
381 |
382 | def __init__(self, in_ch=3, mid_ch=12, out_ch=3, encoder=True):
383 | super(RSU2, self).__init__()
384 |
385 | ConvBlock = ConvBnRelu if encoder else ConvElu
386 |
387 | self.rebnconvin = ConvBlock(in_ch, out_ch, dirate=1)
388 |
389 | self.rebnconv1 = ConvBlock(out_ch, mid_ch, dirate=1)
390 |
391 | self.rebnconv2 = ConvBlock(mid_ch, mid_ch, dirate=2)
392 |
393 | self.rebnconv1d = ConvBlock(mid_ch * 2, out_ch, dirate=1)
394 |
395 | def forward(self, x):
396 | hx = x
397 |
398 | hxin = self.rebnconvin(hx)
399 |
400 | hx1 = self.rebnconv1(hxin)
401 |
402 | hx2 = self.rebnconv2(hx1)
403 |
404 | hx1d = self.rebnconv1d(torch.cat((hx1, hx2), 1))
405 |
406 | return hx1d + hxin
--------------------------------------------------------------------------------
/nyuv2Testing/nyu_dataset.py:
--------------------------------------------------------------------------------
1 | # Copyright Niantic 2019. Patent Pending. All rights reserved.
2 | #
3 | # This software is licensed under the terms of the Monodepth2 licence
4 | # which allows for non-commercial use only, the full terms of which are made
5 | # available in the LICENSE file.
6 |
7 | from __future__ import absolute_import, division, print_function
8 |
9 | import os
10 | import cv2
11 | import random
12 | import numpy as np
13 | import copy
14 | from PIL import ImageFile
15 |
16 | ImageFile.LOAD_TRUNCATED_IMAGES = True
17 | from PIL import Image # using pillow-simd for increased speed
18 |
19 | import torch
20 | import torch.utils.data as data
21 | from torchvision import transforms
22 |
23 | import time
24 | import h5py
25 |
26 | CROP = 16
27 |
28 |
29 | def readlines(filename):
30 | """Read all the lines in a text file and return as a list
31 | """
32 | with open(filename, 'r') as f:
33 | lines = f.read().splitlines()
34 | return lines
35 |
36 |
37 | def pil_loader(path):
38 | # open path as file to avoid ResourceWarning
39 | # (https://github.com/python-pillow/Pillow/issues/835)
40 | with open(path, 'rb') as f:
41 | with Image.open(f) as img:
42 | img = np.array(img.convert('RGB'))
43 | h, w, c = img.shape
44 | return img
45 |
46 |
47 | def h5_loader(path):
48 | h5f = h5py.File(path, "r")
49 | rgb = np.array(h5f['rgb'])
50 | rgb = np.transpose(rgb, (1, 2, 0))
51 | depth = np.array(h5f['depth'])
52 | norm = np.array(h5f['norm'])
53 | norm = np.transpose(norm, (1, 2, 0))
54 | valid_mask = np.array(h5f['mask'])
55 |
56 | return rgb, depth, norm, valid_mask
57 |
58 |
59 | class NYUTestDataset(data.Dataset):
60 | def __init__(self, data_path, height, width):
61 | super(NYUTestDataset, self).__init__()
62 | self.full_res_shape = (640 - CROP * 2, 480 - CROP * 2)
63 | self.K = self._get_intrinsics()
64 |
65 | self.data_path = data_path
66 | self.filenames = readlines('nyu_test.txt')
67 | self.height = height
68 | self.width = width
69 | self.interp = Image.ANTIALIAS
70 |
71 | self.loader = h5_loader
72 | self.to_tensor = transforms.ToTensor()
73 |
74 | self.resize = transforms.Resize(
75 | (self.height, self.width),
76 | interpolation=self.interp
77 | )
78 |
79 | def __len__(self):
80 | return len(self.filenames)
81 |
82 | def __getitem__(self, index):
83 | line = self.filenames[index]
84 | line = os.path.join(self.data_path, line)
85 | rgb, depth, norm, valid_mask = self.loader(line)
86 |
87 | rgb = rgb[44: 471, 40: 601, :]
88 | depth = depth[44: 471, 40: 601]
89 | norm = norm[44:471, 40:601, :]
90 | valid_mask = valid_mask[44:471, 40:601]
91 |
92 | rgb = Image.fromarray(rgb)
93 | rgb = self.to_tensor(self.resize(rgb))
94 |
95 | depth = self.to_tensor(depth)
96 | norm = self.to_tensor(norm)
97 | norm_mask = self.to_tensor(valid_mask)
98 |
99 | K = self.K.copy()
100 | K[0, :] *= self.width
101 | K[1, :] *= self.height
102 | return rgb, depth, norm, norm_mask, K, np.linalg.pinv(K)
103 |
104 | def _get_intrinsics(self):
105 | # 640, 480
106 | w, h = self.full_res_shape
107 |
108 | fx = 5.1885790117450188e+02 / w
109 | fy = 5.1946961112127485e+02 / h
110 | cx = 3.2558244941119034e+02 / w
111 | cy = 2.5373616633400465e+02 / h
112 |
113 | intrinsics = np.array([[fx, 0., cx, 0.],
114 | [0., fy, cy, 0.],
115 | [0., 0., 1., 0.],
116 | [0., 0., 0., 1.]], dtype="float32")
117 | return intrinsics
118 |
--------------------------------------------------------------------------------
/nyuv2Testing/nyu_test.txt:
--------------------------------------------------------------------------------
1 | nyu_test/00001.h5
2 | nyu_test/00002.h5
3 | nyu_test/00009.h5
4 | nyu_test/00014.h5
5 | nyu_test/00015.h5
6 | nyu_test/00016.h5
7 | nyu_test/00017.h5
8 | nyu_test/00018.h5
9 | nyu_test/00021.h5
10 | nyu_test/00028.h5
11 | nyu_test/00029.h5
12 | nyu_test/00030.h5
13 | nyu_test/00031.h5
14 | nyu_test/00032.h5
15 | nyu_test/00033.h5
16 | nyu_test/00034.h5
17 | nyu_test/00035.h5
18 | nyu_test/00036.h5
19 | nyu_test/00037.h5
20 | nyu_test/00038.h5
21 | nyu_test/00039.h5
22 | nyu_test/00040.h5
23 | nyu_test/00041.h5
24 | nyu_test/00042.h5
25 | nyu_test/00043.h5
26 | nyu_test/00046.h5
27 | nyu_test/00047.h5
28 | nyu_test/00056.h5
29 | nyu_test/00057.h5
30 | nyu_test/00059.h5
31 | nyu_test/00060.h5
32 | nyu_test/00061.h5
33 | nyu_test/00062.h5
34 | nyu_test/00063.h5
35 | nyu_test/00076.h5
36 | nyu_test/00077.h5
37 | nyu_test/00078.h5
38 | nyu_test/00079.h5
39 | nyu_test/00084.h5
40 | nyu_test/00085.h5
41 | nyu_test/00086.h5
42 | nyu_test/00087.h5
43 | nyu_test/00088.h5
44 | nyu_test/00089.h5
45 | nyu_test/00090.h5
46 | nyu_test/00091.h5
47 | nyu_test/00117.h5
48 | nyu_test/00118.h5
49 | nyu_test/00119.h5
50 | nyu_test/00125.h5
51 | nyu_test/00126.h5
52 | nyu_test/00127.h5
53 | nyu_test/00128.h5
54 | nyu_test/00129.h5
55 | nyu_test/00131.h5
56 | nyu_test/00132.h5
57 | nyu_test/00133.h5
58 | nyu_test/00134.h5
59 | nyu_test/00137.h5
60 | nyu_test/00153.h5
61 | nyu_test/00154.h5
62 | nyu_test/00155.h5
63 | nyu_test/00167.h5
64 | nyu_test/00168.h5
65 | nyu_test/00169.h5
66 | nyu_test/00171.h5
67 | nyu_test/00172.h5
68 | nyu_test/00173.h5
69 | nyu_test/00174.h5
70 | nyu_test/00175.h5
71 | nyu_test/00176.h5
72 | nyu_test/00180.h5
73 | nyu_test/00181.h5
74 | nyu_test/00182.h5
75 | nyu_test/00183.h5
76 | nyu_test/00184.h5
77 | nyu_test/00185.h5
78 | nyu_test/00186.h5
79 | nyu_test/00187.h5
80 | nyu_test/00188.h5
81 | nyu_test/00189.h5
82 | nyu_test/00190.h5
83 | nyu_test/00191.h5
84 | nyu_test/00192.h5
85 | nyu_test/00193.h5
86 | nyu_test/00194.h5
87 | nyu_test/00195.h5
88 | nyu_test/00196.h5
89 | nyu_test/00197.h5
90 | nyu_test/00198.h5
91 | nyu_test/00199.h5
92 | nyu_test/00200.h5
93 | nyu_test/00201.h5
94 | nyu_test/00202.h5
95 | nyu_test/00207.h5
96 | nyu_test/00208.h5
97 | nyu_test/00209.h5
98 | nyu_test/00210.h5
99 | nyu_test/00211.h5
100 | nyu_test/00212.h5
101 | nyu_test/00220.h5
102 | nyu_test/00221.h5
103 | nyu_test/00222.h5
104 | nyu_test/00250.h5
105 | nyu_test/00264.h5
106 | nyu_test/00271.h5
107 | nyu_test/00272.h5
108 | nyu_test/00273.h5
109 | nyu_test/00279.h5
110 | nyu_test/00280.h5
111 | nyu_test/00281.h5
112 | nyu_test/00282.h5
113 | nyu_test/00283.h5
114 | nyu_test/00284.h5
115 | nyu_test/00285.h5
116 | nyu_test/00296.h5
117 | nyu_test/00297.h5
118 | nyu_test/00298.h5
119 | nyu_test/00299.h5
120 | nyu_test/00300.h5
121 | nyu_test/00301.h5
122 | nyu_test/00302.h5
123 | nyu_test/00310.h5
124 | nyu_test/00311.h5
125 | nyu_test/00312.h5
126 | nyu_test/00315.h5
127 | nyu_test/00316.h5
128 | nyu_test/00317.h5
129 | nyu_test/00325.h5
130 | nyu_test/00326.h5
131 | nyu_test/00327.h5
132 | nyu_test/00328.h5
133 | nyu_test/00329.h5
134 | nyu_test/00330.h5
135 | nyu_test/00331.h5
136 | nyu_test/00332.h5
137 | nyu_test/00333.h5
138 | nyu_test/00334.h5
139 | nyu_test/00335.h5
140 | nyu_test/00351.h5
141 | nyu_test/00352.h5
142 | nyu_test/00355.h5
143 | nyu_test/00356.h5
144 | nyu_test/00357.h5
145 | nyu_test/00358.h5
146 | nyu_test/00359.h5
147 | nyu_test/00360.h5
148 | nyu_test/00361.h5
149 | nyu_test/00362.h5
150 | nyu_test/00363.h5
151 | nyu_test/00364.h5
152 | nyu_test/00384.h5
153 | nyu_test/00385.h5
154 | nyu_test/00386.h5
155 | nyu_test/00387.h5
156 | nyu_test/00388.h5
157 | nyu_test/00389.h5
158 | nyu_test/00390.h5
159 | nyu_test/00395.h5
160 | nyu_test/00396.h5
161 | nyu_test/00397.h5
162 | nyu_test/00411.h5
163 | nyu_test/00412.h5
164 | nyu_test/00413.h5
165 | nyu_test/00414.h5
166 | nyu_test/00430.h5
167 | nyu_test/00431.h5
168 | nyu_test/00432.h5
169 | nyu_test/00433.h5
170 | nyu_test/00434.h5
171 | nyu_test/00435.h5
172 | nyu_test/00441.h5
173 | nyu_test/00442.h5
174 | nyu_test/00443.h5
175 | nyu_test/00444.h5
176 | nyu_test/00445.h5
177 | nyu_test/00446.h5
178 | nyu_test/00447.h5
179 | nyu_test/00448.h5
180 | nyu_test/00462.h5
181 | nyu_test/00463.h5
182 | nyu_test/00464.h5
183 | nyu_test/00465.h5
184 | nyu_test/00466.h5
185 | nyu_test/00469.h5
186 | nyu_test/00470.h5
187 | nyu_test/00471.h5
188 | nyu_test/00472.h5
189 | nyu_test/00473.h5
190 | nyu_test/00474.h5
191 | nyu_test/00475.h5
192 | nyu_test/00476.h5
193 | nyu_test/00477.h5
194 | nyu_test/00508.h5
195 | nyu_test/00509.h5
196 | nyu_test/00510.h5
197 | nyu_test/00511.h5
198 | nyu_test/00512.h5
199 | nyu_test/00513.h5
200 | nyu_test/00515.h5
201 | nyu_test/00516.h5
202 | nyu_test/00517.h5
203 | nyu_test/00518.h5
204 | nyu_test/00519.h5
205 | nyu_test/00520.h5
206 | nyu_test/00521.h5
207 | nyu_test/00522.h5
208 | nyu_test/00523.h5
209 | nyu_test/00524.h5
210 | nyu_test/00525.h5
211 | nyu_test/00526.h5
212 | nyu_test/00531.h5
213 | nyu_test/00532.h5
214 | nyu_test/00533.h5
215 | nyu_test/00537.h5
216 | nyu_test/00538.h5
217 | nyu_test/00539.h5
218 | nyu_test/00549.h5
219 | nyu_test/00550.h5
220 | nyu_test/00551.h5
221 | nyu_test/00555.h5
222 | nyu_test/00556.h5
223 | nyu_test/00557.h5
224 | nyu_test/00558.h5
225 | nyu_test/00559.h5
226 | nyu_test/00560.h5
227 | nyu_test/00561.h5
228 | nyu_test/00562.h5
229 | nyu_test/00563.h5
230 | nyu_test/00564.h5
231 | nyu_test/00565.h5
232 | nyu_test/00566.h5
233 | nyu_test/00567.h5
234 | nyu_test/00568.h5
235 | nyu_test/00569.h5
236 | nyu_test/00570.h5
237 | nyu_test/00571.h5
238 | nyu_test/00579.h5
239 | nyu_test/00580.h5
240 | nyu_test/00581.h5
241 | nyu_test/00582.h5
242 | nyu_test/00583.h5
243 | nyu_test/00591.h5
244 | nyu_test/00592.h5
245 | nyu_test/00593.h5
246 | nyu_test/00594.h5
247 | nyu_test/00603.h5
248 | nyu_test/00604.h5
249 | nyu_test/00605.h5
250 | nyu_test/00606.h5
251 | nyu_test/00607.h5
252 | nyu_test/00612.h5
253 | nyu_test/00613.h5
254 | nyu_test/00617.h5
255 | nyu_test/00618.h5
256 | nyu_test/00619.h5
257 | nyu_test/00620.h5
258 | nyu_test/00621.h5
259 | nyu_test/00633.h5
260 | nyu_test/00634.h5
261 | nyu_test/00635.h5
262 | nyu_test/00636.h5
263 | nyu_test/00637.h5
264 | nyu_test/00638.h5
265 | nyu_test/00644.h5
266 | nyu_test/00645.h5
267 | nyu_test/00650.h5
268 | nyu_test/00651.h5
269 | nyu_test/00656.h5
270 | nyu_test/00657.h5
271 | nyu_test/00658.h5
272 | nyu_test/00663.h5
273 | nyu_test/00664.h5
274 | nyu_test/00668.h5
275 | nyu_test/00669.h5
276 | nyu_test/00670.h5
277 | nyu_test/00671.h5
278 | nyu_test/00672.h5
279 | nyu_test/00673.h5
280 | nyu_test/00676.h5
281 | nyu_test/00677.h5
282 | nyu_test/00678.h5
283 | nyu_test/00679.h5
284 | nyu_test/00680.h5
285 | nyu_test/00681.h5
286 | nyu_test/00686.h5
287 | nyu_test/00687.h5
288 | nyu_test/00688.h5
289 | nyu_test/00689.h5
290 | nyu_test/00690.h5
291 | nyu_test/00693.h5
292 | nyu_test/00694.h5
293 | nyu_test/00697.h5
294 | nyu_test/00698.h5
295 | nyu_test/00699.h5
296 | nyu_test/00706.h5
297 | nyu_test/00707.h5
298 | nyu_test/00708.h5
299 | nyu_test/00709.h5
300 | nyu_test/00710.h5
301 | nyu_test/00711.h5
302 | nyu_test/00712.h5
303 | nyu_test/00713.h5
304 | nyu_test/00717.h5
305 | nyu_test/00718.h5
306 | nyu_test/00724.h5
307 | nyu_test/00725.h5
308 | nyu_test/00726.h5
309 | nyu_test/00727.h5
310 | nyu_test/00728.h5
311 | nyu_test/00731.h5
312 | nyu_test/00732.h5
313 | nyu_test/00733.h5
314 | nyu_test/00734.h5
315 | nyu_test/00743.h5
316 | nyu_test/00744.h5
317 | nyu_test/00759.h5
318 | nyu_test/00760.h5
319 | nyu_test/00761.h5
320 | nyu_test/00762.h5
321 | nyu_test/00763.h5
322 | nyu_test/00764.h5
323 | nyu_test/00765.h5
324 | nyu_test/00766.h5
325 | nyu_test/00767.h5
326 | nyu_test/00768.h5
327 | nyu_test/00769.h5
328 | nyu_test/00770.h5
329 | nyu_test/00771.h5
330 | nyu_test/00772.h5
331 | nyu_test/00773.h5
332 | nyu_test/00774.h5
333 | nyu_test/00775.h5
334 | nyu_test/00776.h5
335 | nyu_test/00777.h5
336 | nyu_test/00778.h5
337 | nyu_test/00779.h5
338 | nyu_test/00780.h5
339 | nyu_test/00781.h5
340 | nyu_test/00782.h5
341 | nyu_test/00783.h5
342 | nyu_test/00784.h5
343 | nyu_test/00785.h5
344 | nyu_test/00786.h5
345 | nyu_test/00787.h5
346 | nyu_test/00800.h5
347 | nyu_test/00801.h5
348 | nyu_test/00802.h5
349 | nyu_test/00803.h5
350 | nyu_test/00804.h5
351 | nyu_test/00810.h5
352 | nyu_test/00811.h5
353 | nyu_test/00812.h5
354 | nyu_test/00813.h5
355 | nyu_test/00814.h5
356 | nyu_test/00821.h5
357 | nyu_test/00822.h5
358 | nyu_test/00823.h5
359 | nyu_test/00833.h5
360 | nyu_test/00834.h5
361 | nyu_test/00835.h5
362 | nyu_test/00836.h5
363 | nyu_test/00837.h5
364 | nyu_test/00838.h5
365 | nyu_test/00839.h5
366 | nyu_test/00840.h5
367 | nyu_test/00841.h5
368 | nyu_test/00842.h5
369 | nyu_test/00843.h5
370 | nyu_test/00844.h5
371 | nyu_test/00845.h5
372 | nyu_test/00846.h5
373 | nyu_test/00850.h5
374 | nyu_test/00851.h5
375 | nyu_test/00852.h5
376 | nyu_test/00857.h5
377 | nyu_test/00858.h5
378 | nyu_test/00859.h5
379 | nyu_test/00860.h5
380 | nyu_test/00861.h5
381 | nyu_test/00862.h5
382 | nyu_test/00869.h5
383 | nyu_test/00870.h5
384 | nyu_test/00871.h5
385 | nyu_test/00906.h5
386 | nyu_test/00907.h5
387 | nyu_test/00908.h5
388 | nyu_test/00917.h5
389 | nyu_test/00918.h5
390 | nyu_test/00919.h5
391 | nyu_test/00926.h5
392 | nyu_test/00927.h5
393 | nyu_test/00928.h5
394 | nyu_test/00932.h5
395 | nyu_test/00933.h5
396 | nyu_test/00934.h5
397 | nyu_test/00935.h5
398 | nyu_test/00945.h5
399 | nyu_test/00946.h5
400 | nyu_test/00947.h5
401 | nyu_test/00959.h5
402 | nyu_test/00960.h5
403 | nyu_test/00961.h5
404 | nyu_test/00962.h5
405 | nyu_test/00965.h5
406 | nyu_test/00966.h5
407 | nyu_test/00967.h5
408 | nyu_test/00970.h5
409 | nyu_test/00971.h5
410 | nyu_test/00972.h5
411 | nyu_test/00973.h5
412 | nyu_test/00974.h5
413 | nyu_test/00975.h5
414 | nyu_test/00976.h5
415 | nyu_test/00977.h5
416 | nyu_test/00991.h5
417 | nyu_test/00992.h5
418 | nyu_test/00993.h5
419 | nyu_test/00994.h5
420 | nyu_test/00995.h5
421 | nyu_test/01001.h5
422 | nyu_test/01002.h5
423 | nyu_test/01003.h5
424 | nyu_test/01004.h5
425 | nyu_test/01010.h5
426 | nyu_test/01011.h5
427 | nyu_test/01012.h5
428 | nyu_test/01021.h5
429 | nyu_test/01022.h5
430 | nyu_test/01023.h5
431 | nyu_test/01032.h5
432 | nyu_test/01033.h5
433 | nyu_test/01034.h5
434 | nyu_test/01038.h5
435 | nyu_test/01039.h5
436 | nyu_test/01048.h5
437 | nyu_test/01049.h5
438 | nyu_test/01052.h5
439 | nyu_test/01053.h5
440 | nyu_test/01057.h5
441 | nyu_test/01058.h5
442 | nyu_test/01075.h5
443 | nyu_test/01076.h5
444 | nyu_test/01077.h5
445 | nyu_test/01078.h5
446 | nyu_test/01079.h5
447 | nyu_test/01080.h5
448 | nyu_test/01081.h5
449 | nyu_test/01082.h5
450 | nyu_test/01083.h5
451 | nyu_test/01084.h5
452 | nyu_test/01088.h5
453 | nyu_test/01089.h5
454 | nyu_test/01090.h5
455 | nyu_test/01091.h5
456 | nyu_test/01092.h5
457 | nyu_test/01093.h5
458 | nyu_test/01094.h5
459 | nyu_test/01095.h5
460 | nyu_test/01096.h5
461 | nyu_test/01098.h5
462 | nyu_test/01099.h5
463 | nyu_test/01100.h5
464 | nyu_test/01101.h5
465 | nyu_test/01102.h5
466 | nyu_test/01103.h5
467 | nyu_test/01104.h5
468 | nyu_test/01106.h5
469 | nyu_test/01107.h5
470 | nyu_test/01108.h5
471 | nyu_test/01109.h5
472 | nyu_test/01117.h5
473 | nyu_test/01118.h5
474 | nyu_test/01119.h5
475 | nyu_test/01123.h5
476 | nyu_test/01124.h5
477 | nyu_test/01125.h5
478 | nyu_test/01126.h5
479 | nyu_test/01127.h5
480 | nyu_test/01128.h5
481 | nyu_test/01129.h5
482 | nyu_test/01130.h5
483 | nyu_test/01131.h5
484 | nyu_test/01135.h5
485 | nyu_test/01136.h5
486 | nyu_test/01144.h5
487 | nyu_test/01145.h5
488 | nyu_test/01146.h5
489 | nyu_test/01147.h5
490 | nyu_test/01148.h5
491 | nyu_test/01149.h5
492 | nyu_test/01150.h5
493 | nyu_test/01151.h5
494 | nyu_test/01152.h5
495 | nyu_test/01153.h5
496 | nyu_test/01154.h5
497 | nyu_test/01155.h5
498 | nyu_test/01156.h5
499 | nyu_test/01157.h5
500 | nyu_test/01158.h5
501 | nyu_test/01162.h5
502 | nyu_test/01163.h5
503 | nyu_test/01164.h5
504 | nyu_test/01165.h5
505 | nyu_test/01166.h5
506 | nyu_test/01167.h5
507 | nyu_test/01170.h5
508 | nyu_test/01171.h5
509 | nyu_test/01174.h5
510 | nyu_test/01175.h5
511 | nyu_test/01176.h5
512 | nyu_test/01179.h5
513 | nyu_test/01180.h5
514 | nyu_test/01181.h5
515 | nyu_test/01182.h5
516 | nyu_test/01183.h5
517 | nyu_test/01184.h5
518 | nyu_test/01192.h5
519 | nyu_test/01193.h5
520 | nyu_test/01194.h5
521 | nyu_test/01195.h5
522 | nyu_test/01196.h5
523 | nyu_test/01201.h5
524 | nyu_test/01202.h5
525 | nyu_test/01203.h5
526 | nyu_test/01204.h5
527 | nyu_test/01205.h5
528 | nyu_test/01206.h5
529 | nyu_test/01207.h5
530 | nyu_test/01208.h5
531 | nyu_test/01209.h5
532 | nyu_test/01210.h5
533 | nyu_test/01211.h5
534 | nyu_test/01212.h5
535 | nyu_test/01216.h5
536 | nyu_test/01217.h5
537 | nyu_test/01218.h5
538 | nyu_test/01219.h5
539 | nyu_test/01220.h5
540 | nyu_test/01226.h5
541 | nyu_test/01227.h5
542 | nyu_test/01228.h5
543 | nyu_test/01229.h5
544 | nyu_test/01230.h5
545 | nyu_test/01233.h5
546 | nyu_test/01234.h5
547 | nyu_test/01235.h5
548 | nyu_test/01247.h5
549 | nyu_test/01248.h5
550 | nyu_test/01249.h5
551 | nyu_test/01250.h5
552 | nyu_test/01254.h5
553 | nyu_test/01255.h5
554 | nyu_test/01256.h5
555 | nyu_test/01257.h5
556 | nyu_test/01258.h5
557 | nyu_test/01259.h5
558 | nyu_test/01260.h5
559 | nyu_test/01261.h5
560 | nyu_test/01262.h5
561 | nyu_test/01263.h5
562 | nyu_test/01264.h5
563 | nyu_test/01265.h5
564 | nyu_test/01275.h5
565 | nyu_test/01276.h5
566 | nyu_test/01277.h5
567 | nyu_test/01278.h5
568 | nyu_test/01279.h5
569 | nyu_test/01280.h5
570 | nyu_test/01285.h5
571 | nyu_test/01286.h5
572 | nyu_test/01287.h5
573 | nyu_test/01288.h5
574 | nyu_test/01289.h5
575 | nyu_test/01290.h5
576 | nyu_test/01291.h5
577 | nyu_test/01292.h5
578 | nyu_test/01293.h5
579 | nyu_test/01294.h5
580 | nyu_test/01295.h5
581 | nyu_test/01297.h5
582 | nyu_test/01298.h5
583 | nyu_test/01299.h5
584 | nyu_test/01302.h5
585 | nyu_test/01303.h5
586 | nyu_test/01304.h5
587 | nyu_test/01305.h5
588 | nyu_test/01306.h5
589 | nyu_test/01307.h5
590 | nyu_test/01308.h5
591 | nyu_test/01314.h5
592 | nyu_test/01315.h5
593 | nyu_test/01329.h5
594 | nyu_test/01330.h5
595 | nyu_test/01331.h5
596 | nyu_test/01332.h5
597 | nyu_test/01335.h5
598 | nyu_test/01336.h5
599 | nyu_test/01337.h5
600 | nyu_test/01338.h5
601 | nyu_test/01339.h5
602 | nyu_test/01340.h5
603 | nyu_test/01347.h5
604 | nyu_test/01348.h5
605 | nyu_test/01349.h5
606 | nyu_test/01353.h5
607 | nyu_test/01354.h5
608 | nyu_test/01355.h5
609 | nyu_test/01356.h5
610 | nyu_test/01364.h5
611 | nyu_test/01365.h5
612 | nyu_test/01368.h5
613 | nyu_test/01369.h5
614 | nyu_test/01384.h5
615 | nyu_test/01385.h5
616 | nyu_test/01386.h5
617 | nyu_test/01387.h5
618 | nyu_test/01388.h5
619 | nyu_test/01389.h5
620 | nyu_test/01390.h5
621 | nyu_test/01391.h5
622 | nyu_test/01394.h5
623 | nyu_test/01395.h5
624 | nyu_test/01396.h5
625 | nyu_test/01397.h5
626 | nyu_test/01398.h5
627 | nyu_test/01399.h5
628 | nyu_test/01400.h5
629 | nyu_test/01401.h5
630 | nyu_test/01407.h5
631 | nyu_test/01408.h5
632 | nyu_test/01409.h5
633 | nyu_test/01410.h5
634 | nyu_test/01411.h5
635 | nyu_test/01412.h5
636 | nyu_test/01413.h5
637 | nyu_test/01414.h5
638 | nyu_test/01421.h5
639 | nyu_test/01422.h5
640 | nyu_test/01423.h5
641 | nyu_test/01424.h5
642 | nyu_test/01430.h5
643 | nyu_test/01431.h5
644 | nyu_test/01432.h5
645 | nyu_test/01433.h5
646 | nyu_test/01441.h5
647 | nyu_test/01442.h5
648 | nyu_test/01443.h5
649 | nyu_test/01444.h5
650 | nyu_test/01445.h5
651 | nyu_test/01446.h5
652 | nyu_test/01447.h5
653 | nyu_test/01448.h5
654 | nyu_test/01449.h5
655 |
--------------------------------------------------------------------------------
/nyuv2Testing/nyuv2_testing.py:
--------------------------------------------------------------------------------
1 | import torch
2 | from torch.utils.data import DataLoader
3 | import numpy as np
4 | import progressbar
5 | import cv2
6 | import matplotlib as mpl
7 | import matplotlib.cm as cm
8 | from PIL import Image
9 | import os
10 | import argparse
11 |
12 | from nyuv2Testing.nyu_dataset import NYUTestDataset
13 | from network.rsu_decoder import RSUDecoder
14 | from network.encoder import resnet_encoder
15 | import tools
16 |
17 | parser = argparse.ArgumentParser()
18 | parser.add_argument("--data_path", type=str, help="path to the data", default="./NYU-Depth-V2")
19 | parser.add_argument("--resume", type=str, help="path of models to resume", metavar="PATH")
20 | parser.add_argument("--save_dir", type=str, help="path to save results", metavar="PATH", default="./NYU-Depth-V2")
21 | parser.add_argument("--img_height", type=int, help="input image height", default=288)
22 | parser.add_argument("--img_width", type=int, help="input image width", default=384)
23 | parser.add_argument("--min_depth", type=float, help="minimum depth", default=0.1)
24 | parser.add_argument("--max_depth", type=float, help="maximum depth", default=10.0)
25 | parser.add_argument("--num_layers", type=int, help="maximum depth", default=50)
26 | parser.add_argument("--post_process", action="store_true")
27 |
28 | args = parser.parse_args()
29 |
30 | if __name__ == '__main__':
31 | device = torch.device("cpu" if not torch.cuda.is_available() else "cuda")
32 |
33 | encoder = resnet_encoder(num_layers=args.num_layers, num_inputs=1, pretrained=False).to(device)
34 | depth_decoder = RSUDecoder(num_output_channels=1, use_encoder_disp=True, encoder_layer_channels=encoder.layer_channels).to(device)
35 |
36 | val_dataset = NYUTestDataset(data_path=args.data_path, height=args.img_height, width=args.img_width)
37 | val_loader = DataLoader(dataset=val_dataset, batch_size=1, shuffle=False, num_workers=4, pin_memory=True)
38 |
39 | checkpoint = torch.load(args.resume, map_location=device)
40 | encoder.load_state_dict(checkpoint["encoder"])
41 | depth_decoder.load_state_dict(checkpoint["depth_decoder"])
42 |
43 | encoder.eval()
44 | depth_decoder.eval()
45 |
46 | pwidgets = [progressbar.Percentage(), " ", progressbar.Counter(format='%(value)02d/%(max_value)d'), " ", progressbar.Bar(), " ",
47 | progressbar.Timer(), ",", progressbar.Variable('abs_rel', width=1), ",", progressbar.Variable('sq_rel', width=1), ",",
48 | progressbar.Variable('rmse', width=1, precision=4), ",", progressbar.Variable('rmse_log', width=1), ",",
49 | progressbar.Variable('a1', width=1), ",", progressbar.Variable('a2', width=1), ",", progressbar.Variable('a3', width=1)]
50 | pbar = progressbar.ProgressBar(widgets=pwidgets, max_value=len(val_loader), prefix="Val:").start()
51 |
52 | depth_errors_meter = tools.AverageMeter()
53 | for batch, data in enumerate(val_loader):
54 | for i in range(len(data)):
55 | data[i] = data[i].to(device, non_blocking=True)
56 |
57 | ipt = data[0]
58 | if args.post_process:
59 | # Post-processed results require each image to have two forward passes
60 | ipt = torch.cat((ipt, torch.flip(ipt, [3])), 0)
61 |
62 | pred_disps = depth_decoder(encoder(ipt))
63 | pred_disps, _ = tools.disp_to_depth(pred_disps[0], args.min_depth, args.max_depth)
64 | pred_disps = pred_disps.data.cpu()[:, 0].numpy() # (b, h, w)
65 |
66 | if args.post_process:
67 | N = pred_disps.shape[0] // 2
68 | pred_disps = tools.post_process_disparity(pred_disps[:N], pred_disps[N:, :, ::-1])
69 |
70 | pred_disp = pred_disps[0]
71 | vmax = np.percentile(pred_disp, 95)
72 | normalizer = mpl.colors.Normalize(vmin=pred_disp.min(), vmax=vmax)
73 | mapper = cm.ScalarMappable(norm=normalizer, cmap='magma')
74 | colormapped_im = (mapper.to_rgba(pred_disp)[:, :, :3] * 255).astype(np.uint8)
75 | im = Image.fromarray(colormapped_im)
76 | os.makedirs(args.save_dir, exist_ok=True)
77 | im.save(os.path.join(args.save_dir, "EPCDepth", "disp{}.png".format(batch)))
78 |
79 | pred_disp = 1 / data[1][0, 0].data.cpu().numpy()
80 | vmax = np.percentile(pred_disp, 95)
81 | normalizer = mpl.colors.Normalize(vmin=pred_disp.min(), vmax=vmax)
82 | mapper = cm.ScalarMappable(norm=normalizer, cmap='magma')
83 | colormapped_im = (mapper.to_rgba(pred_disp)[:, :, :3] * 255).astype(np.uint8)
84 | im = Image.fromarray(colormapped_im)
85 | im.save(os.path.join(args.save_dir, "ground-truth", "gt{}.png".format(batch)))
86 |
87 | gt_depth = data[1][0, 0].data.cpu().numpy() # (h2, w2)
88 | pred_depth = 1 / pred_disps[0] # (h, w)
89 | gt_height, gt_width = gt_depth.shape[:2]
90 | pred_depth = cv2.resize(pred_depth, (gt_width, gt_height))
91 |
92 | mask = gt_depth > 0
93 | pred_depth = pred_depth[mask]
94 | gt_depth = gt_depth[mask]
95 |
96 | ratio = np.median(gt_depth) / np.median(pred_depth)
97 | pred_depth *= ratio
98 |
99 | pred_depth[pred_depth < args.min_depth] = args.min_depth
100 | pred_depth[pred_depth > args.max_depth] = args.max_depth
101 | depth_errors = tools.compute_multi_errors(gt_depth, pred_depth)
102 |
103 | depth_errors_meter.update(depth_errors, 1)
104 |
105 | pbar.update(batch, abs_rel=depth_errors_meter.avg[0],
106 | sq_rel=depth_errors_meter.avg[1],
107 | rmse=depth_errors_meter.avg[2],
108 | rmse_log=depth_errors_meter.avg[3],
109 | a1=depth_errors_meter.avg[4],
110 | a2=depth_errors_meter.avg[5],
111 | a3=depth_errors_meter.avg[6])
112 |
113 | pbar.finish()
114 |
--------------------------------------------------------------------------------
/precompute_depth_hints.py:
--------------------------------------------------------------------------------
1 | # copy from DepthHints (https://arxiv.org/pdf/1909.09051.pdf), please follow their license.
2 |
3 | """ Script to precompute depth hints using the 'fused SGM' method """
4 |
5 | from __future__ import absolute_import, division, print_function
6 |
7 | import os
8 | import random
9 | import numpy as np
10 | import copy
11 | from PIL import Image # using pillow-simd for increased speed
12 |
13 | import argparse
14 | import time
15 |
16 | import torch
17 | from torch.utils.data import DataLoader
18 | from torchvision import transforms
19 |
20 | import torch.nn.functional as F
21 | import tools
22 |
23 | import cv2
24 |
25 | cv2.setNumThreads(0)
26 |
27 |
28 | def pil_loader(path):
29 | # open path as file to avoid ResourceWarning
30 | # (https://github.com/python-pillow/Pillow/issues/835)
31 | with open(path, 'rb') as f:
32 | with Image.open(f) as img:
33 | return img.convert('RGB')
34 |
35 |
36 | def readlines(filename):
37 | """Read all the lines in a text file and return as a list
38 | """
39 | with open(filename, 'r') as f:
40 | lines = f.read().splitlines()
41 | return lines
42 |
43 |
44 | def generate_stereo_matchers():
45 | """ Instantiate stereo matchers with different hyperparameters to build fused depth hints"""
46 | numDisparities = [64, 96, 128, 160]
47 | stereo_matchers = []
48 | for blockSize in [1, 2, 3]:
49 | for numDisparity in numDisparities:
50 | sad_window_size = 3
51 | stereo_params = dict(
52 | preFilterCap=63,
53 | P1=sad_window_size * sad_window_size * 4,
54 | P2=sad_window_size * sad_window_size * 32,
55 | minDisparity=0,
56 | numDisparities=numDisparity,
57 | uniquenessRatio=10,
58 | speckleWindowSize=100,
59 | speckleRange=16,
60 | blockSize=blockSize)
61 | stereo_matcher = cv2.StereoSGBM_create(**stereo_params)
62 | stereo_matchers.append(stereo_matcher)
63 |
64 | return stereo_matchers
65 |
66 |
67 | def compute_reprojection_loss(pred, target):
68 | """Computes reprojection loss between a batch of predicted and target images
69 | """
70 |
71 | ssim = tools.SSIM()
72 | abs_diff = torch.abs(target - pred)
73 | l1_loss = abs_diff.mean(1, True)
74 |
75 | ssim_loss = ssim(pred, target).mean(1, True)
76 | reprojection_loss = 0.85 * ssim_loss + 0.15 * l1_loss
77 |
78 | return reprojection_loss
79 |
80 |
81 | class DepthHintDataset:
82 | """
83 | Class to load data to precompute depth hints.
84 |
85 | Set up as a pytorch dataset to make use of pytorch DataLoader multithreading.
86 | """
87 |
88 | def __init__(self,
89 | data_path,
90 | filenames,
91 | height, width,
92 | save_path,
93 | overwrite):
94 |
95 | self.data_path = data_path
96 | self.filenames = filenames
97 | self.save_path = save_path
98 | self.overwrite = overwrite
99 |
100 | self.height, self.width = height, width
101 |
102 | self.interp = Image.ANTIALIAS
103 | self.resizer = transforms.Resize((self.height, self.width), interpolation=self.interp)
104 |
105 | self.stereo_matchers = generate_stereo_matchers()
106 | self.data_size = len(self.stereo_matchers)
107 |
108 | # setup intrinsics and extrinsics for reprojection
109 | self.K = np.array([[0.58, 0, 0.5, 0],
110 | [0, 1.92, 0.5, 0],
111 | [0, 0, 1, 0],
112 | [0, 0, 0, 1]], dtype=np.float32)
113 | self.K[0] *= self.width
114 | self.K[1] *= self.height
115 | self.invK = np.linalg.pinv(self.K)
116 |
117 | # convert everything to tensors and reshape into a batch
118 | self.K = \
119 | torch.from_numpy(self.K).unsqueeze(0).expand(self.data_size, -1, -1).float()
120 | self.invK = \
121 | torch.from_numpy(self.invK).unsqueeze(0).expand(self.data_size, -1, -1).float()
122 |
123 | self.baseline = 0.1 # the same baseline in datasets/mono_dataset.py
124 | self.T = torch.eye(4).unsqueeze(0).float()
125 | self.T[0, 0, 3] = self.baseline
126 |
127 | def __len__(self):
128 | return len(self.filenames)
129 |
130 | def compute_depths(self, base_image, lookup_image, reverse=False):
131 | """ For a given stereo pair, compute multiple depth maps using stereo matching
132 | (OpenCV Semi-Global Block Matching). Raw pixel disparities are converted to depth using
133 | focal length and baseline.
134 |
135 | Set reverse flag to be True if base image is on the right and lookup image is on the left
136 | (OpenCV SGBM computes disparity for the left image)"""
137 |
138 | if reverse:
139 | base_image = base_image[:, ::-1]
140 | lookup_image = lookup_image[:, ::-1]
141 |
142 | disps = []
143 | for matcher in self.stereo_matchers:
144 | disp = matcher.compute(base_image, lookup_image) / 16 # convert to pixel disparity
145 | if reverse:
146 | disp = disp[:, ::-1]
147 | disps.append(disp)
148 |
149 | disps = np.stack(disps)
150 | disps = torch.from_numpy(disps).float()
151 |
152 | # convert disp to depth ignoring missing pixels
153 | depths = self.K[0, 0, 0] * self.baseline / (disps + 1e-7) * (disps > 0).float()
154 |
155 | return depths
156 |
157 | def __getitem__(self, index):
158 | """ For a given image, get multiple depth maps, intrinsics, extrinsics and images. """
159 | inputs = {}
160 |
161 | sequence, frame, side = self.filenames[index].split()
162 |
163 | if side == 'l':
164 | side, otherside = 'image_02', 'image_03'
165 | baseline_sign = -1
166 | else:
167 | side, otherside = 'image_03', 'image_02'
168 | baseline_sign = 1
169 |
170 | if not self.overwrite:
171 | # if depth exists, then skip this image
172 | if os.path.isfile(os.path.join(self.save_path, sequence, side,
173 | '{}.npy'.format(str(frame).zfill(10)))):
174 | return inputs
175 |
176 | # flip extrinsics if necessary
177 | T = self.T
178 | T[0, 0, 3] = baseline_sign * self.baseline
179 |
180 | base_image = pil_loader(os.path.join(self.data_path, sequence, side,
181 | 'data/{}.jpg'.format(str(frame).zfill(10))))
182 | lookup_image = pil_loader(os.path.join(self.data_path, sequence, otherside,
183 | 'data/{}.jpg'.format(str(frame).zfill(10))))
184 |
185 | base_image = np.array(self.resizer(base_image))
186 | lookup_image = np.array(self.resizer(lookup_image))
187 |
188 | depths = self.compute_depths(base_image, lookup_image, reverse=side == 'image_03')
189 |
190 | # convert to tensors and reshape into batch
191 | base_image = torch.from_numpy(base_image).permute(2, 0, 1).float().unsqueeze(0) \
192 | .expand(self.data_size, -1, -1, -1) / 255
193 | lookup_image = torch.from_numpy(lookup_image).permute(2, 0, 1).float().unsqueeze(0) \
194 | .expand(self.data_size, -1, -1, -1) / 255
195 |
196 | inputs['base_image'] = base_image
197 | inputs['lookup_image'] = lookup_image
198 | inputs['K'] = self.K
199 | inputs['invK'] = self.invK
200 | inputs['depths'] = depths
201 | inputs['T'] = T
202 |
203 | return inputs
204 |
205 |
206 | def run(opt):
207 | """ Computes depth hints for all files in opt.filenames.
208 |
209 | Makes use of pytorch DataLoader multithreading.
210 | """
211 |
212 | print('Computing depth hints...')
213 |
214 | if opt.save_path is None:
215 | opt.save_path = os.path.join(opt.data_path, 'depth_hints')
216 | print('Saving depth hints to {}'.format(opt.save_path))
217 |
218 | # setup dataloader
219 | # batch size hardcoded to 1 as each item will contain multiple depth maps for a single image
220 | filenames = readlines(opt.filenames)
221 | dataset = DepthHintDataset(opt.data_path, filenames, opt.height, opt.width, opt.save_path,
222 | opt.overwrite_saved_depths)
223 | dataloader = DataLoader(dataset, batch_size=1, shuffle=False, drop_last=False, num_workers=0)
224 |
225 | time_before = time.time()
226 | for i, data in enumerate(dataloader):
227 |
228 | # log timings
229 | if i % 50 == 0:
230 | print('image {} of {}'.format(i, len(dataloader)))
231 | if i != 0:
232 | time_taken = time.time() - time_before
233 | print('time for 50 imgs: {}s'.format(time_taken))
234 | print('imgs/s: {}'.format(50 / time_taken))
235 | time_before = time.time()
236 |
237 | # check dataloader actually returned something, if not we have skipped an image
238 | if data:
239 | for key in data:
240 | if torch.cuda.is_available():
241 | data[key] = data[key].cuda()
242 | data[key] = data[key][0] # dataloader returns batch of size 1
243 |
244 | # for each pixel, find 'best' depth which gives the lowest reprojection loss
245 |
246 | sample = tools.generate_warp_image(data['lookup_image'], data['K'], data['T'], data['depths'])
247 | losses = compute_reprojection_loss(sample, data['base_image'])
248 | best_index = torch.argmin(losses, dim=0)
249 | best_depth = torch.gather(data['depths'], dim=0, index=best_index).cpu().numpy()
250 |
251 | sequence, frame, side = filenames[i].split(' ')
252 | if side == 'l':
253 | side = 'image_02'
254 | else:
255 | side = 'image_03'
256 |
257 | savepath = os.path.join(opt.save_path, sequence, side)
258 | os.makedirs(savepath, exist_ok=True)
259 | np.save(os.path.join(savepath, '{}.npy'.format(str(frame).zfill(10))), best_depth)
260 |
261 |
262 | def get_opts():
263 | """ parse command line options """
264 | file_dir = os.path.dirname(__file__)
265 |
266 | parser = argparse.ArgumentParser()
267 |
268 | parser.add_argument('--data_path', help='path to images', type=str, default="./kitti_data")
269 | parser.add_argument('--filenames', help='path to textfile containing list of images', type=str, default=os.path.join(file_dir, 'dataset/filenames/eigen_full/all_files.txt'))
270 | parser.add_argument('--save_path', help='If not set will save to /depth_hints', type=str)
271 | parser.add_argument('--height', help='height of computed depth hints', default=320, type=int)
272 | parser.add_argument('--width', help='width of computed depth hints', default=1024, type=int)
273 | parser.add_argument('--overwrite_saved_depths', help='if set, will overwrite any existing depth hints rather than skipping', action='store_true')
274 |
275 | return parser.parse_args()
276 |
277 |
278 | if __name__ == '__main__':
279 | opts = get_opts()
280 | run(opts)
281 |
--------------------------------------------------------------------------------
/read_depth.py:
--------------------------------------------------------------------------------
1 | import os
2 | import numpy as np
3 | from collections import Counter
4 |
5 |
6 | def load_velodyne_points(filename):
7 | """Load 3D point cloud from KITTI file format
8 | (adapted from https://github.com/hunse/kitti)
9 | """
10 | points = np.fromfile(filename, dtype=np.float32).reshape(-1, 4)
11 | points[:, 3] = 1.0 # homogeneous
12 | return points
13 |
14 |
15 | def read_calib_file(path):
16 | """Read KITTI calibration file
17 | (from https://github.com/hunse/kitti)
18 | """
19 | float_chars = set("0123456789.e+- ")
20 | data = {}
21 | with open(path, 'r') as f:
22 | for line in f.readlines():
23 | key, value = line.split(':', 1)
24 | value = value.strip()
25 | data[key] = value
26 | if float_chars.issuperset(value):
27 | # try to cast to float array
28 | try:
29 | data[key] = np.array(list(map(float, value.split(' '))))
30 | except ValueError:
31 | # casting error: data[key] already eq. value, so pass
32 | pass
33 |
34 | return data
35 |
36 |
37 | def sub2ind(matrixSize, rowSub, colSub):
38 | """Convert row, col matrix subscripts to linear indices
39 | """
40 | m, n = matrixSize
41 | return rowSub * (n-1) + colSub - 1
42 |
43 |
44 | def generate_depth_map(calib_dir, velo_filename, cam=2, vel_depth=False):
45 | """Generate a depth map from velodyne data
46 | """
47 | # load calibration files
48 | cam2cam = read_calib_file(os.path.join(calib_dir, 'calib_cam_to_cam.txt'))
49 | velo2cam = read_calib_file(os.path.join(calib_dir, 'calib_velo_to_cam.txt'))
50 | velo2cam = np.hstack((velo2cam['R'].reshape(3, 3), velo2cam['T'][..., np.newaxis]))
51 | velo2cam = np.vstack((velo2cam, np.array([0, 0, 0, 1.0])))
52 |
53 | # get image shape
54 | im_shape = cam2cam["S_rect_02"][::-1].astype(np.int32)
55 |
56 | # compute projection matrix velodyne->image plane
57 | R_cam2rect = np.eye(4)
58 | R_cam2rect[:3, :3] = cam2cam['R_rect_00'].reshape(3, 3)
59 | P_rect = cam2cam['P_rect_0'+str(cam)].reshape(3, 4)
60 | P_velo2im = np.dot(np.dot(P_rect, R_cam2rect), velo2cam)
61 |
62 | # load velodyne points and remove all behind image plane (approximation)
63 | # each row of the velodyne data is forward, left, up, reflectance
64 | velo = load_velodyne_points(velo_filename)
65 | velo = velo[velo[:, 0] >= 0, :]
66 |
67 | # project the points to the camera
68 | velo_pts_im = np.dot(P_velo2im, velo.T).T
69 | velo_pts_im[:, :2] = velo_pts_im[:, :2] / velo_pts_im[:, 2][..., np.newaxis]
70 |
71 | if vel_depth:
72 | velo_pts_im[:, 2] = velo[:, 0]
73 |
74 | # check if in bounds
75 | # use minus 1 to get the exact same value as KITTI matlab code
76 | velo_pts_im[:, 0] = np.round(velo_pts_im[:, 0]) - 1
77 | velo_pts_im[:, 1] = np.round(velo_pts_im[:, 1]) - 1
78 | val_inds = (velo_pts_im[:, 0] >= 0) & (velo_pts_im[:, 1] >= 0)
79 | val_inds = val_inds & (velo_pts_im[:, 0] < im_shape[1]) & (velo_pts_im[:, 1] < im_shape[0])
80 | velo_pts_im = velo_pts_im[val_inds, :]
81 |
82 | # project to image
83 | depth = np.zeros((im_shape[:2]))
84 | depth[velo_pts_im[:, 1].astype(np.int), velo_pts_im[:, 0].astype(np.int)] = velo_pts_im[:, 2]
85 |
86 | # find the duplicate points and choose the closest depth
87 | inds = sub2ind(depth.shape, velo_pts_im[:, 1], velo_pts_im[:, 0])
88 | dupe_inds = [item for item, count in Counter(inds).items() if count > 1]
89 | for dd in dupe_inds:
90 | pts = np.where(inds == dd)[0]
91 | x_loc = int(velo_pts_im[pts[0], 0])
92 | y_loc = int(velo_pts_im[pts[0], 1])
93 | depth[y_loc, x_loc] = velo_pts_im[pts, 2].min()
94 | depth[depth < 0] = 0
95 |
96 | return depth
97 |
--------------------------------------------------------------------------------
/tools.py:
--------------------------------------------------------------------------------
1 | import os
2 | import torch
3 | import cv2
4 | import torch.nn as nn
5 | import numpy as np
6 | from PIL import Image
7 | import pandas as pd
8 | from collections import Counter
9 | import matplotlib.pyplot as plt
10 |
11 | STEREO_SCALE_FACTOR = 5.4
12 |
13 |
14 | def rot_from_axisangle(vec):
15 | """Convert an axisangle rotation into a 4x4 transformation matrix
16 | (adapted from https://github.com/Wallacoloo/printipi)
17 | Input 'vec' has to be Bx1x3
18 | """
19 | angle = torch.norm(vec, 2, 2, True)
20 | axis = vec / (angle + 1e-7)
21 |
22 | ca = torch.cos(angle)
23 | sa = torch.sin(angle)
24 | C = 1 - ca
25 |
26 | x = axis[..., 0].unsqueeze(1)
27 | y = axis[..., 1].unsqueeze(1)
28 | z = axis[..., 2].unsqueeze(1)
29 |
30 | xs = x * sa
31 | ys = y * sa
32 | zs = z * sa
33 | xC = x * C
34 | yC = y * C
35 | zC = z * C
36 | xyC = x * yC
37 | yzC = y * zC
38 | zxC = z * xC
39 |
40 | rot = torch.zeros((vec.shape[0], 4, 4)).to(device=vec.device)
41 |
42 | rot[:, 0, 0] = torch.squeeze(x * xC + ca)
43 | rot[:, 0, 1] = torch.squeeze(xyC - zs)
44 | rot[:, 0, 2] = torch.squeeze(zxC + ys)
45 | rot[:, 1, 0] = torch.squeeze(xyC + zs)
46 | rot[:, 1, 1] = torch.squeeze(y * yC + ca)
47 | rot[:, 1, 2] = torch.squeeze(yzC - xs)
48 | rot[:, 2, 0] = torch.squeeze(zxC - ys)
49 | rot[:, 2, 1] = torch.squeeze(yzC + xs)
50 | rot[:, 2, 2] = torch.squeeze(z * zC + ca)
51 | rot[:, 3, 3] = 1
52 |
53 | return rot
54 |
55 |
56 | def get_translation_matrix(translation_vector):
57 | """Convert a translation vector into a 4x4 transformation matrix
58 | """
59 | T = torch.zeros(translation_vector.shape[0], 4, 4).to(device=translation_vector.device)
60 |
61 | t = translation_vector.contiguous().view(-1, 3, 1)
62 |
63 | T[:, 0, 0] = 1
64 | T[:, 1, 1] = 1
65 | T[:, 2, 2] = 1
66 | T[:, 3, 3] = 1
67 | T[:, :3, 3, None] = t
68 |
69 | return T
70 |
71 |
72 | def transformation_from_parameters(axisangle, translation, invert=False):
73 | """Convert the network's (axisangle, translation) output into a 4x4 matrix
74 | """
75 | R = rot_from_axisangle(axisangle)
76 | t = translation.clone()
77 |
78 | if invert:
79 | R = R.transpose(1, 2)
80 | t *= -1
81 |
82 | T = get_translation_matrix(t)
83 |
84 | if invert:
85 | M = torch.matmul(R, T)
86 | else:
87 | M = torch.matmul(T, R)
88 |
89 | return M
90 |
91 |
92 | def disp_to_depth(disp, min_depth, max_depth):
93 | """Convert network's sigmoid output into depth prediction
94 | The formula for this conversion is given in the 'additional considerations'
95 | section of the paper.
96 | """
97 | min_disp = 1 / max_depth
98 | max_disp = 1 / min_depth
99 | scaled_disp = min_disp + (max_disp - min_disp) * disp
100 | depth = 1 / scaled_disp
101 | return scaled_disp, depth
102 |
103 |
104 | def generate_warp_image(img, K, T, D):
105 | batch_size, _, height, width = img.shape
106 | eps = 1e-7
107 | inv_K = torch.from_numpy(np.linalg.pinv(K.cpu().numpy())).type_as(D)
108 |
109 | meshgrid = np.meshgrid(range(width), range(height), indexing='xy')
110 | id_coords = np.stack(meshgrid, axis=0).astype(np.float32)
111 | id_coords = nn.Parameter(torch.from_numpy(id_coords), requires_grad=False).type_as(D)
112 |
113 | ones = nn.Parameter(torch.ones(batch_size, 1, height * width), requires_grad=False).type_as(D)
114 |
115 | pix_coords = torch.unsqueeze(torch.stack(
116 | [id_coords[0].view(-1), id_coords[1].view(-1)], 0), 0)
117 | pix_coords = pix_coords.repeat(batch_size, 1, 1)
118 | pix_coords = nn.Parameter(torch.cat([pix_coords, ones], 1), requires_grad=False).type_as(D)
119 |
120 | cam_points = torch.matmul(inv_K[:, :3, :3], pix_coords)
121 | cam_points = D.view(batch_size, 1, -1) * cam_points
122 | cam_points = torch.cat([cam_points, ones], 1)
123 |
124 | P = torch.matmul(K, T)[:, :3, :]
125 |
126 | cam_points = torch.matmul(P, cam_points)
127 |
128 | pix_coords = cam_points[:, :2, :] / (cam_points[:, 2, :].unsqueeze(1) + eps)
129 | pix_coords = pix_coords.view(batch_size, 2, height, width)
130 | pix_coords = pix_coords.permute(0, 2, 3, 1)
131 | pix_coords[..., 0] /= width - 1
132 | pix_coords[..., 1] /= height - 1
133 | pix_coords = (pix_coords - 0.5) * 2
134 |
135 | warp_img = torch.nn.functional.grid_sample(img, pix_coords, padding_mode="border")
136 | return warp_img
137 |
138 |
139 | def compute_depth_errors(gt_depths, pred_disps, val_split="eigen", median_scaling=False):
140 | """Computation of error metrics between predicted and ground truth depths
141 | """
142 | MIN_DEPTH = 1e-3
143 | MAX_DEPTH = 80
144 | depth_errors = []
145 | for i in range(gt_depths.shape[0]):
146 | gt_depth = gt_depths[i]
147 | gt_height, gt_width = gt_depth.shape[:2]
148 |
149 | pred_disp = pred_disps[i]
150 | pred_disp = cv2.resize(pred_disp, (gt_width, gt_height))
151 | pred_depth = 1 / pred_disp
152 |
153 | if val_split == "eigen":
154 | mask = np.logical_and(gt_depth > MIN_DEPTH, gt_depth < MAX_DEPTH)
155 |
156 | crop = np.array([0.40810811 * gt_height, 0.99189189 * gt_height,
157 | 0.03594771 * gt_width, 0.96405229 * gt_width]).astype(np.int32)
158 | crop_mask = np.zeros(mask.shape)
159 | crop_mask[crop[0]:crop[1], crop[2]:crop[3]] = 1
160 | mask = np.logical_and(mask, crop_mask)
161 |
162 | else:
163 | mask = gt_depth > 0
164 |
165 | pred_depth = pred_depth[mask]
166 | gt_depth = gt_depth[mask]
167 |
168 | if median_scaling:
169 | ratio = np.median(gt_depth) / np.median(pred_depth)
170 | pred_depth *= ratio
171 | else:
172 | pred_depth *= STEREO_SCALE_FACTOR
173 |
174 | pred_depth[pred_depth < MIN_DEPTH] = MIN_DEPTH
175 | pred_depth[pred_depth > MAX_DEPTH] = MAX_DEPTH
176 |
177 | depth_errors.append(compute_multi_errors(gt_depth, pred_depth))
178 |
179 | depth_errors = np.array(depth_errors).mean(0)
180 | return depth_errors
181 |
182 |
183 | def compute_multi_errors(gt, pred):
184 | thresh = np.maximum((gt / pred), (pred / gt))
185 | a1 = (thresh < 1.25).mean()
186 | a2 = (thresh < 1.25 ** 2).mean()
187 | a3 = (thresh < 1.25 ** 3).mean()
188 |
189 | rmse = (gt - pred) ** 2
190 | rmse = np.sqrt(rmse.mean())
191 |
192 | rmse_log = (np.log(gt) - np.log(pred)) ** 2
193 | rmse_log = np.sqrt(rmse_log.mean())
194 |
195 | abs_rel = np.mean(np.abs(gt - pred) / gt)
196 |
197 | sq_rel = np.mean(((gt - pred) ** 2) / gt)
198 |
199 | depth_errors = np.array([abs_rel, sq_rel, rmse, rmse_log, a1, a2, a3])
200 |
201 | return depth_errors
202 |
203 |
204 | def post_process_disparity(l_disp, r_disp):
205 | _, h, w = l_disp.shape
206 | m_disp = 0.5 * (l_disp + r_disp)
207 | l, _ = np.meshgrid(np.linspace(0, 1, w), np.linspace(0, 1, h))
208 | l_mask = (1.0 - np.clip(20 * (l - 0.05), 0, 1))[None, ...]
209 | r_mask = l_mask[:, :, ::-1]
210 | return r_mask * l_disp + l_mask * r_disp + (1.0 - l_mask - r_mask) * m_disp
211 |
212 |
213 | class SSIM(nn.Module):
214 | """compute the SSIM loss between a pair of images
215 | """
216 |
217 | def __init__(self):
218 | super(SSIM, self).__init__()
219 | self.mu_x_pool = nn.AvgPool2d(3, 1)
220 | self.mu_y_pool = nn.AvgPool2d(3, 1)
221 | self.sig_x_pool = nn.AvgPool2d(3, 1)
222 | self.sig_y_pool = nn.AvgPool2d(3, 1)
223 | self.sig_xy_pool = nn.AvgPool2d(3, 1)
224 |
225 | # to maintain the size of input and output
226 | self.refl = nn.ReflectionPad2d(1)
227 |
228 | self.C1 = 0.01 ** 2
229 | self.C2 = 0.03 ** 2
230 |
231 | def forward(self, x, y):
232 | """
233 | :param x: (b, c, h, w)
234 | :param y: (b, c, h, w)
235 | :return: (b, c, h, w), size is not change
236 | """
237 | x = self.refl(x)
238 | y = self.refl(y)
239 |
240 | mu_x = self.mu_x_pool(x)
241 | mu_y = self.mu_y_pool(y)
242 |
243 | sigma_x = self.sig_x_pool(x ** 2) - mu_x ** 2
244 | sigma_y = self.sig_y_pool(y ** 2) - mu_y ** 2
245 | sigma_xy = self.sig_xy_pool(x * y) - mu_x * mu_y
246 |
247 | SSIM_n = (2 * mu_x * mu_y + self.C1) * (2 * sigma_xy + self.C2)
248 | SSIM_d = (mu_x ** 2 + mu_y ** 2 + self.C1) * (sigma_x + sigma_y + self.C2)
249 |
250 | return torch.clamp((1 - SSIM_n / SSIM_d) / 2, 0, 1)
251 |
252 |
253 | class AverageMeter(object):
254 | """Computes and stores the average and current value"""
255 |
256 | def __init__(self):
257 | self.reset()
258 |
259 | def reset(self):
260 | self.val = 0
261 | self.avg = 0
262 | self.sum = 0
263 | self.count = 0
264 |
265 | def update(self, val, n=1):
266 | self.val = val
267 | self.sum += val * n
268 | self.count += n
269 | self.avg = self.sum / self.count
270 |
--------------------------------------------------------------------------------