下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、AI模拟清明上河图引言:我们知道清明上河图是我国国画的代表作之一,是中国十大传世名画之一。 为北宋风俗画,北宋画家张择端仅见的存世精品,属国宝级文物,现藏于北京故宫博物 院。清明上河图宽24.8厘米、长528.7厘米,绢本设色。作品以长卷形式,采用散点透视构图法,生动记录了中国十二世纪北宋都城东京(又称汴京,今河南开封)的城市 面貌和当时社会各阶层人民的生活状况,是北宋时期都城汴京当年繁荣的见证,也是北 宋城市经济情况的写照。这在中国乃至世界绘画史上都是独一无二的。在五米多长的画卷里,共绘了数量 庞大的各色人物,牛、骡、驴等牲畜,车、轿、大小船只,房屋、桥梁、城楼等各有特 色,体现了宋代建筑的
2、特征。具有很高的历史价值和艺术价值。清明上河图虽然 场面热闹,但表现的并非繁荣市景,而是一幅带有忧患意识的“盛世危图”,官兵懒散税 务重。而我们今天的项目就是通过对算法的改造,实现属于自己的清明上河图。下面我们将利用vggl9模型训练画作,详细步骤如下,并且我在每个代码上面都注 释了方便查看:首先我们导入先关的库:import tensorflow as tfimport numpy as npimport scipy.ioimport scipy.miscimport osimport time接着定义一些变量方便调用:CONTENT_IMG = 'l.pngfSTYLEJMG =
3、"sty.jpg'OUTPUT_DIR = 'neuraLstylejTansfejtensorflow/'再创建一个目录用来保存图片:if not os.path.exists(OUTPUT_DIR):os.mkdir(OUTPUT_DIR)定义生成图像的长宽通道等信息IMAGE.W = 400IMAGE.H = 300COLOR-C = 3NOISE.RATIO = 0.7BETA = 5ALPHA = 100再接着定义模型路径VGG_MODEL = ,imagenet-vgg-verydeep-19.mat,生成一个参数矩阵,作为图像的处理过程之一,对像
4、素值运算:MEAN.VALUES = np.array(123.68,116.779,103.939).reshape(l, 1,1, 3)再接着定义读取模型函数,下面我都有所注解:def load_vgg_model(path): fitDetails of the VGG19 model:- 0 is convl_1 (3, 3, 3, 64)- 1 is relu- 2 is convl_2 (3, 3, 64, 64)- 3 is relu- 4 is maxpool- 5 is conv2_l (3, 3, 64,128)- 6 is relu- 7 is conv2_2 (3, 3
5、,128,128)- 8 is relu- 9 is maxpool- 10 is conv3_l (3, 3,128, 256)- 11 is relu- 12 is conv3_2 (3, 3, 256, 256)- 13 is relu- 14 is conv3_3 (3, 3, 256, 256)- 15 is relu- 16 is conv3_4 (3, 3, 256, 256)- 17 is relu- 18 is maxpool- 19 is conv4_l (3, 3, 256, 512)- 20 is relu- 21 is conv4_2 (3, 3, 512, 512)
6、- 22 is relu- 23 is conv4_3 (3, 3, 512, 512)- 24 is relu- 25 is conv4_4 (3, 3, 512, 512)- 26 is relu- 27 is maxpool- 28 is convS.l (3, 3, 512, 512)- 29 is relu- 30 is conv5_2 (3, 3, 512, 512)- 31 is relu- 32 is conv5_3 (3, 3, 512, 512)- 33 is relu- 34 is conv5_4 (3, 3, 512, 512)- 35 is relu- 36 is m
7、axpool- 37 is fullyconnected (7, 7, 512, 4096)- 38 is relu- 39 is fullyconnected (1,1, 4096, 4096)- 40 is relu- 41 is fullyconnected (1,1, 4096,1000)- 42 is softmaxvgg = scipy.io.loadmat(path) vggjayers = vgg'layers'#加载vgg模型获取模型各层参数和名称def-weights(layei; expectedJayer_name):W = vgg_layers0 la
8、yer 0 0 2 0 0 b = vgg_layersO layer 0 0 2 0 1 layer,name = vgg_layersO layer 0 0 0 0 assert layer_name = expected_layer_iiame return W b#将加载的变量初始化成tf可运算的张量类型,函数返回值为激活函数的输出def_conv2d_relu(prev_layei; layer, layer_name):W; b = .weights(layei; layerjiame)W = tf.constant(W)b = tf.constant(np.reshape(b,
9、(b.size)return tf.nn.relu(tf.iin.conv2d(prevjayer, filter=W, strides=l, 1,1,1, pa(iding='SAME,) + b)#定义池化层函数def-avgpoolfprevjayer):return tf.nn.avg_pool(prev_layei; ksize=l, 2, 2,1, strides=l, 2, 2,1, padding='SAME,)#将各层输出值都放到列表中方便加载,形成字典 graph = graph 'input1 = tf.Variablefnp.zerosCfl,
10、IMAGE.H, IMAGE.W, COLOR/), dtype=,float32')#定义'convlJL为vgg模型的第0层,输入层为上一层的'input graph'convl_l' = _convZd.relufgraphf'input', 0, 'convl.11) graphconvl_2' = _conv2d_relu(graph'convl_l,/ 2, onvl-Z') graphCavgpooll1 = _avgpool(graph'c<mvl_2')graph
11、39;conv2_l* = .convZd.relufgraphf'avgpooll', 5, onvZ.l') graphconv2_2' = _conv2d_relu(graph,conv2_l, 7, "convZ-Z') graph *avgpool2' = _avgpool(graph'coiiv2_2')graph 'conv3_l'graph'conv3_2'graph'conv3_3'graph ,conv3_4,= -conv2d_relu(graph
12、39;avgpool2, 10, 'conv3_l')= -conv2d_relu(graph,conv3_l,12, 'conv3_2') = -conv2d_relu(graph'conv3_2, 14/conv3_3')=conv2d.relu(graph*conv3_3, 16, ,conv3_4,)graph'avgpoo!3' = _avgpool(graph'conv3_4,)graph 'convl.l'graph'conv4_2'graph 'conv4_3'
13、;graph ,conv4_4,= -conv2d_relu(graph'avgpool3', 19, 'conv4_l*)= -conv2d_relu(graph'conv4_l, 21, ,conv4_2,) = -conv2d_relu(graph'conv4_2,J, 23, 'conv4_31)= -conv2d_relu(graph'conv4_3, 25, ,conv4_4,)graph 'conv5_l'graph 'conv5_2'graphCconvS.B'graph '
14、conv5_4'graph 'avgpool4' = _avgpool(graph'conv4_4') = -conv2d_relu(graph,avgpool4'> 28, 'convS-l1)= -conv2d_relu(graph,conv5_l, 30, 'conv5_2')=.convZd_relu(graph'conv5_2', 32,'conv5_3')=.convZd.relu(graph'conv5_3*, 34, ,conv5_4,)graph'av
15、gpoo!5' = _avgpool(graph'conv5_4')return graph为了实现自己的项目效果,设定损失函数:#定义内容损失函数,变量为tf计算图和vgg模型参数,返回值为损失值def contentJoss_func(sess, model):#p 就是 model'conv4_2,)#St, x 是 model,conv4_2,)def .content Joss(p, x):#p 的值为 Tensor(HRelu_9:0,; shape=(l, 75,100, 512), dtype=float32),故 N 为512, M为75*10
16、0,分别为卷积核个数,卷积核大小的宽*100N = p.shape3M = p.shapel * p.shape2return (1 / (4 * N * M) * tf.reduce_sum(tf.pow(x - p, 2)return _contentjoss(sess.run(model,conv4.2,)f modelfconv4_2')STYLE.LAYERS = (fconvl_l; 0.5), fconv2_l; 1.0), CconyS.11, l.S), (fconv4_l; 3.0), (,conv5_l 4.0)#返回值为_styleoss的值*0.5,1,1.5
17、,4的加和def stylejoss_func(sess/ model):def _gram_matrix(F, N, M):Ft = tf.reshape(F, (M, N)return tf.inatmul(tf.transpose(Ft)f Ft)#a,x 都为,convl_l'j convZirconvBr/convdl', tonv5_l'中的参数遍历 def_style_loss(a, x):#同内容损失函数N = a.shape3M = a.shapel * a.shape2A = .gram.matrixfa, N, M)G = _gram_matrix
18、(x, N, M)return (1 / (4 * N * 2 * M * 2) * tf.reduce_sum(tf.pow(G - A, 2)return sum(_stylejoss(sess.run(modellayer_name), modellayer_name) * w for , w in STYLE-LAYERS)再定义生成图片,读取图片,保存图片函数:#产生噪声图片def generate_noise_image(content_image, noise_ratio=NOISE_RATIO):#随机产生矩阵图片,矩阵元素内容符合标准正太分布noisejm
19、age = np.random.unifo011(-20, 20, (1, IMAGE.H, IMAGE,W,COLOR_C).astype('float32')#将产生的矩阵内各元素与神经网络加和inputjmage = noisejmage * noise_ratio + contentjmage * (1 - noise_ratio) return inputjmage#读取图片,改变尺寸,变成1行多列矩阵,将矩阵与初始值相减返回def loadjmage(path):image = scipymisc.imread(path)image = scipy.misc.imr
20、esize(imagel (IMAGE.H, IMAGE.W)#image.shape 为800,600,3则(1, ) + image.shape)为1,800,600,3image = np.reshape(imagel (1,) + image.shape)#MEAN_VALUES =】ip.airay(123.68,116.779,103.939).reshape(l, 1,1, 3)#其中image为三通道矩阵,MEAN.VALUES为三维矩阵可以相减image = image - MEAN_VALUESreturn image#保存图片def save_image(path, im
21、age):image = image + MEAN_ VALUES并参见上面图像加载时多加了 1维,故形成时要减少维度,image = image 0#截取所有数值在5255之间的,因为像素值必须是这个范围。而参数运算后可能 会超过这个值image = np.clip(image, 0, 255).astype('uint8')#保存scipy.misc.imsavetpath, image)下面是训练加载:#启动计算图with tf.Session() as sess:#读取图片,返回值为减去MEAN_VALUES的矩阵,矩阵形状为1,800,600,3 contentjma
22、ge = load_image(CONTENT_IMG)style Jmage = loadJmage(STYLEJMG)# 加载vggl9模型,返回值为一个字典,里面为各网络层参数,输入和输出model = load_vgg_model(VGG_MODEL)# 产生噪声图片,返回值为随机矩阵加上网络层参数的新矩阵inputjmage = generate_noise_image(contentjmage)# 变量初始化sess.run(tf.globaLvariables_initializerQ)# 从网络层input层开始运算内容图片矩阵sess.run(model'input,.assigii(content Jmage)contentjoss = contentjoss.funcfsess, model)# 从网络层input层开始运算内容图片矩阵sess.run(modelvinput9.assign(stylejmage)style Joss = style_loss_fiinc(sess/ model)# 总损失为内容损失加上风格损失totaljoss = BETA * contentjoss + ALPHA * stylejoss# 建立优化器以调整参
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 设计概念方案
- 环境设计市场发展分析与策略研究
- 海兴广场景观设计
- 环境宴会台面设计
- 2025-2026学年《5.3正方形》同步练习题浙教版八年级数学下册 含答案
- 防摔气囊设计
- 耳鼻喉科急性扁桃体炎护理方案
- 设计保研介绍
- 音乐可视化创意设计实例课程设计
- Spark日志处理入门教程课程设计
- 2026年北京市东城区初三二模语文试卷(含答案)
- 泰安市交通发展投资集团有限公司部分权属企业招聘考试参考题库及答案解析
- 2026年山东名校联盟高三4月核心素养评估语文试题含答案
- 2026中国跨境支付系统合规风险与数字货币融合趋势分析
- 2026年招标采购从业人员《招标采购专业实务(初级)》考试真题(后附答案解析)
- 2026年阜新市医疗系统事业编乡村医生人员招聘考试备考试题及答案详解
- 江苏南通中远海运川崎船舶工程有限公司招聘笔试题库2026
- 2026届武汉市高三五调数学试卷及答案
- 2026广东广州市黄埔区大沙街姬堂经联社招聘财务人员1人考试备考题库及答案解析
- 杭州市拱墅区卫生健康局事业单位招聘笔试真题2025
- 2026年北京市东城区高三二模地理试卷(含答案)
评论
0/150
提交评论