深度学习超分辨率重建(一): TensorFlow——SRCNN

释放双眼,带上耳机,听听看~!

1.SRCNN(原理和代码)

基于TensorFlow的代码下载:https://github.com/tegg89/SRCNN-Tensorflow

文章链接:(Learning a Deep Convolutional Network for Image Super-Resolution
, ECCV2014)

环境配置:深度学习(一):虚拟机Linux系统搭建CPU TensorFlow

**基础理论学习方便理解:**deeplearning.ai 吴恩达网上课程学习(十五)——卷积神经网络及其TensorFlow代码实现


1.1 配置环境遇到的问题:

在TensorFlow的虚拟环境中安装,不要加sodu,否则会装到默认的Python2.7里

① ModuleNotFoundError: No module named 'h5py':


1
2
1pip install h5py
2

tensorboard 1.7.0 has requirement bleach==1.5.0, but you'll have bleach 2.1.3 which is incompatible.
tensorboard 1.7.0 has requirement html5lib==0.9999999, but you'll have html5lib 1.0.1 which is incompatible.

如果使用sudo则不是说在虚拟环境下安装,以下类似

② ModuleNotFoundError: No module named 'matplotlib'


1
2
1pip install matplotlib
2

③ ModuleNotFoundError: No module named 'PIL'


1
2
1pip install Pillow  
2

④ No module named 'scipy'


1
2
1pip install scipy
2

1.2 代码解释:

① tf.app.flags

tf定义了tf.app.flags,用于支持接受命令行传递参数,相当于接受argv。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1import tensorflow as tf
2
3#第一个是参数名称,第二个参数是默认值,第三个是参数描述
4tf.app.flags.DEFINE_string('str_name', 'def_v_1',"descrip1")
5tf.app.flags.DEFINE_integer('int_name', 10,"descript2")
6tf.app.flags.DEFINE_boolean('bool_name', False, "descript3")
7#FLAGS是一个对象,保存了解析后的命令行参数
8FLAGS = tf.app.flags.FLAGS
9
10#必须带参数,否则:'TypeError: main() takes no arguments (1 given)';   main的参数名随意定义,无要求
11def main(_):  
12    print(FLAGS.str_name)
13    print(FLAGS.int_name)
14    print(FLAGS.bool_name)
15
16if __name__ == '__main__':
17    tf.app.run()  #执行main函数
18

② class pprint.PrettyPrinter(indent=1, width=80, depth=None, stream=None, *, compact=False) 

pprint模块提供了一个美观地打印Python数据结构的方式。如果是要格式化的数据结构里包含了非基本类型的数据,有可能这种数据类型不会被加载。比如数据类型是文件、网络socket、类等。本模块格式化时,尽可能保持一个对象一行表示,并且当超过允许宽度时也会自动换行表示。所有字典数据类型,都会先按键来排序,然后再进行格式化输出。

构造一个打印实例PrettyPrinter。这个构造函数需要好几个参数来配置打印参数。可以通过参数stream来设置流输出对象,流输出对象要实现write()的文件协议。如果没有指定流输出对象,默认是输出到sys.stdout。每行递归缩进的宽度是通过indent来设置,默认设置为1。参数width是表示每行的宽度,如果超过一行的宽度就会换行输出。参数depth是表示复合对象输出的层次深度,默认是没有限制,所有层次的对象都输出。参数compact是表示换行时下一行是否输出内容,还是跳过。

③os.makedirs(path, mode=0o777)

os.makedirs() 方法用于递归创建目录。像 mkdir(), 但创建的所有intermediate-level文件夹需要包含子目录。

④try与except处理异常语句:


1.3 原理学习:

1.3.2 具体过程:

33*33*1&9*9*64—  25*25*64& 1*1*35—25*25*35 & 5*5*1 —21*21*1

SRCNN首先使用双三次(bicubic)插值将低分辨率图像放大成目标尺寸,接着通过三层卷积网络拟合非线性映射,最后输出高分辨率图像结果。本文中,作者将三层卷积的结构解释成三个步骤:
图像块的提取和特征表示,特征非线性映射和最终的重建。

三个卷积层使用的卷积核的大小分为为9×9,,1×1和5×5,前两个的输出特征个数分别为64和32。用Timofte数据集(包含91幅图像)和ImageNet大数据集进行训练。使用均方误差(Mean Squared Error, MSE)作为损失函数,有利于获得较高的PSNR。

论文说的只训练YCbCr模式的Y通道,具体流程就是:训练的时候输入BRG模式的图片,再转化为YCbCr模式,但是只将Y通道通过CNN网络,最后输出的结果再和另外两个合成生成心得YCbCr模式图片,最后再转回BGR模式,将最终生成的BGR模式图片与输入的BRG模式图片计算MSE loss,进行梯度下降训练网络。具体流程如下图:

给TA打赏
共{{data.count}}人
人已打赏
安全运维

Java定时框架Quartz实例详解与定时任务的Mongodb、Mysql持久化实现(一)Quartz组件

2021-12-11 11:36:11

安全运维

Ubuntu上NFS的安装配置

2021-12-19 17:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索