Spaces:
Runtime error
Runtime error
sunshangquan
commited on
Commit
•
f518bf0
1
Parent(s):
629756b
commit from ssq
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- .gitignore +4 -0
- Allweather/Options/Allweather_Histoformer.yml +155 -0
- Allweather/compute_psnr.py +136 -0
- Allweather/pretrained_models/README.md +1 -0
- Allweather/test_histoformer.py +89 -0
- Allweather/util.py +86 -0
- app.py +7 -7
- basicsr/__pycache__/version.cpython-38.pyc +0 -0
- basicsr/data/__init__.py +126 -0
- basicsr/data/__pycache__/__init__.cpython-38.pyc +0 -0
- basicsr/data/__pycache__/data_sampler.cpython-38.pyc +0 -0
- basicsr/data/__pycache__/data_util.cpython-38.pyc +0 -0
- basicsr/data/__pycache__/ffhq_dataset.cpython-38.pyc +0 -0
- basicsr/data/__pycache__/paired_image_dataset.cpython-38.pyc +0 -0
- basicsr/data/__pycache__/prefetch_dataloader.cpython-38.pyc +0 -0
- basicsr/data/__pycache__/reds_dataset.cpython-38.pyc +0 -0
- basicsr/data/__pycache__/single_image_dataset.cpython-38.pyc +0 -0
- basicsr/data/__pycache__/transforms.cpython-38.pyc +0 -0
- basicsr/data/__pycache__/video_test_dataset.cpython-38.pyc +0 -0
- basicsr/data/__pycache__/vimeo90k_dataset.cpython-38.pyc +0 -0
- basicsr/data/data_sampler.py +49 -0
- basicsr/data/data_util.py +390 -0
- basicsr/data/meta_info/meta_info_DIV2K800sub_GT.txt +0 -0
- basicsr/data/meta_info/meta_info_REDS4_test_GT.txt +4 -0
- basicsr/data/meta_info/meta_info_REDS_GT.txt +270 -0
- basicsr/data/meta_info/meta_info_REDSofficial4_test_GT.txt +4 -0
- basicsr/data/meta_info/meta_info_REDSval_official_test_GT.txt +30 -0
- basicsr/data/meta_info/meta_info_Vimeo90K_test_GT.txt +0 -0
- basicsr/data/meta_info/meta_info_Vimeo90K_test_fast_GT.txt +1225 -0
- basicsr/data/meta_info/meta_info_Vimeo90K_test_medium_GT.txt +0 -0
- basicsr/data/meta_info/meta_info_Vimeo90K_test_slow_GT.txt +1613 -0
- basicsr/data/meta_info/meta_info_Vimeo90K_train_GT.txt +0 -0
- basicsr/data/paired_image_dataset.py +374 -0
- basicsr/data/prefetch_dataloader.py +126 -0
- basicsr/data/single_image_dataset.py +67 -0
- basicsr/data/transforms.py +275 -0
- basicsr/data/video_test_dataset.py +325 -0
- basicsr/metrics/__init__.py +4 -0
- basicsr/metrics/__pycache__/__init__.cpython-38.pyc +0 -0
- basicsr/metrics/__pycache__/metric_util.cpython-38.pyc +0 -0
- basicsr/metrics/__pycache__/niqe.cpython-38.pyc +0 -0
- basicsr/metrics/__pycache__/psnr_ssim.cpython-38.pyc +0 -0
- basicsr/metrics/fid.py +102 -0
- basicsr/metrics/metric_util.py +47 -0
- basicsr/metrics/niqe.py +205 -0
- basicsr/metrics/niqe_pris_params.npz +0 -0
- basicsr/metrics/psnr_ssim.py +303 -0
- basicsr/models/__init__.py +42 -0
- basicsr/models/__pycache__/__init__.cpython-38.pyc +0 -0
- basicsr/models/__pycache__/base_model.cpython-38.pyc +0 -0
.gitignore
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# script
|
2 |
+
git.sh
|
3 |
+
Allweather/pretrained_models/net_g_best.pth
|
4 |
+
Allweather/pretrained_models/net_g_real.pth
|
Allweather/Options/Allweather_Histoformer.yml
ADDED
@@ -0,0 +1,155 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# general settings
|
2 |
+
name: Allweather_Histotormer
|
3 |
+
model_type: ImageCleanModel
|
4 |
+
scale: 1
|
5 |
+
num_gpu: 4 # set num_gpu: 0 for cpu mode
|
6 |
+
manual_seed: 100
|
7 |
+
|
8 |
+
# dataset and data loader settings
|
9 |
+
datasets:
|
10 |
+
train:
|
11 |
+
name: TrainSet
|
12 |
+
type: Dataset_PairedImage
|
13 |
+
dataroot_gt: /home1/ssq/data/allweather/gt/
|
14 |
+
dataroot_lq: /home1/ssq/data/allweather/input/
|
15 |
+
geometric_augs: true
|
16 |
+
|
17 |
+
filename_tmpl: '{}'
|
18 |
+
io_backend:
|
19 |
+
type: disk
|
20 |
+
|
21 |
+
# data loader
|
22 |
+
use_shuffle: true
|
23 |
+
num_worker_per_gpu: 8
|
24 |
+
batch_size_per_gpu: 8
|
25 |
+
|
26 |
+
### -------------Progressive training--------------------------
|
27 |
+
mini_batch_sizes: [8,5,2,1,1] # Batch size per gpu
|
28 |
+
iters: [92000,84000,56000,36000,32000]
|
29 |
+
gt_size: 362 # Max patch size for progressive training
|
30 |
+
gt_sizes: [128,160,256,320,362] # Patch sizes for progressive training.
|
31 |
+
### ------------------------------------------------------------
|
32 |
+
|
33 |
+
### ------- Training on single fixed-patch size 128x128---------
|
34 |
+
# mini_batch_sizes: [8]
|
35 |
+
# iters: [300000]
|
36 |
+
# gt_size: 128
|
37 |
+
# gt_sizes: [128]
|
38 |
+
### ------------------------------------------------------------
|
39 |
+
|
40 |
+
dataset_enlarge_ratio: 1
|
41 |
+
prefetch_mode: ~
|
42 |
+
|
43 |
+
val_snow_s:
|
44 |
+
name: ValSet_Snow100K-S
|
45 |
+
type: Dataset_PairedImage
|
46 |
+
dataroot_gt: /home1/ssq/data/allweather/test/Snow100K-S/gt/
|
47 |
+
dataroot_lq: /home1/ssq/data/allweather/test/Snow100K-S/synthetic/
|
48 |
+
io_backend:
|
49 |
+
type: disk
|
50 |
+
val_snow_l:
|
51 |
+
name: ValSet_Snow100K-L
|
52 |
+
type: Dataset_PairedImage
|
53 |
+
dataroot_gt: /home1/ssq/data/allweather/test/Snow100K-L/gt/
|
54 |
+
dataroot_lq: /home1/ssq/data/allweather/test/Snow100K-L/synthetic/
|
55 |
+
io_backend:
|
56 |
+
type: disk
|
57 |
+
val_test1:
|
58 |
+
name: ValSet_Test1
|
59 |
+
type: Dataset_PairedImage
|
60 |
+
dataroot_gt: /home1/ssq/data/allweather/test/Test1/gt/
|
61 |
+
dataroot_lq: /home1/ssq/data/allweather/test/Test1/input/
|
62 |
+
io_backend:
|
63 |
+
type: disk
|
64 |
+
val_raindrop:
|
65 |
+
name: ValSet_RainDrop
|
66 |
+
type: Dataset_PairedImage
|
67 |
+
dataroot_gt: /home1/ssq/data/allweather/test/RainDrop/gt/
|
68 |
+
dataroot_lq: /home1/ssq/data/allweather/test/RainDrop/input/
|
69 |
+
io_backend:
|
70 |
+
type: disk
|
71 |
+
|
72 |
+
|
73 |
+
# network structures
|
74 |
+
network_g:
|
75 |
+
type: Histoformer
|
76 |
+
inp_channels: 3
|
77 |
+
out_channels: 3
|
78 |
+
dim: 36
|
79 |
+
num_blocks: [4,4,6,8]
|
80 |
+
num_refinement_blocks: 4
|
81 |
+
heads: [1,2,4,8]
|
82 |
+
ffn_expansion_factor: 2.667
|
83 |
+
bias: False
|
84 |
+
LayerNorm_type: WithBias
|
85 |
+
dual_pixel_task: False
|
86 |
+
|
87 |
+
|
88 |
+
# path
|
89 |
+
path:
|
90 |
+
pretrain_network_g: ~
|
91 |
+
strict_load_g: true
|
92 |
+
resume_state: ~
|
93 |
+
|
94 |
+
# training settings
|
95 |
+
train:
|
96 |
+
total_iter: 300000
|
97 |
+
warmup_iter: -1 # no warm up
|
98 |
+
use_grad_clip: true
|
99 |
+
|
100 |
+
# Split 300k iterations into two cycles.
|
101 |
+
# 1st cycle: fixed 3e-4 LR for 92k iters.
|
102 |
+
# 2nd cycle: cosine annealing (3e-4 to 1e-6) for 208k iters.
|
103 |
+
scheduler:
|
104 |
+
type: CosineAnnealingRestartCyclicLR # ReduceLROnPlateau
|
105 |
+
periods: [92000, 208000]
|
106 |
+
restart_weights: [1,1]
|
107 |
+
eta_mins: [0.0003,0.000001]
|
108 |
+
|
109 |
+
mixing_augs:
|
110 |
+
mixup: false
|
111 |
+
mixup_beta: 1.2
|
112 |
+
use_identity: true
|
113 |
+
|
114 |
+
optim_g:
|
115 |
+
type: AdamW
|
116 |
+
lr: !!float 3e-4
|
117 |
+
weight_decay: !!float 1e-4
|
118 |
+
betas: [0.9, 0.999]
|
119 |
+
|
120 |
+
# losses
|
121 |
+
pixel_opt:
|
122 |
+
type: L1Loss
|
123 |
+
loss_weight: 1
|
124 |
+
reduction: mean
|
125 |
+
seq_opt:
|
126 |
+
type: Pearson
|
127 |
+
|
128 |
+
# validation settings
|
129 |
+
val:
|
130 |
+
window_size: 8
|
131 |
+
val_freq: !!float 1e3
|
132 |
+
save_img: true
|
133 |
+
rgb2bgr: true
|
134 |
+
use_image: true
|
135 |
+
max_minibatch: 8
|
136 |
+
|
137 |
+
metrics:
|
138 |
+
psnr: # metric name, can be arbitrary
|
139 |
+
type: calculate_psnr
|
140 |
+
crop_border: 0
|
141 |
+
test_y_channel: true
|
142 |
+
|
143 |
+
# logging settings
|
144 |
+
logger:
|
145 |
+
print_freq: 10
|
146 |
+
save_checkpoint_freq: !!float 1e3
|
147 |
+
use_tb_logger: true
|
148 |
+
wandb:
|
149 |
+
project: ~
|
150 |
+
resume_id: ~
|
151 |
+
|
152 |
+
# dist training settings
|
153 |
+
dist_params:
|
154 |
+
backend: nccl
|
155 |
+
port: 29500
|
Allweather/compute_psnr.py
ADDED
@@ -0,0 +1,136 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import argparse
|
2 |
+
import cv2
|
3 |
+
import os
|
4 |
+
import numpy as np
|
5 |
+
from skimage.metrics import mean_squared_error
|
6 |
+
from skimage.measure import compare_ssim
|
7 |
+
from skimage.metrics import structural_similarity
|
8 |
+
from skimage.metrics import peak_signal_noise_ratio
|
9 |
+
#import lpips
|
10 |
+
import torch
|
11 |
+
from tqdm import tqdm
|
12 |
+
|
13 |
+
#from niqe.niqe import compute_niqe
|
14 |
+
|
15 |
+
#criterion = lpips.LPIPS(net='vgg', lpips=True, pnet_rand=False, pretrained=True).cuda()
|
16 |
+
def rgb2ycbcr(im, only_y=True):
|
17 |
+
'''
|
18 |
+
same as matlab rgb2ycbcr
|
19 |
+
:parame img: uint8 or float ndarray
|
20 |
+
'''
|
21 |
+
in_im_type = im.dtype
|
22 |
+
im = im.astype(np.float64)
|
23 |
+
if in_im_type != np.uint8:
|
24 |
+
im *= 255.
|
25 |
+
# convert
|
26 |
+
if only_y:
|
27 |
+
rlt = np.dot(im, np.array([65.481, 128.553, 24.966])/ 255.0) + 16.0
|
28 |
+
else:
|
29 |
+
rlt = np.matmul(im, np.array([[65.481, -37.797, 112.0 ],
|
30 |
+
[128.553, -74.203, -93.786],
|
31 |
+
[24.966, 112.0, -18.214]])/255.0) + [16, 128, 128]
|
32 |
+
if in_im_type == np.uint8:
|
33 |
+
rlt = rlt.round()
|
34 |
+
else:
|
35 |
+
rlt /= 255.
|
36 |
+
|
37 |
+
return rlt.astype(in_im_type)
|
38 |
+
|
39 |
+
def rgb2ycbcrTorch(im, only_y=True):
|
40 |
+
'''
|
41 |
+
same as matlab rgb2ycbcr
|
42 |
+
Input:
|
43 |
+
im: float [0,1], N x 3 x H x W
|
44 |
+
only_y: only return Y channel
|
45 |
+
'''
|
46 |
+
im_temp = im.permute([0,2,3,1]) * 255.0 # N x H x W x C --> N x H x W x C, [0,255]
|
47 |
+
# convert
|
48 |
+
if only_y:
|
49 |
+
rlt = torch.matmul(im_temp, torch.tensor([65.481, 128.553, 24.966],
|
50 |
+
device=im.device, dtype=im.dtype).view([3,1])/ 255.0) + 16.0
|
51 |
+
else:
|
52 |
+
rlt = torch.matmul(im_temp, torch.tensor([[65.481, -37.797, 112.0 ],
|
53 |
+
[128.553, -74.203, -93.786],
|
54 |
+
[24.966, 112.0, -18.214]],
|
55 |
+
device=im.device, dtype=im.dtype)/255.0) + \
|
56 |
+
torch.tensor([16, 128, 128]).view([-1, 1, 1, 3])
|
57 |
+
rlt /= 255.0
|
58 |
+
rlt.clamp_(0.0, 1.0)
|
59 |
+
return rlt.permute([0, 3, 1, 2])
|
60 |
+
|
61 |
+
def readim(file):
|
62 |
+
# print(file)
|
63 |
+
img = cv2.imread(file)
|
64 |
+
img = img.astype(np.float32)
|
65 |
+
return img / 255.
|
66 |
+
|
67 |
+
def loadfiles(folder):
|
68 |
+
files = os.listdir(folder)
|
69 |
+
return natsorted(files)
|
70 |
+
|
71 |
+
def resize(im, size, crop=True):
|
72 |
+
if crop:
|
73 |
+
return im[:size[0], :size[1]]
|
74 |
+
else:
|
75 |
+
return cv2.resize(im, size)
|
76 |
+
|
77 |
+
from natsort import natsorted
|
78 |
+
|
79 |
+
def np2torch(img):
|
80 |
+
im = img.astype(np.float32) / 255
|
81 |
+
im = torch.tensor(im).permute((2,0,1)).unsqueeze(0)
|
82 |
+
return im.cuda()
|
83 |
+
|
84 |
+
def compute_metrics(path1, path2, ycbcr=True):
|
85 |
+
print(path1)
|
86 |
+
files1 = loadfiles(path1)
|
87 |
+
files2 = loadfiles(path2)
|
88 |
+
print(len(files1), len(files2))
|
89 |
+
psnr = []
|
90 |
+
ssim = []
|
91 |
+
mse = []
|
92 |
+
lpips = []
|
93 |
+
niqe = []
|
94 |
+
crop = False
|
95 |
+
for file1, file2 in tqdm(zip(files1, files2)):
|
96 |
+
img1 = readim(os.path.join(path1, file1))
|
97 |
+
img2 = readim(os.path.join(path2, file2))
|
98 |
+
if img1.shape != img2.shape:
|
99 |
+
if not crop:
|
100 |
+
img1 = resize(img1, img2.shape[:2][::-1], False)
|
101 |
+
else:
|
102 |
+
img1 = resize(img1, img2.shape, True)
|
103 |
+
# print(img1.shape, img2.shape, img1.max())
|
104 |
+
MSE = mean_squared_error(img1, img2)
|
105 |
+
if ycbcr:
|
106 |
+
img1 = rgb2ycbcr(img1, True)
|
107 |
+
img2 = rgb2ycbcr(img2, True)
|
108 |
+
diff = (img2 - img1)
|
109 |
+
# print(diff.mean(), diff.max(), diff.min(), diff.shape)
|
110 |
+
PSNR = peak_signal_noise_ratio(img1, img2, data_range=1)
|
111 |
+
SSIM = structural_similarity(img1, img2, win_size=11, multichannel=False if ycbcr else True, data_range=1)
|
112 |
+
|
113 |
+
mse.append(MSE)
|
114 |
+
psnr.append(PSNR)
|
115 |
+
ssim.append(SSIM)
|
116 |
+
|
117 |
+
|
118 |
+
mean_mse, mean_psnr, mean_ssim = np.mean(mse), np.mean(psnr), np.mean(ssim)
|
119 |
+
print(mean_mse, mean_psnr, mean_ssim)
|
120 |
+
return mean_mse, mean_psnr, mean_ssim
|
121 |
+
|
122 |
+
if __name__ == "__main__":
|
123 |
+
parser = argparse.ArgumentParser()
|
124 |
+
# path setting
|
125 |
+
parser.add_argument('--path1', type=str,default= "") # modify the experiments name-->modify all save path
|
126 |
+
parser.add_argument('--path2', type=str,default= "")
|
127 |
+
args = parser.parse_args()
|
128 |
+
|
129 |
+
path1 = ''
|
130 |
+
path2 = ''
|
131 |
+
if len(args.path1) != 0:
|
132 |
+
path1 = args.path1
|
133 |
+
if len(args.path2) != 0:
|
134 |
+
path2 = args.path2
|
135 |
+
|
136 |
+
compute_metrics(path1, path2, True)
|
Allweather/pretrained_models/README.md
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
pre-trained models are available [here](https://drive.google.com/drive/folders/1dmPhr8Z5iPRx9lh7TwdUFPSfwGIxp5l0?usp=drive_link)
|
Allweather/test_histoformer.py
ADDED
@@ -0,0 +1,89 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import numpy as np
|
2 |
+
import os
|
3 |
+
import argparse
|
4 |
+
from tqdm import tqdm
|
5 |
+
|
6 |
+
import torch.nn as nn
|
7 |
+
import torch
|
8 |
+
import torch.nn.functional as F
|
9 |
+
import util
|
10 |
+
|
11 |
+
from natsort import natsorted
|
12 |
+
from glob import glob
|
13 |
+
import sys
|
14 |
+
sys.path.append(os.path.join(os.getcwd(), ".."))
|
15 |
+
from basicsr.models.archs.histoformer_arch import Histoformer
|
16 |
+
from skimage import img_as_ubyte
|
17 |
+
from pdb import set_trace as stx
|
18 |
+
import time
|
19 |
+
parser = argparse.ArgumentParser(description='Image Deraining using Restormer')
|
20 |
+
|
21 |
+
parser.add_argument('--input_dir', default='./Datasets/', type=str, help='Directory of validation images')
|
22 |
+
parser.add_argument('--result_dir', default='./results/', type=str, help='Directory for results')
|
23 |
+
parser.add_argument('--weights', default='./pretrained_models/deraining.pth', type=str, help='Path to weights')
|
24 |
+
parser.add_argument('--yaml_file', default='Options/Allweather_Histoformer.yml', type=str, help='Path to weights')
|
25 |
+
|
26 |
+
args = parser.parse_args()
|
27 |
+
|
28 |
+
####### Load yaml #######
|
29 |
+
yaml_file = args.yaml_file
|
30 |
+
import yaml
|
31 |
+
|
32 |
+
try:
|
33 |
+
from yaml import CLoader as Loader
|
34 |
+
except ImportError:
|
35 |
+
from yaml import Loader
|
36 |
+
|
37 |
+
x = yaml.load(open(yaml_file, mode='r'), Loader=Loader)
|
38 |
+
|
39 |
+
s = x['network_g'].pop('type')
|
40 |
+
##########################
|
41 |
+
|
42 |
+
model_restoration = Histoformer(**x['network_g'])
|
43 |
+
|
44 |
+
checkpoint = torch.load(args.weights)
|
45 |
+
'''
|
46 |
+
from thop import profile
|
47 |
+
flops, params = profile(model_restoration, inputs=(torch.randn(1, 3, 256,256), ))
|
48 |
+
print('FLOPs = ' + str(flops/1000**3) + 'G')
|
49 |
+
print('Params = ' + str(params/1000**2) + 'M')
|
50 |
+
'''
|
51 |
+
model_restoration.load_state_dict(checkpoint['params'])
|
52 |
+
print("===>Testing using weights: ",args.weights)
|
53 |
+
model_restoration.cuda()
|
54 |
+
model_restoration = nn.DataParallel(model_restoration)
|
55 |
+
model_restoration.eval()
|
56 |
+
|
57 |
+
factor = 8
|
58 |
+
|
59 |
+
result_dir = os.path.join(args.result_dir)
|
60 |
+
os.makedirs(result_dir, exist_ok=True)
|
61 |
+
inp_dir = os.path.join(args.input_dir)
|
62 |
+
files = natsorted(glob(os.path.join(inp_dir, '*.png')) + glob(os.path.join(inp_dir, '*.jpg')))
|
63 |
+
with torch.no_grad():
|
64 |
+
for file_ in tqdm(files):
|
65 |
+
torch.cuda.ipc_collect()
|
66 |
+
torch.cuda.empty_cache()
|
67 |
+
|
68 |
+
img = np.float32(util.load_img(file_))/255.
|
69 |
+
img = torch.from_numpy(img).permute(2,0,1)
|
70 |
+
input_ = img.unsqueeze(0).cuda()
|
71 |
+
|
72 |
+
# Padding in case images are not multiples of 8
|
73 |
+
h,w = input_.shape[2], input_.shape[3]
|
74 |
+
H,W = ((h+factor)//factor)*factor, ((w+factor)//factor)*factor
|
75 |
+
padh = H-h if h%factor!=0 else 0
|
76 |
+
padw = W-w if w%factor!=0 else 0
|
77 |
+
input_ = F.pad(input_, (0,padw,0,padh), 'reflect')
|
78 |
+
|
79 |
+
time1 = time.time()
|
80 |
+
restored = model_restoration(input_)
|
81 |
+
time2 = time.time()
|
82 |
+
#print(time2-time1)
|
83 |
+
|
84 |
+
# Unpad images to original dimensions
|
85 |
+
restored = restored[:,:,:h,:w]
|
86 |
+
|
87 |
+
restored = torch.clamp(restored,0,1).cpu().detach().permute(0, 2, 3, 1).squeeze(0).numpy()
|
88 |
+
|
89 |
+
util.save_img((os.path.join(result_dir, os.path.splitext(os.path.split(file_)[-1])[0]+'.png')), img_as_ubyte(restored))
|
Allweather/util.py
ADDED
@@ -0,0 +1,86 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import numpy as np
|
2 |
+
import os
|
3 |
+
import cv2
|
4 |
+
import math
|
5 |
+
|
6 |
+
def calculate_psnr(img1, img2, border=0):
|
7 |
+
# img1 and img2 have range [0, 255]
|
8 |
+
#img1 = img1.squeeze()
|
9 |
+
#img2 = img2.squeeze()
|
10 |
+
if not img1.shape == img2.shape:
|
11 |
+
raise ValueError('Input images must have the same dimensions.')
|
12 |
+
h, w = img1.shape[:2]
|
13 |
+
img1 = img1[border:h-border, border:w-border]
|
14 |
+
img2 = img2[border:h-border, border:w-border]
|
15 |
+
|
16 |
+
img1 = img1.astype(np.float64)
|
17 |
+
img2 = img2.astype(np.float64)
|
18 |
+
mse = np.mean((img1 - img2)**2)
|
19 |
+
if mse == 0:
|
20 |
+
return float('inf')
|
21 |
+
return 20 * math.log10(255.0 / math.sqrt(mse))
|
22 |
+
|
23 |
+
|
24 |
+
# --------------------------------------------
|
25 |
+
# SSIM
|
26 |
+
# --------------------------------------------
|
27 |
+
def calculate_ssim(img1, img2, border=0):
|
28 |
+
'''calculate SSIM
|
29 |
+
the same outputs as MATLAB's
|
30 |
+
img1, img2: [0, 255]
|
31 |
+
'''
|
32 |
+
#img1 = img1.squeeze()
|
33 |
+
#img2 = img2.squeeze()
|
34 |
+
if not img1.shape == img2.shape:
|
35 |
+
raise ValueError('Input images must have the same dimensions.')
|
36 |
+
h, w = img1.shape[:2]
|
37 |
+
img1 = img1[border:h-border, border:w-border]
|
38 |
+
img2 = img2[border:h-border, border:w-border]
|
39 |
+
|
40 |
+
if img1.ndim == 2:
|
41 |
+
return ssim(img1, img2)
|
42 |
+
elif img1.ndim == 3:
|
43 |
+
if img1.shape[2] == 3:
|
44 |
+
ssims = []
|
45 |
+
for i in range(3):
|
46 |
+
ssims.append(ssim(img1[:,:,i], img2[:,:,i]))
|
47 |
+
return np.array(ssims).mean()
|
48 |
+
elif img1.shape[2] == 1:
|
49 |
+
return ssim(np.squeeze(img1), np.squeeze(img2))
|
50 |
+
else:
|
51 |
+
raise ValueError('Wrong input image dimensions.')
|
52 |
+
|
53 |
+
|
54 |
+
def ssim(img1, img2):
|
55 |
+
C1 = (0.01 * 255)**2
|
56 |
+
C2 = (0.03 * 255)**2
|
57 |
+
|
58 |
+
img1 = img1.astype(np.float64)
|
59 |
+
img2 = img2.astype(np.float64)
|
60 |
+
kernel = cv2.getGaussianKernel(11, 1.5)
|
61 |
+
window = np.outer(kernel, kernel.transpose())
|
62 |
+
|
63 |
+
mu1 = cv2.filter2D(img1, -1, window)[5:-5, 5:-5] # valid
|
64 |
+
mu2 = cv2.filter2D(img2, -1, window)[5:-5, 5:-5]
|
65 |
+
mu1_sq = mu1**2
|
66 |
+
mu2_sq = mu2**2
|
67 |
+
mu1_mu2 = mu1 * mu2
|
68 |
+
sigma1_sq = cv2.filter2D(img1**2, -1, window)[5:-5, 5:-5] - mu1_sq
|
69 |
+
sigma2_sq = cv2.filter2D(img2**2, -1, window)[5:-5, 5:-5] - mu2_sq
|
70 |
+
sigma12 = cv2.filter2D(img1 * img2, -1, window)[5:-5, 5:-5] - mu1_mu2
|
71 |
+
|
72 |
+
ssim_map = ((2 * mu1_mu2 + C1) * (2 * sigma12 + C2)) / ((mu1_sq + mu2_sq + C1) *
|
73 |
+
(sigma1_sq + sigma2_sq + C2))
|
74 |
+
return ssim_map.mean()
|
75 |
+
|
76 |
+
def load_img(filepath):
|
77 |
+
return cv2.cvtColor(cv2.imread(filepath), cv2.COLOR_BGR2RGB)
|
78 |
+
|
79 |
+
def save_img(filepath, img):
|
80 |
+
cv2.imwrite(filepath,cv2.cvtColor(img, cv2.COLOR_RGB2BGR))
|
81 |
+
|
82 |
+
def load_gray_img(filepath):
|
83 |
+
return np.expand_dims(cv2.imread(filepath, cv2.IMREAD_GRAYSCALE), axis=2)
|
84 |
+
|
85 |
+
def save_gray_img(filepath, img):
|
86 |
+
cv2.imwrite(filepath, img)
|
app.py
CHANGED
@@ -2,14 +2,14 @@ import torch
|
|
2 |
import gradio as gr
|
3 |
import numpy as np
|
4 |
import torch.nn.functional as F
|
|
|
5 |
|
6 |
from Allweather.util import load_img, save_img
|
7 |
from basicsr.models.archs.histoformer_arch import Histoformer
|
8 |
|
9 |
-
model_restoration = Histoformer()
|
10 |
-
|
11 |
-
|
12 |
-
model.eval()
|
13 |
|
14 |
factor = 8
|
15 |
def predict(input_img):
|
@@ -25,11 +25,11 @@ def predict(input_img):
|
|
25 |
input_ = F.pad(input_, (0,padw,0,padh), 'reflect')
|
26 |
return input_
|
27 |
prediction = model_restoration(input_)
|
28 |
-
output_path = "
|
29 |
-
|
30 |
restored = torch.clamp(restored,0,1).cpu().detach().permute(0, 2, 3, 1).squeeze(0).numpy()
|
31 |
|
32 |
-
save_img(
|
33 |
|
34 |
example_images = [
|
35 |
"examples/example.jpeg",
|
|
|
2 |
import gradio as gr
|
3 |
import numpy as np
|
4 |
import torch.nn.functional as F
|
5 |
+
from skimage import img_as_ubyte
|
6 |
|
7 |
from Allweather.util import load_img, save_img
|
8 |
from basicsr.models.archs.histoformer_arch import Histoformer
|
9 |
|
10 |
+
model_restoration = Histoformer.from_pretrained("sunsean/Histoformer-real")
|
11 |
+
|
12 |
+
model_restoration.eval()
|
|
|
13 |
|
14 |
factor = 8
|
15 |
def predict(input_img):
|
|
|
25 |
input_ = F.pad(input_, (0,padw,0,padh), 'reflect')
|
26 |
return input_
|
27 |
prediction = model_restoration(input_)
|
28 |
+
output_path = "restored.png"
|
29 |
+
result_dir = restored[:,:,:h,:w]
|
30 |
restored = torch.clamp(restored,0,1).cpu().detach().permute(0, 2, 3, 1).squeeze(0).numpy()
|
31 |
|
32 |
+
save_img(result_dir, img_as_ubyte(restored))
|
33 |
|
34 |
example_images = [
|
35 |
"examples/example.jpeg",
|
basicsr/__pycache__/version.cpython-38.pyc
ADDED
Binary file (246 Bytes). View file
|
|
basicsr/data/__init__.py
ADDED
@@ -0,0 +1,126 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import importlib
|
2 |
+
import numpy as np
|
3 |
+
import random
|
4 |
+
import torch
|
5 |
+
import torch.utils.data
|
6 |
+
from functools import partial
|
7 |
+
from os import path as osp
|
8 |
+
|
9 |
+
from data.prefetch_dataloader import PrefetchDataLoader
|
10 |
+
from utils import get_root_logger, scandir
|
11 |
+
from utils.dist_util import get_dist_info
|
12 |
+
|
13 |
+
__all__ = ['create_dataset', 'create_dataloader']
|
14 |
+
|
15 |
+
# automatically scan and import dataset modules
|
16 |
+
# scan all the files under the data folder with '_dataset' in file names
|
17 |
+
data_folder = osp.dirname(osp.abspath(__file__))
|
18 |
+
dataset_filenames = [
|
19 |
+
osp.splitext(osp.basename(v))[0] for v in scandir(data_folder)
|
20 |
+
if v.endswith('_dataset.py')
|
21 |
+
]
|
22 |
+
# import all the dataset modules
|
23 |
+
_dataset_modules = [
|
24 |
+
importlib.import_module(f'data.{file_name}')
|
25 |
+
for file_name in dataset_filenames
|
26 |
+
]
|
27 |
+
|
28 |
+
|
29 |
+
def create_dataset(dataset_opt):
|
30 |
+
"""Create dataset.
|
31 |
+
|
32 |
+
Args:
|
33 |
+
dataset_opt (dict): Configuration for dataset. It constains:
|
34 |
+
name (str): Dataset name.
|
35 |
+
type (str): Dataset type.
|
36 |
+
"""
|
37 |
+
dataset_type = dataset_opt['type']
|
38 |
+
|
39 |
+
# dynamic instantiation
|
40 |
+
for module in _dataset_modules:
|
41 |
+
dataset_cls = getattr(module, dataset_type, None)
|
42 |
+
if dataset_cls is not None:
|
43 |
+
break
|
44 |
+
if dataset_cls is None:
|
45 |
+
raise ValueError(f'Dataset {dataset_type} is not found.')
|
46 |
+
|
47 |
+
dataset = dataset_cls(dataset_opt)
|
48 |
+
|
49 |
+
logger = get_root_logger()
|
50 |
+
logger.info(
|
51 |
+
f'Dataset {dataset.__class__.__name__} - {dataset_opt["name"]} '
|
52 |
+
'is created.')
|
53 |
+
return dataset
|
54 |
+
|
55 |
+
|
56 |
+
def create_dataloader(dataset,
|
57 |
+
dataset_opt,
|
58 |
+
num_gpu=1,
|
59 |
+
dist=False,
|
60 |
+
sampler=None,
|
61 |
+
seed=None):
|
62 |
+
"""Create dataloader.
|
63 |
+
|
64 |
+
Args:
|
65 |
+
dataset (torch.utils.data.Dataset): Dataset.
|
66 |
+
dataset_opt (dict): Dataset options. It contains the following keys:
|
67 |
+
phase (str): 'train' or 'val'.
|
68 |
+
num_worker_per_gpu (int): Number of workers for each GPU.
|
69 |
+
batch_size_per_gpu (int): Training batch size for each GPU.
|
70 |
+
num_gpu (int): Number of GPUs. Used only in the train phase.
|
71 |
+
Default: 1.
|
72 |
+
dist (bool): Whether in distributed training. Used only in the train
|
73 |
+
phase. Default: False.
|
74 |
+
sampler (torch.utils.data.sampler): Data sampler. Default: None.
|
75 |
+
seed (int | None): Seed. Default: None
|
76 |
+
"""
|
77 |
+
phase = dataset_opt['phase']
|
78 |
+
rank, _ = get_dist_info()
|
79 |
+
if phase == 'train':
|
80 |
+
if dist: # distributed training
|
81 |
+
batch_size = dataset_opt['batch_size_per_gpu']
|
82 |
+
num_workers = dataset_opt['num_worker_per_gpu']
|
83 |
+
else: # non-distributed training
|
84 |
+
multiplier = 1 if num_gpu == 0 else num_gpu
|
85 |
+
batch_size = dataset_opt['batch_size_per_gpu'] * multiplier
|
86 |
+
num_workers = dataset_opt['num_worker_per_gpu'] * multiplier
|
87 |
+
dataloader_args = dict(
|
88 |
+
dataset=dataset,
|
89 |
+
batch_size=batch_size,
|
90 |
+
shuffle=False,
|
91 |
+
num_workers=num_workers,
|
92 |
+
sampler=sampler,
|
93 |
+
drop_last=True)
|
94 |
+
if sampler is None:
|
95 |
+
dataloader_args['shuffle'] = True
|
96 |
+
dataloader_args['worker_init_fn'] = partial(
|
97 |
+
worker_init_fn, num_workers=num_workers, rank=rank,
|
98 |
+
seed=seed) if seed is not None else None
|
99 |
+
elif phase in ['val', 'test']: # validation
|
100 |
+
dataloader_args = dict(
|
101 |
+
dataset=dataset, batch_size=1, shuffle=False, num_workers=0)
|
102 |
+
else:
|
103 |
+
raise ValueError(f'Wrong dataset phase: {phase}. '
|
104 |
+
"Supported ones are 'train', 'val' and 'test'.")
|
105 |
+
|
106 |
+
dataloader_args['pin_memory'] = dataset_opt.get('pin_memory', False)
|
107 |
+
|
108 |
+
prefetch_mode = dataset_opt.get('prefetch_mode')
|
109 |
+
if prefetch_mode == 'cpu': # CPUPrefetcher
|
110 |
+
num_prefetch_queue = dataset_opt.get('num_prefetch_queue', 1)
|
111 |
+
logger = get_root_logger()
|
112 |
+
logger.info(f'Use {prefetch_mode} prefetch dataloader: '
|
113 |
+
f'num_prefetch_queue = {num_prefetch_queue}')
|
114 |
+
return PrefetchDataLoader(
|
115 |
+
num_prefetch_queue=num_prefetch_queue, **dataloader_args)
|
116 |
+
else:
|
117 |
+
# prefetch_mode=None: Normal dataloader
|
118 |
+
# prefetch_mode='cuda': dataloader for CUDAPrefetcher
|
119 |
+
return torch.utils.data.DataLoader(**dataloader_args)
|
120 |
+
|
121 |
+
|
122 |
+
def worker_init_fn(worker_id, num_workers, rank, seed):
|
123 |
+
# Set the worker seed to num_workers * rank + worker_id + seed
|
124 |
+
worker_seed = num_workers * rank + worker_id + seed
|
125 |
+
np.random.seed(worker_seed)
|
126 |
+
random.seed(worker_seed)
|
basicsr/data/__pycache__/__init__.cpython-38.pyc
ADDED
Binary file (3.56 kB). View file
|
|
basicsr/data/__pycache__/data_sampler.cpython-38.pyc
ADDED
Binary file (2.17 kB). View file
|
|
basicsr/data/__pycache__/data_util.cpython-38.pyc
ADDED
Binary file (12.1 kB). View file
|
|
basicsr/data/__pycache__/ffhq_dataset.cpython-38.pyc
ADDED
Binary file (2.58 kB). View file
|
|
basicsr/data/__pycache__/paired_image_dataset.cpython-38.pyc
ADDED
Binary file (9.92 kB). View file
|
|
basicsr/data/__pycache__/prefetch_dataloader.cpython-38.pyc
ADDED
Binary file (4.36 kB). View file
|
|
basicsr/data/__pycache__/reds_dataset.cpython-38.pyc
ADDED
Binary file (6.53 kB). View file
|
|
basicsr/data/__pycache__/single_image_dataset.cpython-38.pyc
ADDED
Binary file (2.63 kB). View file
|
|
basicsr/data/__pycache__/transforms.cpython-38.pyc
ADDED
Binary file (7.87 kB). View file
|
|
basicsr/data/__pycache__/video_test_dataset.cpython-38.pyc
ADDED
Binary file (10.4 kB). View file
|
|
basicsr/data/__pycache__/vimeo90k_dataset.cpython-38.pyc
ADDED
Binary file (4.19 kB). View file
|
|
basicsr/data/data_sampler.py
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import math
|
2 |
+
import torch
|
3 |
+
from torch.utils.data.sampler import Sampler
|
4 |
+
|
5 |
+
|
6 |
+
class EnlargedSampler(Sampler):
|
7 |
+
"""Sampler that restricts data loading to a subset of the dataset.
|
8 |
+
|
9 |
+
Modified from torch.utils.data.distributed.DistributedSampler
|
10 |
+
Support enlarging the dataset for iteration-based training, for saving
|
11 |
+
time when restart the dataloader after each epoch
|
12 |
+
|
13 |
+
Args:
|
14 |
+
dataset (torch.utils.data.Dataset): Dataset used for sampling.
|
15 |
+
num_replicas (int | None): Number of processes participating in
|
16 |
+
the training. It is usually the world_size.
|
17 |
+
rank (int | None): Rank of the current process within num_replicas.
|
18 |
+
ratio (int): Enlarging ratio. Default: 1.
|
19 |
+
"""
|
20 |
+
|
21 |
+
def __init__(self, dataset, num_replicas, rank, ratio=1):
|
22 |
+
self.dataset = dataset
|
23 |
+
self.num_replicas = num_replicas
|
24 |
+
self.rank = rank
|
25 |
+
self.epoch = 0
|
26 |
+
self.num_samples = math.ceil(
|
27 |
+
len(self.dataset) * ratio / self.num_replicas)
|
28 |
+
self.total_size = self.num_samples * self.num_replicas
|
29 |
+
|
30 |
+
def __iter__(self):
|
31 |
+
# deterministically shuffle based on epoch
|
32 |
+
g = torch.Generator()
|
33 |
+
g.manual_seed(self.epoch)
|
34 |
+
indices = torch.randperm(self.total_size, generator=g).tolist()
|
35 |
+
|
36 |
+
dataset_size = len(self.dataset)
|
37 |
+
indices = [v % dataset_size for v in indices]
|
38 |
+
|
39 |
+
# subsample
|
40 |
+
indices = indices[self.rank:self.total_size:self.num_replicas]
|
41 |
+
assert len(indices) == self.num_samples
|
42 |
+
|
43 |
+
return iter(indices)
|
44 |
+
|
45 |
+
def __len__(self):
|
46 |
+
return self.num_samples
|
47 |
+
|
48 |
+
def set_epoch(self, epoch):
|
49 |
+
self.epoch = epoch
|
basicsr/data/data_util.py
ADDED
@@ -0,0 +1,390 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import cv2
|
2 |
+
cv2.setNumThreads(1)
|
3 |
+
import numpy as np
|
4 |
+
import torch
|
5 |
+
from os import path as osp
|
6 |
+
from torch.nn import functional as F
|
7 |
+
|
8 |
+
from basicsr.data.transforms import mod_crop
|
9 |
+
from basicsr.utils import img2tensor, scandir
|
10 |
+
|
11 |
+
|
12 |
+
def read_img_seq(path, require_mod_crop=False, scale=1):
|
13 |
+
"""Read a sequence of images from a given folder path.
|
14 |
+
|
15 |
+
Args:
|
16 |
+
path (list[str] | str): List of image paths or image folder path.
|
17 |
+
require_mod_crop (bool): Require mod crop for each image.
|
18 |
+
Default: False.
|
19 |
+
scale (int): Scale factor for mod_crop. Default: 1.
|
20 |
+
|
21 |
+
Returns:
|
22 |
+
Tensor: size (t, c, h, w), RGB, [0, 1].
|
23 |
+
"""
|
24 |
+
if isinstance(path, list):
|
25 |
+
img_paths = path
|
26 |
+
else:
|
27 |
+
img_paths = sorted(list(scandir(path, full_path=True)))
|
28 |
+
imgs = [cv2.imread(v).astype(np.float32) / 255. for v in img_paths]
|
29 |
+
if require_mod_crop:
|
30 |
+
imgs = [mod_crop(img, scale) for img in imgs]
|
31 |
+
imgs = img2tensor(imgs, bgr2rgb=True, float32=True)
|
32 |
+
imgs = torch.stack(imgs, dim=0)
|
33 |
+
return imgs
|
34 |
+
|
35 |
+
|
36 |
+
def generate_frame_indices(crt_idx,
|
37 |
+
max_frame_num,
|
38 |
+
num_frames,
|
39 |
+
padding='reflection'):
|
40 |
+
"""Generate an index list for reading `num_frames` frames from a sequence
|
41 |
+
of images.
|
42 |
+
|
43 |
+
Args:
|
44 |
+
crt_idx (int): Current center index.
|
45 |
+
max_frame_num (int): Max number of the sequence of images (from 1).
|
46 |
+
num_frames (int): Reading num_frames frames.
|
47 |
+
padding (str): Padding mode, one of
|
48 |
+
'replicate' | 'reflection' | 'reflection_circle' | 'circle'
|
49 |
+
Examples: current_idx = 0, num_frames = 5
|
50 |
+
The generated frame indices under different padding mode:
|
51 |
+
replicate: [0, 0, 0, 1, 2]
|
52 |
+
reflection: [2, 1, 0, 1, 2]
|
53 |
+
reflection_circle: [4, 3, 0, 1, 2]
|
54 |
+
circle: [3, 4, 0, 1, 2]
|
55 |
+
|
56 |
+
Returns:
|
57 |
+
list[int]: A list of indices.
|
58 |
+
"""
|
59 |
+
assert num_frames % 2 == 1, 'num_frames should be an odd number.'
|
60 |
+
assert padding in ('replicate', 'reflection', 'reflection_circle',
|
61 |
+
'circle'), f'Wrong padding mode: {padding}.'
|
62 |
+
|
63 |
+
max_frame_num = max_frame_num - 1 # start from 0
|
64 |
+
num_pad = num_frames // 2
|
65 |
+
|
66 |
+
indices = []
|
67 |
+
for i in range(crt_idx - num_pad, crt_idx + num_pad + 1):
|
68 |
+
if i < 0:
|
69 |
+
if padding == 'replicate':
|
70 |
+
pad_idx = 0
|
71 |
+
elif padding == 'reflection':
|
72 |
+
pad_idx = -i
|
73 |
+
elif padding == 'reflection_circle':
|
74 |
+
pad_idx = crt_idx + num_pad - i
|
75 |
+
else:
|
76 |
+
pad_idx = num_frames + i
|
77 |
+
elif i > max_frame_num:
|
78 |
+
if padding == 'replicate':
|
79 |
+
pad_idx = max_frame_num
|
80 |
+
elif padding == 'reflection':
|
81 |
+
pad_idx = max_frame_num * 2 - i
|
82 |
+
elif padding == 'reflection_circle':
|
83 |
+
pad_idx = (crt_idx - num_pad) - (i - max_frame_num)
|
84 |
+
else:
|
85 |
+
pad_idx = i - num_frames
|
86 |
+
else:
|
87 |
+
pad_idx = i
|
88 |
+
indices.append(pad_idx)
|
89 |
+
return indices
|
90 |
+
|
91 |
+
|
92 |
+
def paired_paths_from_lmdb(folders, keys):
|
93 |
+
"""Generate paired paths from lmdb files.
|
94 |
+
|
95 |
+
Contents of lmdb. Taking the `lq.lmdb` for example, the file structure is:
|
96 |
+
|
97 |
+
lq.lmdb
|
98 |
+
├── data.mdb
|
99 |
+
├── lock.mdb
|
100 |
+
├── meta_info.txt
|
101 |
+
|
102 |
+
The data.mdb and lock.mdb are standard lmdb files and you can refer to
|
103 |
+
https://lmdb.readthedocs.io/en/release/ for more details.
|
104 |
+
|
105 |
+
The meta_info.txt is a specified txt file to record the meta information
|
106 |
+
of our datasets. It will be automatically created when preparing
|
107 |
+
datasets by our provided dataset tools.
|
108 |
+
Each line in the txt file records
|
109 |
+
1)image name (with extension),
|
110 |
+
2)image shape,
|
111 |
+
3)compression level, separated by a white space.
|
112 |
+
Example: `baboon.png (120,125,3) 1`
|
113 |
+
|
114 |
+
We use the image name without extension as the lmdb key.
|
115 |
+
Note that we use the same key for the corresponding lq and gt images.
|
116 |
+
|
117 |
+
Args:
|
118 |
+
folders (list[str]): A list of folder path. The order of list should
|
119 |
+
be [input_folder, gt_folder].
|
120 |
+
keys (list[str]): A list of keys identifying folders. The order should
|
121 |
+
be in consistent with folders, e.g., ['lq', 'gt'].
|
122 |
+
Note that this key is different from lmdb keys.
|
123 |
+
|
124 |
+
Returns:
|
125 |
+
list[str]: Returned path list.
|
126 |
+
"""
|
127 |
+
assert len(folders) == 2, (
|
128 |
+
'The len of folders should be 2 with [input_folder, gt_folder]. '
|
129 |
+
f'But got {len(folders)}')
|
130 |
+
assert len(keys) == 2, (
|
131 |
+
'The len of keys should be 2 with [input_key, gt_key]. '
|
132 |
+
f'But got {len(keys)}')
|
133 |
+
input_folder, gt_folder = folders
|
134 |
+
input_key, gt_key = keys
|
135 |
+
|
136 |
+
if not (input_folder.endswith('.lmdb') and gt_folder.endswith('.lmdb')):
|
137 |
+
raise ValueError(
|
138 |
+
f'{input_key} folder and {gt_key} folder should both in lmdb '
|
139 |
+
f'formats. But received {input_key}: {input_folder}; '
|
140 |
+
f'{gt_key}: {gt_folder}')
|
141 |
+
# ensure that the two meta_info files are the same
|
142 |
+
with open(osp.join(input_folder, 'meta_info.txt')) as fin:
|
143 |
+
input_lmdb_keys = [line.split('.')[0] for line in fin]
|
144 |
+
with open(osp.join(gt_folder, 'meta_info.txt')) as fin:
|
145 |
+
gt_lmdb_keys = [line.split('.')[0] for line in fin]
|
146 |
+
if set(input_lmdb_keys) != set(gt_lmdb_keys):
|
147 |
+
raise ValueError(
|
148 |
+
f'Keys in {input_key}_folder and {gt_key}_folder are different.')
|
149 |
+
else:
|
150 |
+
paths = []
|
151 |
+
for lmdb_key in sorted(input_lmdb_keys):
|
152 |
+
paths.append(
|
153 |
+
dict([(f'{input_key}_path', lmdb_key),
|
154 |
+
(f'{gt_key}_path', lmdb_key)]))
|
155 |
+
return paths
|
156 |
+
|
157 |
+
|
158 |
+
def paired_paths_from_meta_info_file(folders, keys, meta_info_file,
|
159 |
+
filename_tmpl):
|
160 |
+
"""Generate paired paths from an meta information file.
|
161 |
+
|
162 |
+
Each line in the meta information file contains the image names and
|
163 |
+
image shape (usually for gt), separated by a white space.
|
164 |
+
|
165 |
+
Example of an meta information file:
|
166 |
+
```
|
167 |
+
0001_s001.png (480,480,3)
|
168 |
+
0001_s002.png (480,480,3)
|
169 |
+
```
|
170 |
+
|
171 |
+
Args:
|
172 |
+
folders (list[str]): A list of folder path. The order of list should
|
173 |
+
be [input_folder, gt_folder].
|
174 |
+
keys (list[str]): A list of keys identifying folders. The order should
|
175 |
+
be in consistent with folders, e.g., ['lq', 'gt'].
|
176 |
+
meta_info_file (str): Path to the meta information file.
|
177 |
+
filename_tmpl (str): Template for each filename. Note that the
|
178 |
+
template excludes the file extension. Usually the filename_tmpl is
|
179 |
+
for files in the input folder.
|
180 |
+
|
181 |
+
Returns:
|
182 |
+
list[str]: Returned path list.
|
183 |
+
"""
|
184 |
+
assert len(folders) == 2, (
|
185 |
+
'The len of folders should be 2 with [input_folder, gt_folder]. '
|
186 |
+
f'But got {len(folders)}')
|
187 |
+
assert len(keys) == 2, (
|
188 |
+
'The len of keys should be 2 with [input_key, gt_key]. '
|
189 |
+
f'But got {len(keys)}')
|
190 |
+
input_folder, gt_folder = folders
|
191 |
+
input_key, gt_key = keys
|
192 |
+
|
193 |
+
with open(meta_info_file, 'r') as fin:
|
194 |
+
gt_names = [line.split(' ')[0] for line in fin]
|
195 |
+
|
196 |
+
paths = []
|
197 |
+
for gt_name in gt_names:
|
198 |
+
basename, ext = osp.splitext(osp.basename(gt_name))
|
199 |
+
input_name = f'{filename_tmpl.format(basename)}{ext}'
|
200 |
+
input_path = osp.join(input_folder, input_name)
|
201 |
+
gt_path = osp.join(gt_folder, gt_name)
|
202 |
+
paths.append(
|
203 |
+
dict([(f'{input_key}_path', input_path),
|
204 |
+
(f'{gt_key}_path', gt_path)]))
|
205 |
+
return paths
|
206 |
+
|
207 |
+
|
208 |
+
def paired_paths_from_folder(folders, keys, filename_tmpl):
|
209 |
+
"""Generate paired paths from folders.
|
210 |
+
|
211 |
+
Args:
|
212 |
+
folders (list[str]): A list of folder path. The order of list should
|
213 |
+
be [input_folder, gt_folder].
|
214 |
+
keys (list[str]): A list of keys identifying folders. The order should
|
215 |
+
be in consistent with folders, e.g., ['lq', 'gt'].
|
216 |
+
filename_tmpl (str): Template for each filename. Note that the
|
217 |
+
template excludes the file extension. Usually the filename_tmpl is
|
218 |
+
for files in the input folder.
|
219 |
+
|
220 |
+
Returns:
|
221 |
+
list[str]: Returned path list.
|
222 |
+
"""
|
223 |
+
assert len(folders) == 2, (
|
224 |
+
'The len of folders should be 2 with [input_folder, gt_folder]. '
|
225 |
+
f'But got {len(folders)}')
|
226 |
+
assert len(keys) == 2, (
|
227 |
+
'The len of keys should be 2 with [input_key, gt_key]. '
|
228 |
+
f'But got {len(keys)}')
|
229 |
+
input_folder, gt_folder = folders
|
230 |
+
input_key, gt_key = keys
|
231 |
+
|
232 |
+
input_paths = list(scandir(input_folder))
|
233 |
+
gt_paths = list(scandir(gt_folder))
|
234 |
+
assert len(input_paths) == len(gt_paths), (
|
235 |
+
f'{input_key} and {gt_key} datasets have different number of images: '
|
236 |
+
f'{len(input_paths)}, {len(gt_paths)}.')
|
237 |
+
paths = []
|
238 |
+
for idx in range(len(gt_paths)):
|
239 |
+
gt_path = gt_paths[idx]
|
240 |
+
# if "lns" in gt_path:
|
241 |
+
# continue
|
242 |
+
basename, ext = osp.splitext(osp.basename(gt_path))
|
243 |
+
input_path = input_paths[idx]
|
244 |
+
basename_input, ext_input = osp.splitext(osp.basename(input_path))
|
245 |
+
input_name = f'{filename_tmpl.format(basename)}{ext_input}'
|
246 |
+
input_path = osp.join(input_folder, input_name)
|
247 |
+
assert input_name in input_paths, (f'{input_name} is not in '
|
248 |
+
f'{input_key}_paths.')
|
249 |
+
gt_path = osp.join(gt_folder, gt_path)
|
250 |
+
paths.append(
|
251 |
+
dict([(f'{input_key}_path', input_path),
|
252 |
+
(f'{gt_key}_path', gt_path)]))
|
253 |
+
return paths
|
254 |
+
|
255 |
+
def paired_DP_paths_from_folder(folders, keys, filename_tmpl):
|
256 |
+
"""Generate paired paths from folders.
|
257 |
+
|
258 |
+
Args:
|
259 |
+
folders (list[str]): A list of folder path. The order of list should
|
260 |
+
be [input_folder, gt_folder].
|
261 |
+
keys (list[str]): A list of keys identifying folders. The order should
|
262 |
+
be in consistent with folders, e.g., ['lq', 'gt'].
|
263 |
+
filename_tmpl (str): Template for each filename. Note that the
|
264 |
+
template excludes the file extension. Usually the filename_tmpl is
|
265 |
+
for files in the input folder.
|
266 |
+
|
267 |
+
Returns:
|
268 |
+
list[str]: Returned path list.
|
269 |
+
"""
|
270 |
+
assert len(folders) == 3, (
|
271 |
+
'The len of folders should be 3 with [inputL_folder, inputR_folder, gt_folder]. '
|
272 |
+
f'But got {len(folders)}')
|
273 |
+
assert len(keys) == 3, (
|
274 |
+
'The len of keys should be 2 with [inputL_key, inputR_key, gt_key]. '
|
275 |
+
f'But got {len(keys)}')
|
276 |
+
inputL_folder, inputR_folder, gt_folder = folders
|
277 |
+
inputL_key, inputR_key, gt_key = keys
|
278 |
+
|
279 |
+
inputL_paths = list(scandir(inputL_folder))
|
280 |
+
inputR_paths = list(scandir(inputR_folder))
|
281 |
+
gt_paths = list(scandir(gt_folder))
|
282 |
+
assert len(inputL_paths) == len(inputR_paths) == len(gt_paths), (
|
283 |
+
f'{inputL_key} and {inputR_key} and {gt_key} datasets have different number of images: '
|
284 |
+
f'{len(inputL_paths)}, {len(inputR_paths)}, {len(gt_paths)}.')
|
285 |
+
paths = []
|
286 |
+
for idx in range(len(gt_paths)):
|
287 |
+
gt_path = gt_paths[idx]
|
288 |
+
basename, ext = osp.splitext(osp.basename(gt_path))
|
289 |
+
inputL_path = inputL_paths[idx]
|
290 |
+
basename_input, ext_input = osp.splitext(osp.basename(inputL_path))
|
291 |
+
inputL_name = f'{filename_tmpl.format(basename)}{ext_input}'
|
292 |
+
inputL_path = osp.join(inputL_folder, inputL_name)
|
293 |
+
assert inputL_name in inputL_paths, (f'{inputL_name} is not in '
|
294 |
+
f'{inputL_key}_paths.')
|
295 |
+
inputR_path = inputR_paths[idx]
|
296 |
+
basename_input, ext_input = osp.splitext(osp.basename(inputR_path))
|
297 |
+
inputR_name = f'{filename_tmpl.format(basename)}{ext_input}'
|
298 |
+
inputR_path = osp.join(inputR_folder, inputR_name)
|
299 |
+
assert inputR_name in inputR_paths, (f'{inputR_name} is not in '
|
300 |
+
f'{inputR_key}_paths.')
|
301 |
+
gt_path = osp.join(gt_folder, gt_path)
|
302 |
+
paths.append(
|
303 |
+
dict([(f'{inputL_key}_path', inputL_path),
|
304 |
+
(f'{inputR_key}_path', inputR_path),
|
305 |
+
(f'{gt_key}_path', gt_path)]))
|
306 |
+
return paths
|
307 |
+
|
308 |
+
|
309 |
+
def paths_from_folder(folder):
|
310 |
+
"""Generate paths from folder.
|
311 |
+
|
312 |
+
Args:
|
313 |
+
folder (str): Folder path.
|
314 |
+
|
315 |
+
Returns:
|
316 |
+
list[str]: Returned path list.
|
317 |
+
"""
|
318 |
+
|
319 |
+
paths = list(scandir(folder))
|
320 |
+
paths = [osp.join(folder, path) for path in paths]
|
321 |
+
return paths
|
322 |
+
|
323 |
+
|
324 |
+
def paths_from_lmdb(folder):
|
325 |
+
"""Generate paths from lmdb.
|
326 |
+
|
327 |
+
Args:
|
328 |
+
folder (str): Folder path.
|
329 |
+
|
330 |
+
Returns:
|
331 |
+
list[str]: Returned path list.
|
332 |
+
"""
|
333 |
+
if not folder.endswith('.lmdb'):
|
334 |
+
raise ValueError(f'Folder {folder}folder should in lmdb format.')
|
335 |
+
with open(osp.join(folder, 'meta_info.txt')) as fin:
|
336 |
+
paths = [line.split('.')[0] for line in fin]
|
337 |
+
return paths
|
338 |
+
|
339 |
+
|
340 |
+
def generate_gaussian_kernel(kernel_size=13, sigma=1.6):
|
341 |
+
"""Generate Gaussian kernel used in `duf_downsample`.
|
342 |
+
|
343 |
+
Args:
|
344 |
+
kernel_size (int): Kernel size. Default: 13.
|
345 |
+
sigma (float): Sigma of the Gaussian kernel. Default: 1.6.
|
346 |
+
|
347 |
+
Returns:
|
348 |
+
np.array: The Gaussian kernel.
|
349 |
+
"""
|
350 |
+
from scipy.ndimage import filters as filters
|
351 |
+
kernel = np.zeros((kernel_size, kernel_size))
|
352 |
+
# set element at the middle to one, a dirac delta
|
353 |
+
kernel[kernel_size // 2, kernel_size // 2] = 1
|
354 |
+
# gaussian-smooth the dirac, resulting in a gaussian filter
|
355 |
+
return filters.gaussian_filter(kernel, sigma)
|
356 |
+
|
357 |
+
|
358 |
+
def duf_downsample(x, kernel_size=13, scale=4):
|
359 |
+
"""Downsamping with Gaussian kernel used in the DUF official code.
|
360 |
+
|
361 |
+
Args:
|
362 |
+
x (Tensor): Frames to be downsampled, with shape (b, t, c, h, w).
|
363 |
+
kernel_size (int): Kernel size. Default: 13.
|
364 |
+
scale (int): Downsampling factor. Supported scale: (2, 3, 4).
|
365 |
+
Default: 4.
|
366 |
+
|
367 |
+
Returns:
|
368 |
+
Tensor: DUF downsampled frames.
|
369 |
+
"""
|
370 |
+
assert scale in (2, 3,
|
371 |
+
4), f'Only support scale (2, 3, 4), but got {scale}.'
|
372 |
+
|
373 |
+
squeeze_flag = False
|
374 |
+
if x.ndim == 4:
|
375 |
+
squeeze_flag = True
|
376 |
+
x = x.unsqueeze(0)
|
377 |
+
b, t, c, h, w = x.size()
|
378 |
+
x = x.view(-1, 1, h, w)
|
379 |
+
pad_w, pad_h = kernel_size // 2 + scale * 2, kernel_size // 2 + scale * 2
|
380 |
+
x = F.pad(x, (pad_w, pad_w, pad_h, pad_h), 'reflect')
|
381 |
+
|
382 |
+
gaussian_filter = generate_gaussian_kernel(kernel_size, 0.4 * scale)
|
383 |
+
gaussian_filter = torch.from_numpy(gaussian_filter).type_as(x).unsqueeze(
|
384 |
+
0).unsqueeze(0)
|
385 |
+
x = F.conv2d(x, gaussian_filter, stride=scale)
|
386 |
+
x = x[:, :, 2:-2, 2:-2]
|
387 |
+
x = x.view(b, t, c, x.size(2), x.size(3))
|
388 |
+
if squeeze_flag:
|
389 |
+
x = x.squeeze(0)
|
390 |
+
return x
|
basicsr/data/meta_info/meta_info_DIV2K800sub_GT.txt
ADDED
The diff for this file is too large to render.
See raw diff
|
|
basicsr/data/meta_info/meta_info_REDS4_test_GT.txt
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
000 100 (720,1280,3)
|
2 |
+
011 100 (720,1280,3)
|
3 |
+
015 100 (720,1280,3)
|
4 |
+
020 100 (720,1280,3)
|
basicsr/data/meta_info/meta_info_REDS_GT.txt
ADDED
@@ -0,0 +1,270 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
000 100 (720,1280,3)
|
2 |
+
001 100 (720,1280,3)
|
3 |
+
002 100 (720,1280,3)
|
4 |
+
003 100 (720,1280,3)
|
5 |
+
004 100 (720,1280,3)
|
6 |
+
005 100 (720,1280,3)
|
7 |
+
006 100 (720,1280,3)
|
8 |
+
007 100 (720,1280,3)
|
9 |
+
008 100 (720,1280,3)
|
10 |
+
009 100 (720,1280,3)
|
11 |
+
010 100 (720,1280,3)
|
12 |
+
011 100 (720,1280,3)
|
13 |
+
012 100 (720,1280,3)
|
14 |
+
013 100 (720,1280,3)
|
15 |
+
014 100 (720,1280,3)
|
16 |
+
015 100 (720,1280,3)
|
17 |
+
016 100 (720,1280,3)
|
18 |
+
017 100 (720,1280,3)
|
19 |
+
018 100 (720,1280,3)
|
20 |
+
019 100 (720,1280,3)
|
21 |
+
020 100 (720,1280,3)
|
22 |
+
021 100 (720,1280,3)
|
23 |
+
022 100 (720,1280,3)
|
24 |
+
023 100 (720,1280,3)
|
25 |
+
024 100 (720,1280,3)
|
26 |
+
025 100 (720,1280,3)
|
27 |
+
026 100 (720,1280,3)
|
28 |
+
027 100 (720,1280,3)
|
29 |
+
028 100 (720,1280,3)
|
30 |
+
029 100 (720,1280,3)
|
31 |
+
030 100 (720,1280,3)
|
32 |
+
031 100 (720,1280,3)
|
33 |
+
032 100 (720,1280,3)
|
34 |
+
033 100 (720,1280,3)
|
35 |
+
034 100 (720,1280,3)
|
36 |
+
035 100 (720,1280,3)
|
37 |
+
036 100 (720,1280,3)
|
38 |
+
037 100 (720,1280,3)
|
39 |
+
038 100 (720,1280,3)
|
40 |
+
039 100 (720,1280,3)
|
41 |
+
040 100 (720,1280,3)
|
42 |
+
041 100 (720,1280,3)
|
43 |
+
042 100 (720,1280,3)
|
44 |
+
043 100 (720,1280,3)
|
45 |
+
044 100 (720,1280,3)
|
46 |
+
045 100 (720,1280,3)
|
47 |
+
046 100 (720,1280,3)
|
48 |
+
047 100 (720,1280,3)
|
49 |
+
048 100 (720,1280,3)
|
50 |
+
049 100 (720,1280,3)
|
51 |
+
050 100 (720,1280,3)
|
52 |
+
051 100 (720,1280,3)
|
53 |
+
052 100 (720,1280,3)
|
54 |
+
053 100 (720,1280,3)
|
55 |
+
054 100 (720,1280,3)
|
56 |
+
055 100 (720,1280,3)
|
57 |
+
056 100 (720,1280,3)
|
58 |
+
057 100 (720,1280,3)
|
59 |
+
058 100 (720,1280,3)
|
60 |
+
059 100 (720,1280,3)
|
61 |
+
060 100 (720,1280,3)
|
62 |
+
061 100 (720,1280,3)
|
63 |
+
062 100 (720,1280,3)
|
64 |
+
063 100 (720,1280,3)
|
65 |
+
064 100 (720,1280,3)
|
66 |
+
065 100 (720,1280,3)
|
67 |
+
066 100 (720,1280,3)
|
68 |
+
067 100 (720,1280,3)
|
69 |
+
068 100 (720,1280,3)
|
70 |
+
069 100 (720,1280,3)
|
71 |
+
070 100 (720,1280,3)
|
72 |
+
071 100 (720,1280,3)
|
73 |
+
072 100 (720,1280,3)
|
74 |
+
073 100 (720,1280,3)
|
75 |
+
074 100 (720,1280,3)
|
76 |
+
075 100 (720,1280,3)
|
77 |
+
076 100 (720,1280,3)
|
78 |
+
077 100 (720,1280,3)
|
79 |
+
078 100 (720,1280,3)
|
80 |
+
079 100 (720,1280,3)
|
81 |
+
080 100 (720,1280,3)
|
82 |
+
081 100 (720,1280,3)
|
83 |
+
082 100 (720,1280,3)
|
84 |
+
083 100 (720,1280,3)
|
85 |
+
084 100 (720,1280,3)
|
86 |
+
085 100 (720,1280,3)
|
87 |
+
086 100 (720,1280,3)
|
88 |
+
087 100 (720,1280,3)
|
89 |
+
088 100 (720,1280,3)
|
90 |
+
089 100 (720,1280,3)
|
91 |
+
090 100 (720,1280,3)
|
92 |
+
091 100 (720,1280,3)
|
93 |
+
092 100 (720,1280,3)
|
94 |
+
093 100 (720,1280,3)
|
95 |
+
094 100 (720,1280,3)
|
96 |
+
095 100 (720,1280,3)
|
97 |
+
096 100 (720,1280,3)
|
98 |
+
097 100 (720,1280,3)
|
99 |
+
098 100 (720,1280,3)
|
100 |
+
099 100 (720,1280,3)
|
101 |
+
100 100 (720,1280,3)
|
102 |
+
101 100 (720,1280,3)
|
103 |
+
102 100 (720,1280,3)
|
104 |
+
103 100 (720,1280,3)
|
105 |
+
104 100 (720,1280,3)
|
106 |
+
105 100 (720,1280,3)
|
107 |
+
106 100 (720,1280,3)
|
108 |
+
107 100 (720,1280,3)
|
109 |
+
108 100 (720,1280,3)
|
110 |
+
109 100 (720,1280,3)
|
111 |
+
110 100 (720,1280,3)
|
112 |
+
111 100 (720,1280,3)
|
113 |
+
112 100 (720,1280,3)
|
114 |
+
113 100 (720,1280,3)
|
115 |
+
114 100 (720,1280,3)
|
116 |
+
115 100 (720,1280,3)
|
117 |
+
116 100 (720,1280,3)
|
118 |
+
117 100 (720,1280,3)
|
119 |
+
118 100 (720,1280,3)
|
120 |
+
119 100 (720,1280,3)
|
121 |
+
120 100 (720,1280,3)
|
122 |
+
121 100 (720,1280,3)
|
123 |
+
122 100 (720,1280,3)
|
124 |
+
123 100 (720,1280,3)
|
125 |
+
124 100 (720,1280,3)
|
126 |
+
125 100 (720,1280,3)
|
127 |
+
126 100 (720,1280,3)
|
128 |
+
127 100 (720,1280,3)
|
129 |
+
128 100 (720,1280,3)
|
130 |
+
129 100 (720,1280,3)
|
131 |
+
130 100 (720,1280,3)
|
132 |
+
131 100 (720,1280,3)
|
133 |
+
132 100 (720,1280,3)
|
134 |
+
133 100 (720,1280,3)
|
135 |
+
134 100 (720,1280,3)
|
136 |
+
135 100 (720,1280,3)
|
137 |
+
136 100 (720,1280,3)
|
138 |
+
137 100 (720,1280,3)
|
139 |
+
138 100 (720,1280,3)
|
140 |
+
139 100 (720,1280,3)
|
141 |
+
140 100 (720,1280,3)
|
142 |
+
141 100 (720,1280,3)
|
143 |
+
142 100 (720,1280,3)
|
144 |
+
143 100 (720,1280,3)
|
145 |
+
144 100 (720,1280,3)
|
146 |
+
145 100 (720,1280,3)
|
147 |
+
146 100 (720,1280,3)
|
148 |
+
147 100 (720,1280,3)
|
149 |
+
148 100 (720,1280,3)
|
150 |
+
149 100 (720,1280,3)
|
151 |
+
150 100 (720,1280,3)
|
152 |
+
151 100 (720,1280,3)
|
153 |
+
152 100 (720,1280,3)
|
154 |
+
153 100 (720,1280,3)
|
155 |
+
154 100 (720,1280,3)
|
156 |
+
155 100 (720,1280,3)
|
157 |
+
156 100 (720,1280,3)
|
158 |
+
157 100 (720,1280,3)
|
159 |
+
158 100 (720,1280,3)
|
160 |
+
159 100 (720,1280,3)
|
161 |
+
160 100 (720,1280,3)
|
162 |
+
161 100 (720,1280,3)
|
163 |
+
162 100 (720,1280,3)
|
164 |
+
163 100 (720,1280,3)
|
165 |
+
164 100 (720,1280,3)
|
166 |
+
165 100 (720,1280,3)
|
167 |
+
166 100 (720,1280,3)
|
168 |
+
167 100 (720,1280,3)
|
169 |
+
168 100 (720,1280,3)
|
170 |
+
169 100 (720,1280,3)
|
171 |
+
170 100 (720,1280,3)
|
172 |
+
171 100 (720,1280,3)
|
173 |
+
172 100 (720,1280,3)
|
174 |
+
173 100 (720,1280,3)
|
175 |
+
174 100 (720,1280,3)
|
176 |
+
175 100 (720,1280,3)
|
177 |
+
176 100 (720,1280,3)
|
178 |
+
177 100 (720,1280,3)
|
179 |
+
178 100 (720,1280,3)
|
180 |
+
179 100 (720,1280,3)
|
181 |
+
180 100 (720,1280,3)
|
182 |
+
181 100 (720,1280,3)
|
183 |
+
182 100 (720,1280,3)
|
184 |
+
183 100 (720,1280,3)
|
185 |
+
184 100 (720,1280,3)
|
186 |
+
185 100 (720,1280,3)
|
187 |
+
186 100 (720,1280,3)
|
188 |
+
187 100 (720,1280,3)
|
189 |
+
188 100 (720,1280,3)
|
190 |
+
189 100 (720,1280,3)
|
191 |
+
190 100 (720,1280,3)
|
192 |
+
191 100 (720,1280,3)
|
193 |
+
192 100 (720,1280,3)
|
194 |
+
193 100 (720,1280,3)
|
195 |
+
194 100 (720,1280,3)
|
196 |
+
195 100 (720,1280,3)
|
197 |
+
196 100 (720,1280,3)
|
198 |
+
197 100 (720,1280,3)
|
199 |
+
198 100 (720,1280,3)
|
200 |
+
199 100 (720,1280,3)
|
201 |
+
200 100 (720,1280,3)
|
202 |
+
201 100 (720,1280,3)
|
203 |
+
202 100 (720,1280,3)
|
204 |
+
203 100 (720,1280,3)
|
205 |
+
204 100 (720,1280,3)
|
206 |
+
205 100 (720,1280,3)
|
207 |
+
206 100 (720,1280,3)
|
208 |
+
207 100 (720,1280,3)
|
209 |
+
208 100 (720,1280,3)
|
210 |
+
209 100 (720,1280,3)
|
211 |
+
210 100 (720,1280,3)
|
212 |
+
211 100 (720,1280,3)
|
213 |
+
212 100 (720,1280,3)
|
214 |
+
213 100 (720,1280,3)
|
215 |
+
214 100 (720,1280,3)
|
216 |
+
215 100 (720,1280,3)
|
217 |
+
216 100 (720,1280,3)
|
218 |
+
217 100 (720,1280,3)
|
219 |
+
218 100 (720,1280,3)
|
220 |
+
219 100 (720,1280,3)
|
221 |
+
220 100 (720,1280,3)
|
222 |
+
221 100 (720,1280,3)
|
223 |
+
222 100 (720,1280,3)
|
224 |
+
223 100 (720,1280,3)
|
225 |
+
224 100 (720,1280,3)
|
226 |
+
225 100 (720,1280,3)
|
227 |
+
226 100 (720,1280,3)
|
228 |
+
227 100 (720,1280,3)
|
229 |
+
228 100 (720,1280,3)
|
230 |
+
229 100 (720,1280,3)
|
231 |
+
230 100 (720,1280,3)
|
232 |
+
231 100 (720,1280,3)
|
233 |
+
232 100 (720,1280,3)
|
234 |
+
233 100 (720,1280,3)
|
235 |
+
234 100 (720,1280,3)
|
236 |
+
235 100 (720,1280,3)
|
237 |
+
236 100 (720,1280,3)
|
238 |
+
237 100 (720,1280,3)
|
239 |
+
238 100 (720,1280,3)
|
240 |
+
239 100 (720,1280,3)
|
241 |
+
240 100 (720,1280,3)
|
242 |
+
241 100 (720,1280,3)
|
243 |
+
242 100 (720,1280,3)
|
244 |
+
243 100 (720,1280,3)
|
245 |
+
244 100 (720,1280,3)
|
246 |
+
245 100 (720,1280,3)
|
247 |
+
246 100 (720,1280,3)
|
248 |
+
247 100 (720,1280,3)
|
249 |
+
248 100 (720,1280,3)
|
250 |
+
249 100 (720,1280,3)
|
251 |
+
250 100 (720,1280,3)
|
252 |
+
251 100 (720,1280,3)
|
253 |
+
252 100 (720,1280,3)
|
254 |
+
253 100 (720,1280,3)
|
255 |
+
254 100 (720,1280,3)
|
256 |
+
255 100 (720,1280,3)
|
257 |
+
256 100 (720,1280,3)
|
258 |
+
257 100 (720,1280,3)
|
259 |
+
258 100 (720,1280,3)
|
260 |
+
259 100 (720,1280,3)
|
261 |
+
260 100 (720,1280,3)
|
262 |
+
261 100 (720,1280,3)
|
263 |
+
262 100 (720,1280,3)
|
264 |
+
263 100 (720,1280,3)
|
265 |
+
264 100 (720,1280,3)
|
266 |
+
265 100 (720,1280,3)
|
267 |
+
266 100 (720,1280,3)
|
268 |
+
267 100 (720,1280,3)
|
269 |
+
268 100 (720,1280,3)
|
270 |
+
269 100 (720,1280,3)
|
basicsr/data/meta_info/meta_info_REDSofficial4_test_GT.txt
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
240 100 (720,1280,3)
|
2 |
+
241 100 (720,1280,3)
|
3 |
+
246 100 (720,1280,3)
|
4 |
+
257 100 (720,1280,3)
|
basicsr/data/meta_info/meta_info_REDSval_official_test_GT.txt
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
240 100 (720,1280,3)
|
2 |
+
241 100 (720,1280,3)
|
3 |
+
242 100 (720,1280,3)
|
4 |
+
243 100 (720,1280,3)
|
5 |
+
244 100 (720,1280,3)
|
6 |
+
245 100 (720,1280,3)
|
7 |
+
246 100 (720,1280,3)
|
8 |
+
247 100 (720,1280,3)
|
9 |
+
248 100 (720,1280,3)
|
10 |
+
249 100 (720,1280,3)
|
11 |
+
250 100 (720,1280,3)
|
12 |
+
251 100 (720,1280,3)
|
13 |
+
252 100 (720,1280,3)
|
14 |
+
253 100 (720,1280,3)
|
15 |
+
254 100 (720,1280,3)
|
16 |
+
255 100 (720,1280,3)
|
17 |
+
256 100 (720,1280,3)
|
18 |
+
257 100 (720,1280,3)
|
19 |
+
258 100 (720,1280,3)
|
20 |
+
259 100 (720,1280,3)
|
21 |
+
260 100 (720,1280,3)
|
22 |
+
261 100 (720,1280,3)
|
23 |
+
262 100 (720,1280,3)
|
24 |
+
263 100 (720,1280,3)
|
25 |
+
264 100 (720,1280,3)
|
26 |
+
265 100 (720,1280,3)
|
27 |
+
266 100 (720,1280,3)
|
28 |
+
267 100 (720,1280,3)
|
29 |
+
268 100 (720,1280,3)
|
30 |
+
269 100 (720,1280,3)
|
basicsr/data/meta_info/meta_info_Vimeo90K_test_GT.txt
ADDED
The diff for this file is too large to render.
See raw diff
|
|
basicsr/data/meta_info/meta_info_Vimeo90K_test_fast_GT.txt
ADDED
@@ -0,0 +1,1225 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
00001/0625 7 (256,448,3)
|
2 |
+
00001/0632 7 (256,448,3)
|
3 |
+
00001/0807 7 (256,448,3)
|
4 |
+
00001/0832 7 (256,448,3)
|
5 |
+
00001/0834 7 (256,448,3)
|
6 |
+
00001/0836 7 (256,448,3)
|
7 |
+
00002/0004 7 (256,448,3)
|
8 |
+
00002/0112 7 (256,448,3)
|
9 |
+
00002/0116 7 (256,448,3)
|
10 |
+
00002/0123 7 (256,448,3)
|
11 |
+
00002/0455 7 (256,448,3)
|
12 |
+
00002/0602 7 (256,448,3)
|
13 |
+
00002/0976 7 (256,448,3)
|
14 |
+
00002/0980 7 (256,448,3)
|
15 |
+
00002/0983 7 (256,448,3)
|
16 |
+
00002/1000 7 (256,448,3)
|
17 |
+
00003/0022 7 (256,448,3)
|
18 |
+
00003/0031 7 (256,448,3)
|
19 |
+
00003/0035 7 (256,448,3)
|
20 |
+
00003/0041 7 (256,448,3)
|
21 |
+
00003/0073 7 (256,448,3)
|
22 |
+
00003/0107 7 (256,448,3)
|
23 |
+
00003/0111 7 (256,448,3)
|
24 |
+
00003/0114 7 (256,448,3)
|
25 |
+
00003/0117 7 (256,448,3)
|
26 |
+
00003/0121 7 (256,448,3)
|
27 |
+
00003/0499 7 (256,448,3)
|
28 |
+
00003/0501 7 (256,448,3)
|
29 |
+
00003/0507 7 (256,448,3)
|
30 |
+
00003/0510 7 (256,448,3)
|
31 |
+
00003/0517 7 (256,448,3)
|
32 |
+
00003/0522 7 (256,448,3)
|
33 |
+
00003/0531 7 (256,448,3)
|
34 |
+
00003/0533 7 (256,448,3)
|
35 |
+
00003/0534 7 (256,448,3)
|
36 |
+
00003/0682 7 (256,448,3)
|
37 |
+
00003/0687 7 (256,448,3)
|
38 |
+
00003/0715 7 (256,448,3)
|
39 |
+
00003/0742 7 (256,448,3)
|
40 |
+
00003/0751 7 (256,448,3)
|
41 |
+
00003/0984 7 (256,448,3)
|
42 |
+
00004/0042 7 (256,448,3)
|
43 |
+
00004/0165 7 (256,448,3)
|
44 |
+
00004/0321 7 (256,448,3)
|
45 |
+
00004/0569 7 (256,448,3)
|
46 |
+
00004/0572 7 (256,448,3)
|
47 |
+
00004/0619 7 (256,448,3)
|
48 |
+
00004/0776 7 (256,448,3)
|
49 |
+
00004/0780 7 (256,448,3)
|
50 |
+
00004/0825 7 (256,448,3)
|
51 |
+
00004/0832 7 (256,448,3)
|
52 |
+
00004/0853 7 (256,448,3)
|
53 |
+
00004/0876 7 (256,448,3)
|
54 |
+
00004/0888 7 (256,448,3)
|
55 |
+
00005/0015 7 (256,448,3)
|
56 |
+
00005/0021 7 (256,448,3)
|
57 |
+
00005/0022 7 (256,448,3)
|
58 |
+
00005/0024 7 (256,448,3)
|
59 |
+
00005/0026 7 (256,448,3)
|
60 |
+
00005/0394 7 (256,448,3)
|
61 |
+
00005/0403 7 (256,448,3)
|
62 |
+
00005/0531 7 (256,448,3)
|
63 |
+
00005/0546 7 (256,448,3)
|
64 |
+
00005/0554 7 (256,448,3)
|
65 |
+
00005/0694 7 (256,448,3)
|
66 |
+
00005/0700 7 (256,448,3)
|
67 |
+
00005/0740 7 (256,448,3)
|
68 |
+
00005/0826 7 (256,448,3)
|
69 |
+
00005/0832 7 (256,448,3)
|
70 |
+
00005/0834 7 (256,448,3)
|
71 |
+
00005/0943 7 (256,448,3)
|
72 |
+
00006/0184 7 (256,448,3)
|
73 |
+
00006/0205 7 (256,448,3)
|
74 |
+
00006/0206 7 (256,448,3)
|
75 |
+
00006/0211 7 (256,448,3)
|
76 |
+
00006/0271 7 (256,448,3)
|
77 |
+
00006/0273 7 (256,448,3)
|
78 |
+
00006/0277 7 (256,448,3)
|
79 |
+
00006/0283 7 (256,448,3)
|
80 |
+
00006/0287 7 (256,448,3)
|
81 |
+
00006/0298 7 (256,448,3)
|
82 |
+
00006/0310 7 (256,448,3)
|
83 |
+
00006/0356 7 (256,448,3)
|
84 |
+
00006/0357 7 (256,448,3)
|
85 |
+
00006/0544 7 (256,448,3)
|
86 |
+
00006/0565 7 (256,448,3)
|
87 |
+
00006/0569 7 (256,448,3)
|
88 |
+
00006/0573 7 (256,448,3)
|
89 |
+
00006/0592 7 (256,448,3)
|
90 |
+
00006/0613 7 (256,448,3)
|
91 |
+
00006/0633 7 (256,448,3)
|
92 |
+
00006/0637 7 (256,448,3)
|
93 |
+
00006/0646 7 (256,448,3)
|
94 |
+
00006/0649 7 (256,448,3)
|
95 |
+
00006/0655 7 (256,448,3)
|
96 |
+
00006/0658 7 (256,448,3)
|
97 |
+
00006/0662 7 (256,448,3)
|
98 |
+
00006/0666 7 (256,448,3)
|
99 |
+
00006/0673 7 (256,448,3)
|
100 |
+
00007/0248 7 (256,448,3)
|
101 |
+
00007/0253 7 (256,448,3)
|
102 |
+
00007/0430 7 (256,448,3)
|
103 |
+
00007/0434 7 (256,448,3)
|
104 |
+
00007/0436 7 (256,448,3)
|
105 |
+
00007/0452 7 (256,448,3)
|
106 |
+
00007/0464 7 (256,448,3)
|
107 |
+
00007/0470 7 (256,448,3)
|
108 |
+
00007/0472 7 (256,448,3)
|
109 |
+
00007/0483 7 (256,448,3)
|
110 |
+
00007/0484 7 (256,448,3)
|
111 |
+
00007/0493 7 (256,448,3)
|
112 |
+
00007/0508 7 (256,448,3)
|
113 |
+
00007/0514 7 (256,448,3)
|
114 |
+
00007/0697 7 (256,448,3)
|
115 |
+
00007/0698 7 (256,448,3)
|
116 |
+
00007/0744 7 (256,448,3)
|
117 |
+
00007/0775 7 (256,448,3)
|
118 |
+
00007/0786 7 (256,448,3)
|
119 |
+
00007/0790 7 (256,448,3)
|
120 |
+
00007/0800 7 (256,448,3)
|
121 |
+
00007/0833 7 (256,448,3)
|
122 |
+
00007/0867 7 (256,448,3)
|
123 |
+
00007/0879 7 (256,448,3)
|
124 |
+
00007/0899 7 (256,448,3)
|
125 |
+
00008/0251 7 (256,448,3)
|
126 |
+
00008/0322 7 (256,448,3)
|
127 |
+
00008/0971 7 (256,448,3)
|
128 |
+
00008/0976 7 (256,448,3)
|
129 |
+
00009/0016 7 (256,448,3)
|
130 |
+
00009/0036 7 (256,448,3)
|
131 |
+
00009/0037 7 (256,448,3)
|
132 |
+
00009/0609 7 (256,448,3)
|
133 |
+
00009/0812 7 (256,448,3)
|
134 |
+
00009/0821 7 (256,448,3)
|
135 |
+
00009/0947 7 (256,448,3)
|
136 |
+
00009/0952 7 (256,448,3)
|
137 |
+
00009/0955 7 (256,448,3)
|
138 |
+
00009/0970 7 (256,448,3)
|
139 |
+
00010/0072 7 (256,448,3)
|
140 |
+
00010/0074 7 (256,448,3)
|
141 |
+
00010/0079 7 (256,448,3)
|
142 |
+
00010/0085 7 (256,448,3)
|
143 |
+
00010/0139 7 (256,448,3)
|
144 |
+
00010/0140 7 (256,448,3)
|
145 |
+
00010/0183 7 (256,448,3)
|
146 |
+
00010/0200 7 (256,448,3)
|
147 |
+
00010/0223 7 (256,448,3)
|
148 |
+
00010/0305 7 (256,448,3)
|
149 |
+
00010/0323 7 (256,448,3)
|
150 |
+
00010/0338 7 (256,448,3)
|
151 |
+
00010/0342 7 (256,448,3)
|
152 |
+
00010/0350 7 (256,448,3)
|
153 |
+
00010/0356 7 (256,448,3)
|
154 |
+
00010/0362 7 (256,448,3)
|
155 |
+
00010/0366 7 (256,448,3)
|
156 |
+
00010/0375 7 (256,448,3)
|
157 |
+
00010/0404 7 (256,448,3)
|
158 |
+
00010/0407 7 (256,448,3)
|
159 |
+
00010/0414 7 (256,448,3)
|
160 |
+
00010/0418 7 (256,448,3)
|
161 |
+
00010/0429 7 (256,448,3)
|
162 |
+
00010/0557 7 (256,448,3)
|
163 |
+
00010/0564 7 (256,448,3)
|
164 |
+
00010/0733 7 (256,448,3)
|
165 |
+
00010/0935 7 (256,448,3)
|
166 |
+
00010/0939 7 (256,448,3)
|
167 |
+
00010/0943 7 (256,448,3)
|
168 |
+
00011/0242 7 (256,448,3)
|
169 |
+
00011/0259 7 (256,448,3)
|
170 |
+
00011/0263 7 (256,448,3)
|
171 |
+
00011/0266 7 (256,448,3)
|
172 |
+
00011/0278 7 (256,448,3)
|
173 |
+
00011/0890 7 (256,448,3)
|
174 |
+
00011/0894 7 (256,448,3)
|
175 |
+
00011/0903 7 (256,448,3)
|
176 |
+
00011/0906 7 (256,448,3)
|
177 |
+
00011/0913 7 (256,448,3)
|
178 |
+
00012/0011 7 (256,448,3)
|
179 |
+
00012/0014 7 (256,448,3)
|
180 |
+
00012/0126 7 (256,448,3)
|
181 |
+
00012/0127 7 (256,448,3)
|
182 |
+
00012/0526 7 (256,448,3)
|
183 |
+
00012/0551 7 (256,448,3)
|
184 |
+
00012/0896 7 (256,448,3)
|
185 |
+
00012/0910 7 (256,448,3)
|
186 |
+
00012/0915 7 (256,448,3)
|
187 |
+
00013/0167 7 (256,448,3)
|
188 |
+
00013/0794 7 (256,448,3)
|
189 |
+
00013/0807 7 (256,448,3)
|
190 |
+
00013/0846 7 (256,448,3)
|
191 |
+
00013/0882 7 (256,448,3)
|
192 |
+
00013/0889 7 (256,448,3)
|
193 |
+
00013/0910 7 (256,448,3)
|
194 |
+
00013/0913 7 (256,448,3)
|
195 |
+
00013/0924 7 (256,448,3)
|
196 |
+
00013/0931 7 (256,448,3)
|
197 |
+
00013/0944 7 (256,448,3)
|
198 |
+
00013/0955 7 (256,448,3)
|
199 |
+
00013/0962 7 (256,448,3)
|
200 |
+
00013/0969 7 (256,448,3)
|
201 |
+
00014/0012 7 (256,448,3)
|
202 |
+
00014/0025 7 (256,448,3)
|
203 |
+
00014/0473 7 (256,448,3)
|
204 |
+
00014/0499 7 (256,448,3)
|
205 |
+
00014/0524 7 (256,448,3)
|
206 |
+
00014/0739 7 (256,448,3)
|
207 |
+
00014/0753 7 (256,448,3)
|
208 |
+
00014/0771 7 (256,448,3)
|
209 |
+
00014/0832 7 (256,448,3)
|
210 |
+
00014/0836 7 (256,448,3)
|
211 |
+
00014/0838 7 (256,448,3)
|
212 |
+
00014/0839 7 (256,448,3)
|
213 |
+
00014/0843 7 (256,448,3)
|
214 |
+
00014/0846 7 (256,448,3)
|
215 |
+
00014/0849 7 (256,448,3)
|
216 |
+
00014/0859 7 (256,448,3)
|
217 |
+
00014/0880 7 (256,448,3)
|
218 |
+
00014/0906 7 (256,448,3)
|
219 |
+
00015/0030 7 (256,448,3)
|
220 |
+
00015/0067 7 (256,448,3)
|
221 |
+
00015/0084 7 (256,448,3)
|
222 |
+
00015/0190 7 (256,448,3)
|
223 |
+
00015/0575 7 (256,448,3)
|
224 |
+
00015/0784 7 (256,448,3)
|
225 |
+
00015/0855 7 (256,448,3)
|
226 |
+
00015/0904 7 (256,448,3)
|
227 |
+
00015/0914 7 (256,448,3)
|
228 |
+
00015/0936 7 (256,448,3)
|
229 |
+
00015/0939 7 (256,448,3)
|
230 |
+
00015/0943 7 (256,448,3)
|
231 |
+
00015/0957 7 (256,448,3)
|
232 |
+
00016/0131 7 (256,448,3)
|
233 |
+
00016/0173 7 (256,448,3)
|
234 |
+
00016/0320 7 (256,448,3)
|
235 |
+
00016/0328 7 (256,448,3)
|
236 |
+
00016/0334 7 (256,448,3)
|
237 |
+
00016/0338 7 (256,448,3)
|
238 |
+
00016/0339 7 (256,448,3)
|
239 |
+
00016/0345 7 (256,448,3)
|
240 |
+
00016/0365 7 (256,448,3)
|
241 |
+
00016/0584 7 (256,448,3)
|
242 |
+
00016/0634 7 (256,448,3)
|
243 |
+
00017/0342 7 (256,448,3)
|
244 |
+
00017/0346 7 (256,448,3)
|
245 |
+
00017/0350 7 (256,448,3)
|
246 |
+
00017/0766 7 (256,448,3)
|
247 |
+
00017/0786 7 (256,448,3)
|
248 |
+
00017/0911 7 (256,448,3)
|
249 |
+
00017/0914 7 (256,448,3)
|
250 |
+
00018/0217 7 (256,448,3)
|
251 |
+
00018/0258 7 (256,448,3)
|
252 |
+
00018/0307 7 (256,448,3)
|
253 |
+
00018/0480 7 (256,448,3)
|
254 |
+
00018/0491 7 (256,448,3)
|
255 |
+
00018/0994 7 (256,448,3)
|
256 |
+
00018/0995 7 (256,448,3)
|
257 |
+
00018/0997 7 (256,448,3)
|
258 |
+
00018/1000 7 (256,448,3)
|
259 |
+
00019/0007 7 (256,448,3)
|
260 |
+
00019/0016 7 (256,448,3)
|
261 |
+
00019/0026 7 (256,448,3)
|
262 |
+
00019/0030 7 (256,448,3)
|
263 |
+
00019/0086 7 (256,448,3)
|
264 |
+
00019/0089 7 (256,448,3)
|
265 |
+
00019/0111 7 (256,448,3)
|
266 |
+
00019/0285 7 (256,448,3)
|
267 |
+
00019/0415 7 (256,448,3)
|
268 |
+
00019/0434 7 (256,448,3)
|
269 |
+
00019/0437 7 (256,448,3)
|
270 |
+
00019/0568 7 (256,448,3)
|
271 |
+
00019/0570 7 (256,448,3)
|
272 |
+
00019/0591 7 (256,448,3)
|
273 |
+
00019/0596 7 (256,448,3)
|
274 |
+
00019/0603 7 (256,448,3)
|
275 |
+
00019/0607 7 (256,448,3)
|
276 |
+
00019/0637 7 (256,448,3)
|
277 |
+
00019/0644 7 (256,448,3)
|
278 |
+
00019/0647 7 (256,448,3)
|
279 |
+
00019/0787 7 (256,448,3)
|
280 |
+
00019/0993 7 (256,448,3)
|
281 |
+
00019/0998 7 (256,448,3)
|
282 |
+
00021/0232 7 (256,448,3)
|
283 |
+
00021/0255 7 (256,448,3)
|
284 |
+
00021/0646 7 (256,448,3)
|
285 |
+
00021/0653 7 (256,448,3)
|
286 |
+
00021/0657 7 (256,448,3)
|
287 |
+
00021/0668 7 (256,448,3)
|
288 |
+
00021/0672 7 (256,448,3)
|
289 |
+
00021/0725 7 (256,448,3)
|
290 |
+
00021/0750 7 (256,448,3)
|
291 |
+
00021/0764 7 (256,448,3)
|
292 |
+
00021/0821 7 (256,448,3)
|
293 |
+
00022/0192 7 (256,448,3)
|
294 |
+
00022/0391 7 (256,448,3)
|
295 |
+
00022/0514 7 (256,448,3)
|
296 |
+
00022/0567 7 (256,448,3)
|
297 |
+
00022/0674 7 (256,448,3)
|
298 |
+
00022/0686 7 (256,448,3)
|
299 |
+
00022/0700 7 (256,448,3)
|
300 |
+
00023/0020 7 (256,448,3)
|
301 |
+
00023/0024 7 (256,448,3)
|
302 |
+
00023/0025 7 (256,448,3)
|
303 |
+
00023/0042 7 (256,448,3)
|
304 |
+
00023/0050 7 (256,448,3)
|
305 |
+
00023/0094 7 (256,448,3)
|
306 |
+
00023/0107 7 (256,448,3)
|
307 |
+
00023/0635 7 (256,448,3)
|
308 |
+
00023/0698 7 (256,448,3)
|
309 |
+
00023/0774 7 (256,448,3)
|
310 |
+
00023/0795 7 (256,448,3)
|
311 |
+
00023/0821 7 (256,448,3)
|
312 |
+
00023/0839 7 (256,448,3)
|
313 |
+
00023/0846 7 (256,448,3)
|
314 |
+
00023/0869 7 (256,448,3)
|
315 |
+
00023/0879 7 (256,448,3)
|
316 |
+
00023/0887 7 (256,448,3)
|
317 |
+
00023/0899 7 (256,448,3)
|
318 |
+
00023/0910 7 (256,448,3)
|
319 |
+
00023/0920 7 (256,448,3)
|
320 |
+
00023/0929 7 (256,448,3)
|
321 |
+
00023/0941 7 (256,448,3)
|
322 |
+
00023/0942 7 (256,448,3)
|
323 |
+
00023/0952 7 (256,448,3)
|
324 |
+
00024/0066 7 (256,448,3)
|
325 |
+
00024/0072 7 (256,448,3)
|
326 |
+
00024/0080 7 (256,448,3)
|
327 |
+
00024/0093 7 (256,448,3)
|
328 |
+
00024/0107 7 (256,448,3)
|
329 |
+
00024/0262 7 (256,448,3)
|
330 |
+
00024/0283 7 (256,448,3)
|
331 |
+
00024/0294 7 (256,448,3)
|
332 |
+
00024/0296 7 (256,448,3)
|
333 |
+
00024/0304 7 (256,448,3)
|
334 |
+
00024/0315 7 (256,448,3)
|
335 |
+
00024/0322 7 (256,448,3)
|
336 |
+
00024/0648 7 (256,448,3)
|
337 |
+
00024/0738 7 (256,448,3)
|
338 |
+
00024/0743 7 (256,448,3)
|
339 |
+
00025/0542 7 (256,448,3)
|
340 |
+
00025/0769 7 (256,448,3)
|
341 |
+
00025/0984 7 (256,448,3)
|
342 |
+
00025/0985 7 (256,448,3)
|
343 |
+
00025/0989 7 (256,448,3)
|
344 |
+
00025/0991 7 (256,448,3)
|
345 |
+
00026/0009 7 (256,448,3)
|
346 |
+
00026/0013 7 (256,448,3)
|
347 |
+
00026/0020 7 (256,448,3)
|
348 |
+
00026/0021 7 (256,448,3)
|
349 |
+
00026/0025 7 (256,448,3)
|
350 |
+
00026/0135 7 (256,448,3)
|
351 |
+
00026/0200 7 (256,448,3)
|
352 |
+
00026/0297 7 (256,448,3)
|
353 |
+
00026/0306 7 (256,448,3)
|
354 |
+
00026/0444 7 (256,448,3)
|
355 |
+
00026/0450 7 (256,448,3)
|
356 |
+
00026/0453 7 (256,448,3)
|
357 |
+
00026/0464 7 (256,448,3)
|
358 |
+
00026/0486 7 (256,448,3)
|
359 |
+
00026/0773 7 (256,448,3)
|
360 |
+
00026/0785 7 (256,448,3)
|
361 |
+
00026/0836 7 (256,448,3)
|
362 |
+
00026/0838 7 (256,448,3)
|
363 |
+
00026/0848 7 (256,448,3)
|
364 |
+
00026/0885 7 (256,448,3)
|
365 |
+
00026/0893 7 (256,448,3)
|
366 |
+
00026/0939 7 (256,448,3)
|
367 |
+
00026/0942 7 (256,448,3)
|
368 |
+
00027/0092 7 (256,448,3)
|
369 |
+
00027/0112 7 (256,448,3)
|
370 |
+
00027/0115 7 (256,448,3)
|
371 |
+
00027/0143 7 (256,448,3)
|
372 |
+
00027/0175 7 (256,448,3)
|
373 |
+
00027/0179 7 (256,448,3)
|
374 |
+
00027/0183 7 (256,448,3)
|
375 |
+
00027/0197 7 (256,448,3)
|
376 |
+
00027/0199 7 (256,448,3)
|
377 |
+
00027/0300 7 (256,448,3)
|
378 |
+
00028/0015 7 (256,448,3)
|
379 |
+
00028/0032 7 (256,448,3)
|
380 |
+
00028/0048 7 (256,448,3)
|
381 |
+
00028/0068 7 (256,448,3)
|
382 |
+
00028/0219 7 (256,448,3)
|
383 |
+
00028/0606 7 (256,448,3)
|
384 |
+
00028/0626 7 (256,448,3)
|
385 |
+
00028/0748 7 (256,448,3)
|
386 |
+
00028/0764 7 (256,448,3)
|
387 |
+
00028/0772 7 (256,448,3)
|
388 |
+
00028/0780 7 (256,448,3)
|
389 |
+
00028/0926 7 (256,448,3)
|
390 |
+
00028/0947 7 (256,448,3)
|
391 |
+
00028/0962 7 (256,448,3)
|
392 |
+
00029/0085 7 (256,448,3)
|
393 |
+
00029/0281 7 (256,448,3)
|
394 |
+
00029/0284 7 (256,448,3)
|
395 |
+
00029/0288 7 (256,448,3)
|
396 |
+
00029/0294 7 (256,448,3)
|
397 |
+
00029/0364 7 (256,448,3)
|
398 |
+
00029/0369 7 (256,448,3)
|
399 |
+
00029/0421 7 (256,448,3)
|
400 |
+
00029/0425 7 (256,448,3)
|
401 |
+
00029/0550 7 (256,448,3)
|
402 |
+
00030/0014 7 (256,448,3)
|
403 |
+
00030/0101 7 (256,448,3)
|
404 |
+
00030/0143 7 (256,448,3)
|
405 |
+
00030/0351 7 (256,448,3)
|
406 |
+
00030/0356 7 (256,448,3)
|
407 |
+
00030/0371 7 (256,448,3)
|
408 |
+
00030/0484 7 (256,448,3)
|
409 |
+
00030/0492 7 (256,448,3)
|
410 |
+
00030/0503 7 (256,448,3)
|
411 |
+
00030/0682 7 (256,448,3)
|
412 |
+
00030/0696 7 (256,448,3)
|
413 |
+
00030/0735 7 (256,448,3)
|
414 |
+
00030/0737 7 (256,448,3)
|
415 |
+
00030/0868 7 (256,448,3)
|
416 |
+
00031/0161 7 (256,448,3)
|
417 |
+
00031/0180 7 (256,448,3)
|
418 |
+
00031/0194 7 (256,448,3)
|
419 |
+
00031/0253 7 (256,448,3)
|
420 |
+
00031/0293 7 (256,448,3)
|
421 |
+
00031/0466 7 (256,448,3)
|
422 |
+
00031/0477 7 (256,448,3)
|
423 |
+
00031/0549 7 (256,448,3)
|
424 |
+
00031/0600 7 (256,448,3)
|
425 |
+
00031/0617 7 (256,448,3)
|
426 |
+
00031/0649 7 (256,448,3)
|
427 |
+
00032/0015 7 (256,448,3)
|
428 |
+
00032/0020 7 (256,448,3)
|
429 |
+
00032/0023 7 (256,448,3)
|
430 |
+
00032/0048 7 (256,448,3)
|
431 |
+
00032/0056 7 (256,448,3)
|
432 |
+
00032/0872 7 (256,448,3)
|
433 |
+
00033/0069 7 (256,448,3)
|
434 |
+
00033/0073 7 (256,448,3)
|
435 |
+
00033/0078 7 (256,448,3)
|
436 |
+
00033/0079 7 (256,448,3)
|
437 |
+
00033/0086 7 (256,448,3)
|
438 |
+
00033/0088 7 (256,448,3)
|
439 |
+
00033/0091 7 (256,448,3)
|
440 |
+
00033/0096 7 (256,448,3)
|
441 |
+
00033/0607 7 (256,448,3)
|
442 |
+
00033/0613 7 (256,448,3)
|
443 |
+
00033/0616 7 (256,448,3)
|
444 |
+
00033/0619 7 (256,448,3)
|
445 |
+
00033/0626 7 (256,448,3)
|
446 |
+
00033/0628 7 (256,448,3)
|
447 |
+
00033/0637 7 (256,448,3)
|
448 |
+
00033/0686 7 (256,448,3)
|
449 |
+
00033/0842 7 (256,448,3)
|
450 |
+
00034/0261 7 (256,448,3)
|
451 |
+
00034/0265 7 (256,448,3)
|
452 |
+
00034/0269 7 (256,448,3)
|
453 |
+
00034/0275 7 (256,448,3)
|
454 |
+
00034/0286 7 (256,448,3)
|
455 |
+
00034/0294 7 (256,448,3)
|
456 |
+
00034/0431 7 (256,448,3)
|
457 |
+
00034/0577 7 (256,448,3)
|
458 |
+
00034/0685 7 (256,448,3)
|
459 |
+
00034/0687 7 (256,448,3)
|
460 |
+
00034/0703 7 (256,448,3)
|
461 |
+
00034/0715 7 (256,448,3)
|
462 |
+
00034/0935 7 (256,448,3)
|
463 |
+
00034/0943 7 (256,448,3)
|
464 |
+
00034/0963 7 (256,448,3)
|
465 |
+
00034/0979 7 (256,448,3)
|
466 |
+
00034/0990 7 (256,448,3)
|
467 |
+
00035/0129 7 (256,448,3)
|
468 |
+
00035/0153 7 (256,448,3)
|
469 |
+
00035/0156 7 (256,448,3)
|
470 |
+
00035/0474 7 (256,448,3)
|
471 |
+
00035/0507 7 (256,448,3)
|
472 |
+
00035/0532 7 (256,448,3)
|
473 |
+
00035/0560 7 (256,448,3)
|
474 |
+
00035/0572 7 (256,448,3)
|
475 |
+
00035/0587 7 (256,448,3)
|
476 |
+
00035/0588 7 (256,448,3)
|
477 |
+
00035/0640 7 (256,448,3)
|
478 |
+
00035/0654 7 (256,448,3)
|
479 |
+
00035/0655 7 (256,448,3)
|
480 |
+
00035/0737 7 (256,448,3)
|
481 |
+
00035/0843 7 (256,448,3)
|
482 |
+
00035/0932 7 (256,448,3)
|
483 |
+
00035/0957 7 (256,448,3)
|
484 |
+
00036/0029 7 (256,448,3)
|
485 |
+
00036/0266 7 (256,448,3)
|
486 |
+
00036/0276 7 (256,448,3)
|
487 |
+
00036/0310 7 (256,448,3)
|
488 |
+
00036/0314 7 (256,448,3)
|
489 |
+
00036/0320 7 (256,448,3)
|
490 |
+
00036/0333 7 (256,448,3)
|
491 |
+
00036/0348 7 (256,448,3)
|
492 |
+
00036/0357 7 (256,448,3)
|
493 |
+
00036/0360 7 (256,448,3)
|
494 |
+
00036/0368 7 (256,448,3)
|
495 |
+
00036/0371 7 (256,448,3)
|
496 |
+
00036/0378 7 (256,448,3)
|
497 |
+
00036/0391 7 (256,448,3)
|
498 |
+
00036/0440 7 (256,448,3)
|
499 |
+
00036/0731 7 (256,448,3)
|
500 |
+
00036/0733 7 (256,448,3)
|
501 |
+
00036/0741 7 (256,448,3)
|
502 |
+
00036/0743 7 (256,448,3)
|
503 |
+
00036/0927 7 (256,448,3)
|
504 |
+
00036/0931 7 (256,448,3)
|
505 |
+
00036/0933 7 (256,448,3)
|
506 |
+
00036/0938 7 (256,448,3)
|
507 |
+
00036/0944 7 (256,448,3)
|
508 |
+
00036/0946 7 (256,448,3)
|
509 |
+
00036/0951 7 (256,448,3)
|
510 |
+
00036/0953 7 (256,448,3)
|
511 |
+
00036/0963 7 (256,448,3)
|
512 |
+
00036/0964 7 (256,448,3)
|
513 |
+
00036/0981 7 (256,448,3)
|
514 |
+
00036/0991 7 (256,448,3)
|
515 |
+
00037/0072 7 (256,448,3)
|
516 |
+
00037/0079 7 (256,448,3)
|
517 |
+
00037/0132 7 (256,448,3)
|
518 |
+
00037/0135 7 (256,448,3)
|
519 |
+
00037/0137 7 (256,448,3)
|
520 |
+
00037/0141 7 (256,448,3)
|
521 |
+
00037/0229 7 (256,448,3)
|
522 |
+
00037/0234 7 (256,448,3)
|
523 |
+
00037/0239 7 (256,448,3)
|
524 |
+
00037/0242 7 (256,448,3)
|
525 |
+
00037/0254 7 (256,448,3)
|
526 |
+
00037/0269 7 (256,448,3)
|
527 |
+
00037/0276 7 (256,448,3)
|
528 |
+
00037/0279 7 (256,448,3)
|
529 |
+
00037/0286 7 (256,448,3)
|
530 |
+
00037/0345 7 (256,448,3)
|
531 |
+
00037/0449 7 (256,448,3)
|
532 |
+
00037/0450 7 (256,448,3)
|
533 |
+
00037/0820 7 (256,448,3)
|
534 |
+
00037/0824 7 (256,448,3)
|
535 |
+
00037/0859 7 (256,448,3)
|
536 |
+
00037/0899 7 (256,448,3)
|
537 |
+
00037/0906 7 (256,448,3)
|
538 |
+
00038/0535 7 (256,448,3)
|
539 |
+
00038/0572 7 (256,448,3)
|
540 |
+
00038/0675 7 (256,448,3)
|
541 |
+
00038/0731 7 (256,448,3)
|
542 |
+
00038/0732 7 (256,448,3)
|
543 |
+
00038/0744 7 (256,448,3)
|
544 |
+
00038/0755 7 (256,448,3)
|
545 |
+
00039/0002 7 (256,448,3)
|
546 |
+
00039/0013 7 (256,448,3)
|
547 |
+
00039/0247 7 (256,448,3)
|
548 |
+
00039/0489 7 (256,448,3)
|
549 |
+
00039/0504 7 (256,448,3)
|
550 |
+
00039/0558 7 (256,448,3)
|
551 |
+
00039/0686 7 (256,448,3)
|
552 |
+
00039/0727 7 (256,448,3)
|
553 |
+
00039/0769 7 (256,448,3)
|
554 |
+
00040/0081 7 (256,448,3)
|
555 |
+
00040/0082 7 (256,448,3)
|
556 |
+
00040/0402 7 (256,448,3)
|
557 |
+
00040/0407 7 (256,448,3)
|
558 |
+
00040/0408 7 (256,448,3)
|
559 |
+
00040/0410 7 (256,448,3)
|
560 |
+
00040/0411 7 (256,448,3)
|
561 |
+
00040/0412 7 (256,448,3)
|
562 |
+
00040/0413 7 (256,448,3)
|
563 |
+
00040/0415 7 (256,448,3)
|
564 |
+
00040/0421 7 (256,448,3)
|
565 |
+
00040/0422 7 (256,448,3)
|
566 |
+
00040/0426 7 (256,448,3)
|
567 |
+
00040/0438 7 (256,448,3)
|
568 |
+
00040/0439 7 (256,448,3)
|
569 |
+
00040/0440 7 (256,448,3)
|
570 |
+
00040/0443 7 (256,448,3)
|
571 |
+
00040/0457 7 (256,448,3)
|
572 |
+
00040/0459 7 (256,448,3)
|
573 |
+
00040/0725 7 (256,448,3)
|
574 |
+
00040/0727 7 (256,448,3)
|
575 |
+
00040/0936 7 (256,448,3)
|
576 |
+
00040/0959 7 (256,448,3)
|
577 |
+
00040/0964 7 (256,448,3)
|
578 |
+
00040/0968 7 (256,448,3)
|
579 |
+
00040/0974 7 (256,448,3)
|
580 |
+
00040/0978 7 (256,448,3)
|
581 |
+
00040/0979 7 (256,448,3)
|
582 |
+
00040/0989 7 (256,448,3)
|
583 |
+
00040/0993 7 (256,448,3)
|
584 |
+
00040/0994 7 (256,448,3)
|
585 |
+
00040/0997 7 (256,448,3)
|
586 |
+
00041/0001 7 (256,448,3)
|
587 |
+
00041/0007 7 (256,448,3)
|
588 |
+
00041/0019 7 (256,448,3)
|
589 |
+
00041/0040 7 (256,448,3)
|
590 |
+
00041/0350 7 (256,448,3)
|
591 |
+
00041/0357 7 (256,448,3)
|
592 |
+
00041/0393 7 (256,448,3)
|
593 |
+
00041/0890 7 (256,448,3)
|
594 |
+
00041/0909 7 (256,448,3)
|
595 |
+
00041/0915 7 (256,448,3)
|
596 |
+
00041/0933 7 (256,448,3)
|
597 |
+
00042/0017 7 (256,448,3)
|
598 |
+
00042/0332 7 (256,448,3)
|
599 |
+
00042/0346 7 (256,448,3)
|
600 |
+
00042/0350 7 (256,448,3)
|
601 |
+
00042/0356 7 (256,448,3)
|
602 |
+
00042/0382 7 (256,448,3)
|
603 |
+
00042/0389 7 (256,448,3)
|
604 |
+
00042/0539 7 (256,448,3)
|
605 |
+
00042/0546 7 (256,448,3)
|
606 |
+
00042/0550 7 (256,448,3)
|
607 |
+
00042/0553 7 (256,448,3)
|
608 |
+
00042/0555 7 (256,448,3)
|
609 |
+
00042/0560 7 (256,448,3)
|
610 |
+
00042/0570 7 (256,448,3)
|
611 |
+
00043/0119 7 (256,448,3)
|
612 |
+
00043/0122 7 (256,448,3)
|
613 |
+
00043/0168 7 (256,448,3)
|
614 |
+
00043/0274 7 (256,448,3)
|
615 |
+
00043/0304 7 (256,448,3)
|
616 |
+
00043/0731 7 (256,448,3)
|
617 |
+
00043/0735 7 (256,448,3)
|
618 |
+
00043/0739 7 (256,448,3)
|
619 |
+
00043/0740 7 (256,448,3)
|
620 |
+
00044/0212 7 (256,448,3)
|
621 |
+
00044/0432 7 (256,448,3)
|
622 |
+
00044/0934 7 (256,448,3)
|
623 |
+
00044/0940 7 (256,448,3)
|
624 |
+
00044/0987 7 (256,448,3)
|
625 |
+
00045/0004 7 (256,448,3)
|
626 |
+
00045/0009 7 (256,448,3)
|
627 |
+
00045/0011 7 (256,448,3)
|
628 |
+
00045/0019 7 (256,448,3)
|
629 |
+
00045/0023 7 (256,448,3)
|
630 |
+
00045/0289 7 (256,448,3)
|
631 |
+
00045/0760 7 (256,448,3)
|
632 |
+
00045/0779 7 (256,448,3)
|
633 |
+
00045/0816 7 (256,448,3)
|
634 |
+
00045/0820 7 (256,448,3)
|
635 |
+
00046/0132 7 (256,448,3)
|
636 |
+
00046/0350 7 (256,448,3)
|
637 |
+
00046/0356 7 (256,448,3)
|
638 |
+
00046/0357 7 (256,448,3)
|
639 |
+
00046/0379 7 (256,448,3)
|
640 |
+
00046/0410 7 (256,448,3)
|
641 |
+
00046/0412 7 (256,448,3)
|
642 |
+
00046/0481 7 (256,448,3)
|
643 |
+
00046/0497 7 (256,448,3)
|
644 |
+
00046/0510 7 (256,448,3)
|
645 |
+
00046/0515 7 (256,448,3)
|
646 |
+
00046/0529 7 (256,448,3)
|
647 |
+
00046/0544 7 (256,448,3)
|
648 |
+
00046/0545 7 (256,448,3)
|
649 |
+
00046/0552 7 (256,448,3)
|
650 |
+
00046/0559 7 (256,448,3)
|
651 |
+
00046/0589 7 (256,448,3)
|
652 |
+
00046/0642 7 (256,448,3)
|
653 |
+
00046/0724 7 (256,448,3)
|
654 |
+
00046/0758 7 (256,448,3)
|
655 |
+
00046/0930 7 (256,448,3)
|
656 |
+
00046/0953 7 (256,448,3)
|
657 |
+
00047/0013 7 (256,448,3)
|
658 |
+
00047/0014 7 (256,448,3)
|
659 |
+
00047/0017 7 (256,448,3)
|
660 |
+
00047/0076 7 (256,448,3)
|
661 |
+
00047/0151 7 (256,448,3)
|
662 |
+
00047/0797 7 (256,448,3)
|
663 |
+
00048/0014 7 (256,448,3)
|
664 |
+
00048/0021 7 (256,448,3)
|
665 |
+
00048/0026 7 (256,448,3)
|
666 |
+
00048/0030 7 (256,448,3)
|
667 |
+
00048/0039 7 (256,448,3)
|
668 |
+
00048/0045 7 (256,448,3)
|
669 |
+
00048/0049 7 (256,448,3)
|
670 |
+
00048/0145 7 (256,448,3)
|
671 |
+
00048/0188 7 (256,448,3)
|
672 |
+
00048/0302 7 (256,448,3)
|
673 |
+
00048/0361 7 (256,448,3)
|
674 |
+
00048/0664 7 (256,448,3)
|
675 |
+
00048/0672 7 (256,448,3)
|
676 |
+
00048/0681 7 (256,448,3)
|
677 |
+
00048/0689 7 (256,448,3)
|
678 |
+
00048/0690 7 (256,448,3)
|
679 |
+
00048/0691 7 (256,448,3)
|
680 |
+
00048/0711 7 (256,448,3)
|
681 |
+
00049/0085 7 (256,448,3)
|
682 |
+
00049/0810 7 (256,448,3)
|
683 |
+
00049/0858 7 (256,448,3)
|
684 |
+
00049/0865 7 (256,448,3)
|
685 |
+
00049/0871 7 (256,448,3)
|
686 |
+
00049/0903 7 (256,448,3)
|
687 |
+
00049/0928 7 (256,448,3)
|
688 |
+
00050/0092 7 (256,448,3)
|
689 |
+
00050/0101 7 (256,448,3)
|
690 |
+
00050/0108 7 (256,448,3)
|
691 |
+
00050/0112 7 (256,448,3)
|
692 |
+
00050/0120 7 (256,448,3)
|
693 |
+
00050/0128 7 (256,448,3)
|
694 |
+
00050/0383 7 (256,448,3)
|
695 |
+
00050/0395 7 (256,448,3)
|
696 |
+
00050/0405 7 (256,448,3)
|
697 |
+
00050/0632 7 (256,448,3)
|
698 |
+
00050/0648 7 (256,448,3)
|
699 |
+
00050/0649 7 (256,448,3)
|
700 |
+
00050/0659 7 (256,448,3)
|
701 |
+
00050/0699 7 (256,448,3)
|
702 |
+
00050/0708 7 (256,448,3)
|
703 |
+
00050/0716 7 (256,448,3)
|
704 |
+
00050/0758 7 (256,448,3)
|
705 |
+
00050/0761 7 (256,448,3)
|
706 |
+
00051/0572 7 (256,448,3)
|
707 |
+
00052/0163 7 (256,448,3)
|
708 |
+
00052/0242 7 (256,448,3)
|
709 |
+
00052/0260 7 (256,448,3)
|
710 |
+
00052/0322 7 (256,448,3)
|
711 |
+
00052/0333 7 (256,448,3)
|
712 |
+
00052/0806 7 (256,448,3)
|
713 |
+
00052/0813 7 (256,448,3)
|
714 |
+
00052/0821 7 (256,448,3)
|
715 |
+
00052/0830 7 (256,448,3)
|
716 |
+
00052/0914 7 (256,448,3)
|
717 |
+
00052/0923 7 (256,448,3)
|
718 |
+
00052/0959 7 (256,448,3)
|
719 |
+
00053/0288 7 (256,448,3)
|
720 |
+
00053/0290 7 (256,448,3)
|
721 |
+
00053/0323 7 (256,448,3)
|
722 |
+
00053/0337 7 (256,448,3)
|
723 |
+
00053/0340 7 (256,448,3)
|
724 |
+
00053/0437 7 (256,448,3)
|
725 |
+
00053/0595 7 (256,448,3)
|
726 |
+
00053/0739 7 (256,448,3)
|
727 |
+
00053/0761 7 (256,448,3)
|
728 |
+
00054/0014 7 (256,448,3)
|
729 |
+
00054/0017 7 (256,448,3)
|
730 |
+
00054/0178 7 (256,448,3)
|
731 |
+
00054/0183 7 (256,448,3)
|
732 |
+
00054/0196 7 (256,448,3)
|
733 |
+
00054/0205 7 (256,448,3)
|
734 |
+
00054/0214 7 (256,448,3)
|
735 |
+
00054/0289 7 (256,448,3)
|
736 |
+
00054/0453 7 (256,448,3)
|
737 |
+
00054/0498 7 (256,448,3)
|
738 |
+
00054/0502 7 (256,448,3)
|
739 |
+
00054/0514 7 (256,448,3)
|
740 |
+
00054/0773 7 (256,448,3)
|
741 |
+
00055/0001 7 (256,448,3)
|
742 |
+
00055/0115 7 (256,448,3)
|
743 |
+
00055/0118 7 (256,448,3)
|
744 |
+
00055/0171 7 (256,448,3)
|
745 |
+
00055/0214 7 (256,448,3)
|
746 |
+
00055/0354 7 (256,448,3)
|
747 |
+
00055/0449 7 (256,448,3)
|
748 |
+
00055/0473 7 (256,448,3)
|
749 |
+
00055/0649 7 (256,448,3)
|
750 |
+
00055/0800 7 (256,448,3)
|
751 |
+
00055/0803 7 (256,448,3)
|
752 |
+
00055/0990 7 (256,448,3)
|
753 |
+
00056/0041 7 (256,448,3)
|
754 |
+
00056/0120 7 (256,448,3)
|
755 |
+
00056/0293 7 (256,448,3)
|
756 |
+
00056/0357 7 (256,448,3)
|
757 |
+
00056/0506 7 (256,448,3)
|
758 |
+
00056/0561 7 (256,448,3)
|
759 |
+
00056/0567 7 (256,448,3)
|
760 |
+
00056/0575 7 (256,448,3)
|
761 |
+
00057/0175 7 (256,448,3)
|
762 |
+
00057/0495 7 (256,448,3)
|
763 |
+
00057/0498 7 (256,448,3)
|
764 |
+
00057/0506 7 (256,448,3)
|
765 |
+
00057/0612 7 (256,448,3)
|
766 |
+
00057/0620 7 (256,448,3)
|
767 |
+
00057/0623 7 (256,448,3)
|
768 |
+
00057/0635 7 (256,448,3)
|
769 |
+
00057/0773 7 (256,448,3)
|
770 |
+
00057/0778 7 (256,448,3)
|
771 |
+
00057/0867 7 (256,448,3)
|
772 |
+
00057/0976 7 (256,448,3)
|
773 |
+
00057/0980 7 (256,448,3)
|
774 |
+
00057/0985 7 (256,448,3)
|
775 |
+
00057/0992 7 (256,448,3)
|
776 |
+
00058/0009 7 (256,448,3)
|
777 |
+
00058/0076 7 (256,448,3)
|
778 |
+
00058/0078 7 (256,448,3)
|
779 |
+
00058/0279 7 (256,448,3)
|
780 |
+
00058/0283 7 (256,448,3)
|
781 |
+
00058/0286 7 (256,448,3)
|
782 |
+
00058/0350 7 (256,448,3)
|
783 |
+
00058/0380 7 (256,448,3)
|
784 |
+
00061/0132 7 (256,448,3)
|
785 |
+
00061/0141 7 (256,448,3)
|
786 |
+
00061/0156 7 (256,448,3)
|
787 |
+
00061/0159 7 (256,448,3)
|
788 |
+
00061/0168 7 (256,448,3)
|
789 |
+
00061/0170 7 (256,448,3)
|
790 |
+
00061/0186 7 (256,448,3)
|
791 |
+
00061/0219 7 (256,448,3)
|
792 |
+
00061/0227 7 (256,448,3)
|
793 |
+
00061/0238 7 (256,448,3)
|
794 |
+
00061/0256 7 (256,448,3)
|
795 |
+
00061/0303 7 (256,448,3)
|
796 |
+
00061/0312 7 (256,448,3)
|
797 |
+
00061/0313 7 (256,448,3)
|
798 |
+
00061/0325 7 (256,448,3)
|
799 |
+
00061/0367 7 (256,448,3)
|
800 |
+
00061/0369 7 (256,448,3)
|
801 |
+
00061/0387 7 (256,448,3)
|
802 |
+
00061/0396 7 (256,448,3)
|
803 |
+
00061/0486 7 (256,448,3)
|
804 |
+
00061/0895 7 (256,448,3)
|
805 |
+
00061/0897 7 (256,448,3)
|
806 |
+
00062/0846 7 (256,448,3)
|
807 |
+
00063/0156 7 (256,448,3)
|
808 |
+
00063/0184 7 (256,448,3)
|
809 |
+
00063/0191 7 (256,448,3)
|
810 |
+
00063/0334 7 (256,448,3)
|
811 |
+
00063/0350 7 (256,448,3)
|
812 |
+
00063/0499 7 (256,448,3)
|
813 |
+
00063/0878 7 (256,448,3)
|
814 |
+
00064/0004 7 (256,448,3)
|
815 |
+
00064/0264 7 (256,448,3)
|
816 |
+
00064/0735 7 (256,448,3)
|
817 |
+
00064/0738 7 (256,448,3)
|
818 |
+
00065/0105 7 (256,448,3)
|
819 |
+
00065/0169 7 (256,448,3)
|
820 |
+
00065/0305 7 (256,448,3)
|
821 |
+
00065/0324 7 (256,448,3)
|
822 |
+
00065/0353 7 (256,448,3)
|
823 |
+
00065/0520 7 (256,448,3)
|
824 |
+
00065/0533 7 (256,448,3)
|
825 |
+
00065/0545 7 (256,448,3)
|
826 |
+
00065/0551 7 (256,448,3)
|
827 |
+
00065/0568 7 (256,448,3)
|
828 |
+
00065/0603 7 (256,448,3)
|
829 |
+
00065/0884 7 (256,448,3)
|
830 |
+
00065/0988 7 (256,448,3)
|
831 |
+
00066/0002 7 (256,448,3)
|
832 |
+
00066/0011 7 (256,448,3)
|
833 |
+
00066/0031 7 (256,448,3)
|
834 |
+
00066/0037 7 (256,448,3)
|
835 |
+
00066/0136 7 (256,448,3)
|
836 |
+
00066/0137 7 (256,448,3)
|
837 |
+
00066/0150 7 (256,448,3)
|
838 |
+
00066/0166 7 (256,448,3)
|
839 |
+
00066/0178 7 (256,448,3)
|
840 |
+
00066/0357 7 (256,448,3)
|
841 |
+
00066/0428 7 (256,448,3)
|
842 |
+
00066/0483 7 (256,448,3)
|
843 |
+
00066/0600 7 (256,448,3)
|
844 |
+
00066/0863 7 (256,448,3)
|
845 |
+
00066/0873 7 (256,448,3)
|
846 |
+
00066/0875 7 (256,448,3)
|
847 |
+
00066/0899 7 (256,448,3)
|
848 |
+
00067/0020 7 (256,448,3)
|
849 |
+
00067/0025 7 (256,448,3)
|
850 |
+
00067/0132 7 (256,448,3)
|
851 |
+
00067/0492 7 (256,448,3)
|
852 |
+
00067/0726 7 (256,448,3)
|
853 |
+
00067/0734 7 (256,448,3)
|
854 |
+
00067/0744 7 (256,448,3)
|
855 |
+
00067/0754 7 (256,448,3)
|
856 |
+
00067/0779 7 (256,448,3)
|
857 |
+
00068/0078 7 (256,448,3)
|
858 |
+
00068/0083 7 (256,448,3)
|
859 |
+
00068/0113 7 (256,448,3)
|
860 |
+
00068/0117 7 (256,448,3)
|
861 |
+
00068/0121 7 (256,448,3)
|
862 |
+
00068/0206 7 (256,448,3)
|
863 |
+
00068/0261 7 (256,448,3)
|
864 |
+
00068/0321 7 (256,448,3)
|
865 |
+
00068/0354 7 (256,448,3)
|
866 |
+
00068/0380 7 (256,448,3)
|
867 |
+
00068/0419 7 (256,448,3)
|
868 |
+
00068/0547 7 (256,448,3)
|
869 |
+
00068/0561 7 (256,448,3)
|
870 |
+
00068/0565 7 (256,448,3)
|
871 |
+
00068/0583 7 (256,448,3)
|
872 |
+
00068/0599 7 (256,448,3)
|
873 |
+
00068/0739 7 (256,448,3)
|
874 |
+
00068/0743 7 (256,448,3)
|
875 |
+
00068/0754 7 (256,448,3)
|
876 |
+
00068/0812 7 (256,448,3)
|
877 |
+
00069/0178 7 (256,448,3)
|
878 |
+
00070/0025 7 (256,448,3)
|
879 |
+
00070/0030 7 (256,448,3)
|
880 |
+
00070/0036 7 (256,448,3)
|
881 |
+
00070/0042 7 (256,448,3)
|
882 |
+
00070/0078 7 (256,448,3)
|
883 |
+
00070/0079 7 (256,448,3)
|
884 |
+
00070/0362 7 (256,448,3)
|
885 |
+
00071/0195 7 (256,448,3)
|
886 |
+
00071/0210 7 (256,448,3)
|
887 |
+
00071/0211 7 (256,448,3)
|
888 |
+
00071/0221 7 (256,448,3)
|
889 |
+
00071/0352 7 (256,448,3)
|
890 |
+
00071/0354 7 (256,448,3)
|
891 |
+
00071/0366 7 (256,448,3)
|
892 |
+
00071/0454 7 (256,448,3)
|
893 |
+
00071/0464 7 (256,448,3)
|
894 |
+
00071/0487 7 (256,448,3)
|
895 |
+
00071/0502 7 (256,448,3)
|
896 |
+
00071/0561 7 (256,448,3)
|
897 |
+
00071/0676 7 (256,448,3)
|
898 |
+
00071/0808 7 (256,448,3)
|
899 |
+
00071/0813 7 (256,448,3)
|
900 |
+
00071/0836 7 (256,448,3)
|
901 |
+
00072/0286 7 (256,448,3)
|
902 |
+
00072/0290 7 (256,448,3)
|
903 |
+
00072/0298 7 (256,448,3)
|
904 |
+
00072/0302 7 (256,448,3)
|
905 |
+
00072/0333 7 (256,448,3)
|
906 |
+
00072/0590 7 (256,448,3)
|
907 |
+
00072/0793 7 (256,448,3)
|
908 |
+
00072/0803 7 (256,448,3)
|
909 |
+
00072/0833 7 (256,448,3)
|
910 |
+
00073/0049 7 (256,448,3)
|
911 |
+
00073/0050 7 (256,448,3)
|
912 |
+
00073/0388 7 (256,448,3)
|
913 |
+
00073/0480 7 (256,448,3)
|
914 |
+
00073/0485 7 (256,448,3)
|
915 |
+
00073/0611 7 (256,448,3)
|
916 |
+
00073/0616 7 (256,448,3)
|
917 |
+
00073/0714 7 (256,448,3)
|
918 |
+
00073/0724 7 (256,448,3)
|
919 |
+
00073/0730 7 (256,448,3)
|
920 |
+
00074/0034 7 (256,448,3)
|
921 |
+
00074/0228 7 (256,448,3)
|
922 |
+
00074/0239 7 (256,448,3)
|
923 |
+
00074/0275 7 (256,448,3)
|
924 |
+
00074/0527 7 (256,448,3)
|
925 |
+
00074/0620 7 (256,448,3)
|
926 |
+
00074/0764 7 (256,448,3)
|
927 |
+
00074/0849 7 (256,448,3)
|
928 |
+
00074/0893 7 (256,448,3)
|
929 |
+
00075/0333 7 (256,448,3)
|
930 |
+
00075/0339 7 (256,448,3)
|
931 |
+
00075/0347 7 (256,448,3)
|
932 |
+
00075/0399 7 (256,448,3)
|
933 |
+
00075/0478 7 (256,448,3)
|
934 |
+
00075/0494 7 (256,448,3)
|
935 |
+
00075/0678 7 (256,448,3)
|
936 |
+
00075/0688 7 (256,448,3)
|
937 |
+
00075/0706 7 (256,448,3)
|
938 |
+
00075/0709 7 (256,448,3)
|
939 |
+
00075/0748 7 (256,448,3)
|
940 |
+
00075/0769 7 (256,448,3)
|
941 |
+
00075/0777 7 (256,448,3)
|
942 |
+
00075/0781 7 (256,448,3)
|
943 |
+
00076/0151 7 (256,448,3)
|
944 |
+
00076/0159 7 (256,448,3)
|
945 |
+
00076/0164 7 (256,448,3)
|
946 |
+
00076/0265 7 (256,448,3)
|
947 |
+
00076/0269 7 (256,448,3)
|
948 |
+
00076/0433 7 (256,448,3)
|
949 |
+
00076/0813 7 (256,448,3)
|
950 |
+
00076/0817 7 (256,448,3)
|
951 |
+
00076/0818 7 (256,448,3)
|
952 |
+
00076/0827 7 (256,448,3)
|
953 |
+
00076/0874 7 (256,448,3)
|
954 |
+
00076/0880 7 (256,448,3)
|
955 |
+
00076/0891 7 (256,448,3)
|
956 |
+
00076/0894 7 (256,448,3)
|
957 |
+
00076/0909 7 (256,448,3)
|
958 |
+
00076/0913 7 (256,448,3)
|
959 |
+
00076/0926 7 (256,448,3)
|
960 |
+
00076/0962 7 (256,448,3)
|
961 |
+
00076/0973 7 (256,448,3)
|
962 |
+
00076/0986 7 (256,448,3)
|
963 |
+
00077/0617 7 (256,448,3)
|
964 |
+
00077/0623 7 (256,448,3)
|
965 |
+
00077/0628 7 (256,448,3)
|
966 |
+
00077/0629 7 (256,448,3)
|
967 |
+
00077/0631 7 (256,448,3)
|
968 |
+
00077/0639 7 (256,448,3)
|
969 |
+
00077/0982 7 (256,448,3)
|
970 |
+
00077/0984 7 (256,448,3)
|
971 |
+
00077/0995 7 (256,448,3)
|
972 |
+
00077/0998 7 (256,448,3)
|
973 |
+
00078/0001 7 (256,448,3)
|
974 |
+
00078/0015 7 (256,448,3)
|
975 |
+
00078/0157 7 (256,448,3)
|
976 |
+
00078/0161 7 (256,448,3)
|
977 |
+
00078/0175 7 (256,448,3)
|
978 |
+
00078/0178 7 (256,448,3)
|
979 |
+
00078/0189 7 (256,448,3)
|
980 |
+
00078/0192 7 (256,448,3)
|
981 |
+
00078/0229 7 (256,448,3)
|
982 |
+
00078/0237 7 (256,448,3)
|
983 |
+
00078/0241 7 (256,448,3)
|
984 |
+
00078/0249 7 (256,448,3)
|
985 |
+
00078/0251 7 (256,448,3)
|
986 |
+
00078/0254 7 (256,448,3)
|
987 |
+
00078/0258 7 (256,448,3)
|
988 |
+
00078/0311 7 (256,448,3)
|
989 |
+
00078/0603 7 (256,448,3)
|
990 |
+
00078/0607 7 (256,448,3)
|
991 |
+
00078/0824 7 (256,448,3)
|
992 |
+
00079/0045 7 (256,448,3)
|
993 |
+
00079/0048 7 (256,448,3)
|
994 |
+
00079/0054 7 (256,448,3)
|
995 |
+
00080/0050 7 (256,448,3)
|
996 |
+
00080/0488 7 (256,448,3)
|
997 |
+
00080/0494 7 (256,448,3)
|
998 |
+
00080/0496 7 (256,448,3)
|
999 |
+
00080/0499 7 (256,448,3)
|
1000 |
+
00080/0502 7 (256,448,3)
|
1001 |
+
00080/0510 7 (256,448,3)
|
1002 |
+
00080/0534 7 (256,448,3)
|
1003 |
+
00080/0558 7 (256,448,3)
|
1004 |
+
00080/0571 7 (256,448,3)
|
1005 |
+
00080/0709 7 (256,448,3)
|
1006 |
+
00080/0882 7 (256,448,3)
|
1007 |
+
00081/0322 7 (256,448,3)
|
1008 |
+
00081/0428 7 (256,448,3)
|
1009 |
+
00081/0700 7 (256,448,3)
|
1010 |
+
00081/0706 7 (256,448,3)
|
1011 |
+
00081/0707 7 (256,448,3)
|
1012 |
+
00081/0937 7 (256,448,3)
|
1013 |
+
00082/0021 7 (256,448,3)
|
1014 |
+
00082/0424 7 (256,448,3)
|
1015 |
+
00082/0794 7 (256,448,3)
|
1016 |
+
00082/0807 7 (256,448,3)
|
1017 |
+
00082/0810 7 (256,448,3)
|
1018 |
+
00082/0824 7 (256,448,3)
|
1019 |
+
00083/0129 7 (256,448,3)
|
1020 |
+
00083/0131 7 (256,448,3)
|
1021 |
+
00083/0249 7 (256,448,3)
|
1022 |
+
00083/0250 7 (256,448,3)
|
1023 |
+
00083/0656 7 (256,448,3)
|
1024 |
+
00083/0812 7 (256,448,3)
|
1025 |
+
00083/0819 7 (256,448,3)
|
1026 |
+
00083/0824 7 (256,448,3)
|
1027 |
+
00083/0827 7 (256,448,3)
|
1028 |
+
00083/0841 7 (256,448,3)
|
1029 |
+
00083/0963 7 (256,448,3)
|
1030 |
+
00084/0047 7 (256,448,3)
|
1031 |
+
00084/0319 7 (256,448,3)
|
1032 |
+
00084/0334 7 (256,448,3)
|
1033 |
+
00084/0363 7 (256,448,3)
|
1034 |
+
00084/0493 7 (256,448,3)
|
1035 |
+
00084/0655 7 (256,448,3)
|
1036 |
+
00084/0752 7 (256,448,3)
|
1037 |
+
00084/0813 7 (256,448,3)
|
1038 |
+
00084/0886 7 (256,448,3)
|
1039 |
+
00084/0948 7 (256,448,3)
|
1040 |
+
00084/0976 7 (256,448,3)
|
1041 |
+
00085/0512 7 (256,448,3)
|
1042 |
+
00085/0641 7 (256,448,3)
|
1043 |
+
00085/0653 7 (256,448,3)
|
1044 |
+
00085/0655 7 (256,448,3)
|
1045 |
+
00085/0697 7 (256,448,3)
|
1046 |
+
00085/0698 7 (256,448,3)
|
1047 |
+
00085/0700 7 (256,448,3)
|
1048 |
+
00085/0703 7 (256,448,3)
|
1049 |
+
00085/0705 7 (256,448,3)
|
1050 |
+
00085/0709 7 (256,448,3)
|
1051 |
+
00085/0713 7 (256,448,3)
|
1052 |
+
00085/0739 7 (256,448,3)
|
1053 |
+
00085/0750 7 (256,448,3)
|
1054 |
+
00085/0763 7 (256,448,3)
|
1055 |
+
00085/0765 7 (256,448,3)
|
1056 |
+
00085/0769 7 (256,448,3)
|
1057 |
+
00085/0863 7 (256,448,3)
|
1058 |
+
00085/0868 7 (256,448,3)
|
1059 |
+
00085/0927 7 (256,448,3)
|
1060 |
+
00085/0936 7 (256,448,3)
|
1061 |
+
00085/0965 7 (256,448,3)
|
1062 |
+
00085/0969 7 (256,448,3)
|
1063 |
+
00085/0974 7 (256,448,3)
|
1064 |
+
00085/0981 7 (256,448,3)
|
1065 |
+
00085/0982 7 (256,448,3)
|
1066 |
+
00085/1000 7 (256,448,3)
|
1067 |
+
00086/0003 7 (256,448,3)
|
1068 |
+
00086/0009 7 (256,448,3)
|
1069 |
+
00086/0011 7 (256,448,3)
|
1070 |
+
00086/0028 7 (256,448,3)
|
1071 |
+
00086/0032 7 (256,448,3)
|
1072 |
+
00086/0034 7 (256,448,3)
|
1073 |
+
00086/0035 7 (256,448,3)
|
1074 |
+
00086/0042 7 (256,448,3)
|
1075 |
+
00086/0064 7 (256,448,3)
|
1076 |
+
00086/0066 7 (256,448,3)
|
1077 |
+
00086/0095 7 (256,448,3)
|
1078 |
+
00086/0099 7 (256,448,3)
|
1079 |
+
00086/0101 7 (256,448,3)
|
1080 |
+
00086/0104 7 (256,448,3)
|
1081 |
+
00086/0115 7 (256,448,3)
|
1082 |
+
00086/0116 7 (256,448,3)
|
1083 |
+
00086/0284 7 (256,448,3)
|
1084 |
+
00086/0291 7 (256,448,3)
|
1085 |
+
00086/0295 7 (256,448,3)
|
1086 |
+
00086/0302 7 (256,448,3)
|
1087 |
+
00086/0318 7 (256,448,3)
|
1088 |
+
00086/0666 7 (256,448,3)
|
1089 |
+
00086/0797 7 (256,448,3)
|
1090 |
+
00086/0851 7 (256,448,3)
|
1091 |
+
00086/0855 7 (256,448,3)
|
1092 |
+
00086/0874 7 (256,448,3)
|
1093 |
+
00086/0878 7 (256,448,3)
|
1094 |
+
00086/0881 7 (256,448,3)
|
1095 |
+
00086/0883 7 (256,448,3)
|
1096 |
+
00086/0896 7 (256,448,3)
|
1097 |
+
00086/0899 7 (256,448,3)
|
1098 |
+
00086/0903 7 (256,448,3)
|
1099 |
+
00086/0989 7 (256,448,3)
|
1100 |
+
00087/0008 7 (256,448,3)
|
1101 |
+
00087/0429 7 (256,448,3)
|
1102 |
+
00087/0511 7 (256,448,3)
|
1103 |
+
00088/0241 7 (256,448,3)
|
1104 |
+
00088/0319 7 (256,448,3)
|
1105 |
+
00088/0323 7 (256,448,3)
|
1106 |
+
00088/0411 7 (256,448,3)
|
1107 |
+
00088/0427 7 (256,448,3)
|
1108 |
+
00088/0452 7 (256,448,3)
|
1109 |
+
00088/0463 7 (256,448,3)
|
1110 |
+
00088/0476 7 (256,448,3)
|
1111 |
+
00088/0496 7 (256,448,3)
|
1112 |
+
00088/0559 7 (256,448,3)
|
1113 |
+
00089/0058 7 (256,448,3)
|
1114 |
+
00089/0061 7 (256,448,3)
|
1115 |
+
00089/0069 7 (256,448,3)
|
1116 |
+
00089/0077 7 (256,448,3)
|
1117 |
+
00089/0096 7 (256,448,3)
|
1118 |
+
00089/0099 7 (256,448,3)
|
1119 |
+
00089/0100 7 (256,448,3)
|
1120 |
+
00089/0211 7 (256,448,3)
|
1121 |
+
00089/0380 7 (256,448,3)
|
1122 |
+
00089/0381 7 (256,448,3)
|
1123 |
+
00089/0384 7 (256,448,3)
|
1124 |
+
00089/0390 7 (256,448,3)
|
1125 |
+
00089/0393 7 (256,448,3)
|
1126 |
+
00089/0394 7 (256,448,3)
|
1127 |
+
00089/0395 7 (256,448,3)
|
1128 |
+
00089/0406 7 (256,448,3)
|
1129 |
+
00089/0410 7 (256,448,3)
|
1130 |
+
00089/0412 7 (256,448,3)
|
1131 |
+
00089/0703 7 (256,448,3)
|
1132 |
+
00089/0729 7 (256,448,3)
|
1133 |
+
00089/0930 7 (256,448,3)
|
1134 |
+
00089/0952 7 (256,448,3)
|
1135 |
+
00090/0062 7 (256,448,3)
|
1136 |
+
00090/0101 7 (256,448,3)
|
1137 |
+
00090/0213 7 (256,448,3)
|
1138 |
+
00090/0216 7 (256,448,3)
|
1139 |
+
00090/0268 7 (256,448,3)
|
1140 |
+
00090/0406 7 (256,448,3)
|
1141 |
+
00090/0411 7 (256,448,3)
|
1142 |
+
00090/0442 7 (256,448,3)
|
1143 |
+
00090/0535 7 (256,448,3)
|
1144 |
+
00090/0542 7 (256,448,3)
|
1145 |
+
00090/0571 7 (256,448,3)
|
1146 |
+
00090/0934 7 (256,448,3)
|
1147 |
+
00090/0938 7 (256,448,3)
|
1148 |
+
00090/0947 7 (256,448,3)
|
1149 |
+
00091/0066 7 (256,448,3)
|
1150 |
+
00091/0448 7 (256,448,3)
|
1151 |
+
00091/0451 7 (256,448,3)
|
1152 |
+
00091/0454 7 (256,448,3)
|
1153 |
+
00091/0457 7 (256,448,3)
|
1154 |
+
00091/0467 7 (256,448,3)
|
1155 |
+
00091/0470 7 (256,448,3)
|
1156 |
+
00091/0477 7 (256,448,3)
|
1157 |
+
00091/0583 7 (256,448,3)
|
1158 |
+
00091/0981 7 (256,448,3)
|
1159 |
+
00091/0994 7 (256,448,3)
|
1160 |
+
00092/0112 7 (256,448,3)
|
1161 |
+
00092/0119 7 (256,448,3)
|
1162 |
+
00092/0129 7 (256,448,3)
|
1163 |
+
00092/0146 7 (256,448,3)
|
1164 |
+
00092/0149 7 (256,448,3)
|
1165 |
+
00092/0608 7 (256,448,3)
|
1166 |
+
00092/0643 7 (256,448,3)
|
1167 |
+
00092/0646 7 (256,448,3)
|
1168 |
+
00092/0766 7 (256,448,3)
|
1169 |
+
00092/0768 7 (256,448,3)
|
1170 |
+
00092/0779 7 (256,448,3)
|
1171 |
+
00093/0081 7 (256,448,3)
|
1172 |
+
00093/0085 7 (256,448,3)
|
1173 |
+
00093/0135 7 (256,448,3)
|
1174 |
+
00093/0241 7 (256,448,3)
|
1175 |
+
00093/0277 7 (256,448,3)
|
1176 |
+
00093/0283 7 (256,448,3)
|
1177 |
+
00093/0320 7 (256,448,3)
|
1178 |
+
00093/0598 7 (256,448,3)
|
1179 |
+
00094/0159 7 (256,448,3)
|
1180 |
+
00094/0253 7 (256,448,3)
|
1181 |
+
00094/0265 7 (256,448,3)
|
1182 |
+
00094/0267 7 (256,448,3)
|
1183 |
+
00094/0269 7 (256,448,3)
|
1184 |
+
00094/0281 7 (256,448,3)
|
1185 |
+
00094/0293 7 (256,448,3)
|
1186 |
+
00094/0404 7 (256,448,3)
|
1187 |
+
00094/0593 7 (256,448,3)
|
1188 |
+
00094/0612 7 (256,448,3)
|
1189 |
+
00094/0638 7 (256,448,3)
|
1190 |
+
00094/0656 7 (256,448,3)
|
1191 |
+
00094/0668 7 (256,448,3)
|
1192 |
+
00094/0786 7 (256,448,3)
|
1193 |
+
00094/0870 7 (256,448,3)
|
1194 |
+
00094/0897 7 (256,448,3)
|
1195 |
+
00094/0900 7 (256,448,3)
|
1196 |
+
00094/0944 7 (256,448,3)
|
1197 |
+
00094/0946 7 (256,448,3)
|
1198 |
+
00094/0952 7 (256,448,3)
|
1199 |
+
00094/0969 7 (256,448,3)
|
1200 |
+
00094/0973 7 (256,448,3)
|
1201 |
+
00094/0981 7 (256,448,3)
|
1202 |
+
00095/0088 7 (256,448,3)
|
1203 |
+
00095/0125 7 (256,448,3)
|
1204 |
+
00095/0130 7 (256,448,3)
|
1205 |
+
00095/0142 7 (256,448,3)
|
1206 |
+
00095/0151 7 (256,448,3)
|
1207 |
+
00095/0180 7 (256,448,3)
|
1208 |
+
00095/0192 7 (256,448,3)
|
1209 |
+
00095/0194 7 (256,448,3)
|
1210 |
+
00095/0195 7 (256,448,3)
|
1211 |
+
00095/0204 7 (256,448,3)
|
1212 |
+
00095/0245 7 (256,448,3)
|
1213 |
+
00095/0315 7 (256,448,3)
|
1214 |
+
00095/0321 7 (256,448,3)
|
1215 |
+
00095/0324 7 (256,448,3)
|
1216 |
+
00095/0327 7 (256,448,3)
|
1217 |
+
00095/0730 7 (256,448,3)
|
1218 |
+
00095/0731 7 (256,448,3)
|
1219 |
+
00095/0741 7 (256,448,3)
|
1220 |
+
00095/0948 7 (256,448,3)
|
1221 |
+
00096/0407 7 (256,448,3)
|
1222 |
+
00096/0420 7 (256,448,3)
|
1223 |
+
00096/0435 7 (256,448,3)
|
1224 |
+
00096/0682 7 (256,448,3)
|
1225 |
+
00096/0865 7 (256,448,3)
|
basicsr/data/meta_info/meta_info_Vimeo90K_test_medium_GT.txt
ADDED
The diff for this file is too large to render.
See raw diff
|
|
basicsr/data/meta_info/meta_info_Vimeo90K_test_slow_GT.txt
ADDED
@@ -0,0 +1,1613 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
00001/0266 7 (256,448,3)
|
2 |
+
00001/0268 7 (256,448,3)
|
3 |
+
00001/0275 7 (256,448,3)
|
4 |
+
00001/0278 7 (256,448,3)
|
5 |
+
00001/0287 7 (256,448,3)
|
6 |
+
00001/0291 7 (256,448,3)
|
7 |
+
00001/0627 7 (256,448,3)
|
8 |
+
00001/0636 7 (256,448,3)
|
9 |
+
00001/0804 7 (256,448,3)
|
10 |
+
00001/0837 7 (256,448,3)
|
11 |
+
00001/0849 7 (256,448,3)
|
12 |
+
00001/0851 7 (256,448,3)
|
13 |
+
00001/0852 7 (256,448,3)
|
14 |
+
00001/0986 7 (256,448,3)
|
15 |
+
00001/0991 7 (256,448,3)
|
16 |
+
00002/0007 7 (256,448,3)
|
17 |
+
00002/0008 7 (256,448,3)
|
18 |
+
00002/0016 7 (256,448,3)
|
19 |
+
00002/0036 7 (256,448,3)
|
20 |
+
00002/0091 7 (256,448,3)
|
21 |
+
00002/0093 7 (256,448,3)
|
22 |
+
00002/0209 7 (256,448,3)
|
23 |
+
00002/0235 7 (256,448,3)
|
24 |
+
00002/0236 7 (256,448,3)
|
25 |
+
00002/0241 7 (256,448,3)
|
26 |
+
00002/0466 7 (256,448,3)
|
27 |
+
00002/0504 7 (256,448,3)
|
28 |
+
00002/0960 7 (256,448,3)
|
29 |
+
00002/0961 7 (256,448,3)
|
30 |
+
00002/0964 7 (256,448,3)
|
31 |
+
00003/0007 7 (256,448,3)
|
32 |
+
00003/0069 7 (256,448,3)
|
33 |
+
00003/0345 7 (256,448,3)
|
34 |
+
00003/0347 7 (256,448,3)
|
35 |
+
00003/0372 7 (256,448,3)
|
36 |
+
00003/0525 7 (256,448,3)
|
37 |
+
00003/0652 7 (256,448,3)
|
38 |
+
00003/0667 7 (256,448,3)
|
39 |
+
00003/0669 7 (256,448,3)
|
40 |
+
00003/0706 7 (256,448,3)
|
41 |
+
00003/0713 7 (256,448,3)
|
42 |
+
00003/0721 7 (256,448,3)
|
43 |
+
00003/0747 7 (256,448,3)
|
44 |
+
00003/0829 7 (256,448,3)
|
45 |
+
00003/0916 7 (256,448,3)
|
46 |
+
00003/0918 7 (256,448,3)
|
47 |
+
00003/0924 7 (256,448,3)
|
48 |
+
00003/0926 7 (256,448,3)
|
49 |
+
00003/0927 7 (256,448,3)
|
50 |
+
00004/0288 7 (256,448,3)
|
51 |
+
00004/0303 7 (256,448,3)
|
52 |
+
00004/0307 7 (256,448,3)
|
53 |
+
00004/0628 7 (256,448,3)
|
54 |
+
00004/0713 7 (256,448,3)
|
55 |
+
00004/0715 7 (256,448,3)
|
56 |
+
00004/0719 7 (256,448,3)
|
57 |
+
00004/0727 7 (256,448,3)
|
58 |
+
00004/0821 7 (256,448,3)
|
59 |
+
00005/0006 7 (256,448,3)
|
60 |
+
00005/0007 7 (256,448,3)
|
61 |
+
00005/0012 7 (256,448,3)
|
62 |
+
00005/0013 7 (256,448,3)
|
63 |
+
00005/0040 7 (256,448,3)
|
64 |
+
00005/0055 7 (256,448,3)
|
65 |
+
00005/0119 7 (256,448,3)
|
66 |
+
00005/0130 7 (256,448,3)
|
67 |
+
00005/0185 7 (256,448,3)
|
68 |
+
00005/0198 7 (256,448,3)
|
69 |
+
00005/0270 7 (256,448,3)
|
70 |
+
00005/0541 7 (256,448,3)
|
71 |
+
00005/0560 7 (256,448,3)
|
72 |
+
00005/0660 7 (256,448,3)
|
73 |
+
00005/0682 7 (256,448,3)
|
74 |
+
00005/0683 7 (256,448,3)
|
75 |
+
00005/0688 7 (256,448,3)
|
76 |
+
00005/0706 7 (256,448,3)
|
77 |
+
00005/0728 7 (256,448,3)
|
78 |
+
00005/0732 7 (256,448,3)
|
79 |
+
00005/0739 7 (256,448,3)
|
80 |
+
00005/0804 7 (256,448,3)
|
81 |
+
00005/0805 7 (256,448,3)
|
82 |
+
00005/0827 7 (256,448,3)
|
83 |
+
00005/0828 7 (256,448,3)
|
84 |
+
00005/0857 7 (256,448,3)
|
85 |
+
00005/0861 7 (256,448,3)
|
86 |
+
00005/0862 7 (256,448,3)
|
87 |
+
00005/0868 7 (256,448,3)
|
88 |
+
00005/0872 7 (256,448,3)
|
89 |
+
00005/0933 7 (256,448,3)
|
90 |
+
00005/0958 7 (256,448,3)
|
91 |
+
00005/0960 7 (256,448,3)
|
92 |
+
00006/0087 7 (256,448,3)
|
93 |
+
00006/0090 7 (256,448,3)
|
94 |
+
00006/0351 7 (256,448,3)
|
95 |
+
00006/0353 7 (256,448,3)
|
96 |
+
00006/0558 7 (256,448,3)
|
97 |
+
00006/0588 7 (256,448,3)
|
98 |
+
00006/0619 7 (256,448,3)
|
99 |
+
00006/0621 7 (256,448,3)
|
100 |
+
00006/0748 7 (256,448,3)
|
101 |
+
00006/0796 7 (256,448,3)
|
102 |
+
00006/0805 7 (256,448,3)
|
103 |
+
00006/0807 7 (256,448,3)
|
104 |
+
00007/0236 7 (256,448,3)
|
105 |
+
00007/0240 7 (256,448,3)
|
106 |
+
00007/0243 7 (256,448,3)
|
107 |
+
00007/0246 7 (256,448,3)
|
108 |
+
00007/0247 7 (256,448,3)
|
109 |
+
00007/0252 7 (256,448,3)
|
110 |
+
00007/0322 7 (256,448,3)
|
111 |
+
00007/0458 7 (256,448,3)
|
112 |
+
00007/0492 7 (256,448,3)
|
113 |
+
00007/0658 7 (256,448,3)
|
114 |
+
00007/0717 7 (256,448,3)
|
115 |
+
00007/0722 7 (256,448,3)
|
116 |
+
00007/0725 7 (256,448,3)
|
117 |
+
00007/0740 7 (256,448,3)
|
118 |
+
00007/0748 7 (256,448,3)
|
119 |
+
00007/0749 7 (256,448,3)
|
120 |
+
00007/0759 7 (256,448,3)
|
121 |
+
00007/0772 7 (256,448,3)
|
122 |
+
00007/0783 7 (256,448,3)
|
123 |
+
00007/0787 7 (256,448,3)
|
124 |
+
00007/0883 7 (256,448,3)
|
125 |
+
00008/0033 7 (256,448,3)
|
126 |
+
00008/0035 7 (256,448,3)
|
127 |
+
00008/0091 7 (256,448,3)
|
128 |
+
00008/0154 7 (256,448,3)
|
129 |
+
00008/0966 7 (256,448,3)
|
130 |
+
00008/0987 7 (256,448,3)
|
131 |
+
00009/0108 7 (256,448,3)
|
132 |
+
00009/0607 7 (256,448,3)
|
133 |
+
00009/0668 7 (256,448,3)
|
134 |
+
00009/0683 7 (256,448,3)
|
135 |
+
00009/0941 7 (256,448,3)
|
136 |
+
00009/0949 7 (256,448,3)
|
137 |
+
00009/0962 7 (256,448,3)
|
138 |
+
00009/0972 7 (256,448,3)
|
139 |
+
00009/0974 7 (256,448,3)
|
140 |
+
00010/0014 7 (256,448,3)
|
141 |
+
00010/0018 7 (256,448,3)
|
142 |
+
00010/0043 7 (256,448,3)
|
143 |
+
00010/0099 7 (256,448,3)
|
144 |
+
00010/0252 7 (256,448,3)
|
145 |
+
00010/0296 7 (256,448,3)
|
146 |
+
00010/0413 7 (256,448,3)
|
147 |
+
00010/0422 7 (256,448,3)
|
148 |
+
00010/0516 7 (256,448,3)
|
149 |
+
00010/0525 7 (256,448,3)
|
150 |
+
00010/0556 7 (256,448,3)
|
151 |
+
00010/0701 7 (256,448,3)
|
152 |
+
00010/0740 7 (256,448,3)
|
153 |
+
00010/0772 7 (256,448,3)
|
154 |
+
00010/0831 7 (256,448,3)
|
155 |
+
00010/0925 7 (256,448,3)
|
156 |
+
00011/0013 7 (256,448,3)
|
157 |
+
00011/0016 7 (256,448,3)
|
158 |
+
00011/0017 7 (256,448,3)
|
159 |
+
00011/0249 7 (256,448,3)
|
160 |
+
00011/0826 7 (256,448,3)
|
161 |
+
00011/0827 7 (256,448,3)
|
162 |
+
00011/0831 7 (256,448,3)
|
163 |
+
00011/0833 7 (256,448,3)
|
164 |
+
00011/0835 7 (256,448,3)
|
165 |
+
00011/0998 7 (256,448,3)
|
166 |
+
00012/0023 7 (256,448,3)
|
167 |
+
00012/0024 7 (256,448,3)
|
168 |
+
00012/0027 7 (256,448,3)
|
169 |
+
00012/0037 7 (256,448,3)
|
170 |
+
00012/0444 7 (256,448,3)
|
171 |
+
00012/0445 7 (256,448,3)
|
172 |
+
00012/0451 7 (256,448,3)
|
173 |
+
00012/0461 7 (256,448,3)
|
174 |
+
00012/0521 7 (256,448,3)
|
175 |
+
00012/0758 7 (256,448,3)
|
176 |
+
00012/0760 7 (256,448,3)
|
177 |
+
00012/0771 7 (256,448,3)
|
178 |
+
00012/0903 7 (256,448,3)
|
179 |
+
00012/0909 7 (256,448,3)
|
180 |
+
00013/0581 7 (256,448,3)
|
181 |
+
00013/0786 7 (256,448,3)
|
182 |
+
00013/0789 7 (256,448,3)
|
183 |
+
00013/0791 7 (256,448,3)
|
184 |
+
00013/0798 7 (256,448,3)
|
185 |
+
00013/0802 7 (256,448,3)
|
186 |
+
00013/0820 7 (256,448,3)
|
187 |
+
00013/0850 7 (256,448,3)
|
188 |
+
00013/0854 7 (256,448,3)
|
189 |
+
00013/0894 7 (256,448,3)
|
190 |
+
00013/0919 7 (256,448,3)
|
191 |
+
00013/0999 7 (256,448,3)
|
192 |
+
00014/0001 7 (256,448,3)
|
193 |
+
00014/0014 7 (256,448,3)
|
194 |
+
00014/0018 7 (256,448,3)
|
195 |
+
00014/0244 7 (256,448,3)
|
196 |
+
00014/0475 7 (256,448,3)
|
197 |
+
00014/0483 7 (256,448,3)
|
198 |
+
00014/0680 7 (256,448,3)
|
199 |
+
00014/0700 7 (256,448,3)
|
200 |
+
00014/0701 7 (256,448,3)
|
201 |
+
00014/0706 7 (256,448,3)
|
202 |
+
00014/0712 7 (256,448,3)
|
203 |
+
00014/0713 7 (256,448,3)
|
204 |
+
00014/0717 7 (256,448,3)
|
205 |
+
00014/0719 7 (256,448,3)
|
206 |
+
00014/0728 7 (256,448,3)
|
207 |
+
00014/0734 7 (256,448,3)
|
208 |
+
00014/0736 7 (256,448,3)
|
209 |
+
00014/0738 7 (256,448,3)
|
210 |
+
00014/0742 7 (256,448,3)
|
211 |
+
00014/0745 7 (256,448,3)
|
212 |
+
00014/0746 7 (256,448,3)
|
213 |
+
00014/0750 7 (256,448,3)
|
214 |
+
00014/0769 7 (256,448,3)
|
215 |
+
00014/0774 7 (256,448,3)
|
216 |
+
00014/0781 7 (256,448,3)
|
217 |
+
00014/0782 7 (256,448,3)
|
218 |
+
00014/0852 7 (256,448,3)
|
219 |
+
00014/0853 7 (256,448,3)
|
220 |
+
00014/0855 7 (256,448,3)
|
221 |
+
00014/0867 7 (256,448,3)
|
222 |
+
00014/0876 7 (256,448,3)
|
223 |
+
00014/0881 7 (256,448,3)
|
224 |
+
00014/0890 7 (256,448,3)
|
225 |
+
00014/0914 7 (256,448,3)
|
226 |
+
00015/0033 7 (256,448,3)
|
227 |
+
00015/0113 7 (256,448,3)
|
228 |
+
00015/0125 7 (256,448,3)
|
229 |
+
00015/0185 7 (256,448,3)
|
230 |
+
00015/0194 7 (256,448,3)
|
231 |
+
00015/0202 7 (256,448,3)
|
232 |
+
00015/0312 7 (256,448,3)
|
233 |
+
00015/0688 7 (256,448,3)
|
234 |
+
00015/0698 7 (256,448,3)
|
235 |
+
00015/0788 7 (256,448,3)
|
236 |
+
00015/0854 7 (256,448,3)
|
237 |
+
00015/0863 7 (256,448,3)
|
238 |
+
00015/0864 7 (256,448,3)
|
239 |
+
00015/0918 7 (256,448,3)
|
240 |
+
00015/0931 7 (256,448,3)
|
241 |
+
00016/0276 7 (256,448,3)
|
242 |
+
00016/0301 7 (256,448,3)
|
243 |
+
00016/0306 7 (256,448,3)
|
244 |
+
00016/0324 7 (256,448,3)
|
245 |
+
00016/0362 7 (256,448,3)
|
246 |
+
00016/0364 7 (256,448,3)
|
247 |
+
00016/0370 7 (256,448,3)
|
248 |
+
00016/0378 7 (256,448,3)
|
249 |
+
00016/0379 7 (256,448,3)
|
250 |
+
00016/0402 7 (256,448,3)
|
251 |
+
00016/0405 7 (256,448,3)
|
252 |
+
00016/0418 7 (256,448,3)
|
253 |
+
00016/0419 7 (256,448,3)
|
254 |
+
00016/0435 7 (256,448,3)
|
255 |
+
00016/0501 7 (256,448,3)
|
256 |
+
00016/0561 7 (256,448,3)
|
257 |
+
00016/0562 7 (256,448,3)
|
258 |
+
00016/0569 7 (256,448,3)
|
259 |
+
00016/0591 7 (256,448,3)
|
260 |
+
00016/0599 7 (256,448,3)
|
261 |
+
00016/0711 7 (256,448,3)
|
262 |
+
00016/0713 7 (256,448,3)
|
263 |
+
00016/0813 7 (256,448,3)
|
264 |
+
00016/0953 7 (256,448,3)
|
265 |
+
00016/0960 7 (256,448,3)
|
266 |
+
00016/0961 7 (256,448,3)
|
267 |
+
00017/0519 7 (256,448,3)
|
268 |
+
00017/0523 7 (256,448,3)
|
269 |
+
00017/0588 7 (256,448,3)
|
270 |
+
00017/0608 7 (256,448,3)
|
271 |
+
00017/0609 7 (256,448,3)
|
272 |
+
00017/0719 7 (256,448,3)
|
273 |
+
00017/0721 7 (256,448,3)
|
274 |
+
00017/0727 7 (256,448,3)
|
275 |
+
00017/0728 7 (256,448,3)
|
276 |
+
00017/0769 7 (256,448,3)
|
277 |
+
00017/0775 7 (256,448,3)
|
278 |
+
00017/0787 7 (256,448,3)
|
279 |
+
00017/0797 7 (256,448,3)
|
280 |
+
00018/0043 7 (256,448,3)
|
281 |
+
00018/0206 7 (256,448,3)
|
282 |
+
00018/0209 7 (256,448,3)
|
283 |
+
00018/0211 7 (256,448,3)
|
284 |
+
00018/0216 7 (256,448,3)
|
285 |
+
00018/0220 7 (256,448,3)
|
286 |
+
00018/0221 7 (256,448,3)
|
287 |
+
00018/0252 7 (256,448,3)
|
288 |
+
00018/0260 7 (256,448,3)
|
289 |
+
00018/0331 7 (256,448,3)
|
290 |
+
00018/0333 7 (256,448,3)
|
291 |
+
00018/0447 7 (256,448,3)
|
292 |
+
00018/0523 7 (256,448,3)
|
293 |
+
00019/0014 7 (256,448,3)
|
294 |
+
00019/0015 7 (256,448,3)
|
295 |
+
00019/0019 7 (256,448,3)
|
296 |
+
00019/0049 7 (256,448,3)
|
297 |
+
00019/0109 7 (256,448,3)
|
298 |
+
00019/0114 7 (256,448,3)
|
299 |
+
00019/0125 7 (256,448,3)
|
300 |
+
00019/0137 7 (256,448,3)
|
301 |
+
00019/0140 7 (256,448,3)
|
302 |
+
00019/0148 7 (256,448,3)
|
303 |
+
00019/0153 7 (256,448,3)
|
304 |
+
00019/0155 7 (256,448,3)
|
305 |
+
00019/0158 7 (256,448,3)
|
306 |
+
00019/0159 7 (256,448,3)
|
307 |
+
00019/0160 7 (256,448,3)
|
308 |
+
00019/0162 7 (256,448,3)
|
309 |
+
00019/0279 7 (256,448,3)
|
310 |
+
00019/0282 7 (256,448,3)
|
311 |
+
00019/0409 7 (256,448,3)
|
312 |
+
00019/0427 7 (256,448,3)
|
313 |
+
00019/0430 7 (256,448,3)
|
314 |
+
00019/0545 7 (256,448,3)
|
315 |
+
00019/0555 7 (256,448,3)
|
316 |
+
00019/0558 7 (256,448,3)
|
317 |
+
00019/0650 7 (256,448,3)
|
318 |
+
00019/0681 7 (256,448,3)
|
319 |
+
00019/0747 7 (256,448,3)
|
320 |
+
00019/0748 7 (256,448,3)
|
321 |
+
00019/0749 7 (256,448,3)
|
322 |
+
00019/0752 7 (256,448,3)
|
323 |
+
00019/0768 7 (256,448,3)
|
324 |
+
00019/0772 7 (256,448,3)
|
325 |
+
00019/0773 7 (256,448,3)
|
326 |
+
00019/0777 7 (256,448,3)
|
327 |
+
00019/0795 7 (256,448,3)
|
328 |
+
00019/0806 7 (256,448,3)
|
329 |
+
00019/0815 7 (256,448,3)
|
330 |
+
00019/0840 7 (256,448,3)
|
331 |
+
00019/0844 7 (256,448,3)
|
332 |
+
00019/0848 7 (256,448,3)
|
333 |
+
00019/0853 7 (256,448,3)
|
334 |
+
00019/0863 7 (256,448,3)
|
335 |
+
00019/0888 7 (256,448,3)
|
336 |
+
00019/0894 7 (256,448,3)
|
337 |
+
00019/0901 7 (256,448,3)
|
338 |
+
00019/0995 7 (256,448,3)
|
339 |
+
00021/0030 7 (256,448,3)
|
340 |
+
00021/0035 7 (256,448,3)
|
341 |
+
00021/0039 7 (256,448,3)
|
342 |
+
00021/0041 7 (256,448,3)
|
343 |
+
00021/0044 7 (256,448,3)
|
344 |
+
00021/0045 7 (256,448,3)
|
345 |
+
00021/0264 7 (256,448,3)
|
346 |
+
00021/0330 7 (256,448,3)
|
347 |
+
00021/0332 7 (256,448,3)
|
348 |
+
00021/0333 7 (256,448,3)
|
349 |
+
00021/0336 7 (256,448,3)
|
350 |
+
00021/0337 7 (256,448,3)
|
351 |
+
00021/0338 7 (256,448,3)
|
352 |
+
00021/0343 7 (256,448,3)
|
353 |
+
00021/0472 7 (256,448,3)
|
354 |
+
00021/0667 7 (256,448,3)
|
355 |
+
00021/0731 7 (256,448,3)
|
356 |
+
00021/0779 7 (256,448,3)
|
357 |
+
00021/0805 7 (256,448,3)
|
358 |
+
00021/0814 7 (256,448,3)
|
359 |
+
00021/0818 7 (256,448,3)
|
360 |
+
00021/0874 7 (256,448,3)
|
361 |
+
00022/0008 7 (256,448,3)
|
362 |
+
00022/0010 7 (256,448,3)
|
363 |
+
00022/0231 7 (256,448,3)
|
364 |
+
00022/0323 7 (256,448,3)
|
365 |
+
00022/0337 7 (256,448,3)
|
366 |
+
00022/0359 7 (256,448,3)
|
367 |
+
00022/0377 7 (256,448,3)
|
368 |
+
00022/0378 7 (256,448,3)
|
369 |
+
00022/0385 7 (256,448,3)
|
370 |
+
00022/0393 7 (256,448,3)
|
371 |
+
00022/0424 7 (256,448,3)
|
372 |
+
00022/0582 7 (256,448,3)
|
373 |
+
00022/0583 7 (256,448,3)
|
374 |
+
00022/0605 7 (256,448,3)
|
375 |
+
00022/0632 7 (256,448,3)
|
376 |
+
00022/0633 7 (256,448,3)
|
377 |
+
00022/0666 7 (256,448,3)
|
378 |
+
00022/0671 7 (256,448,3)
|
379 |
+
00022/0673 7 (256,448,3)
|
380 |
+
00022/0702 7 (256,448,3)
|
381 |
+
00022/0852 7 (256,448,3)
|
382 |
+
00022/0853 7 (256,448,3)
|
383 |
+
00022/0971 7 (256,448,3)
|
384 |
+
00023/0037 7 (256,448,3)
|
385 |
+
00023/0224 7 (256,448,3)
|
386 |
+
00023/0308 7 (256,448,3)
|
387 |
+
00023/0393 7 (256,448,3)
|
388 |
+
00023/0633 7 (256,448,3)
|
389 |
+
00023/0637 7 (256,448,3)
|
390 |
+
00023/0638 7 (256,448,3)
|
391 |
+
00023/0770 7 (256,448,3)
|
392 |
+
00023/0786 7 (256,448,3)
|
393 |
+
00023/0898 7 (256,448,3)
|
394 |
+
00024/0247 7 (256,448,3)
|
395 |
+
00024/0251 7 (256,448,3)
|
396 |
+
00024/0267 7 (256,448,3)
|
397 |
+
00024/0288 7 (256,448,3)
|
398 |
+
00024/0530 7 (256,448,3)
|
399 |
+
00024/0569 7 (256,448,3)
|
400 |
+
00024/0587 7 (256,448,3)
|
401 |
+
00024/0730 7 (256,448,3)
|
402 |
+
00024/0736 7 (256,448,3)
|
403 |
+
00024/0742 7 (256,448,3)
|
404 |
+
00024/0832 7 (256,448,3)
|
405 |
+
00024/0936 7 (256,448,3)
|
406 |
+
00025/0044 7 (256,448,3)
|
407 |
+
00025/0047 7 (256,448,3)
|
408 |
+
00025/0540 7 (256,448,3)
|
409 |
+
00025/0552 7 (256,448,3)
|
410 |
+
00025/0554 7 (256,448,3)
|
411 |
+
00025/0559 7 (256,448,3)
|
412 |
+
00025/0572 7 (256,448,3)
|
413 |
+
00025/0576 7 (256,448,3)
|
414 |
+
00025/0699 7 (256,448,3)
|
415 |
+
00025/0709 7 (256,448,3)
|
416 |
+
00025/0743 7 (256,448,3)
|
417 |
+
00025/0767 7 (256,448,3)
|
418 |
+
00025/0780 7 (256,448,3)
|
419 |
+
00025/0782 7 (256,448,3)
|
420 |
+
00025/0784 7 (256,448,3)
|
421 |
+
00025/0791 7 (256,448,3)
|
422 |
+
00025/0889 7 (256,448,3)
|
423 |
+
00025/0890 7 (256,448,3)
|
424 |
+
00025/0894 7 (256,448,3)
|
425 |
+
00025/0896 7 (256,448,3)
|
426 |
+
00025/0898 7 (256,448,3)
|
427 |
+
00025/0905 7 (256,448,3)
|
428 |
+
00025/0999 7 (256,448,3)
|
429 |
+
00026/0003 7 (256,448,3)
|
430 |
+
00026/0005 7 (256,448,3)
|
431 |
+
00026/0011 7 (256,448,3)
|
432 |
+
00026/0017 7 (256,448,3)
|
433 |
+
00026/0036 7 (256,448,3)
|
434 |
+
00026/0129 7 (256,448,3)
|
435 |
+
00026/0131 7 (256,448,3)
|
436 |
+
00026/0161 7 (256,448,3)
|
437 |
+
00026/0177 7 (256,448,3)
|
438 |
+
00026/0178 7 (256,448,3)
|
439 |
+
00026/0180 7 (256,448,3)
|
440 |
+
00026/0298 7 (256,448,3)
|
441 |
+
00026/0307 7 (256,448,3)
|
442 |
+
00026/0308 7 (256,448,3)
|
443 |
+
00026/0312 7 (256,448,3)
|
444 |
+
00026/0352 7 (256,448,3)
|
445 |
+
00026/0440 7 (256,448,3)
|
446 |
+
00026/0706 7 (256,448,3)
|
447 |
+
00026/0708 7 (256,448,3)
|
448 |
+
00026/0715 7 (256,448,3)
|
449 |
+
00026/0769 7 (256,448,3)
|
450 |
+
00026/0777 7 (256,448,3)
|
451 |
+
00026/0779 7 (256,448,3)
|
452 |
+
00026/0789 7 (256,448,3)
|
453 |
+
00026/0924 7 (256,448,3)
|
454 |
+
00026/0928 7 (256,448,3)
|
455 |
+
00026/0932 7 (256,448,3)
|
456 |
+
00026/0935 7 (256,448,3)
|
457 |
+
00027/0118 7 (256,448,3)
|
458 |
+
00027/0121 7 (256,448,3)
|
459 |
+
00027/0155 7 (256,448,3)
|
460 |
+
00027/0168 7 (256,448,3)
|
461 |
+
00027/0196 7 (256,448,3)
|
462 |
+
00027/0289 7 (256,448,3)
|
463 |
+
00027/0294 7 (256,448,3)
|
464 |
+
00027/0803 7 (256,448,3)
|
465 |
+
00028/0016 7 (256,448,3)
|
466 |
+
00028/0045 7 (256,448,3)
|
467 |
+
00028/0063 7 (256,448,3)
|
468 |
+
00028/0601 7 (256,448,3)
|
469 |
+
00028/0638 7 (256,448,3)
|
470 |
+
00028/0733 7 (256,448,3)
|
471 |
+
00028/0736 7 (256,448,3)
|
472 |
+
00028/0741 7 (256,448,3)
|
473 |
+
00028/0753 7 (256,448,3)
|
474 |
+
00028/0770 7 (256,448,3)
|
475 |
+
00028/0771 7 (256,448,3)
|
476 |
+
00028/0777 7 (256,448,3)
|
477 |
+
00028/0950 7 (256,448,3)
|
478 |
+
00028/0951 7 (256,448,3)
|
479 |
+
00029/0048 7 (256,448,3)
|
480 |
+
00029/0060 7 (256,448,3)
|
481 |
+
00029/0362 7 (256,448,3)
|
482 |
+
00029/0399 7 (256,448,3)
|
483 |
+
00029/0404 7 (256,448,3)
|
484 |
+
00029/0412 7 (256,448,3)
|
485 |
+
00029/0416 7 (256,448,3)
|
486 |
+
00029/0418 7 (256,448,3)
|
487 |
+
00029/0428 7 (256,448,3)
|
488 |
+
00030/0131 7 (256,448,3)
|
489 |
+
00030/0135 7 (256,448,3)
|
490 |
+
00030/0150 7 (256,448,3)
|
491 |
+
00030/0245 7 (256,448,3)
|
492 |
+
00030/0339 7 (256,448,3)
|
493 |
+
00030/0472 7 (256,448,3)
|
494 |
+
00030/0482 7 (256,448,3)
|
495 |
+
00030/0500 7 (256,448,3)
|
496 |
+
00030/0501 7 (256,448,3)
|
497 |
+
00030/0697 7 (256,448,3)
|
498 |
+
00030/0707 7 (256,448,3)
|
499 |
+
00030/0733 7 (256,448,3)
|
500 |
+
00030/0743 7 (256,448,3)
|
501 |
+
00030/0747 7 (256,448,3)
|
502 |
+
00030/0754 7 (256,448,3)
|
503 |
+
00030/0755 7 (256,448,3)
|
504 |
+
00030/0759 7 (256,448,3)
|
505 |
+
00030/0762 7 (256,448,3)
|
506 |
+
00030/0764 7 (256,448,3)
|
507 |
+
00030/0767 7 (256,448,3)
|
508 |
+
00030/0794 7 (256,448,3)
|
509 |
+
00030/0796 7 (256,448,3)
|
510 |
+
00030/0799 7 (256,448,3)
|
511 |
+
00030/0814 7 (256,448,3)
|
512 |
+
00030/0823 7 (256,448,3)
|
513 |
+
00030/0829 7 (256,448,3)
|
514 |
+
00030/0833 7 (256,448,3)
|
515 |
+
00030/0848 7 (256,448,3)
|
516 |
+
00030/0853 7 (256,448,3)
|
517 |
+
00030/0861 7 (256,448,3)
|
518 |
+
00031/0182 7 (256,448,3)
|
519 |
+
00031/0275 7 (256,448,3)
|
520 |
+
00031/0279 7 (256,448,3)
|
521 |
+
00031/0555 7 (256,448,3)
|
522 |
+
00031/0648 7 (256,448,3)
|
523 |
+
00031/0663 7 (256,448,3)
|
524 |
+
00031/0680 7 (256,448,3)
|
525 |
+
00031/0880 7 (256,448,3)
|
526 |
+
00031/0922 7 (256,448,3)
|
527 |
+
00031/0925 7 (256,448,3)
|
528 |
+
00031/0928 7 (256,448,3)
|
529 |
+
00032/0025 7 (256,448,3)
|
530 |
+
00032/0377 7 (256,448,3)
|
531 |
+
00032/0378 7 (256,448,3)
|
532 |
+
00032/0382 7 (256,448,3)
|
533 |
+
00032/0384 7 (256,448,3)
|
534 |
+
00032/0386 7 (256,448,3)
|
535 |
+
00032/0389 7 (256,448,3)
|
536 |
+
00032/0391 7 (256,448,3)
|
537 |
+
00032/0393 7 (256,448,3)
|
538 |
+
00032/0492 7 (256,448,3)
|
539 |
+
00032/0497 7 (256,448,3)
|
540 |
+
00032/0505 7 (256,448,3)
|
541 |
+
00032/0523 7 (256,448,3)
|
542 |
+
00032/0542 7 (256,448,3)
|
543 |
+
00032/0544 7 (256,448,3)
|
544 |
+
00032/0712 7 (256,448,3)
|
545 |
+
00032/0847 7 (256,448,3)
|
546 |
+
00032/0850 7 (256,448,3)
|
547 |
+
00032/0875 7 (256,448,3)
|
548 |
+
00033/0062 7 (256,448,3)
|
549 |
+
00033/0063 7 (256,448,3)
|
550 |
+
00033/0098 7 (256,448,3)
|
551 |
+
00033/0101 7 (256,448,3)
|
552 |
+
00033/0105 7 (256,448,3)
|
553 |
+
00033/0114 7 (256,448,3)
|
554 |
+
00033/0432 7 (256,448,3)
|
555 |
+
00033/0441 7 (256,448,3)
|
556 |
+
00033/0606 7 (256,448,3)
|
557 |
+
00033/0611 7 (256,448,3)
|
558 |
+
00033/0634 7 (256,448,3)
|
559 |
+
00033/0787 7 (256,448,3)
|
560 |
+
00033/0792 7 (256,448,3)
|
561 |
+
00033/0802 7 (256,448,3)
|
562 |
+
00033/0825 7 (256,448,3)
|
563 |
+
00033/0835 7 (256,448,3)
|
564 |
+
00034/0249 7 (256,448,3)
|
565 |
+
00034/0253 7 (256,448,3)
|
566 |
+
00034/0254 7 (256,448,3)
|
567 |
+
00034/0282 7 (256,448,3)
|
568 |
+
00034/0318 7 (256,448,3)
|
569 |
+
00034/0319 7 (256,448,3)
|
570 |
+
00034/0323 7 (256,448,3)
|
571 |
+
00034/0336 7 (256,448,3)
|
572 |
+
00034/0348 7 (256,448,3)
|
573 |
+
00034/0356 7 (256,448,3)
|
574 |
+
00034/0379 7 (256,448,3)
|
575 |
+
00034/0387 7 (256,448,3)
|
576 |
+
00034/0575 7 (256,448,3)
|
577 |
+
00034/0608 7 (256,448,3)
|
578 |
+
00034/0663 7 (256,448,3)
|
579 |
+
00034/0811 7 (256,448,3)
|
580 |
+
00034/0812 7 (256,448,3)
|
581 |
+
00034/0946 7 (256,448,3)
|
582 |
+
00034/0948 7 (256,448,3)
|
583 |
+
00034/0950 7 (256,448,3)
|
584 |
+
00035/0204 7 (256,448,3)
|
585 |
+
00035/0243 7 (256,448,3)
|
586 |
+
00035/0308 7 (256,448,3)
|
587 |
+
00035/0465 7 (256,448,3)
|
588 |
+
00035/0478 7 (256,448,3)
|
589 |
+
00035/0523 7 (256,448,3)
|
590 |
+
00035/0540 7 (256,448,3)
|
591 |
+
00035/0544 7 (256,448,3)
|
592 |
+
00035/0556 7 (256,448,3)
|
593 |
+
00035/0568 7 (256,448,3)
|
594 |
+
00035/0570 7 (256,448,3)
|
595 |
+
00035/0609 7 (256,448,3)
|
596 |
+
00035/0643 7 (256,448,3)
|
597 |
+
00035/0644 7 (256,448,3)
|
598 |
+
00035/0645 7 (256,448,3)
|
599 |
+
00035/0646 7 (256,448,3)
|
600 |
+
00035/0650 7 (256,448,3)
|
601 |
+
00035/0661 7 (256,448,3)
|
602 |
+
00035/0724 7 (256,448,3)
|
603 |
+
00035/0725 7 (256,448,3)
|
604 |
+
00035/0850 7 (256,448,3)
|
605 |
+
00035/0863 7 (256,448,3)
|
606 |
+
00035/0870 7 (256,448,3)
|
607 |
+
00035/0951 7 (256,448,3)
|
608 |
+
00036/0038 7 (256,448,3)
|
609 |
+
00036/0062 7 (256,448,3)
|
610 |
+
00036/0423 7 (256,448,3)
|
611 |
+
00036/0737 7 (256,448,3)
|
612 |
+
00036/0750 7 (256,448,3)
|
613 |
+
00036/0751 7 (256,448,3)
|
614 |
+
00036/0754 7 (256,448,3)
|
615 |
+
00036/0929 7 (256,448,3)
|
616 |
+
00037/0085 7 (256,448,3)
|
617 |
+
00037/0113 7 (256,448,3)
|
618 |
+
00037/0130 7 (256,448,3)
|
619 |
+
00037/0153 7 (256,448,3)
|
620 |
+
00037/0169 7 (256,448,3)
|
621 |
+
00037/0263 7 (256,448,3)
|
622 |
+
00037/0272 7 (256,448,3)
|
623 |
+
00037/0273 7 (256,448,3)
|
624 |
+
00037/0275 7 (256,448,3)
|
625 |
+
00037/0280 7 (256,448,3)
|
626 |
+
00037/0399 7 (256,448,3)
|
627 |
+
00037/0456 7 (256,448,3)
|
628 |
+
00037/0853 7 (256,448,3)
|
629 |
+
00037/0855 7 (256,448,3)
|
630 |
+
00037/0856 7 (256,448,3)
|
631 |
+
00037/0857 7 (256,448,3)
|
632 |
+
00037/0925 7 (256,448,3)
|
633 |
+
00037/0947 7 (256,448,3)
|
634 |
+
00038/0148 7 (256,448,3)
|
635 |
+
00038/0533 7 (256,448,3)
|
636 |
+
00038/0534 7 (256,448,3)
|
637 |
+
00038/0560 7 (256,448,3)
|
638 |
+
00038/0562 7 (256,448,3)
|
639 |
+
00038/0566 7 (256,448,3)
|
640 |
+
00038/0578 7 (256,448,3)
|
641 |
+
00038/0652 7 (256,448,3)
|
642 |
+
00038/0674 7 (256,448,3)
|
643 |
+
00038/0685 7 (256,448,3)
|
644 |
+
00038/0686 7 (256,448,3)
|
645 |
+
00038/0692 7 (256,448,3)
|
646 |
+
00038/0736 7 (256,448,3)
|
647 |
+
00039/0035 7 (256,448,3)
|
648 |
+
00039/0105 7 (256,448,3)
|
649 |
+
00039/0109 7 (256,448,3)
|
650 |
+
00039/0121 7 (256,448,3)
|
651 |
+
00039/0128 7 (256,448,3)
|
652 |
+
00039/0129 7 (256,448,3)
|
653 |
+
00039/0132 7 (256,448,3)
|
654 |
+
00039/0137 7 (256,448,3)
|
655 |
+
00039/0157 7 (256,448,3)
|
656 |
+
00039/0496 7 (256,448,3)
|
657 |
+
00039/0502 7 (256,448,3)
|
658 |
+
00039/0526 7 (256,448,3)
|
659 |
+
00039/0529 7 (256,448,3)
|
660 |
+
00039/0682 7 (256,448,3)
|
661 |
+
00039/0690 7 (256,448,3)
|
662 |
+
00039/0693 7 (256,448,3)
|
663 |
+
00039/0703 7 (256,448,3)
|
664 |
+
00039/0725 7 (256,448,3)
|
665 |
+
00039/0734 7 (256,448,3)
|
666 |
+
00040/0518 7 (256,448,3)
|
667 |
+
00040/0728 7 (256,448,3)
|
668 |
+
00040/0774 7 (256,448,3)
|
669 |
+
00040/0812 7 (256,448,3)
|
670 |
+
00040/0818 7 (256,448,3)
|
671 |
+
00040/0827 7 (256,448,3)
|
672 |
+
00040/0914 7 (256,448,3)
|
673 |
+
00040/0917 7 (256,448,3)
|
674 |
+
00040/0918 7 (256,448,3)
|
675 |
+
00040/0924 7 (256,448,3)
|
676 |
+
00040/0925 7 (256,448,3)
|
677 |
+
00041/0004 7 (256,448,3)
|
678 |
+
00041/0006 7 (256,448,3)
|
679 |
+
00041/0013 7 (256,448,3)
|
680 |
+
00041/0059 7 (256,448,3)
|
681 |
+
00041/0110 7 (256,448,3)
|
682 |
+
00041/0291 7 (256,448,3)
|
683 |
+
00041/0366 7 (256,448,3)
|
684 |
+
00041/0388 7 (256,448,3)
|
685 |
+
00041/0434 7 (256,448,3)
|
686 |
+
00041/0436 7 (256,448,3)
|
687 |
+
00041/0450 7 (256,448,3)
|
688 |
+
00041/0457 7 (256,448,3)
|
689 |
+
00041/0460 7 (256,448,3)
|
690 |
+
00041/0468 7 (256,448,3)
|
691 |
+
00041/0471 7 (256,448,3)
|
692 |
+
00041/0474 7 (256,448,3)
|
693 |
+
00041/0809 7 (256,448,3)
|
694 |
+
00041/0844 7 (256,448,3)
|
695 |
+
00041/0858 7 (256,448,3)
|
696 |
+
00041/0874 7 (256,448,3)
|
697 |
+
00041/0876 7 (256,448,3)
|
698 |
+
00042/0020 7 (256,448,3)
|
699 |
+
00042/0205 7 (256,448,3)
|
700 |
+
00042/0206 7 (256,448,3)
|
701 |
+
00042/0432 7 (256,448,3)
|
702 |
+
00042/0563 7 (256,448,3)
|
703 |
+
00042/0569 7 (256,448,3)
|
704 |
+
00042/0575 7 (256,448,3)
|
705 |
+
00042/0576 7 (256,448,3)
|
706 |
+
00042/0888 7 (256,448,3)
|
707 |
+
00042/0892 7 (256,448,3)
|
708 |
+
00042/0943 7 (256,448,3)
|
709 |
+
00042/0944 7 (256,448,3)
|
710 |
+
00043/0126 7 (256,448,3)
|
711 |
+
00043/0130 7 (256,448,3)
|
712 |
+
00043/0136 7 (256,448,3)
|
713 |
+
00043/0233 7 (256,448,3)
|
714 |
+
00043/0235 7 (256,448,3)
|
715 |
+
00043/0237 7 (256,448,3)
|
716 |
+
00043/0277 7 (256,448,3)
|
717 |
+
00043/0301 7 (256,448,3)
|
718 |
+
00043/0302 7 (256,448,3)
|
719 |
+
00043/0303 7 (256,448,3)
|
720 |
+
00043/0308 7 (256,448,3)
|
721 |
+
00043/0309 7 (256,448,3)
|
722 |
+
00043/0314 7 (256,448,3)
|
723 |
+
00043/0713 7 (256,448,3)
|
724 |
+
00043/0715 7 (256,448,3)
|
725 |
+
00043/0923 7 (256,448,3)
|
726 |
+
00044/0095 7 (256,448,3)
|
727 |
+
00044/0255 7 (256,448,3)
|
728 |
+
00044/0864 7 (256,448,3)
|
729 |
+
00044/0892 7 (256,448,3)
|
730 |
+
00044/0898 7 (256,448,3)
|
731 |
+
00044/0993 7 (256,448,3)
|
732 |
+
00044/0995 7 (256,448,3)
|
733 |
+
00044/0997 7 (256,448,3)
|
734 |
+
00045/0001 7 (256,448,3)
|
735 |
+
00045/0006 7 (256,448,3)
|
736 |
+
00045/0269 7 (256,448,3)
|
737 |
+
00045/0276 7 (256,448,3)
|
738 |
+
00045/0280 7 (256,448,3)
|
739 |
+
00045/0281 7 (256,448,3)
|
740 |
+
00045/0282 7 (256,448,3)
|
741 |
+
00045/0284 7 (256,448,3)
|
742 |
+
00045/0550 7 (256,448,3)
|
743 |
+
00045/0571 7 (256,448,3)
|
744 |
+
00045/0629 7 (256,448,3)
|
745 |
+
00045/0631 7 (256,448,3)
|
746 |
+
00045/0659 7 (256,448,3)
|
747 |
+
00045/0693 7 (256,448,3)
|
748 |
+
00045/0807 7 (256,448,3)
|
749 |
+
00045/0810 7 (256,448,3)
|
750 |
+
00045/0826 7 (256,448,3)
|
751 |
+
00045/0849 7 (256,448,3)
|
752 |
+
00045/0946 7 (256,448,3)
|
753 |
+
00045/0987 7 (256,448,3)
|
754 |
+
00045/0990 7 (256,448,3)
|
755 |
+
00046/0104 7 (256,448,3)
|
756 |
+
00046/0477 7 (256,448,3)
|
757 |
+
00046/0490 7 (256,448,3)
|
758 |
+
00046/0491 7 (256,448,3)
|
759 |
+
00046/0509 7 (256,448,3)
|
760 |
+
00046/0513 7 (256,448,3)
|
761 |
+
00046/0603 7 (256,448,3)
|
762 |
+
00046/0723 7 (256,448,3)
|
763 |
+
00046/0744 7 (256,448,3)
|
764 |
+
00046/0746 7 (256,448,3)
|
765 |
+
00046/0750 7 (256,448,3)
|
766 |
+
00046/0852 7 (256,448,3)
|
767 |
+
00046/0927 7 (256,448,3)
|
768 |
+
00046/0928 7 (256,448,3)
|
769 |
+
00046/0929 7 (256,448,3)
|
770 |
+
00046/0931 7 (256,448,3)
|
771 |
+
00046/0936 7 (256,448,3)
|
772 |
+
00046/0939 7 (256,448,3)
|
773 |
+
00046/0947 7 (256,448,3)
|
774 |
+
00046/0948 7 (256,448,3)
|
775 |
+
00046/0950 7 (256,448,3)
|
776 |
+
00046/0955 7 (256,448,3)
|
777 |
+
00046/0961 7 (256,448,3)
|
778 |
+
00047/0023 7 (256,448,3)
|
779 |
+
00047/0029 7 (256,448,3)
|
780 |
+
00047/0035 7 (256,448,3)
|
781 |
+
00047/0058 7 (256,448,3)
|
782 |
+
00047/0061 7 (256,448,3)
|
783 |
+
00047/0065 7 (256,448,3)
|
784 |
+
00047/0068 7 (256,448,3)
|
785 |
+
00047/0072 7 (256,448,3)
|
786 |
+
00047/0074 7 (256,448,3)
|
787 |
+
00047/0148 7 (256,448,3)
|
788 |
+
00047/0594 7 (256,448,3)
|
789 |
+
00047/0782 7 (256,448,3)
|
790 |
+
00047/0787 7 (256,448,3)
|
791 |
+
00047/0860 7 (256,448,3)
|
792 |
+
00047/0889 7 (256,448,3)
|
793 |
+
00047/0893 7 (256,448,3)
|
794 |
+
00047/0894 7 (256,448,3)
|
795 |
+
00047/0902 7 (256,448,3)
|
796 |
+
00047/0975 7 (256,448,3)
|
797 |
+
00047/0995 7 (256,448,3)
|
798 |
+
00048/0033 7 (256,448,3)
|
799 |
+
00048/0113 7 (256,448,3)
|
800 |
+
00048/0115 7 (256,448,3)
|
801 |
+
00048/0120 7 (256,448,3)
|
802 |
+
00048/0129 7 (256,448,3)
|
803 |
+
00048/0136 7 (256,448,3)
|
804 |
+
00048/0327 7 (256,448,3)
|
805 |
+
00048/0329 7 (256,448,3)
|
806 |
+
00048/0341 7 (256,448,3)
|
807 |
+
00048/0343 7 (256,448,3)
|
808 |
+
00048/0345 7 (256,448,3)
|
809 |
+
00048/0346 7 (256,448,3)
|
810 |
+
00048/0355 7 (256,448,3)
|
811 |
+
00048/0359 7 (256,448,3)
|
812 |
+
00048/0363 7 (256,448,3)
|
813 |
+
00048/0378 7 (256,448,3)
|
814 |
+
00048/0386 7 (256,448,3)
|
815 |
+
00048/0387 7 (256,448,3)
|
816 |
+
00048/0388 7 (256,448,3)
|
817 |
+
00048/0428 7 (256,448,3)
|
818 |
+
00048/0439 7 (256,448,3)
|
819 |
+
00048/0507 7 (256,448,3)
|
820 |
+
00048/0510 7 (256,448,3)
|
821 |
+
00048/0512 7 (256,448,3)
|
822 |
+
00048/0514 7 (256,448,3)
|
823 |
+
00048/0539 7 (256,448,3)
|
824 |
+
00048/0542 7 (256,448,3)
|
825 |
+
00048/0544 7 (256,448,3)
|
826 |
+
00048/0631 7 (256,448,3)
|
827 |
+
00048/0632 7 (256,448,3)
|
828 |
+
00048/0636 7 (256,448,3)
|
829 |
+
00048/0640 7 (256,448,3)
|
830 |
+
00048/0644 7 (256,448,3)
|
831 |
+
00048/0653 7 (256,448,3)
|
832 |
+
00048/0655 7 (256,448,3)
|
833 |
+
00048/0658 7 (256,448,3)
|
834 |
+
00048/0667 7 (256,448,3)
|
835 |
+
00048/0688 7 (256,448,3)
|
836 |
+
00048/0708 7 (256,448,3)
|
837 |
+
00049/0005 7 (256,448,3)
|
838 |
+
00049/0074 7 (256,448,3)
|
839 |
+
00049/0077 7 (256,448,3)
|
840 |
+
00049/0084 7 (256,448,3)
|
841 |
+
00049/0516 7 (256,448,3)
|
842 |
+
00049/0800 7 (256,448,3)
|
843 |
+
00049/0900 7 (256,448,3)
|
844 |
+
00050/0607 7 (256,448,3)
|
845 |
+
00050/0661 7 (256,448,3)
|
846 |
+
00050/0665 7 (256,448,3)
|
847 |
+
00050/0685 7 (256,448,3)
|
848 |
+
00050/0711 7 (256,448,3)
|
849 |
+
00051/0068 7 (256,448,3)
|
850 |
+
00051/0069 7 (256,448,3)
|
851 |
+
00051/0076 7 (256,448,3)
|
852 |
+
00051/0569 7 (256,448,3)
|
853 |
+
00051/0801 7 (256,448,3)
|
854 |
+
00051/0927 7 (256,448,3)
|
855 |
+
00051/0945 7 (256,448,3)
|
856 |
+
00051/0952 7 (256,448,3)
|
857 |
+
00051/0976 7 (256,448,3)
|
858 |
+
00051/0985 7 (256,448,3)
|
859 |
+
00052/0012 7 (256,448,3)
|
860 |
+
00052/0015 7 (256,448,3)
|
861 |
+
00052/0052 7 (256,448,3)
|
862 |
+
00052/0056 7 (256,448,3)
|
863 |
+
00052/0060 7 (256,448,3)
|
864 |
+
00052/0157 7 (256,448,3)
|
865 |
+
00052/0265 7 (256,448,3)
|
866 |
+
00052/0788 7 (256,448,3)
|
867 |
+
00052/0790 7 (256,448,3)
|
868 |
+
00052/0793 7 (256,448,3)
|
869 |
+
00052/0816 7 (256,448,3)
|
870 |
+
00052/0824 7 (256,448,3)
|
871 |
+
00052/0918 7 (256,448,3)
|
872 |
+
00052/0933 7 (256,448,3)
|
873 |
+
00052/0947 7 (256,448,3)
|
874 |
+
00053/0232 7 (256,448,3)
|
875 |
+
00053/0277 7 (256,448,3)
|
876 |
+
00053/0362 7 (256,448,3)
|
877 |
+
00053/0577 7 (256,448,3)
|
878 |
+
00053/0609 7 (256,448,3)
|
879 |
+
00053/0612 7 (256,448,3)
|
880 |
+
00053/0628 7 (256,448,3)
|
881 |
+
00053/0629 7 (256,448,3)
|
882 |
+
00053/0633 7 (256,448,3)
|
883 |
+
00053/0659 7 (256,448,3)
|
884 |
+
00053/0667 7 (256,448,3)
|
885 |
+
00053/0671 7 (256,448,3)
|
886 |
+
00053/0797 7 (256,448,3)
|
887 |
+
00053/0804 7 (256,448,3)
|
888 |
+
00053/0807 7 (256,448,3)
|
889 |
+
00053/0952 7 (256,448,3)
|
890 |
+
00053/0970 7 (256,448,3)
|
891 |
+
00053/0981 7 (256,448,3)
|
892 |
+
00053/0999 7 (256,448,3)
|
893 |
+
00054/0003 7 (256,448,3)
|
894 |
+
00054/0013 7 (256,448,3)
|
895 |
+
00054/0020 7 (256,448,3)
|
896 |
+
00054/0022 7 (256,448,3)
|
897 |
+
00054/0023 7 (256,448,3)
|
898 |
+
00054/0044 7 (256,448,3)
|
899 |
+
00054/0051 7 (256,448,3)
|
900 |
+
00054/0063 7 (256,448,3)
|
901 |
+
00054/0065 7 (256,448,3)
|
902 |
+
00054/0145 7 (256,448,3)
|
903 |
+
00054/0153 7 (256,448,3)
|
904 |
+
00054/0203 7 (256,448,3)
|
905 |
+
00054/0325 7 (256,448,3)
|
906 |
+
00054/0445 7 (256,448,3)
|
907 |
+
00054/0448 7 (256,448,3)
|
908 |
+
00054/0456 7 (256,448,3)
|
909 |
+
00054/0457 7 (256,448,3)
|
910 |
+
00054/0519 7 (256,448,3)
|
911 |
+
00054/0524 7 (256,448,3)
|
912 |
+
00054/0530 7 (256,448,3)
|
913 |
+
00054/0532 7 (256,448,3)
|
914 |
+
00054/0535 7 (256,448,3)
|
915 |
+
00054/0574 7 (256,448,3)
|
916 |
+
00054/0760 7 (256,448,3)
|
917 |
+
00054/0767 7 (256,448,3)
|
918 |
+
00054/0837 7 (256,448,3)
|
919 |
+
00055/0011 7 (256,448,3)
|
920 |
+
00055/0109 7 (256,448,3)
|
921 |
+
00055/0111 7 (256,448,3)
|
922 |
+
00055/0117 7 (256,448,3)
|
923 |
+
00055/0119 7 (256,448,3)
|
924 |
+
00055/0182 7 (256,448,3)
|
925 |
+
00055/0192 7 (256,448,3)
|
926 |
+
00055/0193 7 (256,448,3)
|
927 |
+
00055/0200 7 (256,448,3)
|
928 |
+
00055/0204 7 (256,448,3)
|
929 |
+
00055/0207 7 (256,448,3)
|
930 |
+
00055/0212 7 (256,448,3)
|
931 |
+
00055/0213 7 (256,448,3)
|
932 |
+
00055/0348 7 (256,448,3)
|
933 |
+
00055/0423 7 (256,448,3)
|
934 |
+
00055/0427 7 (256,448,3)
|
935 |
+
00055/0456 7 (256,448,3)
|
936 |
+
00055/0489 7 (256,448,3)
|
937 |
+
00055/0689 7 (256,448,3)
|
938 |
+
00055/0753 7 (256,448,3)
|
939 |
+
00055/0802 7 (256,448,3)
|
940 |
+
00055/0844 7 (256,448,3)
|
941 |
+
00055/0850 7 (256,448,3)
|
942 |
+
00055/0982 7 (256,448,3)
|
943 |
+
00055/0993 7 (256,448,3)
|
944 |
+
00056/0113 7 (256,448,3)
|
945 |
+
00056/0148 7 (256,448,3)
|
946 |
+
00056/0151 7 (256,448,3)
|
947 |
+
00056/0316 7 (256,448,3)
|
948 |
+
00056/0379 7 (256,448,3)
|
949 |
+
00056/0380 7 (256,448,3)
|
950 |
+
00056/0385 7 (256,448,3)
|
951 |
+
00056/0505 7 (256,448,3)
|
952 |
+
00056/0579 7 (256,448,3)
|
953 |
+
00057/0254 7 (256,448,3)
|
954 |
+
00057/0264 7 (256,448,3)
|
955 |
+
00057/0272 7 (256,448,3)
|
956 |
+
00057/0403 7 (256,448,3)
|
957 |
+
00057/0501 7 (256,448,3)
|
958 |
+
00057/0503 7 (256,448,3)
|
959 |
+
00057/0884 7 (256,448,3)
|
960 |
+
00058/0026 7 (256,448,3)
|
961 |
+
00058/0029 7 (256,448,3)
|
962 |
+
00058/0104 7 (256,448,3)
|
963 |
+
00058/0124 7 (256,448,3)
|
964 |
+
00058/0162 7 (256,448,3)
|
965 |
+
00058/0288 7 (256,448,3)
|
966 |
+
00058/0289 7 (256,448,3)
|
967 |
+
00058/0323 7 (256,448,3)
|
968 |
+
00058/0328 7 (256,448,3)
|
969 |
+
00058/0329 7 (256,448,3)
|
970 |
+
00058/0337 7 (256,448,3)
|
971 |
+
00058/0367 7 (256,448,3)
|
972 |
+
00058/0383 7 (256,448,3)
|
973 |
+
00058/0395 7 (256,448,3)
|
974 |
+
00060/0178 7 (256,448,3)
|
975 |
+
00060/0182 7 (256,448,3)
|
976 |
+
00061/0001 7 (256,448,3)
|
977 |
+
00061/0003 7 (256,448,3)
|
978 |
+
00061/0006 7 (256,448,3)
|
979 |
+
00061/0443 7 (256,448,3)
|
980 |
+
00061/0586 7 (256,448,3)
|
981 |
+
00061/0587 7 (256,448,3)
|
982 |
+
00061/0774 7 (256,448,3)
|
983 |
+
00061/0789 7 (256,448,3)
|
984 |
+
00061/0815 7 (256,448,3)
|
985 |
+
00061/0817 7 (256,448,3)
|
986 |
+
00061/0826 7 (256,448,3)
|
987 |
+
00061/0829 7 (256,448,3)
|
988 |
+
00061/0830 7 (256,448,3)
|
989 |
+
00061/0832 7 (256,448,3)
|
990 |
+
00061/0833 7 (256,448,3)
|
991 |
+
00061/0836 7 (256,448,3)
|
992 |
+
00061/0837 7 (256,448,3)
|
993 |
+
00061/0839 7 (256,448,3)
|
994 |
+
00061/0843 7 (256,448,3)
|
995 |
+
00061/0849 7 (256,448,3)
|
996 |
+
00061/0859 7 (256,448,3)
|
997 |
+
00061/0861 7 (256,448,3)
|
998 |
+
00061/0868 7 (256,448,3)
|
999 |
+
00061/0877 7 (256,448,3)
|
1000 |
+
00061/0889 7 (256,448,3)
|
1001 |
+
00061/0905 7 (256,448,3)
|
1002 |
+
00062/0115 7 (256,448,3)
|
1003 |
+
00062/0118 7 (256,448,3)
|
1004 |
+
00062/0125 7 (256,448,3)
|
1005 |
+
00062/0134 7 (256,448,3)
|
1006 |
+
00062/0142 7 (256,448,3)
|
1007 |
+
00062/0400 7 (256,448,3)
|
1008 |
+
00062/0457 7 (256,448,3)
|
1009 |
+
00062/0459 7 (256,448,3)
|
1010 |
+
00062/0560 7 (256,448,3)
|
1011 |
+
00062/0650 7 (256,448,3)
|
1012 |
+
00062/0655 7 (256,448,3)
|
1013 |
+
00062/0715 7 (256,448,3)
|
1014 |
+
00062/0847 7 (256,448,3)
|
1015 |
+
00062/0905 7 (256,448,3)
|
1016 |
+
00062/0981 7 (256,448,3)
|
1017 |
+
00063/0177 7 (256,448,3)
|
1018 |
+
00063/0230 7 (256,448,3)
|
1019 |
+
00063/0253 7 (256,448,3)
|
1020 |
+
00063/0257 7 (256,448,3)
|
1021 |
+
00063/0326 7 (256,448,3)
|
1022 |
+
00063/0530 7 (256,448,3)
|
1023 |
+
00063/0677 7 (256,448,3)
|
1024 |
+
00063/0759 7 (256,448,3)
|
1025 |
+
00063/0761 7 (256,448,3)
|
1026 |
+
00063/0777 7 (256,448,3)
|
1027 |
+
00063/0842 7 (256,448,3)
|
1028 |
+
00063/0900 7 (256,448,3)
|
1029 |
+
00064/0014 7 (256,448,3)
|
1030 |
+
00064/0028 7 (256,448,3)
|
1031 |
+
00064/0029 7 (256,448,3)
|
1032 |
+
00064/0030 7 (256,448,3)
|
1033 |
+
00064/0037 7 (256,448,3)
|
1034 |
+
00064/0044 7 (256,448,3)
|
1035 |
+
00064/0280 7 (256,448,3)
|
1036 |
+
00064/0285 7 (256,448,3)
|
1037 |
+
00064/0286 7 (256,448,3)
|
1038 |
+
00064/0291 7 (256,448,3)
|
1039 |
+
00064/0300 7 (256,448,3)
|
1040 |
+
00064/0303 7 (256,448,3)
|
1041 |
+
00064/0308 7 (256,448,3)
|
1042 |
+
00064/0314 7 (256,448,3)
|
1043 |
+
00064/0316 7 (256,448,3)
|
1044 |
+
00064/0317 7 (256,448,3)
|
1045 |
+
00064/0323 7 (256,448,3)
|
1046 |
+
00064/0435 7 (256,448,3)
|
1047 |
+
00064/0733 7 (256,448,3)
|
1048 |
+
00064/0848 7 (256,448,3)
|
1049 |
+
00064/0868 7 (256,448,3)
|
1050 |
+
00064/0888 7 (256,448,3)
|
1051 |
+
00064/0898 7 (256,448,3)
|
1052 |
+
00065/0116 7 (256,448,3)
|
1053 |
+
00065/0121 7 (256,448,3)
|
1054 |
+
00065/0122 7 (256,448,3)
|
1055 |
+
00065/0124 7 (256,448,3)
|
1056 |
+
00065/0125 7 (256,448,3)
|
1057 |
+
00065/0126 7 (256,448,3)
|
1058 |
+
00065/0136 7 (256,448,3)
|
1059 |
+
00065/0146 7 (256,448,3)
|
1060 |
+
00065/0147 7 (256,448,3)
|
1061 |
+
00065/0163 7 (256,448,3)
|
1062 |
+
00065/0170 7 (256,448,3)
|
1063 |
+
00065/0175 7 (256,448,3)
|
1064 |
+
00065/0176 7 (256,448,3)
|
1065 |
+
00065/0180 7 (256,448,3)
|
1066 |
+
00065/0184 7 (256,448,3)
|
1067 |
+
00065/0186 7 (256,448,3)
|
1068 |
+
00065/0332 7 (256,448,3)
|
1069 |
+
00065/0343 7 (256,448,3)
|
1070 |
+
00065/0365 7 (256,448,3)
|
1071 |
+
00065/0393 7 (256,448,3)
|
1072 |
+
00065/0394 7 (256,448,3)
|
1073 |
+
00065/0442 7 (256,448,3)
|
1074 |
+
00065/0459 7 (256,448,3)
|
1075 |
+
00065/0462 7 (256,448,3)
|
1076 |
+
00065/0476 7 (256,448,3)
|
1077 |
+
00065/0483 7 (256,448,3)
|
1078 |
+
00065/0590 7 (256,448,3)
|
1079 |
+
00065/0593 7 (256,448,3)
|
1080 |
+
00065/0595 7 (256,448,3)
|
1081 |
+
00065/0774 7 (256,448,3)
|
1082 |
+
00065/0947 7 (256,448,3)
|
1083 |
+
00065/0985 7 (256,448,3)
|
1084 |
+
00065/0986 7 (256,448,3)
|
1085 |
+
00066/0015 7 (256,448,3)
|
1086 |
+
00066/0043 7 (256,448,3)
|
1087 |
+
00066/0131 7 (256,448,3)
|
1088 |
+
00066/0157 7 (256,448,3)
|
1089 |
+
00066/0169 7 (256,448,3)
|
1090 |
+
00066/0374 7 (256,448,3)
|
1091 |
+
00066/0382 7 (256,448,3)
|
1092 |
+
00066/0481 7 (256,448,3)
|
1093 |
+
00066/0482 7 (256,448,3)
|
1094 |
+
00066/0491 7 (256,448,3)
|
1095 |
+
00066/0493 7 (256,448,3)
|
1096 |
+
00066/0494 7 (256,448,3)
|
1097 |
+
00066/0496 7 (256,448,3)
|
1098 |
+
00066/0680 7 (256,448,3)
|
1099 |
+
00066/0700 7 (256,448,3)
|
1100 |
+
00066/0887 7 (256,448,3)
|
1101 |
+
00066/0910 7 (256,448,3)
|
1102 |
+
00066/0918 7 (256,448,3)
|
1103 |
+
00067/0024 7 (256,448,3)
|
1104 |
+
00067/0059 7 (256,448,3)
|
1105 |
+
00067/0408 7 (256,448,3)
|
1106 |
+
00067/0414 7 (256,448,3)
|
1107 |
+
00067/0417 7 (256,448,3)
|
1108 |
+
00067/0419 7 (256,448,3)
|
1109 |
+
00067/0423 7 (256,448,3)
|
1110 |
+
00067/0441 7 (256,448,3)
|
1111 |
+
00067/0467 7 (256,448,3)
|
1112 |
+
00067/0471 7 (256,448,3)
|
1113 |
+
00067/0487 7 (256,448,3)
|
1114 |
+
00067/0494 7 (256,448,3)
|
1115 |
+
00067/0497 7 (256,448,3)
|
1116 |
+
00067/0513 7 (256,448,3)
|
1117 |
+
00067/0521 7 (256,448,3)
|
1118 |
+
00068/0111 7 (256,448,3)
|
1119 |
+
00068/0123 7 (256,448,3)
|
1120 |
+
00068/0126 7 (256,448,3)
|
1121 |
+
00068/0129 7 (256,448,3)
|
1122 |
+
00068/0270 7 (256,448,3)
|
1123 |
+
00068/0330 7 (256,448,3)
|
1124 |
+
00068/0407 7 (256,448,3)
|
1125 |
+
00068/0428 7 (256,448,3)
|
1126 |
+
00068/0544 7 (256,448,3)
|
1127 |
+
00068/0635 7 (256,448,3)
|
1128 |
+
00068/0637 7 (256,448,3)
|
1129 |
+
00068/0736 7 (256,448,3)
|
1130 |
+
00068/0738 7 (256,448,3)
|
1131 |
+
00068/0747 7 (256,448,3)
|
1132 |
+
00068/0748 7 (256,448,3)
|
1133 |
+
00068/0749 7 (256,448,3)
|
1134 |
+
00068/0762 7 (256,448,3)
|
1135 |
+
00068/0815 7 (256,448,3)
|
1136 |
+
00068/0981 7 (256,448,3)
|
1137 |
+
00068/0982 7 (256,448,3)
|
1138 |
+
00069/0187 7 (256,448,3)
|
1139 |
+
00069/0191 7 (256,448,3)
|
1140 |
+
00070/0001 7 (256,448,3)
|
1141 |
+
00070/0003 7 (256,448,3)
|
1142 |
+
00070/0340 7 (256,448,3)
|
1143 |
+
00070/0341 7 (256,448,3)
|
1144 |
+
00070/0342 7 (256,448,3)
|
1145 |
+
00070/0347 7 (256,448,3)
|
1146 |
+
00070/0372 7 (256,448,3)
|
1147 |
+
00070/0383 7 (256,448,3)
|
1148 |
+
00070/0389 7 (256,448,3)
|
1149 |
+
00070/0728 7 (256,448,3)
|
1150 |
+
00070/0813 7 (256,448,3)
|
1151 |
+
00070/0814 7 (256,448,3)
|
1152 |
+
00070/0823 7 (256,448,3)
|
1153 |
+
00070/0840 7 (256,448,3)
|
1154 |
+
00070/0843 7 (256,448,3)
|
1155 |
+
00070/0861 7 (256,448,3)
|
1156 |
+
00071/0111 7 (256,448,3)
|
1157 |
+
00071/0138 7 (256,448,3)
|
1158 |
+
00071/0143 7 (256,448,3)
|
1159 |
+
00071/0150 7 (256,448,3)
|
1160 |
+
00071/0508 7 (256,448,3)
|
1161 |
+
00071/0514 7 (256,448,3)
|
1162 |
+
00071/0550 7 (256,448,3)
|
1163 |
+
00071/0556 7 (256,448,3)
|
1164 |
+
00071/0600 7 (256,448,3)
|
1165 |
+
00071/0665 7 (256,448,3)
|
1166 |
+
00071/0670 7 (256,448,3)
|
1167 |
+
00071/0672 7 (256,448,3)
|
1168 |
+
00071/0673 7 (256,448,3)
|
1169 |
+
00071/0705 7 (256,448,3)
|
1170 |
+
00071/0706 7 (256,448,3)
|
1171 |
+
00071/0707 7 (256,448,3)
|
1172 |
+
00071/0774 7 (256,448,3)
|
1173 |
+
00071/0799 7 (256,448,3)
|
1174 |
+
00071/0814 7 (256,448,3)
|
1175 |
+
00071/0816 7 (256,448,3)
|
1176 |
+
00071/0819 7 (256,448,3)
|
1177 |
+
00071/0823 7 (256,448,3)
|
1178 |
+
00071/0828 7 (256,448,3)
|
1179 |
+
00071/0830 7 (256,448,3)
|
1180 |
+
00071/0839 7 (256,448,3)
|
1181 |
+
00071/0841 7 (256,448,3)
|
1182 |
+
00072/0192 7 (256,448,3)
|
1183 |
+
00072/0194 7 (256,448,3)
|
1184 |
+
00072/0197 7 (256,448,3)
|
1185 |
+
00072/0199 7 (256,448,3)
|
1186 |
+
00072/0285 7 (256,448,3)
|
1187 |
+
00072/0586 7 (256,448,3)
|
1188 |
+
00072/0795 7 (256,448,3)
|
1189 |
+
00072/0811 7 (256,448,3)
|
1190 |
+
00072/0812 7 (256,448,3)
|
1191 |
+
00072/0824 7 (256,448,3)
|
1192 |
+
00072/0831 7 (256,448,3)
|
1193 |
+
00072/0835 7 (256,448,3)
|
1194 |
+
00072/0837 7 (256,448,3)
|
1195 |
+
00072/0841 7 (256,448,3)
|
1196 |
+
00072/0962 7 (256,448,3)
|
1197 |
+
00073/0296 7 (256,448,3)
|
1198 |
+
00073/0299 7 (256,448,3)
|
1199 |
+
00073/0300 7 (256,448,3)
|
1200 |
+
00073/0301 7 (256,448,3)
|
1201 |
+
00073/0427 7 (256,448,3)
|
1202 |
+
00073/0428 7 (256,448,3)
|
1203 |
+
00073/0494 7 (256,448,3)
|
1204 |
+
00073/0615 7 (256,448,3)
|
1205 |
+
00073/0620 7 (256,448,3)
|
1206 |
+
00073/0624 7 (256,448,3)
|
1207 |
+
00073/0979 7 (256,448,3)
|
1208 |
+
00074/0226 7 (256,448,3)
|
1209 |
+
00074/0250 7 (256,448,3)
|
1210 |
+
00074/0284 7 (256,448,3)
|
1211 |
+
00074/0503 7 (256,448,3)
|
1212 |
+
00074/0614 7 (256,448,3)
|
1213 |
+
00074/0629 7 (256,448,3)
|
1214 |
+
00074/0762 7 (256,448,3)
|
1215 |
+
00074/0765 7 (256,448,3)
|
1216 |
+
00074/0900 7 (256,448,3)
|
1217 |
+
00074/0908 7 (256,448,3)
|
1218 |
+
00075/0352 7 (256,448,3)
|
1219 |
+
00075/0360 7 (256,448,3)
|
1220 |
+
00075/0361 7 (256,448,3)
|
1221 |
+
00075/0365 7 (256,448,3)
|
1222 |
+
00075/0383 7 (256,448,3)
|
1223 |
+
00075/0384 7 (256,448,3)
|
1224 |
+
00075/0386 7 (256,448,3)
|
1225 |
+
00075/0407 7 (256,448,3)
|
1226 |
+
00075/0410 7 (256,448,3)
|
1227 |
+
00075/0412 7 (256,448,3)
|
1228 |
+
00075/0413 7 (256,448,3)
|
1229 |
+
00075/0459 7 (256,448,3)
|
1230 |
+
00075/0504 7 (256,448,3)
|
1231 |
+
00075/0515 7 (256,448,3)
|
1232 |
+
00075/0518 7 (256,448,3)
|
1233 |
+
00075/0567 7 (256,448,3)
|
1234 |
+
00075/0681 7 (256,448,3)
|
1235 |
+
00075/0693 7 (256,448,3)
|
1236 |
+
00075/0728 7 (256,448,3)
|
1237 |
+
00075/0731 7 (256,448,3)
|
1238 |
+
00075/0804 7 (256,448,3)
|
1239 |
+
00075/0974 7 (256,448,3)
|
1240 |
+
00075/0975 7 (256,448,3)
|
1241 |
+
00075/0983 7 (256,448,3)
|
1242 |
+
00075/0997 7 (256,448,3)
|
1243 |
+
00076/0006 7 (256,448,3)
|
1244 |
+
00076/0007 7 (256,448,3)
|
1245 |
+
00076/0011 7 (256,448,3)
|
1246 |
+
00076/0013 7 (256,448,3)
|
1247 |
+
00076/0014 7 (256,448,3)
|
1248 |
+
00076/0027 7 (256,448,3)
|
1249 |
+
00076/0029 7 (256,448,3)
|
1250 |
+
00076/0037 7 (256,448,3)
|
1251 |
+
00076/0041 7 (256,448,3)
|
1252 |
+
00076/0055 7 (256,448,3)
|
1253 |
+
00076/0071 7 (256,448,3)
|
1254 |
+
00076/0172 7 (256,448,3)
|
1255 |
+
00076/0275 7 (256,448,3)
|
1256 |
+
00076/0286 7 (256,448,3)
|
1257 |
+
00076/0467 7 (256,448,3)
|
1258 |
+
00076/0481 7 (256,448,3)
|
1259 |
+
00076/0527 7 (256,448,3)
|
1260 |
+
00076/0895 7 (256,448,3)
|
1261 |
+
00076/0896 7 (256,448,3)
|
1262 |
+
00076/0906 7 (256,448,3)
|
1263 |
+
00076/0924 7 (256,448,3)
|
1264 |
+
00076/0964 7 (256,448,3)
|
1265 |
+
00076/0984 7 (256,448,3)
|
1266 |
+
00077/0317 7 (256,448,3)
|
1267 |
+
00077/0322 7 (256,448,3)
|
1268 |
+
00077/0333 7 (256,448,3)
|
1269 |
+
00077/0334 7 (256,448,3)
|
1270 |
+
00077/0480 7 (256,448,3)
|
1271 |
+
00077/0488 7 (256,448,3)
|
1272 |
+
00077/0490 7 (256,448,3)
|
1273 |
+
00077/0582 7 (256,448,3)
|
1274 |
+
00077/0586 7 (256,448,3)
|
1275 |
+
00077/0969 7 (256,448,3)
|
1276 |
+
00078/0007 7 (256,448,3)
|
1277 |
+
00078/0011 7 (256,448,3)
|
1278 |
+
00078/0153 7 (256,448,3)
|
1279 |
+
00078/0289 7 (256,448,3)
|
1280 |
+
00078/0312 7 (256,448,3)
|
1281 |
+
00078/0492 7 (256,448,3)
|
1282 |
+
00078/0580 7 (256,448,3)
|
1283 |
+
00078/0595 7 (256,448,3)
|
1284 |
+
00078/0814 7 (256,448,3)
|
1285 |
+
00078/0950 7 (256,448,3)
|
1286 |
+
00078/0955 7 (256,448,3)
|
1287 |
+
00079/0060 7 (256,448,3)
|
1288 |
+
00079/0067 7 (256,448,3)
|
1289 |
+
00080/0216 7 (256,448,3)
|
1290 |
+
00080/0308 7 (256,448,3)
|
1291 |
+
00080/0504 7 (256,448,3)
|
1292 |
+
00080/0552 7 (256,448,3)
|
1293 |
+
00080/0576 7 (256,448,3)
|
1294 |
+
00080/0583 7 (256,448,3)
|
1295 |
+
00080/0837 7 (256,448,3)
|
1296 |
+
00080/0839 7 (256,448,3)
|
1297 |
+
00080/0871 7 (256,448,3)
|
1298 |
+
00080/0877 7 (256,448,3)
|
1299 |
+
00080/0880 7 (256,448,3)
|
1300 |
+
00080/0969 7 (256,448,3)
|
1301 |
+
00080/0973 7 (256,448,3)
|
1302 |
+
00080/0980 7 (256,448,3)
|
1303 |
+
00081/0202 7 (256,448,3)
|
1304 |
+
00081/0203 7 (256,448,3)
|
1305 |
+
00081/0210 7 (256,448,3)
|
1306 |
+
00081/0268 7 (256,448,3)
|
1307 |
+
00081/0281 7 (256,448,3)
|
1308 |
+
00081/0283 7 (256,448,3)
|
1309 |
+
00081/0317 7 (256,448,3)
|
1310 |
+
00081/0327 7 (256,448,3)
|
1311 |
+
00082/0018 7 (256,448,3)
|
1312 |
+
00082/0025 7 (256,448,3)
|
1313 |
+
00082/0089 7 (256,448,3)
|
1314 |
+
00082/0140 7 (256,448,3)
|
1315 |
+
00082/0442 7 (256,448,3)
|
1316 |
+
00082/0465 7 (256,448,3)
|
1317 |
+
00082/0473 7 (256,448,3)
|
1318 |
+
00082/0481 7 (256,448,3)
|
1319 |
+
00082/0492 7 (256,448,3)
|
1320 |
+
00082/0495 7 (256,448,3)
|
1321 |
+
00082/0497 7 (256,448,3)
|
1322 |
+
00082/0502 7 (256,448,3)
|
1323 |
+
00082/0504 7 (256,448,3)
|
1324 |
+
00082/0506 7 (256,448,3)
|
1325 |
+
00082/0507 7 (256,448,3)
|
1326 |
+
00082/0510 7 (256,448,3)
|
1327 |
+
00082/0519 7 (256,448,3)
|
1328 |
+
00082/0523 7 (256,448,3)
|
1329 |
+
00082/0588 7 (256,448,3)
|
1330 |
+
00082/0597 7 (256,448,3)
|
1331 |
+
00082/0632 7 (256,448,3)
|
1332 |
+
00082/0751 7 (256,448,3)
|
1333 |
+
00082/0767 7 (256,448,3)
|
1334 |
+
00082/0771 7 (256,448,3)
|
1335 |
+
00082/0790 7 (256,448,3)
|
1336 |
+
00082/0804 7 (256,448,3)
|
1337 |
+
00082/0823 7 (256,448,3)
|
1338 |
+
00083/0052 7 (256,448,3)
|
1339 |
+
00083/0056 7 (256,448,3)
|
1340 |
+
00083/0113 7 (256,448,3)
|
1341 |
+
00083/0114 7 (256,448,3)
|
1342 |
+
00083/0122 7 (256,448,3)
|
1343 |
+
00083/0137 7 (256,448,3)
|
1344 |
+
00083/0270 7 (256,448,3)
|
1345 |
+
00083/0295 7 (256,448,3)
|
1346 |
+
00083/0303 7 (256,448,3)
|
1347 |
+
00083/0308 7 (256,448,3)
|
1348 |
+
00083/0586 7 (256,448,3)
|
1349 |
+
00083/0592 7 (256,448,3)
|
1350 |
+
00083/0640 7 (256,448,3)
|
1351 |
+
00083/0648 7 (256,448,3)
|
1352 |
+
00083/0654 7 (256,448,3)
|
1353 |
+
00083/0662 7 (256,448,3)
|
1354 |
+
00083/0666 7 (256,448,3)
|
1355 |
+
00083/0668 7 (256,448,3)
|
1356 |
+
00083/0669 7 (256,448,3)
|
1357 |
+
00083/0675 7 (256,448,3)
|
1358 |
+
00083/0679 7 (256,448,3)
|
1359 |
+
00083/0681 7 (256,448,3)
|
1360 |
+
00083/0682 7 (256,448,3)
|
1361 |
+
00083/0694 7 (256,448,3)
|
1362 |
+
00083/0695 7 (256,448,3)
|
1363 |
+
00083/0697 7 (256,448,3)
|
1364 |
+
00083/0704 7 (256,448,3)
|
1365 |
+
00083/0713 7 (256,448,3)
|
1366 |
+
00083/0721 7 (256,448,3)
|
1367 |
+
00083/0855 7 (256,448,3)
|
1368 |
+
00084/0109 7 (256,448,3)
|
1369 |
+
00084/0113 7 (256,448,3)
|
1370 |
+
00084/0306 7 (256,448,3)
|
1371 |
+
00084/0442 7 (256,448,3)
|
1372 |
+
00084/0669 7 (256,448,3)
|
1373 |
+
00084/0679 7 (256,448,3)
|
1374 |
+
00084/0685 7 (256,448,3)
|
1375 |
+
00084/0691 7 (256,448,3)
|
1376 |
+
00084/0768 7 (256,448,3)
|
1377 |
+
00084/0817 7 (256,448,3)
|
1378 |
+
00085/0027 7 (256,448,3)
|
1379 |
+
00085/0035 7 (256,448,3)
|
1380 |
+
00085/0038 7 (256,448,3)
|
1381 |
+
00085/0223 7 (256,448,3)
|
1382 |
+
00085/0233 7 (256,448,3)
|
1383 |
+
00085/0281 7 (256,448,3)
|
1384 |
+
00085/0287 7 (256,448,3)
|
1385 |
+
00085/0313 7 (256,448,3)
|
1386 |
+
00085/0521 7 (256,448,3)
|
1387 |
+
00085/0848 7 (256,448,3)
|
1388 |
+
00085/0855 7 (256,448,3)
|
1389 |
+
00085/0865 7 (256,448,3)
|
1390 |
+
00085/0952 7 (256,448,3)
|
1391 |
+
00085/0964 7 (256,448,3)
|
1392 |
+
00085/0973 7 (256,448,3)
|
1393 |
+
00085/0986 7 (256,448,3)
|
1394 |
+
00085/0993 7 (256,448,3)
|
1395 |
+
00086/0070 7 (256,448,3)
|
1396 |
+
00086/0075 7 (256,448,3)
|
1397 |
+
00086/0094 7 (256,448,3)
|
1398 |
+
00086/0103 7 (256,448,3)
|
1399 |
+
00086/0112 7 (256,448,3)
|
1400 |
+
00086/0288 7 (256,448,3)
|
1401 |
+
00086/0576 7 (256,448,3)
|
1402 |
+
00086/0580 7 (256,448,3)
|
1403 |
+
00086/0584 7 (256,448,3)
|
1404 |
+
00086/0599 7 (256,448,3)
|
1405 |
+
00086/0600 7 (256,448,3)
|
1406 |
+
00086/0602 7 (256,448,3)
|
1407 |
+
00086/0612 7 (256,448,3)
|
1408 |
+
00086/0629 7 (256,448,3)
|
1409 |
+
00086/0655 7 (256,448,3)
|
1410 |
+
00086/0679 7 (256,448,3)
|
1411 |
+
00086/0694 7 (256,448,3)
|
1412 |
+
00086/0695 7 (256,448,3)
|
1413 |
+
00086/0701 7 (256,448,3)
|
1414 |
+
00086/0760 7 (256,448,3)
|
1415 |
+
00086/0786 7 (256,448,3)
|
1416 |
+
00086/0845 7 (256,448,3)
|
1417 |
+
00086/0868 7 (256,448,3)
|
1418 |
+
00086/0889 7 (256,448,3)
|
1419 |
+
00086/0891 7 (256,448,3)
|
1420 |
+
00086/0927 7 (256,448,3)
|
1421 |
+
00086/0938 7 (256,448,3)
|
1422 |
+
00086/0946 7 (256,448,3)
|
1423 |
+
00086/0963 7 (256,448,3)
|
1424 |
+
00086/0969 7 (256,448,3)
|
1425 |
+
00087/0023 7 (256,448,3)
|
1426 |
+
00087/0029 7 (256,448,3)
|
1427 |
+
00087/0144 7 (256,448,3)
|
1428 |
+
00087/0148 7 (256,448,3)
|
1429 |
+
00087/0159 7 (256,448,3)
|
1430 |
+
00087/0174 7 (256,448,3)
|
1431 |
+
00087/0283 7 (256,448,3)
|
1432 |
+
00087/0284 7 (256,448,3)
|
1433 |
+
00087/0294 7 (256,448,3)
|
1434 |
+
00087/0296 7 (256,448,3)
|
1435 |
+
00087/0498 7 (256,448,3)
|
1436 |
+
00087/0502 7 (256,448,3)
|
1437 |
+
00087/0532 7 (256,448,3)
|
1438 |
+
00087/0557 7 (256,448,3)
|
1439 |
+
00087/0559 7 (256,448,3)
|
1440 |
+
00087/0574 7 (256,448,3)
|
1441 |
+
00087/0577 7 (256,448,3)
|
1442 |
+
00088/0006 7 (256,448,3)
|
1443 |
+
00088/0268 7 (256,448,3)
|
1444 |
+
00088/0320 7 (256,448,3)
|
1445 |
+
00088/0412 7 (256,448,3)
|
1446 |
+
00088/0431 7 (256,448,3)
|
1447 |
+
00088/0432 7 (256,448,3)
|
1448 |
+
00088/0465 7 (256,448,3)
|
1449 |
+
00088/0507 7 (256,448,3)
|
1450 |
+
00088/0565 7 (256,448,3)
|
1451 |
+
00088/0629 7 (256,448,3)
|
1452 |
+
00088/0831 7 (256,448,3)
|
1453 |
+
00088/0836 7 (256,448,3)
|
1454 |
+
00088/0972 7 (256,448,3)
|
1455 |
+
00088/0974 7 (256,448,3)
|
1456 |
+
00088/0980 7 (256,448,3)
|
1457 |
+
00089/0067 7 (256,448,3)
|
1458 |
+
00089/0244 7 (256,448,3)
|
1459 |
+
00089/0404 7 (256,448,3)
|
1460 |
+
00089/0416 7 (256,448,3)
|
1461 |
+
00089/0419 7 (256,448,3)
|
1462 |
+
00089/0428 7 (256,448,3)
|
1463 |
+
00089/0712 7 (256,448,3)
|
1464 |
+
00089/0713 7 (256,448,3)
|
1465 |
+
00089/0723 7 (256,448,3)
|
1466 |
+
00089/0727 7 (256,448,3)
|
1467 |
+
00089/0770 7 (256,448,3)
|
1468 |
+
00089/0809 7 (256,448,3)
|
1469 |
+
00089/0811 7 (256,448,3)
|
1470 |
+
00089/0888 7 (256,448,3)
|
1471 |
+
00089/0898 7 (256,448,3)
|
1472 |
+
00089/0903 7 (256,448,3)
|
1473 |
+
00089/0907 7 (256,448,3)
|
1474 |
+
00089/0911 7 (256,448,3)
|
1475 |
+
00089/0915 7 (256,448,3)
|
1476 |
+
00089/0926 7 (256,448,3)
|
1477 |
+
00089/0955 7 (256,448,3)
|
1478 |
+
00090/0027 7 (256,448,3)
|
1479 |
+
00090/0028 7 (256,448,3)
|
1480 |
+
00090/0032 7 (256,448,3)
|
1481 |
+
00090/0038 7 (256,448,3)
|
1482 |
+
00090/0076 7 (256,448,3)
|
1483 |
+
00090/0081 7 (256,448,3)
|
1484 |
+
00090/0086 7 (256,448,3)
|
1485 |
+
00090/0119 7 (256,448,3)
|
1486 |
+
00090/0258 7 (256,448,3)
|
1487 |
+
00090/0261 7 (256,448,3)
|
1488 |
+
00090/0447 7 (256,448,3)
|
1489 |
+
00090/0498 7 (256,448,3)
|
1490 |
+
00090/0514 7 (256,448,3)
|
1491 |
+
00090/0523 7 (256,448,3)
|
1492 |
+
00090/0530 7 (256,448,3)
|
1493 |
+
00090/0540 7 (256,448,3)
|
1494 |
+
00090/0548 7 (256,448,3)
|
1495 |
+
00090/0565 7 (256,448,3)
|
1496 |
+
00090/0578 7 (256,448,3)
|
1497 |
+
00090/0580 7 (256,448,3)
|
1498 |
+
00090/0581 7 (256,448,3)
|
1499 |
+
00090/0780 7 (256,448,3)
|
1500 |
+
00090/0940 7 (256,448,3)
|
1501 |
+
00090/0984 7 (256,448,3)
|
1502 |
+
00091/0023 7 (256,448,3)
|
1503 |
+
00091/0051 7 (256,448,3)
|
1504 |
+
00091/0317 7 (256,448,3)
|
1505 |
+
00091/0320 7 (256,448,3)
|
1506 |
+
00091/0582 7 (256,448,3)
|
1507 |
+
00091/0585 7 (256,448,3)
|
1508 |
+
00091/0588 7 (256,448,3)
|
1509 |
+
00091/0601 7 (256,448,3)
|
1510 |
+
00091/0602 7 (256,448,3)
|
1511 |
+
00091/0603 7 (256,448,3)
|
1512 |
+
00091/0634 7 (256,448,3)
|
1513 |
+
00091/0693 7 (256,448,3)
|
1514 |
+
00091/0741 7 (256,448,3)
|
1515 |
+
00091/0966 7 (256,448,3)
|
1516 |
+
00091/0973 7 (256,448,3)
|
1517 |
+
00091/0985 7 (256,448,3)
|
1518 |
+
00092/0007 7 (256,448,3)
|
1519 |
+
00092/0132 7 (256,448,3)
|
1520 |
+
00092/0270 7 (256,448,3)
|
1521 |
+
00092/0296 7 (256,448,3)
|
1522 |
+
00092/0611 7 (256,448,3)
|
1523 |
+
00092/0625 7 (256,448,3)
|
1524 |
+
00092/0627 7 (256,448,3)
|
1525 |
+
00092/0651 7 (256,448,3)
|
1526 |
+
00092/0652 7 (256,448,3)
|
1527 |
+
00092/0910 7 (256,448,3)
|
1528 |
+
00093/0075 7 (256,448,3)
|
1529 |
+
00093/0078 7 (256,448,3)
|
1530 |
+
00093/0100 7 (256,448,3)
|
1531 |
+
00093/0132 7 (256,448,3)
|
1532 |
+
00093/0133 7 (256,448,3)
|
1533 |
+
00093/0176 7 (256,448,3)
|
1534 |
+
00093/0177 7 (256,448,3)
|
1535 |
+
00093/0178 7 (256,448,3)
|
1536 |
+
00093/0181 7 (256,448,3)
|
1537 |
+
00093/0183 7 (256,448,3)
|
1538 |
+
00093/0184 7 (256,448,3)
|
1539 |
+
00093/0286 7 (256,448,3)
|
1540 |
+
00093/0304 7 (256,448,3)
|
1541 |
+
00093/0305 7 (256,448,3)
|
1542 |
+
00093/0319 7 (256,448,3)
|
1543 |
+
00093/0324 7 (256,448,3)
|
1544 |
+
00093/0325 7 (256,448,3)
|
1545 |
+
00093/0327 7 (256,448,3)
|
1546 |
+
00093/0331 7 (256,448,3)
|
1547 |
+
00093/0444 7 (256,448,3)
|
1548 |
+
00093/0450 7 (256,448,3)
|
1549 |
+
00093/0593 7 (256,448,3)
|
1550 |
+
00094/0032 7 (256,448,3)
|
1551 |
+
00094/0057 7 (256,448,3)
|
1552 |
+
00094/0139 7 (256,448,3)
|
1553 |
+
00094/0206 7 (256,448,3)
|
1554 |
+
00094/0211 7 (256,448,3)
|
1555 |
+
00094/0215 7 (256,448,3)
|
1556 |
+
00094/0218 7 (256,448,3)
|
1557 |
+
00094/0257 7 (256,448,3)
|
1558 |
+
00094/0329 7 (256,448,3)
|
1559 |
+
00094/0331 7 (256,448,3)
|
1560 |
+
00094/0332 7 (256,448,3)
|
1561 |
+
00094/0369 7 (256,448,3)
|
1562 |
+
00094/0370 7 (256,448,3)
|
1563 |
+
00094/0383 7 (256,448,3)
|
1564 |
+
00094/0385 7 (256,448,3)
|
1565 |
+
00094/0387 7 (256,448,3)
|
1566 |
+
00094/0399 7 (256,448,3)
|
1567 |
+
00094/0605 7 (256,448,3)
|
1568 |
+
00094/0648 7 (256,448,3)
|
1569 |
+
00094/0649 7 (256,448,3)
|
1570 |
+
00094/0759 7 (256,448,3)
|
1571 |
+
00094/0800 7 (256,448,3)
|
1572 |
+
00094/0894 7 (256,448,3)
|
1573 |
+
00094/0896 7 (256,448,3)
|
1574 |
+
00095/0089 7 (256,448,3)
|
1575 |
+
00095/0108 7 (256,448,3)
|
1576 |
+
00095/0109 7 (256,448,3)
|
1577 |
+
00095/0114 7 (256,448,3)
|
1578 |
+
00095/0128 7 (256,448,3)
|
1579 |
+
00095/0133 7 (256,448,3)
|
1580 |
+
00095/0150 7 (256,448,3)
|
1581 |
+
00095/0153 7 (256,448,3)
|
1582 |
+
00095/0154 7 (256,448,3)
|
1583 |
+
00095/0196 7 (256,448,3)
|
1584 |
+
00095/0209 7 (256,448,3)
|
1585 |
+
00095/0228 7 (256,448,3)
|
1586 |
+
00095/0230 7 (256,448,3)
|
1587 |
+
00095/0231 7 (256,448,3)
|
1588 |
+
00095/0242 7 (256,448,3)
|
1589 |
+
00095/0243 7 (256,448,3)
|
1590 |
+
00095/0253 7 (256,448,3)
|
1591 |
+
00095/0280 7 (256,448,3)
|
1592 |
+
00095/0281 7 (256,448,3)
|
1593 |
+
00095/0283 7 (256,448,3)
|
1594 |
+
00095/0314 7 (256,448,3)
|
1595 |
+
00095/0868 7 (256,448,3)
|
1596 |
+
00095/0894 7 (256,448,3)
|
1597 |
+
00096/0062 7 (256,448,3)
|
1598 |
+
00096/0347 7 (256,448,3)
|
1599 |
+
00096/0348 7 (256,448,3)
|
1600 |
+
00096/0359 7 (256,448,3)
|
1601 |
+
00096/0363 7 (256,448,3)
|
1602 |
+
00096/0373 7 (256,448,3)
|
1603 |
+
00096/0378 7 (256,448,3)
|
1604 |
+
00096/0387 7 (256,448,3)
|
1605 |
+
00096/0395 7 (256,448,3)
|
1606 |
+
00096/0396 7 (256,448,3)
|
1607 |
+
00096/0404 7 (256,448,3)
|
1608 |
+
00096/0653 7 (256,448,3)
|
1609 |
+
00096/0668 7 (256,448,3)
|
1610 |
+
00096/0679 7 (256,448,3)
|
1611 |
+
00096/0729 7 (256,448,3)
|
1612 |
+
00096/0736 7 (256,448,3)
|
1613 |
+
00096/0823 7 (256,448,3)
|
basicsr/data/meta_info/meta_info_Vimeo90K_train_GT.txt
ADDED
The diff for this file is too large to render.
See raw diff
|
|
basicsr/data/paired_image_dataset.py
ADDED
@@ -0,0 +1,374 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from torch.utils import data as data
|
2 |
+
from torchvision.transforms.functional import normalize
|
3 |
+
|
4 |
+
from basicsr.data.data_util import (paired_paths_from_folder,
|
5 |
+
paired_DP_paths_from_folder,
|
6 |
+
paired_paths_from_lmdb,
|
7 |
+
paired_paths_from_meta_info_file)
|
8 |
+
from basicsr.data.transforms import augment, paired_random_crop, paired_random_crop_DP, random_augmentation
|
9 |
+
from basicsr.utils import FileClient, imfrombytes, img2tensor, padding, padding_DP, imfrombytesDP
|
10 |
+
|
11 |
+
import random
|
12 |
+
import numpy as np
|
13 |
+
import torch
|
14 |
+
import cv2
|
15 |
+
|
16 |
+
class Dataset_PairedImage(data.Dataset):
|
17 |
+
"""Paired image dataset for image restoration.
|
18 |
+
|
19 |
+
Read LQ (Low Quality, e.g. LR (Low Resolution), blurry, noisy, etc) and
|
20 |
+
GT image pairs.
|
21 |
+
|
22 |
+
There are three modes:
|
23 |
+
1. 'lmdb': Use lmdb files.
|
24 |
+
If opt['io_backend'] == lmdb.
|
25 |
+
2. 'meta_info_file': Use meta information file to generate paths.
|
26 |
+
If opt['io_backend'] != lmdb and opt['meta_info_file'] is not None.
|
27 |
+
3. 'folder': Scan folders to generate paths.
|
28 |
+
The rest.
|
29 |
+
|
30 |
+
Args:
|
31 |
+
opt (dict): Config for train datasets. It contains the following keys:
|
32 |
+
dataroot_gt (str): Data root path for gt.
|
33 |
+
dataroot_lq (str): Data root path for lq.
|
34 |
+
meta_info_file (str): Path for meta information file.
|
35 |
+
io_backend (dict): IO backend type and other kwarg.
|
36 |
+
filename_tmpl (str): Template for each filename. Note that the
|
37 |
+
template excludes the file extension. Default: '{}'.
|
38 |
+
gt_size (int): Cropped patched size for gt patches.
|
39 |
+
geometric_augs (bool): Use geometric augmentations.
|
40 |
+
|
41 |
+
scale (bool): Scale, which will be added automatically.
|
42 |
+
phase (str): 'train' or 'val'.
|
43 |
+
"""
|
44 |
+
|
45 |
+
def __init__(self, opt):
|
46 |
+
super(Dataset_PairedImage, self).__init__()
|
47 |
+
self.opt = opt
|
48 |
+
# file client (io backend)
|
49 |
+
self.file_client = None
|
50 |
+
self.io_backend_opt = opt['io_backend']
|
51 |
+
self.mean = opt['mean'] if 'mean' in opt else None
|
52 |
+
self.std = opt['std'] if 'std' in opt else None
|
53 |
+
|
54 |
+
self.gt_folder, self.lq_folder = opt['dataroot_gt'], opt['dataroot_lq']
|
55 |
+
if 'filename_tmpl' in opt:
|
56 |
+
self.filename_tmpl = opt['filename_tmpl']
|
57 |
+
else:
|
58 |
+
self.filename_tmpl = '{}'
|
59 |
+
|
60 |
+
if self.io_backend_opt['type'] == 'lmdb':
|
61 |
+
self.io_backend_opt['db_paths'] = [self.lq_folder, self.gt_folder]
|
62 |
+
self.io_backend_opt['client_keys'] = ['lq', 'gt']
|
63 |
+
self.paths = paired_paths_from_lmdb(
|
64 |
+
[self.lq_folder, self.gt_folder], ['lq', 'gt'])
|
65 |
+
elif 'meta_info_file' in self.opt and self.opt[
|
66 |
+
'meta_info_file'] is not None:
|
67 |
+
self.paths = paired_paths_from_meta_info_file(
|
68 |
+
[self.lq_folder, self.gt_folder], ['lq', 'gt'],
|
69 |
+
self.opt['meta_info_file'], self.filename_tmpl)
|
70 |
+
else:
|
71 |
+
self.paths = paired_paths_from_folder(
|
72 |
+
[self.lq_folder, self.gt_folder], ['lq', 'gt'],
|
73 |
+
self.filename_tmpl)
|
74 |
+
|
75 |
+
if self.opt['phase'] == 'train':
|
76 |
+
self.geometric_augs = opt['geometric_augs']
|
77 |
+
|
78 |
+
def __getitem__(self, index):
|
79 |
+
if self.file_client is None:
|
80 |
+
self.file_client = FileClient(
|
81 |
+
self.io_backend_opt.pop('type'), **self.io_backend_opt)
|
82 |
+
|
83 |
+
scale = self.opt['scale']
|
84 |
+
index = index % len(self.paths)
|
85 |
+
# Load gt and lq images. Dimension order: HWC; channel order: BGR;
|
86 |
+
# image range: [0, 1], float32.
|
87 |
+
gt_path = self.paths[index]['gt_path']
|
88 |
+
img_bytes = self.file_client.get(gt_path, 'gt')
|
89 |
+
try:
|
90 |
+
img_gt = imfrombytes(img_bytes, float32=True)
|
91 |
+
except:
|
92 |
+
raise Exception("gt path {} not working".format(gt_path))
|
93 |
+
|
94 |
+
lq_path = self.paths[index]['lq_path']
|
95 |
+
img_bytes = self.file_client.get(lq_path, 'lq')
|
96 |
+
try:
|
97 |
+
img_lq = imfrombytes(img_bytes, float32=True)
|
98 |
+
except:
|
99 |
+
raise Exception("lq path {} not working".format(lq_path))
|
100 |
+
|
101 |
+
# augmentation for training
|
102 |
+
if self.opt['phase'] == 'train':
|
103 |
+
gt_size = self.opt['gt_size']
|
104 |
+
# padding
|
105 |
+
img_gt, img_lq = padding(img_gt, img_lq, gt_size)
|
106 |
+
|
107 |
+
# random crop
|
108 |
+
img_gt, img_lq = paired_random_crop(img_gt, img_lq, gt_size, scale,
|
109 |
+
gt_path)
|
110 |
+
|
111 |
+
# flip, rotation augmentations
|
112 |
+
if self.geometric_augs:
|
113 |
+
img_gt, img_lq = random_augmentation(img_gt, img_lq)
|
114 |
+
|
115 |
+
# BGR to RGB, HWC to CHW, numpy to tensor
|
116 |
+
img_gt, img_lq = img2tensor([img_gt, img_lq],
|
117 |
+
bgr2rgb=True,
|
118 |
+
float32=True)
|
119 |
+
# normalize
|
120 |
+
if self.mean is not None or self.std is not None:
|
121 |
+
normalize(img_lq, self.mean, self.std, inplace=True)
|
122 |
+
normalize(img_gt, self.mean, self.std, inplace=True)
|
123 |
+
label = self.get_label(lq_path,)
|
124 |
+
return {
|
125 |
+
'lq': img_lq,
|
126 |
+
'gt': img_gt,
|
127 |
+
'lq_path': lq_path,
|
128 |
+
'gt_path': gt_path,
|
129 |
+
'label': label
|
130 |
+
}
|
131 |
+
def get_label(self, lq_path):
|
132 |
+
img_name = lq_path.split("/")[-1]
|
133 |
+
if "im_" in img_name:
|
134 |
+
return 0
|
135 |
+
elif '.jpg' in img_name:
|
136 |
+
return 1
|
137 |
+
elif 'rain' in img_name:
|
138 |
+
return 2
|
139 |
+
else:
|
140 |
+
return 4
|
141 |
+
|
142 |
+
def __len__(self):
|
143 |
+
return len(self.paths)
|
144 |
+
|
145 |
+
class Dataset_GaussianDenoising(data.Dataset):
|
146 |
+
"""Paired image dataset for image restoration.
|
147 |
+
|
148 |
+
Read LQ (Low Quality, e.g. LR (Low Resolution), blurry, noisy, etc) and
|
149 |
+
GT image pairs.
|
150 |
+
|
151 |
+
There are three modes:
|
152 |
+
1. 'lmdb': Use lmdb files.
|
153 |
+
If opt['io_backend'] == lmdb.
|
154 |
+
2. 'meta_info_file': Use meta information file to generate paths.
|
155 |
+
If opt['io_backend'] != lmdb and opt['meta_info_file'] is not None.
|
156 |
+
3. 'folder': Scan folders to generate paths.
|
157 |
+
The rest.
|
158 |
+
|
159 |
+
Args:
|
160 |
+
opt (dict): Config for train datasets. It contains the following keys:
|
161 |
+
dataroot_gt (str): Data root path for gt.
|
162 |
+
meta_info_file (str): Path for meta information file.
|
163 |
+
io_backend (dict): IO backend type and other kwarg.
|
164 |
+
gt_size (int): Cropped patched size for gt patches.
|
165 |
+
use_flip (bool): Use horizontal flips.
|
166 |
+
use_rot (bool): Use rotation (use vertical flip and transposing h
|
167 |
+
and w for implementation).
|
168 |
+
|
169 |
+
scale (bool): Scale, which will be added automatically.
|
170 |
+
phase (str): 'train' or 'val'.
|
171 |
+
"""
|
172 |
+
|
173 |
+
def __init__(self, opt):
|
174 |
+
super(Dataset_GaussianDenoising, self).__init__()
|
175 |
+
self.opt = opt
|
176 |
+
|
177 |
+
if self.opt['phase'] == 'train':
|
178 |
+
self.sigma_type = opt['sigma_type']
|
179 |
+
self.sigma_range = opt['sigma_range']
|
180 |
+
assert self.sigma_type in ['constant', 'random', 'choice']
|
181 |
+
else:
|
182 |
+
self.sigma_test = opt['sigma_test']
|
183 |
+
self.in_ch = opt['in_ch']
|
184 |
+
|
185 |
+
# file client (io backend)
|
186 |
+
self.file_client = None
|
187 |
+
self.io_backend_opt = opt['io_backend']
|
188 |
+
self.mean = opt['mean'] if 'mean' in opt else None
|
189 |
+
self.std = opt['std'] if 'std' in opt else None
|
190 |
+
|
191 |
+
self.gt_folder = opt['dataroot_gt']
|
192 |
+
|
193 |
+
if self.io_backend_opt['type'] == 'lmdb':
|
194 |
+
self.io_backend_opt['db_paths'] = [self.gt_folder]
|
195 |
+
self.io_backend_opt['client_keys'] = ['gt']
|
196 |
+
self.paths = paths_from_lmdb(self.gt_folder)
|
197 |
+
elif 'meta_info_file' in self.opt:
|
198 |
+
with open(self.opt['meta_info_file'], 'r') as fin:
|
199 |
+
self.paths = [
|
200 |
+
osp.join(self.gt_folder,
|
201 |
+
line.split(' ')[0]) for line in fin
|
202 |
+
]
|
203 |
+
else:
|
204 |
+
self.paths = sorted(list(scandir(self.gt_folder, full_path=True)))
|
205 |
+
|
206 |
+
if self.opt['phase'] == 'train':
|
207 |
+
self.geometric_augs = self.opt['geometric_augs']
|
208 |
+
|
209 |
+
def __getitem__(self, index):
|
210 |
+
if self.file_client is None:
|
211 |
+
self.file_client = FileClient(
|
212 |
+
self.io_backend_opt.pop('type'), **self.io_backend_opt)
|
213 |
+
|
214 |
+
scale = self.opt['scale']
|
215 |
+
index = index % len(self.paths)
|
216 |
+
# Load gt and lq images. Dimension order: HWC; channel order: BGR;
|
217 |
+
# image range: [0, 1], float32.
|
218 |
+
gt_path = self.paths[index]['gt_path']
|
219 |
+
img_bytes = self.file_client.get(gt_path, 'gt')
|
220 |
+
|
221 |
+
if self.in_ch == 3:
|
222 |
+
try:
|
223 |
+
img_gt = imfrombytes(img_bytes, float32=True)
|
224 |
+
except:
|
225 |
+
raise Exception("gt path {} not working".format(gt_path))
|
226 |
+
|
227 |
+
img_gt = cv2.cvtColor(img_gt, cv2.COLOR_BGR2RGB)
|
228 |
+
else:
|
229 |
+
try:
|
230 |
+
img_gt = imfrombytes(img_bytes, flag='grayscale', float32=True)
|
231 |
+
except:
|
232 |
+
raise Exception("gt path {} not working".format(gt_path))
|
233 |
+
|
234 |
+
img_gt = np.expand_dims(img_gt, axis=2)
|
235 |
+
img_lq = img_gt.copy()
|
236 |
+
|
237 |
+
|
238 |
+
# augmentation for training
|
239 |
+
if self.opt['phase'] == 'train':
|
240 |
+
gt_size = self.opt['gt_size']
|
241 |
+
# padding
|
242 |
+
img_gt, img_lq = padding(img_gt, img_lq, gt_size)
|
243 |
+
|
244 |
+
# random crop
|
245 |
+
img_gt, img_lq = paired_random_crop(img_gt, img_lq, gt_size, scale,
|
246 |
+
gt_path)
|
247 |
+
# flip, rotation
|
248 |
+
if self.geometric_augs:
|
249 |
+
img_gt, img_lq = random_augmentation(img_gt, img_lq)
|
250 |
+
|
251 |
+
img_gt, img_lq = img2tensor([img_gt, img_lq],
|
252 |
+
bgr2rgb=False,
|
253 |
+
float32=True)
|
254 |
+
|
255 |
+
|
256 |
+
if self.sigma_type == 'constant':
|
257 |
+
sigma_value = self.sigma_range
|
258 |
+
elif self.sigma_type == 'random':
|
259 |
+
sigma_value = random.uniform(self.sigma_range[0], self.sigma_range[1])
|
260 |
+
elif self.sigma_type == 'choice':
|
261 |
+
sigma_value = random.choice(self.sigma_range)
|
262 |
+
|
263 |
+
noise_level = torch.FloatTensor([sigma_value])/255.0
|
264 |
+
# noise_level_map = torch.ones((1, img_lq.size(1), img_lq.size(2))).mul_(noise_level).float()
|
265 |
+
noise = torch.randn(img_lq.size()).mul_(noise_level).float()
|
266 |
+
img_lq.add_(noise)
|
267 |
+
|
268 |
+
else:
|
269 |
+
np.random.seed(seed=0)
|
270 |
+
img_lq += np.random.normal(0, self.sigma_test/255.0, img_lq.shape)
|
271 |
+
# noise_level_map = torch.ones((1, img_lq.shape[0], img_lq.shape[1])).mul_(self.sigma_test/255.0).float()
|
272 |
+
|
273 |
+
img_gt, img_lq = img2tensor([img_gt, img_lq],
|
274 |
+
bgr2rgb=False,
|
275 |
+
float32=True)
|
276 |
+
|
277 |
+
return {
|
278 |
+
'lq': img_lq,
|
279 |
+
'gt': img_gt,
|
280 |
+
'lq_path': gt_path,
|
281 |
+
'gt_path': gt_path
|
282 |
+
}
|
283 |
+
|
284 |
+
def __len__(self):
|
285 |
+
return len(self.paths)
|
286 |
+
|
287 |
+
class Dataset_DefocusDeblur_DualPixel_16bit(data.Dataset):
|
288 |
+
def __init__(self, opt):
|
289 |
+
super(Dataset_DefocusDeblur_DualPixel_16bit, self).__init__()
|
290 |
+
self.opt = opt
|
291 |
+
# file client (io backend)
|
292 |
+
self.file_client = None
|
293 |
+
self.io_backend_opt = opt['io_backend']
|
294 |
+
self.mean = opt['mean'] if 'mean' in opt else None
|
295 |
+
self.std = opt['std'] if 'std' in opt else None
|
296 |
+
|
297 |
+
self.gt_folder, self.lqL_folder, self.lqR_folder = opt['dataroot_gt'], opt['dataroot_lqL'], opt['dataroot_lqR']
|
298 |
+
if 'filename_tmpl' in opt:
|
299 |
+
self.filename_tmpl = opt['filename_tmpl']
|
300 |
+
else:
|
301 |
+
self.filename_tmpl = '{}'
|
302 |
+
|
303 |
+
self.paths = paired_DP_paths_from_folder(
|
304 |
+
[self.lqL_folder, self.lqR_folder, self.gt_folder], ['lqL', 'lqR', 'gt'],
|
305 |
+
self.filename_tmpl)
|
306 |
+
|
307 |
+
if self.opt['phase'] == 'train':
|
308 |
+
self.geometric_augs = self.opt['geometric_augs']
|
309 |
+
|
310 |
+
def __getitem__(self, index):
|
311 |
+
if self.file_client is None:
|
312 |
+
self.file_client = FileClient(
|
313 |
+
self.io_backend_opt.pop('type'), **self.io_backend_opt)
|
314 |
+
|
315 |
+
scale = self.opt['scale']
|
316 |
+
index = index % len(self.paths)
|
317 |
+
# Load gt and lq images. Dimension order: HWC; channel order: BGR;
|
318 |
+
# image range: [0, 1], float32.
|
319 |
+
gt_path = self.paths[index]['gt_path']
|
320 |
+
img_bytes = self.file_client.get(gt_path, 'gt')
|
321 |
+
try:
|
322 |
+
img_gt = imfrombytesDP(img_bytes, float32=True)
|
323 |
+
except:
|
324 |
+
raise Exception("gt path {} not working".format(gt_path))
|
325 |
+
|
326 |
+
lqL_path = self.paths[index]['lqL_path']
|
327 |
+
img_bytes = self.file_client.get(lqL_path, 'lqL')
|
328 |
+
try:
|
329 |
+
img_lqL = imfrombytesDP(img_bytes, float32=True)
|
330 |
+
except:
|
331 |
+
raise Exception("lqL path {} not working".format(lqL_path))
|
332 |
+
|
333 |
+
lqR_path = self.paths[index]['lqR_path']
|
334 |
+
img_bytes = self.file_client.get(lqR_path, 'lqR')
|
335 |
+
try:
|
336 |
+
img_lqR = imfrombytesDP(img_bytes, float32=True)
|
337 |
+
except:
|
338 |
+
raise Exception("lqR path {} not working".format(lqR_path))
|
339 |
+
|
340 |
+
|
341 |
+
# augmentation for training
|
342 |
+
if self.opt['phase'] == 'train':
|
343 |
+
gt_size = self.opt['gt_size']
|
344 |
+
# padding
|
345 |
+
img_lqL, img_lqR, img_gt = padding_DP(img_lqL, img_lqR, img_gt, gt_size)
|
346 |
+
|
347 |
+
# random crop
|
348 |
+
img_lqL, img_lqR, img_gt = paired_random_crop_DP(img_lqL, img_lqR, img_gt, gt_size, scale, gt_path)
|
349 |
+
|
350 |
+
# flip, rotation
|
351 |
+
if self.geometric_augs:
|
352 |
+
img_lqL, img_lqR, img_gt = random_augmentation(img_lqL, img_lqR, img_gt)
|
353 |
+
# TODO: color space transform
|
354 |
+
# BGR to RGB, HWC to CHW, numpy to tensor
|
355 |
+
img_lqL, img_lqR, img_gt = img2tensor([img_lqL, img_lqR, img_gt],
|
356 |
+
bgr2rgb=True,
|
357 |
+
float32=True)
|
358 |
+
# normalize
|
359 |
+
if self.mean is not None or self.std is not None:
|
360 |
+
normalize(img_lqL, self.mean, self.std, inplace=True)
|
361 |
+
normalize(img_lqR, self.mean, self.std, inplace=True)
|
362 |
+
normalize(img_gt, self.mean, self.std, inplace=True)
|
363 |
+
|
364 |
+
img_lq = torch.cat([img_lqL, img_lqR], 0)
|
365 |
+
|
366 |
+
return {
|
367 |
+
'lq': img_lq,
|
368 |
+
'gt': img_gt,
|
369 |
+
'lq_path': lqL_path,
|
370 |
+
'gt_path': gt_path
|
371 |
+
}
|
372 |
+
|
373 |
+
def __len__(self):
|
374 |
+
return len(self.paths)
|
basicsr/data/prefetch_dataloader.py
ADDED
@@ -0,0 +1,126 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import queue as Queue
|
2 |
+
import threading
|
3 |
+
import torch
|
4 |
+
from torch.utils.data import DataLoader
|
5 |
+
|
6 |
+
|
7 |
+
class PrefetchGenerator(threading.Thread):
|
8 |
+
"""A general prefetch generator.
|
9 |
+
|
10 |
+
Ref:
|
11 |
+
https://stackoverflow.com/questions/7323664/python-generator-pre-fetch
|
12 |
+
|
13 |
+
Args:
|
14 |
+
generator: Python generator.
|
15 |
+
num_prefetch_queue (int): Number of prefetch queue.
|
16 |
+
"""
|
17 |
+
|
18 |
+
def __init__(self, generator, num_prefetch_queue):
|
19 |
+
threading.Thread.__init__(self)
|
20 |
+
self.queue = Queue.Queue(num_prefetch_queue)
|
21 |
+
self.generator = generator
|
22 |
+
self.daemon = True
|
23 |
+
self.start()
|
24 |
+
|
25 |
+
def run(self):
|
26 |
+
for item in self.generator:
|
27 |
+
self.queue.put(item)
|
28 |
+
self.queue.put(None)
|
29 |
+
|
30 |
+
def __next__(self):
|
31 |
+
next_item = self.queue.get()
|
32 |
+
if next_item is None:
|
33 |
+
raise StopIteration
|
34 |
+
return next_item
|
35 |
+
|
36 |
+
def __iter__(self):
|
37 |
+
return self
|
38 |
+
|
39 |
+
|
40 |
+
class PrefetchDataLoader(DataLoader):
|
41 |
+
"""Prefetch version of dataloader.
|
42 |
+
|
43 |
+
Ref:
|
44 |
+
https://github.com/IgorSusmelj/pytorch-styleguide/issues/5#
|
45 |
+
|
46 |
+
TODO:
|
47 |
+
Need to test on single gpu and ddp (multi-gpu). There is a known issue in
|
48 |
+
ddp.
|
49 |
+
|
50 |
+
Args:
|
51 |
+
num_prefetch_queue (int): Number of prefetch queue.
|
52 |
+
kwargs (dict): Other arguments for dataloader.
|
53 |
+
"""
|
54 |
+
|
55 |
+
def __init__(self, num_prefetch_queue, **kwargs):
|
56 |
+
self.num_prefetch_queue = num_prefetch_queue
|
57 |
+
super(PrefetchDataLoader, self).__init__(**kwargs)
|
58 |
+
|
59 |
+
def __iter__(self):
|
60 |
+
return PrefetchGenerator(super().__iter__(), self.num_prefetch_queue)
|
61 |
+
|
62 |
+
|
63 |
+
class CPUPrefetcher():
|
64 |
+
"""CPU prefetcher.
|
65 |
+
|
66 |
+
Args:
|
67 |
+
loader: Dataloader.
|
68 |
+
"""
|
69 |
+
|
70 |
+
def __init__(self, loader):
|
71 |
+
self.ori_loader = loader
|
72 |
+
self.loader = iter(loader)
|
73 |
+
|
74 |
+
def next(self):
|
75 |
+
try:
|
76 |
+
return next(self.loader)
|
77 |
+
except StopIteration:
|
78 |
+
return None
|
79 |
+
|
80 |
+
def reset(self):
|
81 |
+
self.loader = iter(self.ori_loader)
|
82 |
+
|
83 |
+
|
84 |
+
class CUDAPrefetcher():
|
85 |
+
"""CUDA prefetcher.
|
86 |
+
|
87 |
+
Ref:
|
88 |
+
https://github.com/NVIDIA/apex/issues/304#
|
89 |
+
|
90 |
+
It may consums more GPU memory.
|
91 |
+
|
92 |
+
Args:
|
93 |
+
loader: Dataloader.
|
94 |
+
opt (dict): Options.
|
95 |
+
"""
|
96 |
+
|
97 |
+
def __init__(self, loader, opt):
|
98 |
+
self.ori_loader = loader
|
99 |
+
self.loader = iter(loader)
|
100 |
+
self.opt = opt
|
101 |
+
self.stream = torch.cuda.Stream()
|
102 |
+
self.device = torch.device('cuda' if opt['num_gpu'] != 0 else 'cpu')
|
103 |
+
self.preload()
|
104 |
+
|
105 |
+
def preload(self):
|
106 |
+
try:
|
107 |
+
self.batch = next(self.loader) # self.batch is a dict
|
108 |
+
except StopIteration:
|
109 |
+
self.batch = None
|
110 |
+
return None
|
111 |
+
# put tensors to gpu
|
112 |
+
with torch.cuda.stream(self.stream):
|
113 |
+
for k, v in self.batch.items():
|
114 |
+
if torch.is_tensor(v):
|
115 |
+
self.batch[k] = self.batch[k].to(
|
116 |
+
device=self.device, non_blocking=True)
|
117 |
+
|
118 |
+
def next(self):
|
119 |
+
torch.cuda.current_stream().wait_stream(self.stream)
|
120 |
+
batch = self.batch
|
121 |
+
self.preload()
|
122 |
+
return batch
|
123 |
+
|
124 |
+
def reset(self):
|
125 |
+
self.loader = iter(self.ori_loader)
|
126 |
+
self.preload()
|
basicsr/data/single_image_dataset.py
ADDED
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from os import path as osp
|
2 |
+
from torch.utils import data as data
|
3 |
+
from torchvision.transforms.functional import normalize
|
4 |
+
|
5 |
+
from basicsr.data.data_util import paths_from_lmdb
|
6 |
+
from basicsr.utils import FileClient, imfrombytes, img2tensor, scandir
|
7 |
+
|
8 |
+
|
9 |
+
class SingleImageDataset(data.Dataset):
|
10 |
+
"""Read only lq images in the test phase.
|
11 |
+
|
12 |
+
Read LQ (Low Quality, e.g. LR (Low Resolution), blurry, noisy, etc).
|
13 |
+
|
14 |
+
There are two modes:
|
15 |
+
1. 'meta_info_file': Use meta information file to generate paths.
|
16 |
+
2. 'folder': Scan folders to generate paths.
|
17 |
+
|
18 |
+
Args:
|
19 |
+
opt (dict): Config for train datasets. It contains the following keys:
|
20 |
+
dataroot_lq (str): Data root path for lq.
|
21 |
+
meta_info_file (str): Path for meta information file.
|
22 |
+
io_backend (dict): IO backend type and other kwarg.
|
23 |
+
"""
|
24 |
+
|
25 |
+
def __init__(self, opt):
|
26 |
+
super(SingleImageDataset, self).__init__()
|
27 |
+
self.opt = opt
|
28 |
+
# file client (io backend)
|
29 |
+
self.file_client = None
|
30 |
+
self.io_backend_opt = opt['io_backend']
|
31 |
+
self.mean = opt['mean'] if 'mean' in opt else None
|
32 |
+
self.std = opt['std'] if 'std' in opt else None
|
33 |
+
self.lq_folder = opt['dataroot_lq']
|
34 |
+
|
35 |
+
if self.io_backend_opt['type'] == 'lmdb':
|
36 |
+
self.io_backend_opt['db_paths'] = [self.lq_folder]
|
37 |
+
self.io_backend_opt['client_keys'] = ['lq']
|
38 |
+
self.paths = paths_from_lmdb(self.lq_folder)
|
39 |
+
elif 'meta_info_file' in self.opt:
|
40 |
+
with open(self.opt['meta_info_file'], 'r') as fin:
|
41 |
+
self.paths = [
|
42 |
+
osp.join(self.lq_folder,
|
43 |
+
line.split(' ')[0]) for line in fin
|
44 |
+
]
|
45 |
+
else:
|
46 |
+
self.paths = sorted(list(scandir(self.lq_folder, full_path=True)))
|
47 |
+
|
48 |
+
def __getitem__(self, index):
|
49 |
+
if self.file_client is None:
|
50 |
+
self.file_client = FileClient(
|
51 |
+
self.io_backend_opt.pop('type'), **self.io_backend_opt)
|
52 |
+
|
53 |
+
# load lq image
|
54 |
+
lq_path = self.paths[index]
|
55 |
+
img_bytes = self.file_client.get(lq_path, 'lq')
|
56 |
+
img_lq = imfrombytes(img_bytes, float32=True)
|
57 |
+
|
58 |
+
# TODO: color space transform
|
59 |
+
# BGR to RGB, HWC to CHW, numpy to tensor
|
60 |
+
img_lq = img2tensor(img_lq, bgr2rgb=True, float32=True)
|
61 |
+
# normalize
|
62 |
+
if self.mean is not None or self.std is not None:
|
63 |
+
normalize(img_lq, self.mean, self.std, inplace=True)
|
64 |
+
return {'lq': img_lq, 'lq_path': lq_path}
|
65 |
+
|
66 |
+
def __len__(self):
|
67 |
+
return len(self.paths)
|
basicsr/data/transforms.py
ADDED
@@ -0,0 +1,275 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import cv2
|
2 |
+
import random
|
3 |
+
import numpy as np
|
4 |
+
|
5 |
+
def mod_crop(img, scale):
|
6 |
+
"""Mod crop images, used during testing.
|
7 |
+
|
8 |
+
Args:
|
9 |
+
img (ndarray): Input image.
|
10 |
+
scale (int): Scale factor.
|
11 |
+
|
12 |
+
Returns:
|
13 |
+
ndarray: Result image.
|
14 |
+
"""
|
15 |
+
img = img.copy()
|
16 |
+
if img.ndim in (2, 3):
|
17 |
+
h, w = img.shape[0], img.shape[1]
|
18 |
+
h_remainder, w_remainder = h % scale, w % scale
|
19 |
+
img = img[:h - h_remainder, :w - w_remainder, ...]
|
20 |
+
else:
|
21 |
+
raise ValueError(f'Wrong img ndim: {img.ndim}.')
|
22 |
+
return img
|
23 |
+
|
24 |
+
def paired_random_crop(img_gts, img_lqs, lq_patch_size, scale, gt_path):
|
25 |
+
"""Paired random crop.
|
26 |
+
|
27 |
+
It crops lists of lq and gt images with corresponding locations.
|
28 |
+
|
29 |
+
Args:
|
30 |
+
img_gts (list[ndarray] | ndarray): GT images. Note that all images
|
31 |
+
should have the same shape. If the input is an ndarray, it will
|
32 |
+
be transformed to a list containing itself.
|
33 |
+
img_lqs (list[ndarray] | ndarray): LQ images. Note that all images
|
34 |
+
should have the same shape. If the input is an ndarray, it will
|
35 |
+
be transformed to a list containing itself.
|
36 |
+
lq_patch_size (int): LQ patch size.
|
37 |
+
scale (int): Scale factor.
|
38 |
+
gt_path (str): Path to ground-truth.
|
39 |
+
|
40 |
+
Returns:
|
41 |
+
list[ndarray] | ndarray: GT images and LQ images. If returned results
|
42 |
+
only have one element, just return ndarray.
|
43 |
+
"""
|
44 |
+
|
45 |
+
if not isinstance(img_gts, list):
|
46 |
+
img_gts = [img_gts]
|
47 |
+
if not isinstance(img_lqs, list):
|
48 |
+
img_lqs = [img_lqs]
|
49 |
+
|
50 |
+
h_lq, w_lq, _ = img_lqs[0].shape
|
51 |
+
h_gt, w_gt, _ = img_gts[0].shape
|
52 |
+
gt_patch_size = int(lq_patch_size * scale)
|
53 |
+
|
54 |
+
if h_gt != h_lq * scale or w_gt != w_lq * scale:
|
55 |
+
raise ValueError(
|
56 |
+
f'Scale mismatches. GT ({h_gt}, {w_gt}) is not {scale}x ',
|
57 |
+
f'multiplication of LQ ({h_lq}, {w_lq}).')
|
58 |
+
if h_lq < lq_patch_size or w_lq < lq_patch_size:
|
59 |
+
raise ValueError(f'LQ ({h_lq}, {w_lq}) is smaller than patch size '
|
60 |
+
f'({lq_patch_size}, {lq_patch_size}). '
|
61 |
+
f'Please remove {gt_path}.')
|
62 |
+
|
63 |
+
# randomly choose top and left coordinates for lq patch
|
64 |
+
top = random.randint(0, h_lq - lq_patch_size)
|
65 |
+
left = random.randint(0, w_lq - lq_patch_size)
|
66 |
+
|
67 |
+
# crop lq patch
|
68 |
+
img_lqs = [
|
69 |
+
v[top:top + lq_patch_size, left:left + lq_patch_size, ...]
|
70 |
+
for v in img_lqs
|
71 |
+
]
|
72 |
+
|
73 |
+
# crop corresponding gt patch
|
74 |
+
top_gt, left_gt = int(top * scale), int(left * scale)
|
75 |
+
img_gts = [
|
76 |
+
v[top_gt:top_gt + gt_patch_size, left_gt:left_gt + gt_patch_size, ...]
|
77 |
+
for v in img_gts
|
78 |
+
]
|
79 |
+
if len(img_gts) == 1:
|
80 |
+
img_gts = img_gts[0]
|
81 |
+
if len(img_lqs) == 1:
|
82 |
+
img_lqs = img_lqs[0]
|
83 |
+
return img_gts, img_lqs
|
84 |
+
|
85 |
+
def paired_random_crop_DP(img_lqLs, img_lqRs, img_gts, gt_patch_size, scale, gt_path):
|
86 |
+
if not isinstance(img_gts, list):
|
87 |
+
img_gts = [img_gts]
|
88 |
+
if not isinstance(img_lqLs, list):
|
89 |
+
img_lqLs = [img_lqLs]
|
90 |
+
if not isinstance(img_lqRs, list):
|
91 |
+
img_lqRs = [img_lqRs]
|
92 |
+
|
93 |
+
h_lq, w_lq, _ = img_lqLs[0].shape
|
94 |
+
h_gt, w_gt, _ = img_gts[0].shape
|
95 |
+
lq_patch_size = gt_patch_size // scale
|
96 |
+
|
97 |
+
if h_gt != h_lq * scale or w_gt != w_lq * scale:
|
98 |
+
raise ValueError(
|
99 |
+
f'Scale mismatches. GT ({h_gt}, {w_gt}) is not {scale}x ',
|
100 |
+
f'multiplication of LQ ({h_lq}, {w_lq}).')
|
101 |
+
if h_lq < lq_patch_size or w_lq < lq_patch_size:
|
102 |
+
raise ValueError(f'LQ ({h_lq}, {w_lq}) is smaller than patch size '
|
103 |
+
f'({lq_patch_size}, {lq_patch_size}). '
|
104 |
+
f'Please remove {gt_path}.')
|
105 |
+
|
106 |
+
# randomly choose top and left coordinates for lq patch
|
107 |
+
top = random.randint(0, h_lq - lq_patch_size)
|
108 |
+
left = random.randint(0, w_lq - lq_patch_size)
|
109 |
+
|
110 |
+
# crop lq patch
|
111 |
+
img_lqLs = [
|
112 |
+
v[top:top + lq_patch_size, left:left + lq_patch_size, ...]
|
113 |
+
for v in img_lqLs
|
114 |
+
]
|
115 |
+
|
116 |
+
img_lqRs = [
|
117 |
+
v[top:top + lq_patch_size, left:left + lq_patch_size, ...]
|
118 |
+
for v in img_lqRs
|
119 |
+
]
|
120 |
+
|
121 |
+
# crop corresponding gt patch
|
122 |
+
top_gt, left_gt = int(top * scale), int(left * scale)
|
123 |
+
img_gts = [
|
124 |
+
v[top_gt:top_gt + gt_patch_size, left_gt:left_gt + gt_patch_size, ...]
|
125 |
+
for v in img_gts
|
126 |
+
]
|
127 |
+
if len(img_gts) == 1:
|
128 |
+
img_gts = img_gts[0]
|
129 |
+
if len(img_lqLs) == 1:
|
130 |
+
img_lqLs = img_lqLs[0]
|
131 |
+
if len(img_lqRs) == 1:
|
132 |
+
img_lqRs = img_lqRs[0]
|
133 |
+
return img_lqLs, img_lqRs, img_gts
|
134 |
+
|
135 |
+
|
136 |
+
def augment(imgs, hflip=True, rotation=True, flows=None, return_status=False):
|
137 |
+
"""Augment: horizontal flips OR rotate (0, 90, 180, 270 degrees).
|
138 |
+
|
139 |
+
We use vertical flip and transpose for rotation implementation.
|
140 |
+
All the images in the list use the same augmentation.
|
141 |
+
|
142 |
+
Args:
|
143 |
+
imgs (list[ndarray] | ndarray): Images to be augmented. If the input
|
144 |
+
is an ndarray, it will be transformed to a list.
|
145 |
+
hflip (bool): Horizontal flip. Default: True.
|
146 |
+
rotation (bool): Ratotation. Default: True.
|
147 |
+
flows (list[ndarray]: Flows to be augmented. If the input is an
|
148 |
+
ndarray, it will be transformed to a list.
|
149 |
+
Dimension is (h, w, 2). Default: None.
|
150 |
+
return_status (bool): Return the status of flip and rotation.
|
151 |
+
Default: False.
|
152 |
+
|
153 |
+
Returns:
|
154 |
+
list[ndarray] | ndarray: Augmented images and flows. If returned
|
155 |
+
results only have one element, just return ndarray.
|
156 |
+
|
157 |
+
"""
|
158 |
+
hflip = hflip and random.random() < 0.5
|
159 |
+
vflip = rotation and random.random() < 0.5
|
160 |
+
rot90 = rotation and random.random() < 0.5
|
161 |
+
|
162 |
+
def _augment(img):
|
163 |
+
if hflip: # horizontal
|
164 |
+
cv2.flip(img, 1, img)
|
165 |
+
if vflip: # vertical
|
166 |
+
cv2.flip(img, 0, img)
|
167 |
+
if rot90:
|
168 |
+
img = img.transpose(1, 0, 2)
|
169 |
+
return img
|
170 |
+
|
171 |
+
def _augment_flow(flow):
|
172 |
+
if hflip: # horizontal
|
173 |
+
cv2.flip(flow, 1, flow)
|
174 |
+
flow[:, :, 0] *= -1
|
175 |
+
if vflip: # vertical
|
176 |
+
cv2.flip(flow, 0, flow)
|
177 |
+
flow[:, :, 1] *= -1
|
178 |
+
if rot90:
|
179 |
+
flow = flow.transpose(1, 0, 2)
|
180 |
+
flow = flow[:, :, [1, 0]]
|
181 |
+
return flow
|
182 |
+
|
183 |
+
if not isinstance(imgs, list):
|
184 |
+
imgs = [imgs]
|
185 |
+
imgs = [_augment(img) for img in imgs]
|
186 |
+
if len(imgs) == 1:
|
187 |
+
imgs = imgs[0]
|
188 |
+
|
189 |
+
if flows is not None:
|
190 |
+
if not isinstance(flows, list):
|
191 |
+
flows = [flows]
|
192 |
+
flows = [_augment_flow(flow) for flow in flows]
|
193 |
+
if len(flows) == 1:
|
194 |
+
flows = flows[0]
|
195 |
+
return imgs, flows
|
196 |
+
else:
|
197 |
+
if return_status:
|
198 |
+
return imgs, (hflip, vflip, rot90)
|
199 |
+
else:
|
200 |
+
return imgs
|
201 |
+
|
202 |
+
|
203 |
+
def img_rotate(img, angle, center=None, scale=1.0):
|
204 |
+
"""Rotate image.
|
205 |
+
|
206 |
+
Args:
|
207 |
+
img (ndarray): Image to be rotated.
|
208 |
+
angle (float): Rotation angle in degrees. Positive values mean
|
209 |
+
counter-clockwise rotation.
|
210 |
+
center (tuple[int]): Rotation center. If the center is None,
|
211 |
+
initialize it as the center of the image. Default: None.
|
212 |
+
scale (float): Isotropic scale factor. Default: 1.0.
|
213 |
+
"""
|
214 |
+
(h, w) = img.shape[:2]
|
215 |
+
|
216 |
+
if center is None:
|
217 |
+
center = (w // 2, h // 2)
|
218 |
+
|
219 |
+
matrix = cv2.getRotationMatrix2D(center, angle, scale)
|
220 |
+
rotated_img = cv2.warpAffine(img, matrix, (w, h))
|
221 |
+
return rotated_img
|
222 |
+
|
223 |
+
def data_augmentation(image, mode):
|
224 |
+
"""
|
225 |
+
Performs data augmentation of the input image
|
226 |
+
Input:
|
227 |
+
image: a cv2 (OpenCV) image
|
228 |
+
mode: int. Choice of transformation to apply to the image
|
229 |
+
0 - no transformation
|
230 |
+
1 - flip up and down
|
231 |
+
2 - rotate counterwise 90 degree
|
232 |
+
3 - rotate 90 degree and flip up and down
|
233 |
+
4 - rotate 180 degree
|
234 |
+
5 - rotate 180 degree and flip
|
235 |
+
6 - rotate 270 degree
|
236 |
+
7 - rotate 270 degree and flip
|
237 |
+
"""
|
238 |
+
if mode == 0:
|
239 |
+
# original
|
240 |
+
out = image
|
241 |
+
elif mode == 1:
|
242 |
+
# flip up and down
|
243 |
+
out = np.flipud(image)
|
244 |
+
elif mode == 2:
|
245 |
+
# rotate counterwise 90 degree
|
246 |
+
out = np.rot90(image)
|
247 |
+
elif mode == 3:
|
248 |
+
# rotate 90 degree and flip up and down
|
249 |
+
out = np.rot90(image)
|
250 |
+
out = np.flipud(out)
|
251 |
+
elif mode == 4:
|
252 |
+
# rotate 180 degree
|
253 |
+
out = np.rot90(image, k=2)
|
254 |
+
elif mode == 5:
|
255 |
+
# rotate 180 degree and flip
|
256 |
+
out = np.rot90(image, k=2)
|
257 |
+
out = np.flipud(out)
|
258 |
+
elif mode == 6:
|
259 |
+
# rotate 270 degree
|
260 |
+
out = np.rot90(image, k=3)
|
261 |
+
elif mode == 7:
|
262 |
+
# rotate 270 degree and flip
|
263 |
+
out = np.rot90(image, k=3)
|
264 |
+
out = np.flipud(out)
|
265 |
+
else:
|
266 |
+
raise Exception('Invalid choice of image transformation')
|
267 |
+
|
268 |
+
return out
|
269 |
+
|
270 |
+
def random_augmentation(*args):
|
271 |
+
out = []
|
272 |
+
flag_aug = random.randint(0,7)
|
273 |
+
for data in args:
|
274 |
+
out.append(data_augmentation(data, flag_aug).copy())
|
275 |
+
return out
|
basicsr/data/video_test_dataset.py
ADDED
@@ -0,0 +1,325 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import glob
|
2 |
+
import torch
|
3 |
+
from os import path as osp
|
4 |
+
from torch.utils import data as data
|
5 |
+
|
6 |
+
from basicsr.data.data_util import (duf_downsample, generate_frame_indices,
|
7 |
+
read_img_seq)
|
8 |
+
from basicsr.utils import get_root_logger, scandir
|
9 |
+
|
10 |
+
|
11 |
+
class VideoTestDataset(data.Dataset):
|
12 |
+
"""Video test dataset.
|
13 |
+
|
14 |
+
Supported datasets: Vid4, REDS4, REDSofficial.
|
15 |
+
More generally, it supports testing dataset with following structures:
|
16 |
+
|
17 |
+
dataroot
|
18 |
+
├── subfolder1
|
19 |
+
├── frame000
|
20 |
+
├── frame001
|
21 |
+
├── ...
|
22 |
+
├── subfolder1
|
23 |
+
├── frame000
|
24 |
+
├── frame001
|
25 |
+
├── ...
|
26 |
+
├── ...
|
27 |
+
|
28 |
+
For testing datasets, there is no need to prepare LMDB files.
|
29 |
+
|
30 |
+
Args:
|
31 |
+
opt (dict): Config for train dataset. It contains the following keys:
|
32 |
+
dataroot_gt (str): Data root path for gt.
|
33 |
+
dataroot_lq (str): Data root path for lq.
|
34 |
+
io_backend (dict): IO backend type and other kwarg.
|
35 |
+
cache_data (bool): Whether to cache testing datasets.
|
36 |
+
name (str): Dataset name.
|
37 |
+
meta_info_file (str): The path to the file storing the list of test
|
38 |
+
folders. If not provided, all the folders in the dataroot will
|
39 |
+
be used.
|
40 |
+
num_frame (int): Window size for input frames.
|
41 |
+
padding (str): Padding mode.
|
42 |
+
"""
|
43 |
+
|
44 |
+
def __init__(self, opt):
|
45 |
+
super(VideoTestDataset, self).__init__()
|
46 |
+
self.opt = opt
|
47 |
+
self.cache_data = opt['cache_data']
|
48 |
+
self.gt_root, self.lq_root = opt['dataroot_gt'], opt['dataroot_lq']
|
49 |
+
self.data_info = {
|
50 |
+
'lq_path': [],
|
51 |
+
'gt_path': [],
|
52 |
+
'folder': [],
|
53 |
+
'idx': [],
|
54 |
+
'border': []
|
55 |
+
}
|
56 |
+
# file client (io backend)
|
57 |
+
self.file_client = None
|
58 |
+
self.io_backend_opt = opt['io_backend']
|
59 |
+
assert self.io_backend_opt[
|
60 |
+
'type'] != 'lmdb', 'No need to use lmdb during validation/test.'
|
61 |
+
|
62 |
+
logger = get_root_logger()
|
63 |
+
logger.info(f'Generate data info for VideoTestDataset - {opt["name"]}')
|
64 |
+
self.imgs_lq, self.imgs_gt = {}, {}
|
65 |
+
if 'meta_info_file' in opt:
|
66 |
+
with open(opt['meta_info_file'], 'r') as fin:
|
67 |
+
subfolders = [line.split(' ')[0] for line in fin]
|
68 |
+
subfolders_lq = [
|
69 |
+
osp.join(self.lq_root, key) for key in subfolders
|
70 |
+
]
|
71 |
+
subfolders_gt = [
|
72 |
+
osp.join(self.gt_root, key) for key in subfolders
|
73 |
+
]
|
74 |
+
else:
|
75 |
+
subfolders_lq = sorted(glob.glob(osp.join(self.lq_root, '*')))
|
76 |
+
subfolders_gt = sorted(glob.glob(osp.join(self.gt_root, '*')))
|
77 |
+
|
78 |
+
if opt['name'].lower() in ['vid4', 'reds4', 'redsofficial']:
|
79 |
+
for subfolder_lq, subfolder_gt in zip(subfolders_lq,
|
80 |
+
subfolders_gt):
|
81 |
+
# get frame list for lq and gt
|
82 |
+
subfolder_name = osp.basename(subfolder_lq)
|
83 |
+
img_paths_lq = sorted(
|
84 |
+
list(scandir(subfolder_lq, full_path=True)))
|
85 |
+
img_paths_gt = sorted(
|
86 |
+
list(scandir(subfolder_gt, full_path=True)))
|
87 |
+
|
88 |
+
max_idx = len(img_paths_lq)
|
89 |
+
assert max_idx == len(img_paths_gt), (
|
90 |
+
f'Different number of images in lq ({max_idx})'
|
91 |
+
f' and gt folders ({len(img_paths_gt)})')
|
92 |
+
|
93 |
+
self.data_info['lq_path'].extend(img_paths_lq)
|
94 |
+
self.data_info['gt_path'].extend(img_paths_gt)
|
95 |
+
self.data_info['folder'].extend([subfolder_name] * max_idx)
|
96 |
+
for i in range(max_idx):
|
97 |
+
self.data_info['idx'].append(f'{i}/{max_idx}')
|
98 |
+
border_l = [0] * max_idx
|
99 |
+
for i in range(self.opt['num_frame'] // 2):
|
100 |
+
border_l[i] = 1
|
101 |
+
border_l[max_idx - i - 1] = 1
|
102 |
+
self.data_info['border'].extend(border_l)
|
103 |
+
|
104 |
+
# cache data or save the frame list
|
105 |
+
if self.cache_data:
|
106 |
+
logger.info(
|
107 |
+
f'Cache {subfolder_name} for VideoTestDataset...')
|
108 |
+
self.imgs_lq[subfolder_name] = read_img_seq(img_paths_lq)
|
109 |
+
self.imgs_gt[subfolder_name] = read_img_seq(img_paths_gt)
|
110 |
+
else:
|
111 |
+
self.imgs_lq[subfolder_name] = img_paths_lq
|
112 |
+
self.imgs_gt[subfolder_name] = img_paths_gt
|
113 |
+
else:
|
114 |
+
raise ValueError(
|
115 |
+
f'Non-supported video test dataset: {type(opt["name"])}')
|
116 |
+
|
117 |
+
def __getitem__(self, index):
|
118 |
+
folder = self.data_info['folder'][index]
|
119 |
+
idx, max_idx = self.data_info['idx'][index].split('/')
|
120 |
+
idx, max_idx = int(idx), int(max_idx)
|
121 |
+
border = self.data_info['border'][index]
|
122 |
+
lq_path = self.data_info['lq_path'][index]
|
123 |
+
|
124 |
+
select_idx = generate_frame_indices(
|
125 |
+
idx, max_idx, self.opt['num_frame'], padding=self.opt['padding'])
|
126 |
+
|
127 |
+
if self.cache_data:
|
128 |
+
imgs_lq = self.imgs_lq[folder].index_select(
|
129 |
+
0, torch.LongTensor(select_idx))
|
130 |
+
img_gt = self.imgs_gt[folder][idx]
|
131 |
+
else:
|
132 |
+
img_paths_lq = [self.imgs_lq[folder][i] for i in select_idx]
|
133 |
+
imgs_lq = read_img_seq(img_paths_lq)
|
134 |
+
img_gt = read_img_seq([self.imgs_gt[folder][idx]])
|
135 |
+
img_gt.squeeze_(0)
|
136 |
+
|
137 |
+
return {
|
138 |
+
'lq': imgs_lq, # (t, c, h, w)
|
139 |
+
'gt': img_gt, # (c, h, w)
|
140 |
+
'folder': folder, # folder name
|
141 |
+
'idx': self.data_info['idx'][index], # e.g., 0/99
|
142 |
+
'border': border, # 1 for border, 0 for non-border
|
143 |
+
'lq_path': lq_path # center frame
|
144 |
+
}
|
145 |
+
|
146 |
+
def __len__(self):
|
147 |
+
return len(self.data_info['gt_path'])
|
148 |
+
|
149 |
+
|
150 |
+
class VideoTestVimeo90KDataset(data.Dataset):
|
151 |
+
"""Video test dataset for Vimeo90k-Test dataset.
|
152 |
+
|
153 |
+
It only keeps the center frame for testing.
|
154 |
+
For testing datasets, there is no need to prepare LMDB files.
|
155 |
+
|
156 |
+
Args:
|
157 |
+
opt (dict): Config for train dataset. It contains the following keys:
|
158 |
+
dataroot_gt (str): Data root path for gt.
|
159 |
+
dataroot_lq (str): Data root path for lq.
|
160 |
+
io_backend (dict): IO backend type and other kwarg.
|
161 |
+
cache_data (bool): Whether to cache testing datasets.
|
162 |
+
name (str): Dataset name.
|
163 |
+
meta_info_file (str): The path to the file storing the list of test
|
164 |
+
folders. If not provided, all the folders in the dataroot will
|
165 |
+
be used.
|
166 |
+
num_frame (int): Window size for input frames.
|
167 |
+
padding (str): Padding mode.
|
168 |
+
"""
|
169 |
+
|
170 |
+
def __init__(self, opt):
|
171 |
+
super(VideoTestVimeo90KDataset, self).__init__()
|
172 |
+
self.opt = opt
|
173 |
+
self.cache_data = opt['cache_data']
|
174 |
+
if self.cache_data:
|
175 |
+
raise NotImplementedError(
|
176 |
+
'cache_data in Vimeo90K-Test dataset is not implemented.')
|
177 |
+
self.gt_root, self.lq_root = opt['dataroot_gt'], opt['dataroot_lq']
|
178 |
+
self.data_info = {
|
179 |
+
'lq_path': [],
|
180 |
+
'gt_path': [],
|
181 |
+
'folder': [],
|
182 |
+
'idx': [],
|
183 |
+
'border': []
|
184 |
+
}
|
185 |
+
neighbor_list = [
|
186 |
+
i + (9 - opt['num_frame']) // 2 for i in range(opt['num_frame'])
|
187 |
+
]
|
188 |
+
|
189 |
+
# file client (io backend)
|
190 |
+
self.file_client = None
|
191 |
+
self.io_backend_opt = opt['io_backend']
|
192 |
+
assert self.io_backend_opt[
|
193 |
+
'type'] != 'lmdb', 'No need to use lmdb during validation/test.'
|
194 |
+
|
195 |
+
logger = get_root_logger()
|
196 |
+
logger.info(f'Generate data info for VideoTestDataset - {opt["name"]}')
|
197 |
+
with open(opt['meta_info_file'], 'r') as fin:
|
198 |
+
subfolders = [line.split(' ')[0] for line in fin]
|
199 |
+
for idx, subfolder in enumerate(subfolders):
|
200 |
+
gt_path = osp.join(self.gt_root, subfolder, 'im4.png')
|
201 |
+
self.data_info['gt_path'].append(gt_path)
|
202 |
+
lq_paths = [
|
203 |
+
osp.join(self.lq_root, subfolder, f'im{i}.png')
|
204 |
+
for i in neighbor_list
|
205 |
+
]
|
206 |
+
self.data_info['lq_path'].append(lq_paths)
|
207 |
+
self.data_info['folder'].append('vimeo90k')
|
208 |
+
self.data_info['idx'].append(f'{idx}/{len(subfolders)}')
|
209 |
+
self.data_info['border'].append(0)
|
210 |
+
|
211 |
+
def __getitem__(self, index):
|
212 |
+
lq_path = self.data_info['lq_path'][index]
|
213 |
+
gt_path = self.data_info['gt_path'][index]
|
214 |
+
imgs_lq = read_img_seq(lq_path)
|
215 |
+
img_gt = read_img_seq([gt_path])
|
216 |
+
img_gt.squeeze_(0)
|
217 |
+
|
218 |
+
return {
|
219 |
+
'lq': imgs_lq, # (t, c, h, w)
|
220 |
+
'gt': img_gt, # (c, h, w)
|
221 |
+
'folder': self.data_info['folder'][index], # folder name
|
222 |
+
'idx': self.data_info['idx'][index], # e.g., 0/843
|
223 |
+
'border': self.data_info['border'][index], # 0 for non-border
|
224 |
+
'lq_path': lq_path[self.opt['num_frame'] // 2] # center frame
|
225 |
+
}
|
226 |
+
|
227 |
+
def __len__(self):
|
228 |
+
return len(self.data_info['gt_path'])
|
229 |
+
|
230 |
+
|
231 |
+
class VideoTestDUFDataset(VideoTestDataset):
|
232 |
+
""" Video test dataset for DUF dataset.
|
233 |
+
|
234 |
+
Args:
|
235 |
+
opt (dict): Config for train dataset.
|
236 |
+
Most of keys are the same as VideoTestDataset.
|
237 |
+
It has the follwing extra keys:
|
238 |
+
|
239 |
+
use_duf_downsampling (bool): Whether to use duf downsampling to
|
240 |
+
generate low-resolution frames.
|
241 |
+
scale (bool): Scale, which will be added automatically.
|
242 |
+
"""
|
243 |
+
|
244 |
+
def __getitem__(self, index):
|
245 |
+
folder = self.data_info['folder'][index]
|
246 |
+
idx, max_idx = self.data_info['idx'][index].split('/')
|
247 |
+
idx, max_idx = int(idx), int(max_idx)
|
248 |
+
border = self.data_info['border'][index]
|
249 |
+
lq_path = self.data_info['lq_path'][index]
|
250 |
+
|
251 |
+
select_idx = generate_frame_indices(
|
252 |
+
idx, max_idx, self.opt['num_frame'], padding=self.opt['padding'])
|
253 |
+
|
254 |
+
if self.cache_data:
|
255 |
+
if self.opt['use_duf_downsampling']:
|
256 |
+
# read imgs_gt to generate low-resolution frames
|
257 |
+
imgs_lq = self.imgs_gt[folder].index_select(
|
258 |
+
0, torch.LongTensor(select_idx))
|
259 |
+
imgs_lq = duf_downsample(
|
260 |
+
imgs_lq, kernel_size=13, scale=self.opt['scale'])
|
261 |
+
else:
|
262 |
+
imgs_lq = self.imgs_lq[folder].index_select(
|
263 |
+
0, torch.LongTensor(select_idx))
|
264 |
+
img_gt = self.imgs_gt[folder][idx]
|
265 |
+
else:
|
266 |
+
if self.opt['use_duf_downsampling']:
|
267 |
+
img_paths_lq = [self.imgs_gt[folder][i] for i in select_idx]
|
268 |
+
# read imgs_gt to generate low-resolution frames
|
269 |
+
imgs_lq = read_img_seq(
|
270 |
+
img_paths_lq,
|
271 |
+
require_mod_crop=True,
|
272 |
+
scale=self.opt['scale'])
|
273 |
+
imgs_lq = duf_downsample(
|
274 |
+
imgs_lq, kernel_size=13, scale=self.opt['scale'])
|
275 |
+
else:
|
276 |
+
img_paths_lq = [self.imgs_lq[folder][i] for i in select_idx]
|
277 |
+
imgs_lq = read_img_seq(img_paths_lq)
|
278 |
+
img_gt = read_img_seq([self.imgs_gt[folder][idx]],
|
279 |
+
require_mod_crop=True,
|
280 |
+
scale=self.opt['scale'])
|
281 |
+
img_gt.squeeze_(0)
|
282 |
+
|
283 |
+
return {
|
284 |
+
'lq': imgs_lq, # (t, c, h, w)
|
285 |
+
'gt': img_gt, # (c, h, w)
|
286 |
+
'folder': folder, # folder name
|
287 |
+
'idx': self.data_info['idx'][index], # e.g., 0/99
|
288 |
+
'border': border, # 1 for border, 0 for non-border
|
289 |
+
'lq_path': lq_path # center frame
|
290 |
+
}
|
291 |
+
|
292 |
+
|
293 |
+
class VideoRecurrentTestDataset(VideoTestDataset):
|
294 |
+
"""Video test dataset for recurrent architectures, which takes LR video
|
295 |
+
frames as input and output corresponding HR video frames.
|
296 |
+
|
297 |
+
Args:
|
298 |
+
Same as VideoTestDataset.
|
299 |
+
Unused opt:
|
300 |
+
padding (str): Padding mode.
|
301 |
+
|
302 |
+
"""
|
303 |
+
|
304 |
+
def __init__(self, opt):
|
305 |
+
super(VideoRecurrentTestDataset, self).__init__(opt)
|
306 |
+
# Find unique folder strings
|
307 |
+
self.folders = sorted(list(set(self.data_info['folder'])))
|
308 |
+
|
309 |
+
def __getitem__(self, index):
|
310 |
+
folder = self.folders[index]
|
311 |
+
|
312 |
+
if self.cache_data:
|
313 |
+
imgs_lq = self.imgs_lq[folder]
|
314 |
+
imgs_gt = self.imgs_gt[folder]
|
315 |
+
else:
|
316 |
+
raise NotImplementedError('Without cache_data is not implemented.')
|
317 |
+
|
318 |
+
return {
|
319 |
+
'lq': imgs_lq,
|
320 |
+
'gt': imgs_gt,
|
321 |
+
'folder': folder,
|
322 |
+
}
|
323 |
+
|
324 |
+
def __len__(self):
|
325 |
+
return len(self.folders)
|
basicsr/metrics/__init__.py
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from .niqe import calculate_niqe
|
2 |
+
from .psnr_ssim import calculate_psnr, calculate_ssim
|
3 |
+
|
4 |
+
__all__ = ['calculate_psnr', 'calculate_ssim', 'calculate_niqe']
|
basicsr/metrics/__pycache__/__init__.cpython-38.pyc
ADDED
Binary file (348 Bytes). View file
|
|
basicsr/metrics/__pycache__/metric_util.cpython-38.pyc
ADDED
Binary file (1.55 kB). View file
|
|
basicsr/metrics/__pycache__/niqe.cpython-38.pyc
ADDED
Binary file (6.53 kB). View file
|
|
basicsr/metrics/__pycache__/psnr_ssim.cpython-38.pyc
ADDED
Binary file (7.65 kB). View file
|
|
basicsr/metrics/fid.py
ADDED
@@ -0,0 +1,102 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import numpy as np
|
2 |
+
import torch
|
3 |
+
import torch.nn as nn
|
4 |
+
from scipy import linalg
|
5 |
+
from tqdm import tqdm
|
6 |
+
|
7 |
+
from basicsr.models.archs.inception import InceptionV3
|
8 |
+
|
9 |
+
|
10 |
+
def load_patched_inception_v3(device='cuda',
|
11 |
+
resize_input=True,
|
12 |
+
normalize_input=False):
|
13 |
+
# we may not resize the input, but in [rosinality/stylegan2-pytorch] it
|
14 |
+
# does resize the input.
|
15 |
+
inception = InceptionV3([3],
|
16 |
+
resize_input=resize_input,
|
17 |
+
normalize_input=normalize_input)
|
18 |
+
inception = nn.DataParallel(inception).eval().to(device)
|
19 |
+
return inception
|
20 |
+
|
21 |
+
|
22 |
+
@torch.no_grad()
|
23 |
+
def extract_inception_features(data_generator,
|
24 |
+
inception,
|
25 |
+
len_generator=None,
|
26 |
+
device='cuda'):
|
27 |
+
"""Extract inception features.
|
28 |
+
|
29 |
+
Args:
|
30 |
+
data_generator (generator): A data generator.
|
31 |
+
inception (nn.Module): Inception model.
|
32 |
+
len_generator (int): Length of the data_generator to show the
|
33 |
+
progressbar. Default: None.
|
34 |
+
device (str): Device. Default: cuda.
|
35 |
+
|
36 |
+
Returns:
|
37 |
+
Tensor: Extracted features.
|
38 |
+
"""
|
39 |
+
if len_generator is not None:
|
40 |
+
pbar = tqdm(total=len_generator, unit='batch', desc='Extract')
|
41 |
+
else:
|
42 |
+
pbar = None
|
43 |
+
features = []
|
44 |
+
|
45 |
+
for data in data_generator:
|
46 |
+
if pbar:
|
47 |
+
pbar.update(1)
|
48 |
+
data = data.to(device)
|
49 |
+
feature = inception(data)[0].view(data.shape[0], -1)
|
50 |
+
features.append(feature.to('cpu'))
|
51 |
+
if pbar:
|
52 |
+
pbar.close()
|
53 |
+
features = torch.cat(features, 0)
|
54 |
+
return features
|
55 |
+
|
56 |
+
|
57 |
+
def calculate_fid(mu1, sigma1, mu2, sigma2, eps=1e-6):
|
58 |
+
"""Numpy implementation of the Frechet Distance.
|
59 |
+
|
60 |
+
The Frechet distance between two multivariate Gaussians X_1 ~ N(mu_1, C_1)
|
61 |
+
and X_2 ~ N(mu_2, C_2) is
|
62 |
+
d^2 = ||mu_1 - mu_2||^2 + Tr(C_1 + C_2 - 2*sqrt(C_1*C_2)).
|
63 |
+
Stable version by Dougal J. Sutherland.
|
64 |
+
|
65 |
+
Args:
|
66 |
+
mu1 (np.array): The sample mean over activations.
|
67 |
+
sigma1 (np.array): The covariance matrix over activations for
|
68 |
+
generated samples.
|
69 |
+
mu2 (np.array): The sample mean over activations, precalculated on an
|
70 |
+
representative data set.
|
71 |
+
sigma2 (np.array): The covariance matrix over activations,
|
72 |
+
precalculated on an representative data set.
|
73 |
+
|
74 |
+
Returns:
|
75 |
+
float: The Frechet Distance.
|
76 |
+
"""
|
77 |
+
assert mu1.shape == mu2.shape, 'Two mean vectors have different lengths'
|
78 |
+
assert sigma1.shape == sigma2.shape, (
|
79 |
+
'Two covariances have different dimensions')
|
80 |
+
|
81 |
+
cov_sqrt, _ = linalg.sqrtm(sigma1 @ sigma2, disp=False)
|
82 |
+
|
83 |
+
# Product might be almost singular
|
84 |
+
if not np.isfinite(cov_sqrt).all():
|
85 |
+
print('Product of cov matrices is singular. Adding {eps} to diagonal '
|
86 |
+
'of cov estimates')
|
87 |
+
offset = np.eye(sigma1.shape[0]) * eps
|
88 |
+
cov_sqrt = linalg.sqrtm((sigma1 + offset) @ (sigma2 + offset))
|
89 |
+
|
90 |
+
# Numerical error might give slight imaginary component
|
91 |
+
if np.iscomplexobj(cov_sqrt):
|
92 |
+
if not np.allclose(np.diagonal(cov_sqrt).imag, 0, atol=1e-3):
|
93 |
+
m = np.max(np.abs(cov_sqrt.imag))
|
94 |
+
raise ValueError(f'Imaginary component {m}')
|
95 |
+
cov_sqrt = cov_sqrt.real
|
96 |
+
|
97 |
+
mean_diff = mu1 - mu2
|
98 |
+
mean_norm = mean_diff @ mean_diff
|
99 |
+
trace = np.trace(sigma1) + np.trace(sigma2) - 2 * np.trace(cov_sqrt)
|
100 |
+
fid = mean_norm + trace
|
101 |
+
|
102 |
+
return fid
|
basicsr/metrics/metric_util.py
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import numpy as np
|
2 |
+
|
3 |
+
from basicsr.utils.matlab_functions import bgr2ycbcr
|
4 |
+
|
5 |
+
|
6 |
+
def reorder_image(img, input_order='HWC'):
|
7 |
+
"""Reorder images to 'HWC' order.
|
8 |
+
|
9 |
+
If the input_order is (h, w), return (h, w, 1);
|
10 |
+
If the input_order is (c, h, w), return (h, w, c);
|
11 |
+
If the input_order is (h, w, c), return as it is.
|
12 |
+
|
13 |
+
Args:
|
14 |
+
img (ndarray): Input image.
|
15 |
+
input_order (str): Whether the input order is 'HWC' or 'CHW'.
|
16 |
+
If the input image shape is (h, w), input_order will not have
|
17 |
+
effects. Default: 'HWC'.
|
18 |
+
|
19 |
+
Returns:
|
20 |
+
ndarray: reordered image.
|
21 |
+
"""
|
22 |
+
|
23 |
+
if input_order not in ['HWC', 'CHW']:
|
24 |
+
raise ValueError(
|
25 |
+
f'Wrong input_order {input_order}. Supported input_orders are '
|
26 |
+
"'HWC' and 'CHW'")
|
27 |
+
if len(img.shape) == 2:
|
28 |
+
img = img[..., None]
|
29 |
+
if input_order == 'CHW':
|
30 |
+
img = img.transpose(1, 2, 0)
|
31 |
+
return img
|
32 |
+
|
33 |
+
|
34 |
+
def to_y_channel(img):
|
35 |
+
"""Change to Y channel of YCbCr.
|
36 |
+
|
37 |
+
Args:
|
38 |
+
img (ndarray): Images with range [0, 255].
|
39 |
+
|
40 |
+
Returns:
|
41 |
+
(ndarray): Images with range [0, 255] (float type) without round.
|
42 |
+
"""
|
43 |
+
img = img.astype(np.float32) / 255.
|
44 |
+
if img.ndim == 3 and img.shape[2] == 3:
|
45 |
+
img = bgr2ycbcr(img, y_only=True)
|
46 |
+
img = img[..., None]
|
47 |
+
return img * 255.
|
basicsr/metrics/niqe.py
ADDED
@@ -0,0 +1,205 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import cv2
|
2 |
+
import math
|
3 |
+
import numpy as np
|
4 |
+
from scipy.ndimage.filters import convolve
|
5 |
+
from scipy.special import gamma
|
6 |
+
|
7 |
+
from basicsr.metrics.metric_util import reorder_image, to_y_channel
|
8 |
+
|
9 |
+
|
10 |
+
def estimate_aggd_param(block):
|
11 |
+
"""Estimate AGGD (Asymmetric Generalized Gaussian Distribution) paramters.
|
12 |
+
|
13 |
+
Args:
|
14 |
+
block (ndarray): 2D Image block.
|
15 |
+
|
16 |
+
Returns:
|
17 |
+
tuple: alpha (float), beta_l (float) and beta_r (float) for the AGGD
|
18 |
+
distribution (Estimating the parames in Equation 7 in the paper).
|
19 |
+
"""
|
20 |
+
block = block.flatten()
|
21 |
+
gam = np.arange(0.2, 10.001, 0.001) # len = 9801
|
22 |
+
gam_reciprocal = np.reciprocal(gam)
|
23 |
+
r_gam = np.square(gamma(gam_reciprocal * 2)) / (
|
24 |
+
gamma(gam_reciprocal) * gamma(gam_reciprocal * 3))
|
25 |
+
|
26 |
+
left_std = np.sqrt(np.mean(block[block < 0]**2))
|
27 |
+
right_std = np.sqrt(np.mean(block[block > 0]**2))
|
28 |
+
gammahat = left_std / right_std
|
29 |
+
rhat = (np.mean(np.abs(block)))**2 / np.mean(block**2)
|
30 |
+
rhatnorm = (rhat * (gammahat**3 + 1) *
|
31 |
+
(gammahat + 1)) / ((gammahat**2 + 1)**2)
|
32 |
+
array_position = np.argmin((r_gam - rhatnorm)**2)
|
33 |
+
|
34 |
+
alpha = gam[array_position]
|
35 |
+
beta_l = left_std * np.sqrt(gamma(1 / alpha) / gamma(3 / alpha))
|
36 |
+
beta_r = right_std * np.sqrt(gamma(1 / alpha) / gamma(3 / alpha))
|
37 |
+
return (alpha, beta_l, beta_r)
|
38 |
+
|
39 |
+
|
40 |
+
def compute_feature(block):
|
41 |
+
"""Compute features.
|
42 |
+
|
43 |
+
Args:
|
44 |
+
block (ndarray): 2D Image block.
|
45 |
+
|
46 |
+
Returns:
|
47 |
+
list: Features with length of 18.
|
48 |
+
"""
|
49 |
+
feat = []
|
50 |
+
alpha, beta_l, beta_r = estimate_aggd_param(block)
|
51 |
+
feat.extend([alpha, (beta_l + beta_r) / 2])
|
52 |
+
|
53 |
+
# distortions disturb the fairly regular structure of natural images.
|
54 |
+
# This deviation can be captured by analyzing the sample distribution of
|
55 |
+
# the products of pairs of adjacent coefficients computed along
|
56 |
+
# horizontal, vertical and diagonal orientations.
|
57 |
+
shifts = [[0, 1], [1, 0], [1, 1], [1, -1]]
|
58 |
+
for i in range(len(shifts)):
|
59 |
+
shifted_block = np.roll(block, shifts[i], axis=(0, 1))
|
60 |
+
alpha, beta_l, beta_r = estimate_aggd_param(block * shifted_block)
|
61 |
+
# Eq. 8
|
62 |
+
mean = (beta_r - beta_l) * (gamma(2 / alpha) / gamma(1 / alpha))
|
63 |
+
feat.extend([alpha, mean, beta_l, beta_r])
|
64 |
+
return feat
|
65 |
+
|
66 |
+
|
67 |
+
def niqe(img,
|
68 |
+
mu_pris_param,
|
69 |
+
cov_pris_param,
|
70 |
+
gaussian_window,
|
71 |
+
block_size_h=96,
|
72 |
+
block_size_w=96):
|
73 |
+
"""Calculate NIQE (Natural Image Quality Evaluator) metric.
|
74 |
+
|
75 |
+
Ref: Making a "Completely Blind" Image Quality Analyzer.
|
76 |
+
This implementation could produce almost the same results as the official
|
77 |
+
MATLAB codes: http://live.ece.utexas.edu/research/quality/niqe_release.zip
|
78 |
+
|
79 |
+
Note that we do not include block overlap height and width, since they are
|
80 |
+
always 0 in the official implementation.
|
81 |
+
|
82 |
+
For good performance, it is advisable by the official implemtation to
|
83 |
+
divide the distorted image in to the same size patched as used for the
|
84 |
+
construction of multivariate Gaussian model.
|
85 |
+
|
86 |
+
Args:
|
87 |
+
img (ndarray): Input image whose quality needs to be computed. The
|
88 |
+
image must be a gray or Y (of YCbCr) image with shape (h, w).
|
89 |
+
Range [0, 255] with float type.
|
90 |
+
mu_pris_param (ndarray): Mean of a pre-defined multivariate Gaussian
|
91 |
+
model calculated on the pristine dataset.
|
92 |
+
cov_pris_param (ndarray): Covariance of a pre-defined multivariate
|
93 |
+
Gaussian model calculated on the pristine dataset.
|
94 |
+
gaussian_window (ndarray): A 7x7 Gaussian window used for smoothing the
|
95 |
+
image.
|
96 |
+
block_size_h (int): Height of the blocks in to which image is divided.
|
97 |
+
Default: 96 (the official recommended value).
|
98 |
+
block_size_w (int): Width of the blocks in to which image is divided.
|
99 |
+
Default: 96 (the official recommended value).
|
100 |
+
"""
|
101 |
+
assert img.ndim == 2, (
|
102 |
+
'Input image must be a gray or Y (of YCbCr) image with shape (h, w).')
|
103 |
+
# crop image
|
104 |
+
h, w = img.shape
|
105 |
+
num_block_h = math.floor(h / block_size_h)
|
106 |
+
num_block_w = math.floor(w / block_size_w)
|
107 |
+
img = img[0:num_block_h * block_size_h, 0:num_block_w * block_size_w]
|
108 |
+
|
109 |
+
distparam = [] # dist param is actually the multiscale features
|
110 |
+
for scale in (1, 2): # perform on two scales (1, 2)
|
111 |
+
mu = convolve(img, gaussian_window, mode='nearest')
|
112 |
+
sigma = np.sqrt(
|
113 |
+
np.abs(
|
114 |
+
convolve(np.square(img), gaussian_window, mode='nearest') -
|
115 |
+
np.square(mu)))
|
116 |
+
# normalize, as in Eq. 1 in the paper
|
117 |
+
img_nomalized = (img - mu) / (sigma + 1)
|
118 |
+
|
119 |
+
feat = []
|
120 |
+
for idx_w in range(num_block_w):
|
121 |
+
for idx_h in range(num_block_h):
|
122 |
+
# process ecah block
|
123 |
+
block = img_nomalized[idx_h * block_size_h //
|
124 |
+
scale:(idx_h + 1) * block_size_h //
|
125 |
+
scale, idx_w * block_size_w //
|
126 |
+
scale:(idx_w + 1) * block_size_w //
|
127 |
+
scale]
|
128 |
+
feat.append(compute_feature(block))
|
129 |
+
|
130 |
+
distparam.append(np.array(feat))
|
131 |
+
# TODO: matlab bicubic downsample with anti-aliasing
|
132 |
+
# for simplicity, now we use opencv instead, which will result in
|
133 |
+
# a slight difference.
|
134 |
+
if scale == 1:
|
135 |
+
h, w = img.shape
|
136 |
+
img = cv2.resize(
|
137 |
+
img / 255., (w // 2, h // 2), interpolation=cv2.INTER_LINEAR)
|
138 |
+
img = img * 255.
|
139 |
+
|
140 |
+
distparam = np.concatenate(distparam, axis=1)
|
141 |
+
|
142 |
+
# fit a MVG (multivariate Gaussian) model to distorted patch features
|
143 |
+
mu_distparam = np.nanmean(distparam, axis=0)
|
144 |
+
# use nancov. ref: https://ww2.mathworks.cn/help/stats/nancov.html
|
145 |
+
distparam_no_nan = distparam[~np.isnan(distparam).any(axis=1)]
|
146 |
+
cov_distparam = np.cov(distparam_no_nan, rowvar=False)
|
147 |
+
|
148 |
+
# compute niqe quality, Eq. 10 in the paper
|
149 |
+
invcov_param = np.linalg.pinv((cov_pris_param + cov_distparam) / 2)
|
150 |
+
quality = np.matmul(
|
151 |
+
np.matmul((mu_pris_param - mu_distparam), invcov_param),
|
152 |
+
np.transpose((mu_pris_param - mu_distparam)))
|
153 |
+
quality = np.sqrt(quality)
|
154 |
+
|
155 |
+
return quality
|
156 |
+
|
157 |
+
|
158 |
+
def calculate_niqe(img, crop_border, input_order='HWC', convert_to='y'):
|
159 |
+
"""Calculate NIQE (Natural Image Quality Evaluator) metric.
|
160 |
+
|
161 |
+
Ref: Making a "Completely Blind" Image Quality Analyzer.
|
162 |
+
This implementation could produce almost the same results as the official
|
163 |
+
MATLAB codes: http://live.ece.utexas.edu/research/quality/niqe_release.zip
|
164 |
+
|
165 |
+
We use the official params estimated from the pristine dataset.
|
166 |
+
We use the recommended block size (96, 96) without overlaps.
|
167 |
+
|
168 |
+
Args:
|
169 |
+
img (ndarray): Input image whose quality needs to be computed.
|
170 |
+
The input image must be in range [0, 255] with float/int type.
|
171 |
+
The input_order of image can be 'HW' or 'HWC' or 'CHW'. (BGR order)
|
172 |
+
If the input order is 'HWC' or 'CHW', it will be converted to gray
|
173 |
+
or Y (of YCbCr) image according to the ``convert_to`` argument.
|
174 |
+
crop_border (int): Cropped pixels in each edge of an image. These
|
175 |
+
pixels are not involved in the metric calculation.
|
176 |
+
input_order (str): Whether the input order is 'HW', 'HWC' or 'CHW'.
|
177 |
+
Default: 'HWC'.
|
178 |
+
convert_to (str): Whether coverted to 'y' (of MATLAB YCbCr) or 'gray'.
|
179 |
+
Default: 'y'.
|
180 |
+
|
181 |
+
Returns:
|
182 |
+
float: NIQE result.
|
183 |
+
"""
|
184 |
+
|
185 |
+
# we use the official params estimated from the pristine dataset.
|
186 |
+
niqe_pris_params = np.load('basicsr/metrics/niqe_pris_params.npz')
|
187 |
+
mu_pris_param = niqe_pris_params['mu_pris_param']
|
188 |
+
cov_pris_param = niqe_pris_params['cov_pris_param']
|
189 |
+
gaussian_window = niqe_pris_params['gaussian_window']
|
190 |
+
|
191 |
+
img = img.astype(np.float32)
|
192 |
+
if input_order != 'HW':
|
193 |
+
img = reorder_image(img, input_order=input_order)
|
194 |
+
if convert_to == 'y':
|
195 |
+
img = to_y_channel(img)
|
196 |
+
elif convert_to == 'gray':
|
197 |
+
img = cv2.cvtColor(img / 255., cv2.COLOR_BGR2GRAY) * 255.
|
198 |
+
img = np.squeeze(img)
|
199 |
+
|
200 |
+
if crop_border != 0:
|
201 |
+
img = img[crop_border:-crop_border, crop_border:-crop_border]
|
202 |
+
|
203 |
+
niqe_result = niqe(img, mu_pris_param, cov_pris_param, gaussian_window)
|
204 |
+
|
205 |
+
return niqe_result
|
basicsr/metrics/niqe_pris_params.npz
ADDED
Binary file (11.9 kB). View file
|
|
basicsr/metrics/psnr_ssim.py
ADDED
@@ -0,0 +1,303 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import cv2
|
2 |
+
import numpy as np
|
3 |
+
|
4 |
+
from basicsr.metrics.metric_util import reorder_image, to_y_channel
|
5 |
+
import skimage.metrics
|
6 |
+
import torch
|
7 |
+
|
8 |
+
|
9 |
+
def calculate_psnr(img1,
|
10 |
+
img2,
|
11 |
+
crop_border,
|
12 |
+
input_order='HWC',
|
13 |
+
test_y_channel=False):
|
14 |
+
"""Calculate PSNR (Peak Signal-to-Noise Ratio).
|
15 |
+
|
16 |
+
Ref: https://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio
|
17 |
+
|
18 |
+
Args:
|
19 |
+
img1 (ndarray/tensor): Images with range [0, 255]/[0, 1].
|
20 |
+
img2 (ndarray/tensor): Images with range [0, 255]/[0, 1].
|
21 |
+
crop_border (int): Cropped pixels in each edge of an image. These
|
22 |
+
pixels are not involved in the PSNR calculation.
|
23 |
+
input_order (str): Whether the input order is 'HWC' or 'CHW'.
|
24 |
+
Default: 'HWC'.
|
25 |
+
test_y_channel (bool): Test on Y channel of YCbCr. Default: False.
|
26 |
+
|
27 |
+
Returns:
|
28 |
+
float: psnr result.
|
29 |
+
"""
|
30 |
+
|
31 |
+
assert img1.shape == img2.shape, (
|
32 |
+
f'Image shapes are differnet: {img1.shape}, {img2.shape}.')
|
33 |
+
if input_order not in ['HWC', 'CHW']:
|
34 |
+
raise ValueError(
|
35 |
+
f'Wrong input_order {input_order}. Supported input_orders are '
|
36 |
+
'"HWC" and "CHW"')
|
37 |
+
if type(img1) == torch.Tensor:
|
38 |
+
if len(img1.shape) == 4:
|
39 |
+
img1 = img1.squeeze(0)
|
40 |
+
img1 = img1.detach().cpu().numpy().transpose(1,2,0)
|
41 |
+
if type(img2) == torch.Tensor:
|
42 |
+
if len(img2.shape) == 4:
|
43 |
+
img2 = img2.squeeze(0)
|
44 |
+
img2 = img2.detach().cpu().numpy().transpose(1,2,0)
|
45 |
+
|
46 |
+
img1 = reorder_image(img1, input_order=input_order)
|
47 |
+
img2 = reorder_image(img2, input_order=input_order)
|
48 |
+
img1 = img1.astype(np.float64)
|
49 |
+
img2 = img2.astype(np.float64)
|
50 |
+
|
51 |
+
if crop_border != 0:
|
52 |
+
img1 = img1[crop_border:-crop_border, crop_border:-crop_border, ...]
|
53 |
+
img2 = img2[crop_border:-crop_border, crop_border:-crop_border, ...]
|
54 |
+
|
55 |
+
if test_y_channel:
|
56 |
+
img1 = to_y_channel(img1)
|
57 |
+
img2 = to_y_channel(img2)
|
58 |
+
|
59 |
+
mse = np.mean((img1 - img2)**2)
|
60 |
+
if mse == 0:
|
61 |
+
return float('inf')
|
62 |
+
max_value = 1. if img1.max() <= 1 else 255.
|
63 |
+
return 20. * np.log10(max_value / np.sqrt(mse))
|
64 |
+
|
65 |
+
|
66 |
+
def _ssim(img1, img2):
|
67 |
+
"""Calculate SSIM (structural similarity) for one channel images.
|
68 |
+
|
69 |
+
It is called by func:`calculate_ssim`.
|
70 |
+
|
71 |
+
Args:
|
72 |
+
img1 (ndarray): Images with range [0, 255] with order 'HWC'.
|
73 |
+
img2 (ndarray): Images with range [0, 255] with order 'HWC'.
|
74 |
+
|
75 |
+
Returns:
|
76 |
+
float: ssim result.
|
77 |
+
"""
|
78 |
+
|
79 |
+
C1 = (0.01 * 255)**2
|
80 |
+
C2 = (0.03 * 255)**2
|
81 |
+
|
82 |
+
img1 = img1.astype(np.float64)
|
83 |
+
img2 = img2.astype(np.float64)
|
84 |
+
kernel = cv2.getGaussianKernel(11, 1.5)
|
85 |
+
window = np.outer(kernel, kernel.transpose())
|
86 |
+
|
87 |
+
mu1 = cv2.filter2D(img1, -1, window)[5:-5, 5:-5]
|
88 |
+
mu2 = cv2.filter2D(img2, -1, window)[5:-5, 5:-5]
|
89 |
+
mu1_sq = mu1**2
|
90 |
+
mu2_sq = mu2**2
|
91 |
+
mu1_mu2 = mu1 * mu2
|
92 |
+
sigma1_sq = cv2.filter2D(img1**2, -1, window)[5:-5, 5:-5] - mu1_sq
|
93 |
+
sigma2_sq = cv2.filter2D(img2**2, -1, window)[5:-5, 5:-5] - mu2_sq
|
94 |
+
sigma12 = cv2.filter2D(img1 * img2, -1, window)[5:-5, 5:-5] - mu1_mu2
|
95 |
+
|
96 |
+
ssim_map = ((2 * mu1_mu2 + C1) *
|
97 |
+
(2 * sigma12 + C2)) / ((mu1_sq + mu2_sq + C1) *
|
98 |
+
(sigma1_sq + sigma2_sq + C2))
|
99 |
+
return ssim_map.mean()
|
100 |
+
|
101 |
+
def prepare_for_ssim(img, k):
|
102 |
+
import torch
|
103 |
+
with torch.no_grad():
|
104 |
+
img = torch.from_numpy(img).unsqueeze(0).unsqueeze(0).float()
|
105 |
+
conv = torch.nn.Conv2d(1, 1, k, stride=1, padding=k//2, padding_mode='reflect')
|
106 |
+
conv.weight.requires_grad = False
|
107 |
+
conv.weight[:, :, :, :] = 1. / (k * k)
|
108 |
+
|
109 |
+
img = conv(img)
|
110 |
+
|
111 |
+
img = img.squeeze(0).squeeze(0)
|
112 |
+
img = img[0::k, 0::k]
|
113 |
+
return img.detach().cpu().numpy()
|
114 |
+
|
115 |
+
def prepare_for_ssim_rgb(img, k):
|
116 |
+
import torch
|
117 |
+
with torch.no_grad():
|
118 |
+
img = torch.from_numpy(img).float() #HxWx3
|
119 |
+
|
120 |
+
conv = torch.nn.Conv2d(1, 1, k, stride=1, padding=k // 2, padding_mode='reflect')
|
121 |
+
conv.weight.requires_grad = False
|
122 |
+
conv.weight[:, :, :, :] = 1. / (k * k)
|
123 |
+
|
124 |
+
new_img = []
|
125 |
+
|
126 |
+
for i in range(3):
|
127 |
+
new_img.append(conv(img[:, :, i].unsqueeze(0).unsqueeze(0)).squeeze(0).squeeze(0)[0::k, 0::k])
|
128 |
+
|
129 |
+
return torch.stack(new_img, dim=2).detach().cpu().numpy()
|
130 |
+
|
131 |
+
def _3d_gaussian_calculator(img, conv3d):
|
132 |
+
out = conv3d(img.unsqueeze(0).unsqueeze(0)).squeeze(0).squeeze(0)
|
133 |
+
return out
|
134 |
+
|
135 |
+
def _generate_3d_gaussian_kernel():
|
136 |
+
kernel = cv2.getGaussianKernel(11, 1.5)
|
137 |
+
window = np.outer(kernel, kernel.transpose())
|
138 |
+
kernel_3 = cv2.getGaussianKernel(11, 1.5)
|
139 |
+
kernel = torch.tensor(np.stack([window * k for k in kernel_3], axis=0))
|
140 |
+
conv3d = torch.nn.Conv3d(1, 1, (11, 11, 11), stride=1, padding=(5, 5, 5), bias=False, padding_mode='replicate')
|
141 |
+
conv3d.weight.requires_grad = False
|
142 |
+
conv3d.weight[0, 0, :, :, :] = kernel
|
143 |
+
return conv3d
|
144 |
+
|
145 |
+
def _ssim_3d(img1, img2, max_value):
|
146 |
+
assert len(img1.shape) == 3 and len(img2.shape) == 3
|
147 |
+
"""Calculate SSIM (structural similarity) for one channel images.
|
148 |
+
|
149 |
+
It is called by func:`calculate_ssim`.
|
150 |
+
|
151 |
+
Args:
|
152 |
+
img1 (ndarray): Images with range [0, 255]/[0, 1] with order 'HWC'.
|
153 |
+
img2 (ndarray): Images with range [0, 255]/[0, 1] with order 'HWC'.
|
154 |
+
|
155 |
+
Returns:
|
156 |
+
float: ssim result.
|
157 |
+
"""
|
158 |
+
C1 = (0.01 * max_value) ** 2
|
159 |
+
C2 = (0.03 * max_value) ** 2
|
160 |
+
img1 = img1.astype(np.float64)
|
161 |
+
img2 = img2.astype(np.float64)
|
162 |
+
|
163 |
+
kernel = _generate_3d_gaussian_kernel().cuda()
|
164 |
+
|
165 |
+
img1 = torch.tensor(img1).float().cuda()
|
166 |
+
img2 = torch.tensor(img2).float().cuda()
|
167 |
+
|
168 |
+
|
169 |
+
mu1 = _3d_gaussian_calculator(img1, kernel)
|
170 |
+
mu2 = _3d_gaussian_calculator(img2, kernel)
|
171 |
+
|
172 |
+
mu1_sq = mu1 ** 2
|
173 |
+
mu2_sq = mu2 ** 2
|
174 |
+
mu1_mu2 = mu1 * mu2
|
175 |
+
sigma1_sq = _3d_gaussian_calculator(img1 ** 2, kernel) - mu1_sq
|
176 |
+
sigma2_sq = _3d_gaussian_calculator(img2 ** 2, kernel) - mu2_sq
|
177 |
+
sigma12 = _3d_gaussian_calculator(img1*img2, kernel) - mu1_mu2
|
178 |
+
|
179 |
+
ssim_map = ((2 * mu1_mu2 + C1) *
|
180 |
+
(2 * sigma12 + C2)) / ((mu1_sq + mu2_sq + C1) *
|
181 |
+
(sigma1_sq + sigma2_sq + C2))
|
182 |
+
return float(ssim_map.mean())
|
183 |
+
|
184 |
+
def _ssim_cly(img1, img2):
|
185 |
+
assert len(img1.shape) == 2 and len(img2.shape) == 2
|
186 |
+
"""Calculate SSIM (structural similarity) for one channel images.
|
187 |
+
|
188 |
+
It is called by func:`calculate_ssim`.
|
189 |
+
|
190 |
+
Args:
|
191 |
+
img1 (ndarray): Images with range [0, 255] with order 'HWC'.
|
192 |
+
img2 (ndarray): Images with range [0, 255] with order 'HWC'.
|
193 |
+
|
194 |
+
Returns:
|
195 |
+
float: ssim result.
|
196 |
+
"""
|
197 |
+
|
198 |
+
C1 = (0.01 * 255)**2
|
199 |
+
C2 = (0.03 * 255)**2
|
200 |
+
img1 = img1.astype(np.float64)
|
201 |
+
img2 = img2.astype(np.float64)
|
202 |
+
|
203 |
+
kernel = cv2.getGaussianKernel(11, 1.5)
|
204 |
+
# print(kernel)
|
205 |
+
window = np.outer(kernel, kernel.transpose())
|
206 |
+
|
207 |
+
bt = cv2.BORDER_REPLICATE
|
208 |
+
|
209 |
+
mu1 = cv2.filter2D(img1, -1, window, borderType=bt)
|
210 |
+
mu2 = cv2.filter2D(img2, -1, window,borderType=bt)
|
211 |
+
|
212 |
+
mu1_sq = mu1**2
|
213 |
+
mu2_sq = mu2**2
|
214 |
+
mu1_mu2 = mu1 * mu2
|
215 |
+
sigma1_sq = cv2.filter2D(img1**2, -1, window, borderType=bt) - mu1_sq
|
216 |
+
sigma2_sq = cv2.filter2D(img2**2, -1, window, borderType=bt) - mu2_sq
|
217 |
+
sigma12 = cv2.filter2D(img1 * img2, -1, window, borderType=bt) - mu1_mu2
|
218 |
+
|
219 |
+
ssim_map = ((2 * mu1_mu2 + C1) *
|
220 |
+
(2 * sigma12 + C2)) / ((mu1_sq + mu2_sq + C1) *
|
221 |
+
(sigma1_sq + sigma2_sq + C2))
|
222 |
+
return ssim_map.mean()
|
223 |
+
|
224 |
+
|
225 |
+
def calculate_ssim(img1,
|
226 |
+
img2,
|
227 |
+
crop_border,
|
228 |
+
input_order='HWC',
|
229 |
+
test_y_channel=False):
|
230 |
+
"""Calculate SSIM (structural similarity).
|
231 |
+
|
232 |
+
Ref:
|
233 |
+
Image quality assessment: From error visibility to structural similarity
|
234 |
+
|
235 |
+
The results are the same as that of the official released MATLAB code in
|
236 |
+
https://ece.uwaterloo.ca/~z70wang/research/ssim/.
|
237 |
+
|
238 |
+
For three-channel images, SSIM is calculated for each channel and then
|
239 |
+
averaged.
|
240 |
+
|
241 |
+
Args:
|
242 |
+
img1 (ndarray): Images with range [0, 255].
|
243 |
+
img2 (ndarray): Images with range [0, 255].
|
244 |
+
crop_border (int): Cropped pixels in each edge of an image. These
|
245 |
+
pixels are not involved in the SSIM calculation.
|
246 |
+
input_order (str): Whether the input order is 'HWC' or 'CHW'.
|
247 |
+
Default: 'HWC'.
|
248 |
+
test_y_channel (bool): Test on Y channel of YCbCr. Default: False.
|
249 |
+
|
250 |
+
Returns:
|
251 |
+
float: ssim result.
|
252 |
+
"""
|
253 |
+
|
254 |
+
assert img1.shape == img2.shape, (
|
255 |
+
f'Image shapes are differnet: {img1.shape}, {img2.shape}.')
|
256 |
+
if input_order not in ['HWC', 'CHW']:
|
257 |
+
raise ValueError(
|
258 |
+
f'Wrong input_order {input_order}. Supported input_orders are '
|
259 |
+
'"HWC" and "CHW"')
|
260 |
+
|
261 |
+
if type(img1) == torch.Tensor:
|
262 |
+
if len(img1.shape) == 4:
|
263 |
+
img1 = img1.squeeze(0)
|
264 |
+
img1 = img1.detach().cpu().numpy().transpose(1,2,0)
|
265 |
+
if type(img2) == torch.Tensor:
|
266 |
+
if len(img2.shape) == 4:
|
267 |
+
img2 = img2.squeeze(0)
|
268 |
+
img2 = img2.detach().cpu().numpy().transpose(1,2,0)
|
269 |
+
|
270 |
+
img1 = reorder_image(img1, input_order=input_order)
|
271 |
+
img2 = reorder_image(img2, input_order=input_order)
|
272 |
+
|
273 |
+
img1 = img1.astype(np.float64)
|
274 |
+
img2 = img2.astype(np.float64)
|
275 |
+
|
276 |
+
if crop_border != 0:
|
277 |
+
img1 = img1[crop_border:-crop_border, crop_border:-crop_border, ...]
|
278 |
+
img2 = img2[crop_border:-crop_border, crop_border:-crop_border, ...]
|
279 |
+
|
280 |
+
if test_y_channel:
|
281 |
+
img1 = to_y_channel(img1)
|
282 |
+
img2 = to_y_channel(img2)
|
283 |
+
return _ssim_cly(img1[..., 0], img2[..., 0])
|
284 |
+
|
285 |
+
|
286 |
+
ssims = []
|
287 |
+
# ssims_before = []
|
288 |
+
|
289 |
+
# skimage_before = skimage.metrics.structural_similarity(img1, img2, data_range=255., multichannel=True)
|
290 |
+
# print('.._skimage',
|
291 |
+
# skimage.metrics.structural_similarity(img1, img2, data_range=255., multichannel=True))
|
292 |
+
max_value = 1 if img1.max() <= 1 else 255
|
293 |
+
with torch.no_grad():
|
294 |
+
final_ssim = _ssim_3d(img1, img2, max_value)
|
295 |
+
ssims.append(final_ssim)
|
296 |
+
|
297 |
+
# for i in range(img1.shape[2]):
|
298 |
+
# ssims_before.append(_ssim(img1, img2))
|
299 |
+
|
300 |
+
# print('..ssim mean , new {:.4f} and before {:.4f} .... skimage before {:.4f}'.format(np.array(ssims).mean(), np.array(ssims_before).mean(), skimage_before))
|
301 |
+
# ssims.append(skimage.metrics.structural_similarity(img1[..., i], img2[..., i], multichannel=False))
|
302 |
+
|
303 |
+
return np.array(ssims).mean()
|
basicsr/models/__init__.py
ADDED
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import importlib
|
2 |
+
from os import path as osp
|
3 |
+
|
4 |
+
from basicsr.utils import get_root_logger, scandir
|
5 |
+
|
6 |
+
# automatically scan and import model modules
|
7 |
+
# scan all the files under the 'models' folder and collect files ending with
|
8 |
+
# '_model.py'
|
9 |
+
model_folder = osp.dirname(osp.abspath(__file__))
|
10 |
+
model_filenames = [
|
11 |
+
osp.splitext(osp.basename(v))[0] for v in scandir(model_folder)
|
12 |
+
if v.endswith('_model.py')
|
13 |
+
]
|
14 |
+
# import all the model modules
|
15 |
+
_model_modules = [
|
16 |
+
importlib.import_module(f'basicsr.models.{file_name}')
|
17 |
+
for file_name in model_filenames
|
18 |
+
]
|
19 |
+
|
20 |
+
|
21 |
+
def create_model(opt):
|
22 |
+
"""Create model.
|
23 |
+
|
24 |
+
Args:
|
25 |
+
opt (dict): Configuration. It constains:
|
26 |
+
model_type (str): Model type.
|
27 |
+
"""
|
28 |
+
model_type = opt['model_type']
|
29 |
+
|
30 |
+
# dynamic instantiation
|
31 |
+
for module in _model_modules:
|
32 |
+
model_cls = getattr(module, model_type, None)
|
33 |
+
if model_cls is not None:
|
34 |
+
break
|
35 |
+
if model_cls is None:
|
36 |
+
raise ValueError(f'Model {model_type} is not found.')
|
37 |
+
|
38 |
+
model = model_cls(opt)
|
39 |
+
|
40 |
+
logger = get_root_logger()
|
41 |
+
logger.info(f'Model [{model.__class__.__name__}] is created.')
|
42 |
+
return model
|
basicsr/models/__pycache__/__init__.cpython-38.pyc
ADDED
Binary file (1.3 kB). View file
|
|
basicsr/models/__pycache__/base_model.cpython-38.pyc
ADDED
Binary file (13.4 kB). View file
|
|