基于云服务器使用DreamBooth训练主体

news2024/11/19 18:23:01

资源整理

参考教程:StableDiffusion/NAI DreamBooth自训练全教程 - 知乎 (zhihu.com)

云服务器平台:AutoDL算力云 | 弹性、好用、省钱。租GPU就上AutoDL

镜像链接:CrazyBoyM/dreambooth-for-diffusion/dreambooth-for-diffusion、

代码仓库:CrazyBoyM/dreambooth-for-diffusion: AIGC模型训练工具箱 (完整封装、一体化训练stable diffusion, 可训练定制自己的独特大模型风格、人物,开箱即用,内含详细教程)


话不多说,结合我看的教程,对我自己的训练过程进行一个具体的记录。

环境搭建

根据我之前的文章《云服务器平台AutoDL--基本介绍与使用感受-CSDN博客》,无需自己搭建环境,直接在AutoDL平台选择一个3090机器拉取镜像,镜像链接(其中包含如何使用的视频教程)如下:CrazyBoyM/dreambooth-for-diffusion/dreambooth-for-diffusion: 首个完整封装、一体化训练stable diffusion dreambooth的镜像环境,可训练定制自己的独特大模型风格、人物,开箱即用,内含详细教程。 - CG (codewithgpu.com)

创建的实例如下:

(因为我训练了几次,每次的参数、训练内容都不太一样,为了保留过程,我分开在多个机器上进行了训练,所以有好几个实例)

其中每个服务器实例的具体配置如下:

图中的实例根据需求对数据盘进行了150GB的扩容

在上述镜像中,已经直接将所有需要使用的命令写在了文件夹下的“运行.ipynb”文件中。

一些基本的操作(文件夹位置的移动、工作路径的切换...)在这个.ipynb文件中已经描述的很清楚了,本文不再赘述。

根据教程所述,在拉取的镜像中已经包含了两个官方提供的模型,如下图所示。

其中,nd_lastest.ckpt用于二次元图像训练,v1-5-pruned.ckpt用于三次元图像(偏写实风格)训练。

虽然但是,在我拉取的镜像中并没有用于三次元训练的模型文件,然后我又去hugging face上进行了下载和上传。

下载地址:runwayml/stable-diffusion-v1-5 at main (huggingface.co)

这个写实风格的模型文件因为参数比较丰富,因此较大,一共有7.7G,上传起来比较缓慢。

hugging face似乎是有着大用处的,以后有时间一定好好研究一下!

基于此,我分别进行了二次元图像和三次元图像的训练,接下来分别进行讲解。

二次元图像训练

数据集准备

互联网图像搜集,这里就使用了比较可爱的海绵宝宝形象。

使用镜像中提供的程序将图像剪裁成512*512的大小。

模型文件转换

转换ckpt检查点文件为diffusers官方权重,转换二次元风格模型:

!python tools/ckpt2diffusers.py \
    --checkpoint_path=./ckpt_models/nd_lastest.ckpt \
    --dump_path=./model \
    --vae_path=./ckpt_models/animevae.pt \
    --original_config_file=./ckpt_models/model.yaml \
    --scheduler_type="ddim"

运行效果如下图所示。

训练过程

二次元图像在开始训练前需要给图片加上描述,具体过程参考.ipynb文件。

修改train_object.sh文件中的相关设置,修改的部分如下图所示。

然后运行该文件。

!sh train_object.sh

中间过程命令行输出如下图所示。

训练到最后的命令行输出如图所示。从图中可以看出训练2000步只需要20min不到的时间,并且最终的训练用时18:42和一开始预估的17:37来去不大。

图像生成

修改test_model.py文件,主要将调用路径改为训练好的模型,然后结合实际生成效果,调整提示词、生成步数、每次生成的张数。

运行test_model.py

!python test_model.py

几个生成的结果如图所示。

Prompt: a photo of spongebob_squarePants, dark background, look ahead

Prompt: a photo of spongebob_squarePants, white background, sad

三次元图像训练

数据集准备

我在网上又搜集了霉霉的图片,然后准备代入模型训练。

还是通过tools/handle_images.py将搜集到的图像裁剪成512*512的大小。这里我没有再另外将图像下载到本地进行显示。

模型文件转换

这次转换的是v1-5-pruned.ckpt模型文件。

!python tools/ckpt2diffusers.py \
    --checkpoint_path=./ckpt_models/v1-5-pruned.ckpt \
    --dump_path=./model \
    --original_config_file=./ckpt_models/model.yaml \
    --scheduler_type="ddim"

训练过程

修改模型的输入输出文件夹,修改相关的prompt,这次我将训练的总步数设置为10000步,每1000步进行一次模型保存,具体的训练过程如下:

图片多了之后这里的预生成似乎也慢了很多。

 从图中可以看出10000步的训练时间大概在1.5h左右。

这里需要注意的是,如果中间过程保存的模型较多(比如500步保存一次)可能会使免费的50GB数据盘跑爆,请根据实际需求进行扩容或调整模型保存的间隔步数。

另一个需要注意的问题是,扩容之后我虽然没有跑爆数据盘,但是我确实没有拿到第10000步的训练模型,训练过程中我离开了,等我离开足够长的时间再回来,发现.ipynb中运行的cell卡住了,没有报错也没有再继续输出了,查看模型文件夹,也是空的,但是第9000步的训练模型确实是完成了,时间有限,我也没再跑了。

图像生成

这里的prompt在开头都是与训练时相同的a photo of <taylor> person,后面跟的提示词分别是in white/pink/blue dress,设置的生成步数为30,最终生成的图像如下:

这是每次生成三张,生成几次之后挑选出来的比较好的结果。这里使用的模型基本是第2000/3000步训练时保存的模型。

说句题外话:从PPT复制时同时选中三张图片,粘贴过来就自动合成了一张,布局与PPT中一致,以后可以用于并列放图。

至此我的所有复现过程全部讲解完毕。

反思

最终训练后的模型生成图像的效果不是太好,经过分析后可能的原因如下:

1. 训练步数过长可能过拟合,过短可能学习不充分;

最终展示的结果并没有使用最终的训练模型,使用9000步存下来的模型效果也就那样,对比2000/3000步出来的结果并没有明显的优越性,训练时长上去了GPU还要花更多的钱。

2. 训练输入图像3-5张就够了;

训练效果的好坏似乎与输入图像的张数多少没有直接关系。

3. 训练时的相关参数未调试。

由于我并不研究图像方面,对于相关参数调整会带来的效果并不清楚,时间有限,也没有进行深入研究。

其他的资源

有机会可以再看下(其实我也不懂为什么他训练出来的效果就这么好呜呜呜)。

runwayml/stable-diffusion: Latent Text-to-Image Diffusion (github.com)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Python操作Git

大家好&#xff0c;当谈及版本控制系统时&#xff0c;Git是最为广泛使用的一种&#xff0c;而Python作为一门多用途的编程语言&#xff0c;在处理Git仓库时也展现了其强大的能力。通过Python&#xff0c;我们可以轻松地与Git仓库进行交互&#xff0c;执行各种操作&#xff0c;从…

为参数设置默认值

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 调用函数时&#xff0c;如果没有指定某个参数将抛出异常&#xff0c;为了解决这个问题&#xff0c;我们可以为参数设置默认值&#xff0c;即在定义函…

Blueprints - Collision Presets相关

一些以前的学习笔记归档&#xff1b; 在Static Mesh或SkeletalMesh等的属性中&#xff0c;都有Collision Presets&#xff1a; 其中Oject Type只是一个枚举参数&#xff0c;代表设置该Actor为什么类型&#xff0c;Collision Responses代表该Actor对各种类型的Actor有什么反应&a…

MYSQL四大操作——查!查!查!

目录 简洁版&#xff1a; 详解版&#xff1a; SQL通用语法&#xff1a; 分类&#xff1a; 1. DDL —库 1.1 查询&#xff1a; 1.2 创建&#xff1a; 1.3 删除 1.4 使用库 2. DDL—表 2.1 查询 2.1.1 查询当前库的所有表&#xff1a; 2.1.2 查询表结构 &#xff1a; 2.1.…

408数据结构-图的存储与基本操作 自学知识点整理

前置知识&#xff1a;图的基本概念 图的存储必须完整、准确地反映顶点集和边集的信息。根据不同图的结构和算法&#xff0c;采用不同的存储方式将对程序的效率产生相当大的影响&#xff0c;因此选取的存储结构应适合于待求解的问题。 图的存储 邻接矩阵法 所谓邻接矩阵存储&a…

Perplexity 搜索引擎刚刚推出了新的页面功能——维基百科可以扔了

Perplexity 允许用户根据搜索结果创建自定义页面 人工智能搜索引擎初创公司 Perplexity 推出了一项新功能&#xff0c;使其结果更具粘性&#xff0c;允许用户将研究转变为易于共享的页面。页面建立在 Perplexity 中现有的人工智能驱动的搜索功能之上&#xff0c;该功能使用与 …

javascript DOM 设置样式

No.内容链接1Openlayers 【入门教程】 - 【源代码示例300】 2Leaflet 【入门教程】 - 【源代码图文示例 150】 3Cesium 【入门教程】 - 【源代码图文示例200】 4MapboxGL【入门教程】 - 【源代码图文示例150】 5前端就业宝典 【面试题详细答案 1000】 文章目录 一、直接…

Mac vm虚拟机激活版:VMware Fusion Pro for Mac支持Monterey 1

相信之前使用过Win版系统的朋友们对这款VMware Fusion Pro for Mac应该都不会陌生&#xff0c;这款软件以其强大的功能和适配能力广受用户的好评&#xff0c;在Mac端也同样是一款最受用户欢迎之一的虚拟机软件&#xff0c;VM虚拟机mac版可以让您能够轻松的在Apple的macOS和Mac的…

单片机原理及应用复习

单片机原理及应用 第二章 在AT89S52单片机中&#xff0c;如果采用6MHz晶振&#xff0c;一个机器周期为 2us 。 时钟周期Tocs1focs 机器周期 Tcy12focs 指令周期&#xff1a;一条指令所用的时间&#xff0c;单字和双字节指令一般为单机器周期和双机器周期。 AT89S5…

代码审计(工具Fortify 、Seay审计系统安装及漏洞验证)

源代码审计 代码安全测试简介 代码安全测试是从安全的角度对代码进行的安全测试评估。&#xff08;白盒测试&#xff1b;可看到源代码&#xff09; 结合丰富的安全知识、编程经验、测试技术&#xff0c;利用静态分析和人工审核的方法寻找代码在架构和编码上的安全缺陷&#xf…

EitbaseEX香港业务开展,提升用户友好交易体验

在全球范围内备受瞩目的加密货币交易平台Coinbase&#xff0c;宣布正式入驻香港市场&#xff0c;并命名为EitbaseEX。这一战略性扩展举措&#xff0c;旨在为香港提供先进的加密货币交易技术和服务&#xff0c;同时将香港打造为其在亚太地区的重要枢纽。 作为国际金融中心&#…

算法(一)递归

文章目录 递归的概念递归三要素递归demo打印100次“hello word”斐波那契数列 递归的概念 递归算法是一种直接或者间接调用自身函数或者方法的算法。 递归三要素 递归条件结束 因为递归是循环调用自身&#xff0c;因此就必须要有结束条件&#xff0c;或者就会OOM。 函数的功…

2.8Flowmap的实现

一、Flowmap 是什么 半条命2中水的流动 求生之路2中的水的流动 这种方式原理简单&#xff0c;容易实现&#xff0c;运算量少&#xff0c;如今也还在使用 1.flowmap的实质 Flow map(流向图) &#xff0c;一张记录了2D向量信息的纹理&#xff0c;Flow map上的颜色(通常为RG通道…

Ubuntu部署kafka集群

Apache Kafka (KRaft 集群) Apache Kafka 是一个基于 TCP 的分布式流处理平台&#xff0c;提供高吞吐量、低延迟的消息传递和处理能力&#xff0c;用于构建实时数据管道和流应用程序。其底层通信依赖于 TCP Socket&#xff0c;但 Kafka 封装了许多高级特性&#xff0c;使其更加…

Python使用动态代理的多元应用

Python作为一种功能强大且易于学习的编程语言&#xff0c;在网络编程领域具有广泛的应用。当Python与动态代理技术结合时&#xff0c;便开启了一扇通往更多可能性的大门。以下将深入探讨Python使用动态代理可以实现的多种应用。 首先&#xff0c;Python结合动态代理在网络爬虫…

ETLCloud中如何使用Kettle组件

ETLCloud中如何使用Kettle组件在当今数据驱动的时代&#xff0c;数据处理和分析已成为企业决策的关键。为了更高效地处理海量数据&#xff0c;ETL&#xff08;Extract, Transform, Load&#xff09;工具变得至关重要。而在众多ETL工具中&#xff0c;Kettle作为一款开源、灵活且…

学习笔记——网络参考模型——TCP/IP模型

二、TCP/IP模型 TCP/IP模型(TCP/IP协议栈)&#xff1a;很多个互联网协议的集合&#xff0c;其中以TCP和IP为主&#xff0c;将这些协议的集合称为TCP/IP协议栈。目前使用最多的协议模型。 因为OSI协议栈比较复杂&#xff0c;且TCP和IP两大协议在业界被广泛使用&#xff0c;所以…

C++候捷stl-视频笔记2

深度搜索list list是双向链表&#xff1a;底部实现是环状双向链表 list内部除了存data之外&#xff0c;还要存一个前向指针prev和一个后向指针next list的iterator&#xff0c;当迭代器的时候&#xff0c;是从一个节点走到下一个节点&#xff0c;是通过访问next指针实现的 主要…

arcgis api for javascript点击获取要素错乱的问题

今天帮同事看了一个前端地图点击的问题&#xff1a;点击时总会获取到周边的图元&#xff0c;即使我点击线的周围&#xff0c;也是能获取到的&#xff0c;除非离得特别远。 地图组件用的是arcgis api, 图层类是grahicslayer,要素类型是线。这是添加图元的代码&#xff1a; grap…

AIGC商业案例实操课,发觉其创造和商业的无限可能,Ai技术在行业应用新的商机

课程下载&#xff1a;https://download.csdn.net/download/m0_66047725/89307523 更多资源下载&#xff1a;关注我。 课程内容 1 AI为什么火 。写在课程前面的寄语 。AIGC标志性事件:太空歌剧院 。AI人工智能为什么这么火 &#xff0c;AI人工智能发展历程 。聊天AI会取…