科技刀▲使用神经风格转移NST得到绚丽惊奇的图片( 二 )


科技刀▲使用神经风格转移NST得到绚丽惊奇的图片
文章图片
本教程使用第4卷积(图2中的conv2_2)作为内容层 。 正如我们在上面的图3中可以看到的那样 , 由于网络仍然关心在此深度精确匹配特征 , 因此该层可能太低而无法用于内容 。 而Gatys等人是使用conv4_2 , 它更关注整体功能的布置 , 而不是单个特征 。
就样式而言 , 较低的层响应较小的重复特征 , 而较高的层捕获更抽象的全局特征 。
因此 , 为了转化style_img的整个样式 , 从低级细节转换为总体主题 , 我们应包括网络中各个深度的图层 。 本教程使用前5个卷积层 , 但是它们在网络中都相当低 , 并且不太可能捕获全局特征 。 Gatys等人使用conv1_1 , conv2_1 , conv3_1 , conv4_1和conv5_1 , 可以在整个网络层次结构中很好地分布各层 。 我们可以使用在内容采用的相同的方法 , 来可视化每个图层选择正优化的样式 。 为此 , 我们设置content_weight=0 , 指定我们要使用的style_layers , 然后在随机的input_img上运行训练过程 。
科技刀▲使用神经风格转移NST得到绚丽惊奇的图片
文章图片
图4:(左)由PyTorch教程中选择的图层产生的样式 , (右)在Gatys等人的论文中选择的图层产生的样式 。
正如预期的那样 , 由教程层优化的样式可以捕获低级的重复性特征 , 但是无法捕获高级的全局性特征 。
提高质量
到目前为止 , 我们所用的修复程序应使我们的图像质量与Gatys等人的论文中的图像质量相当接近 。 从这里开始 , 我们将更深入地研究如何采取进一步的步骤来生成更好的图像 。
我对论文进行改进的第一件事就是将优化器从L-BFGS切换到Adam 。 在论文中 , 作者声称L-BFGS可以实现更高的质量转移 , 但是在实验中使用Adam时 , 我没有发现两者存在任何差异 。 此外 , Adam似乎运行更稳定 , 尤其是在训练大量步数或训练大重style_weight时 。 在这些情况下 , L-BFGS似乎NaN , 可能是由于梯度爆炸的原因 。
另一个较小的调整是将mse_loss , 即L2损失切换为L1_loss 。 我未能想出使用L2损失进行样式转移的充分理由(除0以外的可微性) , 因为平方项会严重影响离群值 。 正如上一节所提到的 , 我们并不在乎是否可精确匹配特征 , 而更在乎是否可容忍所生成图像中的一些离群值 。 确实 , 将样式和内容特征融合在一起 , 离群值甚至可能导致视觉效果更好 。 最后 , 特征可视化(FV)的作者也使用L1_loss来执行任务 , 可能是出于类似的原因考虑 。
实际上 , 许多用于生成高质量的特征可视化技巧可以完美转化为为用于神经样式转换的技巧 。 FV和NST在概念上非常相似 , 只是它们生成input_img的方式不同 。 在NST中 , 对input_img进行了优化 , 通过与content_img和style_img相同的方式激活网络中的不同层 。 另一方面 , FV不使用content_img和style_img , 而是生成一个input_img , 以最大程度地激发不同层的神经元 。
科技刀▲使用神经风格转移NST得到绚丽惊奇的图片
文章图片
图5:由激进的数据扩充引起的生成图像右上角的旋转伪像 。
我从FV借鉴的一个技巧是在input_img上使用数据增强 。 这与常规分类任务的工作原理完全相同:在每个步骤中 , 我们先对input_img进行一些扩充(例如旋转 , 裁剪 , 调整大小等) , 然后再对其进行遍历并计算损失 。 通过在每个步骤中增加input_img , 我们将迫使input_img生成可抵抗较小扰动的特征 。 这些抵抗的特征应包含较少的高频伪像 , 并且通常看起来更具视觉吸引力 。 1但是 , 我发现“功能可视化”文章中使用的增强功能非常激进 , 因此必须适当缩小比例 。 即使这样 , 仍然在生成的图像的边缘周围形成一些旋转伪像(图5) 。 消除这些伪像的最简单方法是将图像裁剪几像素 。


推荐阅读