latent-diffusion model环境配置,这可能是你能够找到的最细的博客了

news2024/11/26 14:40:58

文章目录

  • 前言
  • 一、环境配置
    • 1.创建requirement.txt文件
    • 2.提前从Github上下载好taming-transformers和clip
    • 3.创建conda环境,并安装requirement.txt文件
    • 4.安装torch 1.8
    • 5.本地下载Bert模型权重,修改加载Bert的代码
    • 6.测试环境
  • 2.训练自己的LDM模型


前言

最近在研究diffusion模型,并对目前最火的stable-diffusion模型很感兴趣,又因为stable-diffusion是一种latent-diffusion模型,故尝试复现latent-diffusion model,并训练自己的LDM。

写这篇博客的出发点是因为,当我跟随github页面上的install教程进行安装的时候,遇到了很多问题,有些是因为网络问题,服务器无法直接下载国外服务器的资源;有些则是软件版本其实是错的,照着安装就是不对。

项目地址:latent-diffusion model


一、环境配置

我修改了以下项目中environment.yaml文件里的配置,这里请跟着我的步骤进行安装
我将environment.yaml文件中的配置提取了出来,防止直接安装yaml文件时出现网络错误,导致无法继续安装

1.创建requirement.txt文件

把下面的内容复制到requirement.txt文件里

albumentations==0.4.3
opencv-python==4.1.2.30
pudb==2019.2
imageio==2.9.0
imageio-ffmpeg==0.4.2
pytorch-lightning==1.4.2
omegaconf==2.1.1
test-tube>=0.7.5
streamlit>=0.73.1
einops==0.3.0
torch-fidelity==0.3.0
transformers==4.6.0
torchmetrics==0.6
kornia==0.5.10
six
-e git+https://github.com/CompVis/taming-transformers.git@master#egg=taming-transformers
-e git+https://github.com/openai/CLIP.git@main#egg=clip
-e .

2.提前从Github上下载好taming-transformers和clip

taming-transformers项目地址
clip项目地址
下载好后解压,然后将两个项目的文件夹名分别修改为taming-transformers和clip,然后把这两个文件夹复制到latent-diffusion项目下的src文件夹下(如果没有src文件夹,自己创建一个),如下图所示:
在这里插入图片描述

3.创建conda环境,并安装requirement.txt文件

执行下面命令创建ldm环境

conda create -n ldm python=3.8.5	# 创建新环境
conda activate ldm					# 激活新环境

安装requirement.txt文件

pip install -r requirement.txt

Tips:
1.为什么我没有提前安装torch,因为安装好requirement.txt后,会自动安装上torch2.0,而torch2.0在执行代码时会报错,版本是错误的,因此我手动将其删除,再重新安装低版本的torch
2.如果按照LDM项目里的environment.yaml安装的话,会缺一些包,并且包的版本也是错的,进到导致代码执行报错。于是我Google好久找到了解决方法,以及合适的包。我已经将合适的包以及版本添加进了requirement.txt文件。如:
transformers升级为4.6.0版本,添加torchmetrics=0.6 (解决Bug的Answer)
添加kornia=0.5.10 (torch和kornia的对应关系),
添加six包。
照着安装你们就不用再走一遍弯路了。

删除toch2.0

pip uninstall torch

4.安装torch 1.8

不要跟着environment.yaml里的torch版本安装,安装完执行代码依然会报错,cudatookit11.0 就是会出错,要用cudatookit11.1。执行下面命令安装

pip install torch==1.8.1+cu111 torchvision==0.9.1+cu111 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html

5.本地下载Bert模型权重,修改加载Bert的代码

因为国内的服务器大多数是无法直接访问huggingface网站的,进而导致无法联网下载模型,因而被迫只能先将模型下载到本地,然后再上传至服务器。
在这里下载bert-base-uncased的权重,只需要下载如图方块所示的文件即可:
在这里插入图片描述
将这三个文件放在一个文件夹内,然后你可以将文件夹上传到服务器上LDM项目下的models目录下,想要系统了解的可以参考这篇文章《huggingface transformers预训练模型如何下载至本地,并使用?》,如图:
在这里插入图片描述

然后修改LDM项目下ldm/modules/encoders/modules.py这个文件
对应代码在第58行,修改from_pretrained的路径为本地路径,注意是权重文件对应文件夹名

class BERTTokenizer(AbstractEncoder):
    """ Uses a pretrained BERT tokenizer by huggingface. Vocab size: 30522 (?)"""
    def __init__(self, device="cuda", vq_interface=True, max_length=77):
        super().__init__()
        from transformers import BertTokenizerFast  # TODO: add to reuquirements
        # self.tokenizer = BertTokenizerFast.from_pretrained("bert-base-uncased")
        # 需要提前从huggingface上把模型文件下载到本地,然后进行本地加载,否则会出现联网错误的问题,导致模型无法下载
        self.tokenizer = BertTokenizerFast.from_pretrained("models/bert")   # 加载本地文件
        self.device = device
        self.vq_interface = vq_interface
        self.max_length = max_length

6.测试环境

测试Text-to-Image任务
如果模型文件你无法在服务器上直接下载,请在本地单独下载,然后再上传至服务器

# 下载预训练权重(5.7GB):
mkdir -p models/ldm/text2img-large/
wget -O models/ldm/text2img-large/model.ckpt https://ommer-lab.com/files/latent-diffusion/nitro/txt2img-f8-large/model.ckpt

# 执行脚本
python scripts/txt2img.py --prompt "a virus monster is playing guitar, oil on canvas" --ddim_eta 0.0 --n_samples 4 --n_iter 4 --scale 5.0  --ddim_steps 50

测试Inpainting任务

# 下载预训练权重
wget -O models/ldm/inpainting_big/last.ckpt https://heibox.uni-heidelberg.de/f/4d9ac7ea40c64582b7c9/?dl=1

# 执行脚本
python scripts/inpaint.py --indir data/inpainting_examples/ --outdir outputs/inpainting_results

如果生成了对应图片,说明环境配置成功

2.训练自己的LDM模型

还在研究,未完待续~~~

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

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

相关文章

几个基于springboot在线服务过段时间突然停掉的原因

有几个基于springboot的服务今天发现突然停掉了,也不知道什么原因,所以只能看一下日志了 主要日志如下: 2023-06-17 14:26:21.775 DEBUG o.s.b.f.s.DefaultListableBeanFactory- Retrieved dependent beans for bean dataSource: [mybatisCo…

使用了并发工具类库,线程安全就高枕无忧了吗?

1、说明 在代码审核讨论的时候,我们有时会听到有关线程安全和并发工具的一些片面的观点和结论,比如“把 HashMap 改为 ConcurrentHashMap,就可以解决并发问题了呀”,“要不我们试试无锁的 CopyOnWriteArrayList 吧,性能…

并发线程 (2) - C++线程间共享数据【详解:如何使用锁操作】

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 期待你的关注哦!!! 快乐在于态度,成功在于细节,命运在于习惯。 Happiness lies in the attitude, s…

【机器学习】——神经网络与深度学习

目录 引入 一、神经网络及其主要算法 1、前馈神经网络 2、感知器 3、三层前馈网络(多层感知器MLP) 4、反向传播算法 二、深度学习 1、自编码算法AutorEncoder 2、自组织编码深度网络 ①栈式AutorEncoder自动编码器 ②Sparse Coding稀疏编码 …

(一)OC对象本质---内存布局

Apple OSS Distributions GitHubApple Open Source 开源源码链接 面试题1 一个NSObject对象占用多少内存? 系统分配了16个字节给NSObject对象(通过malloc_size函数获得) ​​​​​​​但NSObject对象内部只使用了8个字节的空间&#xf…

【状态估计】粒子滤波器、Σ点滤波器和扩展/线性卡尔曼滤波器研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

推荐一些简单却很实用的工具,快收藏起来吧

第一个工具:remove.bg 这是一个在线抠图的神器,它能够帮助你轻松地消除图片中的背景。相信很多人都知道,手动抠图真的很累,抠着抠着就会觉得烦躁。但是,使用这个神器,你只需要点击上传图片,就能…

Git安装与使用方法入门

目录 Git简介 Git下载与安装 Git配置环境变量 Git使用方法入门 Git简介 Git是一个帮助开发者追踪代码变化和团队协作的工具。它记录了代码修改的历史,并允许回到过去的版本。开发者可以创建分支来独立开发新功能,而不影响主代码。团队成员可以共享代…

@EnableScheduling和@Scheduled注解详解fixedrate和fixeddelay的区别

一、pom.xml中导入必要的依赖&#xff1a; <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.1.RELEASE</version></parent><dependencies><…

Selenium教程__元素定位(2)

Selenium操作页面上的文本输入框、按钮、单选框、复选框等&#xff0c;凡是能在页面显示的任何元素都需要先对元素进行定位。 Selenium提供了以下方法来定位页面中元素&#xff1a; find_element_by_id&#xff1a;通过id属性值进行匹配查找&#xff0c;返回匹配到的第一个元…

利用zOffice SDK实现合同续签系统

经过用户调研和实际考察发现。商务、政务和个人的真实使用场景中&#xff0c;很多用户会有通过“用户数据”“固定模板”生成“批量合同&#xff08;文件&#xff09;”的需求&#xff0c;并且存在着使用痛点。在在线办公不断发展的今天&#xff0c;我们需要一个在线编辑的工具…

使用Jsoup工具解析页面数据

前提是需要联网 F12打开浏览器控制台&#xff0c;通过元素找到需要爬取的数据 1、添加网页解析依赖 <!--解析网页依赖--> <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.10.2</version&g…

【id:21】【1分】E. DS单链表--类实现

题目描述 用C语言和类实现单链表&#xff0c;含头结点 属性包括&#xff1a;data数据域、next指针域 操作包括&#xff1a;插入、删除、查找 注意&#xff1a;单链表不是数组&#xff0c;所以位置从1开始对应首结点&#xff0c;头结点不放数据 类定义参考 输入 n 第1行先输…

GRE over IPsec VPN配置

GRE over IPsec VPN配置 【实验目的】 理解GRE Tunnel的概念。理解GRE over IPsec VPN的概念。掌握GRE Tunnel的配置。掌握GRE over IPsec VPN的配置。验证配置。 【实验拓扑】 实验拓扑如下图所示。 实验拓扑 设备参数表如下表所示。 设备参数表 设备 接口 IP地址 子网…

Ziya:一个自回归、双语、开源和多功能的大语言模型

什么是Ziya&#xff1f; Ziya是一个基于LLaMa的130亿参数的中英双语预训练语言模型&#xff0c;它由IDEA研究院认知计算与自然语言研究中心&#xff08;CCNL&#xff09;推出&#xff0c;是开源通用大模型系列的一员。Ziya具备翻译&#xff0c;编程&#xff0c;文本分类&#…

JS中遍历对象的方法讲解

文章目录 for...in循环当使用for...in循环遍历对象时&#xff0c;需要注意以下几点&#xff1a; Object.keys()方法结合forEach()循环Object.entries()结合forEach()循环Object.getOwnPropertyNames()方法结合forEach()循环 在JavaScript中&#xff0c;有几种常用的方法可以用来…

runjs在vue2项目中的使用

安装run.js插件 安装chalk const { run } require(runjs) const chalk require(chalk) const config require(../vue.config.js) const rawArgv process.argv.slice(2) const args rawArgv.join( )if (process.env.npm_config_preview || rawArgv.includes(--preview)) …

【科普】Windows10如何关闭搜索功能中的广告? Windows10如何关闭自动更新?

目录 一、Windows10如何关闭搜索功能中的广告&#xff1f;1.1 问题描述1.2 关闭步骤1.2.1 关闭显示搜索1.2.2 修改注册表 二、Windows10如何关闭自动更新&#xff1f;2.1 问题描述2.2 关闭步骤 一、Windows10如何关闭搜索功能中的广告&#xff1f; 1.1 问题描述 windows10的搜…

云安全技术(五)之评估云服务供商

评估云服务提供商 Evaluate Cloud Service Providers 1.1 根据标准认证 Verification against criteria ISO/EC 27001和27001:2013NIST SP 800-53支付卡行业数据安全标准(PCI DSS)SOC 1、SOC 2和SOC 3通用准则(Common Criteria)FIPS 140-2 1.2 系统/子系统产品认证 System/su…

pytest - 使用pytest过程中的5大超级技巧(实例详解篇)

从简单的断言和测试用例组织到更先进的参数化和夹具管理&#xff0c;pytest提供了强大的功能和灵活性。让我们一起探索这些技巧&#xff0c;使你的测试变得更加高效精准&#xff01; 无需担心阅读时间过长&#xff0c;本文已经为您准备了详尽的解析和实际示例。立即开始&#…