首页 > 其他分享 >CV《神经风格转换》

CV《神经风格转换》

时间:2022-12-14 16:37:21浏览次数:37  
标签:转换 神经 NC 矩阵 纹理 风格 图像 CV 隐藏


本文是根据Andrew Ng的深度学习视频学习,自己总结的。这一系列先只学习关键技术和设计,具体的实例等下一期进行。

一:神经风格转换处相识

这个是个非常激动人心的小领域,也是一个生成模型,能把一个图像的风格迁移到另一个图像上来,能创造出不一样的新数据来,如下图所示。

CV《神经风格转换》_梯度下降

将S图像的绘画风格迁移到C图像上,既可以得到一个G图像,G图像是按照S图像的风格绘制的C图像,这很激动人心啊,人人都可以成为绘画师了啊简直,在图像处理特效领域完全可以产生新的滤镜。

内容就是图像的组成部分。可能是风景、海滩环境、花园里的猫、动物园里的长颈鹿等等……在典型的图像分类网络中,基本上是图像的标签。内容是图像组成的高级表征。

图像风格涉及更复杂的细节:笔触、颜色对比、整体纹理等等……

假设图像的内容是一只狗,不同人画这个“内容”的方式不一样,也就是说狗的模样会不尽相同。这种差异形成了图像风格。你的笔画可能会更粗更有活力,而我的笔画可能会更细更钝。

在深度卷积网络中,每一个隐含层都可能包含图像的部分内容和风格。

从第一个隐藏层开始可能只能识别简单的纹理特征,线条等信息,到了第二层能够识别比较大的一个曲线纹理特征,到了第三层甚至更高层,就能识别到更加复杂的内容和风格,甚至是更同一隐藏层的不同通道都可以存在不同的内容和风格。

CV《神经风格转换》_梯度下降_02

在卷积网络中,图像的内容和风格信息就存在于隐藏层中,随着隐藏层的深入,就可以从最简单的纹理线条到复杂的物体检测。

二:代价函数以及训练过程

代价函数:

CV《神经风格转换》_二维_03

由两部分组成,一个是生成图像G和内容图像C的相似度损失值,一个是生成图像G和风格图像S的相似度损失值。

训练过程:
1:初始化一个随机噪声的图像数据G,它可能是 100×100×3,可能是 500×500×3。

2:使用一个训练好了的网络ConvNet,作为深度特征和风格内容的抽取器和计算器。这个网络模型你可以自己训练,或者是利用现有的网络直接拿来使用,毕竟目标不是为了训练这个网络,而是要训练出图像。

3:使用梯度下降来更新输入的图像G,将G的每个像素作为参数,去更新G,注意这里不是训练网络参数了,而是把输入数据作为参数。

CV《神经风格转换》_神经风格转换_04

这个梯度下降的过程中,就是在更新G的像素,使他能达到一个很小的代价值。
从这里我们也学习到了数据也可以是参数,参数也可以是数据,二者在数学概念上上可以相互转换的。

例如下图

CV《神经风格转换》_数据_05

内容图像C是1图,风格图像S是2图,给定一个随机噪声图像G,通过不断地梯度下降迭代后就会得到一个新的图像图6。

三:内容损失函数

CV《神经风格转换》_二维_06

四:风格损失函数

什么是风格,在数学上怎么解释这个风格?

图像的风格信息依然存在于深度网络的隐藏层的,因此我们还是和内容代价函数一样第一步挑选一个隐藏层L,用这个隐藏层作为风格的深度测量,假设我们挑选了某个隐藏层如下。

CV《神经风格转换》_梯度下降_07

这个隐藏层的高度是NH,宽度是NW,通道数是NC,也就是可以看成是NC个子图像,或者可以说是得到了NC个二维矩阵。
我们现在需要计算各个通道图像之间的相关系数,用相关性来衡量图片的风格,这让我们想到了协方差矩阵,其实跟这个很类似。

如何理解呢?假如通道1图像对应某种纹理,通道2图像对应某种颜色,他们之间的相关性共同构成一个风格,就是此处用了这个纹理,同时也是这种颜色的相关程度。同样的,假设通道3代表是线条粗细的特征,此时计算通道1和通道3之间的相关程度,就可以形成在此纹理下,线条粗细的相关性程度。因此,利用相关性,共同来决定哪些特征(粗细,颜色,纹理等等等)的混合,以及混合比例(相关程度),这就是图像的风格就形成了。

不得不说啊,大神们的数学基础以及逻辑分析能力真是厉害,这些基本数学概念说出来了,我们都知道,但是就是想不出来这东西还能拿来被用作解决和分析高级问题,而大多数的时候我们都是用来考试,前路漫漫啊。

好了,既然我们要求每一个通道和其他通道的相关系数,那结果就是一个矩阵了,NC * NC的一个矩阵,这个矩阵叫做gram 矩阵。

这里我们就直接写计算式得了。首先将L层的(NC,NH,NW)的张量reshape到(NC,NH*NW)的二维向量上,这样做纯属是方便矩阵运算了。

CV《神经风格转换》_梯度下降_08

于是分别得到图像S的在L层的二维矩阵N_S,以及得到图像G的在L层的二维矩阵N_G。

CV《神经风格转换》_神经风格转换_09

到目前为止,我们已经把神经网络转换的训练过程,以及计算过程全部讲解完了。
下一步就是亲自实践一个这样的功能。


标签:转换,神经,NC,矩阵,纹理,风格,图像,CV,隐藏
From: https://blog.51cto.com/u_12419595/5937516

相关文章

  • 《Pytorch - 神经风格转换》
    上一篇我们学习了神经风格转换的详细内容,现在我们找了个网上的例子,一起运行分析下,具体实现过程是如何操作的。一:代码细节步骤解析第一步:获取当前可用的设备信息,CPU还是GPU#......
  • 《Pytorch - BP全连接神经网络模型》
    2020年10月4号,国内已经5号凌晨了,依然在家学习。今天是我写的第三个Pytorch程序,从今天起也算是入门了。这一次我想把之前自己手写的matlab实现的简易的传统的BP神经网络在......
  • 【opencv】【第一玩】坤坤的篮球
    今天第一次装了opencv,强大的图像处理库,于是我们先上安装过程我是在conda环境下安装的,选择自己的python环境condaactivatepytorch然后执行下面安装opencv,默认是最新版本。p......
  • 【opencv学习】【图像的数值计算操作】
    importcv2#展示图像,封装成函数defcv_show_image(name,img):cv2.imshow(name,img)cv2.waitKey(0)#等待时间,单位是毫秒,0代表任意键终止cv2.destroyAllWin......
  • 宏/VBA批量将文件夹下的csv文件转换成xlsx
    https://blog.csdn.net/weixin_43046974/article/details/120876697宏/VBA批量将文件夹下的csv文件转换成xlsx Subchange_CSV_to_XLSX() ChDir"C:\Users\Administrat......
  • 卷积神经网络之ResNet(2015)
    文章目录​​ResNet(2015)​​​​前言​​​​概要​​​​构思​​​​深度​​​​收敛​​​​退化​​​​解决​​​​相关工作​​​​残差表示​​​​快捷链接​​......
  • 卷积神经网络之早期架构
    文章目录​​早期架构​​​​lenet5架构​​​​小结​​​​代码​​​​DanCiresanNet​​​​后续几种网络的概要​​早期架构文档存放更新地址:​​https://github.co......
  • 关于opencv从图中画圈的思考
    读取图像;对图像进行操作;识别球门;识别途中白色区域;从图像上一行一行的扫描识别像素BGR值为(0,0,255);直到出现有白色区域时开始记录数据,可以将第一次扫描到点所在的第一行下十行......
  • Linux系统Word转换PDF,文档字体乱码不显示问题解决
    Linux系统Word转换PDF,文档字体乱码不显示问题解决1、在windows目录C:\Windows\Fonts下找到字体文件。2、在linux上寻找Linux/usr/share/fonts/my_fonts目录,如果没有......
  • 通过ffmpeg将16k采样率的wav文件转换成采样率为8k的wav
    一安装win10的ffmpeg 二进入所在文件夹文件名字:temp.wavtrans_temp.pcmwav_name.wav先将wav转换成pcm文件ffmpeg-itemp.wav-acodecpcm_s16le-fs16l......