我想使用条件GAN,目的是为一个域生成图像(标记为domain A
),并通过输入来自第二个域(标记为domain B
)的图像和类信息.两个域都与相同的标签信息链接(域A的每个图像都链接到图像到域B和特定标签).到目前为止我在Keras的发电机如下:
def generator_model_v2():
global BATCH_SIZE
inputs = Input((IN_CH, img_cols, img_rows))
e1 = BatchNormalization(mode=0)(inputs)
e2 = Flatten()(e1)
e3 = BatchNormalization(mode=0)(e2)
e4 = Dense(1024, activation="relu")(e3)
e5 = BatchNormalization(mode=0)(e4)
e6 = Dense(512, activation="relu")(e5)
e7 = BatchNormalization(mode=0)(e6)
e8 = Dense(512, activation="relu")(e7)
e9 = BatchNormalization(mode=0)(e8)
e10 = Dense(IN_CH * img_cols *img_rows, activation="relu")(e9)
e11 = Reshape((3, 28, 28))(e10)
e12 = BatchNormalization(mode=0)(e11)
e13 = Activation('tanh')(e12)
model = Model(input=inputs, output=e13)
return model
Run Code Online (Sandbox Code Playgroud)
到目前为止,我的生成器将来自domain A
(以及输出图像的范围)的图像作为输入domain B
.我想以某种方式输入输入域A的类的信息,其范围为域B生成相同类的图像.如何在展平后添加标签信息.因此,而不必输入大小1x1024
有1x1025 …
python artificial-intelligence machine-learning keras generative-adversarial-network
我创建了一个DCGAN
具有6层的简单图层,并在CelebA数据集上对其进行了训练(其中一部分包含30K图像)。
我注意到我的网络生成的图像看起来是暗淡的,并且随着网络的训练越来越多,明亮的颜色逐渐变成暗淡的颜色!
这是一些示例:
这是CelebA图像的样子(用于训练的真实图像):
这些是生成的,这些数字显示了纪元编号(他们最终被训练了30个纪元):
造成这种现象的原因是什么?
我尝试完成所有与GAN
s 有关的常规技巧,例如在-1和1之间重新缩放输入图像,或者不在BatchNorm
的第一层使用Discriminator
,对于的最后一层不Generator
使用LeakyReLU(0.2)
,或在Discriminator
和ReLU
中使用Generator
。但我不知道为什么图像太暗/太暗!
这是因为训练图像减少了吗?
还是由网络缺陷引起的?如果是这样,这种缺陷的根源是什么?
这些网络的实现方式如下:
def conv_batch(in_dim, out_dim, kernel_size, stride, padding, batch_norm=True):
layers = nn.ModuleList()
conv = nn.Conv2d(in_dim, out_dim, kernel_size, stride, padding, bias=False)
layers.append(conv)
if batch_norm:
layers.append(nn.BatchNorm2d(out_dim))
return nn.Sequential(*layers)
class Discriminator(nn.Module):
def __init__(self, conv_dim=32, act = nn.ReLU()):
super().__init__()
self.conv_dim = conv_dim
self.act = act
self.conv1 = conv_batch(3, conv_dim, 4, 2, 1, False)
self.conv2 = conv_batch(conv_dim, conv_dim*2, …
Run Code Online (Sandbox Code Playgroud) 在 GAN 框架中,生成器违反图像中未明确表示的真实分布的硬约束的情况并不罕见,例如狗很少有超过一个头或 4 条腿。
鉴于没有头或腿计数神经元,并且人们对使用领域知识来挖掘这些规范并将其用作判别器的输入不感兴趣,那么在 GAN 或约束的背景下挖掘和执行此类规范的方法有哪些优化问题。
在我自己的例子中,数据由钢琴卷帘组成,也就是说,一个轴代表时间 T,另一个轴代表音符 N。规范的一些示例可以是: A) 对于 T 中的每个 t,只有一个正值 N,即每个时间步长一个音符 B) 仅当音符轴中正值直接和间接邻居的计数等于或大于 2 时,才存在正值 N。
例如
Invalid
10110110
11001101
Valid
00000000
11101111
Run Code Online (Sandbox Code Playgroud)
非常欢迎意见或建议!低级图像特征控制的一个例子。 https://arxiv.org/pdf/1611.07865.pdf
mathematical-optimization neural-network deep-learning generative-adversarial-network
我安装了mtcnn包,可以看到:
# confirm mtcnn was installed correctly
import mtcnn
# print version
print(mtcnn.__version__)
Run Code Online (Sandbox Code Playgroud)
结果:
0.0.9
Run Code Online (Sandbox Code Playgroud)
然后我使用以下内容:
# prepare model
model = MTCNN()
# detect face in the image
faces = model.detect_faces(pixels)
# extract details of the face
x1, y1, width, height = faces[0]['box']
Run Code Online (Sandbox Code Playgroud)
结果:
1 # prepare model
----> 2 model = MTCNN()
3 # detect face in the image
4 faces = model.detect_faces(pixels)
5 # extract details of the face
NameError: name 'MTCNN' is not defined
Run Code Online (Sandbox Code Playgroud) python-2.7 conv-neural-network generative-adversarial-network
我正在研究 WGAN,并希望实现 WGAN-GP。
在其原始论文中,由于 1-Lipschitiz 约束,WGAN-GP 是通过梯度惩罚来实现的。但是像 Keras 这样的包可以将梯度范数限制为 1(根据定义,这相当于 1-Lipschitiz 约束),那么为什么我们要费心去惩罚梯度呢?为什么我们不直接裁剪渐变呢?
machine-learning gradient-descent generative-adversarial-network
我一直在尝试使用自定义数据集训练 style-gan2 网络。不幸的是,我当前运行计算的服务器有点不稳定,导致它在训练三天后崩溃。有什么方法可以让我使用网络崩溃前的最后一个快照继续训练网络吗?我看到了一些关于继续训练网络的参考,但 style-gan 或 style-gan2 github 页面都没有提到它。
我正在尝试在 Google Colab 中训练 stylegan2 模型。我一直在使用stylegan2-colab笔记本。然而,当我尝试训练模型时,它突然停止了。正如您在输出末尾看到的那样,这似乎是键盘中断(^C
),所以我想知道这是否可能是内存问题。有一次当它崩溃时,它问我是否想增加内存限制,我照做了。我最初尝试使用 1028x1028 图像,但没有切换到 256x256,这没有帮助。知道会发生什么吗?
!python run_training.py --data-dir='/content/drive/My Drive/kaggle/datasets' \
--config=config-f --dataset=abstract-256 --result-dir='/content/drive/My Drive/kaggle/snapshots'
Run Code Online (Sandbox Code Playgroud)
###输出
Local submit - run_dir: /content/drive/My Drive/kaggle/snapshots/00006-stylegan2-abstract-256-1gpu-config-f
dnnlib: Running training.training_loop.training_loop() on localhost...
Streaming data using training.dataset.TFRecordDataset...
tcmalloc: large alloc 4294967296 bytes == 0x866e000 @ 0x7fea77378001 0x7fea73dc4765 0x7fea73e28dc0 0x7fea73e2ac5f 0x7fea73ec1238 0x50ac25 0x50d390 0x508245 0x509642 0x595311 0x54a6ff 0x551b81 0x5a067e 0x50d966 0x508245 0x58958c 0x5a067e 0x50d966 0x508245 0x58958c 0x5a067e 0x50d966 0x509d48 0x50aa7d 0x50c5b9 0x509d48 0x50aa7d 0x50c5b9 0x508245 0x58958c 0x5a067e
tcmalloc: large alloc …
Run Code Online (Sandbox Code Playgroud) python tensorflow google-colaboratory generative-adversarial-network
我试图在我自己的数据上使用那里的代码:https ://www.tensorflow.org/tutorials/generative/cyclegan 。
在本教程中,使用以下代码创建 Dataset 对象:
dataset, metadata = tfds.load('cycle_gan/horse2zebra',
with_info=True, as_supervised=True)
train_horses, train_zebras = dataset['trainA'], dataset['trainB']
test_horses, test_zebras = dataset['testA'], dataset['testB']
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何从我自己的数据创建类似的对象,这些数据位于如下文件夹中:
data/trainA
data/trainB
data/testA
data/testB
Run Code Online (Sandbox Code Playgroud)
是否有一种类似于 flow_from_directory 方法的方法,以便以与 tfds.load(...) 相同的格式加载我的数据
看起来像的东西
train_horses = foo("data/trainA")
Run Code Online (Sandbox Code Playgroud) 我训练了一个 GAN 来重现类似 CIFAR10 的图像。最初,我注意到生成器生成的跨一批图像看起来总是相同的,如下图所示:\n
经过几个小时的调试和与教程的比较,这对于初学者来说是一个很好的学习资源(https://machinelearningmastery.com/how-to-develop-a-generative-adversarial-network-for-a-cifar-10-small- object-photographs-from-scratch/),我只需在原始代码上添加一个字母,生成的图像就开始看起来正常(每个批次中的每个人都开始看起来彼此不同),如下图所示:\n
代码上神奇的一个字符更改是进行以下更改:
\n更改自:
\ndef generate_latent_points(self, n_samples):\n return np.random.rand(n_samples, self.latent_dim)\n
Run Code Online (Sandbox Code Playgroud)\n到:
\ndef generate_latent_points(self, n_samples):\n return np.random.randn(n_samples, self.latent_dim)\n
Run Code Online (Sandbox Code Playgroud)\n希望这个非常微妙的细节可以帮助那些花费数小时绞尽脑汁进行 GAN 训练过程的人。
\nnp.random.rand
给出均匀分布[0, 1)
np.random.randn
给出均值 0 和方差 1 的单变量 \xe2\x80\x9cnormal\xe2\x80\x9d (高斯)分布
那么,为什么生成器的潜在种子分布差异会表现得如此不同呢?
\npython neural-network conv-neural-network generative-adversarial-network
我从头开始实现了 StyleGan2 的自定义版本。
现在我想获得特定图像的潜在向量。我查看了原始 github StyleGan2 存储库,了解如何将图像投影到潜在空间,但没有解释用于实现这一目标的代码。
据我所知,我们必须使用模型的生成器部分来生成图像并将其与所需图像进行比较以创建损失值并运行梯度下降来更新输入潜在向量,以最小化损失。
但是我们如何更新输入向量呢?据我所知输入向量不可训练?有任何想法吗?
generative-adversarial-network ×10
python ×4
tensorflow ×3
keras ×2
gan ×1
nvidia ×1
python-2.7 ×1
pytorch ×1