手头的数据一般都是在若干个文件夹中保存有若干视频帧。例如000-199共200个文件夹,每个文件夹下有连续的200帧。模拟实验涉及降采样的LR数据,Bicubic的数据,以及真实GT数据。
之前的RBPN是在数据加载的时候用的python的Bicubic内核进行降采样,实际上:
python的Bicubic内核与matlab内核的降采样是不同的。
我用python降采样后再上采样与GT求PSNR,发现python的结果会比matlab的高一些。而数据的退化一般都是在matlab里做,然后得到三个数据:GT,LR,和Bicubic
所以Dataloader需要微改一下。
三个py文件:1.dataset.py写自己的Dataset类;2.data.py写函数;3.main.py做测试
需要假设:
- GT,LR,Bicubic文件夹下存放视频序列文件夹,视频帧的命名需要一样
- 每个文件夹下为000-199共200个文件夹,每个文件夹保存100帧:001.png-100.png
- 命名规则可以改,只需要相同
1.dataset.py代码可能需要修改的部分
for i in seq:
index1 = int(lr_filepath[char_len-7:char_len-4]) + i # 最后4-7的字符,4代表.png,若序号为03d,则为7=3+4,若为08d,则为12=8+4,同理
file_name1 = lr_filepath[0:char_len-7]+'{0:03d}'.format(index1) + '.png' # 0保存为000,{0:0xd},x可修改
if os.path.exists(file_name1):
temp = modcrop(Image.open(file_name1).convert('RGB'), scale) # 如果相邻帧存在,加入neibor[]中
neibor.append(temp)
# 定义自己的datasst类
# image_dir为存放数据集的文件夹,如.../Jilin-1;file_list为真实图像的图像名列表,如000/001.png···;
class LoadTrainingDataFromFolder(data.Dataset):
def __init__(self, image_dir, nFrames, upscale_factor, data_augmentation, file_list, path_size, transform=None):
super(LoadTrainingDataFromFolder, self).__init__()
GT_folder_name = 'train/GT/'
LR_folder_name = 'train/LR4x/'
Bic_folder_name = 'train/Bicubic4x/' # 这三个需要改成自己的
# 读出GT/file_list的内容,,即['GT/000/001.png',···,'GT/000/100.png']
gt_alist = [GT_folder_name + line.rstrip() for line in open(join(image_dir, file_list))]
lr_alist = [LR_folder_name + line.rstrip() for line in open(join(image_dir, file_list))]
bic_alist = [Bic_folder_name + line.rstrip() for line in open(join(image_dir, file_list))]
# ['E:Github_package/video_dataloader/trainGT/000/001.png',···]
self.gt_image_filenames = [join(image_dir, x) for