TensorFlow练习9: 生成妹子图(PixelCNN)

前一帖生成音乐,本帖生成图片。本文使用TensorFlow实现论文《Conditional Image Generation with PixelCNN Decoders》,它是基于PixelCNN架构的模型,最早出现在《Pixel Recurrent Neural Networks》一文。

使用的图片数据

我本想使用ImageNet做为图片来源,就像论文中使用的。ImageNet图像有现成的分类,抓取也容易,但是由于很多源都被防火墙屏蔽,下载速度堪忧。《OpenCV之使用Haar Cascade进行对象识别

我看到网上有很多爬妹纸图的Python脚本,额,我爬了几天几夜的妹纸图(特别暴露那种),额,我就想看看PixelCNN最后能生成什么鬼。

如果你懒的爬图片,可以使用我抓取的图片(分成两部分):

  • https://pan.baidu.com/s/1kVSA8z9 (密码: atqm)
  • https://pan.baidu.com/s/1ctbd9O (密码: kubu)

数据预处理

下载的图片分布在多个目录,把图片汇总到一个新目录:

使用《open_nsfw: 基于Caffe的成人图片识别模型》剔除掉和妹子图不相关的图片,给open_nsfw输入要检测的图片,它会返回图片评级(0-1),等级越高,图片越黄越暴力。使用OpenCV应该也不难。

为了减小计算量,我把图像缩放为64×64像素:

去除重复图片:

PixelCNN生成妹纸图完整代码

下面代码只实现了unconditional模型(无条件),没有实现conditional和autoencoder模型。详细信息,请参看论文。

额,妹子图正在训练中…

补充练习:使用OpenCV提取图像中的脸,然后使用上面模型进行训练,看看能生成什么。

相关文章

《TensorFlow练习9: 生成妹子图(PixelCNN)》有15个想法

  1. 博主,你在哪里爬的图片?我发现很多图片都很像,看不清脸,想问问你这些脸大的图片哪里找的。谢谢,我想做人脸生成用。

  2. 跑到第76行时,报错,错误如下,求大神们指教,谢谢
    b_f = tf.get_variable(“v_b”, b_shape, tf.float32, tf.zeros_initializer)

    File “/Users/dk/tensorflow/lib/python2.7/site-packages/tensorflow/python/ops/variables.py”, line 197, in __init__
    expected_shape=expected_shape)
    File “/Users/dk/tensorflow/lib/python2.7/site-packages/tensorflow/python/ops/variables.py”, line 274, in _init_from_args
    initial_value(), name=”initial_value”, dtype=dtype)
    File “/Users/dk/tensorflow/lib/python2.7/site-packages/tensorflow/python/ops/variable_scope.py”, line 673, in
    shape.as_list(), dtype=dtype, partition_info=partition_info)
    TypeError: __init__() got multiple values for keyword argument ‘dtype’

  3. 我理解不鸟为啥这里要有两个for循环, 不是一个’for batch in range(n_batches)’ 就可以了么?

    for epoch in range(50):
    for batch in range(n_batches):

  4. 博主,最终生成的妹子图片是什么样子的?我自己调试并运行了一下,并没有取得很好的效果,图片就像彩色雪花,看不出特别之处。和博主不同的是,我在做训练集时采用了较少的训练集,不清楚是训练集太少还是本身原理性问题,引起效果不好?

    感谢~

  5. 你好,非常感谢你能分享你的实验,从中受益良多。
    我下载了你的数据集,也运行了你的代码,但是出现了一点点小问题,我解决不了,不知道你时候能有时间看看这个错误为什么会出现。
    多谢!

    ValueError: Variable v_stack0/v_W already exists, disallowed. Did you mean to set reuse=True in VarScope? Originally defined at:

    File “generate.py”, line 57, in get_weights
    W = tf.get_variable(name, shape, tf.float32, weights_initializer)
    File “generate.py”, line 73, in gated_cnn
    W_f = get_weights(W_shape, “v_W”, mask=mask)
    File “generate.py”, line 107, in pixel_cnn
    v_stack = gated_cnn([filter_size, filter_size, f_map], v_stack_in, mask=mask)

    我是初学者,运行时会出现以下结果
    Traceback (most recent call last):
    File “generate.py”, line 187, in
    generate_girl()
    File “generate.py”, line 164, in generate_girl
    output = pixel_cnn()
    File “generate.py”, line 107, in pixel_cnn
    v_stack = gated_cnn([filter_size, filter_size, f_map], v_stack_in, mask=mask)
    File “generate.py”, line 73, in gated_cnn
    W_f = get_weights(W_shape, “v_W”, mask=mask)
    File “generate.py”, line 57, in get_weights
    W = tf.get_variable(name, shape, tf.float32, weights_initializer)
    File “/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/variable_scope.py”, line 1022, in get_variable
    custom_getter=custom_getter)
    File “/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/variable_scope.py”, line 849, in get_variable
    custom_getter=custom_getter)
    File “/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/variable_scope.py”, line 345, in get_variable
    validate_shape=validate_shape)
    File “/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/variable_scope.py”, line 330, in _true_getter
    caching_device=caching_device, validate_shape=validate_shape)
    File “/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/variable_scope.py”, line 633, in _get_single_variable
    name, “”.join(traceback.format_list(tb))))
    ValueError: Variable v_stack0/v_W already exists, disallowed. Did you mean to set reuse=True in VarScope? Originally defined at:

    File “generate.py”, line 57, in get_weights
    W = tf.get_variable(name, shape, tf.float32, weights_initializer)
    File “generate.py”, line 73, in gated_cnn
    W_f = get_weights(W_shape, “v_W”, mask=mask)
    File “generate.py”, line 107, in pixel_cnn
    v_stack = gated_cnn([filter_size, filter_size, f_map], v_stack_in, mask=mask)

  6. 求博主能不能给分享一下这个的数据集(生成妹子图)?真诚求数据集。本人学生,就是想学习一下,跑一下,不会用于商业用途。求分享数据集链接。

发表评论

电子邮件地址不会被公开。 必填项已用*标注