Deepdream 实现
来源:互联网 发布:知乎 绶带 编辑:程序博客网 时间:2024/05/21 12:22
文章来源: http://blog.csdn.net/Yan_Joy/article/details/54343806
环境准备
deepdream还是基于python和caffe深度网络的,因此大概需要以下环境:
- Standard Python scientific stack: NumPy, SciPy, PIL, IPython. Those libraries can also be installed as a part of one of the scientific packages for Python, such as Anaconda or Canopy.
- Caffe deep learning framework (installation instructions).
- Google protobuf library that is used for Caffe model manipulation.
代码
导入库
相关的环境配置好了之后,可以先试试库能不能被导入进来:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
加载模型
网络采用了GoogLeNet模型,需要提前下好。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
做梦
Making the “dream” images is very simple. Essentially it is just a gradient ascent process that tries to maximize the L2 norm of activations of a particular DNN layer. Here are a few simple tricks that we found useful for getting good images:
- offset image by a random jitter
- normalize the magnitude of gradient ascent steps
- apply ascent across multiple scales (octaves)
做梦其实很简单,本质上,它只是一个梯度上升过程,试图最大化特定DNN层激活的L2范数。 这里有一些简单的技巧,我们发现有用的获得良好的图像:
- 由随机抖动偏移图像
- 规则化梯度上升步长的幅度
- 在多个尺度上应用上升
首先我们实现一个基本的梯度上升阶跃函数,应用前两个技巧:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
Next we implement an ascent through different scales. We call these scales “octaves”.
接下来,我们通过不同的尺度实现上升。 我们称这些尺度为“octaves”。
iter_n是迭代次数,octave_n是尺度缩放次数,octave_scale是尺度缩放比例。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
开始做梦
- 1
- 2
- 3
- 1
一共会得到4(尺度)*10(迭代)=40张图片。
更改结束层会改变结果,如:
- 1
具体的层可以参考配置文件,googlenet还是比较复杂的。而且结束的越晚,就更能从图像识别出现实物体。
如:_=deepdream(net, img, end='inception_4e/output')
左边的云已经可以看出是一只狗的脸了。
前方高能!
上面一步就得到了奇怪的结果,
如果把这样的输出再作为输入放到网络里呢?
结果比较精神污染:
这是经过大概5轮反复输入得到的结果。
官方迭代了100次,丧心病狂啊= =
控制做梦
如果调整了我们的优化目标,就可以控制我们想要的结果。
比如我们想把原始图像往另一张图像上靠近,可以定义一个指向性的优化目标:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
guide_features
是需要预先提取的目标特征:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
好了,运行!
- 1
有了花的感觉啊~
总结
正着传播过来是分类,反着过去是生成,用深度学习产生艺术作品似乎是一个很有意思的方向。而目前也有较为成熟甚至是商业化的项目了,比如deepart。如果你能够承受一定的精神污染,建议挑战一下Nightmare,这是YOLO大神的另一个作品。
deepdream-github
- Deepdream 实现
- Deepdream 实现
- 【深度学习】谷歌deepdream原理及tensorflow实现
- SURF项目总结 - deepdream
- 树莓派2 ubuntu16.04 deepdream
- 实现
- 实现
- 红黑树实现 实现代码
- java实现排列组合实现
- 实现Runnable 实现线程
- 实现ViewPager多种实现
- 双向LSTM实现实现
- 实现缓存 java实现
- 三子棋的实现的实现的实现
- 四则运算实现
- 继承实现
- 重载实现
- 实现缩略图
- 计算机视觉class2_1
- 手机点击出现蓝色区域方块
- 经验 | Pytorch还是Tensorflow?英伟达工程师帮你总结了
- 明日开播 | 7 场不可错过的 AI 技术专题
- 腾讯视频自动播放-去广告
- Deepdream 实现
- 找出N个整数中最大的K个数python
- oracle例外使用
- Kafka之——集群搭建
- supervisor源码分析
- codeforces 878C Tournament平衡树,好题!!!!
- CSS引用无效涉及的相对路径和绝对路径问题。
- 洛谷 P1013 进制位 【搜索 + 进制运算】
- python应用系列教程——python使用SocketServer实现网络服务器,socket实现客户端