首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ControlNet训练自己数据集 - plus studio

ControlNet训练自己数据集 - plus studio

作者头像
plus sign
发布于 2024-02-28 13:55:37
发布于 2024-02-28 13:55:37
1.7K0
举报
文章被收录于专栏:个人博客个人博客

ControlNet训练自己数据集

2024.1.20更新 controlnet发布快一年了,diffusers已经有了很完整的生态,建议直接使用第二种方式diffusers进行训练+推理

从官方仓库训练

官方教程 https://github.com/lllyasviel/ControlNet/blob/main/docs/train.md

环境配置

先看一下有没有显卡

代码语言:text
AI代码解释
复制
nvidia-smi

首先下载整个仓库

代码语言:text
AI代码解释
复制
git clone https://github.com/lllyasviel/ControlNet.git

然后创建conda虚拟环境(选做,只要你能配好环境)

代码语言:text
AI代码解释
复制
conda env create -f environment.yaml
conda activate control

接下来需要下载stable diffusion和训练集,因为我们是对stable diffusion 模型做微调。

下载sd1.5到,models目录

代码语言:text
AI代码解释
复制
cd ./models
wget https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned.ckpt

下载训练数据集到training文件夹

代码语言:text
AI代码解释
复制
mkdir training 
cd ./training
wget https://huggingface.co/lllyasviel/ControlNet/resolve/main/training/fill50k.zip

解压数据集

代码语言:text
AI代码解释
复制
unzip fill50k.zip

当然这个数据集非常大,我们也可以选择小一点的

代码语言:text
AI代码解释
复制
wget https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/controlnet_training/conditioning_image_1.png

wget https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/controlnet_training/conditioning_image_2.png

然后将conditioning_image_1.png改名0.png放到./source目录下,conditioning_image_2.png改名放到./target目录下

代码语言:text
AI代码解释
复制
mv conditioning_image_1.png 0.png 
mv 0.png ./source

mv conditioning_image_2.png 0.png 
mv 0.png ./target

然后创建一个prompt.json 的文件写入

代码语言:text
AI代码解释
复制
{"source": "source/0.png", "target": "target/0.png", "prompt": "pale golden rod circle with old lace background"}

无论是哪种方式,最后的文件结构是这样的

训练

首先调一下tutorial_train.py 里的batch_size,训练过程中如果出现out of memory 的情况可以调小。

接下来运行tutorial_train.py,闭上眼睛等待训练完成即可

代码语言:text
AI代码解释
复制
python tutorial_train.py

如果是完整数据集,大概6个小时一个epoch,如果是单张图片会很快。

当然,为了不要出现网不好ssh断掉导致训练终端,我们可以使用screne

代码语言:text
AI代码解释
复制
screen -S train 
conda activate control 
python tutorial_train.py

训练出的结果可以在image_log 中看到

推理

原作者没有给出怎么推理代码的方式,但是有人给出了一个脚本 GitHub 将你训练出来的模型转换成diffusers,接着你就可以中下面diffusers的方式推理模型了。

踩坑解决

out of memory(oom)

首先开启save_memory模式,将config.py 中False改为True

同时调低batch_size

No operator found for memory_efficient_attention_backward

卸载 xformers

代码语言:text
AI代码解释
复制
pip uninstall  xformers

TypeError: on_train_batch_start() missing 1 required positional argument: 'dataloader_idx'

这个比较坑,是论文代码有问题,改一下源码就好 1. ControlNet/ldm/models/diffusion/ddpm.py文件591行

代码语言:text
AI代码解释
复制
def on_train_batch_start(self, batch, batch_idx, dataloader_idx):

删除dataloader_idx,改为

代码语言:text
AI代码解释
复制
def on_train_batch_start(self, batch, batch_idx):

ControlNet/cldm/logger.py文件74行

代码语言:text
AI代码解释
复制
def on_train_batch_end(self, trainer, pl_module, outputs, batch, batch_idx, dataloader_idx):

删除dataloader_idx,改为

代码语言:text
AI代码解释
复制
def on_train_batch_end(self, trainer, pl_module, outputs, batch, batch_idx):

Diffusers 训练

Diffusers 是一个huggingface 推出的扩散模型的封装库,同时也对ControlNet做了封装,https://github.com/huggingface/diffusers/tree/main/examples/controlnet

训练

代码跑起来其实也非常简单,首先下载diffusers整个仓库,然后安装依赖

代码语言:text
AI代码解释
复制
git clone https://github.com/huggingface/diffusers
cd diffusers
pip install -r requirements.txt

你可能会发现这样的报错

代码语言:text
AI代码解释
复制
WARNING: The scripts accelerate, accelerate-config and accelerate-launch are installed in '/home/ubuntu/.local/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
WARNING: The script transformers-cli is installed in '/home/ubuntu/.local/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
WARNING: The script ftfy is installed in '/home/ubuntu/.local/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
WARNING: The script tensorboard is installed in '/home/ubuntu/.local/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
WARNING: The script datasets-cli is installed in '/home/ubuntu/.local/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.

别慌,依赖已经下载成功了,只是下载到了一个不在PATH的路径,接下来如果要使用这些被提到的库就需要指明路径,例如下面我们要使用accelerate,正常的用法是

代码语言:text
AI代码解释
复制
accelerate 你要执行的东西

我们只需要改成

代码语言:text
AI代码解释
复制
/home/ubuntu/.local/bin/accelerate 你要执行的东西

接下来运行tutorial_train

代码语言:text
AI代码解释
复制
accelerate config

全部选NO就好,如果你有多卡什么的可以参考官方文档

我们需要测试数据集

代码语言:text
AI代码解释
复制
wget https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/controlnet_training/conditioning_image_1.png

wget https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/controlnet_training/conditioning_image_2.png

接着运行,设置基础模型和模型输出目录

代码语言:text
AI代码解释
复制
export OUTPUT_DIR="./out_models"
export MODEL_DIR="runwayml/stable-diffusion-v1-5"

运行代码,这里epoch=1,steps=1

代码语言:text
AI代码解释
复制
/home/ubuntu/.local/bin/accelerate launch train_controlnet.py   --pretrained_model_name_or_path=$MODEL_DIR  --output_dir=$OUTPUT_DIR   --dataset_name=fusing/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=1 --max_train_steps=1

推理

新建一个文件inference.py

代码语言:text
AI代码解释
复制
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel, UniPCMultistepScheduler
from diffusers.utils import load_image
import torch

base_model_path = "path to model"
controlnet_path = "path to controlnet"

controlnet = ControlNetModel.from_pretrained(controlnet_path, torch_dtype=torch.float16)
pipe = StableDiffusionControlNetPipeline.from_pretrained(
    base_model_path, controlnet=controlnet, torch_dtype=torch.float16
)

# 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
pipe.enable_xformers_memory_efficient_attention()

pipe.enable_model_cpu_offload()

control_image = load_image("./conditioning_image_1.png")
prompt = "pale golden rod circle with old lace background"

# generate image
generator = torch.manual_seed(0)
image = pipe(
     prompt, num_inference_steps=20, generator=generator, image=control_image
).images[0]

image.save("./output.png")

这里的base_model_path 和 controlnet_path 改成之前设置的MODEL_DIR和OUTPUT_DIR(注意顺序)

接下来运行就可

代码语言:text
AI代码解释
复制
python inference.py

结果会被保存到output.png

踩坑解决

WARNING: The scripts accelerate, accelerate-config and accelerate-launch are installed in '/home/ubuntu/.local/bin' which is not on PATH.Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
代码语言:text
AI代码解释
复制
WARNING: The scripts accelerate, accelerate-config and accelerate-launch are installed in '/home/ubuntu/.local/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
WARNING: The script transformers-cli is installed in '/home/ubuntu/.local/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
WARNING: The script ftfy is installed in '/home/ubuntu/.local/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
WARNING: The script tensorboard is installed in '/home/ubuntu/.local/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
WARNING: The script datasets-cli is installed in '/home/ubuntu/.local/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.

类似的问题,这里的依赖已经安装成功了,只是被安装到了未被添加到PATH的目录,接下来运行的时候只需要指明目录即可。例如下面我们要使用accelerate,正常的用法是

代码语言:text
AI代码解释
复制
accelerate 你要执行的东西

我们只需要改成

代码语言:text
AI代码解释
复制
/home/ubuntu/.local/bin/accelerate 你要执行的东西
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-4-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
数据科学基础(六) 参数估计
📚 文档目录 随机事件及其概率 随机变量及其分布 期望和方差 大数定律与中心极限定理 数理统计的基本概念 参数估计 假设检验 多维 回归分析和方差分析 降维 6.1. 参数的点估计 总体分布 X 的分布形式已知,未知的只是分布中的参数,要估计的只是参数或者参数的某一函数. 6.1.1. 矩估计法 公式 样本矩 总体矩 注意: 样本阶中的计算都是 n 而不会用到样本方差 S^2 6.1.2. 极大似然估计 估计参数值,使得出现
Rikka
2022/01/19
8220
数据科学基础(六) 参数估计
概率论基础 - 9 - 中心极限定理
中心极限定理(Central Limit Theorem,CTL),是指概率论中讨论随机变量序列部分和分布渐近于正态分布的一类定理。。 概述 定理是数理统计学和误差分析的理论基础,指出了大量随机变量近似服从正态分布的条件。它是概率论中最重要的一类定理,有广泛的实际应用背景。在自然界与生产中,一些现象受到许多相互独立的随机因素的影响,如果每个因素所产生的影响都很微小时,总的影响可以看作是服从正态分布的。中心极限定理就是从数学上证明了这一现象。 ——百度百科 中心极限定理(CLT)指出,如果样
为为为什么
2022/08/05
5.7K0
概率论基础 - 9 - 中心极限定理
概率论基础 - 12 - 拉普拉斯分布(Laplace分布)
标准拉普拉斯分布的0.99分位点是3.91,而标准正态分布是2.32,这说明,服从拉普拉斯分布的随机变量,出现极端大的值的概率,要远远大于正态分布。
为为为什么
2022/08/05
5.8K0
概率论基础 - 12 - 拉普拉斯分布(Laplace分布)
马氏距离 (马哈拉诺比斯距离) (Mahalanobis distance)
马氏距离(Mahalanobis distance)是由印度统计学家马哈拉诺比斯(P. C. Mahalanobis)提出的,表示点与一个分布之间的距离。它是一种有效的计算两个未知样本集的相似度的方法。与欧氏距离不同的是,它考虑到各种特性之间的联系,本文介绍马氏距离相关内容。 欧氏距离的缺点 距离度量在各个学科中有着广泛用途,当数据表示为向量\overrightarrow{\mathbf{x} }=\left(x_{1}, x_{2}, \cdots, x_{n}\right)^{T}和\overr
为为为什么
2022/08/05
2.3K0
马氏距离 (马哈拉诺比斯距离) (Mahalanobis distance)
矩 / Hu 矩
在数学和统计学中,矩(moment)是对变量分布和形态特点的一组度量。n阶矩被定义为一变量的n次方与其概率密度函数(Probability Density Function, PDF)之积的积分。在文献中n阶矩通常用符号μn表示,直接使用变量计算的矩被称为原始矩(raw moment),移除均值后计算的矩被称为中心矩(central moment)。变量的一阶原始矩等价于数学期望(expectation)、二至四阶中心矩被定义为方差(variance)、偏度(skewness)和峰度(kurtosis)。
为为为什么
2022/08/09
1.9K0
矩 / Hu 矩
极大似然估计(MLE)和最大后验概率估计(MAP)
极大似然估计是建立在极大似然原理的基础上的一个统计方法,是概率论在统计学中的应用。极大似然估计提供了一种给定观察数据来评估模型参数的方法,即:“模型已定,参数未知”。通过若干次试验,观察其结果,利用试验结果得到某个参数值能够使样本出现的概率为最大,则称为极大似然估计。
为为为什么
2022/08/05
1.1K0
极大似然估计(MLE)和最大后验概率估计(MAP)
【概率论与数理统计(研究生课程)】知识点总结11(多元统计分析基本概念)
设X=(X_1, X_2,\cdots,X_p)^\top有p个分量,若E(X_i)=\mu_i(i=1,2,\cdots,p)存在,定义随机向量X的均值为: 式中,\vec{\mu}为一个p
Marigold
2023/08/23
3990
概率论基础 - 7 - 特征函数
特征函数是随机变量的分布的不同表示形式。 概述 一般而言,对于随机变量X的分布,大家习惯用概率密度函数来描述,虽然概率密度函数理解起来很直观,但是确实随机变量的分布还有另外的描述方式,比如特征函数。 特征函数的本质是概率密度函数的泰勒展开 每一个级数表示原始概率密度函数的一个特征 如果两个分布的所有特征都相同,那我们就认为这是两个相同的分布 矩是描述概率分布的重要特征,期望、方差等概念都是矩的特殊形态 直觉上可以简单理解为: 各阶矩相等 → 各个特征相等 → 分布相
为为为什么
2022/08/05
4.2K0
概率论基础 - 7 - 特征函数
概率论基础 - 17 - 卡方分布
卡方分布(英语:chi-square distribution, χ²-distribution,或写作χ²分布)是概率论与统计学中常用的一种概率分布。k个独立的标准正态分布变量的平方和服从自由度为k的卡方分布。卡方分布是一种特殊的伽玛分布,是统计推断中应用最为广泛的概率分布之一,例如假设检验和置信区间的计算。
为为为什么
2023/11/04
2.1K0
概率论基础 - 17 - 卡方分布
概率论基础 - 1 - 基础概念
本系列记录概率论基础知识,本文介绍最基本的概率论概念。 概率与分布 条件概率与独立事件 条件概率 已知A事件发生的条件下B发生的概率,记作P(B \mid A) ,它等于事件AB的概率相对于事件A的概率,即: P(B \mid A)=\frac{P(A B)}{P(A)} 其中 {P(A)} > 0 条件概率分布的链式法则 对于n个随机变量{X_{1}, X_{2}, \cdots, X_{n}} ,有: P\left(X_{1}, X_{2}, \cdots, X_{n}\right)=P\left
为为为什么
2022/08/05
5930
概率论基础 - 1 - 基础概念
[机器学习|理论&实践] 机器学习中的数学基础
机器学习作为一门复杂而强大的技术,其核心在于对数据的理解、建模和预测。理解机器学习的数学基础对于深入掌握其原理和应用至关重要。本文将深入介绍机器学习中的数学基础,包括概率统计、线性代数、微积分等内容,并结合实例演示,使读者更好地理解这些概念的实际应用。
二一年冬末
2023/12/13
5840
Deep Learning Chapter01:机器学习中概率论
好久不见,大家好,我是北山啦。机器学习当中需要用到许多的数学知识,如今博主又要继续踏上深度学习的路程,所以现在在网上总结了相关的考研数学和机器学习中常见相关知识如下,希望对大家有所帮助。
北山啦
2022/10/31
4100
Deep Learning Chapter01:机器学习中概率论
概率论基础 - 8 - 大数定理
概率论历史上第一个极限定理属于伯努利,后人称之为“大数定律”。概率论中讨论随机变量序列的算术平均值向随机变量各数学期望的算术平均值收敛的定律。 依概率收敛 定义 有 : \lim _{n \rightarrow \infty} P\left\{\left|Y_{n}-a\right| \leq \varepsilon\right\}=1 ​ 则称序列依概率收敛于a,记作: Y_{n} \stackrel{P}{\rightarrow} a 含义 收敛:表明这是一个随机变量序列,而不
为为为什么
2022/08/05
1K0
概率论基础 - 8 - 大数定理
统计力学中的概率论基础(一)
统计力学是一门通过粒子的纯粹微观量来表示系统宏观量的学科,从统计分布出发,用无偏/有偏估计来研究各种不同的系综。本文内容部分参考自郑伟谋老师所著《统计力学导引》,主要介绍其中概率论基础的部分。但因为大多是个人的理解,如有差错,与参考文献作者无关。
DechinPhy
2024/05/15
1710
正交-不相关-独立
本文介绍随机变量中正交、不相关、独立的区别和联系。 概述 三者均是描述随机变量之间关系的概念,看似都可以表示两个随机变量的疏远关系,但定义和约束均有不同。 考察m维随机变量X,Y之间的关系。 定义 正交 定义R(X, Y) = E[XY]为相关函数:若R(X, Y)=0,称X,Y正交 不相关 定义 E[XY] = E[X]E[Y],则X,Y不相关 X,Y的协方差: Cov(X,Y)=E[XY]- E[X]E[Y] 不相关也可以用协方差为0表示 X,Y的相关系数: r(X, Y)
为为为什么
2022/08/05
2.1K0
正交-不相关-独立
正态分布与中心极限定理
也就是说,正态分布一种分布形式,它实际上有很多表示形式,最常见的有概率密度函数,累计分布函数等等来表示。
attack
2018/09/17
1.7K0
概率论11 协方差与相关系数
前面介绍的分布描述量,比如期望和方差,都是基于单一随机变量的。现在考虑多个随机变量的情况。我们使用联合分布来表示定义在同一个样本空间的多个随机变量的概率分布。 联合分布中包含了相当丰富的信息。比如从联合分布中抽取某个随机变量的边缘分布,即获得该随机变量的分布,并可以据此,获得该随机变量的期望和方差。这样做是将视线限制在单一的一个随机变量上,我们损失了联合分布中包含的其他有用信息,比如不同随机变量之间的互动关系。为了了解不同随机变量之间的关系,需要求助其它的一些描述量。 协方差 协方差(covariance)
Vamei
2018/01/18
7120
概率论11 协方差与相关系数
深度学习-数学基础
目前主要有两种度量模型深度的方式。第一种方式是基于评估架构所需执行的顺序指令的数目。假设我们将模型表示为给定输入后,计算对应输出的流程图,则可以将这张流程图中的最长路径视为模型的深度。另一种是在深度概率模型中使用的方法,它不是将计算图的深度视为模型深度,而是将描述概念彼此如何关联的图的深度视为模型深度。在这种情况下,计算每个概念表示的计算流程图的深度可能比概念本身的图更深。这是因为系统对较简单概念的理解在给出更复杂概念的信息后可以进一步精细化
范中豪
2019/09/10
8870
深度学习-数学基础
CIKM'21「品趣」序列推荐DT4SR:将序列建模为不确定性分布
本文主要针对序列推荐,在序列推荐中,用户的偏好的动态变化的,并且序列中的商品转换模式是不断波动的并且具有一定的随机性在里面,因此在序列表征中存在一些不确定性。作者对基于Transformer的序列推荐方法进行改进,提出了基于分布的Transformer,DT4SR。
秋枫学习笔记
2022/09/19
4570
行为感知Transformer:用于多行为序列推荐的
本文主要针对序列推荐中的多行为序列推荐,即行为序列中包含不同的行为类型,比如点击,加购,购买等。为了捕获用户的个性化行为模式和行为间的复杂协作关系,作者提出PBAT方法:
秋枫学习笔记
2024/02/27
7520
行为感知Transformer:用于多行为序列推荐的
推荐阅读
相关推荐
数据科学基础(六) 参数估计
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档