环境:Windows10 + CUDA10.0 + cudnn7.5.1 + python3.5 + tensorflow-gpu1.13.1
参考:深度学习超分辨率重建(三): TensorFlow—— ESPCN
下载:https://github.com/drakelevy/ESPCN-TensorFlow
1)打开..\ESPCN-TensorFlow-master目录下params.json文件修改参数,ratio表示放大倍数
2)cmd中cd到下载解压后的..\ESPCN-TensorFlow-master目录下,输入以下命令:
python prepare_data.py
cmd中输入以下命令,可以指定时期,学习率,批量大小等:
python train.py --epochs 10 --learning_rate 0.0001 --batch_size 32
必须指定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文件夹中。
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
仅供参考:
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