1. Pytorch中的扩散模型
虽然扩散模型还没有普及到与机器学习中的其他旧架构/方法相同的程度,但仍然有可供使用的实现。在PyTorch中使用扩散模型最简单的方法是使用denoising-diffusion-pytorch包,它实现了一个像本文中讨论的图像扩散模型。要安装该软件包,只需在终端中键入以下命令:
pip install denoising_diffusion_pytorch
2. 最小示例
为了训练模型并生成图像,我们首先导入必要的包:
import torch from denoising_diffusion_pytorch
import Unet, GaussianDiffusion
接下来,我们定义我们的网络架构,在这种情况下是U-Net。这dim参数指定第一次向下采样前的特征映射数,而dim_mults参数为此值和后续下采样提供被乘数:
model = Unet( dim = 64, dim_mults = (1, 2, 4, 8) )
既然我们的网络架构已经定义,我们需要定义扩散模型本身。我们传入刚刚定义的U-Net模型以及几个参数——要生成的图像的大小,扩散过程中的时间步长数,以及在L1和L2规范之间的选择。
推荐课程:
面向三维视觉的Linux嵌入式系统教程[理论+代码+实战]
。
diffusion = GaussianDiffusion( model,
image_size = 128,
timesteps = 1000, # number of steps
loss_type = 'l1' # L1 or L2 )
既然定义了扩散模型,就该训练了。我们生成随机数据进行训练,然后以通常的方式训练扩散模型:
training_images = torch.randn(8, 3, 128, 128)
loss = diffusion(training_images)
loss.backward()
一旦模型训练完毕,我们就可以通过使用sample()的方法diffusion对象。这里,我们生成了4幅图像,这些图像只是噪声,因为我们的训练数据是随机的:
sampled_images = diffusion.sample(batch_size = 4)
3. 训练自定义数据
这denoising-diffusion-pytorch软件包还允许您在特定数据集上训练扩散模型。只需替换'path/to/your/images'中数据集目录路径的字符串Trainer()对象,然后更改image_size设置为适当的值。之后,只需运行代码来训练模型,然后像以前一样进行采样。注意,PyTorch必须在启用CUDA的情况下编译,以便使用Trainer类别:
from denoising_diffusion_pytorch import Unet, GaussianDiffusion, Trainer
model = Unet( dim = 64, dim_mults = (1, 2, 4, 8) ).cuda()
diffusion = GaussianDiffusion( model, image_size = 128, timesteps = 1000, # number of steps loss_type = 'l1' # L1 or L2 ).cuda()
trainer = Trainer( diffusion, 'path/to/your/images', train_batch_size = 32, train_lr = 2e-5, train_num_steps = 700000, # total training steps gradient_accumulate_every = 2, # gradient accumulation steps ema_decay = 0.995, # exponential moving average decay amp = True # turn on mixed precision )
trainer.train()
下面您可以看到从多元高斯噪声到MNIST数字的渐进去噪,类似于反向扩散:
4. 最后
扩散模型是一种概念上简单而优雅的数据生成方法。他们最先进的成果与非对抗性训练相结合,使他们达到了很高的水平,鉴于他们的新生状态,预计在未来几年还会有进一步的改进。特别是,已经发现扩散模型对于尖端模型的性能至关重要。
本文仅做学术分享,如有侵权,请联系删文。
3D视觉交流群,成立啦!
目前我们已经建立了3D视觉方向多个社群,包括
2D计算机视觉
、
最前沿
、
工业3D视觉
、
SLAM
、
自动驾驶
、
三维重建
、
无人机
等方向,细分群包括:
工业3D视觉
:相机标定、立体匹配、三维点云、结构光、机械臂抓取、缺陷检测、6D位姿估计、相位偏折术、Halcon、摄影测量、阵列相机、光度立体视觉等。
SLAM
:视觉SLAM、激光SLAM、语义SLAM、滤波算法、多传感器融合、多传感器标定、动态SLAM、MOT SLAM、NeRF SLAM、机器人导航等。
自动驾驶:深度估计、Transformer、毫米波|激光雷达|视觉摄像头传感器、多传感器标定、多传感器融合、自动驾驶综合群等、3D目标检测、路径规划、轨迹预测、3D点云分割、模型部署、车道线检测、Occupancy、目标跟踪等。
三维重建
:3DGS、NeRF、多视图几何、OpenMVS、MVSNet、colmap、纹理贴图等
无人机
:四旋翼建模、无人机飞控等
2D计算机视觉
:图像分类/分割、目标/检测、医学影像、GAN、OCR、2D缺陷检测、遥感测绘、超分辨率、人脸检测、行为识别、模型量化剪枝、迁移学习、人体姿态估计等
最前沿
:具身智能、大模型、Mamba、扩散模型等
除了这些,还有
求职
、
硬件选型
、
视觉产品落地、产品、行业新闻
等交流群
添加小助理: dddvision,备注:
研究方向+学校/公司+昵称
(如
3D点云+清华+小草莓
), 拉你入群。
▲长按扫码添加助理:cv3d008
3D视觉知识星球
「
3D视觉从入门到精通
」知识星球,已沉淀6年,星球内资料包括:
秘制视频课程近20门
(包括
结构光三维重建、相机标定、SLAM、深度估计、3D目标检测、3DGS顶会带读课程、三维点云
等)、
项目对接
、
3D视觉学习路线总结
、
最新顶会论文&代码
、
3D视觉行业最新模组
、
3D视觉优质源码汇总
、
书籍推荐