专栏名称: 计算机视觉工坊
专注于计算机视觉、VSLAM、目标检测、语义分割、自动驾驶、深度学习、AI芯片、产品落地等技术干货及前沿paper分享。这是一个由多个大厂算法研究人员和知名高校博士创立的平台,我们坚持工坊精神,做最有价值的事~
目录
相关文章推荐
瞭望智库  ·  DeepSeek,新重磅! ·  昨天  
政事儿  ·  省委副秘书长姚轶,拟提名新职 ·  2 天前  
侠客岛  ·  初步核查29人失联,灾害原因公布 ·  2 天前  
政事儿  ·  张庆一,拟提名为市长候选人 ·  3 天前  
51好读  ›  专栏  ›  计算机视觉工坊

8行代码教你创建自己第一个扩散模型!

计算机视觉工坊  · 公众号  ·  · 2024-10-08 07:00

正文

点击下方 卡片 ,关注 「3D视觉工坊」 公众号
选择 星标 ,干货第一时间送达

来源:计算机视觉工坊

添加小助理:cv3d008,备注:方向+学校/公司+昵称,拉你入群。文末附3D视觉行业细分群。

扫描下方二维码,加入「 3D视觉从入门到精通 」知识星球 ,星球内凝聚了众多3D视觉实战问题,以及各个模块的学习资料: 近20门秘制视频课程 最新顶会论文 、计算机视觉书籍 优质3D视觉算法源码 等。想要入门3D视觉、做项目、搞科研,欢迎扫码加入!

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视觉优质源码汇总 书籍推荐







请到「今天看啥」查看全文