├── figs
└── ClassHyPer.jpg
├── .idea
├── vcs.xml
├── .gitignore
├── misc.xml
├── inspectionProfiles
│ ├── profiles_settings.xml
│ └── Project_Default.xml
├── modules.xml
└── ClassHyPer.iml
├── utils
├── mask_gen.py
├── util.py
└── metrics.py
├── examples
├── train_image.txt
├── train_label.txt
├── val_image.txt
├── val_label.txt
├── test_image.txt
├── test_label.txt
└── train_unsup_image.txt
├── configs
├── config.cfg
└── config.py
├── models
├── CPS_Network.py
└── FCN_backbone.py
├── LICENSE
├── environment.yaml
├── README.md
├── test.py
├── Tester.py
├── train.py
├── data
└── dataset_list.py
└── Trainer.py
/figs/ClassHyPer.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YJ-He/ClassHyPer/HEAD/figs/ClassHyPer.jpg
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 | # Datasource local storage ignored files
5 | /dataSources/
6 | /dataSources.local.xml
7 | # Editor-based HTTP Client requests
8 | /httpRequests/
9 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/.idea/inspectionProfiles/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/utils/mask_gen.py:
--------------------------------------------------------------------------------
1 | import torch
2 |
3 | def generate_class_mask(pred, classes):
4 | '''
5 | generate class mask
6 | :param pred: predicted mask(H*W)
7 | :param classes: classes [0,1,2,...]
8 | :return: mask(H*W)
9 | '''
10 | pred, classes = torch.broadcast_tensors(pred.unsqueeze(0), classes.unsqueeze(1).unsqueeze(2))
11 | N = pred.eq(classes).sum(0)
12 | return N
13 |
14 |
--------------------------------------------------------------------------------
/.idea/ClassHyPer.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/inspectionProfiles/Project_Default.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/examples/train_image.txt:
--------------------------------------------------------------------------------
1 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_001_002.tif
2 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_003_000.tif
3 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_005_001.tif
4 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_000_005.tif
5 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_002_006.tif
6 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_002_002.tif
7 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_001_003.tif
8 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_000_004.tif
9 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_006_006.tif
10 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_000_000.tif
11 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_004_005.tif
12 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_007_002.tif
13 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_003_002.tif
14 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_002_001.tif
15 |
--------------------------------------------------------------------------------
/examples/train_label.txt:
--------------------------------------------------------------------------------
1 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area5_001_002.tif
2 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area1_003_000.tif
3 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area23_005_001.tif
4 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area26_000_005.tif
5 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area5_002_006.tif
6 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area3_002_002.tif
7 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area17_001_003.tif
8 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area17_000_004.tif
9 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area1_006_006.tif
10 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area21_000_000.tif
11 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area7_004_005.tif
12 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area21_007_002.tif
13 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area1_003_002.tif
14 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area23_002_001.tif
15 |
--------------------------------------------------------------------------------
/configs/config.cfg:
--------------------------------------------------------------------------------
1 | [Directory]
2 | root_dir = F:\WHU
3 | save_dir = ${root_dir}\save
4 | log_dir = ${save_dir}\log
5 | test_dir = ${save_dir}\test
6 | test_log_dir = ${test_dir}\log
7 | pred_dir = ${test_dir}\predict
8 | data_folder_name = image
9 | target_folder_name = label
10 | model_name = FCNs_CPS_vgg16_bn_classhyper
11 |
12 | [Data]
13 | batch_size = 4
14 | input_channel = 3
15 | nb_classes = 6
16 | input_size = 512
17 | eval_size = 512
18 |
19 | [General]
20 | use_gpu = True
21 | device_id = 0
22 | random_seed = 1
23 | num_workers = 4
24 |
25 | [Optimizer]
26 | lr_algorithm = adamw
27 | init_lr = 0.0001
28 | lr_decay = 0.1
29 | momentum = 0.9
30 | weight_decay = 2e-4
31 | epsilon = 1e-8
32 |
33 | [Train]
34 | monitor = max/MIoU
35 | init_algorithm = kaiming
36 | use_seed = False
37 | use_one_cycle_lr = True
38 | use_mix = True
39 | early_stop = 10
40 | warmup_period = 4
41 | save_period = 1
42 | epochs = 25
43 |
44 |
--------------------------------------------------------------------------------
/models/CPS_Network.py:
--------------------------------------------------------------------------------
1 | import torch.nn as nn
2 | from models.FCN_backbone import FCNs_VGG
3 |
4 |
5 | class FCNs_CPS(nn.Module):
6 | def __init__(self, in_ch, out_ch, backbone='vgg16_bn', pretrained=True):
7 | super(FCNs_CPS, self).__init__()
8 | self.name = "FCNs_CPS_" + backbone
9 | self.backbone = backbone
10 | self.branch1 = FCNs_VGG(in_ch, out_ch, backbone=backbone, pretrained=pretrained)
11 | self.branch2 = FCNs_VGG(in_ch, out_ch, backbone=backbone, pretrained=pretrained)
12 |
13 | def forward(self, data, step=1):
14 | if not self.training:
15 | pred1 = self.branch1(data)
16 | return pred1
17 |
18 | if step == 1:
19 | return self.branch1(data)
20 | elif step == 2:
21 | return self.branch2(data)
22 |
23 | if __name__ == '__main__':
24 | model = FCNs_CPS(in_ch=3, out_ch=1)
25 | print(model)
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 YongjunHe
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 |
--------------------------------------------------------------------------------
/utils/util.py:
--------------------------------------------------------------------------------
1 | import os
2 |
3 | def ensure_dir(path):
4 | """
5 | Directory check, if not have, create one
6 | """
7 | if not os.path.exists(path):
8 | os.makedirs(path)
9 |
10 | class AverageMeter(object):
11 | """
12 | Computes and stores the average and current value
13 | """
14 |
15 | def __init__(self):
16 | self.initialized = False
17 | self.val = None
18 | self.avg = None
19 | self.sum = None
20 | self.count = None
21 |
22 | def initialize(self, val, weight):
23 | self.val = val
24 | self.avg = val
25 | self.sum = val * weight
26 | self.count = weight
27 | self.initialized = True
28 |
29 | def update(self, val, weight=1):
30 | if not self.initialized:
31 | self.initialize(val, weight)
32 | else:
33 | self.add(val, weight)
34 |
35 | def add(self, val, weight):
36 | self.val = val
37 | self.sum += val * weight
38 | self.count += weight
39 | self.avg = self.sum / self.count
40 |
41 | def value(self):
42 | return self.val
43 |
44 | def average(self):
45 | return self.avg
46 |
47 | def get_sum(self):
48 | return self.sum
49 |
--------------------------------------------------------------------------------
/environment.yaml:
--------------------------------------------------------------------------------
1 | name: class_hyper
2 | channels:
3 | - pytorch
4 | - defaults
5 | dependencies:
6 | - blas=1.0=mkl
7 | - ca-certificates=2022.4.26=haa95532_0
8 | - certifi=2021.10.8=py38haa95532_2
9 | - cudatoolkit=10.2.89=h74a9793_1
10 | - freetype=2.10.4=hd328e21_0
11 | - intel-openmp=2022.0.0=haa95532_3663
12 | - jpeg=9b=hb83a4c4_2
13 | - libpng=1.6.37=h2a8f88b_0
14 | - libtiff=4.2.0=hd0e1b90_0
15 | - libuv=1.40.0=he774522_0
16 | - libwebp=1.2.2=h2bbff1b_0
17 | - lz4-c=1.9.3=h2bbff1b_1
18 | - mkl=2022.0.0=haa95532_115
19 | - ninja=1.10.2=haa95532_5
20 | - ninja-base=1.10.2=h6d14046_5
21 | - openssl=1.1.1o=h2bbff1b_0
22 | - pip=21.2.2=py38haa95532_0
23 | - python=3.8.13=h6244533_0
24 | - pytorch=1.9.0=py3.8_cuda10.2_cudnn7_0
25 | - setuptools=61.2.0=py38haa95532_0
26 | - sqlite=3.38.3=h2bbff1b_0
27 | - tk=8.6.11=h2bbff1b_1
28 | - torchvision=0.10.0=py38_cu102
29 | - typing_extensions=4.1.1=pyh06a4308_0
30 | - vc=14.2=h21ff451_1
31 | - vs2015_runtime=14.27.29016=h5e58377_2
32 | - wheel=0.37.1=pyhd3eb1b0_0
33 | - wincertstore=0.2=py38haa95532_2
34 | - xz=5.2.5=h8cc25b3_1
35 | - zlib=1.2.12=h8cc25b3_2
36 | - zstd=1.4.9=h19a0ad4_0
37 | - pip:
38 | - albumentations==1.1.0
39 | - argparse==1.4.0
40 | - atomicwrites==1.4.0
41 | - attrs==21.4.0
42 | - colorama==0.4.4
43 | - configparser==5.2.0
44 | - contextlib2==21.6.0
45 | - datetime==4.4
46 | - execnet==1.9.0
47 | - imageio==2.19.1
48 | - iniconfig==1.1.1
49 | - joblib==1.1.0
50 | - mock==4.0.3
51 | - networkx==2.8
52 | - numpy==1.22.3
53 | - opencv-python==4.5.5.64
54 | - opencv-python-headless==4.5.5.64
55 | - packaging==21.3
56 | - path==16.4.0
57 | - path-py==12.5.0
58 | - pillow==8.3.2
59 | - pluggy==1.0.0
60 | - py==1.11.0
61 | - pyparsing==3.0.9
62 | - pytest==7.1.2
63 | - pytest-shutil==1.7.0
64 | - pytz==2022.1
65 | - pywavelets==1.3.0
66 | - pyyaml==6.0
67 | - qudida==0.0.4
68 | - scikit-image==0.19.2
69 | - scikit-learn==1.1.0
70 | - scipy==1.8.0
71 | - six==1.16.0
72 | - termcolor==1.1.0
73 | - threadpoolctl==3.1.0
74 | - tifffile==2022.5.4
75 | - tomli==2.0.1
76 | - tqdm==4.64.0
77 | - zope-interface==5.4.0
78 | prefix: C:\ProgramData\Anaconda3\envs\class_hyper
79 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # **ClassHyPer: ClassMix-Based Hybrid Perturbations for Deep Semi-Supervised Semantic Segmentation of Remote Sensing Imagery**
2 |
3 | The PyTorch implementation of semi-supervised learning method—ClassHyPer.
4 | The manuscript can be visited via https://www.mdpi.com/2072-4292/14/4/879
5 |
6 | ## 1. Datasets
7 | ### (1) Links
8 | * [DeepGlobe Road](https://www.kaggle.com/datasets/balraj98/deepglobe-road-extraction-dataset)
9 | * [Massachusetts Building](https://www.cs.toronto.edu/~vmnih/data)
10 | * [WHU Aerial Building](http://study.rsgis.whu.edu.cn/pages/download/building_dataset.html)
11 | * [ISPRS 2D Semantic Labeling (Potsdam and Vaihingen)](https://www.isprs.org/education/benchmarks/UrbanSemLab/default.aspx)
12 | ### (2) Directory Structure
13 | After obtain the datasets, you need to process first and generate lists of image/label files and place as the structure shown below. Every txt file contains the full absolute path of the files, each image/label per line. Example files can be found in `./examples`.
14 | ```
15 | /root
16 | /save/{model.name}/{datetime}/log/{model.name}.txt
17 | /history.txt
18 | /checkpoint-ep{epoch}-{val_iou}.pth
19 | /checkpoint-best.pth
20 | /test/log/{model.name}/{datetime}/test-result.txt
21 | /train_image.txt
22 | /train_label.txt
23 | /test_image.txt
24 | /test_label.txt
25 | /val_image.txt
26 | /val_label.txt
27 | /train_unsup_image.txt
28 | ```
29 |
30 | ## 2. Usage
31 | ### 2.1 Installation
32 | The code is developed using Python 3.8 with PyTorch 1.9.0 and tested based on single RTX 2080 Ti GPU.
33 |
34 | **(1) Clone this repo.**
35 | ```
36 | git clone https://github.com/YJ-He/ClassHyPer.git
37 | ```
38 |
39 | **(2) Create a conda environment.**
40 | ```
41 | conda env create -f environment.yaml
42 | conda activate class_hyper
43 | ```
44 |
45 | ### 2.2 Training
46 | 1. set `root_dir` and hyper-parameters configuration in `./configs/config.cfg`.
47 | 2. run `python train.py`.
48 |
49 | ### 2.3 Evaludation
50 | 1. set `root_dir` and hyper-parameters configuration in `./configs/config.cfg`.
51 | 2. set `pathCkpt` in `test.py` to indicate the model checkpoint file.
52 | 3. run `python test.py`.
53 |
54 | ## 3. Structure of ClassHyPer
55 |
56 |
57 | ---
58 | ## 4. Citation
59 | If this repo is useful in your research, please kindly consider citing our paper as follow.
60 | ```
61 | @article{he2022classhyper,
62 | title={ClassHyPer: ClassMix-Based Hybrid Perturbations for Deep Semi-Supervised Semantic Segmentation of Remote Sensing Imagery},
63 | author={He, Yongjun and Wang, Jinfei and Liao, Chunhua and Shan, Bo and Zhou, Xin},
64 | journal={Remote Sensing},
65 | volume={14},
66 | number={4},
67 | pages={879},
68 | year={2022},
69 | publisher={MDPI}
70 | }
71 | ```
72 |
73 | ## 5. References
74 | [1] [Semi-Supervised Semantic Segmentation with Cross Pseudo Supervision](https://arxiv.org/abs/2106.01226)
75 | [2] [Semi-supervised semantic segmentation needs strong, varied perturbations](https://arxiv.org/abs/1906.01916)
76 | [3] [ClassMix: Segmentation-Based Data Augmentation for Semi-Supervised Learning](https://arxiv.org/abs/2007.07936)
77 | ...
78 |
79 | **If our work give you some insights and hints, star me please! Thank you~**
80 |
81 |
82 |
--------------------------------------------------------------------------------
/test.py:
--------------------------------------------------------------------------------
1 | import datetime
2 | import argparse
3 | import torch
4 | import random
5 | import numpy as np
6 | from configs.config import MyConfiguration
7 | from Tester import Tester
8 | from data.dataset_list import MyDataset
9 | from torch.utils.data import DataLoader
10 | from models import CPS_Network
11 |
12 | def for_test(model, config, args, test_data_loader, class_name, begin_time, resume_file):
13 |
14 | myTester = Tester(model=model, config=config, args=args,
15 | test_data_loader=test_data_loader,
16 | class_name=class_name,
17 | begin_time=begin_time,
18 | resume_file=resume_file)
19 | myTester.eval_and_predict()
20 | print(" Evaluation Done ! ")
21 |
22 | def main(config, args):
23 | model = CPS_Network.FCNs_CPS(in_ch=config.input_channel, out_ch=config.nb_classes, backbone='vgg16_bn', pretrained=True)
24 |
25 | if hasattr(model, 'name'):
26 | config.config.set("Directory", "model_name", model.name+'_'+config.mix_algorithm)
27 |
28 | test_dataset = MyDataset(config=config, args=args, subset='test')
29 |
30 | test_data_loader = DataLoader(dataset=test_dataset,
31 | batch_size=config.batch_size * 4,
32 | shuffle=False,
33 | pin_memory=True,
34 | num_workers=args.threads,
35 | drop_last=False)
36 |
37 | begin_time = datetime.datetime.now().strftime('%Y%m%d_%H%M%S')
38 | begin_time = 'test-' + begin_time
39 |
40 | if config.use_gpu:
41 | model = model.cuda(device=args.gpu)
42 |
43 | for_test(model=model, config=config, args=args,
44 | test_data_loader=test_data_loader,
45 | class_name=test_dataset.class_names,
46 | begin_time=begin_time,
47 | resume_file=args.weight,
48 | )
49 |
50 | if __name__ == '__main__':
51 | config = MyConfiguration('configs/config.cfg')
52 |
53 | pathCkpt = r'F:\WHU\checkpoint-best.pth'
54 |
55 | parser = argparse.ArgumentParser(description="Model Evaluation")
56 |
57 | parser.add_argument('-input', metavar='input', type=str, default=config.root_dir,
58 | help='root path to directory containing input images, including train & valid & test')
59 | parser.add_argument('-output', metavar='output', type=str, default=config.save_dir,
60 | help='root path to directory containing all the output, including predictions, logs and ckpt')
61 | parser.add_argument('-weight', metavar='weight', type=str, default=pathCkpt,
62 | help='path to ckpt which will be loaded')
63 | parser.add_argument('-threads', metavar='threads', type=int, default=2,
64 | help='number of thread used for DataLoader')
65 | parser.add_argument('-is_test', action='store_true', default=True,
66 | help='in test mode, is_test=True')
67 | if config.use_gpu:
68 | parser.add_argument('-gpu', metavar='gpu', type=int, default=0,
69 | help='gpu id to be used for prediction')
70 | else:
71 | parser.add_argument('-gpu', metavar='gpu', type=int, default=-1,
72 | help='gpu id to be used for prediction')
73 |
74 | args = parser.parse_args()
75 |
76 | if config.use_seed:
77 | torch.backends.cudnn.benchmark = False
78 | torch.backends.cudnn.deterministic = True
79 | torch.cuda.manual_seed(config.random_seed)
80 | torch.manual_seed(config.random_seed)
81 | random.seed(config.random_seed)
82 | np.random.seed(config.random_seed)
83 | else:
84 | torch.backends.cudnn.benchmark = True
85 |
86 | main(config=config, args=args)
87 |
--------------------------------------------------------------------------------
/examples/val_image.txt:
--------------------------------------------------------------------------------
1 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area11_000_000.tif
2 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area11_000_001.tif
3 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area11_000_002.tif
4 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area11_001_000.tif
5 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area11_001_001.tif
6 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area11_001_002.tif
7 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area11_002_000.tif
8 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area11_002_001.tif
9 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area11_002_002.tif
10 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area11_003_000.tif
11 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area11_003_001.tif
12 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area11_003_002.tif
13 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area11_004_000.tif
14 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area11_004_001.tif
15 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area11_004_002.tif
16 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area15_000_000.tif
17 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area15_000_001.tif
18 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area15_000_002.tif
19 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area15_001_000.tif
20 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area15_001_001.tif
21 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area15_001_002.tif
22 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area15_002_000.tif
23 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area15_002_001.tif
24 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area15_002_002.tif
25 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area15_003_000.tif
26 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area15_003_001.tif
27 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area15_003_002.tif
28 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area15_004_000.tif
29 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area15_004_001.tif
30 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area15_004_002.tif
31 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area28_000_000.tif
32 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area28_000_001.tif
33 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area28_000_002.tif
34 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area28_001_000.tif
35 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area28_001_001.tif
36 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area28_001_002.tif
37 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area28_002_000.tif
38 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area28_002_001.tif
39 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area28_002_002.tif
40 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area28_003_000.tif
41 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area28_003_001.tif
42 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area28_003_002.tif
43 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area28_004_000.tif
44 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area28_004_001.tif
45 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area28_004_002.tif
46 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area30_000_000.tif
47 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area30_000_001.tif
48 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area30_000_002.tif
49 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area30_001_000.tif
50 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area30_001_001.tif
51 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area30_001_002.tif
52 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area30_002_000.tif
53 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area30_002_001.tif
54 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area30_002_002.tif
55 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area30_003_000.tif
56 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area30_003_001.tif
57 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area30_003_002.tif
58 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area30_004_000.tif
59 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area30_004_001.tif
60 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area30_004_002.tif
61 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area34_000_000.tif
62 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area34_000_001.tif
63 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area34_001_000.tif
64 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area34_001_001.tif
65 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area34_002_000.tif
66 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area34_002_001.tif
67 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area34_003_000.tif
68 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area34_003_001.tif
69 |
--------------------------------------------------------------------------------
/examples/val_label.txt:
--------------------------------------------------------------------------------
1 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area11_000_000.tif
2 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area11_000_001.tif
3 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area11_000_002.tif
4 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area11_001_000.tif
5 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area11_001_001.tif
6 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area11_001_002.tif
7 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area11_002_000.tif
8 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area11_002_001.tif
9 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area11_002_002.tif
10 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area11_003_000.tif
11 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area11_003_001.tif
12 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area11_003_002.tif
13 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area11_004_000.tif
14 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area11_004_001.tif
15 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area11_004_002.tif
16 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area15_000_000.tif
17 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area15_000_001.tif
18 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area15_000_002.tif
19 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area15_001_000.tif
20 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area15_001_001.tif
21 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area15_001_002.tif
22 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area15_002_000.tif
23 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area15_002_001.tif
24 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area15_002_002.tif
25 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area15_003_000.tif
26 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area15_003_001.tif
27 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area15_003_002.tif
28 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area15_004_000.tif
29 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area15_004_001.tif
30 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area15_004_002.tif
31 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area28_000_000.tif
32 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area28_000_001.tif
33 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area28_000_002.tif
34 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area28_001_000.tif
35 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area28_001_001.tif
36 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area28_001_002.tif
37 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area28_002_000.tif
38 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area28_002_001.tif
39 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area28_002_002.tif
40 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area28_003_000.tif
41 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area28_003_001.tif
42 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area28_003_002.tif
43 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area28_004_000.tif
44 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area28_004_001.tif
45 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area28_004_002.tif
46 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area30_000_000.tif
47 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area30_000_001.tif
48 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area30_000_002.tif
49 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area30_001_000.tif
50 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area30_001_001.tif
51 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area30_001_002.tif
52 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area30_002_000.tif
53 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area30_002_001.tif
54 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area30_002_002.tif
55 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area30_003_000.tif
56 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area30_003_001.tif
57 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area30_003_002.tif
58 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area30_004_000.tif
59 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area30_004_001.tif
60 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area30_004_002.tif
61 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area34_000_000.tif
62 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area34_000_001.tif
63 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area34_001_000.tif
64 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area34_001_001.tif
65 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area34_002_000.tif
66 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area34_002_001.tif
67 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area34_003_000.tif
68 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area34_003_001.tif
69 |
--------------------------------------------------------------------------------
/utils/metrics.py:
--------------------------------------------------------------------------------
1 | import numpy as np
2 | import torch
3 |
4 | class Evaluator(object):
5 | """
6 | Accuracy assessment
7 | """
8 | def __init__(self, num_class, device):
9 | self.device = device
10 | self.num_class = num_class
11 | self.confusion_matrix = torch.zeros((self.num_class,) * 2).long().to(self.device)
12 | self.iou = torch.zeros(self.num_class).to(self.device)
13 | self.accuracy_class = torch.zeros(self.num_class).to(self.device)
14 | self.precision_class = torch.zeros(self.num_class).to(self.device)
15 | self.recall_class = torch.zeros(self.num_class).to(self.device)
16 | self.f1_score_class = torch.zeros(self.num_class).to(self.device)
17 | self.TP = torch.zeros(self.num_class).to(self.device)
18 | self.FP = torch.zeros(self.num_class).to(self.device)
19 | self.FN = torch.zeros(self.num_class).to(self.device)
20 | self.TN = torch.zeros(self.num_class).to(self.device)
21 |
22 | def Pixel_Accuracy(self):
23 | """
24 | Overall Accuracy
25 | """
26 | Acc = torch.diag(self.confusion_matrix).sum() / self.confusion_matrix.sum()
27 | return Acc
28 |
29 | def Mean_Intersection_over_Union(self):
30 | """
31 | Mean IOU
32 | """
33 | MIoU = torch.diag(self.confusion_matrix) / (
34 | torch.sum(self.confusion_matrix, dim=1) + torch.sum(self.confusion_matrix, dim=0) -
35 | torch.diag(self.confusion_matrix))
36 | self.iou = MIoU
37 | MIoU = torch.mean(MIoU)
38 | return MIoU
39 |
40 | def _generate_matrix(self, gt_image, pre_image):
41 | """
42 | Calculate confusion_matrix
43 | """
44 | mask = (gt_image >= 0) & (gt_image < self.num_class)
45 | label = self.num_class * gt_image[mask] + pre_image[mask]
46 | count = torch.bincount(label, minlength=self.num_class ** 2)
47 | confusion_matrix = count.reshape(self.num_class, self.num_class)
48 | return confusion_matrix
49 |
50 | def add_batch(self, gt_image, pre_image):
51 | assert gt_image.shape == pre_image.shape
52 | tem_cm = self.confusion_matrix.clone().detach()
53 | self.confusion_matrix = tem_cm + self._generate_matrix(gt_image, pre_image)
54 |
55 | def reset(self):
56 | self.confusion_matrix = torch.zeros((self.num_class,) * 2).long().to(self.device)
57 |
58 | def get_confusion_matrix(self):
59 | return self.confusion_matrix
60 |
61 | def get_base_value(self):
62 | self.FP = self.confusion_matrix.sum(dim=0) - torch.diag(self.confusion_matrix)
63 | self.FN = self.confusion_matrix.sum(dim=1) - torch.diag(self.confusion_matrix)
64 | self.TP = torch.diag(self.confusion_matrix)
65 | self.TN = self.confusion_matrix.sum() - (self.FP + self.FN + self.TP)
66 | return self.TP, self.FP, self.FN, self.TN
67 |
68 | def get_iou(self):
69 | return self.iou
70 |
71 | def Pixel_Precision_Class(self):
72 | self.precision_class = self.TP / (self.TP + self.FP + 1e-8)
73 | return self.precision_class
74 |
75 | def Pixel_Recall_Class(self):
76 | self.recall_class = self.TP / (self.TP + self.FN + 1e-8)
77 | return self.recall_class
78 |
79 | def Pixel_F1_score_Class(self):
80 | self.f1_score_class = 2 * self.TP / (2 * self.TP + self.FP + self.FN)
81 | return self.f1_score_class
82 |
83 | if __name__ == '__main__':
84 | evaluator = Evaluator(2, torch.device('cpu'))
85 | a = torch.tensor([1, 0, 1, 1, 1, 1, 0, 0, 0, 0])
86 | b = torch.tensor([1, 1, 1, 1, 1, 0, 0, 0, 1, 1])
87 | evaluator.add_batch(a, b)
88 |
89 | acc = evaluator.Pixel_Accuracy()
90 | miou = evaluator.Mean_Intersection_over_Union()
91 | TP, FP, FN, TN = evaluator.get_base_value()
92 | confusion_matrix1 = evaluator.get_confusion_matrix()
93 | iou = evaluator.get_iou()
94 | prec = evaluator.Pixel_Precision_Class()
95 | recall = evaluator.Pixel_Recall_Class()
96 | f1_score = evaluator.Pixel_F1_score_Class()
97 | print('Class: ', 2, ' Average')
98 | np.set_printoptions(formatter={'float': '{: 6.6f}'.format})
99 | print('IoU: ', iou)
100 | print('Precision:', prec)
101 | print('Recall: ', recall)
102 | print('F_Score: ', f1_score)
103 | np.set_printoptions(formatter={'int': '{:14}'.format})
104 | print('Confusion_matrix:')
105 | print(confusion_matrix1)
106 |
--------------------------------------------------------------------------------
/models/FCN_backbone.py:
--------------------------------------------------------------------------------
1 | import torch.nn as nn
2 | from torchvision import models
3 | from torchvision.models.vgg import VGG
4 |
5 |
6 | ranges = {
7 | 'vgg11': ((0, 3), (3, 6), (6, 11), (11, 16), (16, 21)),
8 | 'vgg11_bn': ((0, 4), (4, 8), (8, 15), (15, 22), (22, 29)),
9 | 'vgg13': ((0, 5), (5, 10), (10, 15), (15, 20), (20, 25)),
10 | 'vgg13_bn': ((0, 7), (7, 14), (14, 21), (21, 28), (28, 35)),
11 | 'vgg16': ((0, 5), (5, 10), (10, 17), (17, 24), (24, 31)),
12 | 'vgg16_bn': ((0, 7), (7, 14), (14, 24), (24, 34), (34, 44)),
13 | 'vgg19': ((0, 5), (5, 10), (10, 19), (19, 28), (28, 37)),
14 | 'vgg19_bn': ((0, 7), (7, 14), (14, 27), (27, 40), (40, 53))
15 | }
16 |
17 | cfg = {
18 | 'vgg11': [64, 'M', 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M'],
19 | 'vgg13': [64, 64, 'M', 128, 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M'],
20 | 'vgg16': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 'M', 512, 512, 512, 'M', 512, 512, 512, 'M'],
21 | 'vgg19': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 256, 'M', 512, 512, 512, 512, 'M', 512, 512, 512, 512, 'M'],
22 | }
23 |
24 |
25 | def make_layers(cfg, batch_norm=False):
26 | layers = []
27 | in_channels = 3
28 | for v in cfg:
29 | if v == 'M':
30 | layers += [nn.MaxPool2d(kernel_size=2, stride=2)]
31 | else:
32 | conv2d = nn.Conv2d(in_channels, v, kernel_size=3, padding=1)
33 | if batch_norm:
34 | layers += [conv2d, nn.BatchNorm2d(v), nn.ReLU(inplace=True)]
35 | else:
36 | layers += [conv2d, nn.ReLU(inplace=True)]
37 | in_channels = v
38 | return nn.Sequential(*layers)
39 |
40 | class FCNs_VGG(nn.Module):
41 |
42 | def __init__(self, in_ch=3, out_ch=1, backbone='vgg16_bn', pretrained=True, requires_grad=True, remove_fc=True):
43 | super().__init__()
44 | self.name = "FCNs_" + backbone
45 |
46 | assert backbone in ['vgg11', 'vgg13', 'vgg16', 'vgg19', 'vgg11_bn', 'vgg13_bn', 'vgg16_bn', 'vgg19_bn']
47 | self.pretrained_net = VGGNet(pretrained=pretrained, model=backbone, requires_grad=requires_grad,
48 | remove_fc=remove_fc,
49 | batch_norm='bn' in backbone)
50 | if in_ch != 3:
51 | self.pretrained_net.features[0] = nn.Conv2d(in_ch, 64, 3, 1, 1)
52 |
53 | self.relu = nn.ReLU(inplace=True)
54 | self.deconv1 = nn.ConvTranspose2d(512, 512, kernel_size=3, stride=2, padding=1, dilation=1, output_padding=1)
55 | self.bn1 = nn.BatchNorm2d(512)
56 | self.deconv2 = nn.ConvTranspose2d(512, 256, kernel_size=3, stride=2, padding=1, dilation=1, output_padding=1)
57 | self.bn2 = nn.BatchNorm2d(256)
58 | self.deconv3 = nn.ConvTranspose2d(256, 128, kernel_size=3, stride=2, padding=1, dilation=1, output_padding=1)
59 | self.bn3 = nn.BatchNorm2d(128)
60 | self.deconv4 = nn.ConvTranspose2d(128, 64, kernel_size=3, stride=2, padding=1, dilation=1, output_padding=1)
61 | self.bn4 = nn.BatchNorm2d(64)
62 | self.deconv5 = nn.ConvTranspose2d(64, 32, kernel_size=3, stride=2, padding=1, dilation=1, output_padding=1)
63 | self.bn5 = nn.BatchNorm2d(32)
64 | self.classifier = nn.Conv2d(32, out_ch, kernel_size=1)
65 |
66 | def forward(self, x):
67 | output = self.pretrained_net(x)
68 | x5 = output['x5']
69 | x4 = output['x4']
70 | x3 = output['x3']
71 | x2 = output['x2']
72 | x1 = output['x1']
73 |
74 | score = self.bn1(self.relu(self.deconv1(x5)))
75 | score = score + x4
76 | score = self.bn2(self.relu(self.deconv2(score)))
77 | score = score + x3
78 | score = self.bn3(self.relu(self.deconv3(score)))
79 | score = score + x2
80 | score = self.bn4(self.relu(self.deconv4(score)))
81 | score = score + x1
82 | score = self.bn5(self.relu(self.deconv5(score)))
83 | score = self.classifier(score)
84 |
85 | return score
86 |
87 | class VGGNet(VGG):
88 | def __init__(self, pretrained=True, model='vgg16', requires_grad=True, remove_fc=True, show_params=False,
89 | batch_norm=False):
90 | super().__init__(make_layers(cfg[model.replace('_bn', '')], batch_norm))
91 | self.ranges = ranges[model]
92 |
93 | if pretrained:
94 | exec("self.load_state_dict(models.%s(pretrained=True).state_dict())" % model)
95 |
96 | if not requires_grad:
97 | for param in super().parameters():
98 | param.requires_grad = False
99 |
100 | if remove_fc: # delete redundant fully-connected layer params, can save memory
101 | del self.classifier
102 |
103 | if show_params:
104 | for name, param in self.named_parameters():
105 | print(name, param.size())
106 |
107 | def forward(self, x):
108 | output = {}
109 | # get the output of each maxpooling layer (5 maxpool in VGG net)
110 | for idx in range(len(self.ranges)):
111 | for layer in range(self.ranges[idx][0], self.ranges[idx][1]):
112 | x = self.features[layer](x)
113 | output["x%d" % (idx + 1)] = x
114 |
115 | return output
116 |
117 |
118 | if __name__ == "__main__":
119 | model = FCNs_VGG(in_ch=3, out_ch=1, backbone="vgg16_bn")
120 | print(model)
121 |
122 |
123 |
--------------------------------------------------------------------------------
/configs/config.py:
--------------------------------------------------------------------------------
1 | from configparser import ConfigParser
2 | import configparser
3 |
4 | """
5 | # section distinguish the upper and lower letters, but key and value do not.
6 | The information in the configuration always store the data in string format, it will have translation when reading.
7 | [DEFAULT]: the value in [DEFAULT] offer default_value to all sections, and it owns the highest priority.
8 | get: getboolean() getint() getfloat()
9 |
10 | refer values in other sections
11 | interpolation method: configparser.BasicInterpolation()
12 | configparser.ExtendedInterpolation() ${section:key}
13 | config.set
14 | config.write
15 | """
16 |
17 | class MyConfiguration():
18 | def __init__(self, config_file=None):
19 | super(MyConfiguration, self).__init__()
20 |
21 | # ./ current directory
22 | if config_file is None:
23 | config_file = r'./configs/config1.cfg'
24 |
25 | config = ConfigParser()
26 | # interpolation method
27 | config._interpolation = configparser.ExtendedInterpolation()
28 | config.read(filenames=config_file)
29 |
30 | self.config = config
31 | self.config_path = config_file
32 | self.add_section = 'Additional'
33 | print("Loaded config file successfully ...")
34 | config.write(open(config_file, 'w'))
35 |
36 | def add_args(self, key, value):
37 | self.config.set(self.add_section, key, value)
38 | self.config.write(open(self.config_path, 'w'))
39 |
40 | def write_to_file(self, config_file_path):
41 | self.config.write(open(config_file_path, 'w'))
42 |
43 | # string int float boolean
44 | @property
45 | def test_dir(self):
46 | return self.config.get("Directory", "test_dir")
47 |
48 | @property
49 | def test_log_dir(self):
50 | return self.config.get("Directory", "test_log_dir")
51 |
52 | @property
53 | def root_dir(self):
54 | return self.config.get("Directory", "root_dir")
55 |
56 | @property
57 | def save_dir(self):
58 | return self.config.get("Directory", "save_dir")
59 |
60 | @property
61 | def log_dir(self):
62 | return self.config.get("Directory", "log_dir")
63 |
64 | @property
65 | def pred_dir(self):
66 | return self.config.get("Directory", "pred_dir")
67 |
68 | @property
69 | def data_folder_name(self):
70 | return self.config.get("Directory", "data_folder_name")
71 |
72 | @property
73 | def target_folder_name(self):
74 | return self.config.get("Directory", "target_folder_name")
75 |
76 | @property
77 | def model_name(self):
78 | return self.config.get("Directory", "model_name")
79 |
80 | @property
81 | def batch_size(self):
82 | return self.config.getint("Data", "batch_size")
83 |
84 | @property
85 | def input_channel(self):
86 | return self.config.getint("Data", "input_channel")
87 |
88 | @property
89 | def nb_classes(self):
90 | return self.config.getint("Data", "nb_classes")
91 |
92 | @property
93 | def input_size(self):
94 | return self.config.getint("Data", "input_size")
95 |
96 | @property
97 | def eval_size(self):
98 | return self.config.getint("Data", "eval_size")
99 |
100 | @property
101 | def use_gpu(self):
102 | return self.config.getboolean("General", "use_gpu")
103 |
104 | @property
105 | def device_id(self):
106 | return self.config.getint("General", "device_id")
107 |
108 | @property
109 | def random_seed(self):
110 | return self.config.getint("General", "random_seed")
111 |
112 | @property
113 | def num_workers(self):
114 | return self.config.getint("General", "num_workers")
115 |
116 | @property
117 | def lr_algorithm(self):
118 | return self.config.get("Optimizer", "lr_algorithm")
119 |
120 | @property
121 | def init_lr(self):
122 | return self.config.getfloat("Optimizer", "init_lr")
123 |
124 | @property
125 | def lr_decay(self):
126 | return self.config.getfloat("Optimizer", "lr_decay")
127 |
128 | @property
129 | def momentum(self):
130 | return self.config.getfloat("Optimizer", "momentum")
131 |
132 | @property
133 | def weight_decay(self):
134 | return self.config.getfloat("Optimizer", "weight_decay")
135 |
136 | @property
137 | def epsilon(self):
138 | return self.config.getfloat("Optimizer", "epsilon")
139 |
140 | @property
141 | def monitor(self):
142 | return self.config.get("Train", "monitor")
143 |
144 | @property
145 | def init_algorithm(self):
146 | return self.config.get("Train", "init_algorithm")
147 |
148 | @property
149 | def use_seed(self):
150 | return self.config.getboolean("Train", "use_seed")
151 |
152 | @property
153 | def use_one_cycle_lr(self):
154 | return self.config.getboolean("Train", "use_one_cycle_lr")
155 |
156 | @property
157 | def use_mix(self):
158 | return self.config.getboolean("Train", "use_mix")
159 |
160 | @property
161 | def early_stop(self):
162 | return self.config.getint("Train", "early_stop")
163 |
164 | @property
165 | def warmup_period(self):
166 | return self.config.getint("Train", "warmup_period")
167 |
168 | @property
169 | def save_period(self):
170 | return self.config.getint("Train", "save_period")
171 |
172 | @property
173 | def epochs(self):
174 | return self.config.getint("Train", "epochs")
175 |
176 |
177 | if __name__ == '__main__':
178 | config = MyConfiguration("config.cfg")
179 | config.config.set("Directory", "root_dir",
180 | r"D:\test")
181 | print(config.root_dir)
182 |
--------------------------------------------------------------------------------
/Tester.py:
--------------------------------------------------------------------------------
1 | import torch
2 | import numpy as np
3 | import os
4 | import time
5 | import torch.nn as nn
6 | from tqdm import tqdm
7 | from utils.util import AverageMeter, ensure_dir
8 | from utils.metrics import Evaluator
9 |
10 | class Tester(object):
11 | def __init__(self,
12 | model,
13 | config,
14 | args,
15 | test_data_loader,
16 | class_name,
17 | begin_time,
18 | resume_file):
19 |
20 | # for general
21 | self.config = config
22 | self.args = args
23 | self.device = torch.device('cpu') if self.args.gpu == -1 else torch.device('cuda:{}'.format(self.args.gpu))
24 | self.class_name = class_name
25 | # for Test
26 | self.model = model.to(self.device)
27 | self.models = []
28 |
29 | self.loss = self._loss().to(self.device)
30 |
31 | # for time
32 | self.begin_time = begin_time
33 |
34 | # for data
35 | self.test_data_loader = test_data_loader
36 |
37 | # for resume/save path
38 | self.history = {
39 | "eval": {
40 | "loss": [],
41 | "acc": [],
42 | "miou": [],
43 | "time": [],
44 | "prec": [],
45 | "recall": [],
46 | "f_score": [],
47 | },
48 | }
49 |
50 | self.model_name = self.config.model_name
51 |
52 | # loading args.weight or the checkpoint-best.pth
53 | self.test_log_path = os.path.join(self.args.output, 'test', 'log', self.model_name,
54 | self.begin_time)
55 | ensure_dir(self.test_log_path)
56 |
57 | if self.config.use_seed:
58 | self.resume_ckpt_path = resume_file if resume_file is not None else \
59 | os.path.join(self.config.save_dir, self.model_name,
60 | self.begin_time + '_seed' + str(self.config.random_seed), 'checkpoint-best.pth')
61 | else:
62 | self.resume_ckpt_path = resume_file if resume_file is not None else \
63 | os.path.join(self.config.save_dir, self.model_name,
64 | self.begin_time, 'checkpoint-best.pth')
65 |
66 | self.evaluator = Evaluator(self.config.nb_classes, self.device)
67 |
68 | def _loss(self):
69 | loss = nn.CrossEntropyLoss()
70 | return loss
71 |
72 | def eval_and_predict(self):
73 | self._resume_ckpt()
74 |
75 | self.model.eval()
76 | self.evaluator.reset()
77 |
78 | ave_total_loss = AverageMeter()
79 |
80 | with torch.no_grad():
81 | tic = time.time()
82 | for steps, (imgs, gts, filenames) in tqdm(enumerate(self.test_data_loader, start=1)):
83 | imgs = imgs.to(self.device, non_blocking=True)
84 | gts = gts.to(self.device, non_blocking=True)
85 |
86 | # sup loss
87 | sup_logits_l = self.model(imgs, step=1)
88 | gts = gts.long()
89 |
90 | loss = self.loss(sup_logits_l, gts)
91 |
92 | pred = torch.argmax(sup_logits_l, dim=1)
93 | pred = pred.view(-1).long()
94 | label = gts.view(-1).long()
95 | # Add batch sample into evaluator
96 | self.evaluator.add_batch(label, pred)
97 |
98 | ave_total_loss.update(loss.item())
99 | total_time = time.time() - tic
100 | acc = self.evaluator.Pixel_Accuracy().cpu().detach().numpy()
101 | miou = self.evaluator.Mean_Intersection_over_Union().cpu().detach().numpy()
102 | TP, FP, FN, TN = self.evaluator.get_base_value()
103 | confusion_matrix = self.evaluator.get_confusion_matrix().cpu().detach().numpy()
104 | iou = self.evaluator.get_iou().cpu().detach().numpy()
105 | prec = self.evaluator.Pixel_Precision_Class().cpu().detach().numpy()
106 | recall = self.evaluator.Pixel_Recall_Class().cpu().detach().numpy()
107 | f1_score = self.evaluator.Pixel_F1_score_Class().cpu().detach().numpy()
108 |
109 | # display evaluation result
110 | print('Evaluation phase !\n'
111 | 'Accuracy: {:6.4f}, Loss: {:.6f}'.format(
112 | acc, ave_total_loss.average()))
113 | np.set_printoptions(formatter={'int': '{: 9}'.format})
114 | print('Class: ', self.class_name, ' Average')
115 | np.set_printoptions(formatter={'float': '{: 6.6f}'.format})
116 | print('IoU: ', np.hstack((iou, np.average(iou))))
117 | print('Precision:', np.hstack((prec, np.average(prec))))
118 | print('Recall: ', np.hstack((recall, np.average(recall))))
119 | print('F_Score: ', np.hstack((f1_score, np.average(f1_score))))
120 | np.set_printoptions(formatter={'int': '{:14}'.format})
121 | print('Confusion_matrix:')
122 | print(confusion_matrix)
123 |
124 | print('Prediction Phase !\n'
125 | 'Total Time cost: {:.2f}s\n'
126 | .format(total_time,
127 | ))
128 | self.history["eval"]["loss"].append(ave_total_loss.average())
129 | self.history["eval"]["acc"].append(acc.tolist())
130 | self.history["eval"]["miou"].append(iou.tolist())
131 | self.history["eval"]["time"].append(total_time)
132 |
133 | self.history["eval"]["prec"].append(prec.tolist())
134 | self.history["eval"]["recall"].append(recall.tolist())
135 | self.history["eval"]["f_score"].append(f1_score.tolist())
136 |
137 | # Save results to log file
138 | print(" + Saved history of evaluation phase !")
139 | hist_path = os.path.join(self.test_log_path, "test-result.txt")
140 | with open(hist_path, 'w') as f:
141 | f.write(str(self.history).replace("'", '"'))
142 | f.write('\nConfusion_matrix:\n')
143 | f.write(str(confusion_matrix))
144 |
145 | np.set_printoptions(formatter={'int': '{: 9}'.format})
146 | f.write('\nClass: ' + str(self.class_name) + ' Average')
147 | np.set_printoptions(formatter={'float': '{: 6.6f}'.format})
148 | format_iou = np.hstack((iou, np.average(iou)))
149 | format_prec = np.hstack((prec, np.average(prec)))
150 | format_recall = np.hstack((recall, np.average(recall)))
151 | format_f1_score = np.hstack((f1_score, np.average(f1_score)))
152 | f.write('\nIoU: ' + str(format_iou))
153 | f.write('\nPrecision:' + str(format_prec))
154 | f.write('\nRecall: ' + str(format_recall))
155 | f.write('\nF1_score: ' + str(format_f1_score))
156 |
157 | def _resume_ckpt(self):
158 | print(" + Loading ckpt path : {} ...".format(self.resume_ckpt_path))
159 | checkpoint = torch.load(self.resume_ckpt_path)
160 | self.model.load_state_dict(checkpoint['state_dict'], strict=True)
161 | print(" + Model State Loaded ! :D ")
162 | print(" + Checkpoint file: '{}' , Loaded ! \n"
163 | " + Prepare to test ! ! !"
164 | .format(self.resume_ckpt_path))
165 |
--------------------------------------------------------------------------------
/train.py:
--------------------------------------------------------------------------------
1 | import datetime
2 | import argparse
3 | import torch
4 | import random
5 | import numpy as np
6 | from configs.config import MyConfiguration
7 | from Trainer import Trainer
8 | from Tester import Tester
9 | from data.dataset_list import MyDataset
10 | from torch.utils.data import DataLoader
11 | from models import CPS_Network
12 |
13 | def for_train(model,
14 | config,
15 | args,
16 | train_data_loader,
17 | train_unsup_data_loader0,
18 | train_unsup_data_loader1,
19 | valid_data_loader,
20 | begin_time,
21 | resume_file):
22 | myTrainer = Trainer(model=model, config=config, args=args,
23 | train_data_loader=train_data_loader,
24 | valid_data_loader=valid_data_loader,
25 | train_unsup_data_loader0=train_unsup_data_loader0,
26 | train_unsup_data_loader1=train_unsup_data_loader1,
27 | begin_time=begin_time,
28 | resume_file=resume_file)
29 |
30 | myTrainer.train()
31 | print(" Training Done ! ")
32 |
33 |
34 | def for_test(model, config, args, test_data_loader, class_name, begin_time, resume_file):
35 | myTester = Tester(model=model, config=config, args=args,
36 | test_data_loader=test_data_loader,
37 | class_name=class_name,
38 | begin_time=begin_time,
39 | resume_file=resume_file)
40 |
41 | myTester.eval_and_predict()
42 | print(" Evaluation Done ! ")
43 |
44 |
45 | def main(config, args):
46 | # model initialization
47 | model = CPS_Network.FCNs_CPS(in_ch=config.input_channel, out_ch=config.nb_classes, backbone='vgg16_bn',
48 | pretrained=True)
49 |
50 | if hasattr(model, 'name'):
51 | config.config.set("Directory", "model_name", model.name + '_classhyper')
52 |
53 | # obtain the maximum number of samples
54 | temp_datset_sup = MyDataset(config=config, args=args, subset='train')
55 | temp_datset_unsup = MyDataset(config=config, args=args, subset='train_unsup')
56 | l_sup = len(temp_datset_sup)
57 | l_unsup = len(temp_datset_unsup)
58 | max_samples = max(l_sup, l_unsup)
59 | del temp_datset_unsup, temp_datset_sup
60 |
61 | # initialize the training dataset
62 | train_dataset = MyDataset(config=config, args=args, subset='train', file_length=max_samples)
63 | train_unsup_dataset = MyDataset(config=config, args=args, subset='train_unsup', file_length=max_samples)
64 | valid_dataset = MyDataset(config=config, args=args, subset='val')
65 | test_dataset = MyDataset(config=config, args=args, subset='test')
66 |
67 | # initialize the training Dataloader
68 | train_data_loader = DataLoader(dataset=train_dataset,
69 | batch_size=config.batch_size,
70 | shuffle=True,
71 | pin_memory=True,
72 | num_workers=args.threads,
73 | drop_last=True)
74 | train_unsup_data_loader0 = DataLoader(dataset=train_unsup_dataset,
75 | batch_size=config.batch_size,
76 | shuffle=True,
77 | pin_memory=True,
78 | num_workers=args.threads,
79 | drop_last=True)
80 | train_unsup_data_loader1 = DataLoader(dataset=train_unsup_dataset,
81 | batch_size=config.batch_size,
82 | shuffle=True,
83 | pin_memory=True,
84 | num_workers=args.threads,
85 | drop_last=True)
86 |
87 | valid_data_loader = DataLoader(dataset=valid_dataset,
88 | batch_size=config.batch_size,
89 | shuffle=False,
90 | pin_memory=True,
91 | num_workers=args.threads,
92 | drop_last=False)
93 | test_data_loader = DataLoader(dataset=test_dataset,
94 | batch_size=config.batch_size,
95 | shuffle=False,
96 | pin_memory=True,
97 | num_workers=args.threads,
98 | drop_last=False)
99 | begin_time = datetime.datetime.now().strftime('%Y%m%d_%H%M%S')
100 |
101 | if config.use_gpu:
102 | model = model.cuda(device=args.gpu)
103 |
104 | for_train(model=model, config=config, args=args,
105 | train_data_loader=train_data_loader,
106 | valid_data_loader=valid_data_loader,
107 | train_unsup_data_loader0=train_unsup_data_loader0,
108 | train_unsup_data_loader1=train_unsup_data_loader1,
109 | begin_time=begin_time,
110 | resume_file=args.weight)
111 |
112 | for_test(model=model, config=config, args=args,
113 | test_data_loader=test_data_loader,
114 | class_name=test_dataset.class_names,
115 | begin_time=begin_time,
116 | resume_file=None
117 | )
118 |
119 |
120 | if __name__ == '__main__':
121 | config = MyConfiguration('configs/config.cfg')
122 |
123 | parser = argparse.ArgumentParser(description="Model Training")
124 | parser.add_argument('-input', metavar='input', type=str, default=config.root_dir,
125 | help='root path to directory containing input images, including train & valid & test')
126 | parser.add_argument('-output', metavar='output', type=str, default=config.save_dir,
127 | help='root path to directory containing all the output, including predictions, logs and ckpt')
128 | parser.add_argument('-weight', metavar='weight', type=str, default=None,
129 | help='path to ckpt which will be loaded')
130 | parser.add_argument('-threads', metavar='threads', type=int, default=2,
131 | help='number of thread used for DataLoader')
132 | parser.add_argument('-is_test', action='store_true', default=False,
133 | help='in train mode, is_test=False')
134 | if config.use_gpu:
135 | parser.add_argument('-gpu', metavar='gpu', type=int, default=0,
136 | help='gpu id to be used for prediction')
137 | else:
138 | parser.add_argument('-gpu', metavar='gpu', type=int, default=-1,
139 | help='gpu id to be used for prediction')
140 |
141 | args = parser.parse_args()
142 |
143 | if config.use_seed:
144 | torch.backends.cudnn.benchmark = False
145 | torch.backends.cudnn.deterministic = True
146 | torch.cuda.manual_seed(config.random_seed)
147 | torch.manual_seed(config.random_seed)
148 | random.seed(config.random_seed)
149 | np.random.seed(config.random_seed)
150 | else:
151 | torch.backends.cudnn.benchmark = True
152 |
153 | main(config=config, args=args)
154 |
--------------------------------------------------------------------------------
/data/dataset_list.py:
--------------------------------------------------------------------------------
1 | import os
2 | import torch
3 | import numpy as np
4 | from torch.utils.data import Dataset
5 | from PIL import Image
6 | import cv2
7 | import albumentations as A
8 | from albumentations.pytorch import ToTensorV2
9 |
10 | rgb_mean = (0.485, 0.456, 0.406)
11 | rgb_std = (0.229, 0.224, 0.225)
12 |
13 | class MyDataset(Dataset):
14 | def __init__(self,
15 | config,
16 | args,
17 | subset,
18 | file_length=None):
19 | super(MyDataset, self).__init__()
20 | assert subset == 'train' or subset == 'val' or subset == 'test' or subset == 'train_unsup'
21 |
22 | self.args = args
23 | self.config = config
24 | self.root = args.input
25 | self.subset = subset
26 | self.data = self.config.data_folder_name # image
27 | self.target = self.config.target_folder_name # label
28 | self._file_length = file_length
29 |
30 | if self.config.nb_classes == 2: # binary class(buildings and roads)
31 | self.mapping = {
32 | 0: 0,
33 | 255: 1,
34 | }
35 | self.class_names = ['other', 'building']
36 | elif self.config.nb_classes == 6: # ISPRS dataset (six class)
37 | self.mapping = {
38 | (255, 255, 255): 0,
39 | (0, 0, 255): 1,
40 | (0, 255, 255): 2,
41 | (0, 255, 0): 3,
42 | (255, 255, 0): 4,
43 | (255, 0, 0): 5,
44 | (0, 0, 0): 6
45 | }
46 | self.class_names = ['Impervious surfaces', 'building', 'low vegetation', 'tree', 'car',
47 | 'clutter/background']
48 |
49 | self.data_list = []
50 | self.target_list = []
51 | with open(os.path.join(self.root, subset + '_image.txt'), 'r') as f:
52 | for line in f:
53 | if line.strip('\n') != '':
54 | self.data_list.append(line.strip('\n'))
55 | if subset != 'train_unsup':
56 | with open(os.path.join(self.root, subset + '_label.txt'), 'r') as f:
57 | for line in f:
58 | if line.strip('\n') != '':
59 | self.target_list.append(line.strip('\n'))
60 |
61 | if self._file_length is not None:
62 | self.data_list, self.target_list = self._construct_new_file_list(self._file_length, is_UnsupData=False)
63 | else:
64 | if self._file_length is not None:
65 | self.data_list = self._construct_new_file_list(self._file_length, is_UnsupData=True)
66 |
67 | def _construct_new_file_list(self, length, is_UnsupData):
68 | """
69 | Construct new file list based on whether is unlabeled data or not
70 | """
71 | assert isinstance(length, int)
72 | files_len = len(self.data_list)
73 |
74 | if length < files_len:
75 | if not is_UnsupData:
76 | return self.data_list[:length], self.target_list[:length]
77 | else:
78 | return self.data_list[:length]
79 |
80 | rand_indices = torch.randperm(files_len).tolist()
81 | new_indices = rand_indices[:length % files_len]
82 |
83 | new_data_list = self.data_list * (length // files_len)
84 | new_data_list += [self.data_list[i] for i in new_indices]
85 |
86 | if not is_UnsupData:
87 | new_target_list = self.target_list * (length // files_len)
88 | new_target_list += [self.target_list[i] for i in new_indices]
89 | return new_data_list, new_target_list
90 | else:
91 | return new_data_list
92 |
93 | def mask_to_class(self, mask):
94 | """
95 | Encode class to number
96 | """
97 | if self.config.nb_classes == 2:
98 | for k in self.mapping:
99 | mask[mask == k] = self.mapping[k]
100 | return mask
101 | elif self.config.nb_classes == 6:
102 | mask = mask.permute(2, 0, 1).contiguous()
103 | m = torch.empty(self.config.input_size, self.config.input_size, dtype=torch.long)
104 | for k in self.mapping:
105 | idx = (mask == torch.tensor(k, dtype=torch.uint8).unsqueeze(1).unsqueeze(2))
106 | validx = (idx.sum(0) == 3)
107 | m[validx] = torch.tensor(self.mapping[k], dtype=torch.long)
108 | return m
109 |
110 | def train_transforms(self, image, mask):
111 | """
112 | Preprocessing and augmentation on training data (image and label)
113 | """
114 | in_size = self.config.input_size
115 | train_transform = A.Compose(
116 | [
117 | A.Resize(in_size, in_size, interpolation=cv2.INTER_NEAREST),
118 | A.HorizontalFlip(p=0.8),
119 | A.VerticalFlip(p=0.8),
120 | A.RandomRotate90(p=0.8),
121 | A.Transpose(p=0.8),
122 | A.Normalize(mean=rgb_mean, std=rgb_std),
123 | ToTensorV2(),
124 | ]
125 | )
126 | transformed = train_transform(image=image, mask=mask)
127 | image = transformed["image"]
128 | mask = transformed["mask"]
129 |
130 | mask = self.mask_to_class(mask)
131 |
132 | mask = mask.float()
133 | return image, mask
134 |
135 | def untrain_transforms(self, image, mask):
136 | """
137 | Preprocessing on val or test data (image and label)
138 | """
139 | untrain_transform = A.Compose(
140 | [
141 | A.Resize(self.config.eval_size, self.config.eval_size, interpolation=cv2.INTER_NEAREST),
142 | A.Normalize(mean=rgb_mean, std=rgb_std),
143 | ToTensorV2(),
144 | ]
145 | )
146 | transformed = untrain_transform(image=image, mask=mask)
147 | image = transformed["image"]
148 | mask = transformed["mask"]
149 |
150 | mask = self.mask_to_class(mask)
151 | mask = mask.float()
152 | return image, mask
153 |
154 | def untrain_transforms1(self, image):
155 | """
156 | Preprocessing on unsup data (image)
157 | """
158 | untrain_transform = A.Compose(
159 | [
160 | A.Resize(self.config.eval_size, self.config.eval_size),
161 | A.Normalize(mean=rgb_mean, std=rgb_std),
162 | ToTensorV2(),
163 | ]
164 | )
165 | transformed = untrain_transform(image=image)
166 | image = transformed["image"]
167 |
168 | return image
169 |
170 | def __getitem__(self, index):
171 | image = cv2.imread(self.data_list[index])
172 | image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
173 | if self.subset != 'train_unsup':
174 | mask = np.array(Image.open(self.target_list[index])).astype(np.uint8)
175 |
176 | if self.subset == 'train':
177 | if not self.args.is_test:
178 | t_datas, t_targets = self.train_transforms(image, mask)
179 | else:
180 | t_datas, t_targets = self.untrain_transforms(image, mask)
181 | return t_datas, t_targets, self.data_list[index]
182 | elif self.subset == 'train_unsup':
183 | t_datas = self.untrain_transforms1(image)
184 | return t_datas, self.data_list[index]
185 | elif self.subset == 'val' or self.subset == 'test':
186 | t_datas, t_targets = self.untrain_transforms(image, mask)
187 | return t_datas, t_targets, self.data_list[index]
188 |
189 | def __len__(self):
190 |
191 | return len(self.data_list)
192 |
--------------------------------------------------------------------------------
/examples/test_image.txt:
--------------------------------------------------------------------------------
1 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area10_000_000.tif
2 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area10_000_001.tif
3 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area10_000_002.tif
4 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area10_001_000.tif
5 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area10_001_001.tif
6 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area10_001_002.tif
7 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area10_002_000.tif
8 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area10_002_001.tif
9 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area10_002_002.tif
10 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area10_003_000.tif
11 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area10_003_001.tif
12 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area10_003_002.tif
13 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area12_000_000.tif
14 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area12_000_001.tif
15 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area12_000_002.tif
16 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area12_001_000.tif
17 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area12_001_001.tif
18 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area12_001_002.tif
19 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area12_002_000.tif
20 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area12_002_001.tif
21 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area12_002_002.tif
22 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area12_003_000.tif
23 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area12_003_001.tif
24 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area12_003_002.tif
25 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area12_004_000.tif
26 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area12_004_001.tif
27 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area12_004_002.tif
28 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area14_000_000.tif
29 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area14_000_001.tif
30 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area14_000_002.tif
31 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area14_001_000.tif
32 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area14_001_001.tif
33 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area14_001_002.tif
34 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area14_002_000.tif
35 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area14_002_001.tif
36 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area14_002_002.tif
37 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area14_003_000.tif
38 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area14_003_001.tif
39 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area14_003_002.tif
40 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area14_004_000.tif
41 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area14_004_001.tif
42 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area14_004_002.tif
43 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area16_000_000.tif
44 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area16_000_001.tif
45 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area16_000_002.tif
46 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area16_001_000.tif
47 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area16_001_001.tif
48 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area16_001_002.tif
49 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area16_002_000.tif
50 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area16_002_001.tif
51 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area16_002_002.tif
52 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area16_003_000.tif
53 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area16_003_001.tif
54 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area16_003_002.tif
55 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area16_004_000.tif
56 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area16_004_001.tif
57 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area16_004_002.tif
58 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area20_000_000.tif
59 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area20_000_001.tif
60 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area20_000_002.tif
61 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area20_001_000.tif
62 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area20_001_001.tif
63 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area20_001_002.tif
64 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area20_002_000.tif
65 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area20_002_001.tif
66 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area20_002_002.tif
67 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area20_003_000.tif
68 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area20_003_001.tif
69 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area20_003_002.tif
70 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area22_000_000.tif
71 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area22_000_001.tif
72 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area22_000_002.tif
73 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area22_001_000.tif
74 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area22_001_001.tif
75 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area22_001_002.tif
76 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area22_002_000.tif
77 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area22_002_001.tif
78 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area22_002_002.tif
79 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area22_003_000.tif
80 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area22_003_001.tif
81 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area22_003_002.tif
82 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area24_000_000.tif
83 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area24_000_001.tif
84 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area24_000_002.tif
85 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area24_001_000.tif
86 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area24_001_001.tif
87 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area24_001_002.tif
88 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area24_002_000.tif
89 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area24_002_001.tif
90 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area24_002_002.tif
91 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area24_003_000.tif
92 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area24_003_001.tif
93 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area24_003_002.tif
94 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area27_000_000.tif
95 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area27_000_001.tif
96 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area27_000_002.tif
97 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area27_001_000.tif
98 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area27_001_001.tif
99 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area27_001_002.tif
100 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area27_002_000.tif
101 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area27_002_001.tif
102 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area27_002_002.tif
103 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area27_003_000.tif
104 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area27_003_001.tif
105 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area27_003_002.tif
106 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area27_004_000.tif
107 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area27_004_001.tif
108 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area27_004_002.tif
109 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area27_005_000.tif
110 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area27_005_001.tif
111 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area27_005_002.tif
112 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area29_000_000.tif
113 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area29_000_001.tif
114 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area29_000_002.tif
115 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area29_001_000.tif
116 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area29_001_001.tif
117 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area29_001_002.tif
118 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area29_002_000.tif
119 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area29_002_001.tif
120 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area29_002_002.tif
121 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area29_003_000.tif
122 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area29_003_001.tif
123 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area29_003_002.tif
124 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area29_004_000.tif
125 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area29_004_001.tif
126 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area29_004_002.tif
127 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area2_000_000.tif
128 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area2_000_001.tif
129 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area2_000_002.tif
130 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area2_000_003.tif
131 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area2_001_000.tif
132 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area2_001_001.tif
133 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area2_001_002.tif
134 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area2_001_003.tif
135 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area2_002_000.tif
136 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area2_002_001.tif
137 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area2_002_002.tif
138 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area2_002_003.tif
139 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area2_003_000.tif
140 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area2_003_001.tif
141 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area2_003_002.tif
142 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area2_003_003.tif
143 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area2_004_000.tif
144 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area2_004_001.tif
145 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area2_004_002.tif
146 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area2_004_003.tif
147 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area31_000_000.tif
148 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area31_000_001.tif
149 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area31_000_002.tif
150 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area31_001_000.tif
151 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area31_001_001.tif
152 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area31_001_002.tif
153 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area31_002_000.tif
154 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area31_002_001.tif
155 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area31_002_002.tif
156 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area31_003_000.tif
157 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area31_003_001.tif
158 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area31_003_002.tif
159 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area33_000_000.tif
160 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area33_000_001.tif
161 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area33_000_002.tif
162 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area33_001_000.tif
163 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area33_001_001.tif
164 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area33_001_002.tif
165 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area33_002_000.tif
166 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area33_002_001.tif
167 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area33_002_002.tif
168 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area33_003_000.tif
169 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area33_003_001.tif
170 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area33_003_002.tif
171 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area35_000_000.tif
172 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area35_000_001.tif
173 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area35_000_002.tif
174 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area35_000_003.tif
175 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area35_000_004.tif
176 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area35_001_000.tif
177 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area35_001_001.tif
178 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area35_001_002.tif
179 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area35_001_003.tif
180 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area35_001_004.tif
181 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area35_002_000.tif
182 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area35_002_001.tif
183 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area35_002_002.tif
184 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area35_002_003.tif
185 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area35_002_004.tif
186 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area38_000_000.tif
187 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area38_000_001.tif
188 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area38_000_002.tif
189 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area38_000_003.tif
190 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area38_000_004.tif
191 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area38_000_005.tif
192 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area38_000_006.tif
193 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area38_001_000.tif
194 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area38_001_001.tif
195 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area38_001_002.tif
196 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area38_001_003.tif
197 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area38_001_004.tif
198 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area38_001_005.tif
199 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area38_001_006.tif
200 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area38_002_000.tif
201 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area38_002_001.tif
202 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area38_002_002.tif
203 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area38_002_003.tif
204 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area38_002_004.tif
205 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area38_002_005.tif
206 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area38_002_006.tif
207 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area38_003_000.tif
208 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area38_003_001.tif
209 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area38_003_002.tif
210 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area38_003_003.tif
211 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area38_003_004.tif
212 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area38_003_005.tif
213 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area38_003_006.tif
214 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area4_000_000.tif
215 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area4_000_001.tif
216 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area4_000_002.tif
217 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area4_001_000.tif
218 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area4_001_001.tif
219 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area4_001_002.tif
220 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area4_002_000.tif
221 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area4_002_001.tif
222 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area4_002_002.tif
223 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area4_003_000.tif
224 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area4_003_001.tif
225 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area4_003_002.tif
226 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area6_000_000.tif
227 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area6_000_001.tif
228 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area6_000_002.tif
229 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area6_001_000.tif
230 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area6_001_001.tif
231 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area6_001_002.tif
232 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area6_002_000.tif
233 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area6_002_001.tif
234 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area6_002_002.tif
235 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area6_003_000.tif
236 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area6_003_001.tif
237 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area6_003_002.tif
238 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area8_000_000.tif
239 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area8_000_001.tif
240 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area8_000_002.tif
241 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area8_001_000.tif
242 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area8_001_001.tif
243 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area8_001_002.tif
244 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area8_002_000.tif
245 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area8_002_001.tif
246 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area8_002_002.tif
247 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area8_003_000.tif
248 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area8_003_001.tif
249 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area8_003_002.tif
250 |
--------------------------------------------------------------------------------
/examples/test_label.txt:
--------------------------------------------------------------------------------
1 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area10_000_000.tif
2 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area10_000_001.tif
3 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area10_000_002.tif
4 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area10_001_000.tif
5 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area10_001_001.tif
6 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area10_001_002.tif
7 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area10_002_000.tif
8 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area10_002_001.tif
9 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area10_002_002.tif
10 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area10_003_000.tif
11 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area10_003_001.tif
12 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area10_003_002.tif
13 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area12_000_000.tif
14 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area12_000_001.tif
15 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area12_000_002.tif
16 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area12_001_000.tif
17 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area12_001_001.tif
18 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area12_001_002.tif
19 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area12_002_000.tif
20 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area12_002_001.tif
21 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area12_002_002.tif
22 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area12_003_000.tif
23 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area12_003_001.tif
24 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area12_003_002.tif
25 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area12_004_000.tif
26 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area12_004_001.tif
27 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area12_004_002.tif
28 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area14_000_000.tif
29 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area14_000_001.tif
30 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area14_000_002.tif
31 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area14_001_000.tif
32 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area14_001_001.tif
33 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area14_001_002.tif
34 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area14_002_000.tif
35 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area14_002_001.tif
36 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area14_002_002.tif
37 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area14_003_000.tif
38 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area14_003_001.tif
39 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area14_003_002.tif
40 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area14_004_000.tif
41 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area14_004_001.tif
42 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area14_004_002.tif
43 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area16_000_000.tif
44 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area16_000_001.tif
45 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area16_000_002.tif
46 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area16_001_000.tif
47 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area16_001_001.tif
48 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area16_001_002.tif
49 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area16_002_000.tif
50 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area16_002_001.tif
51 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area16_002_002.tif
52 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area16_003_000.tif
53 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area16_003_001.tif
54 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area16_003_002.tif
55 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area16_004_000.tif
56 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area16_004_001.tif
57 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area16_004_002.tif
58 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area20_000_000.tif
59 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area20_000_001.tif
60 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area20_000_002.tif
61 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area20_001_000.tif
62 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area20_001_001.tif
63 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area20_001_002.tif
64 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area20_002_000.tif
65 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area20_002_001.tif
66 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area20_002_002.tif
67 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area20_003_000.tif
68 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area20_003_001.tif
69 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area20_003_002.tif
70 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area22_000_000.tif
71 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area22_000_001.tif
72 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area22_000_002.tif
73 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area22_001_000.tif
74 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area22_001_001.tif
75 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area22_001_002.tif
76 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area22_002_000.tif
77 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area22_002_001.tif
78 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area22_002_002.tif
79 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area22_003_000.tif
80 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area22_003_001.tif
81 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area22_003_002.tif
82 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area24_000_000.tif
83 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area24_000_001.tif
84 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area24_000_002.tif
85 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area24_001_000.tif
86 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area24_001_001.tif
87 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area24_001_002.tif
88 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area24_002_000.tif
89 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area24_002_001.tif
90 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area24_002_002.tif
91 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area24_003_000.tif
92 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area24_003_001.tif
93 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area24_003_002.tif
94 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area27_000_000.tif
95 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area27_000_001.tif
96 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area27_000_002.tif
97 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area27_001_000.tif
98 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area27_001_001.tif
99 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area27_001_002.tif
100 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area27_002_000.tif
101 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area27_002_001.tif
102 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area27_002_002.tif
103 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area27_003_000.tif
104 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area27_003_001.tif
105 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area27_003_002.tif
106 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area27_004_000.tif
107 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area27_004_001.tif
108 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area27_004_002.tif
109 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area27_005_000.tif
110 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area27_005_001.tif
111 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area27_005_002.tif
112 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area29_000_000.tif
113 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area29_000_001.tif
114 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area29_000_002.tif
115 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area29_001_000.tif
116 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area29_001_001.tif
117 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area29_001_002.tif
118 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area29_002_000.tif
119 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area29_002_001.tif
120 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area29_002_002.tif
121 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area29_003_000.tif
122 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area29_003_001.tif
123 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area29_003_002.tif
124 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area29_004_000.tif
125 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area29_004_001.tif
126 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area29_004_002.tif
127 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area2_000_000.tif
128 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area2_000_001.tif
129 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area2_000_002.tif
130 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area2_000_003.tif
131 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area2_001_000.tif
132 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area2_001_001.tif
133 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area2_001_002.tif
134 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area2_001_003.tif
135 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area2_002_000.tif
136 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area2_002_001.tif
137 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area2_002_002.tif
138 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area2_002_003.tif
139 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area2_003_000.tif
140 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area2_003_001.tif
141 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area2_003_002.tif
142 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area2_003_003.tif
143 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area2_004_000.tif
144 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area2_004_001.tif
145 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area2_004_002.tif
146 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area2_004_003.tif
147 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area31_000_000.tif
148 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area31_000_001.tif
149 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area31_000_002.tif
150 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area31_001_000.tif
151 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area31_001_001.tif
152 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area31_001_002.tif
153 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area31_002_000.tif
154 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area31_002_001.tif
155 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area31_002_002.tif
156 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area31_003_000.tif
157 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area31_003_001.tif
158 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area31_003_002.tif
159 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area33_000_000.tif
160 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area33_000_001.tif
161 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area33_000_002.tif
162 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area33_001_000.tif
163 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area33_001_001.tif
164 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area33_001_002.tif
165 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area33_002_000.tif
166 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area33_002_001.tif
167 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area33_002_002.tif
168 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area33_003_000.tif
169 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area33_003_001.tif
170 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area33_003_002.tif
171 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area35_000_000.tif
172 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area35_000_001.tif
173 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area35_000_002.tif
174 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area35_000_003.tif
175 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area35_000_004.tif
176 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area35_001_000.tif
177 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area35_001_001.tif
178 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area35_001_002.tif
179 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area35_001_003.tif
180 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area35_001_004.tif
181 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area35_002_000.tif
182 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area35_002_001.tif
183 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area35_002_002.tif
184 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area35_002_003.tif
185 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area35_002_004.tif
186 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area38_000_000.tif
187 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area38_000_001.tif
188 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area38_000_002.tif
189 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area38_000_003.tif
190 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area38_000_004.tif
191 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area38_000_005.tif
192 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area38_000_006.tif
193 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area38_001_000.tif
194 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area38_001_001.tif
195 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area38_001_002.tif
196 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area38_001_003.tif
197 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area38_001_004.tif
198 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area38_001_005.tif
199 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area38_001_006.tif
200 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area38_002_000.tif
201 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area38_002_001.tif
202 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area38_002_002.tif
203 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area38_002_003.tif
204 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area38_002_004.tif
205 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area38_002_005.tif
206 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area38_002_006.tif
207 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area38_003_000.tif
208 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area38_003_001.tif
209 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area38_003_002.tif
210 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area38_003_003.tif
211 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area38_003_004.tif
212 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area38_003_005.tif
213 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area38_003_006.tif
214 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area4_000_000.tif
215 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area4_000_001.tif
216 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area4_000_002.tif
217 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area4_001_000.tif
218 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area4_001_001.tif
219 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area4_001_002.tif
220 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area4_002_000.tif
221 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area4_002_001.tif
222 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area4_002_002.tif
223 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area4_003_000.tif
224 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area4_003_001.tif
225 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area4_003_002.tif
226 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area6_000_000.tif
227 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area6_000_001.tif
228 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area6_000_002.tif
229 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area6_001_000.tif
230 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area6_001_001.tif
231 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area6_001_002.tif
232 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area6_002_000.tif
233 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area6_002_001.tif
234 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area6_002_002.tif
235 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area6_003_000.tif
236 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area6_003_001.tif
237 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area6_003_002.tif
238 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area8_000_000.tif
239 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area8_000_001.tif
240 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area8_000_002.tif
241 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area8_001_000.tif
242 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area8_001_001.tif
243 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area8_001_002.tif
244 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area8_002_000.tif
245 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area8_002_001.tif
246 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area8_002_002.tif
247 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area8_003_000.tif
248 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area8_003_001.tif
249 | D:\ISPRS\Vaihingen\label\top_mosaic_09cm_area8_003_002.tif
250 |
--------------------------------------------------------------------------------
/Trainer.py:
--------------------------------------------------------------------------------
1 | import os
2 | import sys
3 | import math
4 | import numpy as np
5 | import torch
6 | import torch.optim as optim
7 | import torch.nn as nn
8 | import torch.nn.init as init
9 | from utils.util import AverageMeter, ensure_dir
10 | from tqdm import tqdm
11 | from utils.metrics import Evaluator
12 | import shutil
13 | import utils.mask_gen as mask_gen
14 | from torch.cuda.amp import autocast
15 | from torch.cuda.amp import grad_scaler
16 |
17 |
18 | class Trainer(object):
19 |
20 | def __init__(self,
21 | model,
22 | config,
23 | args,
24 | train_data_loader,
25 | valid_data_loader,
26 | train_unsup_data_loader0,
27 | train_unsup_data_loader1,
28 | begin_time,
29 | resume_file=None):
30 |
31 | print(" + Training Start ... ...")
32 | # for general
33 | self.config = config
34 | self.args = args
35 | self.device = (self._device(self.args.gpu))
36 | self.model = model.to(self.device)
37 |
38 | self.train_data_loader = train_data_loader
39 | self.valid_data_loder = valid_data_loader
40 | self.unsupervised_train_loader_0 = train_unsup_data_loader0
41 | self.unsupervised_train_loader_1 = train_unsup_data_loader1
42 |
43 | # for time
44 | self.begin_time = begin_time # part of ckpt name
45 | self.save_period = self.config.save_period # for save ckpt
46 |
47 | self.model_name = self.config.model_name
48 |
49 | if self.config.use_seed:
50 | self.checkpoint_dir = os.path.join(self.args.output, self.model_name,
51 | self.begin_time + '_seed' + str(self.config.random_seed))
52 | self.log_dir = os.path.join(self.args.output, self.model_name,
53 | self.begin_time + '_seed' + str(self.config.random_seed), 'log')
54 | else:
55 | self.checkpoint_dir = os.path.join(self.args.output, self.model_name,
56 | self.begin_time)
57 | self.log_dir = os.path.join(self.args.output, self.model_name,
58 | self.begin_time, 'log')
59 |
60 | ensure_dir(self.checkpoint_dir)
61 | ensure_dir(self.log_dir)
62 |
63 | # output config to log file
64 | log_file_path = os.path.join(self.log_dir, self.model_name + '.txt')
65 | self.config.write_to_file(log_file_path)
66 |
67 | self.history = {
68 | 'train': {
69 | 'epoch': [],
70 | 'loss': [],
71 | 'acc': [],
72 | 'miou': [],
73 | 'prec': [],
74 | 'recall': [],
75 | 'f_score': [],
76 | },
77 | 'valid': {
78 | 'epoch': [],
79 | 'loss': [],
80 | 'acc': [],
81 | 'miou': [],
82 | 'prec': [],
83 | 'recall': [],
84 | 'f_score': [],
85 | }
86 | }
87 | # for optimize
88 | self.weight_init_algorithm = self.config.init_algorithm
89 | self.current_lr = self.config.init_lr
90 |
91 | # for train
92 | self.start_epoch = 0
93 | self.early_stop = self.config.early_stop # early stop steps
94 | self.monitor_mode = self.config.monitor.split('/')[0]
95 | self.monitor_metric = self.config.monitor.split('/')[1]
96 | self.monitor_best = 0
97 | self.best_epoch = -1
98 | self.not_improved_count = 0
99 | self.monitor_iou = 0
100 |
101 | # resume file
102 | self.resume_file = resume_file
103 | self.resume_ = True if resume_file else False
104 | if self.resume_file is not None:
105 | with open(log_file_path, 'a') as f:
106 | f.write('\n')
107 | f.write('resume_file:' + resume_file + '\n')
108 |
109 | self.loss = self._loss().to(self.device)
110 | self.optimizer_1 = self._optimizer(lr_algorithm=self.config.lr_algorithm)
111 | self.optimizer_2 = self._optimizer(lr_algorithm=self.config.lr_algorithm)
112 |
113 | # monitor init
114 | if self.monitor_mode != 'off':
115 | assert self.monitor_mode in ['min', 'max']
116 | self.monitor_best = math.inf if self.monitor_mode == 'min' else -math.inf
117 |
118 | if self.config.use_one_cycle_lr:
119 | self.lr_scheduler_1 = self._lr_scheduler_onecycle(self.optimizer_1)
120 | self.lr_scheduler_2 = self._lr_scheduler_onecycle(self.optimizer_2)
121 | else:
122 | self.lr_scheduler_1 = self._lr_scheduler_lambda(self.optimizer_1, last_epoch=self.start_epoch - 1)
123 | self.lr_scheduler_2 = self._lr_scheduler_lambda(self.optimizer_2, last_epoch=self.start_epoch - 1)
124 |
125 | # Evaluator
126 | self.evaluator = Evaluator(self.config.nb_classes, self.device)
127 |
128 | def _device(self, gpu):
129 | if gpu == -1:
130 | device = torch.device('cpu')
131 | return device
132 | else:
133 | device = torch.device('cuda:{}'.format(gpu))
134 | return device
135 |
136 | def _optimizer(self, lr_algorithm):
137 | assert lr_algorithm in ['adam', 'adamw', 'sgd']
138 | if lr_algorithm == 'adam':
139 | optimizer = optim.Adam(filter(lambda p: p.requires_grad, self.model.parameters()),
140 | lr=self.current_lr,
141 | betas=(0.9, 0.999),
142 | eps=1e-08,
143 | weight_decay=self.config.weight_decay,
144 | amsgrad=False
145 | )
146 | elif lr_algorithm == 'sgd':
147 | optimizer = optim.SGD(filter(lambda p: p.requires_grad, self.model.parameters()),
148 | lr=self.current_lr,
149 | momentum=self.config.momentum,
150 | dampening=0,
151 | weight_decay=self.config.weight_decay,
152 | nesterov=True)
153 | elif lr_algorithm == 'adamw':
154 | optimizer = optim.AdamW(filter(lambda p: p.requires_grad, self.model.parameters()),
155 | lr=self.current_lr,
156 | betas=(0.9, 0.999),
157 | eps=1e-08,
158 | weight_decay=self.config.weight_decay,
159 | amsgrad=False
160 | )
161 | return optimizer
162 |
163 | def _loss(self):
164 | loss = nn.CrossEntropyLoss()
165 | return loss
166 |
167 | def _lr_scheduler_onecycle(self, optimizer):
168 | lr_scheduler = optim.lr_scheduler.OneCycleLR(optimizer, max_lr=self.config.init_lr * 6,
169 | steps_per_epoch=len(self.train_data_loader),
170 | epochs=self.config.epochs + 1,
171 | div_factor=6)
172 | return lr_scheduler
173 |
174 | def _lr_scheduler_lambda(self, optimizer, last_epoch):
175 | lambda1 = lambda epoch: pow((1 - ((epoch - 1) / self.config.epochs)), 0.9)
176 | lr_scheduler = optim.lr_scheduler.LambdaLR(optimizer, lr_lambda=lambda1, last_epoch=last_epoch)
177 |
178 | return lr_scheduler
179 |
180 | def _weight_init(self, m):
181 | classname = m.__class__.__name__
182 | if classname.find(' Conv') != -1:
183 | if self.weight_init_algorithm == 'kaiming':
184 | init.kaiming_normal_(m.weight.data)
185 | else:
186 | init.xavier_normal_(m.weight.data)
187 | m.bias.data.zero_()
188 | elif classname.find('BatchNorm2d') != -1:
189 | m.weight.data.normal_(1.0, 0.02)
190 | m.bias.data.fill_(0)
191 |
192 | def train(self):
193 | if self.resume_ == False:
194 | # init weights
195 | self.model.apply(self._weight_init)
196 | print(" + Init weight ... Done !")
197 | else:
198 | # load the checkpoint file: resume_file
199 | self._resume_ckpt(resume_file=self.resume_file)
200 | print(" + Loading pth model file ... Done!")
201 |
202 | epochs = self.config.epochs
203 | assert self.start_epoch < epochs
204 |
205 | for epoch in range(self.start_epoch, epochs + 1):
206 | train_log = self._train_epoch_classmix(epoch)
207 | eval_log = self._eval_epoch(epoch)
208 |
209 | # lr update
210 | if not self.config.use_one_cycle_lr:
211 | if self.lr_scheduler_1 is not None:
212 | self.lr_scheduler_1.step(epoch)
213 | for param_group in self.optimizer_1.param_groups:
214 | self.current_lr = param_group['lr']
215 | if self.lr_scheduler_2 is not None:
216 | self.lr_scheduler_2.step(epoch)
217 | for param_group in self.optimizer_2.param_groups:
218 | self.current_lr = param_group['lr']
219 |
220 | best = False
221 | if self.monitor_mode != 'off':
222 | improved = (self.monitor_mode == 'min' and eval_log[
223 | 'val_' + self.monitor_metric] < self.monitor_best) or \
224 | (self.monitor_mode == 'max' and eval_log['val_' + self.monitor_metric] > self.monitor_best)
225 | if improved:
226 | self.monitor_best = eval_log['val_' + self.monitor_metric]
227 | self.monitor_iou = eval_log['val_MIoU']
228 | best = True
229 | self.best_epoch = eval_log['epoch']
230 | self.not_improved_count = 0
231 | else:
232 | self.not_improved_count += 1
233 |
234 | if self.not_improved_count > self.early_stop:
235 | print(" + Validation Performance didn\'t improve for {} epochs."
236 | " + Training stop :/"
237 | .format(self.not_improved_count))
238 | break
239 | if epoch % self.save_period == 0 or best == True:
240 | self._save_ckpt(epoch, best=best)
241 |
242 | # save history file
243 | print(" + Saving History ... ... ")
244 | hist_path = os.path.join(self.log_dir, 'history.txt')
245 | with open(hist_path, 'w') as f:
246 | f.write(str(self.history))
247 |
248 | def _train_epoch_classmix(self, epoch):
249 | ave_total_loss = AverageMeter()
250 |
251 | scaler = grad_scaler.GradScaler()
252 | self.evaluator.reset()
253 |
254 | # set model mode
255 | self.model.train()
256 |
257 | train_dataloader = iter(self.train_data_loader)
258 | unsupervised_dataloader_0 = iter(self.unsupervised_train_loader_0)
259 | unsupervised_dataloader_1 = iter(self.unsupervised_train_loader_1)
260 |
261 | max_samples = max(len(self.train_data_loader), len(self.unsupervised_train_loader_0)) * self.config.batch_size
262 | niters_per_epoch = max_samples // self.config.batch_size
263 | bar_format = '{desc}[{elapsed}<{remaining},{rate_fmt}]'
264 | pbar = tqdm(range(niters_per_epoch), file=sys.stdout, bar_format=bar_format)
265 | for idx in pbar:
266 | train_minibatch = train_dataloader.next()
267 | imgs = train_minibatch[0].to(self.device, non_blocking=True)
268 | gts = train_minibatch[1].to(self.device, non_blocking=True)
269 |
270 | self.optimizer_1.zero_grad()
271 | self.optimizer_2.zero_grad()
272 |
273 | cps_loss = 0.0
274 | if epoch > self.config.warmup_period:
275 | unsup_minibatch_0 = unsupervised_dataloader_0.next()
276 | unsup_minibatch_1 = unsupervised_dataloader_1.next()
277 | unsup_imgs_0 = unsup_minibatch_0[0].to(self.device, non_blocking=True)
278 | unsup_imgs_1 = unsup_minibatch_1[0].to(self.device, non_blocking=True)
279 |
280 | with torch.no_grad():
281 | # Estimate the pseudo-label with branch#1 & supervise branch#2
282 | logits_u0_tea_1 = self.model(unsup_imgs_0, step=1)
283 | prob_u0_tea_1 = torch.sigmoid(logits_u0_tea_1).detach()
284 |
285 | if self.config.use_mix:
286 | logits_u1_tea_1 = self.model(unsup_imgs_1, step=1)
287 | prob_u1_tea_1 = torch.sigmoid(logits_u1_tea_1).detach()
288 | else:
289 | prob_u1_tea_1 = torch.zeros_like(prob_u0_tea_1)
290 |
291 | # Estimate the pseudo-label with branch#2 & supervise branch#1
292 | logits_u0_tea_2 = self.model(unsup_imgs_0, step=2)
293 | prob_u0_tea_2 = torch.sigmoid(logits_u0_tea_2).detach()
294 |
295 | if self.config.use_mix:
296 | logits_u1_tea_2 = self.model(unsup_imgs_1, step=2)
297 | prob_u1_tea_2 = torch.sigmoid(logits_u1_tea_2).detach()
298 | else:
299 | prob_u1_tea_2 = torch.zeros_like(prob_u0_tea_2)
300 |
301 | ps_u1_tea_label_1 = torch.argmax(prob_u1_tea_1, dim=1)
302 |
303 | batch_mix_masks = torch.zeros_like(ps_u1_tea_label_1)
304 | for img_i in range(unsup_imgs_0.shape[0]):
305 | classes = torch.unique(ps_u1_tea_label_1[img_i], sorted=True)
306 | nclasses = classes.shape[0]
307 | if nclasses > 2:
308 | classes = classes[torch.Tensor(
309 | np.random.choice(nclasses, int((nclasses - nclasses % 2) / 2), replace=False)).long()]
310 | elif nclasses == 2:
311 | classes = classes[1].unsqueeze(0)
312 | elif nclasses == 1:
313 | continue
314 | batch_mix_masks[img_i] = mask_gen.generate_class_mask(ps_u1_tea_label_1[img_i], classes)
315 |
316 | batch_mix_masks = batch_mix_masks.unsqueeze(1)
317 | unsup_imgs_mixed = unsup_imgs_0 * (1 - batch_mix_masks) + unsup_imgs_1 * batch_mix_masks
318 |
319 | # Mix teacher predictions using same mask
320 | # the mask pixels are either 1 or 0
321 | prob_cons_tea_1 = prob_u0_tea_1 * (1 - batch_mix_masks) + prob_u1_tea_1 * batch_mix_masks
322 | prob_cons_tea_2 = prob_u0_tea_2 * (1 - batch_mix_masks) + prob_u1_tea_2 * batch_mix_masks
323 |
324 | ps_label_1 = torch.argmax(prob_cons_tea_1, dim=1)
325 | ps_label_2 = torch.argmax(prob_cons_tea_2, dim=1)
326 |
327 | with autocast():
328 | if epoch > self.config.warmup_period: # warmup
329 | # Get student#1 prediction for mixed image
330 | logits_cons_stu_1 = self.model(unsup_imgs_mixed, step=1)
331 |
332 | # Get student#2 prediction for mixed image
333 | logits_cons_stu_2 = self.model(unsup_imgs_mixed, step=2)
334 |
335 | ps_label_1 = ps_label_1.long()
336 | ps_label_2 = ps_label_2.long()
337 |
338 | cps_loss = self.loss(logits_cons_stu_1, ps_label_2) + self.loss(logits_cons_stu_2, ps_label_1)
339 |
340 | # empirically set coefficient to 1.0
341 | cps_loss = cps_loss * 1.0
342 |
343 | # sup loss
344 | sup_logits_l = self.model(imgs, step=1)
345 | sup_logits_r = self.model(imgs, step=2)
346 |
347 | gts = gts.long()
348 |
349 | loss_sup_l = self.loss(sup_logits_l, gts)
350 | loss_sup_r = self.loss(sup_logits_r, gts)
351 |
352 | loss = loss_sup_l + loss_sup_r + cps_loss
353 |
354 | scaler.scale(loss).backward()
355 | scaler.step(self.optimizer_1)
356 | scaler.step(self.optimizer_2)
357 | scaler.update()
358 |
359 | pred = torch.argmax(sup_logits_l, dim=1)
360 | pred = pred.view(-1).long()
361 |
362 | label = gts.view(-1).long()
363 |
364 | # Add batch sample into evaluator
365 | self.evaluator.add_batch(label, pred)
366 | ave_total_loss.update(loss.item())
367 |
368 | if self.config.use_one_cycle_lr:
369 | # lr update
370 | if self.lr_scheduler_1 is not None:
371 | self.lr_scheduler_1.step()
372 | for param_group in self.optimizer_1.param_groups:
373 | self.current_lr = param_group['lr']
374 | if self.lr_scheduler_2 is not None:
375 | self.lr_scheduler_2.step()
376 | for param_group in self.optimizer_2.param_groups:
377 | self.current_lr = param_group['lr']
378 |
379 | acc = self.evaluator.Pixel_Accuracy().cpu().detach().numpy()
380 | miou = self.evaluator.Mean_Intersection_over_Union().cpu().detach().numpy()
381 | TP, FP, FN, TN = self.evaluator.get_base_value()
382 | iou = self.evaluator.get_iou().cpu().detach().numpy()
383 | prec = self.evaluator.Pixel_Precision_Class().cpu().detach().numpy()
384 | recall = self.evaluator.Pixel_Recall_Class().cpu().detach().numpy()
385 | f1_score = self.evaluator.Pixel_F1_score_Class().cpu().detach().numpy()
386 |
387 | # train log and return
388 | self.history['train']['epoch'].append(epoch)
389 | self.history['train']['loss'].append(ave_total_loss.average())
390 | self.history['train']['acc'].append(acc.tolist())
391 | self.history['train']['miou'].append(miou.tolist())
392 |
393 | self.history['train']['prec'].append(prec[1])
394 | self.history['train']['recall'].append(recall[1])
395 | self.history['train']['f_score'].append(f1_score[1])
396 |
397 | if self.config.nb_classes == 2:
398 | miou = iou[1]
399 |
400 | return {
401 | 'epoch': epoch,
402 | 'loss': ave_total_loss.average(),
403 | 'acc': acc,
404 | 'miou': miou,
405 | 'prec': prec[1],
406 | 'recall': recall[1],
407 | 'f_score': f1_score[1],
408 | }
409 |
410 | def _eval_epoch(self, epoch):
411 | ave_total_loss = AverageMeter()
412 | self.evaluator.reset()
413 | # set model mode
414 | self.model.eval()
415 |
416 | with torch.no_grad():
417 | for steps, (imgs, gts, filename) in enumerate(self.valid_data_loder, start=1):
418 | imgs = imgs.to(self.device, non_blocking=True)
419 | gts = gts.to(self.device, non_blocking=True)
420 |
421 | # sup loss
422 | sup_logits_l = self.model(imgs, step=1)
423 | gts = gts.long()
424 |
425 | loss = self.loss(sup_logits_l, gts)
426 |
427 | pred = torch.argmax(sup_logits_l, dim=1)
428 | pred = pred.view(-1).long()
429 | label = gts.view(-1).long()
430 |
431 | # Add batch sample into evaluator
432 | self.evaluator.add_batch(label, pred)
433 |
434 | # update ave metrics
435 | ave_total_loss.update(loss.item())
436 |
437 | # calculate metrics
438 | acc = self.evaluator.Pixel_Accuracy().cpu().detach().numpy()
439 | miou = self.evaluator.Mean_Intersection_over_Union().cpu().detach().numpy()
440 | TP, FP, FN, TN = self.evaluator.get_base_value()
441 | iou = self.evaluator.get_iou().cpu().detach().numpy()
442 | prec = self.evaluator.Pixel_Precision_Class().cpu().detach().numpy()
443 | recall = self.evaluator.Pixel_Recall_Class().cpu().detach().numpy()
444 | f1_score = self.evaluator.Pixel_F1_score_Class().cpu().detach().numpy()
445 |
446 | print('Epoch {} validation done !'.format(epoch))
447 | print('lr: {:.8f}\n'
448 | 'MIoU: {:6.4f}, Accuracy: {:6.4f}, Loss: {:.6f},\n'
449 | 'Precision: {:6.4f}, Recall: {:6.4f}, F_Score: {:6.4f}'
450 | .format(self.current_lr,
451 | miou, acc, ave_total_loss.average(),
452 | prec[1], recall[1], f1_score[1]))
453 |
454 | self.history['valid']['epoch'].append(epoch)
455 | self.history['valid']['loss'].append(ave_total_loss.average())
456 | self.history['valid']['acc'].append(acc.tolist())
457 | self.history['valid']['miou'].append(miou.tolist())
458 | self.history['valid']['prec'].append(prec[1])
459 | self.history['valid']['recall'].append(recall[1])
460 | self.history['valid']['f_score'].append(f1_score[1])
461 |
462 | if self.config.nb_classes == 2:
463 | miou = iou[1]
464 |
465 | # validation log and return
466 | return {
467 | 'epoch': epoch,
468 | 'val_Loss': ave_total_loss.average(),
469 | 'val_Accuracy': acc,
470 | 'val_MIoU': miou,
471 | 'val_Precision': prec[1],
472 | 'val_Recall': recall[1],
473 | 'val_F_score': f1_score[1],
474 |
475 | }
476 |
477 | def _save_ckpt(self, epoch, best):
478 | # save model ckpt
479 | state = {
480 | 'epoch': epoch,
481 | 'arch': str(self.model),
482 | 'history': self.history,
483 | 'state_dict': self.model.state_dict(),
484 | 'monitor_best': self.monitor_best,
485 | }
486 | filename = os.path.join(self.checkpoint_dir, 'checkpoint-ep{}.pth'.format(epoch))
487 | best_filename = os.path.join(self.checkpoint_dir, 'checkpoint-best.pth')
488 | last_best_filename = os.path.join(self.checkpoint_dir,
489 | 'checkpoint-ep{}-iou{:.4f}.pth'.format(epoch, self.monitor_iou))
490 | if best:
491 | # copy the last best model
492 | if os.path.exists(best_filename):
493 | shutil.copyfile(best_filename, last_best_filename)
494 | print(" + Saving Best Checkpoint : Epoch {} path: {} ... ".format(epoch, best_filename))
495 | torch.save(state, best_filename)
496 | else:
497 | start_save_epochs = 1
498 | if epoch > start_save_epochs:
499 | print(" + After {} epochs, saving Checkpoint per {} epochs, path: {} ... ".format(start_save_epochs,
500 | self.save_period,
501 | filename))
502 | torch.save(state, filename)
503 |
504 | def _resume_ckpt(self, resume_file):
505 | resume_path = os.path.join(resume_file)
506 |
507 | print(" + Loading Checkpoint: {} ... ".format(resume_path))
508 | checkpoint = torch.load(resume_path)
509 | self.monitor_best = 0.0
510 |
511 | self.model.load_state_dict(checkpoint['state_dict'], strict=True)
512 | print(" + Model State Loaded ! :D ")
513 | print(" + Optimizer State Loaded ! :D ")
514 | print(" + Checkpoint file: '{}' , Start epoch {} Loaded !\n"
515 | " + Prepare to run ! ! !"
516 | .format(resume_path, self.start_epoch))
517 |
--------------------------------------------------------------------------------
/examples/train_unsup_image.txt:
--------------------------------------------------------------------------------
1 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_000_005.tif
2 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_000_002.tif
3 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_005_002.tif
4 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_005_006.tif
5 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_005_006.tif
6 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_003_002.tif
7 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_006_006.tif
8 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_000_002.tif
9 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_001_000.tif
10 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_002_001.tif
11 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_007_006.tif
12 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_001_001.tif
13 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_006_002.tif
14 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_007_003.tif
15 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_000_004.tif
16 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_001_003.tif
17 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_007_000.tif
18 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_006_003.tif
19 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_000_003.tif
20 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_006_006.tif
21 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_008_007.tif
22 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_007_001.tif
23 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_003_006.tif
24 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_002_004.tif
25 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_000_004.tif
26 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_008_000.tif
27 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_000_009.tif
28 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_007_001.tif
29 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_003_006.tif
30 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_000_002.tif
31 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_006_000.tif
32 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_010_005.tif
33 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_002_002.tif
34 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_008_002.tif
35 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_002_006.tif
36 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_003_006.tif
37 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_007_005.tif
38 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_007_003.tif
39 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_008_001.tif
40 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_008_000.tif
41 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_001_001.tif
42 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_001_003.tif
43 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_008_006.tif
44 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_005_004.tif
45 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_004_004.tif
46 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_002_003.tif
47 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_007_006.tif
48 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_008_005.tif
49 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_003_001.tif
50 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_000_009.tif
51 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_008_005.tif
52 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_002_001.tif
53 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_003_004.tif
54 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_007_004.tif
55 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_004_002.tif
56 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_000_006.tif
57 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_003_002.tif
58 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_000_006.tif
59 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_002_001.tif
60 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_007_001.tif
61 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_006_009.tif
62 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_003_002.tif
63 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_002_005.tif
64 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_006_002.tif
65 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_003_000.tif
66 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_007_004.tif
67 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_000_002.tif
68 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_000_002.tif
69 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_005_002.tif
70 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_005_002.tif
71 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_000_001.tif
72 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_004_001.tif
73 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_003_001.tif
74 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_003_000.tif
75 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_007_001.tif
76 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_001_006.tif
77 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_000_004.tif
78 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_003_006.tif
79 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_003_005.tif
80 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_001_004.tif
81 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_002_002.tif
82 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_003_003.tif
83 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_000_001.tif
84 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_005_007.tif
85 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_008_004.tif
86 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_006_003.tif
87 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_003_005.tif
88 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_002_001.tif
89 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_005_000.tif
90 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_003_001.tif
91 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_000_004.tif
92 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_002_006.tif
93 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_006_003.tif
94 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_003_009.tif
95 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_002_003.tif
96 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_005_005.tif
97 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_003_005.tif
98 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_003_007.tif
99 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_002_005.tif
100 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_005_006.tif
101 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_003_003.tif
102 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_001_008.tif
103 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_002_006.tif
104 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_000_000.tif
105 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_008_006.tif
106 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_000_003.tif
107 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_000_006.tif
108 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_007_001.tif
109 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_000_004.tif
110 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_006_003.tif
111 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_008_005.tif
112 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_005_004.tif
113 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_002_003.tif
114 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_005_006.tif
115 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_001_002.tif
116 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_005_004.tif
117 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_002_008.tif
118 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_001_001.tif
119 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_002_003.tif
120 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_003_004.tif
121 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_002_006.tif
122 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_001_006.tif
123 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_004_002.tif
124 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_002_000.tif
125 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_005_005.tif
126 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_008_000.tif
127 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_008_004.tif
128 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_002_002.tif
129 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_001_005.tif
130 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_003_005.tif
131 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_004_006.tif
132 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_004_002.tif
133 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_008_006.tif
134 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_000_000.tif
135 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_001_004.tif
136 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_001_010.tif
137 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_004_003.tif
138 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_002_005.tif
139 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_004_000.tif
140 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_002_005.tif
141 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_005_000.tif
142 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_006_001.tif
143 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_008_005.tif
144 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_000_001.tif
145 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_010_004.tif
146 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_002_001.tif
147 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_001_005.tif
148 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_000_000.tif
149 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_000_005.tif
150 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_008_002.tif
151 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_001_002.tif
152 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_003_007.tif
153 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_003_000.tif
154 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_006_006.tif
155 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_002_005.tif
156 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_006_003.tif
157 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_007_006.tif
158 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_003_003.tif
159 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_006_003.tif
160 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_006_000.tif
161 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_008_001.tif
162 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_004_005.tif
163 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_001_003.tif
164 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_007_003.tif
165 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_003_004.tif
166 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_005_004.tif
167 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_003_001.tif
168 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_008_002.tif
169 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_004_003.tif
170 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_000_007.tif
171 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_005_003.tif
172 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_007_003.tif
173 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_004_005.tif
174 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_009_004.tif
175 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_001_005.tif
176 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_001_006.tif
177 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_001_000.tif
178 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_008_003.tif
179 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_003_001.tif
180 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_008_004.tif
181 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_003_004.tif
182 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_008_002.tif
183 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_002_002.tif
184 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_007_005.tif
185 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_008_005.tif
186 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_002_003.tif
187 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_002_004.tif
188 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_001_009.tif
189 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_006_001.tif
190 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_002_004.tif
191 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_001_002.tif
192 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_007_008.tif
193 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_000_006.tif
194 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_000_001.tif
195 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_004_004.tif
196 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_003_002.tif
197 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_008_000.tif
198 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_000_006.tif
199 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_003_008.tif
200 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_007_002.tif
201 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_001_002.tif
202 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_001_003.tif
203 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_002_004.tif
204 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_005_003.tif
205 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_002_006.tif
206 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_002_007.tif
207 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_007_002.tif
208 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_004_007.tif
209 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_007_004.tif
210 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_009_003.tif
211 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_007_003.tif
212 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_001_005.tif
213 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_003_003.tif
214 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_005_003.tif
215 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_006_004.tif
216 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_004_000.tif
217 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_001_007.tif
218 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_004_003.tif
219 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_010_003.tif
220 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_000_002.tif
221 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_003_001.tif
222 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_000_003.tif
223 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_006_000.tif
224 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_008_003.tif
225 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_000_008.tif
226 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_000_001.tif
227 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_006_005.tif
228 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_003_008.tif
229 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_003_000.tif
230 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_008_003.tif
231 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_004_002.tif
232 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_001_009.tif
233 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_005_006.tif
234 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_010_002.tif
235 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_006_000.tif
236 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_005_000.tif
237 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_000_005.tif
238 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_007_003.tif
239 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_006_005.tif
240 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_006_001.tif
241 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_004_000.tif
242 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_007_004.tif
243 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_000_003.tif
244 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_001_000.tif
245 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_002_002.tif
246 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_004_004.tif
247 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_001_006.tif
248 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_006_002.tif
249 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_001_004.tif
250 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_003_005.tif
251 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_004_004.tif
252 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_007_006.tif
253 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_000_007.tif
254 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_002_001.tif
255 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_002_001.tif
256 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_003_004.tif
257 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_008_005.tif
258 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_005_000.tif
259 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_008_000.tif
260 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_005_008.tif
261 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_004_002.tif
262 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_007_000.tif
263 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_007_009.tif
264 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_006_006.tif
265 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_007_000.tif
266 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_005_001.tif
267 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_005_001.tif
268 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_005_001.tif
269 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_004_003.tif
270 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_000_000.tif
271 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_004_005.tif
272 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_000_005.tif
273 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_001_000.tif
274 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_003_003.tif
275 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_006_002.tif
276 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_005_002.tif
277 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_007_006.tif
278 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_002_003.tif
279 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_000_001.tif
280 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_007_002.tif
281 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_002_007.tif
282 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_001_002.tif
283 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_004_000.tif
284 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_008_002.tif
285 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_005_001.tif
286 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_008_001.tif
287 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_004_005.tif
288 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_005_001.tif
289 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_000_002.tif
290 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_001_005.tif
291 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_001_005.tif
292 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_009_000.tif
293 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_007_000.tif
294 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_004_006.tif
295 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_003_004.tif
296 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_005_001.tif
297 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_002_005.tif
298 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_008_003.tif
299 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_003_002.tif
300 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_007_001.tif
301 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_006_004.tif
302 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_003_004.tif
303 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_004_006.tif
304 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_005_000.tif
305 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_000_001.tif
306 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_003_005.tif
307 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_005_002.tif
308 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_001_000.tif
309 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_004_001.tif
310 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_001_006.tif
311 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_008_000.tif
312 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_003_002.tif
313 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_005_003.tif
314 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_002_000.tif
315 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_007_002.tif
316 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_005_007.tif
317 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_000_000.tif
318 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_007_003.tif
319 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_004_002.tif
320 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_008_004.tif
321 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_005_004.tif
322 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_004_002.tif
323 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_008_001.tif
324 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_006_002.tif
325 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_005_001.tif
326 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_006_001.tif
327 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_004_006.tif
328 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_007_005.tif
329 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_004_000.tif
330 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_004_004.tif
331 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_003_003.tif
332 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_002_004.tif
333 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_008_003.tif
334 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_006_003.tif
335 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_003_005.tif
336 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_003_006.tif
337 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_006_001.tif
338 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_000_005.tif
339 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_006_007.tif
340 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_003_006.tif
341 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_003_004.tif
342 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_008_000.tif
343 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_001_006.tif
344 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_001_006.tif
345 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_006_006.tif
346 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_009_006.tif
347 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_005_000.tif
348 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_003_000.tif
349 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_007_005.tif
350 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_008_001.tif
351 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_000_002.tif
352 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_000_003.tif
353 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_006_008.tif
354 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_006_004.tif
355 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_005_003.tif
356 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_007_006.tif
357 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_006_005.tif
358 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_004_005.tif
359 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_004_001.tif
360 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_005_005.tif
361 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_002_006.tif
362 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_008_004.tif
363 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_007_005.tif
364 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_002_002.tif
365 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_004_005.tif
366 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_001_002.tif
367 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_007_001.tif
368 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_001_001.tif
369 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_001_000.tif
370 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_003_007.tif
371 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_004_000.tif
372 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_000_001.tif
373 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_004_002.tif
374 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_005_002.tif
375 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_004_008.tif
376 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_006_004.tif
377 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_001_007.tif
378 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_006_005.tif
379 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_008_003.tif
380 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_000_004.tif
381 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_006_000.tif
382 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_002_000.tif
383 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_005_005.tif
384 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_001_008.tif
385 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_006_004.tif
386 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_002_002.tif
387 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_005_004.tif
388 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_007_000.tif
389 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_000_000.tif
390 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_003_010.tif
391 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_008_000.tif
392 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_002_005.tif
393 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_007_005.tif
394 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_002_005.tif
395 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_001_006.tif
396 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_004_006.tif
397 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_000_005.tif
398 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_002_000.tif
399 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_004_001.tif
400 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_003_002.tif
401 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_002_010.tif
402 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_001_004.tif
403 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_003_004.tif
404 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_001_001.tif
405 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_000_004.tif
406 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_003_004.tif
407 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_000_002.tif
408 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_000_000.tif
409 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_006_005.tif
410 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_003_003.tif
411 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_006_002.tif
412 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_000_001.tif
413 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_008_004.tif
414 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_004_004.tif
415 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_001_003.tif
416 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_008_001.tif
417 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_006_004.tif
418 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_000_000.tif
419 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_003_002.tif
420 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_006_006.tif
421 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_002_004.tif
422 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_000_006.tif
423 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_003_004.tif
424 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_004_009.tif
425 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_002_009.tif
426 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_002_005.tif
427 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_002_006.tif
428 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_002_003.tif
429 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_002_008.tif
430 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_000_004.tif
431 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_004_002.tif
432 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_009_005.tif
433 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_002_000.tif
434 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_000_002.tif
435 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_001_006.tif
436 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_006_002.tif
437 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_008_002.tif
438 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_000_006.tif
439 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_004_003.tif
440 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_004_002.tif
441 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_005_005.tif
442 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_008_006.tif
443 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_006_005.tif
444 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_005_006.tif
445 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_003_001.tif
446 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_003_003.tif
447 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_005_006.tif
448 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_005_009.tif
449 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_003_006.tif
450 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_002_004.tif
451 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_010_001.tif
452 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_007_000.tif
453 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_001_004.tif
454 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_002_002.tif
455 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_005_005.tif
456 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_007_000.tif
457 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_000_006.tif
458 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_005_004.tif
459 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_004_000.tif
460 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_004_006.tif
461 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_005_006.tif
462 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_004_001.tif
463 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_007_002.tif
464 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_005_005.tif
465 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_004_004.tif
466 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_000_003.tif
467 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_006_001.tif
468 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_003_003.tif
469 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_001_000.tif
470 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_001_003.tif
471 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_000_001.tif
472 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_005_004.tif
473 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_004_004.tif
474 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_005_010.tif
475 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_000_005.tif
476 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_002_005.tif
477 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_005_001.tif
478 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_006_003.tif
479 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_002_001.tif
480 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_004_000.tif
481 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_004_006.tif
482 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_000_008.tif
483 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_006_005.tif
484 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_003_005.tif
485 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_002_002.tif
486 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_008_003.tif
487 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_001_000.tif
488 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_001_002.tif
489 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_001_004.tif
490 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_000_006.tif
491 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_001_005.tif
492 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_001_004.tif
493 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_001_007.tif
494 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_004_005.tif
495 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_003_001.tif
496 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_001_006.tif
497 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_003_006.tif
498 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_005_003.tif
499 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_005_004.tif
500 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_003_005.tif
501 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_002_009.tif
502 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_004_000.tif
503 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_002_003.tif
504 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_007_002.tif
505 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_008_001.tif
506 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_007_007.tif
507 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_006_001.tif
508 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_006_000.tif
509 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_002_001.tif
510 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_005_002.tif
511 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_008_006.tif
512 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_002_004.tif
513 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_008_009.tif
514 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_008_003.tif
515 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_002_004.tif
516 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_004_001.tif
517 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_001_003.tif
518 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_004_003.tif
519 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_001_003.tif
520 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_004_007.tif
521 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_006_000.tif
522 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_008_008.tif
523 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_003_003.tif
524 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_001_003.tif
525 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_001_000.tif
526 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_007_006.tif
527 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_001_004.tif
528 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_006_005.tif
529 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_000_005.tif
530 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_005_006.tif
531 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_000_005.tif
532 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_004_009.tif
533 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_006_000.tif
534 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_002_002.tif
535 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_006_006.tif
536 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_010_006.tif
537 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_005_000.tif
538 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_003_000.tif
539 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_008_006.tif
540 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_007_004.tif
541 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_001_005.tif
542 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_000_002.tif
543 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_000_005.tif
544 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_004_004.tif
545 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_003_001.tif
546 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_002_005.tif
547 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_005_008.tif
548 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_001_001.tif
549 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_004_001.tif
550 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_005_004.tif
551 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_001_005.tif
552 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_001_002.tif
553 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_008_006.tif
554 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_008_004.tif
555 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_008_004.tif
556 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_007_001.tif
557 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_004_001.tif
558 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_001_003.tif
559 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_005_005.tif
560 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_008_006.tif
561 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_001_001.tif
562 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_007_006.tif
563 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_005_000.tif
564 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_005_009.tif
565 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_000_000.tif
566 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_004_008.tif
567 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_000_003.tif
568 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_000_004.tif
569 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_000_006.tif
570 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_008_002.tif
571 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_004_006.tif
572 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_005_003.tif
573 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_000_010.tif
574 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_001_005.tif
575 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_004_005.tif
576 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_007_004.tif
577 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_007_000.tif
578 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_003_001.tif
579 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_003_000.tif
580 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_003_005.tif
581 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_003_006.tif
582 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_003_000.tif
583 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_001_002.tif
584 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_003_002.tif
585 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_001_001.tif
586 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_006_005.tif
587 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_003_006.tif
588 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_003_001.tif
589 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_004_003.tif
590 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_000_000.tif
591 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_005_005.tif
592 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_008_001.tif
593 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_005_006.tif
594 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_005_000.tif
595 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_007_003.tif
596 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_009_002.tif
597 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_005_003.tif
598 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_005_003.tif
599 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_000_004.tif
600 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_003_002.tif
601 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_006_006.tif
602 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_005_002.tif
603 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_004_010.tif
604 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_000_003.tif
605 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_002_000.tif
606 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_008_005.tif
607 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_001_005.tif
608 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_005_002.tif
609 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_000_003.tif
610 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_000_001.tif
611 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_008_002.tif
612 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_006_004.tif
613 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_004_004.tif
614 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_001_006.tif
615 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_002_003.tif
616 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_007_005.tif
617 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_007_002.tif
618 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_002_003.tif
619 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_009_001.tif
620 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_002_001.tif
621 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_004_006.tif
622 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_000_003.tif
623 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_002_006.tif
624 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_002_007.tif
625 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_006_000.tif
626 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_005_002.tif
627 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_001_000.tif
628 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_004_003.tif
629 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_006_003.tif
630 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_002_006.tif
631 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_006_002.tif
632 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_001_004.tif
633 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_001_004.tif
634 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_003_006.tif
635 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_000_003.tif
636 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_002_003.tif
637 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_002_000.tif
638 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_005_001.tif
639 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_001_002.tif
640 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_006_001.tif
641 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_002_004.tif
642 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_001_000.tif
643 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_003_000.tif
644 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_004_001.tif
645 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_004_001.tif
646 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_001_001.tif
647 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_006_001.tif
648 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_007_004.tif
649 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_003_005.tif
650 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_004_000.tif
651 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_002_004.tif
652 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_002_006.tif
653 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_005_005.tif
654 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_002_000.tif
655 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_003_000.tif
656 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_005_000.tif
657 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_004_005.tif
658 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_005_003.tif
659 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_010_000.tif
660 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area13_001_001.tif
661 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_006_004.tif
662 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_000_007.tif
663 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_003_009.tif
664 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_007_005.tif
665 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_001_001.tif
666 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area26_004_006.tif
667 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area32_002_000.tif
668 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_004_003.tif
669 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area5_006_002.tif
670 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_007_004.tif
671 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area7_000_006.tif
672 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area3_006_004.tif
673 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area37_001_004.tif
674 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_008_005.tif
675 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area23_004_003.tif
676 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area17_002_000.tif
677 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area1_002_000.tif
678 | D:\ISPRS\Vaihingen\image\top_mosaic_09cm_area21_003_003.tif
679 |
--------------------------------------------------------------------------------