扩散模型实战(二):扩散模型的发展

news2024/9/22 13:32:56

推荐阅读列表:

扩散模型实战(一):基本原理介绍

        扩散模型从最初的简单图像生成模型,逐步发展到替代原有的图像生成模型,直到如今开启 AI 作画的时代,发展速度可谓惊人。下面介绍一下2D图像生成相关的扩散模型的发展历程,具体如下:

  • 开始扩散:基础扩散模型的提出与改进;
  • 加速生成:采样器;
  • 刷新纪录:基于显式分类器引导的扩散模型;
  • 引爆网络:基于 CLIP ( Contrastive Language - Image Pretraining ,对比语言﹣图像预处理)的多模态图像生成;
  • 再次"出图":大模型的"再学习"方法﹣ DreamBooth 、 LoRA 和 ControlNet ;
  • 开启 AI 作画时代:众多商业公司提出成熟的图像生成解决方案。

1)开始扩散:基础扩散模型的提出与改进

      在图像生成领域,最早出现的扩散模型是 DDPM (于2020年提出)。DDPM 首次将"去噪"扩散概率模型应用到图像生成任务中,奠定了扩散模型在图像生成领域应用的基础,包括扩散过程定义、噪声分布假设、马尔可夫链计算、随机微分方程求解和损失函数表征等,后面涌现的众多扩散模型都是在此基础上进行了不同种类的改进。

2)加速生成:采样器

       虽然扩散模型在图像生成领域取得了一定的成果,但是由于其在图像生成阶段需要迭代多次,因此生成速度非常慢(最初版本的扩散模型的生成速度甚至长达数分钟),这也是扩散模型一直受到诟病的原因。在扩散模型中,图像生成阶段的速度和质量是由采样器控制的,因此如何在保证生成质量的前提下加快采样是一个对扩散模型而言至关重要的问题。

    论文"Score-Based Generative Modeling through Stochastic Differential Equations"证明了 DDPM 的采样过程是更普遍的随机微分方程,因此只要能够更离散化地求解该随机微分方程,就可以将1000步的采样过程缩减至50步、20步甚至更少的步数,从而极大地提高扩散模型生成图像的速度,如图2-1所示。针对如何更快地进行采样这一问题,目前已经涌现了许多优秀的求解器,如 Euler、SDE、DPM-Solver++和Karras等,这些加速采样方法也是扩散模型风靡全球至关重要的推力。

图2-1 DPM-Solver++在20步采样内实现从“一碗水果”到“一碗梨”的图像编辑

3)刷新纪录:基于显式分类器引导的扩散模型

       2021年5月以前,虽然扩散模型已经被应用到图像生成领域,但它实际上在图像生成领域并没有"大红大紫",因为早期的扩散模型在所生成图像的质量和稳定性上并不如经典的生成模型 GAN ( Generative Adversarial Network ,生成对抗网络),真正让扩散模型开始在研究领域"爆火"的原因是论文" Diffusion Models Beat GANs on Image Synthesis "的发表。OpenAl 的这篇论文贡献非常大,尤其是该文介绍了在扩散过程中如何使用显式分类器引导。

       更重要的是,这篇论文打败了图像生成领域统治多年的 GAN ,展示了扩散模型的强大潜力,使得扩散模型一举成为图像生成领域最火的模型,如图2-2所示。

图2-2 扩散模型超越GAN的图像生成示例(左图为BigGAN-deep模型的结果,右图为OpenAI扩散模型的结果)

4)引爆网络:基于 CLIP 的多模态图像生成

      CLIP 是连接文本和图像的模型,旨在将同一语义的文字和图片转换到同一个隐空间中,例如文字"一个苹果"和图片"一个苹果"。正是由于这项技术和扩散模型的结合,才引起基于文字引导的文字生成图像扩散型在图像生成领域的彻底爆发,例如 OpenAI 的 GLIDE 、 DALL - E 、 DALL -E2(基于 DALL -E2生成的图像如图2-3所示), Google 的 Imagen 以及开源的 Stable Diffusion ( Stable Diffusion v2扩散模型的主页如图2-4示)等,优秀的文字生成图像扩散模型层出不穷,给我们带来无尽的惊喜。

图2-3 基于DALL-E2生成的“拿着奶酪的猫”

图2-4 Hugging Face的Stable Diffusion v2扩散模型的主页

5)再次"出图":大模型的"再学习"方法﹣DreamBooth 、 LoRA 和 ControlNet

       自从扩散模型走上大模型之路后,重新训练一个图像生成扩散模型变得非常昂贵。面对数据和计算资源高昂的成本,个人研究者想要入场进行扩散模型的相关研究已经变得非常困难。

       但实际上,像开源的 Stable Diffusion 这样的扩散模型已经出色地学习到非常多的图像生成知识,因此不需要也没有必要重新训练类似的扩散模型。于是,许多基于现有的扩散模型进行"再学习"的技术自然而然地涌现,这也使得个人在消费级显卡上训练自己的扩散模型成为可能。DreamBooth 、 LoRA 和 ControlNet 是实现大模型"再学习"的不同方法,它们是针对不同的任务而提出的。

       DreamBooth 可以实现使用现有模型再学习到指定主体图像的功能,只要通过少量训练将主体绑定到唯一的文本标识符后,就可以通过输入文本提示语来控制自己的主体以生成不同的图像,如图2-5所示。

图2-5 使用 DreamBooth 将小狗嵌入图像中并生成不同场景下的小狗

      LoRA 可以实现使用现有模型再学习到自己指定数据集风格或人物的功能,并且还能够将其融入现有的图像生成中。Hugging Face 提供了训练 LoRA 的 UI 界面,如图2-6所示。

图2-6 Hugging Face 提供的 LoRA 训练界面

       ControlNet 可以再学习到更多模态的信息,并利用分割图、边缘图等功能更精细地控制图像的生成。第7章将对 ControlNet 进行更加细致的讲解。

6)开启 AI 作画时代:众多商业公司提出成熟的图像生成解决方案

       图像生成扩散模型"爆火"之后,缘于技术的成熟加上关注度的提高以及上手简易等,网络上的扩散模型"百花齐放",越来越多的人开始使用扩散模型来生成图像。

       众多提供成熟图像生成解决方案的公司应运而生。例如,图像生成服务提供商 Midjourney 实现了用户可以通过 Midjourney 的 Discord 频道主页(如图2-7所示)输入提示语来生成图像,也可以跟全世界的用起分享和探讨图像生成的细节。此外通过 Stability Al 公司开发的图像生成工具箱 DreamStudio (如图2-8所示),用户既可以使用提示语来编辑图像,也可以将其 SDK 嵌入自己的应用或者作为 Photoshop 播件包当然, Photoshop 也有自己的基于扩散模型的图像编辑工具库 Adobe Firefly (如图2-9所示),用户可以基于 Photoshop 传统的选区等精细控制功能来更高效地生成图像。

图2-7 Midjourmey 的 Discora 频道主页

图2-8 Stability Al公司开发的DreamStudio

图2-9 Adobe的图像编辑工具库 Adobe Firefly

       百度公司推出了文心一格 AI 创作平台(如图2-10所示),而阿里巴巴达摩院也提出了自己的通义文生图大模型等。除了头部企业以外,一些创业公司也开始崭露头角,退格网络推出的 Tiamat 图像生成工具已获多轮投资,由该工具生成的精美概念场景图像登陆上海地铁广告牌。北京毛线球科技有限公司开发的6pen Art 图像生成 APP (如图2-11所示)将图像生成带到手机端,使用户在手机上就能体验 AI 作画。

图2-10 百度公司的文心一格 AI 创作平台

图2-11 6pen Art 图像生成 APP

       众多的服务商致力于以最成熟、最简单的方式让大众能够通过输入文字或图片的方式生成想要的图像,真正开启了 AI 作画时代。

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

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

相关文章

浅析 C 语言的共用体、枚举和位域

前言 最近在尝试阅读一些系统库的源码,但是其中存在很多让我感到既熟悉又陌生的语法。经过资料查阅,发现是 C 语言中的共用体和位域。于是,趁着课本还没有扔掉,将一些相关的知识点记录在本文。 文章目录 前言共用体 (union)枚举…

Python冷知识-为什么切片和区间会忽略最后一个元素

在 Python 里,像列表(list)、元组(tuple)和字符串(str)这类序列类型都支持切片操作,但是实际上切片操作比人们所想象的要强大很多。 在切片和区间操作里不包含区间范围的最后一个元…

0805hw

1. #include <myhead.h> void Bub_sort(int *arr,int n)//冒泡排序 {for(int i1;i<n;i){int count0;for(int j0;j<n-i;j){if(arr[j]>arr[j1]){int temparr[j];arr[j]arr[j1];arr[j1]temp;count;}}if(count0){break;}}printf("冒泡排序后输出结果:\n"…

OA会议管理系统之会议通知(送审成功可查看人员是否参与会议)

一、前言 1.导读 在上一次的博文中我们实现了会议审批&#xff0c;会议通过审批后&#xff0c;状态就会由原来的待审核变为待开&#xff0c;这时候我们就可以在我的会议下的反馈详情查看人员是否参与会议的反馈情况。这篇博客就是来了解&#xff0c;人员是怎么接收会议通知并反…

介绍Keithley2602A双通道系统数字电源

吉时利Keithley2602A双通道系统数字电源 主要特点及优点 &#xff08;131///4587//6435&#xff09; 一个紧凑的单元中综合了如下功能&#xff1a;精密电压源、高精度电流源、数字多用表、任意波形发生器、电压或电流脉冲发生器、电子负载以及触发控制器 代码后向兼容2600系列…

如何在 Android 上恢复已删除的视频|快速找回丢失的记忆

想知道是否有任何成功的方法可以从 Android 手机中检索已删除的视频&#xff1f;好吧&#xff0c;本指南将向您展示分步说明&#xff0c;让您轻松从手机中找回丢失的视频文件&#xff01; 您是否不小心从 Android 智能手机中删除了珍贵的生日视频&#xff1f;难道是无处可寻吗…

PyTorch中加载模型权重 A匹配B|A不匹配B

在做深度学习项目时&#xff0c;从头训练一个模型是需要大量时间和算力的&#xff0c;我们通常采用加载预训练权重的方法&#xff0c;而我们往往面临以下几种情况&#xff1a; 未修改网络&#xff0c;A与B一致 很简单&#xff0c;直接.load_state_dict() net ANet(num_cla…

Vector - CAPL - 诊断模块函数(发送及流控制帧)

目录 CanTpSendData - 诊断数据的发送 代码示例 CanTpGetHWSTmin & CanTpSetHWSTmin - 获取和设置硬件STMin的值 代码示例 CanTpSetSTminReduction - 将STmin设置需要的值 代码示例 CanTpGetBlockSize & CanTpSetBlockSize 代码示例 CanTpGetSTmin & Can…

一文学透设计模式

设计模式是什么&#xff1f; 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案&#xff0c;代表了解决一些问题的最佳实践。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 说白了&#xff0c;设计模式对于软件开发人员来说就…

一百四十四、Kettle——Linux上安装的kettle8.2连接MySQL数据库

一、目的 在Linux上安装好kettle&#xff0c;然后用kettle连接MySQL数据库 注意&#xff1a;kettle版本是8.2 二、实施步骤 &#xff08;一&#xff09;到kettle安装目录下启动Linux的kettle服务 # cd /opt/install/data-integration/ # ./spoon.sh &#xff08;二&#x…

【前端】搭建Vue3框架

目录 一、搭建准备二、node.js安装1、下载并安装2、配置默认安装目录和缓存日志目录①、创建默认安装目录和缓存日志目录&#xff08;我的node.js目录在D盘&#xff0c;所以直接在node.js文件夹下创建&#xff09;②、执行命令&#xff0c;配置默认安装目录和缓存日志目录到刚才…

OpenMesh 网格简化算法(基于边长度)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 网格简化的算法有很多种,基于边结构进行简化的方法便是其中一种方式。此类算法主要关注于它们如何选择要收缩的边,并且似乎都是为流形表面设计的,尽管边缘收缩也可以用于非流形表面,但往往会存在变形较大的问题…

2023-08-05 LeetCode每日一题(合并两个有序链表)

2023-08-05每日一题 一、题目编号 21. 合并两个有序链表二、题目链接 点击跳转到题目位置 三、题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例1&#xff1a; 示例2&#xff1a; 示例3&#xff1a; …

AcWing 372. 棋盘覆盖(二分图匈牙利算法)

输入样例&#xff1a; 8 0输出样例&#xff1a; 32 解析&#xff1a; n为100&#xff0c;状压肯定爆。 将每个骨牌看成二分图的一个匹配&#xff0c;即查找二分图的一个最大匹配&#xff0c;匈牙利算法。 #include<bits/stdc.h> using namespace std; const int N105…

漫画 | TCP/IP之大明邮差

后记&#xff1a; 1973年&#xff0c;卡恩与瑟夫开发出了网络中最核心的两个协议&#xff1a;TCP协议和IP协议&#xff0c;随后为了验证两个协议的可用性&#xff0c;他们做了一个实验&#xff0c;在多个异构网络中进行数据传输&#xff0c;数据包在经过近10万公里的旅程后到达…

合并果子C++详解

题目描述 在一个果园里&#xff0c;多多已经将所有的果子打了下来&#xff0c;而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。 每一次合并&#xff0c;多多可以把两堆果子合并到一起&#xff0c;消耗的体力等于两堆果子的重量之和。可以看出&#xff0c;…

Golang之路---04 并发编程——信道/通道

信道/通道 如果说 goroutine 是 Go语言程序的并发体的话&#xff0c;那么 channel&#xff08;信道&#xff09; 就是 它们之间的通信机制。channel&#xff0c;是一个可以让一个 goroutine 与另一个 goroutine 传输信息的通道&#xff0c;我把他叫做信道&#xff0c;也有人将…

MIT 6.824 -- MapReduce -- 01

MIT 6.824 -- MapReduce -- 01 引言抽象和实现可扩展性可用性(容错性)一致性MapReduceMap函数和Reduce函数疑问 课程b站视频地址: MIT 6.824 Distributed Systems Spring 2020 分布式系统 推荐伴读读物: 极客时间 – 大数据经典论文解读DDIA – 数据密集型应用大数据相关论文…

kagNet:对常识推理的知识感知图网络 8.4+8.5

这里写目录标题 摘要介绍概述问题陈述推理流程 模式图基础概念识别模式图构造概念网通过寻找路径来匹配子图基于KG嵌入的路径修剪 知识感知图网络图卷积网络&#xff08;GCN&#xff09;关系路径编码分层注意机制 实验数据集和使用步骤比较方法KAGNET是实施细节性能比较和分析I…

Redis实战(5)——Redis实现消息队列

消息队列&#xff0c;顾名思义&#xff0c;就是一个存放消息的队列。最简单的消息队列包含3个角色 生产者&#xff1a;将消息存入队列中队列&#xff1a;存放和管理消息消费者&#xff1a; 将消息从队列中取出来并做业务处理 R e d i s 提供了三种实现消息队列的方式&#x…