首页 > 其他分享 >图像风格迁移技术(论文复现)

图像风格迁移技术(论文复现)

时间:2024-08-06 10:23:24浏览次数:17  
标签:style image conv1 风格 复现 图像 迁移

图像风格迁移技术(论文复现)

本文所涉及所有资源均在传知代码平台可获取

文章目录

概述

图像风格迁移是指将一张图像的内容与另一张图像的风格相融合,生成具有新风格的图像。

在这里插入图片描述

风格(style)是指图像中**不同空间尺度的纹理、颜色和视觉图案,*内容(content)是指图像的*高级宏观结构

风格迁移这一想法与纹理生成的想法密切相关,在 2015 年开发出神经风格迁移之前,这一想法就已经在图像处理领域有着悠久的历史。但事实证明,与之前经典的计算机视觉技术实现相比,基于深度学习的风格迁移实现得到的结果是无与伦比的,并且还在计算机视觉的创造性应用中引发了惊人的复兴。

风格迁移其主要应用场景如在艺术创作场景,将不同艺术风格应用于图像,可以创造出独特的艺术效果,使作品具有新的视觉呈现。或者在社交平台上风格化滤镜,图像增强等。

内容 & 风格表示

我们需要让输出的目标图像既符合原始图像和目标风格,就需要内容和风格进行表示。

在深度学习实现上,我们需要确定我们的的目标是什么,就是保存原始图像的内容,同时采用参考图像的风格。那么就有一个适当的损失函数将对其进行最小化,如下:

在这里插入图片描述

这里的 distance 是一个范数函数(用来衡量向量或矩阵的大小或长度),比如 L2 范数;content 是一个函数,输入一张图像,并计算出其内容的表示;style 是一个函数,输入一张图像,并计算出其风格的表示。将这个损失最小化,会使得 style(generated_image) 接近于 style(reference_image)、content(generated_image) 接近于 content(generated_image),从而实现我们定义的风格迁移。

内容

在CNN卷积网络进行对象识别任务中,随着层次的加深对象的信息输出更加的明确,较前的层数特征图输出到一些更加通用的结构,比如猫狗分类中的基础边缘线条,而更深的层可以捕捉到更加全局和抽象的结构,如猫耳,猫眼睛。根据这个模式,我们可以通过不同深度的层特征图重建输入图像以可视化层所包含输入图像的信息,如下图可以看到深层的特征图包含了图像中对象的全局排列信息(高级、抽象),但是像素值信息会丢失。浅层的层特征图重建图像几乎是完整的精确像素值。

在这里插入图片描述

这样一来在内容上的损失函数便是在一个预训练模型(需要在大型数据集下训练好的能有效提取特征的模型)同一深的层激活的范式数,这样至少在深的层看来,二者图像的内容是一致的。

风格

同样的,不同深度的层特征图包含了不同空间尺度的输入图像的信息,基于此Gatys等人在每一层特征图中采用格拉姆矩阵(Gram matrix)(描述特征图之间的相关性),即特征值的内积,以在不同空间尺度下提取不同滤波器的特征图之间的相互关系(纹理),得到输入图像的多尺度的纹理信息(不捕获全局排列信息)。如上图层激活所包含的风格信息(颜色和局部排列信息),abcde图为不同子集的CNN层的风格重建图像的风格,(“conv1 1”(a)、“conv1 1”和“conv2 1”(b)、“conv1 1”、“conv2 1”和“conv3 1”(c)、“conv1 1”、“conv2 1”、“conv3 1”和“conv4 1”(d)、“conv1 1”、“conv2 1”、“conv3 1”、“conv4 1”和“conv5 1”(e)) 这会输出与参考图像风格越来越模式匹配的输出,且会忘记其全局排列信息。通过使输出图像和风格图像在不同尺度的层激活都有相似的相互关系,即不同尺度的纹理都很相同,便可以实现风格的迁移。此外,在风格和内容上我们还需要定义贡献强度,这里我们可以通过损失函数的权重来实现即可通过这两种构建损失函数进行优化,便可以使得模型输出图像符合在深层次中“看到”的图像内容是一致的,不同层中特征图的内部特征相互关系的是相似的以实现目标

演示效果

原始论文:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

核心逻辑

在这里插入图片描述

神经风格迁移流程一般为 计算层激活 -> 计算损失函数 -> 梯度下降最优化损失函数

  • 网络层激活:输出目标图像,原始图像,参考图像的层激活输出
  • 计算损失函数: 通过所求的层激活计算对应的内容和风格损失函数
  • 梯度下降优化:通过梯度下降的方式减小损失函数,训练模型参数使得模型能学习到参考图像风格的纹理和保持内容的不变

具体在实现上来说流程如下

  • 使图像尺寸大小相似(如果差异很大,由于模型中尺度变换会使得风格迁移很麻烦)

  • 读取图像, 加载预训练模型,得到层激活

  • 根据层激活构建需要最小化的最终损失(需要注意的是在重建图像需要添加总变差损失平滑图像)

  • 在图像重建或图像去噪任务中,通常将总变差损失与其他损失函数(如均方误差损失)相结合,通过权衡平滑性和重建准确性

  • 设置梯度下降优化算法(论文所实现的方案为L-BFGS 算法,)

  • 训练模型

from keras import backend as K

# 获取原始图像和参考风格图像 不变设置为常量
target_image = K.constant(preprocess_image(target_image_path))
style_reference_image = K.constant(preprocess_image(style_reference_image_path))

# 目标生成图像占位符(可变)默认为float32 
combination_image = K.placeholder((1, img_height, img_width, 3))

# 合并为一个批量(这里是为了符合VGG19的批次(3,width,height,3)
input_tensor = K.concatenate([target_image,
                              style_reference_image,
                              combination_image], axis=0)

# 官方文档 https://keras.io/api/applications/vgg/#vgg19-function 
model = vgg19.VGG19(input_tensor=input_tensor,
                    weights='imagenet',
                    include_top=False)
print('Model loaded.')
print(model.summary())

outputs_dict = dict([(layer.name, layer.output) for layer in model.layers])

# 内容格式的层激活
content_layer = 'block5_conv4'
# 风格的CNN层激活
style_layers = ['block1_conv1',
                'block2_conv1',
                'block3_conv1',
                'block4_conv1',
                'block5_conv1']
outputs_dict
from scipy.optimize import fmin_l_bfgs_b
# from scipy.misc import imsavefrom  import 
import time

result_prefix = 'style_transfer_result'
iterations = 10 # 更深的轮次 效果越深(风格迁移越强)

# Run scipy-based optimization (L-BFGS) over the pixels of the generated image
# so as to minimize the neural style loss.
# This is our initial state: the target image.
# Note that `scipy.optimize.fmin_l_bfgs_b` can only process flat vectors.
x = preprocess_image(target_image_path)
x = x.flatten()
for i in range(iterations):
    print('Start of iteration', i)
    start_time = time.time()
    x, min_val, info = fmin_l_bfgs_b(evaluator.loss, x,
                                     fprime=evaluator.grads, maxfun=20)
    print('Current loss value:', min_val)
    # Save current generated image
    img = x.copy().reshape((img_height, img_width, 3))
    img = deprocess_image(img)
    fname = result_prefix + '_at_iteration_%d.png' % i
    keras.preprocessing.image.save_img(fname, img)
    end_time = time.time()
    print('Image saved as', fname)
    print('Iteration %d completed in %ds' % (i, end_time - start_time))

使用方式

在线Jupyter notebook代码运行

  • 修改上传图片路径(内容图像和参考风格图像路径)
  • 修改损失权重大小比例可实现对应的迁移强度(可选)
  • 保存迁移后的图片(可选)

需要注意的是这个算法速度较慢,RTX1650几百K数据也要半小时左右,建议电脑空闲时间运行,后续小伙伴们感兴趣推出更高效的算法

Tips: 我们可以通过花费大量的时间参考某一个固定风格图像批量生成许多输入 - 输出样例图像,并训练一个小型前馈卷积神经网络学习这种变换,就可以非常快速进行这种变换(秒级)

文章代码资源点击附件获取

标签:style,image,conv1,风格,复现,图像,迁移
From: https://blog.csdn.net/weixin_62765017/article/details/140919176

相关文章

  • VisualSVN Server的迁移
    VisualSVNServer迁移的情况 VisualSVNServer 迁移 涉及到两种情况:第一种情况:VisualSVNServer没有更换电脑或者服务器,只是修改Servername。第二种情况:当VisualSVNServer需要从一台电脑(或者服务器)迁移到另一台电脑(或者服务器)。 VisualSVNServer迁移的方法  Vi......
  • YOLOv9改进系列,YOLOv9引入SPDConv(新颖的卷积),用于低分辨率图像和小物体目标,实现大幅
    前言卷积神经网络在许多计算机视觉任务中取得了显著成功,例如图像分类和目标检测。然而,在图像分辨率较低或目标较小的更困难任务中,它们的性能会迅速下降。在本文中,指出这根源于现有CNN架构中一个常见但有缺陷的设计,即使用了步幅卷积和/或池化层,这导致了细粒度信息的丢失以......
  • 漏洞复现:Apache solr
    目录漏洞简述环境搭建漏洞复现漏洞检测漏洞修复漏洞简述ApacheSolr是一个开源的搜索服务,使用Java编写、运行在Servlet容器的一个独立的全文搜索服务器,是ApacheLucene项目的开源企业搜索平台。该漏洞是由于没有对输入的内容进行校验,攻击者可利用该漏洞在未授权的情......
  • 深度学习与图像识别(误差反向传播)
    误差反向传播法一 一个高效计算权重以及偏置量的梯度方法ReLU反向传播实现classRelu:def_init_(self):self.x=Nonedefforward(self,x):self.x=np.maximum(0,x)out=self.xreturnoutdefbackward(self,dout):dx=doutdx[self.x<=......
  • 三十种未授权访问漏洞复现 合集( 五 )
     未授权访问漏洞介绍        未授权访问可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷,导致其他用户可以直接访问,从而引发重要权限可被操作、数据库、网站目录等敏感信息泄露。---->目录遍历        目前主要存在未授权访问漏洞的有:NFS服务,Sa......
  • 复现opendrivelab的“点云预测”项目
    本文的主要工作就是复现下述论文中的算法。该论文全称:VisualPointCloudForecasting论文内容在此不做过多介绍,直接上项目。一、准备工作首先通读readme.md文件的内容,了解所需要的相关依赖和数据等内容。一定要多读几遍,不要扫一眼就过了。接下来就是部署环境,根据readme......
  • SourceCodester v1.0 SQL 注入漏洞(CVE-2023-2130)靶场复现
    SourceCodesterPurchaseOrderManagementSystemv1.0是一个实用的工具,适合希望优化采购流程的企业和组织靶场界面直接放sqlmap跑爆数据库爆数据表爆字段爆内容-用户名爆内容-密码sqlmap的md5碰撞sqlmap所有命令点击查看代码爆数据库pythonsqlmap.py-u......
  • Jorani远程命令执行漏洞 CVE-2023-26469靶场复现
    靶场界面点击查看exp↓↓↓"""vulnerabilitycoveredbyCVE-2023-26469"""importreadlineimportrequestsimportdatetimeimportsysimportreimportbase64importrandomimportstringrequests.packages.urllib3.disable_warnings(requ......
  • 易捷OA协同办公软件 ShowPic 任意文件读取漏洞复现
    0x01产品简介易捷OA协同办公软件是在“让管理更简单”和“实时协同”的理念的指导下,”本着“简约、实时、快捷、省钱”的产品定位,结合数千家客户的管理实践和当前最先进的IT技术开发出来的全新一代协同产品,在云计算、全文检索、手机应用、企业即时通讯等多方面取得突破性创新......
  • 【漏洞复现】LiveBOS UploadFile.do 任意文件上传漏洞(XVE-2023-21708)
    0x01产品简介LiveBOS(LiveBusinessObjectSystem)是顶点软件自主研发的以业务对象建模为核心的业务中间件及其集成开发工具,它通过业务模型建立直接完成软件开发的创新模式,支持各类基于WEB的专业应用软件与行业大型应用的开发。LiveBOS系统由三个相对独立的产品构成:运行支......