淘优惠

淘优惠

ppt里如何插入gif图 ppt怎么插入gif动图

热门文章 0

淘宝搜:【天降红包222】领超级红包,京东搜:【天降红包222】
淘宝互助,淘宝双11微信互助群关注公众号 【淘姐妹】

ppt里如何抠图,ppt里如何改变图片形状,ppt里如何点击文字就出现另外的文字,ppt里如何取消动画效果

怎么在PPT中插入GIF动态图?很多朋友可能还不知道,下面小编给大家整理了相关步骤介绍,感兴趣的小伙伴不要错过哦!

怎么在PPT中插入GIF动态图?PPT中插入GIF动态图教程介绍

1.在插入的时候不要使用图片的插入形式,应该选择插入影片和声音的形式。

2.此时选择框中显示的是影片文件,但我们要选择所有文件格式。

3.这样就能显示你想插入的gif图片了。

4.插入之后,按F5就可以看到,GIF图片可以动态播放。


怎么理解今年 CV 比较火的扩散模型(DDPM)?

怎么理解今年江苏高考分数线,怎么理解今年是政治年,怎么理解今年高考作文,什么是今年

DDPM真的要比GAN好么,以后可以替代GAN?还是他只是跟GAN平行的分支?生成人脸比stylegan2还好?

从底层原理上来说,DDPM优化的到底是什么?

What I cannot create, I do not understand.” -- Richard Feynman
扩散模型之DDPM

近段时间最火的方向无疑是基于文本用AI生成图像,继OpenAI在2021提出的文本转图像模型DALLE之后,越来越多的大公司卷入这个方向,如谷歌在今年相继推出了Imagen和Parti。一些主流的文本转图像模型如DALL・E 2,stable-diffusion和Imagen采用了扩散模型Diffusion Model)作为图像生成模型,这也引发了对扩散模型的研究热潮。相比GAN来说,扩散模型训练更稳定,而且能够生成更多样的样本,OpenAI的论文Diffusion Models Beat GANs on Image Synthesis也证明了扩散模型能够超越GAN。简单来说,扩散模型包含两个过程:前向扩散过程反向生成过程,前向扩散过程是对一张图像逐渐添加高斯噪音直至变成随机噪音,而反向生成过程是去噪音过程,我们将从一个随机噪音开始逐渐去噪音直至生成一张图像,这也是我们要求解或者训练的部分。扩散模型与其它主流生成模型的对比如下所示:

目前所采用的扩散模型大都是来自于2020年的工作DDPM: Denoising Diffusion Probabilistic ModelsDDPM对之前的扩散模型(具体见Deep Unsupervised Learning using Nonequilibrium Thermodynamics)进行了简化,并通过变分推断(variational inference)来进行建模,这主要是因为扩散模型也是一个隐变量模型(latent variable model),相比VAE这样的隐变量模型,扩散模型的隐变量是和原始数据是同维度的,而且推理过程(即扩散过程)往往是固定的。这篇文章将基于DDPM详细介绍扩散模型的原理,并给出具体的代码实现和分析。

扩散模型包括两个过程:前向过程(forward process)反向过程(reverse process),其中前向过程又称为扩散过程(diffusion process),如下图所示。无论是前向过程还是反向过程都是一个参数化的马尔可夫链(Markov chain),其中反向过程可以用来生成数据,这里我们将通过变分推断来进行建模和求解。

扩散过程是指的对数据逐渐增加高斯噪音直至数据变成随机噪音的过程。对于原始数据,总共包含步的扩散过程的每一步都是对上一步得到的数据按如下方式增加高斯噪音:

这里为每一步所采用的方差,它介于0~1之间。对于扩散模型,我们往往称不同step的方差设定为variance schedule或者noise schedule,通常情况下,越后面的step会采用更大的方差,即满足。在一个设计好的variance schedule下,的如果扩散步数足够大,那么最终得到的就完全丢失了原始数据而变成了一个随机噪音。 扩散过程的每一步都生成一个带噪音的数据,整个扩散过程也就是一个马尔卡夫链

另外要指出的是,扩散过程往往是固定的,即采用一个预先定义好的variance schedule,比如DDPM就采用一个线性的variance schedule

扩散过程的一个重要特性是我们可以直接基于原始数据来对任意步的进行采样:。这里定义和,通过重参数技巧(和VAE类似),那么有:

上述推到过程利用了两个方差不同的高斯分布和相加等于一个新的高斯分布。反重参数化后,我们得到:

扩散过程的这个特性很重要。首先,我们可以看到其实可以看成是原始数据和随机噪音的线性组合,其中和为组合系数,它们的平方和等于1,我们也可以称两者分别为signal_ratenoise_rate(见和Variational Diffusion Models)。更近一步地,我们可以基于而不是来定义noise schedule(见Improved Denoising Diffusion Probabilistic Models所设计的cosine schedule),因为这样处理更直接,比如我们直接将设定为一个接近0的值,那么就可以保证最终得到的近似为一个随机噪音。其次,后面的建模和分析过程将使用这个特性。

扩散过程是将数据噪音化,那么反向过程就是一个去噪的过程,如果我们知道反向过程的每一步的真实分布,那么从一个随机噪音开始,逐渐去噪就能生成一个真实的样本,所以反向过程也就是生成数据的过程

估计分布需要用到整个训练样本,我们可以用神经网络来估计这些分布。这里,我们将反向过程也定义为一个马尔卡夫链,只不过它是由一系列用神经网络参数化的高斯分布来组成:

这里,而为参数化的高斯分布,它们的均值和方差由训练的网络和给出。实际上,扩散模型就是要得到这些训练好的网络,因为它们构成了最终的生成模型

虽然分布是不可直接处理的,但是加上条件的后验分布却是可处理的,这里有:

下面我们来具体推导这个分布,首先根据贝叶斯公式,我们有:

由于扩散过程的马尔卡夫链特性,我们知道分布(这里条件是多余的),而由前面得到的扩散过程特性可知:

所以,我们有:

这里的是一个和无关的部分,所以省略。根据高斯分布的概率密度函数定义和上述结果(配平方),我们可以得到后验分布的均值和方差:

可以看到方差是一个定量(扩散过程参数固定),而均值是一个依赖和的函数。这个分布将会被用于推导扩散模型的优化目标。

上面介绍了扩散模型的扩散过程和反向过程,现在我们来从另外一个角度来看扩散模型:如果我们把中间产生的变量看成隐变量的话,那么扩散模型其实是包含个隐变量的隐变量模型(latent variable model),它可以看成是一个特殊的Hierarchical VAEs(见Understanding Diffusion Models: A Unified Perspective):

相比VAE来说,扩散模型的隐变量是和原始数据同维度的,而且encoder(即扩散过程)是固定的。既然扩散模型是隐变量模型,那么我们可以就可以基于变分推断来得到variational lower bound(VLB,又称ELBO)作为最大化优化目标,这里有:

这里最后一步是利用了Jensen's inequality(不采用这个不等式的推导见博客What are Diffusion Models?),对于网络训练来说,其训练目标为VLB取负

我们近一步对训练目标进行分解可得:

可以看到最终的优化目标共包含项,其中可以看成是原始数据重建,优化的是负对数似然,可以用估计的来构建一个离散化的decoder来计算(见DDPM论文3.3部分);而计算的是最后得到的噪音的分布和先验分布的KL散度,这个KL散度没有训练参数,近似为0,因为先验而扩散过程最后得到的随机噪音也近似为;而则是计算的是估计分布和真实后验分布的KL散度,这里希望我们估计的去噪过程和依赖真实数据的去噪过程近似一致:

之所以前面我们将定义为一个用网络参数化的高斯分布,是因为要匹配的后验分布也是一个高斯分布。对于训练目标和来说,都是希望得到训练好的网络和(对于,)。DDPM对做了近一步简化,采用固定的方差: ,这里的可以设定为或者(这其实是两个极端,分别是上限和下限,也可以采用可训练的方差,见论文Improved Denoising Diffusion Probabilistic Models和Analytic-DPM: an Analytic Estimate of the Optimal Reverse Variance in Diffusion Probabilistic Models)。这里假定,那么:

对于两个高斯分布的KL散度,其计算公式为(具体推导见生成模型之VAE):

那么就有:

那么优化目标即为:

从上述公式来看,我们是希望网络学习到的均值和后验分布的均值一致。不过DDPM发现预测均值并不是最好的选择。根据前面得到的扩散过程的特性,我们有:

将这个公式带入上述优化目标,可以得到:

近一步地,我们对也进行重参数化,变成:

这里的是一个基于神经网络的拟合函数,这意味着我们由原来的预测均值而换成预测噪音。我们将上述等式带入优化目标,可以得到:

DDPM近一步对上述目标进行了简化,即去掉了权重系数,变成了:

这里的在[1, T]范围内取值(如前所述,其中取1时对应)。由于去掉了不同的权重系数,所以这个简化的目标其实是VLB优化目标进行了reweight。从DDPM的对比实验结果来看,预测噪音比预测均值效果要好,采用简化版本的优化目标比VLB目标效果要好:

虽然扩散模型背后的推导比较复杂,但是我们最终得到的优化目标非常简单,就是让网络预测的噪音和真实的噪音一致。DDPM的训练过程也非常简单,如下图所示:随机选择一个训练样本->从1-T随机抽样一个t->随机产生噪音-计算当前所产生的带噪音数据(红色框所示)->输入网络预测噪音->计算产生的噪音和预测的噪音的L2损失->计算梯度并更新网络。

一旦训练完成,其采样过程也非常简单,如上所示:我们从一个随机噪音开始,并用训练好的网络预测噪音,然后计算条件分布的均值(红色框部分),然后用均值加标准差乘以一个随机噪音,直至t=0完成新样本的生成(最后一步不加噪音)。不过实际的代码实现和上述过程略有区别(见:先基于预测的噪音生成,并进行了clip处理(范围[-1, 1],原始数据归一化到这个范围),然后再计算均值。我个人的理解这应该算是一种约束,既然模型预测的是噪音,那么我们也希望用预测噪音重构处理的原始数据也应该满足范围要求。

前面我们介绍了扩散模型的原理以及优化目标,那么扩散模型的核心就在于训练噪音预测模型,由于噪音和原始数据是同维度的,所以我们可以选择采用AutoEncoder架构来作为噪音预测模型。DDPM所采用的模型是一个基于residual block和attention block的U-Net模型。如下所示:

U-Net属于encoder-decoder架构,其中encoder分成不同的stages,每个stage都包含下采样模块来降低特征的空间大小(H和W),然后decoder和encoder相反,是将encoder压缩的特征逐渐恢复。U-Net在decoder模块中还引入了skip connection,即concat了encoder中间得到的同维度特征,这有利于网络优化。DDPM所采用的U-Net每个stage包含2个residual block,而且部分stage还加入了self-attention模块增加网络的全局建模能力。 另外,扩散模型其实需要的是个噪音预测模型,实际处理时,我们可以增加一个time embedding(类似transformer中的position embedding)来将timestep编码到网络中,从而只需要训练一个共享的U-Net模型。具体地,DDPM在各个residual block都引入了time embedding,如上图所示。

最后,我们基于PyTorch框架给出DDPM的具体实现,这里主要参考了三套代码实现:

  • GitHub - hojonathanho/diffusion: Denoising Diffusion Probabilistic Models(官方TensorFlow实现)
  • GitHub - openai/improved-diffusion: Release for Improved Denoising Diffusion Probabilistic Models (OpenAI基于PyTorch实现的DDPM+)
  • GitHub - lucidrains/denoising-diffusion-pytorch: Implementation of Denoising Diffusion Probabilistic Model in Pytorch

首先,是time embeding,这里是采用Attention Is All You Need中所设计的sinusoidal position embedding,只不过是用来编码timestep:

# use sinusoidal position embedding to encode time step (https://arxiv.org/abs/1706.03762)     def timestep_embedding(timesteps, dim, max_period=10000):      """      Create sinusoidal timestep embeddings.      :param timesteps: a 1-D Tensor of N indices, one per batch element.                        These may be fractional.      :param dim: the dimension of the output.      :param max_period: controls the minimum frequency of the embeddings.      :return: an[N x dim]Tensor of positional embeddings.      """      half = dim // 2      freqs = torch.exp(          -math.log(max_period) * torch.arange(

撒花!PyTorch 官方教程中文版正式上线,激动人心的大好事!

撒花表情包,撒花图片,撒花女,撒花视频

红色石头的个人网站:

红色石头的个人博客-机器学习、深度学习之路

什么是 PyTorch?其实 PyTorch 可以拆成两部分:Py+Torch。Py 就是 Python,Torch 是一个有大量机器学习算法支持的科学计算框架。PyTorch 的前身是Torch,但是 Torch 是基于 Lua 语言。Lua 简洁高效,但由于其过于小众,用的人不是很多,以至于很多人听说要掌握 Torch 必须新学一门语言就望而却步。考虑到 Python 在人工智能领域的领先地位,以及其生态完整性和接口易用性,几乎任何框架都不可避免地要提供 Python 接口。终于,在 2017 年,Torch 的幕后团队使用 Python 重写了 Torch 的很多内容,推出了 PyTorch,并提供了 Python 接口。此后,PyTorch 成为最流行的深度学习框架之一。

近几年来,PyTorch 呈现大火的趋势,除了Facebook外,PyTorch 已经被 Twitter、CMU 和 Salesforce 等多个机构使用。

就在刚刚,激动人心的好消息:PyTorch 官方教程中文版正式发布啦!

教程地址:

本文档主要使用于 PyTorch 入门学者,主要参考 PyTorch 官方文档。官方教程包含了 PyTorch 介绍,安装教程;60 分钟快速入门教程,可以迅速从小白阶段完成一个分类器模型;计算机视觉常用模型,方便基于自己的数据进行调整,不再需要从头开始写;自然语言处理模型,聊天机器人,文本生成等生动有趣的项目。

总而言之:如果你想了解一下 PyTorch,可以看介绍部分。如果你想快速入门 PyTorch,可以看 60 分钟快速入门。如果你想解决计算机视觉问题,可以看 CV 部分。如果你想解决自然语言处理问题,可以看 NLP 部分。

整个教程共包含了 7 部分,内容由简单到复杂,适合不同层次的学习要求。下面分别进行介绍。

1. PyTorch 之简介与下载

  • PyTorch 简介
  • PyTorch 环境搭建- 安装 Anaconda 3.5- 安装 PyTorch & torchvision

2. PyTorch 之 60min 入门教程

  • PyTorch 入门
  • PyTorch 自动微分
  • PyTorch 神经网络
  • PyTorch 图像分类器
  • PyTorch 数据并处理

原理解释:

3. PyTorch 之入门强化教程

  • 数据加载和处理
  • PyTorch 小试牛刀
  • 迁移学习
  • 混合前端的 seq2seq 模型部署
  • 保存和加载模型
def train_model(model, criterion, optimizer, scheduler, num_epochs=25):      since = time.time()        best_model_wts = copy.deepcopy(model.state_dict())      best_acc = 0.0        for epoch in range(num_epochs):          print('Epoch{}/{}'.format(epoch, num_epochs - 1))          print('-' * 10)            # 每个epoch都有一个训练和验证阶段          for phase in ['train', 'val']:              if phase == 'train':                  scheduler.step()                  model.train() # Set model to training mode              else:                  model.eval() # Set model to evaluate mode                running_loss = 0.0              running_corrects = 0                # 迭代数据.              for inputs, labels in dataloaders[phase]:                  inputs = inputs.to(device)                  labels = labels.to(device)                    # 零参数梯度                  optimizer.zero_grad()                    # 前向                  # track history if only in train                  with torch.set_grad_enabled(phase == 'train'):                      outputs = model(inputs)                      _, preds = torch.max(outputs, 1)                      loss = criterion(outputs, labels)                        # 后向+仅在训练阶段进行优化                      if phase == 'train':                          loss.backward()                          optimizer.step()                    # 统计                  running_loss += loss.item() * inputs.size(0)                  running_corrects += torch.sum(preds == labels.
                    
                    
版权声明:除非特别标注原创,其它均来自互联网,转载时请以链接形式注明文章出处。

关于本站

Copyright © 2023 欢迎来到我的小站 备案号:粤ICP备2020117555号 |淘宝互助 |隋唐演义 | 名诗名词 | 淘宝优惠

联系我们

合作或咨询可通过如下方式:

QQ:

邮箱:

关注我们

淘优惠