利用caffe的python接口实现DeepImageSynthesis实例

在之前实现faster rcnn的博客中,先是配置了caffe的python接口,但是在验证的时候用DeepTexture的实例没有成功。改用pycharm而不是jupyter notebook再试一试,毕竟在IDE中更好调试。

新建工程,选择anaconda2作为解释器,因为要使用caffe作为模块,所以把编译好的x86/release下的caffe的python版本复制到lib/site-package中。但是pycharm依然提示找不到caffe这个module,猜测应该还是解释器没有选择好。

选择解释器Interpreter

在setting中重新选择解释器,这里可以看到因为我自己装了两个版本的python,各自对应一个虚拟环境。虚拟环境是python的私有副本,可以安装私有包而不会影响全局解释器。当然,也可以直接选择系统中的解释器。这里选择了anaconda2对应的python2.7的exe文件作为解释器。

添加自定义模块

解决了caffe无法找到的问题,还有一些模块无法找到,比如from DeepImageSynthesis import *时就出错了。这其实和caffe都是添加自定义模块的问题。

要么得用代码给 sys.path 列表增加新路径;

要么得调整 PYTHONPATH 环境变量;

要么就得把库文件复制到已经在 sys.path 设置中的路径中去(比如 site-packages 目录),比如刚才的caffe。

还有一种方法是给sys.path添加路径,但是不是用代码的方法,而是用文件的方法。Python 在遍历已知的库文件目录过程中,如果见到一个 .pth 文件,就会将文件中所记录的路径加入到sys.path 设置中

# How to call custommoudles(DeepTextures-master)?

# 1.find the site-packages folder in thepython installation directory(.\Lib\site-packages)

# 2.create a path file in this directory,suchas myPython.pth

# 3.open the myPython.pth,write the folderpath for the user module(xxx.\DeepTextures-master)

# 4.restart python container(IDLE/commandline)

# 5.from DeepImageSynthesis import *

需要改动的还有34行处GPU模式改为CPU;82行处pltfigure()改为plt.figure()

改变编码格式

运行的时候报错:SyntaxError: Non-ASCII character '\xe6' infile

这是说文件里面有非ASCII码。ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)第一个字母A就是美国,显然只支持英语字符和阿拉伯数字和一些基本的符号。并且II是信息交换的缩写,不是罗马字母。出现了非ASCII码说明一些符号的编码是不被支持的,这时候我们需要选择utf-8编码方式,这是两个字节的UNICODE编码对ASCII的过渡的格式,又叫万国码。具体方式是在代码开头指定编码格式:#encoding:utf-8

下载训练好的VGG模型

再次运行,再次报错:

RuntimeError: Could not open fileD:\program\Anaconda2\caffe-code\DeepTextures-master\Models\vgg_normalised.caffemodel

确实在代码的28行处要通过.caffemodel文件得到网络权重VGGweight,通过deloy.prototxt得到网络模型VGGmodel。但是在https://github.com/leongatys/DeepTextures没有.caffemodel文件,仔细阅读README.md文件才发现这个项目使用了19-layerVGG-Network的normalised版本。可以直接下载训练好的模型

VGG是牛津大学的一个叫Visual GeomotryGroup的组织,他们建立的超多层的神经网络模型。在16和19层网络时取得了很好的效果。

最后终于成功利用原图和和噪声生成了新图。我理解的就是噪声在原图基础上的图形化表示:

 下面是对代码的一些简单注释。不能说是简单跑一下就行了,还是要看这里是怎么使用caffe的。

# encoding:utf-8
#!/usr/bin/env.python
import glob #有点像正则表达式,用于文件查找
import sys #python自带模块,负责程序与解释器的交互
import os #os模块负责程序与操作系统的交互
from collections import OrderedDict#collections模块在内置数据类型的基础上,提供了几个额外的数据类型,如有序字典
import caffe
import numpy as np #科学计算库,提供矩阵运算库
from matplotlib import pyplot as plt #python的2D绘图库方便地创建海量类型地2D图表和一些基本的3D图表发
import qtpybase_dir1 = os.getcwd() #取得当前工作目录
print base_dir1
sys.path.append(r'D:\program\Anaconda2\Library\plugins\PyQt5')#获取指定模块搜索路径的字符串集合
print sys.path# How to call custom moudles(DeepTextures-master)?
# 1.find the site-packages folder in the python installation directory(.\Lib\site-packages)
# 2.create a path file in this directory,such as myPython.pth
# 3.open the myPython.pth,write the folder path for the user module(xxx.\DeepTextures-master)
# 4.restart python container(IDLE/command line)
# 5.from DeepImageSynthesis import *base_dir = r"D:\program\Anaconda2\caffe-code\DeepTextures-master"
from DeepImageSynthesis import *VGGweights = os.path.join(base_dir, r'Models\vgg_normalised.caffemodel')#将分离的各部分组合成一个路径名
VGGmodel = os.path.join(base_dir, r'Models\VGG_ave_pool_deploy.prototxt')#r的意思是禁止转义,因为/有转义的功能imagenet_mean = np.array([0.40760392, 0.45795686, 0.48501961])  # mean for color channels (bgr) array是数组
im_dir = os.path.join(base_dir, 'Images/')caffe.set_mode_cpu()  # for cpu mode do 'caffe.set_mode_cpu()'
# if cpu mode we should not call,below 3 line of code is just for using GPU mode.
# gpu = 0
# caffe.set_mode_gpu()
# caffe.set_device(gpu)# load source image
source_img_name = glob.glob1(im_dir, 'pebbles.jpg')[0]#glob模块中的函数,查找文件有三个匹配符:* ? []
print source_img_name
source_img_org = caffe.io.load_image(im_dir + source_img_name)#返回0-1之间的浮点数
im_size = 256.
[source_img, net] = load_image(im_dir + source_img_name, im_size,VGGmodel, VGGweights, imagenet_mean,show_img=True) # 读入原始图像到caffe格式,网络模型和参数,均值文件,图像尺寸
im_size = np.asarray(source_img.shape[-2:]) #将结构数据转化为ndarray而不copy,不占用新内存# l-bfgs parameters optimisation L-BFGS算法是一种在牛顿法基础上提出的一种求解函数根的算法maxiter = 2000
m = 20# define layers to include in the texture model and weights w_l
tex_layers = ['pool4', 'pool3', 'pool2', 'pool1', 'conv1_1']
tex_weights = [1e9, 1e9, 1e9, 1e9, 1e9] #10的9次方# pass image through the network and save the constraints on each layer
constraints = OrderedDict() # OrderedDict,实现了对字典对象中元素的排序
net.forward(data=source_img) # 图像前向传播
for l, layer in enumerate(tex_layers):  #对网络的层进行枚举、遍历constraints[layer] = constraint([LossFunctions.gram_mse_loss],[{'target_gram_matrix': gram_matrix(net.blobs[layer].data),'weight': tex_weights[l]}])# gram应该指格拉姆矩阵,用于计算不同通道的feature map的内积# get optimisation bounds Helper function to get optimisation bounds from source image.
bounds = get_bounds([source_img], im_size)# generate new texture
result = ImageSyn(net, constraints, bounds=bounds,callback=lambda x: show_progress(x, net),minimize_options={'maxiter': maxiter,'maxcor': m,'ftol': 0, 'gtol': 0})
# lambda也叫匿名函数,函数没有具体名称,这里直接返回梯度下降的中间值callback,x是自变量
# match histogram of new texture with that of the source texture and show both images
new_texture = result['x'].reshape(*source_img.shape[1:]).transpose(1, 2, 0)[:, :, ::-1] # transpose转置
new_texture = histogram_matching(new_texture, source_img_org)
plt.imshow(new_texture)
plt.figure()
plt.imshow(source_img_org)

Reference:

1.https://blog.csdn.net/qq_30549833/article/details/74188233

2.https://www.cnblogs.com/billyzh/p/6307716.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493693.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度:语音技术革命正在改变人类的交流方式

来源:资本实验室语言是我们日常交流的主要方式,可以让我们快速了解对方的意图,并做出适当的反应。但对很多语言障碍者而言,说话这一看似简单的行为依旧是难以想象的困难。语言是件极其复杂的事情,不仅仅是文字表面上的…

李航《统计学习方法》---感知机

这一章就讲了感知机。我觉得是深受工业革命的影响,把一些可以实现功能的基本单元都喜欢叫做什么机,这里的感知机,还有后来的以感知机为基础的支持向量机。直接看定义,看本质,实际上,感知机是一种线性分类模…

5G 对无线通讯芯片产业链的影响

来源:乐晴智库精选▌无线通信芯片概要:未来五年增速放缓,射频前端成为主要驱动力在智能手机普及的带动下,2012-2017五年无线通信芯片实现9.7%的复合增长率,根据iHS的数据,2017年市场规模达到1,322亿美金,占…

图像极坐标变换的研究

做图像配准的时候,发现图像进行旋转的情况下的配准有一些特殊。于是想到可以用极坐标进行配准。查了一下资料,发现大家用的更多的是对数极坐标Log Polar。 笛卡尔坐标系和极坐标系 先来说一下我们常用的笛卡尔坐标。X轴水平向右是正方向,y轴垂…

刚刚、Gartner发布物联网技术十大战略和趋势

来源:网络大数据Gartner的研究副总裁尼克•琼斯(Nick Jones)说:“物联网将在未来十年继续为数字化业务创新带来新的机遇,而许多新机遇有赖于新的或经过改进的技术。洞察创新物联网趋势的CIO们有机会领导本企业的数字化创新。”此外&#xff0…

图像的旋转和尺度缩放在对数极坐标系下的研究

首先来看一张特殊的同心圆图像及其极坐标变换:这是我自己在opencv下用cvLogPolar函数做的实验:极坐标原点选择在同心圆圆心时,同一个圆上的点到圆心的距离相等,所以映射在极坐标中应该是一组垂直于极轴的平行线。在自己的实验中因…

李航《统计学习方法》-----支持向量机

书中第七章才是支持向量机SVM,但在SVM与感知机有相似的地方,看了感知机的知识之后趁热先看看SVM。 首先回顾一下感知机。感知机的模型是线性分类模型,将两种类别标记为正负1,将新的样本输入线性函数,再将线性函数代入符…

乌镇互联网大会发布15项世界领先科技成果

来源:中央广电总台央视新闻客户端11月7日下午,第五届世界互联网大会“世界互联网领先科技成果发布活动”在乌镇互联网国际会展中心举行。大会共现场发布了15项世界互联网领域领先的“黑科技”,引得观众阵阵惊叹。15项世界互联网领先科技成果&…

OpenCV中的傅里叶的门道

接触到傅里叶-梅林算法,需要用到傅里叶变换,于是去查了一下OpenCV中的实现方法,没想到习以为常的傅里叶变换之中的门道还不少。 //傅里叶变换https://blog.csdn.net/keith_bb/article/details/53389819Mat I imread("Lena.jpg", I…

Science:人类迎来目前最为全面的癌症染色质可及性图谱

来源:吴晓波频道摘要:肿瘤在世界范围内导致人类死亡的首要原因之一,尤其是随着医疗水平的发展,人类的寿命的不断延长,癌症逐渐成为威胁人类健康的首要因素。肿瘤在世界范围内导致人类死亡的首要原因之一,尤…

傅里叶变换频谱的可视化保存

在上一篇关于傅里叶变换的博客中,知道了imshow的一个小trick:对normalize得到的0~1之间的浮点数构成的矩阵会进行放大255的操作,得到可视化的灰度图。即便是在python中也是如此操作的,只不过python中的函数封装得更加严密&#xf…

她取代马斯克成特斯拉新董事长 究竟什么来头?

来源:智车科技摘要:就如乔布斯之于苹果,对很多人来说,马斯克对特斯拉而言也有非凡的意义。甚至可以说,特斯拉的品牌吸引力很大程度上来自于“钢铁侠”本人。但由于当初任性发布“私有化”消息,被美国证交会…

十二天深入理解计算机系统(一)

计算机系统漫游 1 信息就是位上下文 系统中所有的信息都是由一串位表示的,在不同的上下文中,一个同样的字节序列可能表示一个整数、浮点数、字符串或者机器指令。 2 文本文件和二进制文件 有ASCII字符构成的文件称为文本文件,所有其他文件都是…

李航《统计学习方法》-----朴素贝叶斯

朴素贝叶斯法nave Bayes,在nave的中间字母上其实有两个点,查了一下才发现是法语中的分音符,在发音过程中发挥作用。但这不是重要的,重要的是在这种学习方法中贝叶斯承担了什么样的角色。 首先简单证明一下贝叶斯公式。联合概率Joi…

IEEE专访李开复:人类已打开潘多拉盒子,封堵AI变革只会徒劳

来源:《IEEE Spectrum》摘要:近期,李开复新书《AI未来》在美国同样反响不俗。在荣登多个排行榜后,IEEE旗下《IEEE Spectrum》,对李开复进行了专访,谈到了众多当前AI领域最受关注的话题。而且从《IEEE Spect…

Rand函数使用和对补码的理解

下面是在牛客网看到的一道题; //假设这n个数的序号依次为0,1,2,...,n-1,数组名为num void knuth1(int* pNum, int m, int n){srand((unsigned int)time(0));for (int i0; i<n; i){if (rand()%(n-i) < m)//rand()%(n-i)的取值范围是[0, n-i&#xff09;{cout << p…

深度学习巨头Yoshua Bengio清华演讲: 深度学习通往人类水平人工智能的挑战

来源&#xff1a;专知摘要&#xff1a;2018年11月7日晚&#xff0c;被称为“深度学习三巨头”之一的蒙特利尔大学计算机科学与运算研究系教授Yoshua Bengio在清华大学做了《深度学习抵达人类水平人工智能所面临的挑战&#xff08;Challenges for Deep Learning towards Human-L…

了解GAN网络

GAN网络&#xff0c;第一次听说它就不明觉厉。其他网络都是对输入图像进行某种处理&#xff0c;得到某种特定的输出。而GAN网络居然可以“无中生有”&#xff0c;无论是去除马赛克&#xff0c;还是换脸&#xff0c;还是对灰度图像上色&#xff0c;都显得不可思议&#xff0c;怎…

新能源汽车:大变革催生十万亿市场空间

来源&#xff1a;新时代证券&#xff08;开文明&#xff09;新能源汽车发展空间巨大&#xff0c;随着新能源汽车性能提升以及痛点的改善&#xff0c;新能源汽车带来的冲击越来越大&#xff0c;渗透率随之提升。根据BNEF预测&#xff0c;到2025年全球新能源汽车的销量将达到1100…

dlib+vs2013+opencv实现人脸特征点检测

刷知乎的时候发现dlib做特征点检测和人脸识别的效果都好于OpenCV&#xff0c;就想着动手玩一下。没想到也是遇坑重重。 首先&#xff0c;在官网 install命令和setup.py文件进行安装时报错&#xff0c;先是报错cmake没有找到&#xff0c;添加了环境变量之后仍然报错c11需要在vs…