#这个程序是我在最新的tensorflow2.1.0版本写的,如果想要运行的话tensorflow至少在2.0.0版本以上,否则会出现一大堆的bug
#(Anaconda一上来就给我装的tensorflow2.1.0版本了)
#生成对抗网络结构说明:
#基本采用了DCGANs的网络架构思想,但是由于运算能力差,数据样本小。所以做了一些改变
#初始化声明
import tensorflow#如果tensorflow库不全,可以删掉这个,但下面的必须有
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Flatten, BatchNormalization, Activation
from tensorflow.keras.layers import Conv2DTranspose, Conv2D, Reshape, LeakyReLU
import matplotlib.pyplot as plt
from PIL import Image
import os
import math
import numpy as np
#统一化输入图片尺寸设置为64*64
#不同尺寸图片可以通过我的另一个python程序进行批量尺寸统一
image_size =64
#检测操作:
#检测是否能够正常操作数据集图片
#查看一张图片
im = Image.open('C:/Users/faces/1.png')
im = im.resize((image_size,image_size),Image.ANTIALIAS)
plt.imshow(im)
plt.show()
#读取一张图片
X_train = Image.open('C:/Users/faces/1.png')
X_train = X_train.resize((image_size,image_size),Image.ANTIALIAS)
X_train = np.asanyarray(X_train)
X_train = np.expand_dims(X_train, axis=0) # 增加维数:将(64,64,3)维拓展为(1,64,64,3)
print(X_train.shape)
#检测结束
#路径配置:
model_path = 'C:/Users/model/'
generated_image_path = 'C:/Users/generate/'
result_path = 'C:/Users/generate/results/'
dataset_path = 'C:/Users/faces/'
#特征数选择
character = 300 # 特征数(由于我的电脑的运算能力的限制导致的训练的数据量过小,故特征数较小)
#进行图片的拼接
for dirname, _, filenames in os.walk(dataset_path):
for filename in filenames:
if X_train.shape[0] > 3000: #自己测试的时候发现,自己电脑到3000左右基本就算不动了,所以数据集大小尽量不要超过3000左右
break
try:
im = Image.open(os.path.join(dirname, filename))
im = im.resize((image_size,image_size),Image.ANTIALIAS)
image_array = np.asanyarray(im)
image_array = np.expand_dims(image_array, axis=0)
X_train = np.concatenate((X_train, image_array), axis=0)
except:
pass
print(str(X_train.shape[0]))
# 构造生成器
# 结构特点:
# 1.进行了多次批处理规范化---->好处是:有更好的鲁棒性(让错误较大的影响小)
# 2.全卷积结构
# 3.除最后输出的激活函数使用了tanh,其余均使用relu为激活函数
def generator_model():
model = Sequential()
model.add(Dense(int(image_size/8)*int(image_size/8)*256, input_shape=(character,)))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Reshape((int(image_size/8),int(image_size/8),256))) # output: 8*8*256
model.add(Conv2DTranspose(128,5,strides=2,padding='SAME')) # output: (None,16,16,128)
model.add(Activation('relu'))
model.add(BatchNormalization())
model.add(Conv2DTranspose(64,5,strides=2,padding='SAME')) # output: (None, 32, 32, 64)
model.add(Activation('relu'))
model.add(BatchNormalization())
model.add(Conv2DTranspose(3,5, strides=2,padding='SAME')) # output: (None, 64, 64, 3)
model.add(Activation('tanh'))
return model
#显示生成器具体结构
g = generator_model()
g.summary()
# 构造判别器
# 结构特点:
# 1.进行了多次批处理规范化
# 2.全卷积结构
# 3.除最后输出的激活函数使用了tanh和simoid归一化外,其余均使用LeakyReLU为激活函数--->在辨别网络下,leakyRelU激活函数可以工作的很好,特别是在更高分辨率的模型上(出于DCGANs论文)
def discriminator_model():
model = Sequential()
model.add(Conv2D(64, padding='SAME',kernel_size=5,strides=2, input_shape=(image_size, image_size, 3)))
model.add(LeakyReLU())
model.add(BatchNormalization())
model.add(Conv2D(128,padding='SAME',kernel_size=5,strides=2))
model.add(LeakyReLU())
model.add(BatchNormalization())
model.add(Conv2D(256,padding='SAME',kernel_size=5,strides=2))
model.add(LeakyReLU())
model.add(BatchNormalization())
model.add(Flatten())
model.add(Dense(1024))
model.add(BatchNormalization())
model.add(Activation('tanh'))
model.add(Dense(1))
model.add(Activation('sigmoid'))
return model
#显示鉴别器具体结构
d = discriminator_model()
d.summary()
#连接生成器和判别器
def combine(g,d):
model = Sequential()
model.add(g)
d.trainable = False
model.add(d)
return model
g = generator_model()
d = discriminator_model()
g_d = combine(g,d)
g_d.summary()
#连接图片(用于训练过程中观看训练效果,多张图片一起便于观察)
def combine_images(images):
num = images.shape[0]
width = int(math.sqrt(num))
height = int(math.ceil(float(num) / width))
shape = images.shape[1:3]
image = np.zeros((height*shape[0], width*shape[1], 3),
dtype = images.dtype)
for index,img in enumerate(images):
i = int(index / width)
j = index % width
image[i * shape[0]:(i+1) * shape[0], j * shape[1]:(j+1) * shape[1], 0:3] = img[:,:,:]
return image
#结果输出函数,输出一张合成图片
if os.path.exists(result_path)==False:
os.makedirs(result_path)
def generated(name):
g = generator_model()
try:
g.load_weights(model_path+"generatorA")
print("生成器权重导入成功")
except:
print("无权重")
noise_need = np.random.normal(-1,1,size=(1,character))
generated_image_need = g.predict(noise_need, verbose=0)
image = combine_images(generated_image_need)
image = image * 127.5 + 127.5
Image.fromarray(image.astype(np.uint8)).save(
result_path+name+".png")
if os.path.exists(model_path)==False:
os.makedirs(model_path)
if os.path.exists(generated_image_path)==False:
os.makedirs(generated_image_path)
def train(BATCH_SIZE, Xtrain):
# 生成图片的连接图片数
generated_image_size = 36
# 读取图片
Xtrain = ((Xtrain.astype(np.float32)) - 127.5) / 127.5
#构造模型时,优化函数中生成器我使用了SGD,因为生成器参数较多优化速度慢,所以只能使用SGD最简单的优化函数进行优化
#判别器由于参数较少,故选择性能更好的RMSprop
# 模型及其优化器
d = discriminator_model()
g = generator_model()
g_d = combine(g,d)
#d_optimizer = RMSprop()
#g_optimizer = RMSprop()
#gg_optimizer= SGD()
g.compile(loss='binary_crossentropy', optimizer=tensorflow.keras.optimizers.SGD()) # 生成器
g_d.compile(loss='binary_crossentropy',optimizer=tensorflow.keras.optimizers.RMSprop()) # 联合模型
d.trainable = True
d.compile(loss='binary_crossentropy',optimizer=RMSprop()) # 判别器
# 上次训练参数的导入
try:
d.load_weights(model_path+"discriminatorA")
print("判别器权重导入成功")
g.load_weights(model_path+"generatorA")
print("生成器权重导入成功")
except:
print("无权重")
for epoch in range(500):
# 每1轮打印一次当前轮数
if epoch % 1 == 0:
print('Epoch is ',epoch)
if epoch % 1 == 0:
noise_need = np.random.normal(-1,1,size=(generated_image_size,character))
generated_image_need = g.predict(noise_need, verbose=0)
image = combine_images(generated_image_need)
image = image * 127.5 + 127.5
Image.fromarray(image.astype(np.uint8)).save(
generated_image_path+str(epoch)+"_"+str(epoch)+".png")
for index in range(Xtrain.shape[0]//BATCH_SIZE):
# 产生(-1,1)的正态分布的维度为(BATCH_SIZE, character)的矩阵
noise = np.random.normal(-1,1,size=(BATCH_SIZE,character))
train_batch = Xtrain[index*BATCH_SIZE:(index+1)*BATCH_SIZE]
generated_image = g.predict(noise, verbose=0)
if index % 1 == 0:
X = np.concatenate((train_batch,generated_image))
Y = list((np.random.rand(BATCH_SIZE)*10+90)/100) + [0]*BATCH_SIZE
d_loss = d.train_on_batch(X,Y)
noise = np.random.normal(-1,1,size=(BATCH_SIZE,character))
d.trainable = False
g_loss = g_d.train_on_batch(noise, list((np.random.rand(BATCH_SIZE)*10+90)/100))
d.trainable = True
if index % 10 == 0:
print('batch: %d, g_loss: %f, d_loss: %f' % (index, g_loss, d_loss))
if index % 10 == 0:
g.save_weights(model_path+'generatorA', True)
print('Successfully save generatorA')
d.save_weights(model_path+'discriminatorA', True)
print('Successfully save discriminatorA')
train(BATCH_SIZE=128, Xtrain=X_train)#DCGANs论文中提到batch size为128时效果最好
#generated('result_cartoon_face') #训练好之后,输出一张合成的动漫人脸```
相关推荐
用StyleGAN生成你的专属动漫头像:从Colab环境搭建到生成调参全流程(附FFHQ预训练模型)
本文详细介绍了如何使用StyleGAN生成个性化动漫头像,从Colab环境搭建到生成调参全流程。通过FFHQ预训练模型,读者可以掌握StyleGAN2-ADA-PyTorch的部署、潜在空间导航技巧和高级样式混合方法,实现独特的头像创作。文章还涵盖了动漫风格迁移、模型微调和生产级应用优化,适合AI艺术爱好者和开发者。
生成对抗网络GAN(二)基于Tensorflow2.0的二次元动漫头像生成
占位待发
利用GAN技术构建动漫头像生成系统
生成对抗网络(GANs)是一种深度学习模型,由一个生成器(Generator)和一个判别器(Discriminator)组成。生成器负责生成数据,判别器负责区分生成的数据和真实数据。这种对抗机制推动了生成器的不断进步,使它能够创造出越来越难以区分的假数据。
【PyTorch实战】生成对抗网络GAN:生成动漫人物头像
首先简要介绍一下与的概念:判别模型在深度学习乃至机器学习领域取得了巨大成功,其本质是将样本的特征向量映射成对应的label;而生成模型由于需要大量的先验知识去对真实世界进行建模,且先验分布的选择直接影响模型的性能,因此此前人们更多关注于判别模型方法。生成式对抗网络(Generative Adversarial Networks,GANs)是蒙特利尔大学的Goodfellow Ian于2014年提出的一种生成模型, 在之后引起了业内人士的广泛关注与研究。GANs的主要框架包括两个部分:和两个部分。生成器用来合
对抗生成网络(gan, wgan)二次元头像训练集
龙龙老师教程gan,wgan,二次元头像训练数据集,一共280M 龙龙老师教程gan,wgan,二次元头像训练数据集,一共280M 龙龙老师教程gan,wgan,二次元头像训练数据集,一共280M
ROS 入门教程:小乌龟仿真器和基础操作
小乌龟仿真器和ros基础操作
对抗生成网络学习(十六)——stackGAN++利用文字生成鸟类图片(tensorflow实现)(未完待续)
一、背景 最近工作逐渐步入正轨,自己要做一个文字和图像的交互,所以就考虑先做做类似的工作,恰好之前有看到过stackGAN,因此这次就做做stcakGAN++。 stackGAN其实发布的比较早,stackGAN++是它的改进版,后续还有一个attnGAN是对stackGAN++的后续工作的解决。stackGAN++是Han Zhang等人[1]于2017年10月提出的一个模型,发表在ICCV...
5种主流触觉传感器对比:GelSight、DIGIT、Taxim、GelSlim和TACTO如何选?
本文深度解析了GelSight、DIGIT、Taxim、GelSlim和TACTO五款主流触觉传感器的技术原理与核心特性。通过对比视觉传感与电学传感两大技术路径,为机器人灵巧抓取、精密检测等应用场景提供清晰的选型决策指南,帮助开发者根据项目需求在分辨率、响应速度、集成度与成本之间找到最佳平衡。
[计算机]基于生成式对抗网络的生成动漫人物方法研究
基于生成式对抗网络的生成动漫人物方法研究是近些年计算机视觉领域非常常见的一类方法,其强大的从已有数据集中生成新数据的能力令人惊叹,甚至连人眼都无法进行分辨。本文将会介绍基于最原始的DCGAN的动漫人物生成任务,通过定义生成器和判别器,并让这两个网络在参数优化过程中不断“打架”,最终得到较好的生成结果。
射频功率放大器设计实战:从理论到Layout的全流程解析
本文以一款40W、960MHz LDMOS功率放大器为例,系统解析了从理论分析、仿真设计到版图实现的射频功率放大器设计全流程。内容涵盖AB类放大器选型、核心指标定义、稳定性分析、Load-Pull/源牵引仿真、史密斯圆图匹配、偏置网络设计,以及最终的谐波平衡仿真与版图电磁验证,为工程师提供了一套从理论到实践的完整设计方法论。
利用featureCounts实现高效转录本定量:从比对到下游分析
本文详细介绍了利用featureCounts工具进行RNA-seq转录本定量的完整流程。从软件安装、输入文件准备,到核心命令参数解析与批量样本处理,再到将生成的计数矩阵无缝衔接至DESeq2进行差异表达分析,提供了从比对到下游分析的一站式实战指南。文章重点阐述了featureCounts在效率与易用性上的优势,并分享了常见问题排查与性能优化技巧,帮助研究者高效完成转录本定量这一关键步骤。
使用TensorFlow2.0搭建DCGAN生成动漫头像(内含生成过程GIF图)
本文介绍深度卷积对抗神经网络,并使用tensorflow2.0版本搭建,实现计算机生成动漫头像,最终效果可与真实图像媲美。
electron windows设置镜像地址环境变量报错npm error `ELECTRON_MIRROR` is not a valid npm option
如果你是在使用某个特定的脚本或配置文件,请检查该文件中是否有不正确的配置项,并进行相应的修正。确保你遵循electron的官方安装指南,并且没有包含不必要的或错误的配置选项。如果问题依然存在,可以查看npm的官方文档或者相关社区获取更多帮助。
带你读AI论文丨ACGAN-动漫头像生成
ACGAN-动漫头像生成是一个十分优秀的开源项目。
从开票数据到 ML81N 一键过账:用 ABAP BAPI 批量创建 Service Entry Sheet 的落地方案
摘要:SAP ESM场景中,服务履约确认通常通过ML81N事务码创建服务条目表(SES)完成。本文介绍如何基于开票数据(VBRK/VBRP)自动生成SES:首先通过BAPI_PO_GETDETAIL获取采购订单服务行结构,然后使用BAPI_ENTRYSHEET_CREATE创建SES并覆盖开票数量与金额,最后调用BAPI_ENTRYSHEET_RELEASE自动释放。解决方案包含ALV交互界面、批量处理逻辑和结果跳转功能,实现从人工录入到自动化处理的转变。(149字)
Oracle EBS的帐套由“4C”构成,而华为MetaERP将其发展为“6C”
华为MetaERP从OracleEBS的"4C"架构升级为"6C",实现核算理念革新。核心突破在于将会计科目、核算维度和核算单元解耦,形成"科目表+维度库"的灵活架构。新架构优势显著:1)科目回归会计本质,管理维度独立扩展;2)支持无限维度的精细化核算;3)实现数据权限隔离和内部交易自动化;4)采用元数据驱动设计,为AI应用奠定基础。这一平台化架构解决了大型企业在全球化、多元化发展中的核算难题,相比传统架构具有更强的灵活性和扩展性。
240万!动漫人脸数据集AnimeCeleb
点击上方“机器学习与生成对抗网络”,关注星标获取有趣、好玩的前沿干货!文章 新智元 编辑 小咸鱼【新智元导读】韩国科学技术院最近的一项研究提出了一个大规模的动漫人脸数据集AnimeCele...
C#读取和写入excel表数据--手把手教详解
C#读写excel数据详解
AnimeGANv2部署案例:搭建在线动漫头像生成服务
本文介绍了基于星图GPU平台自动化部署AI二次元转换器 - AnimeGANv2镜像的完整实践,构建轻量级在线动漫头像生成服务。该方案支持人脸照片到二次元风格的实时转换,适用于社交头像生成、虚拟形象设计等AI应用开发场景,具备高画质、低延迟、CPU友好等优势。
jre9下载 jdk9
(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】
VB摄像头监控
该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制
亲手养成一只自己的动漫主播!单张头像生成动画,可指定姿态或真人视频迁移...
大数据文摘出品来源:github编译:李雷、刘俊寰、陈若朦不知道大家是否都看过动漫YouTuber上的网红主播。有个小哥因为对动漫网红主播太着迷了,于是他用深度神经网络简化了动画生成过程...
数学建模模型总结
这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!
生成对抗网络(GAN)的18个绝妙应用
图片来源:pexels.com/@gravitylicious生成对抗网络(GAN)是生成模型的一种神经网络架构。生成模型指在现存样本的基础上,使用模型来生成新案例,比如...
计算机控制技术及应用
《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。
基于Python的二次元头像生成器 课程报告+源码
本文介绍了一个基于生成对抗网络(GAN)的二次元头像生成器项目。项目团队受GAUGAN算法启发,通过训练DCGAN模型实现了动漫风格头像的自动生成。文章详细记录了实验流程,包括环境搭建、数据集优化(从单人到多人再到统一画风)、网络优化(使用ReLU/LeakyReLU激活函数、调整损失函数和学习率)等关键步骤,并展示了不同训练策略下的生成效果对比。该项目为深度学习在动漫创作领域的应用提供了实践参考,同时也体现了GAN技术在图像生成方面的强大能力。
AnimeGANv2实操手册:实现高质量动漫风格转换的秘籍
本文介绍了基于星图GPU平台自动化部署AI二次元转换器 - AnimeGANv2镜像的完整方案,实现照片到动漫风格的高质量转换。该镜像集成预训练模型与WebUI界面,支持一键式操作,适用于个性化头像生成、虚拟形象设计等AI艺术创作场景,助力开发者快速构建高效稳定的风格迁移应用。
AnimeGANv2入门必看:动漫风格转换基础知识
本文介绍了基于星图GPU平台自动化部署AI二次元转换器 - AnimeGANv2镜像的方法。该平台支持一键启动与快速配置,实现照片到动漫风格的高效转换。用户可在Web界面上传人像,实时生成宫崎骏或新海诚风格的艺术图像,适用于头像定制、角色设计等AI应用开发场景。
生成神经对抗网络(GAN)的基本认识及应用
生成对抗网络(GAN)是生成模型的一种神经网络架构。 GAN是使用两个神经网络模型训练而成的一种生成模型。其中一个称为“生成器”或“生成网络”模型,可学习生成新的可用案例。另一个称为“判别器”或“判别网络”,可学习判别生成的案例与实际案例。 两种模型(从博弈论的意义上来说)处于一种竞争状态,生成器企图愚弄判别器,而判别器则要同时处理生成案例和实际案例。 原文链接:https://www.zhihu.com/search?q=%E7%94%9F%E6%88%90%E7%A5%9E%E7%BB%8F%E5
AnimeGANv2应用案例:动漫风格电子邀请函
本文介绍了基于星图GPU平台自动化部署AI二次元转换器 - AnimeGANv2镜像的应用实践,聚焦于动漫风格电子邀请函的生成场景。通过该平台可快速搭建图像风格迁移系统,将真实人脸照片高效转化为宫崎骏或新海诚风格的动漫形象,并集成至定制化邀请函模板,实现个性化、高美感的创意设计,适用于婚礼、生日会等温情活动的数字化呈现。
466



被折叠的 条评论
为什么被折叠?



