sunshangquan
commited on
Commit
·
111d9b6
1
Parent(s):
f0c4119
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
- INSTALL.md +53 -0
- README.md +47 -0
- 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
.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)
|
INSTALL.md
ADDED
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Installation
|
2 |
+
|
3 |
+
This repository is built in PyTorch 1.8.1 and tested on Ubuntu 16.04 environment (Python3.7, CUDA10.2, cuDNN7.6).
|
4 |
+
Follow these intructions
|
5 |
+
|
6 |
+
1. Clone our repository
|
7 |
+
```
|
8 |
+
git clone https://github.com/sunshangquan/Histoformer.git
|
9 |
+
cd Histoformer
|
10 |
+
```
|
11 |
+
|
12 |
+
2. Make conda environment
|
13 |
+
```
|
14 |
+
conda create -n pytorch181 python=3.7
|
15 |
+
conda activate pytorch181
|
16 |
+
```
|
17 |
+
|
18 |
+
3. Install dependencies
|
19 |
+
```
|
20 |
+
conda install pytorch=1.8 torchvision cudatoolkit=10.2 -c pytorch
|
21 |
+
pip install matplotlib scikit-learn scikit-image opencv-python yacs joblib natsort h5py tqdm
|
22 |
+
pip install einops gdown addict future lmdb numpy pyyaml requests scipy tb-nightly yapf lpips
|
23 |
+
```
|
24 |
+
|
25 |
+
4. Install basicsr
|
26 |
+
```
|
27 |
+
python setup.py develop --no_cuda_ext
|
28 |
+
```
|
29 |
+
|
30 |
+
### Download datasets from Google Drive
|
31 |
+
|
32 |
+
To be able to download datasets automatically you would need `go` and `gdrive` installed.
|
33 |
+
|
34 |
+
1. You can install `go` with the following
|
35 |
+
```
|
36 |
+
curl -O https://storage.googleapis.com/golang/go1.11.1.linux-amd64.tar.gz
|
37 |
+
mkdir -p ~/installed
|
38 |
+
tar -C ~/installed -xzf go1.11.1.linux-amd64.tar.gz
|
39 |
+
mkdir -p ~/go
|
40 |
+
```
|
41 |
+
|
42 |
+
2. Add the lines in `~/.bashrc`
|
43 |
+
```
|
44 |
+
export GOPATH=$HOME/go
|
45 |
+
export PATH=$PATH:$HOME/go/bin:$HOME/installed/go/bin
|
46 |
+
```
|
47 |
+
|
48 |
+
3. Install `gdrive` using
|
49 |
+
```
|
50 |
+
go get github.com/prasmussen/gdrive
|
51 |
+
```
|
52 |
+
|
53 |
+
4. Close current terminal and open a new terminal.
|
README.md
CHANGED
@@ -7,12 +7,59 @@ pipeline_tag: image-to-image
|
|
7 |
|
8 |
# Restoring Images in Adverse Weather Conditions via Histogram Transformer
|
9 |
|
|
|
|
|
|
|
|
|
10 |
## Abstract
|
11 |
|
12 |
Transformer-based image restoration methods in adverse weather have achieved significant progress. Most of them use self-attention along the channel dimension or within spatially fixed-range blocks to reduce computational load. However, such a compromise results in limitations in capturing long-range spatial features. Inspired by the observation that the weather-induced degradation factors mainly cause similar occlusion and brightness, in this work, we propose an efficient Histogram Transformer (Histoformer) for restoring images affected by adverse weather. It is powered by a mechanism dubbed histogram self-attention, which sorts and segments spatial features into intensity-based bins. Self-attention is then applied across bins or within each bin to selectively focus on spatial features of dynamic range and process similar degraded pixels of the long range together. To boost histogram self-attention, we present a dynamic-range convolution enabling conventional convolution to conduct operation over similar pixels rather than neighbor pixels. We also observe that the common pixel-wise losses neglect linear association and correlation between output and ground-truth. Thus, we propose to leverage the Pearson correlation coefficient as a loss function to enforce the recovered pixels following the identical order as ground-truth. Extensive experiments demonstrate the efficacy and superiority of our proposed method.
|
13 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
## Demo
|
15 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
## Citation
|
17 |
|
18 |
If you find our work useful, please cite the following paper:
|
|
|
7 |
|
8 |
# Restoring Images in Adverse Weather Conditions via Histogram Transformer
|
9 |
|
10 |
+
<img src="https://github.com/sunshangquan/Histoformer/raw/main/assets/eccv2024_cover.jpg" width="385"> | <img src="https://github.com/sunshangquan/Histoformer/raw/main/assets/histoformer.png" width="385"> |
|
11 |
+
:-------------------------:|:-------------------------:
|
12 |
+
Cover figure | Network structure
|
13 |
+
|
14 |
## Abstract
|
15 |
|
16 |
Transformer-based image restoration methods in adverse weather have achieved significant progress. Most of them use self-attention along the channel dimension or within spatially fixed-range blocks to reduce computational load. However, such a compromise results in limitations in capturing long-range spatial features. Inspired by the observation that the weather-induced degradation factors mainly cause similar occlusion and brightness, in this work, we propose an efficient Histogram Transformer (Histoformer) for restoring images affected by adverse weather. It is powered by a mechanism dubbed histogram self-attention, which sorts and segments spatial features into intensity-based bins. Self-attention is then applied across bins or within each bin to selectively focus on spatial features of dynamic range and process similar degraded pixels of the long range together. To boost histogram self-attention, we present a dynamic-range convolution enabling conventional convolution to conduct operation over similar pixels rather than neighbor pixels. We also observe that the common pixel-wise losses neglect linear association and correlation between output and ground-truth. Thus, we propose to leverage the Pearson correlation coefficient as a loss function to enforce the recovered pixels following the identical order as ground-truth. Extensive experiments demonstrate the efficacy and superiority of our proposed method.
|
17 |
|
18 |
+
## Visual Examples
|
19 |
+
|
20 |
+
![example-RainDrop.png](https://github.com/sunshangquan/Histoformer/raw/main/assets/example-RainDrop.png) | ![example-Outdoor-Rain.png](https://github.com/sunshangquan/Histoformer/raw/main/assets/example-Outdoor-Rain.png) | ![example-Snow100K-L.png](https://github.com/sunshangquan/Histoformer/raw/main/assets/example-Snow100K-L.png) | ![example-RealSnow.png](https://github.com/sunshangquan/Histoformer/raw/main/assets/example-RealSnow.png)
|
21 |
+
:-------------------------:|:-------------------------:|:-------------------------:|:-------------------------:
|
22 |
+
RainDrop | Outdoor-Rain | Snow100K-L | RealSnow
|
23 |
+
|
24 |
+
## Installation
|
25 |
+
|
26 |
+
See [INSTALL.md](INSTALL.md) for the installation of dependencies required to run Histoformer.
|
27 |
+
|
28 |
+
## Evaluation
|
29 |
+
|
30 |
+
0. ```cd Allweather```
|
31 |
+
|
32 |
+
1. Download the pre-trained [models](https://drive.google.com/drive/folders/1dmPhr8Z5iPRx9lh7TwdUFPSfwGIxp5l0?usp=drive_link) and place it in `./pretrained_models/`
|
33 |
+
|
34 |
+
2. Download test datasets from each of them, i.e., [Snow100K](https://sites.google.com/view/yunfuliu/desnownet), [Outdoor-Rain](https://github.com/liruoteng/HeavyRainRemoval), and [RainDrop](https://github.com/rui1996/DeRaindrop).
|
35 |
+
|
36 |
+
3. Test with the replaced argument ```--input_dir [INPUT_FOLDER]```
|
37 |
+
```
|
38 |
+
python test_histoformer.py --input_dir [INPUT_FOLDER] --result_dir result/ --weights pretrained_models/net_g_best.pth --yaml_file Options/Allweather_Histoformer.yml
|
39 |
+
|
40 |
+
# for realsnow
|
41 |
+
python test_histoformer.py --input_dir [INPUT_FOLDER] --result_dir result/ --weights pretrained_models/net_g_real.pth --yaml_file Options/Allweather_Histoformer.yml
|
42 |
+
```
|
43 |
+
|
44 |
+
4. Compute PSNR and SSIM by
|
45 |
+
```
|
46 |
+
python compute_psnr.py --path1 [GT-PATH] --path2 [Restored-PATH]
|
47 |
+
```
|
48 |
+
Values may be slightly different because a) the images I upload are in JPG file format for saving space, but the values reported are computed on the PNG-format images; b) some values are reported by previous works like WeatherDiff and may be slightly different from this reproduction.
|
49 |
+
|
50 |
## Demo
|
51 |
|
52 |
+
0. ```cd Allweather```
|
53 |
+
|
54 |
+
1. Download the pre-trained [models](https://drive.google.com/drive/folders/1dmPhr8Z5iPRx9lh7TwdUFPSfwGIxp5l0?usp=drive_link) and place it in `./pretrained_models/`
|
55 |
+
|
56 |
+
2. Test with the replaced argument ```--input_dir [INPUT_FOLDER]```
|
57 |
+
```
|
58 |
+
# for realsnow
|
59 |
+
python test_histoformer.py --input_dir [INPUT_FOLDER] --result_dir result/ --weights pretrained_models/net_g_real.pth --yaml_file Options/Allweather_Histoformer.yml
|
60 |
+
```
|
61 |
+
|
62 |
+
|
63 |
## Citation
|
64 |
|
65 |
If you find our work useful, please cite the following paper:
|
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 (313 Bytes). View file
|
|
basicsr/metrics/__pycache__/metric_util.cpython-38.pyc
ADDED
Binary file (1.51 kB). View file
|
|
basicsr/metrics/__pycache__/niqe.cpython-38.pyc
ADDED
Binary file (6.49 kB). View file
|
|
basicsr/metrics/__pycache__/psnr_ssim.cpython-38.pyc
ADDED
Binary file (7.61 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.25 kB). View file
|
|