本地部署训练、测试controlnet的完整过程(包括报错和代码)

news2024/9/21 10:38:33

文章目录

  • 参考内容
  • 一、训练流程
    • 下载相关文件
      • ① 需要下载的权重文件
      • ② 下载数据集
  • 二、训练代码
    • 两种训练方式:
      • ①采用.sh文件
      • ②常规的训练
    • 测试代码
    • 生成的结果
  • 四、报错
    • NVIDIA的驱动太老需要更新
    • 生成出全黑图

参考内容

diffusers库提供的官方训练代码
利用到的fill50k数据集

一、训练流程

下载相关文件

① 需要下载的权重文件

因为这里是是基于SD1.5进行训练的,所以我们需要先去huggingface的官方库当中下载SD1.5模型的权重文件:
huggingface提供的SD1.5的权重
注意下载文件时,文件的命名需要与huggingface上的保持一致,很多时候他会自动增加一个前缀

需要下载的内容如下
每个文件里面的json文件,
在这里插入图片描述
而对于权重文件,我们统一下载bin结尾的文件
在这里插入图片描述

② 下载数据集

利用到的fill50k数据集
需要下载数据集
在这里插入图片描述

然后把其中的zip文件解压
然后打开fill50k.py文件,将其中的路径参照如下的,换为你自己的文件名称

在这里插入图片描述
就是将这里的三个路径进行修改

 metadata_path = "/media/dell/DATA/fill50k/train.jsonl"
 images_dir = "/media/dell/DATA/fill50k/"
 conditioning_images_dir = "/media/dell/DATA/fill50k/"

二、训练代码

两种训练方式:

①采用.sh文件

新建一个run.sh文件,然后把我们的参数放进去

python train_controlnet.py \
 --pretrained_model_name_or_path="/media/dell/DATA/models/stable-diffusion-v1-5" \
 --output_dir="outputs" \
 --dataset_name="/media/dell/DATA/fill50k"\
 --resolution=512 \
 --learning_rate=1e-5 \
 --validation_image "./conditioning_image_1.png" "./conditioning_image_2.png" \
 --validation_prompt "red circle with blue background" "cyan circle with brown floral background" \
 --train_batch_size=4 \
 --num_train_epochs=10 \
 --checkpointing_steps=6000

终端授予run.sh文件权限

chmod 777 run.sh

终端输以下命令,即可进行训练,

bash run.sh 

这种训练方式在于可以很好的修改参数,但是不好调试

②常规的训练

在配置中配置参数
在这里插入图片描述
在这里插入图片描述
配置好后run即可,这种方式就是常规的训练方式,可以使用debug模式进行训练

环境配置没什么问题基本就可以开始训练了,如果报错大概率就是包没装,报错没装哪个包就装那个包就OK
在这里插入图片描述

#三、 测试

测试代码

from diffusers import StableDiffusionControlNetPipeline, ControlNetModel, UniPCMultistepScheduler
from diffusers.utils import load_image
import torch

base_model_path = "/media/dell/DATA/models/stable-diffusion-v1-5"
controlnet_path = "/media/dell/DATA/diffusers-main/examples/controlnet/outputs/checkpoint-6000/controlnet"

controlnet = ControlNetModel.from_pretrained(controlnet_path)
pipe = StableDiffusionControlNetPipeline.from_pretrained(
    base_model_path, controlnet=controlnet,
)
#controlnet = ControlNetModel.load_from_checkpoint(controlnet_path)


# speed up diffusion process with faster scheduler and memory optimization
pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config)
# remove following line if xformers is not installed or when using Torch 2.0.
#pipe.enable_xformers_memory_efficient_attention()
# memory optimization.
#pipe.enable_model_cpu_offload()

#记得加入这一行
pipe.safety_checker = lambda images, clip_input: (images, None)
#不然会报错


control_image = load_image("./conditioning_image_2.png")
prompt = "pale golden rod circle with old lace background"
pipe.to("cuda")
# generate image
generator = torch.manual_seed(0)
image = pipe(
    prompt, num_inference_steps=40, generator=generator, image=control_image
).images[0]
image.save("./output.png")

生成的结果

文本条件:silver circle with powder blue background

控制的条件图像
在这里插入图片描述
利用训练了6000step的权重,生成的结果图像
在这里插入图片描述

可以看到生成的效果并不好,需要调整学习率和增加训练的步数

四、报错

NVIDIA的驱动太老需要更新

RuntimeError: The NVIDIA driver on your system is too old (found version 11040). Please update your GPU driver by downloading and installing a new version from

这里在python终端看了一下

#python环境下
import torch
print(torch.__version__)

在这里插入图片描述

发现自己的pytorch的版本是2.4.0的,对应的cuda版本要为12.1,太高级了,这里还是选择2.4.0的pytorch,但是cuda版本选择c为11.8的就不会报错了,

torch-2.4.0+cu118-cp38-cp38-linux_x86_64

注意这里不能把pytorch换成2.0.1。因为这里换了之后,后面xformers的相关包会一致报错,因为其要求pytorch的版本要为2.4.0。

然后最后就可以跑通了

生成出全黑图

报错:Potential NSFW content was detected in one or more images. A black image will be returned instead. Try again with a different prompt and/or seed.

** 在代码中加入这个就可以了(我是加入这个就OK了)**
这个不能放在图片生成后,要放在图片生成代码的前面

pipe.safety_checker = lambda images, clip_input: (images, None)

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

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

相关文章

Vue(六) render函数、Vue.config.js配置文件,ref属性,props配置项、mixin混入、插件、scoped

文章目录 一、render函数二、Vue.config.js配置文件三. ref属性四. props配置项五. mixin混入1. 局部混入2. 全局混入 六. 插件七. scoped 一、render函数 在main.js文件中,采用了render函数。 import App from ./App.vuenew Vue({// 这句代码的意思是将App组件放…

Springboot整合J2cache实现声明式缓存方案

Springboot整合J2Cache 一、J2Caceh多级缓存 ​ J2Cache 是 OSChina 目前正在使用的两级缓存框架(要求至少 Java 8)。 ​ 第一级缓存使用内存(同时支持 Ehcache 2.x、Ehcache 3.x 和 Caffeine),第二级缓存使用 Redis(推荐)/Memcached 。 L…

【生日视频制作】红色跑车法拉利提车交车仪式感广告展示牌AE模板修改文字软件生成器教程特效素材【AE模板】

生日视频制作教程红色跑车法拉利提车交车仪式感广告展示牌AE模板修改文字特效广软件告生成神器素材祝福玩法AE模板工程 怎么如何做的【生日视频制作】红色跑车法拉利提车交车仪式感广告展示牌AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤: 安…

Java小项目IDEA怎么打成jar包

使用IDEA打jar包 在file选项中找 打开jar包所在位置: 将jar包拿出来 直接点击jar包就可以运行

golang关于slice map函数传参的小问题

问题 函数传参了一个slice,在函数内触发了对长度的修改(添加或删除),但是未影响函数外的实参由此产生了另一个问题,我们用map在函数内修改会不会有影响不到实参的情况? 结论 map作为函数参数时是引用传递…

go语言并发编程-超详细mutex解析

文章目录 1 go语言并发编程学习-mutex1.1 学习过程1.2 如何解决资源并发访问的问题?【基本用法】1.2.1 并发访问带来的问题1.2.1.1 导致问题的原因 1.2.2 race detector检查data race1.2.3 mutex的基本实现机制以及使用方法1.2.3.1 具体使用-11.2.3.1 具体使用-2 1 …

@Tanstack/vue-query 的使用介绍

Tanstack/vue-query 的使用介绍 前言 在今年的vue conf 会议上,提到了vue-query这个库,这里对它的基本使用做一个介绍。 会议资料地址: https://vueconf.cn/ Tanstack-query的前身是react-query,是一个本地的服务端状态管理的库…

deepin 23 下如何运行绝大数 Windows 游戏?

查看原文 最近有很多 deepiner 一直在询问: “deepin 真的可以玩游戏?” “如何在 deepin 上玩游戏?能玩 windows 上的游戏吗?” 答案是肯定的 “必须能!”,下文和大家分享一下在 deepin 上玩游戏实现的…

使用IoC容器--Ninject

Ninject Ninject是一个较新的开源的IoC容器。这是简单和可扩展的。你可以从下面的位置下载IoC容器。 Ninject 或者您可以使用 NuGet 向您的项目添加Ninject。让我们从NuGet向我们的项目中添加Ninject。只需转到您的项目引用并右键单击,然后 ManageNuGet Packages&a…

Java基础 2. Java基础语法

Java基础 2. Java基础语法 文章目录 Java基础 2. Java基础语法2.1. 标识符2.1.1. 标识符的命名规则 :2.1.2. 标识符的命名规范: 2.2. 关键字2.3. 字面量2.3.1. Java中有哪些字面量2.3.2. 加号运算符 2.4. 变量2.5. 二进制2.6. 八进制与十六进制2.7. 原码反码补码2.7.1. byte与b…

每日OJ_牛客_字符串计数(模拟26进制)

目录 牛客_分解因数(简单模拟) 解析代码 牛客_分解因数(简单模拟) 字符串计数_美团笔试题_牛客网 解析代码 题目意思:按照字典序列:找到s1和s2之间长度在len1和len2范围内的字符串个数。直接做不好处理&…

UE4 使用AndroidGameDevelopmentExtension(AGDE)对安卓客户端做“断点调试”与“代码热更”

本文的目的 主要介绍了如何通过AndroidGameDevelopmentExtension工具、Visual Studio 2022来进行安卓包调试。 流程全过程 1、安装JDK、Gradle、Android NDK、Android SDK等环境如下,请自行前往官网下载,并确认环境参数配置正确。 2、安装 AndroidGame…

黑悟空上线即登顶,如何一路火遍全网?哪些营销方式值得关注?

几乎人人都有一个大圣梦,就像每个品牌也都想成为“黑神话:悟空”(以下简称“黑悟空”)。 作为国内首款3A游戏,黑悟空上线即登顶,直接刷爆全网。虽然目前热度渐歇,但创造的流量神话仍被津津乐道。…

大佬借助ChatGPT写论文发刊到手软,四个步骤20个顶级学术提示词指令

大家好,感谢关注。我是七哥,一个在高校里不务正业,折腾学术科研AI实操的学术人。关于使用ChatGPT等AI学术科研的相关问题可以和作者七哥(yida985)交流,多多交流,相互成就,共同进步,为大家带来最酷最有效的智能AI学术科研写作攻略。经过数月爆肝,终于完成学术AI使用教…

Mybatis【分页插件,缓存,一级缓存,二级缓存,常见缓存面试题】

文章目录 MyBatis缓存分页延迟加载和立即加载什么是立即加载?什么是延迟加载?延迟加载/懒加载的配置 缓存什么是缓存?缓存的术语什么是MyBatis 缓存?缓存的适用性缓存的分类一级缓存引入案例一级缓存的配置一级缓存的工作流程一级…

《OpenCV计算机视觉》—— 图像形态学(腐蚀、膨胀等)

文章目录 一、图像形态学基本概念二、基本运算1.简单介绍2.代码实现 三、高级运算1.简单介绍2.代码实现 一、图像形态学基本概念 图像形态学是图像处理科学的一个独立分支,它基于集合论和数学形态学的理论,专门用于分析和处理图像中的形状和结构。图像形…

分贝通助力元气森林企业支出一体化降本提效

凭借着“0糖0脂0卡”这句广告语,元气森林几乎是一锤砸中了年轻消费者的内心,让“好喝不胖”深入人心,成为了国内饮品消费的新风向标。如果我们从近两年的快消饮品中选出几款深受消费者喜爱的“国货品牌”的话,相信「元气森林」一定上榜。 元气森林成立于2016年,旗下拥有元气森林…

深入理解并实现——快排【C语言版】

目录 一、快排介绍及其思想 二、hoare版本 三、前后指针版 四、挖坑法 五、优化版本 5.1 三数取中 5.2 小区间优化 六 、非递归实现快排 七、三路划分 八、introsort 小结 一、快排介绍及其思想 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一…

【数据结构】Map的使用与注意事项

文章目录 概念模型Map 的使用put() 和 get()getOrDefault()remove()keySet()entrySet() 注意事项 概念 Map 和 set 是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。 以前常见的搜索方式有: 直接遍历,时间…

Spring AOP(下)原理

本文我们来学习 Spring AOP 的原理,也就是 Spring 是如何实现 AOP 的。Spring AOP 是基于动态代理来实现 AOP 的; 1. 代理模式 1.1 代理弄模式的定义 代理模式,也叫委托模式。 定义:为其他对象提供一种代理以控制这个对象的访问…