Stable Diffusion (持续更新)

引言

本文的目的为记录stable diffusion的风格迁移,采用diffusers example中的text_to_image和textual_inversion目录

2023.7.11

在这里插入图片描述 在这里插入图片描述
收集了6张水墨画风格的图片,采用textual_inversion进行训练,以"The street of Paris, in the style of "作为模板,第369轮的图片如下
在这里插入图片描述
第500轮的模型用于生成飞机,猫,狗
在这里插入图片描述 在这里插入图片描述
然而生成草莓,香蕉却无法生成,顶多是更改了背景
在这里插入图片描述
这让我怀疑模型并不能很好的学习到其中的风格

2023.7.12

在昨天注意到textual inversion只能迁移风格到一些模型已有的内容中,对于一些位置的物体无法进行风格迁移后,我将目光再次转向了LoRA,在参考了这篇文章之后,我开始着手训练,LoRA需要使用较多的图片,因此我将图片的数量增加到了20张,并且使用stable-diffusion-webui进行数据预处理,具体为将图片裁剪为512*512大小之后,使用danbooru提供图片的描述词,然后使用train_text_to_image_lora.py进行训练,我的设置如下,在之前的理解中,我认为random_flipcenter_crop数据增强应该对图像生成是没有用的,这篇文章中也是这么说的,但是我又想到数据量这么小,虽然可能没有提升,但是也不会更差,于是就加上吧,同时我将train_batch_size从计算机最大可以使用的6改为4,玄学认为4的倍数训练模型更加好

export MODEL_NAME="/home/zxa/ps/pretrain_models/stable-diffusion-v1-5/"
export DATASET_NAME="/home/zxa/ps/open_data/material_tags_copy/"

accelerate launch --mixed_precision="fp16" train_text_to_image_lora_my_version.py \
  --pretrained_model_name_or_path=$MODEL_NAME \
  --train_data_dir $DATASET_NAME --caption_column="text" \
  --random_flip --center_crop\
  --dataloader_num_workers=0 \
  --resolution=512 \
  --gradient_accumulation_steps=1 \
  --train_batch_size=4 \
  --max_grad_norm=1 \
  --checkpointing_steps=500 \
  --learning_rate=1e-04 --lr_scheduler="constant" --lr_warmup_steps=0 \
  --seed=42 \
  --output_dir="sd-model-lora-v1.5-ink" \
  --report_to="wandb" \
  --enable_xformers_memory_efficient_attention \
  --validation_prompt="strawberry" \
  --num_validation_image=4 \
  --validation_epochs=100 \
  --max_train_steps=15000 \

然而,我训练了1500轮的图片,却出现了我不想要的文字信息,甚至还出现了过拟合情况,即我想要生成草莓,却生成的不是草莓,如下
在这里插入图片描述 在这里插入图片描述
这让我意识到是我训练的数据存在错误了,于是我开始采用手动裁剪的方式,使用windows自带的照片软件中的裁剪功能,选择正方形,选择没有文字的地方裁剪出来,效果如下
在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述
出现过拟合的情况,很有可能是因为danbooru给出的图片描述词与图片根本不符,因此我删掉了danbooru的描述词,全部自己手写生成,例如A yellow tiger with its mouth open, standing on a mountainA man wearing a cap and coir raincoat with his mouth closed and holding a bowl,将图片和文字全部处理好之后,重新开始训练,训练效果如下
在这里插入图片描述 在这里插入图片描述
这是模型运行2000轮的效果
在这里插入图片描述 在这里插入图片描述
这是模型运行3000轮的效果,可见我们的猜想是正确的,模型在训练到过拟合后,也没有丢失文字信息,生成的都是和文字描述匹配的草莓的效果,但是3000轮已经过拟合了,图片开始失真了,因此2000轮已经是不错的选择了

2023.7.13

之前使用SAM进行了扣图,生成了一些盒子图片
在这里插入图片描述 在这里插入图片描述
采用自行设计标签的方式,设计了标签——A packaging design, box, standing, box cover painted with red pomegranate, pomegranate pulp, leaves, dew, Chinese textA packaging design, box, placed horizontally, box cover with pomegranate pictured, placed on a CD stand, music notes, Chinese text and English text,然而我发现,模型在3000轮以后就几乎严重的失真,过拟合了
在这里插入图片描述 在这里插入图片描述
这两张是1000轮的模型用同样的prompt进行生成的,算是较好的,但是图案扭曲,很不是美观,至于2000轮,3000轮的更差了就不展示了,我还发现了一个问题,那就是我对每一张图片的最后增加了chinese text and english text的tags,目的是让模型学习到文字信息,使得模型在之后在不写上文字tag的时候,可以不生成文字,然而事与愿违,可能是模型不知道如何填充文字空白区域,图案变得更加扭曲了
在这里插入图片描述 在这里插入图片描述
这让我开始思考是否要去除文字信息,为了验证是否是模型基底的问题,我采用CIVITAI中的revanimated模型进行训练,我发现模型的效果比SD1.5要明显的好,和SD1.5一样,revanimated也是在1000轮之后就开始失真了
在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述
这是800轮的结果,可以发现只有第一张还可以,后面的均有模糊和失真的感觉,这让我想到,又是我的数据集除了问题,由于包装盒子具有完整性的特征,如果将图片进行裁剪,则会出现缺边缺角的情况,因此我必须尽可能的去处理一些正方形或者长方形的图片,使得完整的盒子图片能够被保存下来。

按照正方形裁剪的方式,由于SAM扣的图已经不存在空白区域了,很难裁剪,因此我又从网上搜集了一波图,我发现有一些图很小,只有几kb,这种图一般质量也不好,因此我筛选了一下图片的大小,至少需要有60kb,裁剪后的图如下
在这里插入图片描述 在这里插入图片描述
在标注方面,我自认为一些重复的细节也是不必要的,例如石榴和石榴籽,我在一开始的时候标注了两个,现在我只保留了石榴,然后将中文文字这种tag也去掉了,标签为A packaging design, box, standing, box cover painted with red pomegranate, leaves, dewA packaging design, the box is placed horizontally, painted with red tomatoes, flying birds, leaves, yellow clouds,在训练了500轮之后,我得到了如下效果
在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述
可以看到500轮后,出的图效果还是比较清晰的,然而1000轮就开始失真了,之前的模型忘记测500轮的结果了,因此这个结果并不能说明采用正方形切割的方式就一定能够让模型生成的图更加清晰,但是至少不会收到因为图片resize变形的影响,同时训练的图片的大小应该也与生图图片的质量有关系,虽然1000轮的模型会失真,但是我们可以设置lora的weight为0.5,我们可以使用内置的函数调成scale,image = pipe(prompt, num_inference_steps=30, guidance_scale=7.5, cross_attention_kwargs={"scale": 0.5}).images[0],也可以使用这个代码,使用这个代码的原因是我们之后会想要同时使用两个lora的权重,同时作用于图片,生成的效果如下
在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述
有几个也还可以,但是没有500轮给的效果直观

2023.7.14

在训练lora水墨风的时候,我突然想到,是否将Ink style这个tag加上会更加的有明确性,于是我在所有的标注文本前加上了ink style,标注变成这样ink style, A man, looking up at the sky, sits, has a beard, carries a white bag, hangs a yellow gourd, wears a brown gown and white shorts, with his left hand on his thigh,加了指定风格词后,会覆盖模型原本的水墨风,不过生成效果更加直接
在这里插入图片描述 在这里插入图片描述
将盒子lora权重设置为0.5,水墨风lora设置权重为0.5,将guidence_scale设置为10,步数从25提升到50后,用prompt=an ink style painting, high quality,highly detailed, package box, box cover painted with a banana, packaging design可以生成这样的图像
在这里插入图片描述 在这里插入图片描述

这种图片生成出来的感觉很奇怪,似乎是水墨风,又似乎不是水墨风,因此我猜测是不是风格训练的图片太少了,于是我将20张图片提升到80张图片进行尝试,水墨风格的图片在这个网站获取,在训练过程中,我发现其实lora训练100-200个epochs就可以拟合了,再增加epochs只会使得模型过拟合,因此在后续的训练中,我会将训练步数换成训练epochs,改用100个epochs进行训练,每20个epochs生成一次验证图片。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/38033.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uniApp之同步资源失败,未得到同步资源的授权,请停止运行后重新运行,并注意手机上的授权提示、adb、shell、package、uninstall

文章目录 背景解决思路执行查找第三方应用的指令执行卸载指令 背景 一开始正常编译运行,由于应用页面有些许奇怪的错误,便想着卸载,重新运行安装调试基座。卸载后,运行还是会出现,明明已经把应用卸载了,还是…

基于深度学习的高精度Caltech行人检测系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度Caltech数据集行人检测识别系统可用于日常生活中或野外来检测与定位行人目标,利用深度学习算法可实现图片、视频、摄像头等方式的行人目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv…

HTTP、HTTPS协议详解

文章目录 HTTP是什么报文结构请求头部响应头部 工作原理用户点击一个URL链接后,浏览器和web服务器会执行什么http的版本持久连接和非持久连接无状态与有状态Cookie和Sessionhttp方法:get和post的区别 状态码 HTTPS是什么ssl如何搞到证书nginx中的部署 加…

什么是人工智能大模型?

目录 1. 人工智能大模型的概述:2. 典型的人工智能大模型:3. 人工智能大模型的应用领域:4. 人工智能大模型的挑战与未来:5. 人工智能大模型的开发和应用:6. 人工智能大模型的学习资源: 人工智能大模型是指具…

计数排序

计数排序 排序步骤 1、以最大值和最小值的差值加一为长度创建一个新数组 2、将索引为0对应最小值,索引为1对应最小值1,索引为2对应最小值2,以此类推,将索引对应最小值到最大值之间所有的值 3、遍历一遍,遇到一个数字…

MyBatis学习笔记之首次开发及文件配置

文章目录 MyBatis概述框架特点 有关resources目录开发步骤从XML中构建SqlSessionFactoryMyBatis中有两个主要的配置文件编写MyBatis程序关于第一个程序的小细节MyBatis的事务管理机制JDBCMANAGED 编写一个较为完整的mybatisjunit测试mybatis集成日志组件 MyBatis概述 框架 在…

Excel VLOOKUP使用详解

VLOOKUP语法格式: VLOOKUP(lookup_value,table_array,col_index_num,range_lookup) VLOOKUP(要查找的值,查找区域,要返回的结果在查找区域的第几列,精确匹配或近似匹配) 一、精确查找 根据姓名查找对应…

FPGA Verilog移位寄存器应用:边沿检测、信号同步、毛刺滤波

文章目录 1. 端口定义2. 边沿检测3. 信号同步4. 信号滤波5. 源码6. 总结 输入信号的边沿检测、打拍同步、毛刺滤波处理,是FPGA开发的基础知识,本文介绍基于移位寄存器的方式,实现以上全部功能:上升沿、下降沿、双边沿检测、输入信…

个人使用:Windows下 OpenCV 的下载安装(2021.12.4详细)

一、下载OpenCV   到OpenCV官网Release(发布)板块下载OpenCV-4.5.4 Windows。 下载后是这样的 然后双击他,解压,就是大佬们说的安装,实质就是解压一下,解压完出来一个文件夹,其他什么也没发生。你把这个文件夹放在哪…

STM32(HAL库)驱动SHT30温湿度传感器通过串口进行打印

目录 1、简介 2、CubeMX初始化配置 2.1 基础配置 2.1.1 SYS配置 2.1.2 RCC配置 2.2 软件IIC引脚配置 2.3 串口外设配置 2.4 项目生成 3、KEIL端程序整合 3.1 串口重映射 3.2 SHT30驱动添加 3.3 主函数代 3.4 效果展示 1、简介 本文通过STM32F103C8T6单片机通过HAL库…

uniapp uni实人认证

uni实人认证依赖 目前仅支持App平台。 h5端活体人脸检测,使用的是百度云的h5人脸实名认证 使用要求 1、app端 在使用前,请确保您已注册DCloud账号,并已完成实名认证。 然后需要按文档开通服务 业务开通 | uni-app官网 2、h5端 在使用前…

STM32 ws2812b 最快点灯cubemx

文章目录 前言一、cubemx配置二、代码1.ws2812b.c/ws2812b.h2.主函数 前言 吐槽 想用stm32控制一下ws2812b的灯珠,结果发下没有一个好用的。 emmm!!! 自己来吧!!!! 本篇基本不讲原理…

Unity DOTS如何优雅地实现ECS框架下的定时器Timer系统(无对象池,零GC)

实现定时器并不复杂,就是写个类存放回调,再写个类来统一管理这些回调类。但是ECS写代码的方式变了,所以还是有些区别的。 实现过程中需要注意的几点: 1、由于IComponentData不能存放managed类型的数据,所以无法用常规…

C#使用DataGridView模拟绘图

接到一个需求,绘制一个水管线的图片,这种管线可以有12种分段方法,最后将这12种分段方法合并后在一条水管线上展示,要求: ⒈支持分段的属性展示; ⒉要求每个分段都能清晰展示,分段数在0&#xff…

从CPU缓存结构到原子操作

文章目录 一、CPU缓存结构1.1 CPU的多级缓存1.2 Cache Line 二、写回策略三、缓存一致性问题及解决方案3.1 缓存一致性问题3.2 解决方案3.2.1 总线嗅探3.2.2 事务的串行化3.2.3 MESI 四、原子操作4.1 什么是原子操作4.2 c 标准库的原子类型4.2.1 atomic<T\>4.2.2 is_lock…

Python(四):Pycharm的安装配置

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

【基于FPGA的芯片设计】32位RISC-V存储器

实验板卡&#xff1a;xc7a100tlc sg324-2L&#xff0c;共20个开关 实验要求

RabbitMQ常用工作模式+整合springboot

目录 1.MQ的相关概念 1.1 什么是MQ消息中间件 1.2 为什么使用MQ (1) 应用解耦 (2) 异步提速 (3)削峰填谷 1.3 使用MQ的劣势 1.4 常见的MQ组件​​​​​​​ 2. RabbitMQ的概述 2.1 RabbitMQ的概念 2.2 RabbitMQ的原理 2.3 安装RabbitMQ 3. RabbitMQ 的工作模式…

【NLP】Word2Vec原理和认识

一、介绍 Word2Vec是NLP领域的最新突破。Tomas Mikolov是捷克计算机科学家&#xff0c;目前是CIIRC&#xff08;捷克信息学&#xff0c;机器人和控制论研究所&#xff09;的研究员&#xff0c;是word2vec研究和实施的主要贡献者之一。词嵌入是解决NLP中许多问题不可或缺的一部分…

基于B/S架构SaaS服务的实验室信息系统(LIS)

实验室信息系统LIS源码 实验室信息系统&#xff08;Laboratory Information System&#xff09;&#xff0c;简称LIS&#xff0c;是一个全面基于网络化应用&#xff0c;能够帮助用户按照规范内容和规范流程进行多角色、多层次检验信息及资源管理的系统。通过条码管理系统从HIS…