├── .gitignore ├── LICENSE ├── README.md ├── datasets ├── __init__.py ├── data_io.py ├── kitti_dataset.py └── sceneflow_dataset.py ├── filenames ├── kitti12_test.txt ├── kitti12_train.txt ├── kitti12_val.txt ├── kitti15_test.txt ├── kitti15_train.txt ├── kitti15_val.txt ├── sceneflow_test.txt └── sceneflow_train.txt ├── main.py ├── models ├── __init__.py ├── gwcnet.py ├── loss.py └── submodule.py ├── save_disp.py ├── scripts ├── kitti12.sh ├── kitti12_save.sh ├── kitti15.sh ├── kitti15_save.sh └── sceneflow.sh └── utils ├── __init__.py ├── experiment.py ├── metrics.py └── visualization.py /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | checkpoints 3 | *.ckpt 4 | events.out.* 5 | .idea -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Xiaoyang Guo, Kai Yang, Wukui Yang, Xiaogang Wang, Hongsheng Li 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 | # GwcNet 2 | 3 | This is the implementation of the paper **Group-wise Correlation Stereo Network**, CVPR 19, Xiaoyang Guo, Kai Yang, Wukui Yang, Xiaogang Wang, and Hongsheng Li 4 | [\[Arxiv\]](https://arxiv.org/) 5 | 6 | # How to use 7 | 8 | ## Environment 9 | * python 3.6 10 | * Pytorch >= 0.4.1 11 | 12 | ## Data Preparation 13 | Download [Scene Flow Datasets](https://lmb.informatik.uni-freiburg.de/resources/datasets/SceneFlowDatasets.en.html), [KITTI 2012](http://www.cvlibs.net/datasets/kitti/eval_stereo_flow.php?benchmark=stereo), [KITTI 2015](http://www.cvlibs.net/datasets/kitti/eval_scene_flow.php?benchmark=stereo) 14 | 15 | ## Training 16 | **Scene Flow Datasets** 17 | 18 | run the script `./scripts/sceneflow.sh` to train on Scene Flow datsets. Please update `DATAPATH` in the bash file as your training data path. 19 | 20 | **KITTI 2012 / 2015** 21 | 22 | run the script `./scripts/kitti12.sh` and `./scripts/kitti15.sh` to finetune on the KITTI 12/15 dataset. Please update `DATAPATH` and `--loadckpt` as your training data path and pretrained SceneFlow checkpoint file. 23 | 24 | ## Evaluation 25 | run the script `./scripts/kitti12_save.sh` and `./scripts/kitti15_save.sh` to save png predictions on the test set of the KITTI datasets to the folder `./predictions`. 26 | 27 | ## Pretrained Models 28 | [Scene Flow](https://drive.google.com/file/d/1qiOTocPfLaK9effrLmBadqNtBKT4QX4S/view?usp=sharing) 29 | [KITTI 2012/2015](https://drive.google.com/file/d/1fOw2W7CSEzvSKzBAEIIeftxw6CuvH9Hl/view?usp=sharing) 30 | 31 | # Citation 32 | If you find this code useful in your research, please cite: 33 | 34 | ``` 35 | @inproceedings{guo2019group, 36 | title={Group-wise Correlation Stereo Network}, 37 | author={Guo, Xiaoyang and Yang, Kai and Yang, Wukui and Wang, Xiaogang and Li, Hongsheng}, 38 | booktitle={Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition}, 39 | pages={3273--3282}, 40 | year={2019} 41 | } 42 | ``` 43 | 44 | # Acknowledgements 45 | 46 | Thanks to Jia-Ren Chang for opening source of his excellent work PSMNet. Our work is inspired by this work and part of codes in `models` are migrated from [PSMNet](https://github.com/JiaRenChang/PSMNet). 47 | -------------------------------------------------------------------------------- /datasets/__init__.py: -------------------------------------------------------------------------------- 1 | from .kitti_dataset import KITTIDataset 2 | from .sceneflow_dataset import SceneFlowDatset 3 | 4 | __datasets__ = { 5 | "sceneflow": SceneFlowDatset, 6 | "kitti": KITTIDataset 7 | } 8 | -------------------------------------------------------------------------------- /datasets/data_io.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import re 3 | import torchvision.transforms as transforms 4 | 5 | 6 | def get_transform(): 7 | mean = [0.485, 0.456, 0.406] 8 | std = [0.229, 0.224, 0.225] 9 | 10 | return transforms.Compose([ 11 | transforms.ToTensor(), 12 | transforms.Normalize(mean=mean, std=std), 13 | ]) 14 | 15 | 16 | # read all lines in a file 17 | def read_all_lines(filename): 18 | with open(filename) as f: 19 | lines = [line.rstrip() for line in f.readlines()] 20 | return lines 21 | 22 | 23 | # read an .pfm file into numpy array, used to load SceneFlow disparity files 24 | def pfm_imread(filename): 25 | file = open(filename, 'rb') 26 | color = None 27 | width = None 28 | height = None 29 | scale = None 30 | endian = None 31 | 32 | header = file.readline().decode('utf-8').rstrip() 33 | if header == 'PF': 34 | color = True 35 | elif header == 'Pf': 36 | color = False 37 | else: 38 | raise Exception('Not a PFM file.') 39 | 40 | dim_match = re.match(r'^(\d+)\s(\d+)\s$', file.readline().decode('utf-8')) 41 | if dim_match: 42 | width, height = map(int, dim_match.groups()) 43 | else: 44 | raise Exception('Malformed PFM header.') 45 | 46 | scale = float(file.readline().rstrip()) 47 | if scale < 0: # little-endian 48 | endian = '<' 49 | scale = -scale 50 | else: 51 | endian = '>' # big-endian 52 | 53 | data = np.fromfile(file, endian + 'f') 54 | shape = (height, width, 3) if color else (height, width) 55 | 56 | data = np.reshape(data, shape) 57 | data = np.flipud(data) 58 | return data, scale 59 | -------------------------------------------------------------------------------- /datasets/kitti_dataset.py: -------------------------------------------------------------------------------- 1 | import os 2 | import random 3 | from torch.utils.data import Dataset 4 | from PIL import Image 5 | import numpy as np 6 | from datasets.data_io import get_transform, read_all_lines 7 | 8 | 9 | class KITTIDataset(Dataset): 10 | def __init__(self, datapath, list_filename, training): 11 | self.datapath = datapath 12 | self.left_filenames, self.right_filenames, self.disp_filenames = self.load_path(list_filename) 13 | self.training = training 14 | if self.training: 15 | assert self.disp_filenames is not None 16 | 17 | def load_path(self, list_filename): 18 | lines = read_all_lines(list_filename) 19 | splits = [line.split() for line in lines] 20 | left_images = [x[0] for x in splits] 21 | right_images = [x[1] for x in splits] 22 | if len(splits[0]) == 2: # ground truth not available 23 | return left_images, right_images, None 24 | else: 25 | disp_images = [x[2] for x in splits] 26 | return left_images, right_images, disp_images 27 | 28 | def load_image(self, filename): 29 | return Image.open(filename).convert('RGB') 30 | 31 | def load_disp(self, filename): 32 | data = Image.open(filename) 33 | data = np.array(data, dtype=np.float32) / 256. 34 | return data 35 | 36 | def __len__(self): 37 | return len(self.left_filenames) 38 | 39 | def __getitem__(self, index): 40 | left_img = self.load_image(os.path.join(self.datapath, self.left_filenames[index])) 41 | right_img = self.load_image(os.path.join(self.datapath, self.right_filenames[index])) 42 | 43 | if self.disp_filenames: # has disparity ground truth 44 | disparity = self.load_disp(os.path.join(self.datapath, self.disp_filenames[index])) 45 | else: 46 | disparity = None 47 | 48 | if self.training: 49 | w, h = left_img.size 50 | crop_w, crop_h = 512, 256 51 | 52 | x1 = random.randint(0, w - crop_w) 53 | y1 = random.randint(0, h - crop_h) 54 | 55 | # random crop 56 | left_img = left_img.crop((x1, y1, x1 + crop_w, y1 + crop_h)) 57 | right_img = right_img.crop((x1, y1, x1 + crop_w, y1 + crop_h)) 58 | disparity = disparity[y1:y1 + crop_h, x1:x1 + crop_w] 59 | 60 | # to tensor, normalize 61 | processed = get_transform() 62 | left_img = processed(left_img) 63 | right_img = processed(right_img) 64 | 65 | return {"left": left_img, 66 | "right": right_img, 67 | "disparity": disparity} 68 | else: 69 | w, h = left_img.size 70 | 71 | # normalize 72 | processed = get_transform() 73 | left_img = processed(left_img).numpy() 74 | right_img = processed(right_img).numpy() 75 | 76 | # pad to size 1248x384 77 | top_pad = 384 - h 78 | right_pad = 1248 - w 79 | assert top_pad > 0 and right_pad > 0 80 | # pad images 81 | left_img = np.lib.pad(left_img, ((0, 0), (top_pad, 0), (0, right_pad)), mode='constant', constant_values=0) 82 | right_img = np.lib.pad(right_img, ((0, 0), (top_pad, 0), (0, right_pad)), mode='constant', 83 | constant_values=0) 84 | # pad disparity gt 85 | if disparity is not None: 86 | assert len(disparity.shape) == 2 87 | disparity = np.lib.pad(disparity, ((top_pad, 0), (0, right_pad)), mode='constant', constant_values=0) 88 | 89 | if disparity is not None: 90 | return {"left": left_img, 91 | "right": right_img, 92 | "disparity": disparity, 93 | "top_pad": top_pad, 94 | "right_pad": right_pad} 95 | else: 96 | return {"left": left_img, 97 | "right": right_img, 98 | "top_pad": top_pad, 99 | "right_pad": right_pad, 100 | "left_filename": self.left_filenames[index], 101 | "right_filename": self.right_filenames[index]} 102 | -------------------------------------------------------------------------------- /datasets/sceneflow_dataset.py: -------------------------------------------------------------------------------- 1 | import os 2 | import random 3 | from torch.utils.data import Dataset 4 | from PIL import Image 5 | import numpy as np 6 | from datasets.data_io import get_transform, read_all_lines, pfm_imread 7 | 8 | 9 | class SceneFlowDatset(Dataset): 10 | def __init__(self, datapath, list_filename, training): 11 | self.datapath = datapath 12 | self.left_filenames, self.right_filenames, self.disp_filenames = self.load_path(list_filename) 13 | self.training = training 14 | 15 | def load_path(self, list_filename): 16 | lines = read_all_lines(list_filename) 17 | splits = [line.split() for line in lines] 18 | left_images = [x[0] for x in splits] 19 | right_images = [x[1] for x in splits] 20 | disp_images = [x[2] for x in splits] 21 | return left_images, right_images, disp_images 22 | 23 | def load_image(self, filename): 24 | return Image.open(filename).convert('RGB') 25 | 26 | def load_disp(self, filename): 27 | data, scale = pfm_imread(filename) 28 | data = np.ascontiguousarray(data, dtype=np.float32) 29 | return data 30 | 31 | def __len__(self): 32 | return len(self.left_filenames) 33 | 34 | def __getitem__(self, index): 35 | left_img = self.load_image(os.path.join(self.datapath, self.left_filenames[index])) 36 | right_img = self.load_image(os.path.join(self.datapath, self.right_filenames[index])) 37 | disparity = self.load_disp(os.path.join(self.datapath, self.disp_filenames[index])) 38 | 39 | if self.training: 40 | w, h = left_img.size 41 | crop_w, crop_h = 512, 256 42 | 43 | x1 = random.randint(0, w - crop_w) 44 | y1 = random.randint(0, h - crop_h) 45 | 46 | # random crop 47 | left_img = left_img.crop((x1, y1, x1 + crop_w, y1 + crop_h)) 48 | right_img = right_img.crop((x1, y1, x1 + crop_w, y1 + crop_h)) 49 | disparity = disparity[y1:y1 + crop_h, x1:x1 + crop_w] 50 | 51 | # to tensor, normalize 52 | processed = get_transform() 53 | left_img = processed(left_img) 54 | right_img = processed(right_img) 55 | 56 | return {"left": left_img, 57 | "right": right_img, 58 | "disparity": disparity} 59 | else: 60 | w, h = left_img.size 61 | crop_w, crop_h = 960, 512 62 | 63 | left_img = left_img.crop((w - crop_w, h - crop_h, w, h)) 64 | right_img = right_img.crop((w - crop_w, h - crop_h, w, h)) 65 | disparity = disparity[h - crop_h:h, w - crop_w: w] 66 | 67 | processed = get_transform() 68 | left_img = processed(left_img) 69 | right_img = processed(right_img) 70 | 71 | return {"left": left_img, 72 | "right": right_img, 73 | "disparity": disparity, 74 | "top_pad": 0, 75 | "right_pad": 0} 76 | -------------------------------------------------------------------------------- /filenames/kitti12_test.txt: -------------------------------------------------------------------------------- 1 | testing/colored_0/000000_10.png testing/colored_1/000000_10.png 2 | testing/colored_0/000001_10.png testing/colored_1/000001_10.png 3 | testing/colored_0/000002_10.png testing/colored_1/000002_10.png 4 | testing/colored_0/000003_10.png testing/colored_1/000003_10.png 5 | testing/colored_0/000004_10.png testing/colored_1/000004_10.png 6 | testing/colored_0/000005_10.png testing/colored_1/000005_10.png 7 | testing/colored_0/000006_10.png testing/colored_1/000006_10.png 8 | testing/colored_0/000007_10.png testing/colored_1/000007_10.png 9 | testing/colored_0/000008_10.png testing/colored_1/000008_10.png 10 | testing/colored_0/000009_10.png testing/colored_1/000009_10.png 11 | testing/colored_0/000010_10.png testing/colored_1/000010_10.png 12 | testing/colored_0/000011_10.png testing/colored_1/000011_10.png 13 | testing/colored_0/000012_10.png testing/colored_1/000012_10.png 14 | testing/colored_0/000013_10.png testing/colored_1/000013_10.png 15 | testing/colored_0/000014_10.png testing/colored_1/000014_10.png 16 | testing/colored_0/000015_10.png testing/colored_1/000015_10.png 17 | testing/colored_0/000016_10.png testing/colored_1/000016_10.png 18 | testing/colored_0/000017_10.png testing/colored_1/000017_10.png 19 | testing/colored_0/000018_10.png testing/colored_1/000018_10.png 20 | testing/colored_0/000019_10.png testing/colored_1/000019_10.png 21 | testing/colored_0/000020_10.png testing/colored_1/000020_10.png 22 | testing/colored_0/000021_10.png testing/colored_1/000021_10.png 23 | testing/colored_0/000022_10.png testing/colored_1/000022_10.png 24 | testing/colored_0/000023_10.png testing/colored_1/000023_10.png 25 | testing/colored_0/000024_10.png testing/colored_1/000024_10.png 26 | testing/colored_0/000025_10.png testing/colored_1/000025_10.png 27 | testing/colored_0/000026_10.png testing/colored_1/000026_10.png 28 | testing/colored_0/000027_10.png testing/colored_1/000027_10.png 29 | testing/colored_0/000028_10.png testing/colored_1/000028_10.png 30 | testing/colored_0/000029_10.png testing/colored_1/000029_10.png 31 | testing/colored_0/000030_10.png testing/colored_1/000030_10.png 32 | testing/colored_0/000031_10.png testing/colored_1/000031_10.png 33 | testing/colored_0/000032_10.png testing/colored_1/000032_10.png 34 | testing/colored_0/000033_10.png testing/colored_1/000033_10.png 35 | testing/colored_0/000034_10.png testing/colored_1/000034_10.png 36 | testing/colored_0/000035_10.png testing/colored_1/000035_10.png 37 | testing/colored_0/000036_10.png testing/colored_1/000036_10.png 38 | testing/colored_0/000037_10.png testing/colored_1/000037_10.png 39 | testing/colored_0/000038_10.png testing/colored_1/000038_10.png 40 | testing/colored_0/000039_10.png testing/colored_1/000039_10.png 41 | testing/colored_0/000040_10.png testing/colored_1/000040_10.png 42 | testing/colored_0/000041_10.png testing/colored_1/000041_10.png 43 | testing/colored_0/000042_10.png testing/colored_1/000042_10.png 44 | testing/colored_0/000043_10.png testing/colored_1/000043_10.png 45 | testing/colored_0/000044_10.png testing/colored_1/000044_10.png 46 | testing/colored_0/000045_10.png testing/colored_1/000045_10.png 47 | testing/colored_0/000046_10.png testing/colored_1/000046_10.png 48 | testing/colored_0/000047_10.png testing/colored_1/000047_10.png 49 | testing/colored_0/000048_10.png testing/colored_1/000048_10.png 50 | testing/colored_0/000049_10.png testing/colored_1/000049_10.png 51 | testing/colored_0/000050_10.png testing/colored_1/000050_10.png 52 | testing/colored_0/000051_10.png testing/colored_1/000051_10.png 53 | testing/colored_0/000052_10.png testing/colored_1/000052_10.png 54 | testing/colored_0/000053_10.png testing/colored_1/000053_10.png 55 | testing/colored_0/000054_10.png testing/colored_1/000054_10.png 56 | testing/colored_0/000055_10.png testing/colored_1/000055_10.png 57 | testing/colored_0/000056_10.png testing/colored_1/000056_10.png 58 | testing/colored_0/000057_10.png testing/colored_1/000057_10.png 59 | testing/colored_0/000058_10.png testing/colored_1/000058_10.png 60 | testing/colored_0/000059_10.png testing/colored_1/000059_10.png 61 | testing/colored_0/000060_10.png testing/colored_1/000060_10.png 62 | testing/colored_0/000061_10.png testing/colored_1/000061_10.png 63 | testing/colored_0/000062_10.png testing/colored_1/000062_10.png 64 | testing/colored_0/000063_10.png testing/colored_1/000063_10.png 65 | testing/colored_0/000064_10.png testing/colored_1/000064_10.png 66 | testing/colored_0/000065_10.png testing/colored_1/000065_10.png 67 | testing/colored_0/000066_10.png testing/colored_1/000066_10.png 68 | testing/colored_0/000067_10.png testing/colored_1/000067_10.png 69 | testing/colored_0/000068_10.png testing/colored_1/000068_10.png 70 | testing/colored_0/000069_10.png testing/colored_1/000069_10.png 71 | testing/colored_0/000070_10.png testing/colored_1/000070_10.png 72 | testing/colored_0/000071_10.png testing/colored_1/000071_10.png 73 | testing/colored_0/000072_10.png testing/colored_1/000072_10.png 74 | testing/colored_0/000073_10.png testing/colored_1/000073_10.png 75 | testing/colored_0/000074_10.png testing/colored_1/000074_10.png 76 | testing/colored_0/000075_10.png testing/colored_1/000075_10.png 77 | testing/colored_0/000076_10.png testing/colored_1/000076_10.png 78 | testing/colored_0/000077_10.png testing/colored_1/000077_10.png 79 | testing/colored_0/000078_10.png testing/colored_1/000078_10.png 80 | testing/colored_0/000079_10.png testing/colored_1/000079_10.png 81 | testing/colored_0/000080_10.png testing/colored_1/000080_10.png 82 | testing/colored_0/000081_10.png testing/colored_1/000081_10.png 83 | testing/colored_0/000082_10.png testing/colored_1/000082_10.png 84 | testing/colored_0/000083_10.png testing/colored_1/000083_10.png 85 | testing/colored_0/000084_10.png testing/colored_1/000084_10.png 86 | testing/colored_0/000085_10.png testing/colored_1/000085_10.png 87 | testing/colored_0/000086_10.png testing/colored_1/000086_10.png 88 | testing/colored_0/000087_10.png testing/colored_1/000087_10.png 89 | testing/colored_0/000088_10.png testing/colored_1/000088_10.png 90 | testing/colored_0/000089_10.png testing/colored_1/000089_10.png 91 | testing/colored_0/000090_10.png testing/colored_1/000090_10.png 92 | testing/colored_0/000091_10.png testing/colored_1/000091_10.png 93 | testing/colored_0/000092_10.png testing/colored_1/000092_10.png 94 | testing/colored_0/000093_10.png testing/colored_1/000093_10.png 95 | testing/colored_0/000094_10.png testing/colored_1/000094_10.png 96 | testing/colored_0/000095_10.png testing/colored_1/000095_10.png 97 | testing/colored_0/000096_10.png testing/colored_1/000096_10.png 98 | testing/colored_0/000097_10.png testing/colored_1/000097_10.png 99 | testing/colored_0/000098_10.png testing/colored_1/000098_10.png 100 | testing/colored_0/000099_10.png testing/colored_1/000099_10.png 101 | testing/colored_0/000100_10.png testing/colored_1/000100_10.png 102 | testing/colored_0/000101_10.png testing/colored_1/000101_10.png 103 | testing/colored_0/000102_10.png testing/colored_1/000102_10.png 104 | testing/colored_0/000103_10.png testing/colored_1/000103_10.png 105 | testing/colored_0/000104_10.png testing/colored_1/000104_10.png 106 | testing/colored_0/000105_10.png testing/colored_1/000105_10.png 107 | testing/colored_0/000106_10.png testing/colored_1/000106_10.png 108 | testing/colored_0/000107_10.png testing/colored_1/000107_10.png 109 | testing/colored_0/000108_10.png testing/colored_1/000108_10.png 110 | testing/colored_0/000109_10.png testing/colored_1/000109_10.png 111 | testing/colored_0/000110_10.png testing/colored_1/000110_10.png 112 | testing/colored_0/000111_10.png testing/colored_1/000111_10.png 113 | testing/colored_0/000112_10.png testing/colored_1/000112_10.png 114 | testing/colored_0/000113_10.png testing/colored_1/000113_10.png 115 | testing/colored_0/000114_10.png testing/colored_1/000114_10.png 116 | testing/colored_0/000115_10.png testing/colored_1/000115_10.png 117 | testing/colored_0/000116_10.png testing/colored_1/000116_10.png 118 | testing/colored_0/000117_10.png testing/colored_1/000117_10.png 119 | testing/colored_0/000118_10.png testing/colored_1/000118_10.png 120 | testing/colored_0/000119_10.png testing/colored_1/000119_10.png 121 | testing/colored_0/000120_10.png testing/colored_1/000120_10.png 122 | testing/colored_0/000121_10.png testing/colored_1/000121_10.png 123 | testing/colored_0/000122_10.png testing/colored_1/000122_10.png 124 | testing/colored_0/000123_10.png testing/colored_1/000123_10.png 125 | testing/colored_0/000124_10.png testing/colored_1/000124_10.png 126 | testing/colored_0/000125_10.png testing/colored_1/000125_10.png 127 | testing/colored_0/000126_10.png testing/colored_1/000126_10.png 128 | testing/colored_0/000127_10.png testing/colored_1/000127_10.png 129 | testing/colored_0/000128_10.png testing/colored_1/000128_10.png 130 | testing/colored_0/000129_10.png testing/colored_1/000129_10.png 131 | testing/colored_0/000130_10.png testing/colored_1/000130_10.png 132 | testing/colored_0/000131_10.png testing/colored_1/000131_10.png 133 | testing/colored_0/000132_10.png testing/colored_1/000132_10.png 134 | testing/colored_0/000133_10.png testing/colored_1/000133_10.png 135 | testing/colored_0/000134_10.png testing/colored_1/000134_10.png 136 | testing/colored_0/000135_10.png testing/colored_1/000135_10.png 137 | testing/colored_0/000136_10.png testing/colored_1/000136_10.png 138 | testing/colored_0/000137_10.png testing/colored_1/000137_10.png 139 | testing/colored_0/000138_10.png testing/colored_1/000138_10.png 140 | testing/colored_0/000139_10.png testing/colored_1/000139_10.png 141 | testing/colored_0/000140_10.png testing/colored_1/000140_10.png 142 | testing/colored_0/000141_10.png testing/colored_1/000141_10.png 143 | testing/colored_0/000142_10.png testing/colored_1/000142_10.png 144 | testing/colored_0/000143_10.png testing/colored_1/000143_10.png 145 | testing/colored_0/000144_10.png testing/colored_1/000144_10.png 146 | testing/colored_0/000145_10.png testing/colored_1/000145_10.png 147 | testing/colored_0/000146_10.png testing/colored_1/000146_10.png 148 | testing/colored_0/000147_10.png testing/colored_1/000147_10.png 149 | testing/colored_0/000148_10.png testing/colored_1/000148_10.png 150 | testing/colored_0/000149_10.png testing/colored_1/000149_10.png 151 | testing/colored_0/000150_10.png testing/colored_1/000150_10.png 152 | testing/colored_0/000151_10.png testing/colored_1/000151_10.png 153 | testing/colored_0/000152_10.png testing/colored_1/000152_10.png 154 | testing/colored_0/000153_10.png testing/colored_1/000153_10.png 155 | testing/colored_0/000154_10.png testing/colored_1/000154_10.png 156 | testing/colored_0/000155_10.png testing/colored_1/000155_10.png 157 | testing/colored_0/000156_10.png testing/colored_1/000156_10.png 158 | testing/colored_0/000157_10.png testing/colored_1/000157_10.png 159 | testing/colored_0/000158_10.png testing/colored_1/000158_10.png 160 | testing/colored_0/000159_10.png testing/colored_1/000159_10.png 161 | testing/colored_0/000160_10.png testing/colored_1/000160_10.png 162 | testing/colored_0/000161_10.png testing/colored_1/000161_10.png 163 | testing/colored_0/000162_10.png testing/colored_1/000162_10.png 164 | testing/colored_0/000163_10.png testing/colored_1/000163_10.png 165 | testing/colored_0/000164_10.png testing/colored_1/000164_10.png 166 | testing/colored_0/000165_10.png testing/colored_1/000165_10.png 167 | testing/colored_0/000166_10.png testing/colored_1/000166_10.png 168 | testing/colored_0/000167_10.png testing/colored_1/000167_10.png 169 | testing/colored_0/000168_10.png testing/colored_1/000168_10.png 170 | testing/colored_0/000169_10.png testing/colored_1/000169_10.png 171 | testing/colored_0/000170_10.png testing/colored_1/000170_10.png 172 | testing/colored_0/000171_10.png testing/colored_1/000171_10.png 173 | testing/colored_0/000172_10.png testing/colored_1/000172_10.png 174 | testing/colored_0/000173_10.png testing/colored_1/000173_10.png 175 | testing/colored_0/000174_10.png testing/colored_1/000174_10.png 176 | testing/colored_0/000175_10.png testing/colored_1/000175_10.png 177 | testing/colored_0/000176_10.png testing/colored_1/000176_10.png 178 | testing/colored_0/000177_10.png testing/colored_1/000177_10.png 179 | testing/colored_0/000178_10.png testing/colored_1/000178_10.png 180 | testing/colored_0/000179_10.png testing/colored_1/000179_10.png 181 | testing/colored_0/000180_10.png testing/colored_1/000180_10.png 182 | testing/colored_0/000181_10.png testing/colored_1/000181_10.png 183 | testing/colored_0/000182_10.png testing/colored_1/000182_10.png 184 | testing/colored_0/000183_10.png testing/colored_1/000183_10.png 185 | testing/colored_0/000184_10.png testing/colored_1/000184_10.png 186 | testing/colored_0/000185_10.png testing/colored_1/000185_10.png 187 | testing/colored_0/000186_10.png testing/colored_1/000186_10.png 188 | testing/colored_0/000187_10.png testing/colored_1/000187_10.png 189 | testing/colored_0/000188_10.png testing/colored_1/000188_10.png 190 | testing/colored_0/000189_10.png testing/colored_1/000189_10.png 191 | testing/colored_0/000190_10.png testing/colored_1/000190_10.png 192 | testing/colored_0/000191_10.png testing/colored_1/000191_10.png 193 | testing/colored_0/000192_10.png testing/colored_1/000192_10.png 194 | testing/colored_0/000193_10.png testing/colored_1/000193_10.png 195 | testing/colored_0/000194_10.png testing/colored_1/000194_10.png 196 | -------------------------------------------------------------------------------- /filenames/kitti12_train.txt: -------------------------------------------------------------------------------- 1 | training/colored_0/000000_10.png training/colored_1/000000_10.png training/disp_occ/000000_10.png 2 | training/colored_0/000001_10.png training/colored_1/000001_10.png training/disp_occ/000001_10.png 3 | training/colored_0/000002_10.png training/colored_1/000002_10.png training/disp_occ/000002_10.png 4 | training/colored_0/000003_10.png training/colored_1/000003_10.png training/disp_occ/000003_10.png 5 | training/colored_0/000004_10.png training/colored_1/000004_10.png training/disp_occ/000004_10.png 6 | training/colored_0/000005_10.png training/colored_1/000005_10.png training/disp_occ/000005_10.png 7 | training/colored_0/000006_10.png training/colored_1/000006_10.png training/disp_occ/000006_10.png 8 | training/colored_0/000007_10.png training/colored_1/000007_10.png training/disp_occ/000007_10.png 9 | training/colored_0/000008_10.png training/colored_1/000008_10.png training/disp_occ/000008_10.png 10 | training/colored_0/000009_10.png training/colored_1/000009_10.png training/disp_occ/000009_10.png 11 | training/colored_0/000010_10.png training/colored_1/000010_10.png training/disp_occ/000010_10.png 12 | training/colored_0/000011_10.png training/colored_1/000011_10.png training/disp_occ/000011_10.png 13 | training/colored_0/000012_10.png training/colored_1/000012_10.png training/disp_occ/000012_10.png 14 | training/colored_0/000013_10.png training/colored_1/000013_10.png training/disp_occ/000013_10.png 15 | training/colored_0/000014_10.png training/colored_1/000014_10.png training/disp_occ/000014_10.png 16 | training/colored_0/000015_10.png training/colored_1/000015_10.png training/disp_occ/000015_10.png 17 | training/colored_0/000016_10.png training/colored_1/000016_10.png training/disp_occ/000016_10.png 18 | training/colored_0/000017_10.png training/colored_1/000017_10.png training/disp_occ/000017_10.png 19 | training/colored_0/000018_10.png training/colored_1/000018_10.png training/disp_occ/000018_10.png 20 | training/colored_0/000019_10.png training/colored_1/000019_10.png training/disp_occ/000019_10.png 21 | training/colored_0/000020_10.png training/colored_1/000020_10.png training/disp_occ/000020_10.png 22 | training/colored_0/000021_10.png training/colored_1/000021_10.png training/disp_occ/000021_10.png 23 | training/colored_0/000022_10.png training/colored_1/000022_10.png training/disp_occ/000022_10.png 24 | training/colored_0/000023_10.png training/colored_1/000023_10.png training/disp_occ/000023_10.png 25 | training/colored_0/000024_10.png training/colored_1/000024_10.png training/disp_occ/000024_10.png 26 | training/colored_0/000025_10.png training/colored_1/000025_10.png training/disp_occ/000025_10.png 27 | training/colored_0/000026_10.png training/colored_1/000026_10.png training/disp_occ/000026_10.png 28 | training/colored_0/000027_10.png training/colored_1/000027_10.png training/disp_occ/000027_10.png 29 | training/colored_0/000028_10.png training/colored_1/000028_10.png training/disp_occ/000028_10.png 30 | training/colored_0/000029_10.png training/colored_1/000029_10.png training/disp_occ/000029_10.png 31 | training/colored_0/000030_10.png training/colored_1/000030_10.png training/disp_occ/000030_10.png 32 | training/colored_0/000031_10.png training/colored_1/000031_10.png training/disp_occ/000031_10.png 33 | training/colored_0/000032_10.png training/colored_1/000032_10.png training/disp_occ/000032_10.png 34 | training/colored_0/000033_10.png training/colored_1/000033_10.png training/disp_occ/000033_10.png 35 | training/colored_0/000034_10.png training/colored_1/000034_10.png training/disp_occ/000034_10.png 36 | training/colored_0/000035_10.png training/colored_1/000035_10.png training/disp_occ/000035_10.png 37 | training/colored_0/000036_10.png training/colored_1/000036_10.png training/disp_occ/000036_10.png 38 | training/colored_0/000037_10.png training/colored_1/000037_10.png training/disp_occ/000037_10.png 39 | training/colored_0/000038_10.png training/colored_1/000038_10.png training/disp_occ/000038_10.png 40 | training/colored_0/000039_10.png training/colored_1/000039_10.png training/disp_occ/000039_10.png 41 | training/colored_0/000040_10.png training/colored_1/000040_10.png training/disp_occ/000040_10.png 42 | training/colored_0/000041_10.png training/colored_1/000041_10.png training/disp_occ/000041_10.png 43 | training/colored_0/000042_10.png training/colored_1/000042_10.png training/disp_occ/000042_10.png 44 | training/colored_0/000043_10.png training/colored_1/000043_10.png training/disp_occ/000043_10.png 45 | training/colored_0/000044_10.png training/colored_1/000044_10.png training/disp_occ/000044_10.png 46 | training/colored_0/000045_10.png training/colored_1/000045_10.png training/disp_occ/000045_10.png 47 | training/colored_0/000046_10.png training/colored_1/000046_10.png training/disp_occ/000046_10.png 48 | training/colored_0/000047_10.png training/colored_1/000047_10.png training/disp_occ/000047_10.png 49 | training/colored_0/000048_10.png training/colored_1/000048_10.png training/disp_occ/000048_10.png 50 | training/colored_0/000049_10.png training/colored_1/000049_10.png training/disp_occ/000049_10.png 51 | training/colored_0/000050_10.png training/colored_1/000050_10.png training/disp_occ/000050_10.png 52 | training/colored_0/000051_10.png training/colored_1/000051_10.png training/disp_occ/000051_10.png 53 | training/colored_0/000052_10.png training/colored_1/000052_10.png training/disp_occ/000052_10.png 54 | training/colored_0/000053_10.png training/colored_1/000053_10.png training/disp_occ/000053_10.png 55 | training/colored_0/000054_10.png training/colored_1/000054_10.png training/disp_occ/000054_10.png 56 | training/colored_0/000055_10.png training/colored_1/000055_10.png training/disp_occ/000055_10.png 57 | training/colored_0/000056_10.png training/colored_1/000056_10.png training/disp_occ/000056_10.png 58 | training/colored_0/000057_10.png training/colored_1/000057_10.png training/disp_occ/000057_10.png 59 | training/colored_0/000058_10.png training/colored_1/000058_10.png training/disp_occ/000058_10.png 60 | training/colored_0/000059_10.png training/colored_1/000059_10.png training/disp_occ/000059_10.png 61 | training/colored_0/000060_10.png training/colored_1/000060_10.png training/disp_occ/000060_10.png 62 | training/colored_0/000061_10.png training/colored_1/000061_10.png training/disp_occ/000061_10.png 63 | training/colored_0/000062_10.png training/colored_1/000062_10.png training/disp_occ/000062_10.png 64 | training/colored_0/000063_10.png training/colored_1/000063_10.png training/disp_occ/000063_10.png 65 | training/colored_0/000064_10.png training/colored_1/000064_10.png training/disp_occ/000064_10.png 66 | training/colored_0/000065_10.png training/colored_1/000065_10.png training/disp_occ/000065_10.png 67 | training/colored_0/000066_10.png training/colored_1/000066_10.png training/disp_occ/000066_10.png 68 | training/colored_0/000067_10.png training/colored_1/000067_10.png training/disp_occ/000067_10.png 69 | training/colored_0/000068_10.png training/colored_1/000068_10.png training/disp_occ/000068_10.png 70 | training/colored_0/000069_10.png training/colored_1/000069_10.png training/disp_occ/000069_10.png 71 | training/colored_0/000070_10.png training/colored_1/000070_10.png training/disp_occ/000070_10.png 72 | training/colored_0/000071_10.png training/colored_1/000071_10.png training/disp_occ/000071_10.png 73 | training/colored_0/000072_10.png training/colored_1/000072_10.png training/disp_occ/000072_10.png 74 | training/colored_0/000073_10.png training/colored_1/000073_10.png training/disp_occ/000073_10.png 75 | training/colored_0/000074_10.png training/colored_1/000074_10.png training/disp_occ/000074_10.png 76 | training/colored_0/000075_10.png training/colored_1/000075_10.png training/disp_occ/000075_10.png 77 | training/colored_0/000076_10.png training/colored_1/000076_10.png training/disp_occ/000076_10.png 78 | training/colored_0/000077_10.png training/colored_1/000077_10.png training/disp_occ/000077_10.png 79 | training/colored_0/000078_10.png training/colored_1/000078_10.png training/disp_occ/000078_10.png 80 | training/colored_0/000079_10.png training/colored_1/000079_10.png training/disp_occ/000079_10.png 81 | training/colored_0/000080_10.png training/colored_1/000080_10.png training/disp_occ/000080_10.png 82 | training/colored_0/000081_10.png training/colored_1/000081_10.png training/disp_occ/000081_10.png 83 | training/colored_0/000082_10.png training/colored_1/000082_10.png training/disp_occ/000082_10.png 84 | training/colored_0/000083_10.png training/colored_1/000083_10.png training/disp_occ/000083_10.png 85 | training/colored_0/000084_10.png training/colored_1/000084_10.png training/disp_occ/000084_10.png 86 | training/colored_0/000085_10.png training/colored_1/000085_10.png training/disp_occ/000085_10.png 87 | training/colored_0/000086_10.png training/colored_1/000086_10.png training/disp_occ/000086_10.png 88 | training/colored_0/000087_10.png training/colored_1/000087_10.png training/disp_occ/000087_10.png 89 | training/colored_0/000088_10.png training/colored_1/000088_10.png training/disp_occ/000088_10.png 90 | training/colored_0/000089_10.png training/colored_1/000089_10.png training/disp_occ/000089_10.png 91 | training/colored_0/000090_10.png training/colored_1/000090_10.png training/disp_occ/000090_10.png 92 | training/colored_0/000091_10.png training/colored_1/000091_10.png training/disp_occ/000091_10.png 93 | training/colored_0/000092_10.png training/colored_1/000092_10.png training/disp_occ/000092_10.png 94 | training/colored_0/000093_10.png training/colored_1/000093_10.png training/disp_occ/000093_10.png 95 | training/colored_0/000094_10.png training/colored_1/000094_10.png training/disp_occ/000094_10.png 96 | training/colored_0/000095_10.png training/colored_1/000095_10.png training/disp_occ/000095_10.png 97 | training/colored_0/000096_10.png training/colored_1/000096_10.png training/disp_occ/000096_10.png 98 | training/colored_0/000097_10.png training/colored_1/000097_10.png training/disp_occ/000097_10.png 99 | training/colored_0/000098_10.png training/colored_1/000098_10.png training/disp_occ/000098_10.png 100 | training/colored_0/000099_10.png training/colored_1/000099_10.png training/disp_occ/000099_10.png 101 | training/colored_0/000100_10.png training/colored_1/000100_10.png training/disp_occ/000100_10.png 102 | training/colored_0/000101_10.png training/colored_1/000101_10.png training/disp_occ/000101_10.png 103 | training/colored_0/000102_10.png training/colored_1/000102_10.png training/disp_occ/000102_10.png 104 | training/colored_0/000103_10.png training/colored_1/000103_10.png training/disp_occ/000103_10.png 105 | training/colored_0/000104_10.png training/colored_1/000104_10.png training/disp_occ/000104_10.png 106 | training/colored_0/000105_10.png training/colored_1/000105_10.png training/disp_occ/000105_10.png 107 | training/colored_0/000106_10.png training/colored_1/000106_10.png training/disp_occ/000106_10.png 108 | training/colored_0/000107_10.png training/colored_1/000107_10.png training/disp_occ/000107_10.png 109 | training/colored_0/000108_10.png training/colored_1/000108_10.png training/disp_occ/000108_10.png 110 | training/colored_0/000109_10.png training/colored_1/000109_10.png training/disp_occ/000109_10.png 111 | training/colored_0/000110_10.png training/colored_1/000110_10.png training/disp_occ/000110_10.png 112 | training/colored_0/000111_10.png training/colored_1/000111_10.png training/disp_occ/000111_10.png 113 | training/colored_0/000112_10.png training/colored_1/000112_10.png training/disp_occ/000112_10.png 114 | training/colored_0/000113_10.png training/colored_1/000113_10.png training/disp_occ/000113_10.png 115 | training/colored_0/000114_10.png training/colored_1/000114_10.png training/disp_occ/000114_10.png 116 | training/colored_0/000115_10.png training/colored_1/000115_10.png training/disp_occ/000115_10.png 117 | training/colored_0/000116_10.png training/colored_1/000116_10.png training/disp_occ/000116_10.png 118 | training/colored_0/000117_10.png training/colored_1/000117_10.png training/disp_occ/000117_10.png 119 | training/colored_0/000118_10.png training/colored_1/000118_10.png training/disp_occ/000118_10.png 120 | training/colored_0/000119_10.png training/colored_1/000119_10.png training/disp_occ/000119_10.png 121 | training/colored_0/000120_10.png training/colored_1/000120_10.png training/disp_occ/000120_10.png 122 | training/colored_0/000121_10.png training/colored_1/000121_10.png training/disp_occ/000121_10.png 123 | training/colored_0/000122_10.png training/colored_1/000122_10.png training/disp_occ/000122_10.png 124 | training/colored_0/000123_10.png training/colored_1/000123_10.png training/disp_occ/000123_10.png 125 | training/colored_0/000124_10.png training/colored_1/000124_10.png training/disp_occ/000124_10.png 126 | training/colored_0/000125_10.png training/colored_1/000125_10.png training/disp_occ/000125_10.png 127 | training/colored_0/000126_10.png training/colored_1/000126_10.png training/disp_occ/000126_10.png 128 | training/colored_0/000127_10.png training/colored_1/000127_10.png training/disp_occ/000127_10.png 129 | training/colored_0/000128_10.png training/colored_1/000128_10.png training/disp_occ/000128_10.png 130 | training/colored_0/000129_10.png training/colored_1/000129_10.png training/disp_occ/000129_10.png 131 | training/colored_0/000130_10.png training/colored_1/000130_10.png training/disp_occ/000130_10.png 132 | training/colored_0/000131_10.png training/colored_1/000131_10.png training/disp_occ/000131_10.png 133 | training/colored_0/000132_10.png training/colored_1/000132_10.png training/disp_occ/000132_10.png 134 | training/colored_0/000133_10.png training/colored_1/000133_10.png training/disp_occ/000133_10.png 135 | training/colored_0/000134_10.png training/colored_1/000134_10.png training/disp_occ/000134_10.png 136 | training/colored_0/000135_10.png training/colored_1/000135_10.png training/disp_occ/000135_10.png 137 | training/colored_0/000136_10.png training/colored_1/000136_10.png training/disp_occ/000136_10.png 138 | training/colored_0/000137_10.png training/colored_1/000137_10.png training/disp_occ/000137_10.png 139 | training/colored_0/000138_10.png training/colored_1/000138_10.png training/disp_occ/000138_10.png 140 | training/colored_0/000139_10.png training/colored_1/000139_10.png training/disp_occ/000139_10.png 141 | training/colored_0/000140_10.png training/colored_1/000140_10.png training/disp_occ/000140_10.png 142 | training/colored_0/000141_10.png training/colored_1/000141_10.png training/disp_occ/000141_10.png 143 | training/colored_0/000142_10.png training/colored_1/000142_10.png training/disp_occ/000142_10.png 144 | training/colored_0/000143_10.png training/colored_1/000143_10.png training/disp_occ/000143_10.png 145 | training/colored_0/000144_10.png training/colored_1/000144_10.png training/disp_occ/000144_10.png 146 | training/colored_0/000145_10.png training/colored_1/000145_10.png training/disp_occ/000145_10.png 147 | training/colored_0/000146_10.png training/colored_1/000146_10.png training/disp_occ/000146_10.png 148 | training/colored_0/000147_10.png training/colored_1/000147_10.png training/disp_occ/000147_10.png 149 | training/colored_0/000148_10.png training/colored_1/000148_10.png training/disp_occ/000148_10.png 150 | training/colored_0/000149_10.png training/colored_1/000149_10.png training/disp_occ/000149_10.png 151 | training/colored_0/000150_10.png training/colored_1/000150_10.png training/disp_occ/000150_10.png 152 | training/colored_0/000151_10.png training/colored_1/000151_10.png training/disp_occ/000151_10.png 153 | training/colored_0/000152_10.png training/colored_1/000152_10.png training/disp_occ/000152_10.png 154 | training/colored_0/000153_10.png training/colored_1/000153_10.png training/disp_occ/000153_10.png 155 | training/colored_0/000154_10.png training/colored_1/000154_10.png training/disp_occ/000154_10.png 156 | training/colored_0/000155_10.png training/colored_1/000155_10.png training/disp_occ/000155_10.png 157 | training/colored_0/000156_10.png training/colored_1/000156_10.png training/disp_occ/000156_10.png 158 | training/colored_0/000157_10.png training/colored_1/000157_10.png training/disp_occ/000157_10.png 159 | training/colored_0/000158_10.png training/colored_1/000158_10.png training/disp_occ/000158_10.png 160 | training/colored_0/000159_10.png training/colored_1/000159_10.png training/disp_occ/000159_10.png 161 | training/colored_0/000160_10.png training/colored_1/000160_10.png training/disp_occ/000160_10.png 162 | training/colored_0/000161_10.png training/colored_1/000161_10.png training/disp_occ/000161_10.png 163 | training/colored_0/000162_10.png training/colored_1/000162_10.png training/disp_occ/000162_10.png 164 | training/colored_0/000163_10.png training/colored_1/000163_10.png training/disp_occ/000163_10.png 165 | training/colored_0/000164_10.png training/colored_1/000164_10.png training/disp_occ/000164_10.png 166 | training/colored_0/000165_10.png training/colored_1/000165_10.png training/disp_occ/000165_10.png 167 | training/colored_0/000166_10.png training/colored_1/000166_10.png training/disp_occ/000166_10.png 168 | training/colored_0/000167_10.png training/colored_1/000167_10.png training/disp_occ/000167_10.png 169 | training/colored_0/000168_10.png training/colored_1/000168_10.png training/disp_occ/000168_10.png 170 | training/colored_0/000169_10.png training/colored_1/000169_10.png training/disp_occ/000169_10.png 171 | training/colored_0/000170_10.png training/colored_1/000170_10.png training/disp_occ/000170_10.png 172 | training/colored_0/000171_10.png training/colored_1/000171_10.png training/disp_occ/000171_10.png 173 | training/colored_0/000172_10.png training/colored_1/000172_10.png training/disp_occ/000172_10.png 174 | training/colored_0/000173_10.png training/colored_1/000173_10.png training/disp_occ/000173_10.png 175 | training/colored_0/000174_10.png training/colored_1/000174_10.png training/disp_occ/000174_10.png 176 | training/colored_0/000175_10.png training/colored_1/000175_10.png training/disp_occ/000175_10.png 177 | training/colored_0/000176_10.png training/colored_1/000176_10.png training/disp_occ/000176_10.png 178 | training/colored_0/000177_10.png training/colored_1/000177_10.png training/disp_occ/000177_10.png 179 | training/colored_0/000178_10.png training/colored_1/000178_10.png training/disp_occ/000178_10.png 180 | training/colored_0/000179_10.png training/colored_1/000179_10.png training/disp_occ/000179_10.png 181 | -------------------------------------------------------------------------------- /filenames/kitti12_val.txt: -------------------------------------------------------------------------------- 1 | training/colored_0/000180_10.png training/colored_1/000180_10.png training/disp_occ/000180_10.png 2 | training/colored_0/000181_10.png training/colored_1/000181_10.png training/disp_occ/000181_10.png 3 | training/colored_0/000182_10.png training/colored_1/000182_10.png training/disp_occ/000182_10.png 4 | training/colored_0/000183_10.png training/colored_1/000183_10.png training/disp_occ/000183_10.png 5 | training/colored_0/000184_10.png training/colored_1/000184_10.png training/disp_occ/000184_10.png 6 | training/colored_0/000185_10.png training/colored_1/000185_10.png training/disp_occ/000185_10.png 7 | training/colored_0/000186_10.png training/colored_1/000186_10.png training/disp_occ/000186_10.png 8 | training/colored_0/000187_10.png training/colored_1/000187_10.png training/disp_occ/000187_10.png 9 | training/colored_0/000188_10.png training/colored_1/000188_10.png training/disp_occ/000188_10.png 10 | training/colored_0/000189_10.png training/colored_1/000189_10.png training/disp_occ/000189_10.png 11 | training/colored_0/000190_10.png training/colored_1/000190_10.png training/disp_occ/000190_10.png 12 | training/colored_0/000191_10.png training/colored_1/000191_10.png training/disp_occ/000191_10.png 13 | training/colored_0/000192_10.png training/colored_1/000192_10.png training/disp_occ/000192_10.png 14 | training/colored_0/000193_10.png training/colored_1/000193_10.png training/disp_occ/000193_10.png 15 | -------------------------------------------------------------------------------- /filenames/kitti15_test.txt: -------------------------------------------------------------------------------- 1 | testing/image_2/000000_10.png testing/image_3/000000_10.png 2 | testing/image_2/000001_10.png testing/image_3/000001_10.png 3 | testing/image_2/000002_10.png testing/image_3/000002_10.png 4 | testing/image_2/000003_10.png testing/image_3/000003_10.png 5 | testing/image_2/000004_10.png testing/image_3/000004_10.png 6 | testing/image_2/000005_10.png testing/image_3/000005_10.png 7 | testing/image_2/000006_10.png testing/image_3/000006_10.png 8 | testing/image_2/000007_10.png testing/image_3/000007_10.png 9 | testing/image_2/000008_10.png testing/image_3/000008_10.png 10 | testing/image_2/000009_10.png testing/image_3/000009_10.png 11 | testing/image_2/000010_10.png testing/image_3/000010_10.png 12 | testing/image_2/000011_10.png testing/image_3/000011_10.png 13 | testing/image_2/000012_10.png testing/image_3/000012_10.png 14 | testing/image_2/000013_10.png testing/image_3/000013_10.png 15 | testing/image_2/000014_10.png testing/image_3/000014_10.png 16 | testing/image_2/000015_10.png testing/image_3/000015_10.png 17 | testing/image_2/000016_10.png testing/image_3/000016_10.png 18 | testing/image_2/000017_10.png testing/image_3/000017_10.png 19 | testing/image_2/000018_10.png testing/image_3/000018_10.png 20 | testing/image_2/000019_10.png testing/image_3/000019_10.png 21 | testing/image_2/000020_10.png testing/image_3/000020_10.png 22 | testing/image_2/000021_10.png testing/image_3/000021_10.png 23 | testing/image_2/000022_10.png testing/image_3/000022_10.png 24 | testing/image_2/000023_10.png testing/image_3/000023_10.png 25 | testing/image_2/000024_10.png testing/image_3/000024_10.png 26 | testing/image_2/000025_10.png testing/image_3/000025_10.png 27 | testing/image_2/000026_10.png testing/image_3/000026_10.png 28 | testing/image_2/000027_10.png testing/image_3/000027_10.png 29 | testing/image_2/000028_10.png testing/image_3/000028_10.png 30 | testing/image_2/000029_10.png testing/image_3/000029_10.png 31 | testing/image_2/000030_10.png testing/image_3/000030_10.png 32 | testing/image_2/000031_10.png testing/image_3/000031_10.png 33 | testing/image_2/000032_10.png testing/image_3/000032_10.png 34 | testing/image_2/000033_10.png testing/image_3/000033_10.png 35 | testing/image_2/000034_10.png testing/image_3/000034_10.png 36 | testing/image_2/000035_10.png testing/image_3/000035_10.png 37 | testing/image_2/000036_10.png testing/image_3/000036_10.png 38 | testing/image_2/000037_10.png testing/image_3/000037_10.png 39 | testing/image_2/000038_10.png testing/image_3/000038_10.png 40 | testing/image_2/000039_10.png testing/image_3/000039_10.png 41 | testing/image_2/000040_10.png testing/image_3/000040_10.png 42 | testing/image_2/000041_10.png testing/image_3/000041_10.png 43 | testing/image_2/000042_10.png testing/image_3/000042_10.png 44 | testing/image_2/000043_10.png testing/image_3/000043_10.png 45 | testing/image_2/000044_10.png testing/image_3/000044_10.png 46 | testing/image_2/000045_10.png testing/image_3/000045_10.png 47 | testing/image_2/000046_10.png testing/image_3/000046_10.png 48 | testing/image_2/000047_10.png testing/image_3/000047_10.png 49 | testing/image_2/000048_10.png testing/image_3/000048_10.png 50 | testing/image_2/000049_10.png testing/image_3/000049_10.png 51 | testing/image_2/000050_10.png testing/image_3/000050_10.png 52 | testing/image_2/000051_10.png testing/image_3/000051_10.png 53 | testing/image_2/000052_10.png testing/image_3/000052_10.png 54 | testing/image_2/000053_10.png testing/image_3/000053_10.png 55 | testing/image_2/000054_10.png testing/image_3/000054_10.png 56 | testing/image_2/000055_10.png testing/image_3/000055_10.png 57 | testing/image_2/000056_10.png testing/image_3/000056_10.png 58 | testing/image_2/000057_10.png testing/image_3/000057_10.png 59 | testing/image_2/000058_10.png testing/image_3/000058_10.png 60 | testing/image_2/000059_10.png testing/image_3/000059_10.png 61 | testing/image_2/000060_10.png testing/image_3/000060_10.png 62 | testing/image_2/000061_10.png testing/image_3/000061_10.png 63 | testing/image_2/000062_10.png testing/image_3/000062_10.png 64 | testing/image_2/000063_10.png testing/image_3/000063_10.png 65 | testing/image_2/000064_10.png testing/image_3/000064_10.png 66 | testing/image_2/000065_10.png testing/image_3/000065_10.png 67 | testing/image_2/000066_10.png testing/image_3/000066_10.png 68 | testing/image_2/000067_10.png testing/image_3/000067_10.png 69 | testing/image_2/000068_10.png testing/image_3/000068_10.png 70 | testing/image_2/000069_10.png testing/image_3/000069_10.png 71 | testing/image_2/000070_10.png testing/image_3/000070_10.png 72 | testing/image_2/000071_10.png testing/image_3/000071_10.png 73 | testing/image_2/000072_10.png testing/image_3/000072_10.png 74 | testing/image_2/000073_10.png testing/image_3/000073_10.png 75 | testing/image_2/000074_10.png testing/image_3/000074_10.png 76 | testing/image_2/000075_10.png testing/image_3/000075_10.png 77 | testing/image_2/000076_10.png testing/image_3/000076_10.png 78 | testing/image_2/000077_10.png testing/image_3/000077_10.png 79 | testing/image_2/000078_10.png testing/image_3/000078_10.png 80 | testing/image_2/000079_10.png testing/image_3/000079_10.png 81 | testing/image_2/000080_10.png testing/image_3/000080_10.png 82 | testing/image_2/000081_10.png testing/image_3/000081_10.png 83 | testing/image_2/000082_10.png testing/image_3/000082_10.png 84 | testing/image_2/000083_10.png testing/image_3/000083_10.png 85 | testing/image_2/000084_10.png testing/image_3/000084_10.png 86 | testing/image_2/000085_10.png testing/image_3/000085_10.png 87 | testing/image_2/000086_10.png testing/image_3/000086_10.png 88 | testing/image_2/000087_10.png testing/image_3/000087_10.png 89 | testing/image_2/000088_10.png testing/image_3/000088_10.png 90 | testing/image_2/000089_10.png testing/image_3/000089_10.png 91 | testing/image_2/000090_10.png testing/image_3/000090_10.png 92 | testing/image_2/000091_10.png testing/image_3/000091_10.png 93 | testing/image_2/000092_10.png testing/image_3/000092_10.png 94 | testing/image_2/000093_10.png testing/image_3/000093_10.png 95 | testing/image_2/000094_10.png testing/image_3/000094_10.png 96 | testing/image_2/000095_10.png testing/image_3/000095_10.png 97 | testing/image_2/000096_10.png testing/image_3/000096_10.png 98 | testing/image_2/000097_10.png testing/image_3/000097_10.png 99 | testing/image_2/000098_10.png testing/image_3/000098_10.png 100 | testing/image_2/000099_10.png testing/image_3/000099_10.png 101 | testing/image_2/000100_10.png testing/image_3/000100_10.png 102 | testing/image_2/000101_10.png testing/image_3/000101_10.png 103 | testing/image_2/000102_10.png testing/image_3/000102_10.png 104 | testing/image_2/000103_10.png testing/image_3/000103_10.png 105 | testing/image_2/000104_10.png testing/image_3/000104_10.png 106 | testing/image_2/000105_10.png testing/image_3/000105_10.png 107 | testing/image_2/000106_10.png testing/image_3/000106_10.png 108 | testing/image_2/000107_10.png testing/image_3/000107_10.png 109 | testing/image_2/000108_10.png testing/image_3/000108_10.png 110 | testing/image_2/000109_10.png testing/image_3/000109_10.png 111 | testing/image_2/000110_10.png testing/image_3/000110_10.png 112 | testing/image_2/000111_10.png testing/image_3/000111_10.png 113 | testing/image_2/000112_10.png testing/image_3/000112_10.png 114 | testing/image_2/000113_10.png testing/image_3/000113_10.png 115 | testing/image_2/000114_10.png testing/image_3/000114_10.png 116 | testing/image_2/000115_10.png testing/image_3/000115_10.png 117 | testing/image_2/000116_10.png testing/image_3/000116_10.png 118 | testing/image_2/000117_10.png testing/image_3/000117_10.png 119 | testing/image_2/000118_10.png testing/image_3/000118_10.png 120 | testing/image_2/000119_10.png testing/image_3/000119_10.png 121 | testing/image_2/000120_10.png testing/image_3/000120_10.png 122 | testing/image_2/000121_10.png testing/image_3/000121_10.png 123 | testing/image_2/000122_10.png testing/image_3/000122_10.png 124 | testing/image_2/000123_10.png testing/image_3/000123_10.png 125 | testing/image_2/000124_10.png testing/image_3/000124_10.png 126 | testing/image_2/000125_10.png testing/image_3/000125_10.png 127 | testing/image_2/000126_10.png testing/image_3/000126_10.png 128 | testing/image_2/000127_10.png testing/image_3/000127_10.png 129 | testing/image_2/000128_10.png testing/image_3/000128_10.png 130 | testing/image_2/000129_10.png testing/image_3/000129_10.png 131 | testing/image_2/000130_10.png testing/image_3/000130_10.png 132 | testing/image_2/000131_10.png testing/image_3/000131_10.png 133 | testing/image_2/000132_10.png testing/image_3/000132_10.png 134 | testing/image_2/000133_10.png testing/image_3/000133_10.png 135 | testing/image_2/000134_10.png testing/image_3/000134_10.png 136 | testing/image_2/000135_10.png testing/image_3/000135_10.png 137 | testing/image_2/000136_10.png testing/image_3/000136_10.png 138 | testing/image_2/000137_10.png testing/image_3/000137_10.png 139 | testing/image_2/000138_10.png testing/image_3/000138_10.png 140 | testing/image_2/000139_10.png testing/image_3/000139_10.png 141 | testing/image_2/000140_10.png testing/image_3/000140_10.png 142 | testing/image_2/000141_10.png testing/image_3/000141_10.png 143 | testing/image_2/000142_10.png testing/image_3/000142_10.png 144 | testing/image_2/000143_10.png testing/image_3/000143_10.png 145 | testing/image_2/000144_10.png testing/image_3/000144_10.png 146 | testing/image_2/000145_10.png testing/image_3/000145_10.png 147 | testing/image_2/000146_10.png testing/image_3/000146_10.png 148 | testing/image_2/000147_10.png testing/image_3/000147_10.png 149 | testing/image_2/000148_10.png testing/image_3/000148_10.png 150 | testing/image_2/000149_10.png testing/image_3/000149_10.png 151 | testing/image_2/000150_10.png testing/image_3/000150_10.png 152 | testing/image_2/000151_10.png testing/image_3/000151_10.png 153 | testing/image_2/000152_10.png testing/image_3/000152_10.png 154 | testing/image_2/000153_10.png testing/image_3/000153_10.png 155 | testing/image_2/000154_10.png testing/image_3/000154_10.png 156 | testing/image_2/000155_10.png testing/image_3/000155_10.png 157 | testing/image_2/000156_10.png testing/image_3/000156_10.png 158 | testing/image_2/000157_10.png testing/image_3/000157_10.png 159 | testing/image_2/000158_10.png testing/image_3/000158_10.png 160 | testing/image_2/000159_10.png testing/image_3/000159_10.png 161 | testing/image_2/000160_10.png testing/image_3/000160_10.png 162 | testing/image_2/000161_10.png testing/image_3/000161_10.png 163 | testing/image_2/000162_10.png testing/image_3/000162_10.png 164 | testing/image_2/000163_10.png testing/image_3/000163_10.png 165 | testing/image_2/000164_10.png testing/image_3/000164_10.png 166 | testing/image_2/000165_10.png testing/image_3/000165_10.png 167 | testing/image_2/000166_10.png testing/image_3/000166_10.png 168 | testing/image_2/000167_10.png testing/image_3/000167_10.png 169 | testing/image_2/000168_10.png testing/image_3/000168_10.png 170 | testing/image_2/000169_10.png testing/image_3/000169_10.png 171 | testing/image_2/000170_10.png testing/image_3/000170_10.png 172 | testing/image_2/000171_10.png testing/image_3/000171_10.png 173 | testing/image_2/000172_10.png testing/image_3/000172_10.png 174 | testing/image_2/000173_10.png testing/image_3/000173_10.png 175 | testing/image_2/000174_10.png testing/image_3/000174_10.png 176 | testing/image_2/000175_10.png testing/image_3/000175_10.png 177 | testing/image_2/000176_10.png testing/image_3/000176_10.png 178 | testing/image_2/000177_10.png testing/image_3/000177_10.png 179 | testing/image_2/000178_10.png testing/image_3/000178_10.png 180 | testing/image_2/000179_10.png testing/image_3/000179_10.png 181 | testing/image_2/000180_10.png testing/image_3/000180_10.png 182 | testing/image_2/000181_10.png testing/image_3/000181_10.png 183 | testing/image_2/000182_10.png testing/image_3/000182_10.png 184 | testing/image_2/000183_10.png testing/image_3/000183_10.png 185 | testing/image_2/000184_10.png testing/image_3/000184_10.png 186 | testing/image_2/000185_10.png testing/image_3/000185_10.png 187 | testing/image_2/000186_10.png testing/image_3/000186_10.png 188 | testing/image_2/000187_10.png testing/image_3/000187_10.png 189 | testing/image_2/000188_10.png testing/image_3/000188_10.png 190 | testing/image_2/000189_10.png testing/image_3/000189_10.png 191 | testing/image_2/000190_10.png testing/image_3/000190_10.png 192 | testing/image_2/000191_10.png testing/image_3/000191_10.png 193 | testing/image_2/000192_10.png testing/image_3/000192_10.png 194 | testing/image_2/000193_10.png testing/image_3/000193_10.png 195 | testing/image_2/000194_10.png testing/image_3/000194_10.png 196 | testing/image_2/000195_10.png testing/image_3/000195_10.png 197 | testing/image_2/000196_10.png testing/image_3/000196_10.png 198 | testing/image_2/000197_10.png testing/image_3/000197_10.png 199 | testing/image_2/000198_10.png testing/image_3/000198_10.png 200 | testing/image_2/000199_10.png testing/image_3/000199_10.png 201 | -------------------------------------------------------------------------------- /filenames/kitti15_train.txt: -------------------------------------------------------------------------------- 1 | training/image_2/000000_10.png training/image_3/000000_10.png training/disp_occ_0/000000_10.png 2 | training/image_2/000002_10.png training/image_3/000002_10.png training/disp_occ_0/000002_10.png 3 | training/image_2/000003_10.png training/image_3/000003_10.png training/disp_occ_0/000003_10.png 4 | training/image_2/000004_10.png training/image_3/000004_10.png training/disp_occ_0/000004_10.png 5 | training/image_2/000005_10.png training/image_3/000005_10.png training/disp_occ_0/000005_10.png 6 | training/image_2/000007_10.png training/image_3/000007_10.png training/disp_occ_0/000007_10.png 7 | training/image_2/000008_10.png training/image_3/000008_10.png training/disp_occ_0/000008_10.png 8 | training/image_2/000009_10.png training/image_3/000009_10.png training/disp_occ_0/000009_10.png 9 | training/image_2/000010_10.png training/image_3/000010_10.png training/disp_occ_0/000010_10.png 10 | training/image_2/000011_10.png training/image_3/000011_10.png training/disp_occ_0/000011_10.png 11 | training/image_2/000012_10.png training/image_3/000012_10.png training/disp_occ_0/000012_10.png 12 | training/image_2/000013_10.png training/image_3/000013_10.png training/disp_occ_0/000013_10.png 13 | training/image_2/000014_10.png training/image_3/000014_10.png training/disp_occ_0/000014_10.png 14 | training/image_2/000015_10.png training/image_3/000015_10.png training/disp_occ_0/000015_10.png 15 | training/image_2/000016_10.png training/image_3/000016_10.png training/disp_occ_0/000016_10.png 16 | training/image_2/000017_10.png training/image_3/000017_10.png training/disp_occ_0/000017_10.png 17 | training/image_2/000018_10.png training/image_3/000018_10.png training/disp_occ_0/000018_10.png 18 | training/image_2/000019_10.png training/image_3/000019_10.png training/disp_occ_0/000019_10.png 19 | training/image_2/000020_10.png training/image_3/000020_10.png training/disp_occ_0/000020_10.png 20 | training/image_2/000021_10.png training/image_3/000021_10.png training/disp_occ_0/000021_10.png 21 | training/image_2/000022_10.png training/image_3/000022_10.png training/disp_occ_0/000022_10.png 22 | training/image_2/000023_10.png training/image_3/000023_10.png training/disp_occ_0/000023_10.png 23 | training/image_2/000024_10.png training/image_3/000024_10.png training/disp_occ_0/000024_10.png 24 | training/image_2/000025_10.png training/image_3/000025_10.png training/disp_occ_0/000025_10.png 25 | training/image_2/000027_10.png training/image_3/000027_10.png training/disp_occ_0/000027_10.png 26 | training/image_2/000028_10.png training/image_3/000028_10.png training/disp_occ_0/000028_10.png 27 | training/image_2/000029_10.png training/image_3/000029_10.png training/disp_occ_0/000029_10.png 28 | training/image_2/000030_10.png training/image_3/000030_10.png training/disp_occ_0/000030_10.png 29 | training/image_2/000031_10.png training/image_3/000031_10.png training/disp_occ_0/000031_10.png 30 | training/image_2/000032_10.png training/image_3/000032_10.png training/disp_occ_0/000032_10.png 31 | training/image_2/000033_10.png training/image_3/000033_10.png training/disp_occ_0/000033_10.png 32 | training/image_2/000034_10.png training/image_3/000034_10.png training/disp_occ_0/000034_10.png 33 | training/image_2/000035_10.png training/image_3/000035_10.png training/disp_occ_0/000035_10.png 34 | training/image_2/000036_10.png training/image_3/000036_10.png training/disp_occ_0/000036_10.png 35 | training/image_2/000037_10.png training/image_3/000037_10.png training/disp_occ_0/000037_10.png 36 | training/image_2/000039_10.png training/image_3/000039_10.png training/disp_occ_0/000039_10.png 37 | training/image_2/000040_10.png training/image_3/000040_10.png training/disp_occ_0/000040_10.png 38 | training/image_2/000041_10.png training/image_3/000041_10.png training/disp_occ_0/000041_10.png 39 | training/image_2/000042_10.png training/image_3/000042_10.png training/disp_occ_0/000042_10.png 40 | training/image_2/000044_10.png training/image_3/000044_10.png training/disp_occ_0/000044_10.png 41 | training/image_2/000045_10.png training/image_3/000045_10.png training/disp_occ_0/000045_10.png 42 | training/image_2/000046_10.png training/image_3/000046_10.png training/disp_occ_0/000046_10.png 43 | training/image_2/000047_10.png training/image_3/000047_10.png training/disp_occ_0/000047_10.png 44 | training/image_2/000048_10.png training/image_3/000048_10.png training/disp_occ_0/000048_10.png 45 | training/image_2/000050_10.png training/image_3/000050_10.png training/disp_occ_0/000050_10.png 46 | training/image_2/000051_10.png training/image_3/000051_10.png training/disp_occ_0/000051_10.png 47 | training/image_2/000052_10.png training/image_3/000052_10.png training/disp_occ_0/000052_10.png 48 | training/image_2/000053_10.png training/image_3/000053_10.png training/disp_occ_0/000053_10.png 49 | training/image_2/000054_10.png training/image_3/000054_10.png training/disp_occ_0/000054_10.png 50 | training/image_2/000055_10.png training/image_3/000055_10.png training/disp_occ_0/000055_10.png 51 | training/image_2/000056_10.png training/image_3/000056_10.png training/disp_occ_0/000056_10.png 52 | training/image_2/000057_10.png training/image_3/000057_10.png training/disp_occ_0/000057_10.png 53 | training/image_2/000058_10.png training/image_3/000058_10.png training/disp_occ_0/000058_10.png 54 | training/image_2/000059_10.png training/image_3/000059_10.png training/disp_occ_0/000059_10.png 55 | training/image_2/000060_10.png training/image_3/000060_10.png training/disp_occ_0/000060_10.png 56 | training/image_2/000061_10.png training/image_3/000061_10.png training/disp_occ_0/000061_10.png 57 | training/image_2/000062_10.png training/image_3/000062_10.png training/disp_occ_0/000062_10.png 58 | training/image_2/000063_10.png training/image_3/000063_10.png training/disp_occ_0/000063_10.png 59 | training/image_2/000064_10.png training/image_3/000064_10.png training/disp_occ_0/000064_10.png 60 | training/image_2/000065_10.png training/image_3/000065_10.png training/disp_occ_0/000065_10.png 61 | training/image_2/000066_10.png training/image_3/000066_10.png training/disp_occ_0/000066_10.png 62 | training/image_2/000068_10.png training/image_3/000068_10.png training/disp_occ_0/000068_10.png 63 | training/image_2/000069_10.png training/image_3/000069_10.png training/disp_occ_0/000069_10.png 64 | training/image_2/000070_10.png training/image_3/000070_10.png training/disp_occ_0/000070_10.png 65 | training/image_2/000071_10.png training/image_3/000071_10.png training/disp_occ_0/000071_10.png 66 | training/image_2/000072_10.png training/image_3/000072_10.png training/disp_occ_0/000072_10.png 67 | training/image_2/000073_10.png training/image_3/000073_10.png training/disp_occ_0/000073_10.png 68 | training/image_2/000074_10.png training/image_3/000074_10.png training/disp_occ_0/000074_10.png 69 | training/image_2/000075_10.png training/image_3/000075_10.png training/disp_occ_0/000075_10.png 70 | training/image_2/000076_10.png training/image_3/000076_10.png training/disp_occ_0/000076_10.png 71 | training/image_2/000077_10.png training/image_3/000077_10.png training/disp_occ_0/000077_10.png 72 | training/image_2/000078_10.png training/image_3/000078_10.png training/disp_occ_0/000078_10.png 73 | training/image_2/000079_10.png training/image_3/000079_10.png training/disp_occ_0/000079_10.png 74 | training/image_2/000080_10.png training/image_3/000080_10.png training/disp_occ_0/000080_10.png 75 | training/image_2/000082_10.png training/image_3/000082_10.png training/disp_occ_0/000082_10.png 76 | training/image_2/000083_10.png training/image_3/000083_10.png training/disp_occ_0/000083_10.png 77 | training/image_2/000084_10.png training/image_3/000084_10.png training/disp_occ_0/000084_10.png 78 | training/image_2/000085_10.png training/image_3/000085_10.png training/disp_occ_0/000085_10.png 79 | training/image_2/000086_10.png training/image_3/000086_10.png training/disp_occ_0/000086_10.png 80 | training/image_2/000087_10.png training/image_3/000087_10.png training/disp_occ_0/000087_10.png 81 | training/image_2/000088_10.png training/image_3/000088_10.png training/disp_occ_0/000088_10.png 82 | training/image_2/000090_10.png training/image_3/000090_10.png training/disp_occ_0/000090_10.png 83 | training/image_2/000091_10.png training/image_3/000091_10.png training/disp_occ_0/000091_10.png 84 | training/image_2/000092_10.png training/image_3/000092_10.png training/disp_occ_0/000092_10.png 85 | training/image_2/000093_10.png training/image_3/000093_10.png training/disp_occ_0/000093_10.png 86 | training/image_2/000094_10.png training/image_3/000094_10.png training/disp_occ_0/000094_10.png 87 | training/image_2/000095_10.png training/image_3/000095_10.png training/disp_occ_0/000095_10.png 88 | training/image_2/000096_10.png training/image_3/000096_10.png training/disp_occ_0/000096_10.png 89 | training/image_2/000097_10.png training/image_3/000097_10.png training/disp_occ_0/000097_10.png 90 | training/image_2/000098_10.png training/image_3/000098_10.png training/disp_occ_0/000098_10.png 91 | training/image_2/000099_10.png training/image_3/000099_10.png training/disp_occ_0/000099_10.png 92 | training/image_2/000100_10.png training/image_3/000100_10.png training/disp_occ_0/000100_10.png 93 | training/image_2/000101_10.png training/image_3/000101_10.png training/disp_occ_0/000101_10.png 94 | training/image_2/000102_10.png training/image_3/000102_10.png training/disp_occ_0/000102_10.png 95 | training/image_2/000103_10.png training/image_3/000103_10.png training/disp_occ_0/000103_10.png 96 | training/image_2/000104_10.png training/image_3/000104_10.png training/disp_occ_0/000104_10.png 97 | training/image_2/000105_10.png training/image_3/000105_10.png training/disp_occ_0/000105_10.png 98 | training/image_2/000106_10.png training/image_3/000106_10.png training/disp_occ_0/000106_10.png 99 | training/image_2/000107_10.png training/image_3/000107_10.png training/disp_occ_0/000107_10.png 100 | training/image_2/000108_10.png training/image_3/000108_10.png training/disp_occ_0/000108_10.png 101 | training/image_2/000110_10.png training/image_3/000110_10.png training/disp_occ_0/000110_10.png 102 | training/image_2/000111_10.png training/image_3/000111_10.png training/disp_occ_0/000111_10.png 103 | training/image_2/000112_10.png training/image_3/000112_10.png training/disp_occ_0/000112_10.png 104 | training/image_2/000113_10.png training/image_3/000113_10.png training/disp_occ_0/000113_10.png 105 | training/image_2/000114_10.png training/image_3/000114_10.png training/disp_occ_0/000114_10.png 106 | training/image_2/000115_10.png training/image_3/000115_10.png training/disp_occ_0/000115_10.png 107 | training/image_2/000116_10.png training/image_3/000116_10.png training/disp_occ_0/000116_10.png 108 | training/image_2/000117_10.png training/image_3/000117_10.png training/disp_occ_0/000117_10.png 109 | training/image_2/000118_10.png training/image_3/000118_10.png training/disp_occ_0/000118_10.png 110 | training/image_2/000119_10.png training/image_3/000119_10.png training/disp_occ_0/000119_10.png 111 | training/image_2/000120_10.png training/image_3/000120_10.png training/disp_occ_0/000120_10.png 112 | training/image_2/000121_10.png training/image_3/000121_10.png training/disp_occ_0/000121_10.png 113 | training/image_2/000123_10.png training/image_3/000123_10.png training/disp_occ_0/000123_10.png 114 | training/image_2/000124_10.png training/image_3/000124_10.png training/disp_occ_0/000124_10.png 115 | training/image_2/000125_10.png training/image_3/000125_10.png training/disp_occ_0/000125_10.png 116 | training/image_2/000126_10.png training/image_3/000126_10.png training/disp_occ_0/000126_10.png 117 | training/image_2/000127_10.png training/image_3/000127_10.png training/disp_occ_0/000127_10.png 118 | training/image_2/000128_10.png training/image_3/000128_10.png training/disp_occ_0/000128_10.png 119 | training/image_2/000130_10.png training/image_3/000130_10.png training/disp_occ_0/000130_10.png 120 | training/image_2/000131_10.png training/image_3/000131_10.png training/disp_occ_0/000131_10.png 121 | training/image_2/000133_10.png training/image_3/000133_10.png training/disp_occ_0/000133_10.png 122 | training/image_2/000134_10.png training/image_3/000134_10.png training/disp_occ_0/000134_10.png 123 | training/image_2/000135_10.png training/image_3/000135_10.png training/disp_occ_0/000135_10.png 124 | training/image_2/000136_10.png training/image_3/000136_10.png training/disp_occ_0/000136_10.png 125 | training/image_2/000137_10.png training/image_3/000137_10.png training/disp_occ_0/000137_10.png 126 | training/image_2/000138_10.png training/image_3/000138_10.png training/disp_occ_0/000138_10.png 127 | training/image_2/000139_10.png training/image_3/000139_10.png training/disp_occ_0/000139_10.png 128 | training/image_2/000140_10.png training/image_3/000140_10.png training/disp_occ_0/000140_10.png 129 | training/image_2/000142_10.png training/image_3/000142_10.png training/disp_occ_0/000142_10.png 130 | training/image_2/000143_10.png training/image_3/000143_10.png training/disp_occ_0/000143_10.png 131 | training/image_2/000144_10.png training/image_3/000144_10.png training/disp_occ_0/000144_10.png 132 | training/image_2/000145_10.png training/image_3/000145_10.png training/disp_occ_0/000145_10.png 133 | training/image_2/000146_10.png training/image_3/000146_10.png training/disp_occ_0/000146_10.png 134 | training/image_2/000147_10.png training/image_3/000147_10.png training/disp_occ_0/000147_10.png 135 | training/image_2/000148_10.png training/image_3/000148_10.png training/disp_occ_0/000148_10.png 136 | training/image_2/000149_10.png training/image_3/000149_10.png training/disp_occ_0/000149_10.png 137 | training/image_2/000150_10.png training/image_3/000150_10.png training/disp_occ_0/000150_10.png 138 | training/image_2/000151_10.png training/image_3/000151_10.png training/disp_occ_0/000151_10.png 139 | training/image_2/000153_10.png training/image_3/000153_10.png training/disp_occ_0/000153_10.png 140 | training/image_2/000154_10.png training/image_3/000154_10.png training/disp_occ_0/000154_10.png 141 | training/image_2/000155_10.png training/image_3/000155_10.png training/disp_occ_0/000155_10.png 142 | training/image_2/000156_10.png training/image_3/000156_10.png training/disp_occ_0/000156_10.png 143 | training/image_2/000157_10.png training/image_3/000157_10.png training/disp_occ_0/000157_10.png 144 | training/image_2/000158_10.png training/image_3/000158_10.png training/disp_occ_0/000158_10.png 145 | training/image_2/000160_10.png training/image_3/000160_10.png training/disp_occ_0/000160_10.png 146 | training/image_2/000161_10.png training/image_3/000161_10.png training/disp_occ_0/000161_10.png 147 | training/image_2/000162_10.png training/image_3/000162_10.png training/disp_occ_0/000162_10.png 148 | training/image_2/000163_10.png training/image_3/000163_10.png training/disp_occ_0/000163_10.png 149 | training/image_2/000164_10.png training/image_3/000164_10.png training/disp_occ_0/000164_10.png 150 | training/image_2/000165_10.png training/image_3/000165_10.png training/disp_occ_0/000165_10.png 151 | training/image_2/000166_10.png training/image_3/000166_10.png training/disp_occ_0/000166_10.png 152 | training/image_2/000167_10.png training/image_3/000167_10.png training/disp_occ_0/000167_10.png 153 | training/image_2/000168_10.png training/image_3/000168_10.png training/disp_occ_0/000168_10.png 154 | training/image_2/000169_10.png training/image_3/000169_10.png training/disp_occ_0/000169_10.png 155 | training/image_2/000170_10.png training/image_3/000170_10.png training/disp_occ_0/000170_10.png 156 | training/image_2/000172_10.png training/image_3/000172_10.png training/disp_occ_0/000172_10.png 157 | training/image_2/000173_10.png training/image_3/000173_10.png training/disp_occ_0/000173_10.png 158 | training/image_2/000174_10.png training/image_3/000174_10.png training/disp_occ_0/000174_10.png 159 | training/image_2/000175_10.png training/image_3/000175_10.png training/disp_occ_0/000175_10.png 160 | training/image_2/000176_10.png training/image_3/000176_10.png training/disp_occ_0/000176_10.png 161 | training/image_2/000177_10.png training/image_3/000177_10.png training/disp_occ_0/000177_10.png 162 | training/image_2/000178_10.png training/image_3/000178_10.png training/disp_occ_0/000178_10.png 163 | training/image_2/000180_10.png training/image_3/000180_10.png training/disp_occ_0/000180_10.png 164 | training/image_2/000181_10.png training/image_3/000181_10.png training/disp_occ_0/000181_10.png 165 | training/image_2/000182_10.png training/image_3/000182_10.png training/disp_occ_0/000182_10.png 166 | training/image_2/000183_10.png training/image_3/000183_10.png training/disp_occ_0/000183_10.png 167 | training/image_2/000185_10.png training/image_3/000185_10.png training/disp_occ_0/000185_10.png 168 | training/image_2/000186_10.png training/image_3/000186_10.png training/disp_occ_0/000186_10.png 169 | training/image_2/000188_10.png training/image_3/000188_10.png training/disp_occ_0/000188_10.png 170 | training/image_2/000189_10.png training/image_3/000189_10.png training/disp_occ_0/000189_10.png 171 | training/image_2/000190_10.png training/image_3/000190_10.png training/disp_occ_0/000190_10.png 172 | training/image_2/000191_10.png training/image_3/000191_10.png training/disp_occ_0/000191_10.png 173 | training/image_2/000192_10.png training/image_3/000192_10.png training/disp_occ_0/000192_10.png 174 | training/image_2/000193_10.png training/image_3/000193_10.png training/disp_occ_0/000193_10.png 175 | training/image_2/000194_10.png training/image_3/000194_10.png training/disp_occ_0/000194_10.png 176 | training/image_2/000195_10.png training/image_3/000195_10.png training/disp_occ_0/000195_10.png 177 | training/image_2/000196_10.png training/image_3/000196_10.png training/disp_occ_0/000196_10.png 178 | training/image_2/000197_10.png training/image_3/000197_10.png training/disp_occ_0/000197_10.png 179 | training/image_2/000198_10.png training/image_3/000198_10.png training/disp_occ_0/000198_10.png 180 | training/image_2/000199_10.png training/image_3/000199_10.png training/disp_occ_0/000199_10.png 181 | -------------------------------------------------------------------------------- /filenames/kitti15_val.txt: -------------------------------------------------------------------------------- 1 | training/image_2/000001_10.png training/image_3/000001_10.png training/disp_occ_0/000001_10.png 2 | training/image_2/000006_10.png training/image_3/000006_10.png training/disp_occ_0/000006_10.png 3 | training/image_2/000026_10.png training/image_3/000026_10.png training/disp_occ_0/000026_10.png 4 | training/image_2/000038_10.png training/image_3/000038_10.png training/disp_occ_0/000038_10.png 5 | training/image_2/000043_10.png training/image_3/000043_10.png training/disp_occ_0/000043_10.png 6 | training/image_2/000049_10.png training/image_3/000049_10.png training/disp_occ_0/000049_10.png 7 | training/image_2/000067_10.png training/image_3/000067_10.png training/disp_occ_0/000067_10.png 8 | training/image_2/000081_10.png training/image_3/000081_10.png training/disp_occ_0/000081_10.png 9 | training/image_2/000089_10.png training/image_3/000089_10.png training/disp_occ_0/000089_10.png 10 | training/image_2/000109_10.png training/image_3/000109_10.png training/disp_occ_0/000109_10.png 11 | training/image_2/000122_10.png training/image_3/000122_10.png training/disp_occ_0/000122_10.png 12 | training/image_2/000129_10.png training/image_3/000129_10.png training/disp_occ_0/000129_10.png 13 | training/image_2/000132_10.png training/image_3/000132_10.png training/disp_occ_0/000132_10.png 14 | training/image_2/000141_10.png training/image_3/000141_10.png training/disp_occ_0/000141_10.png 15 | training/image_2/000152_10.png training/image_3/000152_10.png training/disp_occ_0/000152_10.png 16 | training/image_2/000159_10.png training/image_3/000159_10.png training/disp_occ_0/000159_10.png 17 | training/image_2/000171_10.png training/image_3/000171_10.png training/disp_occ_0/000171_10.png 18 | training/image_2/000179_10.png training/image_3/000179_10.png training/disp_occ_0/000179_10.png 19 | training/image_2/000184_10.png training/image_3/000184_10.png training/disp_occ_0/000184_10.png 20 | training/image_2/000187_10.png training/image_3/000187_10.png training/disp_occ_0/000187_10.png 21 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function, division 2 | import argparse 3 | import os 4 | import torch 5 | import torch.nn as nn 6 | import torch.nn.parallel 7 | import torch.backends.cudnn as cudnn 8 | import torch.optim as optim 9 | import torch.utils.data 10 | from torch.autograd import Variable 11 | import torchvision.utils as vutils 12 | import torch.nn.functional as F 13 | import numpy as np 14 | import time 15 | from tensorboardX import SummaryWriter 16 | from datasets import __datasets__ 17 | from models import __models__, model_loss 18 | from utils import * 19 | from torch.utils.data import DataLoader 20 | import gc 21 | 22 | cudnn.benchmark = True 23 | 24 | parser = argparse.ArgumentParser(description='Group-wise Correlation Stereo Network (GwcNet)') 25 | parser.add_argument('--model', default='gwcnet-g', help='select a model structure', choices=__models__.keys()) 26 | parser.add_argument('--maxdisp', type=int, default=192, help='maximum disparity') 27 | 28 | parser.add_argument('--dataset', required=True, help='dataset name', choices=__datasets__.keys()) 29 | parser.add_argument('--datapath', required=True, help='data path') 30 | parser.add_argument('--trainlist', required=True, help='training list') 31 | parser.add_argument('--testlist', required=True, help='testing list') 32 | 33 | parser.add_argument('--lr', type=float, default=0.001, help='base learning rate') 34 | parser.add_argument('--batch_size', type=int, default=16, help='training batch size') 35 | parser.add_argument('--test_batch_size', type=int, default=8, help='testing batch size') 36 | parser.add_argument('--epochs', type=int, required=True, help='number of epochs to train') 37 | parser.add_argument('--lrepochs', type=str, required=True, help='the epochs to decay lr: the downscale rate') 38 | 39 | parser.add_argument('--logdir', required=True, help='the directory to save logs and checkpoints') 40 | parser.add_argument('--loadckpt', help='load the weights from a specific checkpoint') 41 | parser.add_argument('--resume', action='store_true', help='continue training the model') 42 | parser.add_argument('--seed', type=int, default=1, metavar='S', help='random seed (default: 1)') 43 | 44 | parser.add_argument('--summary_freq', type=int, default=20, help='the frequency of saving summary') 45 | parser.add_argument('--save_freq', type=int, default=1, help='the frequency of saving checkpoint') 46 | 47 | # parse arguments, set seeds 48 | args = parser.parse_args() 49 | torch.manual_seed(args.seed) 50 | torch.cuda.manual_seed(args.seed) 51 | os.makedirs(args.logdir, exist_ok=True) 52 | 53 | # create summary logger 54 | print("creating new summary file") 55 | logger = SummaryWriter(args.logdir) 56 | 57 | # dataset, dataloader 58 | StereoDataset = __datasets__[args.dataset] 59 | train_dataset = StereoDataset(args.datapath, args.trainlist, True) 60 | test_dataset = StereoDataset(args.datapath, args.testlist, False) 61 | TrainImgLoader = DataLoader(train_dataset, args.batch_size, shuffle=True, num_workers=8, drop_last=True) 62 | TestImgLoader = DataLoader(test_dataset, args.test_batch_size, shuffle=False, num_workers=4, drop_last=False) 63 | 64 | # model, optimizer 65 | model = __models__[args.model](args.maxdisp) 66 | model = nn.DataParallel(model) 67 | model.cuda() 68 | optimizer = optim.Adam(model.parameters(), lr=args.lr, betas=(0.9, 0.999)) 69 | 70 | # load parameters 71 | start_epoch = 0 72 | if args.resume: 73 | # find all checkpoints file and sort according to epoch id 74 | all_saved_ckpts = [fn for fn in os.listdir(args.logdir) if fn.endswith(".ckpt")] 75 | all_saved_ckpts = sorted(all_saved_ckpts, key=lambda x: int(x.split('_')[-1].split('.')[0])) 76 | # use the latest checkpoint file 77 | loadckpt = os.path.join(args.logdir, all_saved_ckpts[-1]) 78 | print("loading the lastest model in logdir: {}".format(loadckpt)) 79 | state_dict = torch.load(loadckpt) 80 | model.load_state_dict(state_dict['model']) 81 | optimizer.load_state_dict(state_dict['optimizer']) 82 | start_epoch = state_dict['epoch'] + 1 83 | elif args.loadckpt: 84 | # load the checkpoint file specified by args.loadckpt 85 | print("loading model {}".format(args.loadckpt)) 86 | state_dict = torch.load(args.loadckpt) 87 | model.load_state_dict(state_dict['model']) 88 | print("start at epoch {}".format(start_epoch)) 89 | 90 | 91 | def train(): 92 | for epoch_idx in range(start_epoch, args.epochs): 93 | adjust_learning_rate(optimizer, epoch_idx, args.lr, args.lrepochs) 94 | 95 | # training 96 | for batch_idx, sample in enumerate(TrainImgLoader): 97 | global_step = len(TrainImgLoader) * epoch_idx + batch_idx 98 | start_time = time.time() 99 | do_summary = global_step % args.summary_freq == 0 100 | loss, scalar_outputs, image_outputs = train_sample(sample, compute_metrics=do_summary) 101 | if do_summary: 102 | save_scalars(logger, 'train', scalar_outputs, global_step) 103 | save_images(logger, 'train', image_outputs, global_step) 104 | del scalar_outputs, image_outputs 105 | print('Epoch {}/{}, Iter {}/{}, train loss = {:.3f}, time = {:.3f}'.format(epoch_idx, args.epochs, 106 | batch_idx, 107 | len(TrainImgLoader), loss, 108 | time.time() - start_time)) 109 | # saving checkpoints 110 | if (epoch_idx + 1) % args.save_freq == 0: 111 | checkpoint_data = {'epoch': epoch_idx, 'model': model.state_dict(), 'optimizer': optimizer.state_dict()} 112 | torch.save(checkpoint_data, "{}/checkpoint_{:0>6}.ckpt".format(args.logdir, epoch_idx)) 113 | gc.collect() 114 | 115 | # testing 116 | avg_test_scalars = AverageMeterDict() 117 | for batch_idx, sample in enumerate(TestImgLoader): 118 | global_step = len(TestImgLoader) * epoch_idx + batch_idx 119 | start_time = time.time() 120 | do_summary = global_step % args.summary_freq == 0 121 | loss, scalar_outputs, image_outputs = test_sample(sample, compute_metrics=do_summary) 122 | if do_summary: 123 | save_scalars(logger, 'test', scalar_outputs, global_step) 124 | save_images(logger, 'test', image_outputs, global_step) 125 | avg_test_scalars.update(scalar_outputs) 126 | del scalar_outputs, image_outputs 127 | print('Epoch {}/{}, Iter {}/{}, test loss = {:.3f}, time = {:3f}'.format(epoch_idx, args.epochs, 128 | batch_idx, 129 | len(TestImgLoader), loss, 130 | time.time() - start_time)) 131 | avg_test_scalars = avg_test_scalars.mean() 132 | save_scalars(logger, 'fulltest', avg_test_scalars, len(TrainImgLoader) * (epoch_idx + 1)) 133 | print("avg_test_scalars", avg_test_scalars) 134 | gc.collect() 135 | 136 | 137 | # train one sample 138 | def train_sample(sample, compute_metrics=False): 139 | model.train() 140 | 141 | imgL, imgR, disp_gt = sample['left'], sample['right'], sample['disparity'] 142 | imgL = imgL.cuda() 143 | imgR = imgR.cuda() 144 | disp_gt = disp_gt.cuda() 145 | 146 | optimizer.zero_grad() 147 | 148 | disp_ests = model(imgL, imgR) 149 | mask = (disp_gt < args.maxdisp) & (disp_gt > 0) 150 | loss = model_loss(disp_ests, disp_gt, mask) 151 | 152 | scalar_outputs = {"loss": loss} 153 | image_outputs = {"disp_est": disp_ests, "disp_gt": disp_gt, "imgL": imgL, "imgR": imgR} 154 | if compute_metrics: 155 | with torch.no_grad(): 156 | image_outputs["errormap"] = [disp_error_image_func()(disp_est, disp_gt) for disp_est in disp_ests] 157 | scalar_outputs["EPE"] = [EPE_metric(disp_est, disp_gt, mask) for disp_est in disp_ests] 158 | scalar_outputs["D1"] = [D1_metric(disp_est, disp_gt, mask) for disp_est in disp_ests] 159 | scalar_outputs["Thres1"] = [Thres_metric(disp_est, disp_gt, mask, 1.0) for disp_est in disp_ests] 160 | scalar_outputs["Thres2"] = [Thres_metric(disp_est, disp_gt, mask, 2.0) for disp_est in disp_ests] 161 | scalar_outputs["Thres3"] = [Thres_metric(disp_est, disp_gt, mask, 3.0) for disp_est in disp_ests] 162 | loss.backward() 163 | optimizer.step() 164 | 165 | return tensor2float(loss), tensor2float(scalar_outputs), image_outputs 166 | 167 | 168 | # test one sample 169 | @make_nograd_func 170 | def test_sample(sample, compute_metrics=True): 171 | model.eval() 172 | 173 | imgL, imgR, disp_gt = sample['left'], sample['right'], sample['disparity'] 174 | imgL = imgL.cuda() 175 | imgR = imgR.cuda() 176 | disp_gt = disp_gt.cuda() 177 | 178 | disp_ests = model(imgL, imgR) 179 | mask = (disp_gt < args.maxdisp) & (disp_gt > 0) 180 | loss = model_loss(disp_ests, disp_gt, mask) 181 | 182 | scalar_outputs = {"loss": loss} 183 | image_outputs = {"disp_est": disp_ests, "disp_gt": disp_gt, "imgL": imgL, "imgR": imgR} 184 | 185 | scalar_outputs["D1"] = [D1_metric(disp_est, disp_gt, mask) for disp_est in disp_ests] 186 | scalar_outputs["EPE"] = [EPE_metric(disp_est, disp_gt, mask) for disp_est in disp_ests] 187 | scalar_outputs["Thres1"] = [Thres_metric(disp_est, disp_gt, mask, 1.0) for disp_est in disp_ests] 188 | scalar_outputs["Thres2"] = [Thres_metric(disp_est, disp_gt, mask, 2.0) for disp_est in disp_ests] 189 | scalar_outputs["Thres3"] = [Thres_metric(disp_est, disp_gt, mask, 3.0) for disp_est in disp_ests] 190 | 191 | if compute_metrics: 192 | image_outputs["errormap"] = [disp_error_image_func()(disp_est, disp_gt) for disp_est in disp_ests] 193 | 194 | return tensor2float(loss), tensor2float(scalar_outputs), image_outputs 195 | 196 | 197 | if __name__ == '__main__': 198 | train() 199 | -------------------------------------------------------------------------------- /models/__init__.py: -------------------------------------------------------------------------------- 1 | from models.gwcnet import GwcNet_G, GwcNet_GC 2 | from models.loss import model_loss 3 | 4 | __models__ = { 5 | "gwcnet-g": GwcNet_G, 6 | "gwcnet-gc": GwcNet_GC 7 | } 8 | -------------------------------------------------------------------------------- /models/gwcnet.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function 2 | import torch 3 | import torch.nn as nn 4 | import torch.utils.data 5 | from torch.autograd import Variable 6 | import torch.nn.functional as F 7 | from models.submodule import * 8 | import math 9 | 10 | 11 | class feature_extraction(nn.Module): 12 | def __init__(self, concat_feature=False, concat_feature_channel=12): 13 | super(feature_extraction, self).__init__() 14 | self.concat_feature = concat_feature 15 | 16 | self.inplanes = 32 17 | self.firstconv = nn.Sequential(convbn(3, 32, 3, 2, 1, 1), 18 | nn.ReLU(inplace=True), 19 | convbn(32, 32, 3, 1, 1, 1), 20 | nn.ReLU(inplace=True), 21 | convbn(32, 32, 3, 1, 1, 1), 22 | nn.ReLU(inplace=True)) 23 | 24 | self.layer1 = self._make_layer(BasicBlock, 32, 3, 1, 1, 1) 25 | self.layer2 = self._make_layer(BasicBlock, 64, 16, 2, 1, 1) 26 | self.layer3 = self._make_layer(BasicBlock, 128, 3, 1, 1, 1) 27 | self.layer4 = self._make_layer(BasicBlock, 128, 3, 1, 1, 2) 28 | 29 | if self.concat_feature: 30 | self.lastconv = nn.Sequential(convbn(320, 128, 3, 1, 1, 1), 31 | nn.ReLU(inplace=True), 32 | nn.Conv2d(128, concat_feature_channel, kernel_size=1, padding=0, stride=1, 33 | bias=False)) 34 | 35 | def _make_layer(self, block, planes, blocks, stride, pad, dilation): 36 | downsample = None 37 | if stride != 1 or self.inplanes != planes * block.expansion: 38 | downsample = nn.Sequential( 39 | nn.Conv2d(self.inplanes, planes * block.expansion, 40 | kernel_size=1, stride=stride, bias=False), 41 | nn.BatchNorm2d(planes * block.expansion), ) 42 | 43 | layers = [] 44 | layers.append(block(self.inplanes, planes, stride, downsample, pad, dilation)) 45 | self.inplanes = planes * block.expansion 46 | for i in range(1, blocks): 47 | layers.append(block(self.inplanes, planes, 1, None, pad, dilation)) 48 | 49 | return nn.Sequential(*layers) 50 | 51 | def forward(self, x): 52 | x = self.firstconv(x) 53 | x = self.layer1(x) 54 | l2 = self.layer2(x) 55 | l3 = self.layer3(l2) 56 | l4 = self.layer4(l3) 57 | 58 | gwc_feature = torch.cat((l2, l3, l4), dim=1) 59 | 60 | if not self.concat_feature: 61 | return {"gwc_feature": gwc_feature} 62 | else: 63 | concat_feature = self.lastconv(gwc_feature) 64 | return {"gwc_feature": gwc_feature, "concat_feature": concat_feature} 65 | 66 | 67 | class hourglass(nn.Module): 68 | def __init__(self, in_channels): 69 | super(hourglass, self).__init__() 70 | 71 | self.conv1 = nn.Sequential(convbn_3d(in_channels, in_channels * 2, 3, 2, 1), 72 | nn.ReLU(inplace=True)) 73 | 74 | self.conv2 = nn.Sequential(convbn_3d(in_channels * 2, in_channels * 2, 3, 1, 1), 75 | nn.ReLU(inplace=True)) 76 | 77 | self.conv3 = nn.Sequential(convbn_3d(in_channels * 2, in_channels * 4, 3, 2, 1), 78 | nn.ReLU(inplace=True)) 79 | 80 | self.conv4 = nn.Sequential(convbn_3d(in_channels * 4, in_channels * 4, 3, 1, 1), 81 | nn.ReLU(inplace=True)) 82 | 83 | self.conv5 = nn.Sequential( 84 | nn.ConvTranspose3d(in_channels * 4, in_channels * 2, 3, padding=1, output_padding=1, stride=2, bias=False), 85 | nn.BatchNorm3d(in_channels * 2)) 86 | 87 | self.conv6 = nn.Sequential( 88 | nn.ConvTranspose3d(in_channels * 2, in_channels, 3, padding=1, output_padding=1, stride=2, bias=False), 89 | nn.BatchNorm3d(in_channels)) 90 | 91 | self.redir1 = convbn_3d(in_channels, in_channels, kernel_size=1, stride=1, pad=0) 92 | self.redir2 = convbn_3d(in_channels * 2, in_channels * 2, kernel_size=1, stride=1, pad=0) 93 | 94 | def forward(self, x): 95 | conv1 = self.conv1(x) 96 | conv2 = self.conv2(conv1) 97 | 98 | conv3 = self.conv3(conv2) 99 | conv4 = self.conv4(conv3) 100 | 101 | conv5 = F.relu(self.conv5(conv4) + self.redir2(conv2), inplace=True) 102 | conv6 = F.relu(self.conv6(conv5) + self.redir1(x), inplace=True) 103 | 104 | return conv6 105 | 106 | 107 | class GwcNet(nn.Module): 108 | def __init__(self, maxdisp, use_concat_volume=False): 109 | super(GwcNet, self).__init__() 110 | self.maxdisp = maxdisp 111 | self.use_concat_volume = use_concat_volume 112 | 113 | self.num_groups = 40 114 | 115 | if self.use_concat_volume: 116 | self.concat_channels = 12 117 | self.feature_extraction = feature_extraction(concat_feature=True, 118 | concat_feature_channel=self.concat_channels) 119 | else: 120 | self.concat_channels = 0 121 | self.feature_extraction = feature_extraction(concat_feature=False) 122 | 123 | self.dres0 = nn.Sequential(convbn_3d(self.num_groups + self.concat_channels * 2, 32, 3, 1, 1), 124 | nn.ReLU(inplace=True), 125 | convbn_3d(32, 32, 3, 1, 1), 126 | nn.ReLU(inplace=True)) 127 | 128 | self.dres1 = nn.Sequential(convbn_3d(32, 32, 3, 1, 1), 129 | nn.ReLU(inplace=True), 130 | convbn_3d(32, 32, 3, 1, 1)) 131 | 132 | self.dres2 = hourglass(32) 133 | 134 | self.dres3 = hourglass(32) 135 | 136 | self.dres4 = hourglass(32) 137 | 138 | self.classif0 = nn.Sequential(convbn_3d(32, 32, 3, 1, 1), 139 | nn.ReLU(inplace=True), 140 | nn.Conv3d(32, 1, kernel_size=3, padding=1, stride=1, bias=False)) 141 | 142 | self.classif1 = nn.Sequential(convbn_3d(32, 32, 3, 1, 1), 143 | nn.ReLU(inplace=True), 144 | nn.Conv3d(32, 1, kernel_size=3, padding=1, stride=1, bias=False)) 145 | 146 | self.classif2 = nn.Sequential(convbn_3d(32, 32, 3, 1, 1), 147 | nn.ReLU(inplace=True), 148 | nn.Conv3d(32, 1, kernel_size=3, padding=1, stride=1, bias=False)) 149 | 150 | self.classif3 = nn.Sequential(convbn_3d(32, 32, 3, 1, 1), 151 | nn.ReLU(inplace=True), 152 | nn.Conv3d(32, 1, kernel_size=3, padding=1, stride=1, bias=False)) 153 | 154 | for m in self.modules(): 155 | if isinstance(m, nn.Conv2d): 156 | n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels 157 | m.weight.data.normal_(0, math.sqrt(2. / n)) 158 | elif isinstance(m, nn.Conv3d): 159 | n = m.kernel_size[0] * m.kernel_size[1] * m.kernel_size[2] * m.out_channels 160 | m.weight.data.normal_(0, math.sqrt(2. / n)) 161 | elif isinstance(m, nn.BatchNorm2d): 162 | m.weight.data.fill_(1) 163 | m.bias.data.zero_() 164 | elif isinstance(m, nn.BatchNorm3d): 165 | m.weight.data.fill_(1) 166 | m.bias.data.zero_() 167 | elif isinstance(m, nn.Linear): 168 | m.bias.data.zero_() 169 | 170 | def forward(self, left, right): 171 | features_left = self.feature_extraction(left) 172 | features_right = self.feature_extraction(right) 173 | 174 | gwc_volume = build_gwc_volume(features_left["gwc_feature"], features_right["gwc_feature"], self.maxdisp // 4, 175 | self.num_groups) 176 | if self.use_concat_volume: 177 | concat_volume = build_concat_volume(features_left["concat_feature"], features_right["concat_feature"], 178 | self.maxdisp // 4) 179 | volume = torch.cat((gwc_volume, concat_volume), 1) 180 | else: 181 | volume = gwc_volume 182 | 183 | cost0 = self.dres0(volume) 184 | cost0 = self.dres1(cost0) + cost0 185 | 186 | out1 = self.dres2(cost0) 187 | out2 = self.dres3(out1) 188 | out3 = self.dres4(out2) 189 | 190 | if self.training: 191 | cost0 = self.classif0(cost0) 192 | cost1 = self.classif1(out1) 193 | cost2 = self.classif2(out2) 194 | cost3 = self.classif3(out3) 195 | 196 | cost0 = F.upsample(cost0, [self.maxdisp, left.size()[2], left.size()[3]], mode='trilinear') 197 | cost0 = torch.squeeze(cost0, 1) 198 | pred0 = F.softmax(cost0, dim=1) 199 | pred0 = disparity_regression(pred0, self.maxdisp) 200 | 201 | cost1 = F.upsample(cost1, [self.maxdisp, left.size()[2], left.size()[3]], mode='trilinear') 202 | cost1 = torch.squeeze(cost1, 1) 203 | pred1 = F.softmax(cost1, dim=1) 204 | pred1 = disparity_regression(pred1, self.maxdisp) 205 | 206 | cost2 = F.upsample(cost2, [self.maxdisp, left.size()[2], left.size()[3]], mode='trilinear') 207 | cost2 = torch.squeeze(cost2, 1) 208 | pred2 = F.softmax(cost2, dim=1) 209 | pred2 = disparity_regression(pred2, self.maxdisp) 210 | 211 | cost3 = F.upsample(cost3, [self.maxdisp, left.size()[2], left.size()[3]], mode='trilinear') 212 | cost3 = torch.squeeze(cost3, 1) 213 | pred3 = F.softmax(cost3, dim=1) 214 | pred3 = disparity_regression(pred3, self.maxdisp) 215 | return [pred0, pred1, pred2, pred3] 216 | 217 | else: 218 | cost3 = self.classif3(out3) 219 | cost3 = F.upsample(cost3, [self.maxdisp, left.size()[2], left.size()[3]], mode='trilinear') 220 | cost3 = torch.squeeze(cost3, 1) 221 | pred3 = F.softmax(cost3, dim=1) 222 | pred3 = disparity_regression(pred3, self.maxdisp) 223 | return [pred3] 224 | 225 | 226 | def GwcNet_G(d): 227 | return GwcNet(d, use_concat_volume=False) 228 | 229 | 230 | def GwcNet_GC(d): 231 | return GwcNet(d, use_concat_volume=True) 232 | -------------------------------------------------------------------------------- /models/loss.py: -------------------------------------------------------------------------------- 1 | import torch.nn.functional as F 2 | 3 | 4 | def model_loss(disp_ests, disp_gt, mask): 5 | weights = [0.5, 0.5, 0.7, 1.0] 6 | all_losses = [] 7 | for disp_est, weight in zip(disp_ests, weights): 8 | all_losses.append(weight * F.smooth_l1_loss(disp_est[mask], disp_gt[mask], size_average=True)) 9 | return sum(all_losses) 10 | -------------------------------------------------------------------------------- /models/submodule.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function 2 | import torch 3 | import torch.nn as nn 4 | import torch.utils.data 5 | from torch.autograd import Variable 6 | from torch.autograd.function import Function 7 | import torch.nn.functional as F 8 | import numpy as np 9 | 10 | 11 | def convbn(in_channels, out_channels, kernel_size, stride, pad, dilation): 12 | return nn.Sequential(nn.Conv2d(in_channels, out_channels, kernel_size=kernel_size, stride=stride, 13 | padding=dilation if dilation > 1 else pad, dilation=dilation, bias=False), 14 | nn.BatchNorm2d(out_channels)) 15 | 16 | 17 | def convbn_3d(in_channels, out_channels, kernel_size, stride, pad): 18 | return nn.Sequential(nn.Conv3d(in_channels, out_channels, kernel_size=kernel_size, stride=stride, 19 | padding=pad, bias=False), 20 | nn.BatchNorm3d(out_channels)) 21 | 22 | 23 | def disparity_regression(x, maxdisp): 24 | assert len(x.shape) == 4 25 | disp_values = torch.arange(0, maxdisp, dtype=x.dtype, device=x.device) 26 | disp_values = disp_values.view(1, maxdisp, 1, 1) 27 | return torch.sum(x * disp_values, 1, keepdim=False) 28 | 29 | 30 | def build_concat_volume(refimg_fea, targetimg_fea, maxdisp): 31 | B, C, H, W = refimg_fea.shape 32 | volume = refimg_fea.new_zeros([B, 2 * C, maxdisp, H, W]) 33 | for i in range(maxdisp): 34 | if i > 0: 35 | volume[:, :C, i, :, i:] = refimg_fea[:, :, :, i:] 36 | volume[:, C:, i, :, i:] = targetimg_fea[:, :, :, :-i] 37 | else: 38 | volume[:, :C, i, :, :] = refimg_fea 39 | volume[:, C:, i, :, :] = targetimg_fea 40 | volume = volume.contiguous() 41 | return volume 42 | 43 | 44 | def groupwise_correlation(fea1, fea2, num_groups): 45 | B, C, H, W = fea1.shape 46 | assert C % num_groups == 0 47 | channels_per_group = C // num_groups 48 | cost = (fea1 * fea2).view([B, num_groups, channels_per_group, H, W]).mean(dim=2) 49 | assert cost.shape == (B, num_groups, H, W) 50 | return cost 51 | 52 | 53 | def build_gwc_volume(refimg_fea, targetimg_fea, maxdisp, num_groups): 54 | B, C, H, W = refimg_fea.shape 55 | volume = refimg_fea.new_zeros([B, num_groups, maxdisp, H, W]) 56 | for i in range(maxdisp): 57 | if i > 0: 58 | volume[:, :, i, :, i:] = groupwise_correlation(refimg_fea[:, :, :, i:], targetimg_fea[:, :, :, :-i], 59 | num_groups) 60 | else: 61 | volume[:, :, i, :, :] = groupwise_correlation(refimg_fea, targetimg_fea, num_groups) 62 | volume = volume.contiguous() 63 | return volume 64 | 65 | 66 | class BasicBlock(nn.Module): 67 | expansion = 1 68 | 69 | def __init__(self, inplanes, planes, stride, downsample, pad, dilation): 70 | super(BasicBlock, self).__init__() 71 | 72 | self.conv1 = nn.Sequential(convbn(inplanes, planes, 3, stride, pad, dilation), 73 | nn.ReLU(inplace=True)) 74 | 75 | self.conv2 = convbn(planes, planes, 3, 1, pad, dilation) 76 | 77 | self.downsample = downsample 78 | self.stride = stride 79 | 80 | def forward(self, x): 81 | out = self.conv1(x) 82 | out = self.conv2(out) 83 | 84 | if self.downsample is not None: 85 | x = self.downsample(x) 86 | 87 | out += x 88 | 89 | return out 90 | -------------------------------------------------------------------------------- /save_disp.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function, division 2 | import argparse 3 | import os 4 | import torch 5 | import torch.nn as nn 6 | import torch.nn.parallel 7 | import torch.backends.cudnn as cudnn 8 | import torch.optim as optim 9 | import torch.utils.data 10 | from torch.autograd import Variable 11 | import torchvision.utils as vutils 12 | import torch.nn.functional as F 13 | import numpy as np 14 | import time 15 | from tensorboardX import SummaryWriter 16 | from datasets import __datasets__ 17 | from models import __models__ 18 | from utils import * 19 | from torch.utils.data import DataLoader 20 | import gc 21 | import skimage 22 | 23 | cudnn.benchmark = True 24 | 25 | parser = argparse.ArgumentParser(description='Group-wise Correlation Stereo Network (GwcNet)') 26 | parser.add_argument('--model', default='gwcnet-g', help='select a model structure', choices=__models__.keys()) 27 | parser.add_argument('--maxdisp', type=int, default=192, help='maximum disparity') 28 | 29 | parser.add_argument('--dataset', default='kitti', help='dataset name', choices=__datasets__.keys()) 30 | parser.add_argument('--datapath', required=True, help='data path') 31 | parser.add_argument('--testlist', required=True, help='testing list') 32 | parser.add_argument('--loadckpt', required=True, help='load the weights from a specific checkpoint') 33 | 34 | # parse arguments 35 | args = parser.parse_args() 36 | 37 | # dataset, dataloader 38 | StereoDataset = __datasets__[args.dataset] 39 | test_dataset = StereoDataset(args.datapath, args.testlist, False) 40 | TestImgLoader = DataLoader(test_dataset, 1, shuffle=False, num_workers=4, drop_last=False) 41 | 42 | # model, optimizer 43 | model = __models__[args.model](args.maxdisp) 44 | model = nn.DataParallel(model) 45 | model.cuda() 46 | 47 | # load parameters 48 | print("loading model {}".format(args.loadckpt)) 49 | state_dict = torch.load(args.loadckpt) 50 | model.load_state_dict(state_dict['model']) 51 | 52 | 53 | def test(): 54 | os.makedirs('./predictions', exist_ok=True) 55 | for batch_idx, sample in enumerate(TestImgLoader): 56 | start_time = time.time() 57 | disp_est_np = tensor2numpy(test_sample(sample)) 58 | top_pad_np = tensor2numpy(sample["top_pad"]) 59 | right_pad_np = tensor2numpy(sample["right_pad"]) 60 | left_filenames = sample["left_filename"] 61 | print('Iter {}/{}, time = {:3f}'.format(batch_idx, len(TestImgLoader), 62 | time.time() - start_time)) 63 | 64 | for disp_est, top_pad, right_pad, fn in zip(disp_est_np, top_pad_np, right_pad_np, left_filenames): 65 | assert len(disp_est.shape) == 2 66 | disp_est = np.array(disp_est[top_pad:, :-right_pad], dtype=np.float32) 67 | fn = os.path.join("predictions", fn.split('/')[-1]) 68 | print("saving to", fn, disp_est.shape) 69 | disp_est_uint = np.round(disp_est * 256).astype(np.uint16) 70 | skimage.io.imsave(fn, disp_est_uint) 71 | 72 | 73 | # test one sample 74 | @make_nograd_func 75 | def test_sample(sample): 76 | model.eval() 77 | disp_ests = model(sample['left'].cuda(), sample['right'].cuda()) 78 | return disp_ests[-1] 79 | 80 | 81 | if __name__ == '__main__': 82 | test() 83 | -------------------------------------------------------------------------------- /scripts/kitti12.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -x 3 | DATAPATH="/home/xyguo/data/kitti_2012/" 4 | python main.py --dataset kitti \ 5 | --datapath $DATAPATH --trainlist ./filenames/kitti12_train.txt --testlist ./filenames/kitti12_val.txt \ 6 | --epochs 300 --lrepochs "200:10" \ 7 | --model gwcnet-gc --logdir ./checkpoints/kitti12/gwcnet-gc --loadckpt ./checkpoints/sceneflow/gwcnet-gc/pretrained.ckpt \ 8 | --test_batch_size 1 -------------------------------------------------------------------------------- /scripts/kitti12_save.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -x 3 | DATAPATH="/home/xyguo/data/kitti_2012/" 4 | python save_disp.py --datapath $DATAPATH --testlist ./filenames/kitti12_test.txt --model gwcnet-gc --loadckpt ./checkpoints/kitti12/gwcnet-gc/best.ckpt 5 | -------------------------------------------------------------------------------- /scripts/kitti15.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -x 3 | DATAPATH="/home/xyguo/data/kitti_2015/" 4 | python main.py --dataset kitti \ 5 | --datapath $DATAPATH --trainlist ./filenames/kitti15_train.txt --testlist ./filenames/kitti15_val.txt \ 6 | --epochs 300 --lrepochs "200:10" \ 7 | --model gwcnet-g --logdir ./checkpoints/kitti15/gwcnet-g --loadckpt ./checkpoints/sceneflow/gwcnet-g/pretrained.ckpt \ 8 | --test_batch_size 1 -------------------------------------------------------------------------------- /scripts/kitti15_save.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -x 3 | DATAPATH="/home/xyguo/data/kitti_2015/" 4 | python save_disp.py --datapath $DATAPATH --testlist ./filenames/kitti15_test.txt --model gwcnet-g --loadckpt ./checkpoints/kitti15/gwcnet-g/best.ckpt 5 | -------------------------------------------------------------------------------- /scripts/sceneflow.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -x 3 | DATAPATH="/home/xyguo/data/scene_flow/" 4 | python main.py --dataset sceneflow \ 5 | --datapath $DATAPATH --trainlist ./filenames/sceneflow_train.txt --testlist ./filenames/sceneflow_test.txt \ 6 | --epochs 16 --lrepochs "10,12,14,16:2" \ 7 | --model gwcnet-gc --logdir ./checkpoints/sceneflow/gwcnet-gc -------------------------------------------------------------------------------- /utils/__init__.py: -------------------------------------------------------------------------------- 1 | from utils.experiment import * 2 | from utils.visualization import * 3 | from utils.metrics import D1_metric, Thres_metric, EPE_metric -------------------------------------------------------------------------------- /utils/experiment.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function, division 2 | import torch 3 | import torch.nn as nn 4 | import torch.nn.parallel 5 | import torch.utils.data 6 | from torch.autograd import Variable 7 | import torchvision.utils as vutils 8 | import torch.nn.functional as F 9 | import numpy as np 10 | import copy 11 | 12 | 13 | def make_iterative_func(func): 14 | def wrapper(vars): 15 | if isinstance(vars, list): 16 | return [wrapper(x) for x in vars] 17 | elif isinstance(vars, tuple): 18 | return tuple([wrapper(x) for x in vars]) 19 | elif isinstance(vars, dict): 20 | return {k: wrapper(v) for k, v in vars.items()} 21 | else: 22 | return func(vars) 23 | 24 | return wrapper 25 | 26 | 27 | def make_nograd_func(func): 28 | def wrapper(*f_args, **f_kwargs): 29 | with torch.no_grad(): 30 | ret = func(*f_args, **f_kwargs) 31 | return ret 32 | 33 | return wrapper 34 | 35 | 36 | @make_iterative_func 37 | def tensor2float(vars): 38 | if isinstance(vars, float): 39 | return vars 40 | elif isinstance(vars, torch.Tensor): 41 | return vars.data.item() 42 | else: 43 | raise NotImplementedError("invalid input type for tensor2float") 44 | 45 | 46 | @make_iterative_func 47 | def tensor2numpy(vars): 48 | if isinstance(vars, np.ndarray): 49 | return vars 50 | elif isinstance(vars, torch.Tensor): 51 | return vars.data.cpu().numpy() 52 | else: 53 | raise NotImplementedError("invalid input type for tensor2numpy") 54 | 55 | 56 | @make_iterative_func 57 | def check_allfloat(vars): 58 | assert isinstance(vars, float) 59 | 60 | 61 | def save_scalars(logger, mode_tag, scalar_dict, global_step): 62 | scalar_dict = tensor2float(scalar_dict) 63 | for tag, values in scalar_dict.items(): 64 | if not isinstance(values, list) and not isinstance(values, tuple): 65 | values = [values] 66 | for idx, value in enumerate(values): 67 | scalar_name = '{}/{}'.format(mode_tag, tag) 68 | # if len(values) > 1: 69 | scalar_name = scalar_name + "_" + str(idx) 70 | logger.add_scalar(scalar_name, value, global_step) 71 | 72 | 73 | def save_images(logger, mode_tag, images_dict, global_step): 74 | images_dict = tensor2numpy(images_dict) 75 | for tag, values in images_dict.items(): 76 | if not isinstance(values, list) and not isinstance(values, tuple): 77 | values = [values] 78 | for idx, value in enumerate(values): 79 | if len(value.shape) == 3: 80 | value = value[:, np.newaxis, :, :] 81 | value = value[:1] 82 | value = torch.from_numpy(value) 83 | 84 | image_name = '{}/{}'.format(mode_tag, tag) 85 | if len(values) > 1: 86 | image_name = image_name + "_" + str(idx) 87 | logger.add_image(image_name, vutils.make_grid(value, padding=0, nrow=1, normalize=True, scale_each=True), 88 | global_step) 89 | 90 | 91 | def adjust_learning_rate(optimizer, epoch, base_lr, lrepochs): 92 | splits = lrepochs.split(':') 93 | assert len(splits) == 2 94 | 95 | # parse the epochs to downscale the learning rate (before :) 96 | downscale_epochs = [int(eid_str) for eid_str in splits[0].split(',')] 97 | # parse downscale rate (after :) 98 | downscale_rate = float(splits[1]) 99 | print("downscale epochs: {}, downscale rate: {}".format(downscale_epochs, downscale_rate)) 100 | 101 | lr = base_lr 102 | for eid in downscale_epochs: 103 | if epoch >= eid: 104 | lr /= downscale_rate 105 | else: 106 | break 107 | print("setting learning rate to {}".format(lr)) 108 | for param_group in optimizer.param_groups: 109 | param_group['lr'] = lr 110 | 111 | 112 | class AverageMeter(object): 113 | def __init__(self): 114 | self.sum_value = 0. 115 | self.count = 0 116 | 117 | def update(self, x): 118 | check_allfloat(x) 119 | self.sum_value += x 120 | self.count += 1 121 | 122 | def mean(self): 123 | return self.sum_value / self.count 124 | 125 | 126 | class AverageMeterDict(object): 127 | def __init__(self): 128 | self.data = None 129 | self.count = 0 130 | 131 | def update(self, x): 132 | check_allfloat(x) 133 | self.count += 1 134 | if self.data is None: 135 | self.data = copy.deepcopy(x) 136 | else: 137 | for k1, v1 in x.items(): 138 | if isinstance(v1, float): 139 | self.data[k1] += v1 140 | elif isinstance(v1, tuple) or isinstance(v1, list): 141 | for idx, v2 in enumerate(v1): 142 | self.data[k1][idx] += v2 143 | else: 144 | assert NotImplementedError("error input type for update AvgMeterDict") 145 | 146 | def mean(self): 147 | @make_iterative_func 148 | def get_mean(v): 149 | return v / float(self.count) 150 | 151 | return get_mean(self.data) 152 | -------------------------------------------------------------------------------- /utils/metrics.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import torch.nn.functional as F 3 | from utils.experiment import make_nograd_func 4 | from torch.autograd import Variable 5 | from torch import Tensor 6 | 7 | 8 | # Update D1 from >3px to >=3px & >5% 9 | # matlab code: 10 | # E = abs(D_gt - D_est); 11 | # n_err = length(find(D_gt > 0 & E > tau(1) & E. / abs(D_gt) > tau(2))); 12 | # n_total = length(find(D_gt > 0)); 13 | # d_err = n_err / n_total; 14 | 15 | def check_shape_for_metric_computation(*vars): 16 | assert isinstance(vars, tuple) 17 | for var in vars: 18 | assert len(var.size()) == 3 19 | assert var.size() == vars[0].size() 20 | 21 | # a wrapper to compute metrics for each image individually 22 | def compute_metric_for_each_image(metric_func): 23 | def wrapper(D_ests, D_gts, masks, *nargs): 24 | check_shape_for_metric_computation(D_ests, D_gts, masks) 25 | bn = D_gts.shape[0] # batch size 26 | results = [] # a list to store results for each image 27 | # compute result one by one 28 | for idx in range(bn): 29 | # if tensor, then pick idx, else pass the same value 30 | cur_nargs = [x[idx] if isinstance(x, (Tensor, Variable)) else x for x in nargs] 31 | if masks[idx].float().mean() / (D_gts[idx] > 0).float().mean() < 0.1: 32 | print("masks[idx].float().mean() too small, skip") 33 | else: 34 | ret = metric_func(D_ests[idx], D_gts[idx], masks[idx], *cur_nargs) 35 | results.append(ret) 36 | if len(results) == 0: 37 | print("masks[idx].float().mean() too small for all images in this batch, return 0") 38 | return torch.tensor(0, dtype=torch.float32, device=D_gts.device) 39 | else: 40 | return torch.stack(results).mean() 41 | return wrapper 42 | 43 | @make_nograd_func 44 | @compute_metric_for_each_image 45 | def D1_metric(D_est, D_gt, mask): 46 | D_est, D_gt = D_est[mask], D_gt[mask] 47 | E = torch.abs(D_gt - D_est) 48 | err_mask = (E > 3) & (E / D_gt.abs() > 0.05) 49 | return torch.mean(err_mask.float()) 50 | 51 | @make_nograd_func 52 | @compute_metric_for_each_image 53 | def Thres_metric(D_est, D_gt, mask, thres): 54 | assert isinstance(thres, (int, float)) 55 | D_est, D_gt = D_est[mask], D_gt[mask] 56 | E = torch.abs(D_gt - D_est) 57 | err_mask = E > thres 58 | return torch.mean(err_mask.float()) 59 | 60 | # NOTE: please do not use this to build up training loss 61 | @make_nograd_func 62 | @compute_metric_for_each_image 63 | def EPE_metric(D_est, D_gt, mask): 64 | D_est, D_gt = D_est[mask], D_gt[mask] 65 | return F.l1_loss(D_est, D_gt, size_average=True) 66 | -------------------------------------------------------------------------------- /utils/visualization.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function 2 | import torch 3 | import torch.nn as nn 4 | import torch.utils.data 5 | from torch.autograd import Variable, Function 6 | import torch.nn.functional as F 7 | import math 8 | import numpy as np 9 | 10 | 11 | def gen_error_colormap(): 12 | cols = np.array( 13 | [[0 / 3.0, 0.1875 / 3.0, 49, 54, 149], 14 | [0.1875 / 3.0, 0.375 / 3.0, 69, 117, 180], 15 | [0.375 / 3.0, 0.75 / 3.0, 116, 173, 209], 16 | [0.75 / 3.0, 1.5 / 3.0, 171, 217, 233], 17 | [1.5 / 3.0, 3 / 3.0, 224, 243, 248], 18 | [3 / 3.0, 6 / 3.0, 254, 224, 144], 19 | [6 / 3.0, 12 / 3.0, 253, 174, 97], 20 | [12 / 3.0, 24 / 3.0, 244, 109, 67], 21 | [24 / 3.0, 48 / 3.0, 215, 48, 39], 22 | [48 / 3.0, np.inf, 165, 0, 38]], dtype=np.float32) 23 | cols[:, 2: 5] /= 255. 24 | return cols 25 | 26 | 27 | error_colormap = gen_error_colormap() 28 | 29 | 30 | class disp_error_image_func(Function): 31 | def forward(self, D_est_tensor, D_gt_tensor, abs_thres=3., rel_thres=0.05, dilate_radius=1): 32 | D_gt_np = D_gt_tensor.detach().cpu().numpy() 33 | D_est_np = D_est_tensor.detach().cpu().numpy() 34 | B, H, W = D_gt_np.shape 35 | # valid mask 36 | mask = D_gt_np > 0 37 | # error in percentage. When error <= 1, the pixel is valid since <= 3px & 5% 38 | error = np.abs(D_gt_np - D_est_np) 39 | error[np.logical_not(mask)] = 0 40 | error[mask] = np.minimum(error[mask] / abs_thres, (error[mask] / D_gt_np[mask]) / rel_thres) 41 | # get colormap 42 | cols = error_colormap 43 | # create error image 44 | error_image = np.zeros([B, H, W, 3], dtype=np.float32) 45 | for i in range(cols.shape[0]): 46 | error_image[np.logical_and(error >= cols[i][0], error < cols[i][1])] = cols[i, 2:] 47 | # TODO: imdilate 48 | # error_image = cv2.imdilate(D_err, strel('disk', dilate_radius)); 49 | error_image[np.logical_not(mask)] = 0. 50 | # show color tag in the top-left cornor of the image 51 | for i in range(cols.shape[0]): 52 | distance = 20 53 | error_image[:, :10, i * distance:(i + 1) * distance, :] = cols[i, 2:] 54 | 55 | return torch.from_numpy(np.ascontiguousarray(error_image.transpose([0, 3, 1, 2]))) 56 | 57 | def backward(self, grad_output): 58 | return None 59 | --------------------------------------------------------------------------------