龙空技术网

SRCNN-图像超分辨的学习

闪念基因 806

前言:

眼前兄弟们对“sr算法概述”大概比较注意,看官们都需要剖析一些“sr算法概述”的相关知识。那么小编也在网上收集了一些有关“sr算法概述””的相关知识,希望咱们能喜欢,大家快快来了解一下吧!

文章摘要

《Learning a Deep Convolutional Network for Image Super-Resolution》的学习。

本文深度学习的方法实现单张图的超分辨,其中深度学习是采用卷积神经网络来实现。这种方法(SRCNN)是一种端到端的作法,输入低分辨率的图像,直接输出高分辨率的图像。本文设计是一种轻量级的神经网络结构,可是它能够实现先进的恢复质量,并且可以快速在线使用。

算法模型

此图展示了SRCNN的网络结构。

此图展示了在卷积神经网络下稀疏编码的结构。

SRCNN整个算法包括三个操作:

1. Patch extraction and representation

2. Non-linear mapping

3. Reconstruction

在该论文中,利用Relu作为收敛函数,利用最小均方差函数为Loss函数。

Loss函数:

TensorFlow代码

	// 主函数	from model import SRCNN	from utils import input_setup		import numpy as np	import tensorflow as tf		import pprint	import os		flags = tf.app.flags	flags.DEFINE_integer("epoch", 15000, "Number of epoch [15000]")	flags.DEFINE_integer("batch_size", 128, "The size of batch images [128]")	flags.DEFINE_integer("image_size", 33, "The size of image to use [33]")	flags.DEFINE_integer("label_size", 21, "The size of label to produce [21]")	flags.DEFINE_float("learning_rate", 1e-4, "The learning rate of gradient descent algorithm [1e-4]")	flags.DEFINE_integer("c_dim", 1, "Dimension of image color. [1]")	flags.DEFINE_integer("scale", 3, "The size of scale factor for preprocessing input image [3]")	flags.DEFINE_integer("stride", 14, "The size of stride to apply input image [14]")	flags.DEFINE_string("checkpoint_dir", "checkpoint", "Name of checkpoint directory [checkpoint]")	flags.DEFINE_string("sample_dir", "sample", "Name of sample directory [sample]")	flags.DEFINE_boolean("is_train", True, "True for training, False for testing [True]")	FLAGS = flags.FLAGS		pp = pprint.PrettyPrinter()		def main(_):	 pp.pprint(flags.FLAGS.__flags)		 if not os.path.exists(FLAGS.checkpoint_dir):	 os.makedirs(FLAGS.checkpoint_dir)	 if not os.path.exists(FLAGS.sample_dir):	 os.makedirs(FLAGS.sample_dir)		 with tf.Session() as sess:	 srcnn = SRCNN(sess, 	 image_size=FLAGS.image_size, 	 label_size=FLAGS.label_size, 	 batch_size=FLAGS.batch_size,	 c_dim=FLAGS.c_dim, 	 checkpoint_dir=FLAGS.checkpoint_dir,	 sample_dir=FLAGS.sample_dir)		 srcnn.train(FLAGS)		if __name__ == '__main__':	 tf.app.run()

Tensorflow完整代码:

结果

双三次差值的 : PSNR=26.633759 dB

SRCNN的: PSNR=29.290147 dB

相比两种算法的PSNR,SRCNN有着明显的提升。

SRCNN的不足

利用Relu作为激活函数虽然速度快,但是训练的时候很”脆弱”,很容易就”die”;SRCNN需要先通过双三次插值的方法对低分辨率的图片插值放大尺寸。

标签: #sr算法概述