基于深度学习的中国传统特色图像的风格迁移创新实训第二周(1)

原创 2018年04月17日 20:25:13

这周的工作主要是分工合作,合作实现上周论文中的部分方法:

小组工作是分函数实现的,下面我将介绍一些负责的函数部分:

读入图片,返回划分了patch的:

def image(batch_size, height, width, path, preprocess_fn, epochs=2, shuffle=True):
    filenames = [join(path, f) for f in listdir(path) if isfile(join(path, f))]
    if not shuffle:
        filenames = sorted(filenames)

    png = filenames[0].lower().endswith('png') #将以png为后缀名的文件名变为小写 
    #string——input——producer会产生一个文件队列

    filename_queue = tf.train.string_input_producer(filenames, shuffle=shuffle, num_epochs=epochs)
    reader = tf.WholeFileReader()
    _, img_bytes = reader.read(filename_queue)
    image = tf.image.decode_png(img_bytes, channels=3) if png else tf.image.decode_jpeg(img_bytes, channels=3)
#解码png或jpeg格式的图片
    processed_image = preprocess_fn(image, height, width)
    return tf.train.batch([processed_image], batch_size, dynamic_pad=True)

因为训练数据可能会有不同规格的形式,直接把获取到的数据作为训练集可能会有所限制,

有时候,对数据的预处理与规范化是不可或缺的一步

比如,在本次实验中,当使用relu(如下图)作为激活函数时,如果数据集中在函数的负数区域,那么结果会有很多0

 

但是实际上,结果不可能为0,尤其是在回归问题上

其中一种解决方法是改变激活函数,选取其他形式的激活函数,比如sigmod

但是鉴于relu有一些本身的优点,我们可能无法避免的使用relu,因此,将数据规范化到y的正方向就是必要的步骤

在这个程序里,我们需要对数据进行规范化,其中用到的函数为batch_normalize

该函数的作用是将一数据以batch为单位进行规范化处理

主要代码实现如下:

def batch_norm(x, size, training, decay=0.999):
    beta = tf.Variable(tf.zeros([size]), name='beta')
    scale = tf.Variable(tf.ones([size]), name='scale')
    pop_mean = tf.Variable(tf.zeros([size]))
    pop_var = tf.Variable(tf.ones([size]))
    epsilon = 1e-3

    batch_mean, batch_var = tf.nn.moments(x, [0, 1, 2])
    train_mean = tf.assign(pop_mean, pop_mean * decay + batch_mean * (1 - decay))
    train_var = tf.assign(pop_var, pop_var * decay + batch_var * (1 - decay))

    def batch_statistics():
        with tf.control_dependencies([train_mean, train_var]):
            return tf.nn.batch_normalization(x, batch_mean, batch_var, beta, scale, epsilon, name='batch_norm')

    def population_statistics():
        return tf.nn.batch_normalization(x, pop_mean, pop_var, beta, scale, epsilon, name='batch_norm')

    return tf.cond(training, batch_statistics, population_statistics)

其中,首先调用tensorflow的moments方法,计算输入batch(即x)的均值和方差

然后,通过公式

pop_mean, pop_mean * decay + batch_mean * (1 - decay)
pop_var= pop_var * decay + batch_var * (1 - decay)

采用迭代法来使得pop_mean 与 pop_var 收敛

在方法中定义了两个私有方法:

    def batch_statistics():
        with tf.control_dependencies([train_mean, train_var]):
            return tf.nn.batch_normalization(x, batch_mean, batch_var, beta, scale, epsilon, name='batch_norm')

    def population_statistics():
        return tf.nn.batch_normalization(x, pop_mean, pop_var, beta, scale, epsilon, name='batch_norm')

    return tf.cond(training, batch_statistics, population_statistics)

这两个方法分别用到tensorflow的control_dependencies 和 batch_normaliaztion

在方法之后返回,需要用到这两个私有方法

注重可以获得归一化之后的结果

通过这样,当使用激活函数relu的时候,就可以使输出的数据更具有普遍性而不是全为0,或者是一个很小的或很大的数

 



(个人)基于深度学习的中国传统特色图像的风格迁移创新实训第二周(1)

这周的主要任务是先实现论文中使用的方法。使用的是微软的COCO数据集,大小为17G.首先来构建训练网络。1. 首先利用yml文件 来进行输入,使用yml文件可以实现快速输入数据。在yml文件中要加入自...
  • buhuijavaaaa
  • buhuijavaaaa
  • 2018-04-15 15:43:19
  • 20

Tensorflow深度学习之二十三:图像风格迁移

一、论文参考 这里使用的方法主要参考《A Neural Algorithm of Artistic Style》这篇论文。 简单来说,神经网络的低级层提取的是更为底层的信息,比如直线,拐角等,...
  • DaVinciL
  • DaVinciL
  • 2018-01-18 13:39:45
  • 503

基于PyTorch的深度学习入门教程(八)——图像风格迁移

前言 本文介绍怎样执行Neural-Style算法。Neural-Style或者叫做Neural-Transfer,将一个内容图像和一个风格图像作为输入,返回一个按照所选择的风格图像加工的内容图像。...
  • zzlyw
  • zzlyw
  • 2017-12-20 09:26:41
  • 792

深度学习之风格迁移(一)——Neural Style(Gatys)

内容重构content reconstruction 风格重构style reconstruction 风格迁移 参考 1 A Neural Algorithm of Artistic Style L...
  • VictoriaW
  • VictoriaW
  • 2017-05-11 18:31:51
  • 4096

基于深度学习的风格迁移转换的两种实现——style-transfer和fast-neural-style-tensorflow

基于深度学习的风格迁移转换的两种实现——style-transfer和fast-neural-style-tensorflow...
  • xunan003
  • xunan003
  • 2017-12-07 11:20:09
  • 723

机器学习:利用卷积神经网络实现图像风格迁移 (一)

相信很多人都对之前大名鼎鼎的 Prisma 早有耳闻,Prisma 能够将一张普通的图像转换成各种艺术风格的图像,今天,我们将要介绍一下Prisma 这款软件背后的算法原理。就是发表于 2016 CV...
  • shinian1987
  • shinian1987
  • 2017-01-09 11:19:28
  • 18649

(个人)基于深度学习的中国传统特色图像的风格迁移创新实训第一周(1)

    本次创新实训,我们的项目是基于深度学习的中国传统特色图像的风格迁移。    项目目标:实现水墨画和剪纸等中国传统艺术形式的风格迁移算法。完成一个可供用户操作的系统,包括上传图片、压缩、预处理、...
  • buhuijavaaaa
  • buhuijavaaaa
  • 2018-04-06 10:57:16
  • 14

基于深度学习的图像风格转换

距离上次写博客已经好久好久好久了,真是懈怠的生活节奏,整天混吃等死玩游戏,前些日子做毕业设计时总算又学了点新东西。学了一点深度学习和卷积神经网络的知识,附带着详细学习了一下前段时间我觉得比较有意思的图...
  • u013805360
  • u013805360
  • 2017-06-21 13:35:56
  • 3837

深度学习之风格迁移(三)——Deep Photo Style Transfer(Fujun Luan)

前面已经介绍了如何利用神经网络进行风格迁移,参见博客深度学习之风格迁移(一)——Neural Style(Gatys) 。该文介绍了怎么把艺术作品的风格迁移到真实图片中去,生成的图片是带有艺术色彩的绘...
  • VictoriaW
  • VictoriaW
  • 2017-05-15 11:14:39
  • 3423

基于深度学习的中国传统特色图像的风格迁移创新实训第一周

 本次创新实训,我们的项目是基于深度学习的中国传统特色图像的风格迁移。    项目目标:实现水墨画和剪纸等中国传统艺术形式的风格迁移算法。完成一个可供用户操作的系统,包括上传图片、压缩、预处理、风格迁...
  • Geek_Geeker
  • Geek_Geeker
  • 2018-04-08 16:54:59
  • 6
收藏助手
不良信息举报
您举报文章:基于深度学习的中国传统特色图像的风格迁移创新实训第二周(1)
举报原因:
原因补充:

(最多只允许输入30个字)