├── .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 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 |
Pre-trainedPPHxWBackboneOutput ScaleAbs RelSq RelRMSEδ < 1.25
model18_lr192x640resnet18 (pt)d00.09980.7224.4750.888
d20.10.7124.4620.886
model18320x1024resnet18 (pt)d00.09250.6714.2970.899
d20.09200.6554.2680.898
model50320x1024resnet50 (pt)d00.09050.6464.2070.901
d20.09050.6294.1870.900
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 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 |
DisparityPPHxWBackboneOutput ScaleAbs RelSq RelRMSEδ < 1.25
disps18_lr192x640resnet18 (pt)d00.09980.7224.4750.888
disps18320x1024resnet18 (pt)d00.09250.6714.2970.899
disps50320x1024resnet50 (pt)d00.09050.6464.2070.901
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 | --------------------------------------------------------------------------------