【深度之眼cs231n第七期】笔记(二十八)

deepdream

实现deepdream主要是为了好玩,它也能帮助我们理解CNN在寻找些什么。
实现步骤:

  1. 选择CNN中的一层;
  2. 通过前向传播,计算选中层的特征;
  3. 令梯度=特征(等同于最大化特征的2范数);
  4. 通过反向传播,计算每个像素的梯度;
  5. 更新梯度(梯度上升);
  6. 跳到步骤2;

在这里插入图片描述
这里有几个小技巧:

  1. 在前向传播之前抖动图片,在梯度更新后反抖动图片,这是一种正则化手段,可以使图像更平滑;
  2. 在梯度上升时,对梯度进行L1归一化,使生成图像更平滑;
  3. 规定像素的上下界,同样是为了得到更平滑的图像。

在这里插入图片描述
这样,从一张天空的图片开始,就会得到非常有趣的图片:
有很多经常出现的物种得到了人们的命名,而且这些物种里有很多狗也表明了神经网络的数据情况(在ImageNet上训练的,1000个类别中,有200多个类别都是狗)
在这里插入图片描述
如果选取神经网络中较浅的层,就会得到类似边缘的东西:
在这里插入图片描述
运行的时间长一些,并且进行多尺度处理,就会得到一些非常奇葩的图片(的确挺像梦的……):
在这里插入图片描述
在另一个数据集(MIT places,200个场景类别)上运行deepdream后,得到的图像就比较好看了:
在这里插入图片描述

特征反演

  1. 给定一张图片,计算它关于神经网络某一层的特征;
  2. 从随机噪声开始,通过梯度上升生成一张图像,希望生成图像和原始图像关于神经网络特定层的特征相似
  3. 正则化用的是全变差正则化,它可以使生成图片更加平滑

在这里插入图片描述
通过对不同层进行特征反演,我们发现神经网络的浅层中保留更多细节信息,能够很好的还原原始图像;而深层的神经网络特征只保留了语义信息,不能很好的还原原始图像。
在这里插入图片描述

合成纹理

合成纹理就是给定一张小的纹理图片,希望生成一张大的纹理图片。
在神经网络之前,有很多方法可以做到(比如:最近邻法),不过对于比较复杂的纹理,合成的结果并不美好。
在这里插入图片描述
2015年的时候,有一篇使用神经网络来合成纹理的文章。为了在神经网络上合成纹理,该文章使用了格拉姆矩阵
计算格拉姆矩阵:

  1. 一张纹理图片,选定神经网络中的特定层;
  2. 通过前向传播计算特定层的特征,大小为CxHxW;
  3. 令F=HxW,则特征大小为CxF;
  4. 计算格拉姆矩阵,CxC=CxF@FxC。
    在这里插入图片描述
    纹理合成的过程类似于特征反演,只不过特征反演希望两张图片的特征相似,而纹理合成是希望两张图片的格拉姆矩阵相似
    这是一些纹理合成的结果,深层的格拉姆矩阵能得到更好的结果。
    在这里插入图片描述

风格迁移

把特征反演和纹理合成结合起来就是风格迁移:
在这里插入图片描述
生成的图片保留了一张输入图片的内容,学到了另一张图片的风格:
所以风格迁移的损失总共有三部分:内容损失(生成图片和内容图片关于某一层的特征差异)、风格损失(生成图片和内容图片关于多层的格拉姆矩阵差异之和)和全变差正则化
在这里插入图片描述
通过控制内容损失和风格损失的权重,可以生成不同的图片:
在这里插入图片描述
通过更改风格图像的大小,最后生成的图像也有所不同:
在这里插入图片描述
风格迁移加上多尺度处理,可以生成4k的风格迁移图片:
在这里插入图片描述
但是风格迁移有一个缺点,就是要耗费大量的资源(每生成一张图片都要经过多次前向和反向传播)。
所以一种更有效的方法是,为每一种风格训练一个网络(使用预训练的CNN模型),训练好之后,只用输入内容图像就能生成风格迁移的图像。
在这里插入图片描述
另一篇文章使用了实例归一化(pytorch里有这个函数),而不是一般的批量归一化,因为风格不同的图片不能使用批量归一化。
在这里插入图片描述
但是保存多个风格的神经网络也比较麻烦,Google提出了一个神经网络,它能生成不同风格图形(实时的)
在这里插入图片描述

小结

学习了很多理解CNN的方法

  1. 特征:最后一层特征的KNN有更好的结果、最后一层特征降维后能够得到C类、最大化特征块、遮挡图像
  2. 梯度:显著图、类可视化、fooling image、特征反演
  3. 好玩:deepdream、风格迁移

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值