微信扫一扫打赏支持

《python深度学习》笔记---8.3、神经风格迁移

《python深度学习》笔记---8.3、神经风格迁移

一、总结

一句话总结:

神经风格迁移是指将参考图像的风格应用于目标图像,同时保留目标图像的内容。

 

 

1、“神经风格迁移是指将参考图像的风格应用于目标图像,同时保留目标图像的内容” 中的风格和内容分别指什么?

【风格(style)是指图像中不同空间尺度的纹理、颜色和视觉图案,内容 (content)是指图像的高级宏观结构】:在当前语境下,风格(style)是指图像中不同空间尺度的纹理、颜色和视觉图案,内容 (content)是指图像的高级宏观结构。
【蓝黄色圆形笔划被看作风格,照片中的建筑则被看作内容】:举个例子,在图8-7 中(用到的参考图像是文森特 • 梵高 的《星夜》),蓝黄色圆形笔划被看作风格,而 Tübingen(图宾根)照片中的建筑则被看作内容。

 

 

2、风格迁移核心算法思想?

【定义一个损失函数来指定想要实现的目标,然后将这个损失最小化】。与所有深度学习算法的核心思想是一样的
【保存原始图像的内容,同时采用参考图像的风格】:你知道想要实现的目标是什么,就是保存 原始图像的内容,同时采用参考图像的风格。
【风格迁移损失非常容易用数学公式表示】:如果我们能够在数学上给出内容和风格的定义, 那么就有一个适当的损失函数,我们将对其进行最小化。
【损失公式就是风格减风格,内容减内容】:loss = distance(style(reference_image) - style(generated_image)) + distance(content(original_image) - content(generated_image))

 

 

3、风格迁移 损失函数说明:loss = distance(style(reference_image) - style(generated_image)) + distance(content(original_image) - content(generated_image)) ?

【distance是一个范数函数】:这里的distance 是一个范数函数,比如L2 范数;
【content 是一个函数,输入一张图 像,并计算出其内容的表示;】
【style 是一个函数,输入一张图像,并计算出其风格的表示。】
【style和content会分别接近】:将这个损失最小化,会使得style(generated_image) 接近于style(reference_image)、 content(generated_image) 接近于content(generated_image),从而实现我们定义的 风格迁移。

 

 

4、如何理解 卷积的不同层是图像内容在不同空间尺度上的分解?

【网络更靠底部的层激活包含关于图像的局部信息,而更靠近顶部的层则包含更加全局、更加抽象的信息。】
【卷积神经网络不同层的激活用另一种方式提供了图像内容在不同空间尺度上的分解。】
【能够被卷积神经网络更靠顶部的层的表示所捕捉到】:因此,图像的内容是更加全局和抽象的,我们认为它能够被卷积神经网络更靠顶部的层的表示所捕捉到。

 

 

5、风格迁移 content损失 介绍?

【内容损失只使用了一个更靠顶部的层】
【能够被卷积神经网络更靠顶部的层的表示所捕捉到】:因此,图像的内容是更加全局和抽象的,我们认为它能够被卷积神经网络更靠顶部的层的表示所捕捉到。
【因此,内容损失的一个很好的候选者就是两个激活之间的 L2 范数】,一个激活是预训练的卷 积神经网络更靠顶部的某层在目标图像上计算得到的激活,另一个激活是同一层在生成图像上 计算得到的激活。
【这可以保证,在更靠顶部的层看来,生成图像与原始目标图像看起来很相似。】 假设卷积神经网络更靠顶部的层看到的就是输入图像的内容,那么这种方法可以保存图像内容。

 

 

6、层激活的格拉姆矩阵(Gram matrix)?

【某一层特征图的内积】
【该层特征之间相互关系的映射】:这个内积可以被理解成表示该层特征之间相互关系的映射。
【这些特征就是纹理外观】:这些特征相互关系抓住了在特定空间尺度下模式的统计规律,从经验上来看,它对应于这个尺度上找到的纹理的外观。

 

 

7、风格迁移 style损失 介绍?

【风格损失则使用了卷积神经网络的多个层】:内容损失只使用了一个更靠顶部的层,但Gatys 等人定义的风格损失则使用了卷积神经网络的多个层。
【参考图像的所有空间尺度上提取的外观】:我们想要捉到卷积神经网络在风格参考图像的所有空间尺度上提取的外观,而不仅仅是在单一尺度上。
【格拉姆矩阵(Gram matrix)】:对于风格损失,Gatys 等人使用了层激活的格拉姆矩阵(Gram matrix), 即某一层特征图的内积。这个内积可以被理解成表示该层特征之间相互关系的映射。这些特征 相互关系抓住了在特定空间尺度下模式的统计规律,从经验上来看,它对应于这个尺度上找到 的纹理的外观。
【风格损失的目的是在风格参考图像与生成图像之间,在不同的层激活内保存相似的内部相互关系】:因此,风格损失的目的是在风格参考图像与生成图像之间,在不同的层激活内保存相似的内部相互关系。反过来,这保证了在风格参考图像与生成图像之间,不同空间尺度找到的纹理 看起来都很相似

 

 

8、你可以使用预训练的卷积神经网络来定义一个具有以下特点的损失?

【在目标内容图像和生成图像之间保持相似的较高层激活,从而能够保留内容】。卷积神经 网络应该能够“看到”目标图像和生成图像包含相同的内容。
【在较低层和较高层的激活中保持类似的相互关系(correlation),从而能够保留风格】。特征相互关系捕捉到的是纹理(texture),生成图像和风格参考图像在不同的空间尺度上应 该具有相同的纹理。

 

 

9、神经风格迁移的一般过程如下?

(1)、创建一个网络,它能够同时计算风格参考图像、目标图像和生成图像的 VGG19 层激活。
(2)、使用这三张图像上计算的层激活来定义之前所述的损失函数,为了实现风格迁移,需要将这个损失函数最小化。
(3)、设置梯度下降过程来将这个损失函数最小化

 

 

10、神经风格迁移除了内容损失和风格损失之外,还需要什么损失函数?

【总变差损失(total variation loss)】:它对生成 的组合图像的像素进行操作。它促使生成图像具有空间连续性,从而避免结果过度像素化。你 可以将其理解为正则化损失。
【我们需要最小化的损失是这三项损失的加权平均】:为了计算内容损失,我们只使用一个靠 顶部的层,即 block5_conv2 层;而对于风格损失,我们需要使用一系列层,既包括顶层也包 括底层。最后还需要添加总变差损失。

 

 

11、实现 快速风格迁移的方法?

【生成许多输入-输出训练样例】:首先利用这里介绍的方法,花费大量的计算时间对一张固定的风格参考 图像生成许多输入- 输出训练样例
【训练一个简单的卷积神经网络】:然后训练一个简单的卷积神经网络来学习这个特定风格的变换。
【只是这个小型卷积神经网络的一次前向传递而已】:一旦完成之后,对一张图像进行风格迁移是非常快的,只是这个小型卷积神经网络的一次前向传递而已。

 

 

12、神经风格迁移 内容总结?

【风格迁移是指创建一张新图像,保留目标图像的内容的同时还抓住了参考图像的风格。】
【内容可以被卷积神经网络更靠顶部的层激活所捕捉到。】
【风格可以被卷积神经网络不同层激活的内部相互关系所捕捉到。】
【最优化过程】:因此,深度学习可以将风格迁移表述为一个最优化过程,并用到了一个用预训练卷积神 经网络所定义的损失。


从这个基本想法出发,可以有许多变体和改进。

 

 

 

二、内容在总结中

博客对应课程的视频位置:

 

 

 

 
posted @ 2020-10-16 18:23  范仁义  阅读(351)  评论(0编辑  收藏  举报