人工智能AI图像风格迁移(StyleTransfer),基于双层ControlNet(Python3.10)

图像风格迁移(Style Transfer)是一种计算机视觉技术,旨在将一幅图像的风格应用到另一幅图像上,从而生成一幅新图像,该新图像结合了两幅原始图像的特点,目的是达到一种风格化叠加的效果,本次我们使用Stable-Diffusion结合ControlNet来实现图像风格迁移效果。

安装ControlNet插件

首先确保本地已经安装并且配置好了Stable-Diffusion-Webui服务,关于Stable-Diffusion-Webui,请参见:人工智能,丹青圣手,全平台(原生/Docker)构建Stable-Diffusion-Webui的AI绘画库教程(Python3.10/Pytorch1.13.0),这里不再赘述。

随后进入项目目录,启动Stable-Diffusion-Webui服务:

python3 launch.py

如果是没有N卡的电脑,就使用cpu模式启动:

python3 launch.py --skip-torch-cuda-test --upcast-sampling --use-cpu interrogate

接着访问 http://localhost:7860

选择插件(Extensions)选项卡

点击从url安装,输入插件地址:github.com/Mikubill/sd-webui-controlnet.git

安装成功后,重启WebUI界面。

人工智能AI图像风格迁移(StyleTransfer),基于双层ControlNet(Python3.10)

由于ControlNet默认是一层网络,风格化操作我们需要两层,所以在设置选单(Settings)中,将多层网络设置为2。

人工智能AI图像风格迁移(StyleTransfer),基于双层ControlNet(Python3.10)

设置好之后,下载模型文件:huggingface.co/webui/ControlNet-modules-safetensors/tree/main

将模型放入 stable-diffusion-webui/extensions/sd-webui-controlnet/models目录

这里还需要单独下载一个风格迁移模型,地址是:huggingface.co/TencentARC/T2I-Adapter/blob/main/models/t2iadapter_style_sd14v1.pth

同样放入stable-diffusion-webui/extensions/sd-webui-controlnet/models目录

至此,Stable-Diffusion-Webui服务的ControlNet插件就配置好了。

风格迁移

现在,我们打开ControlNet的第一个图层,将原始图像的轮廓渲染出来,因为需要保证原始图像的基本形状。

人工智能AI图像风格迁移(StyleTransfer),基于双层ControlNet(Python3.10)

这里预处理器选择head,模型使用ControlNet的head模型即可。

可以看到基本轮廓已经得到了保留,风格化只负责颜色和线条。

随后配置第二个ControlNet图层,预处理器选择t2ia_style-clipvison,模型选择刚刚下载的t2iadapter_style_sd14v1.pth,默认图像权重为1,先不要动。

接着上传一张目标风格的图片,这里我们选择文森特梵高的表现主义作品《星空》:

人工智能AI图像风格迁移(StyleTransfer),基于双层ControlNet(Python3.10)

随后点击Generate按钮做图生图(img2img)操作即可。

过拟合问题(Overfitting)

经过一段时间的本地推理,生成结果如下:

人工智能AI图像风格迁移(StyleTransfer),基于双层ControlNet(Python3.10)

效果并不尽如人意,这也是大多数深度学习入门者会遇到的问题,也就是过拟合问题。

过拟合(Overfitting)是指在训练模型时,模型过度地学习了训练数据的特征和噪声,从而导致模型在新数据上表现不佳的问题。

通俗地讲,过拟合就像是一名学生背诵考试答案,但是他只是死记硬背了考试题目的答案,没有真正理解题目的本质和解题思路。当他遇到新的考试题目时,由于没有理解题目的本质和解题思路,他就无法正确回答。

在机器学习中,过拟合的原因是模型复杂度过高,导致模型对训练数据中的噪声和特征都过度追求,并且忽略了数据背后的本质规律和特征。因此,当模型面对新的数据时,由于没有真正理解数据的本质规律和特征,它就无法正确地对新数据进行预测。

说白了,就是对于原始图的特征过分追求,从而淡化了目标图的风格,还记得ControlNet默认权重是1吗?这里我们只需要将权重往下调整,比如调成0.8,再次尝试生成:

人工智能AI图像风格迁移(StyleTransfer),基于双层ControlNet(Python3.10)

效果不错,既保留了原始图的大部分细节,又增加了梵高的表现主义风格。

当然了,权重也不能一味地往下调整,否则也会出现欠拟合(Underfitting)问题,整个风格化迁移的过程也可以理解为是一种“调参”的过程。

结语

通过Stable-Diffusion结合ControlNet插件,我们可以得到一幅新的图像,该图像结合了两幅原始图像的特点,既具有内容图像的内容,又具有风格图像的风格。图像风格迁移也可以应用于其他的领域,比如电影、游戏、虚拟现实和动画创作等等。

原文链接:https://www.cnblogs.com/v3ucn/p/17339075.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:人工智能AI图像风格迁移(StyleTransfer),基于双层ControlNet(Python3.10) - Python技术站

(0)
上一篇 2023年4月22日
下一篇 2023年4月22日

相关文章

  • 树莓派+miniconda3+opencv3.3+tensorflow1.7踩坑总结

    树莓派+miniconda3+opencv3.3+tensorflow1.7踩坑总结 2018-04-20 23:52:37 Holy_C 阅读数 4691更多 分类专栏: 环境搭建   版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/tju_cc…

    tensorflow 2023年4月7日
    00
  • caffe 安装方法和记录

    1: 环境配置。I7-6700,显卡微星1060-3G,8G内存 centos7 虚拟机。 2: 依赖包:atlas3.10.3.tar.bz2  gflags-master.zip glog-0.3.3.tar.gz hdf5-1.8.18.tar.gz leveldb-master.zip lmdb-mdb.master.zip cmake-3.6.3,…

    Caffe 2023年4月8日
    00
  • 卷积神经网络(四)人脸识别和风格转换

    人脸识别 1、One-shot learning(一次学习): 仅仅通过一张图片来完成人脸识别,即只能通过一个样本来学习. similarity函数: d(img1,img2) = degree of difference between images 识别任务(verification): if d(img1,img2) ≤ τ:“same”; else:…

    2023年4月8日
    00
  • 超简单!pytorch入门教程(二):Autograd

    一、autograd自动微分 autograd是专门为了BP算法设计的,所以这autograd只对输出值为标量的有用,因为损失函数的输出是一个标量。如果y是一个向量,那么backward()函数就会失效。不知道BP算法是什么的同学,估计也不知道什么是深度学习,建议先看Zen君提供的教材。 二、autograd的内部机理 variable是tensor的外包装…

    PyTorch 2023年4月6日
    00
  • OpenCV基础(一)—图像卷积运算

    矩阵的掩模操作,通常也叫做卷积操作,原理非常简单,这里不再赘述。 下面通过OpenCV进行图像卷积操作(最后效果是:增强图像)。 基于掩模矩阵操作: 首先介绍下,用到的函数filter2D(). 函数功能:Convolves an image with the kernel. 函数原型: void filter2D( InputArray src, Outp…

    2023年4月6日
    00
  • 机器学习实战读书笔记(五)Logistic回归

    Logistic回归的一般过程 1.收集数据:采用任意方法收集 2.准备数据:由于需要进行距离计算,因此要求数据类型为数值型。另外,结构化数据格式则最佳 3.分析数据:采用任意方法对数据进行分析 4.训练算法:大部分时间将用于训练,训练的目的是为了找到最佳的分类回归系数 5.测试算法:一旦训练步骤完成,分类将会很快。 6.使用算法:首 先,我们需要输入一些数…

    机器学习 2023年4月12日
    00
  • Keras高层API之Metrics

    在tf.keras中,metrics其实就是起到了一个测量表的作用,即测量损失或者模型精度的变化。metrics的使用分为以下四步: step1:Build a meter acc_meter = metrics.Accuracy() loss_meter = metrics.Mean() step2:Update data loss_meter.updat…

    2023年4月8日
    00
  • Java语言在Spark3.2.4集群中使用Spark MLlib库完成朴素贝叶斯分类器

    一、贝叶斯定理 贝叶斯定理是关于随机事件A和B的条件概率,生活中,我们可能很容易知道P(A|B),但是我需要求解P(B|A),学习了贝叶斯定理,就可以解决这类问题,计算公式如下:     P(A)是A的先验概率 P(B)是B的先验概率 P(A|B)是A的后验概率(已经知道B发生过了) P(B|A)是B的后验概率(已经知道A发生过了) 二、朴素贝叶斯分类 朴素…

    机器学习 2023年4月13日
    00
合作推广
合作推广
分享本页
返回顶部