ESPCN在Tensorflow-gpu上实现

ESPCN在Tensorflow-gpu上实现

环境:Windows10 + CUDA10.0 + cudnn7.5.1 + python3.5 + tensorflow-gpu1.13.1

参考:深度学习超分辨率重建(三): TensorFlow—— ESPCN

下载:https://github.com/drakelevy/ESPCN-TensorFlow

 

1、在训练每个新模型之前格式化训练和验证数据

1)打开..\ESPCN-TensorFlow-master目录下params.json文件修改参数,ratio表示放大倍数

ESPCN在Tensorflow-gpu上实现_第1张图片

2)cmd中cd到下载解压后的..\ESPCN-TensorFlow-master目录下,输入以下命令:

python prepare_data.py

ESPCN在Tensorflow-gpu上实现_第2张图片

 

2、开始训练

cmd中输入以下命令,可以指定时期,学习率,批量大小等:

python train.py --epochs 10 --learning_rate 0.0001 --batch_size 32

ESPCN在Tensorflow-gpu上实现_第3张图片

 

3、生成图像

必须指定checkpoint文件,低分辨率图像和输出路径。

因为这里ratio设置为4x,所以在..\ESPCN-TensorFlow-master目录下新建logdir_4x文件夹存放训练生成的权重模型。

cmd中输入以下命令:

python generate.py --checkpoint logdir_4x/train --lr_image images/t3.jpg --out_path result/t3_4x

输入为images文件夹中的t3.jpg图片,使用logdir_4x文件夹中的checkpoint,生成图像为t3_4x.png存放在result文件夹中。

ESPCN在Tensorflow-gpu上实现_第4张图片

ESPCN在Tensorflow-gpu上实现_第5张图片

 

4、错误

1)

AttributeError:module 'scipy.misc' has no attribute 'imread'

解决:

pip install pillow

2)

TypeError: slice indices must be integers or None or have an __index__ method

TypeError: 'float' object cannot be interpreted as an integer

IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices

原因:数据类型错误。在python2中,“/”只留下了整数部分,去掉了小数,是int型;在python3中,“/”的结果是真正意义上的除法,结果是float型。

解决:① 将“/”改成“//”;② 使用“int()”进行转换

3)

NameError:name 'xrange' is not defined

原因:在python2中,经常会用xrange()创建一个可迭代对象,这里的xrange-iterable是无尽的,意味着可能在这个xrange上无限迭代。由于xrange的“惰性求知“特性,如果只需迭代一次(如for循环中),range()通常比xrange()快一些。不过不建议在多次迭代中使用range(),因为range()每次都会在内存中重新生成一个列表。在python3中,range()的实现方式与xrange()函数相同。

解决:将程序中的xrange()改成range(),或者使用python2

 

5、针对错误的修改

仅供参考:

1)prepare_data.py

38行    height = ori_height // ratio
39行    width = ori_width // ratio
52行    channels = int(shape[2]) // ratio // ratio
57行                shuffled[i,j,k] = input_image[i // ratio, j // ratio, k * ratio * ratio + (i % ratio) * ratio + (j % ratio)]
145行                sub_hr_image_y = hr_image_y[int(hr_start_idx):int(hr_end_idx):1,int(hr_start_idx):int(hr_end_idx):1]

2)train.py

97行            batch_idxs = len(lr_images) // args.batch_size

3)generate.py

81行    edge = params['edge'] * params['ratio'] // 2

 

你可能感兴趣的:(ESPCN在Tensorflow-gpu上实现)