CycleGAN网络:素描与彩图相互转化

之前用CycleGAN网络训练了男女面部转换的模型,最近用之前的预训练参数作为初始参数接着训练了新的素描与彩图互相转换的模型。

原理部分


生成器与判别器
生成器将给定图像转换至目标域,判别器判别输入图像是原图还是生成器的生成图像。
生成器与鉴别器对抗至动态平衡。

生成器
编码:利用卷积神经网络从输入图象中提取特征。将图像压缩成256个64*64的特征向量。
转换:将图像在DA域中的特征向量转换为DB域中的特征向量。
解码:利用反卷积层从特征向量中还原出低级特征得出生成图像。
鉴别器
鉴别器将一张图像作为输入,并尝试预测其为原始图像或是生成器的输出图像。
利用卷积神经网络从图像中提取特征并判别是否属于特定类别。

实践部分

1.寻找训练集

由于对彩色图像范围没有具体要求,下载了imagenet网站上的图片集,使用了其中大约2.5万张作为彩图的训练集。素描图没有找到合适的大量可下载的图片集,于是自己转换了2.5万张彩图为素描图。使用了ps批处理功能:
步骤:

  • 去色:转为灰度图
  • 反相:求补色
  • 高斯模糊:对反相后的图片做高斯模糊,根据效果测试选取了高斯半径为15
  • 图像融合:将去色的灰度图与高斯模糊后的图像做图像融合,选择颜色减淡效果


    Screenshot from 2018-06-07 18-33-55.png
Screenshot from 2018-06-07 18-34-49.png
2. 规整图片大小(resize)

图片大小参差不齐,需要统一调整至256*256。使用了Image库PIL/pillow

from PIL import Image
import os
from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True

def convert(dir,width,height):
    file_list = os.listdir(dir)
    print(file_list)
    for filename in file_list:
        path=''
        path=dir+filename
        im=Image.open(path)
        out=im.resize((256,256),Image.ANTIALIAS)
        print "%s has been resized!"%filename
        out.save(path)
        print("success")
if __name__ == '__main__':
   dir = raw_input('please input the operate dir:')
   convert("/run/media/cumtb822/822share/sketch/",256,256)

此处需注意:如果下载PIL库,conda install PIL,会遇到不支持JPEG格式图片的问题,需要先卸载PIL库,再下载JPEG的依赖库之后重新下载编译。安装libjpeg库时建议直接到conda官网上搜索libjpeg-turbo与自己系统对应的版本与命令行,装好之后建议直接安装pillow即可(conda install pillow)

另外,如果import Image总报错,建议改为from PIL import Image试试。虽然报的错毫不相关,但是改一下很可能问题就解决了。

3. 将图片转换成tfrecords格式

这个项目中提供了一个build_data脚本,用于将图片转换成tfrecords形式。假设我们的图片存放在/Xdatasets_resized/和/Ydatasets_resized/ \目录下,对应的命令就是:

python build_data.py \
    --X_input_dir ~/Xdatasets_resized/ \
    --Y_input_dir ~/Ydatasets_resized/ \
    --X_output_file ~/Xdatasets.tfrecords \
    --Y_output_file ~/Ydatasets.tfrecords
4. 训练

恢复了上次的训练参数继续训练
训练的命令为:

python train.py \
    --X ~/....Xdatasets.tfrecords \
    --Y ~/....Ydatasets.tfrecords \
    --image_size 256

训练的过程比较漫长,此时可以打开TensorBoard来观察训练情况(运行这个命令时需要将“20170715-1622”改成机器中对应的文件夹,下同):

tensorboard --logdir checkpoints/20180314-0900(正确的检查点路径即可)
中断训练时如果自动保存的checkpoints三个文件有问题,可以手动更改checkpoint文件中记载的model_checkpoint_path,改成需要的即可。
模型共训练了大概24*3小时,大约30万次迭代。

5. 导出模型并执行单张图片

导出模型的方法为:

python export_graph.py \
    --checkpoint_dir checkpoints/20170715-1622 \
    --XtoY_model color2sketch.pb \
    --YtoX_model sketch2color.pb  \
    --image_size 256

对单张图片进行转换(将data/test.jpg替换为对应的输入图片地址):

python inference.py \
--model pretrained/man2woman.pb  \
--input data/test.jpg  \
--output data/output.jpg \
--image_size 256
6.过程检测及测试结果

彩图转素描图,转的素描图大体问题不大,但是素描图重建回彩图时缺少绿色。训练15万次迭代时,缺少红色和绿色元素,增加10小时训练后,产生与红色较接近的橘黄色,至今仍缺少绿色元素,原因未知。
左上为输入图(batchsize=2),右上两张为生成的素描,左下两张为由素描图重建的彩图


Screenshot from 2018-06-05 20-20-18.png
Screenshot from 2018-06-05 21-06-05.png
Screenshot from 2018-06-05 21-13-37.png

直接素描图转彩图,由于彩图域里的图像颜色覆盖较广,没有特定转换色彩约定,因此转换结果十分随意,只是随意上色的结果,重建回去的素描图相对比较准确,loss很小。
训练过程中:左上为输入图(batchsize=2),右上两张为生成的彩图,左下两张为由彩图重建的素描图

Screenshot from 2018-06-05 21-16-11.png
Screenshot from 2018-06-07 15-21-41.png

结束训练导出两个模型:color2sketch.pb, sketch2color.pb
用新的图片做了一些测试,效果如下:

代码:https://github.com/vanhuyz/CycleGAN-TensorFlow.git

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容