StableDiffusion模型发展历史

news2024/12/22 17:26:05

  参考资料:

  相应的github和huggingface

  LDM [github]

  StableDiffusion v1.1 ~ v1.4 [github] [huggingface]

  StableDiffusion v1.5 [huggingface] [github]

  StableDiffusion v2 v2.1 [github] [huggingface]  

  首先说一下,这篇文章的目的是让你清晰地了解StableDffusion这个模型的发展脉络,由于目前开源AIGC模型基本上都是基于SD的,因此了解它的发展历史是非常有必要的,毕竟它是进行再创作的根基,不了解这个base而盲目地搞一些finetune,虽然可能也会出效果,但有事倍功半的危险。

  1. LDM

   LDM指latent-diffusion model。纵观Diffusion model的发展历史,使用一个基于Unet的noise predictor进行diffusion reverse process是主线,这个思路在DDPM这篇文章中就已经阐述的很清楚了,但是受限于大量的hidden features,训练速度堪忧,并且分辨率没办法提的很高。classifier-guided[Diffusion Models Beat GANs on Image Synthesis]和classifier-free[CLASSIFIER-FREE DIFFUSION GUIDANCE]这两篇文章给出了设计“条件Diffusion Model”的方法,但是仍然没有解决训练速度和显存占用的问题。直到LDM的提出,通过引入一个预训练的VAE做图片降维,然后在latent-space做diffusion,才为Diffusion Model的大规模训练打开了大门。与此同时,它提出可以使用一个业务相关的conditioning模块,并借助CrossAttension机制一把实现多个任务比如inpainting,SR,depth-guided等等。总之,LDM是学术界的产物,由Compvis独立提出,为后续的Stablediffusion打下了技术基础。但同时由于它(LDM)学术产物的本质,得到的关注远远不如SD。
   2. StableDiffusion v1.1 ~ v1.4
  发出了LDM那篇CVPR文章后,Compvis团队得到了工业界的关注,得以和Runway和Stability AI合作。有了他们的支持,Compvis开始做一些昂贵的尝试,即在LAION数据集上进行大规模的训练。本质上,SDv1.1 ~ 1.4使用的算法框架和LDM完全一致。特别地,SD使用了固定的(frozen)CLIP text encoder作为上一节提到的conditioning模块,也就是说不做杂七杂八的conditioning了,依赖于LAION数据集的驱动,就一门心思好好把T2I这个任务给做好。下面我摘抄两段github上的话,很好地总结了这个阶段的模型的发展:Stable Diffusion v1 refers to a specific configuration of the model architecture that uses a downsampling-factor 8 autoencoder with an 860M UNet and CLIP ViT-L/14 text encoder for the diffusion model. The model was pretrained on 256x256 images and then finetuned on 512x512 images.

  3. StableDiffusion v1.5

  上面提到Compvis团队不仅了Stablility-AI团队合作,还和Runway团队有合作。而SD1.5这个火遍大江南北的模型就是由RunwayML团队发布在hugging face上的。值得注意的是这次模型的发布就不再是Compvis了(可能是利益相关的问题吧),看看它是怎么做的:

The Stable-Diffusion-v1-5 checkpoint was initialized with the weights of the Stable-Diffusion-v1-2 checkpoint and subsequently fine-tuned on 595k steps at resolution 512x512 on "laion-aesthetics v2 5+" and 10% dropping of the text-conditioning to improve classifier-free guidance sampling.

  似乎没有什么fancy的... 仅仅就是在一个美学打分较高的LAION子集上猛猛训...步数超过了v1-4而已。但是这里有两个需要注意的地方,先看一下runway在hugging face上发布的模型:

  一个是pruned,这个pruned是什么意思?reddit上有一段很好的解释: https://www.reddit.com/r/StableDiffusion/comments/xymibu/what_does_it_mean_to_prune_a_model/

A neural network is just a bunch of math operations. The "neurons" are connected by various "weights," which is to say, the output of a neuron is multipled by a weight (just a number) and gets added into another neuron, along with lots of other connections to that other neuron.

When the neural network learns, these weights get modified. Often, many of them become zero (or real close to it). And since anything time zero is zero, we can skip this part of the math when using the network to predict something. Also, when a set of data has a lot of zeros, it can be compressed to be much smaller.

Pruning finds the nearly zero connections, makes them exactly zero, and then let's you save a smaller, compressed network. Moreover, when you use the network to predict/create something, an optimized neural network solution (i.e. the code that does all of the math specified by the network) can do so faster by intelligently skipping the unneeded calculations involving zero.

  这下就知道了,模型的pruning就是剪掉不需要的部分。pruned知道了,ema又是什么意思呢?这个其实我可以解释一下:EMA stands for Exponential Moving Average, and it refers to a technique used to smooth out noise in the training data. 即EMA是一种训练策略,在训练的时候模型会有一个主模型例如Unet,同时也会保存一个copy即EMA_Unet,这个EMA_Unet可以简单地看作是Unet的一个权值平均化的版本,可以使得训练更加稳定。一般认为EMA_Unet能够降噪,因此load ema版本的权重就可以了,但是如果你想接着finetune,那么不妨同时load EMA_Unet和真实的Unet,继续用ema的策略训练下去。hugging face上有一段话:

   可知v1-5-pruned.ckpt包含的信息是比v1-5-pruned-emaonly.ckpt的信息“绝对”多的,然后就按自己需求有选择地下载就好了。

  4. StableDiffusion v2 v2.1

  上面说到之前的模型发布都是Compvis和Runway完成的,现在老大Stability-AI也坐不住了。我猜它应该是想挣钱的,因此发布Stalediffusion v2的一个重要举措是删除NSFW的东西。这个也可以理解,因为做产品就要考虑风控啊。SD v2同样有一个一句话定义:Stable Diffusion v2 refers to a specific configuration of the model architecture that uses a downsampling-factor 8 autoencoder with an 865M UNet and OpenCLIP ViT-H/14 text encoder for the diffusion model. The SD 2-v model produces 768x768 px outputs. 有三个变化,一个是text-encoder变了,变这个东西意味着什么?意味着和StableDiffusion v1割席,必须重新从零去训练了。一个是分辨率加大了,这个东西似乎没有什么技术壁垒,因为卷积这个操作好像天生就能够兼容不同分辨率的方图。

  然后,StableDiffusion v2引入了一个叫v-prediction的概念,这导致模型出现了v2, v2-base, v2.1, v2.1-base,v2和v2.1是SD主推的产品(我的理解),而v2-base和v2.1-base则是原始的noise-prediction的模型。逻辑是这样的,v2-base是从零开始训的,并且屏蔽了NSFW,v2基于v2-base继续finetune。v2.1-base是基于v2-base finetune的,v2.1基于v2.1-base继续finetune。下面只展示v2-base的训练介绍,其他的模型训练信息可以到hugging face上自己去看:

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

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

相关文章

Django SQL注入漏洞 CVE-2022-28347

漏洞简介 在Django 2.2 的 2.2.28 之前版本、3.2 的 3.2.13 之前版本和 4.0 的 4.0.4 之前版本中的 QuerySet.deexplain() 中发现了SQL注入问题。这是通过传递一个精心编制的字典(带有字典扩展)作为**options参数来实现的,并将注入负载放置在…

[golang gin框架] 36.Gin 商城项目-RESTful API 设计指南,允许Cros跨域 ,提供api接口实现前后端分离,以及JWT的使用

一.RESTful API 设计指南 请看:Restful API 的接口规范 二.Gin 中配置服务器端允许跨域 github官方地址: https://github.com/gin-contrib/cors 在 main.go文件中配置跨域请求 代码如下: 在使用cors时,需要 引入该插件,先: import ( "github.com/gin-contrib/cors" )…

Cocos CreatorXR 1.2.0 今日发布,正式支持 WebXR ,并开启 MR 之路

去年九月,Cocos CreatorXR v1.0.1 版本支持了 VR 内容创作,成为率先支持 XR 的国产引擎,今年三月,Cocos CreatorXR v1.1.0 版本实现了对 AR 内容开发的支持。在完成基本功能的建设后,更多开发者开始尝试使用 Cocos Cre…

Linux内核oops panic简析

源码基于:Linux 5.4 0. 前言 内核异常的级别大致分为三个:BUG、oops、panic。 BUG 是指那些不符合内核的正常设计,但内核能够检测出来并且对系统运行不会产生影响的问题,比如在原子上下文中休眠,在内核中用 BUG 标识。…

case

[rootes3 data]# cat case11.sh #!/bin/bash. /etc/rc.d/init.d/functionsdisable_selinux(){sed -i s/SELNUXenforcing/SELINUXdisabled/ /etc/selinux/config action "SELINUX 已经禁用,重启生效" }disable_firewalld(){ systemctl disable --now firew…

chatgpt赋能Python-python3_9_1怎么打开

Python 3.9.1 使用指南:如何打开 Python 3.9.1 Python 3.9.1 是 Python 最新版本的一个分支,包含各种新特性和改进,能够让开发者快速、简单地创建并运行 Python 程序。如果您想要使用 Python 3.9.1,下面是一个简单的指南&#xf…

菜单选择shell

[rootes3 data]# vi action.sh #!/bin/bash . /etc/init.d/functionsecho -en "\E[$[RANDOM%731];1m"cat <<EOF请选择&#xff1a;1) 备份数据库2)清理日志3)软件升级4)软件回滚5)删库跑路EOFecho -en \E[0mread -p "请选择上面的项对应的数字1-5&#xf…

Spring Boot-如何让你的 bean 在其他 bean 之前完成加载

今天有个小伙伴给我出了一个难题&#xff1a;在 SpringBoot 中如何让自己的某个指定的 Bean 在其他 Bean 前完成被 Spring 加载&#xff1f;我听到这个问题的第一反应是&#xff0c;为什么会有这样奇怪的需求&#xff1f;Talk is cheap&#xff0c;show me the code&#xff0c…

「读书感悟系列」原则:应对变化中的世界秩序(达利欧)

作者 | gongyouliu 编辑 | gongyouliu 最近2个月读完了达利欧的『原则2&#xff1a;应对变化中的世界秩序』&#xff0c;收获非常大。几年之前读他的『原则1&#xff1a;工作与生活』就非常喜欢&#xff0c;很有启发&#xff0c;这次读起来一如既往的喜欢。这本书利用周期的思路…

Qt推流程序自动生成网页远程查看实时视频流(视频文件/视频流/摄像头/桌面转成流媒体rtmp+hls+webrtc)

一、前言说明 推流程序将视频流推送到流媒体服务器后&#xff0c;此时就等待验证拉流播放&#xff0c;一般可以选择ffplay命令行播放或者vlc等播放器打开播放&#xff0c;也可以选择网页直接打开拉流地址播放&#xff0c;一般主流的浏览器都支持网页直接播放hls/m3u8/webrtc类…

流批一体的近实时数仓的思考与设计

摘要&#xff1a;基于对数据时间旅行的思考&#xff0c;引出了对目前三种数仓形态和两种数仓架构的思考。结合数据湖在 Flink 的应用和数据湖元数据类型的思考&#xff0c;探索了基于数据湖的 Flink SQL 流批一体的实践&#xff0c;在流批一体 SQL 表达一致、结果一致性、流批任…

【JS】1686- 重学 JavaScript API - Clipboard API

&#x1f3dd; 1. 什么是 Clipboard API 1.1 概念介绍 Clipboard API[1] 是一组 JavaScript API&#xff0c;用于在浏览器中操作剪贴板。通过 Clipboard API&#xff0c;开发者可以将文本、图片和其他数据复制到剪贴板&#xff0c;也可以从剪贴板中读取数据&#xff0c;实现复制…

OPPO解散芯片团队的真相,真的不缺钱?

OPPO解散芯片研发团队&#xff0c;各方都喜欢说OPPO不缺钱&#xff0c;解散芯片研发团队应该不是因为资金问题&#xff0c;然而仔细看看当下全球智能手机市场的表现&#xff0c;就未必会如此想了。 全球手机市场的出货量在2022年下跌了12%&#xff0c;跌穿了12亿部&#xff1b;…

【JVM】4. 虚拟机栈

文章目录 4.1. 虚拟机栈概述4.1.2. 初步印象4.1.3. 内存中的栈与堆4.1.4. 虚拟机栈基本内容Java虚拟机栈是什么&#xff1f;生命周期作用栈的特点面试题&#xff1a;开发中遇到哪些异常&#xff1f; 4.2. 栈的存储单位4.2.1. 栈中存储什么&#xff1f;4.2.2. 栈运行原理4.2.3. …

GPT理解的CV:基于Yolov5的半监督目标检测

关注并星标 从此不迷路 计算机视觉研究院 公众号ID&#xff5c;ComputerVisionGzq 学习群&#xff5c;扫码在主页获取加入方式 计算机视觉研究院专栏 作者&#xff1a;Edison_G 主要贡献是提出了一种名为“Efficient Teacher”的半监督目标检测算法。与传统的监督学习算法不同&…

10人面试9个答错?鹅厂T12详解MySQL加锁机制

&#x1f449;腾小云导读 鹅厂有一道关于「数据库锁」的面试题。我们发现其实很多 DBA &#xff08;数据库管理员&#xff0c;Database administrator&#xff09;包括工作好几年的 DBA 都答得不太好。这说明 MySQL 锁的机制其实还是比较复杂&#xff0c;值得深入研究。本文对3…

探索Vue的组件世界-实现Vue插件

一个好的框架满足几大设计原则&#xff1a; 开闭原则&#xff1a;对修改源码关闭&#xff0c;对功能扩展开放 vue作为一个优秀的组件框架&#xff1a;满足开闭原则&#xff0c;提供良好的插件机制&#xff0c;以提供三方来扩展功能 Mixin模式 Vue.mixin(mixin) 全局注册的m…

嵌入式 QT 定时器与计时器

目录 1、定时器 2、计时器 2.1 QTime 时间转换成字符串函数 3、QT 获取日期&#xff0c;时间&#xff0c;星期 4、综合应用 定时器是用来处理周期性事件的一种对象&#xff0c;类似于硬件定时器。例如设置一个定时器的定时周期为 1000 毫 秒&#xff0c;那么每 1000 毫秒就会…

现在的00后,真是卷死了呀,辞职信准备好了·····

都说00后躺平了&#xff0c;但是有一说一&#xff0c;该卷的还是卷。这不&#xff0c;三月份春招我们公司来了个00后&#xff0c;工作没两年&#xff0c;跳槽到我们公司起薪23K&#xff0c;都快接近我了。 后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了…

Kali-linux使用社会工程学工具包(SET)

社会工程学工具包&#xff08;SET&#xff09;是一个开源的、Python驱动的社会工程学渗透测试工具。这套工具包由David Kenned设计&#xff0c;而且已经成为业界部署实施社会工程学攻击的标准。SET利用人们的好奇心、信任、贪婪及一些愚蠢的错误&#xff0c;攻击人们自身存在的…