什么?AI诟谇图像能够自动上色?_图像_年夜众
责编 | 刘静
出品 | CSDN(ID:CSDNnews)
本篇文章将利用GAN算法的pixpix模型实现对黑白图片进行上色。下面大略先容一下图片像素知识,和黑白图像一样,彩色图像中的每一层,也有~的值。值表示这个层中没有颜色。如果像素网格所有颜色通道的值都为,那么这个图像像素便是玄色的。神经网络在输入值和输出值之间创建了一种关系。为了能够更为准确地完成着色任务,网络须要找到能够将灰度图像和彩色图像联系起来的特色。
总的来说便是,我们须要找到能够将灰度值网格链接到三个颜色网格的特色。
f是神经网络,[B&W]是我们的输入,[R]、[G]、[B]是我们的输出
现在,随着数据集的增加,由于我们处理的是高分辨率图像,因此我们须要更多的打算能力。为此,我们利用 Deep Cognition 的 Deep Learning Studio jupyter notebooks,它为Amazon 的深度学习示例供应了GPU,可用来演习模型。
下面大略先容下GAN,GAN 充分发挥“对抗过程”演习两个人工神经网络,这两个互联网不会相互博弈论往后超过一种完美的平衡态,我们这个范例中的的警员和犯罪者就相即是这两个人工神经网络。个中一个人工神经网络叫作建模神经网 S(T),它会用于输出随机噪声统计数据,分解和有数统计数据集十分相似的统计数据;另一个人工神经网络叫鉴别器天生网 E(X-),它会以分解的统计数据作为输出,试图辨别出有哪些是分解的统计数据,哪些是现实统计数据。鉴别器的架构是构建二元归类,输入的结果是输出统计数据来自现实统计数据集(和制备统计数据或敲诈统计数据比较)的机率。
全体步骤的目的变量从意义上可以写为:
我们在后面所说的 GAN 末了能超过一种完美的平衡态,是所指建模应该能仿真现实的统计数据,鉴别器输入的机率应该为 0.5, 即分解的统计数据和现实统计数据完备同等。理论上,它不确认来自建模的新的统计数据是现实还是敲诈,二者的机率大于。
如果须要自定义数据集,可以通过在 train 文件夹中上传高分辨率的彩色图像然后黑白图片从彩色图像单通道提取即可。
建立数据集如下图所示:
然后导入所有的库
from __future__ import absolute_importfrom __future__ import divisionfrom __future__ import print_functionimport tensorflow as tfimport numpy as npimport argparseimport osimport jsonimport globimport randomimport collectionsimport mathimport time
接着建立网络层,以及天生器和判别器的对抗性网络
with tf.variable_scope(\"大众layer_1\"大众):convolved = discrim_conv(input, a.ndf, stride=2)rectified = lrelu(convolved, 0.2)layers.append(rectified)# layer_2: [batch, 128, 128, ndf] => [batch, 64, 64, ndf 2]# layer_3: [batch, 64, 64, ndf 2] => [batch, 32, 32, ndf 4]# layer_4: [batch, 32, 32, ndf 4] => [batch, 31, 31, ndf 8]for i in range(n_layers):with tf.variable_scope(\公众layer_%d\"大众 % (len(layers) + 1)):out_channels = a.ndf min(2(i+1), 8)stride = 1 if i == n_layers - 1 else 2 # last layer here has stride 1convolved = discrim_conv(layers[-1], out_channels, stride=stride)normalized = batchnorm(convolved)rectified = lrelu(normalized, 0.2)layers.append(rectified)# layer_5: [batch, 31, 31, ndf 8] => [batch, 30, 30, 1]with tf.variable_scope(\"大众layer_%d\"大众 % (len(layers) + 1)):convolved = discrim_conv(rectified, out_channels=1, stride=1)output = tf.sigmoid(convolved)layers.append(output)return layers[-1]with tf.variable_scope(\公众generator\"大众):out_channels = int(targets.get_shape[-1])outputs = create_generator(inputs, out_channels)# create two copies of discriminator, one for real pairs and one for fake pairs# they share the same underlying variableswith tf.name_scope(\"大众real_discriminator\"大众):with tf.variable_scope(\公众discriminator\公众):# 2x [batch, height, width, channels] => [batch, 30, 30, 1]predict_real = create_discriminator(inputs, targets)with tf.name_scope(\"大众fake_discriminator\"大众):with tf.variable_scope(\公众discriminator\公众, reuse=True):# 2x [batch, height, width, channels] => [batch, 30, 30, 1]predict_fake = create_discriminator(inputs, outputs)with tf.name_scope(\公众discriminator_loss\"大众):# minimizing -tf.log will try to get inputs to 1# predict_real => 1# predict_fake => 0discrim_loss = tf.reduce_mean(-(tf.log(predict_real + EPS) + tf.log(1 - predict_fake + EPS)))with tf.name_scope(\"大众generator_loss\"大众):# predict_fake => 1# abs(targets - outputs) => 0gen_loss_GAN = tf.reduce_mean(-tf.log(predict_fake + EPS))gen_loss_L1 = tf.reduce_mean(tf.abs(targets - outputs))gen_loss = gen_loss_GAN a.gan_weight + gen_loss_L1 a.l1_weightwith tf.name_scope(\公众discriminator_train\"大众):discrim_tvars = [var for var in tf.trainable_variables() if var.name.startswith(\"大众discriminator\"大众)]discrim_optim = tf.train.AdamOptimizer(a.lr, a.beta1)discrim_grads_and_vars = discrim_optim.compute_gradients(discrim_loss, var_list=discrim_tvars)discrim_train = discrim_optim.apply_gradients(discrim_grads_and_vars)with tf.name_scope(\"大众generator_train\公众):with tf.control_dependencies([discrim_train]):gen_tvars = [var for var in tf.trainable_variables() if var.name.startswith(\"大众generator\公众)]gen_optim = tf.train.AdamOptimizer(a.lr, a.beta1)gen_grads_and_vars = gen_optim.compute_gradients(gen_loss, var_list=gen_tvars)gen_train = gen_optim.apply_gradients(gen_grads_and_vars)
现在,我们必须调度图像的大小来适应 Inception 模型。然后根据模型对像素和颜色值利用预处理器进行格式化。在末了一步中,我们通过 Inception 网络运行它并提取模型的末了一层。
神经网络进行演习后,做出终极的预测,并将其转化为图像。
在这里,我们利用一个灰度图像作为输入,并通过演习好的神经网络来运行它。我们取在 - ~ 之间所有的输出值,然后乘以 ,就得到了 Lab 色谱中精确的颜色。
末了,用 三层 添补得到一个玄色的 RGB 画布。然后从测试图像中,复制灰度图层。然后将这两个颜色层添加到 RGB 画布上。再将这个像素值数组转换为图片。
终极达到的预测效果如图所示
下面大略先容下GAN的运用广泛:
事实上随着GAN理论的不断完善,GAN逐渐展现出了自己非凡的魅力,在一些运用领域开始大放异彩,由此衍生了一些非常fancy的运用。
1. 图像天生:GAN是一个天生模型,可以用来天生图像、音频等等,并且天生质量逐年增加,
2.图像转换:
一样平常的GAN的天生器G输入是一个随机向量,输出的是图像,这里的天生器的输入是图像,输出的是转换后的图像。 说到这里,就须要提到cycle-GAN了,可以实现风景画和油画互变,马和斑马相互转换等等任务,cycleGAN的紧张贡献是供应了一种无监督的图像翻译方法,这是pix2pix所做不到的 。
3. 图像合成:
图像合成这个分外任务是通过某种办法的影像阐述创立新的影像的步骤。pix2pix和cycleGAN 都归属于图像合成各个领域的一部分。影像制备也有一些类似于的管理事情,并且有很nice的运用于桥段。
首先,第一个桥段制备,此部份在于如何等价部份表明桥段的数据还原成出有现实的桥段数据,比如根据拆分影像还原成出有完全桥段数据,恰好是影像拆分的变步骤,据传英伟达在大大的拓展这个朝向,一下,只要GAN还原成的桥段充足现实,险些可以仿真翱翔器的交通状况桥段,从而在的实验室下一阶段就可以已完成翱翔器摩托车的下车试验管理事情,很nice的一个运用于,但是面临的难题便是如何分解成像的和充足现实的影像,此部份管理事情可以闻pix2pixHD。
4. 文本到图像的合成
这个方向是NLP与CV碰撞的结果,任务描述为:从给定的一段笔墨描述,天生一张和图像笔墨匹配的图像。比如:根据笔墨:一只玄色冠冕和黄色喙的白色的鸟,天生一张图像。
5. 图像超分辨率:
图像超分辨率一贯是一个很主要的研究课题,比较主要的是对天文图像和卫星图像做超分辨率,不管是在天文,军事还是其他方面,都有很主要的运用。
作者简介:李秋键,CSDN 博客专家,CSDN达人课作者。
声明:本文为作者原创投稿,未经许可请勿转载。
【END】
本文系作者个人观点,不代表本站立场,转载请注明出处!