1、Diffusion models代码实战:从零搭建自己的扩散模型
这个系列曾经写过三篇文章专门讲代码,分别从数据集、超参数、loss设计、参数计算、Unet结构、正向过程、逆向过程等部分详细介绍了如何搭建DDPM。Diffusion models领域发展神速,最近半年代表作品有OpenAI的GLIDE、DALL-E 2,Google Brain的ImageGen,海森堡大学的Latent Diffusion。这篇博客针对入门新手讲解一下如何利用已有的资源快速搭建自己的Diffusion models。
2、DDPM代码详细解读(1):数据集准备、超参数设置、loss设计、关键参数计算
大部分DDPM相关的论文代码都是基于《Denoising Diffusion Probabilistic Models》和《Diffusion Models Beat GANs on Image Synthesis》贡献代码基础上小改动的。官方的DDPM是tensorflow TPU版本,暂时没有GPU的版本。本篇文章开始,详细解读一下pytorch和tensorflow版本的代码。
3、DDPM代码详细解读(2):Unet结构、正向和逆向过程、IS和FID测试、EMA优化
大部分DDPM相关的论文代码都是基于《Denoising Diffusion Probabilistic Models》和《Diffusion Models Beat GANs on Image Synthesis》贡献代码基础上小改动的。官方的DDPM是tensorflow TPU版本,暂时没有GPU的版本。上一篇文章介绍了数据集加载,超参数的含义、关键参数的计算方法等,这一篇重点解读一下网络结构。
4、DDPM代码详细解读(3):图解模型各部分结构、用ConvNextBlock代替Resnet
前两篇文章讲了pytorch版本的代码,并一一介绍重要方法的原理。官方给的代码是tensorflow TPU版本,没有跑通。但是有很多人用pytorch复现了tensorflow TPU版本的代码,暂时没看见tensorflow GPU版本的代码。这篇文章解读一下对应的pytorch版本的代码,重点分析一下用最新的ConvNextBlock代替ResBlock效果。
5、手把手写Generative score-based models代码
作为和DDPM同宗同源的score-based models,虽然没能做到如此火爆,但是其中很多思想都被后来的研究者们借鉴,这篇博客就详细讲解score-based models代码,手把手带读者生成自己的MNIST。
6、如何用Diffusion models做interpolation插值任务?——原理解析和代码实战
很多Diffusion models的论文里都演示了插值任务,今天我们讲解一下如何用DDIM/DDPM做interpolation任务,剖析原理,并给出代码讲解与实战。
7、详细解读Latent Diffusion Models:原理和代码
CVPR 2022中的一项新工作latent diffusion models引起了广泛关注,提出了两段式diffusion models能有效节省计算资源,latent attention技术为通用image-to-image任务打下基础,让人耳目一新,具有极强的借鉴意义和启发性,值得深度阅读。
8、代码讲解——用diffusion models级联式超分辨重建
去年写过一篇文章《Diffusion Models在超分辨率领域的应用》,介绍diffusion models超分辨率重建方面工作。如今级联法已经成为diffusion models大模型的标配,主要原因有两点:1)直接训练256*256设置512*512分辨率的模型,硬件能力无法胜任。2)diffusion models超分模型已经能取得非常棒的效果,而且用相同的信息注入方式,完美贴合各种多模态任务。
9、DDIM代码详细解读(1):数据集加载、类别条件信息读取、关键超参数解析
之前写过三篇详细解读DDPM代码的博客,随着时间已经来到2022年7月,单纯使用DDPM已经逐渐被淘汰,最新的论文更多使用DDPM的改进版本。DDIM作为DDPM最重要的改进版本之一,从本篇博客开始详细解读一下DDIM代码。本文主要讲解如何加载数据集,如何读取类别条件信息,以及关键的超参数如何计算。
10、DDIM代码详细解读(2):关键参数计算、损失函数设计、添加时间步长信息、归一化设计
之前写过三篇详细解读DDPM代码的博客,随着时间已经来到2022年7月,单纯使用DDPM已经逐渐被淘汰,最新的论文更多使用DDPM的改进版本。DDIM作为DDPM最重要的改进版本之一,从本篇博客开始详细解读一下DDIM代码。这篇博客详细讲解一下如何计算关键参数,如何设计损失函数,如何添加时间步长信息,如何设计损失函数。
11、DDIM代码详细解读(3):核心采样代码、超分辨率重建
之前写过三篇详细解读DDPM代码的博客,随着时间已经来到2022年10月,单纯使用DDPM已经逐渐被淘汰,最新的论文更多使用DDPM的改进版本。DDIM作为DDPM最重要的改进版本之一,从本篇博客开始详细解读一下DDIM代码。这篇博客详细讲解一下如何设计核心采样代码、 如何用diffusion models做超分辨重建。
12、DDIM代码详细解读(4):分类器classifier的网络设计、训练、推理
之前写过三篇详细解读DDPM代码的博客,随着时间已经来到2022年11月,单纯使用DDPM已经逐渐被淘汰,最新的论文更多使用DDPM的改进版本。DDIM作为DDPM最重要的改进版本之一,从本篇博客开始详细解读一下DDIM代码。这篇博客详细讲解一下如何设计分类器,如何训练分类器,如何在推理过程中使用分类器。
13、深入解读GLIDE/PITI代码
GLIDE是diffusion models text-to-image的一项非常经典的模型,PITI是一项基于GLIDE的工作,读懂PITI相当于读懂GLIDE,这篇文章就和读者一起解读代码,难以描述的地方会画出程序流程图解释。点赞打卡,立马启程!
14、如何定制属于自己的stable diffusion?Dreambooth原理详解和代码实战
AIGC大模型(如stable diffusion models)的训练成本已经超过绝大多数人的承受范围,彻底沦为中大厂/科研大组的“御用品”,这也是大模型时代的必然趋势。如何利用已有的开源大模型,微调出属于自己的专有模型?如何定制化自己专属扩散模型?这些问题无疑让我们这些没有资源直接训练达模型的人感到兴奋!dreambooth这篇论文出现的非常早,去年就已经大火过。经过时间的沉淀,现在定制化自己的diffusion大模型基本只剩下Dreambooth、textual inversion、LORA和Hypernetworks四种方法。笔者会依次带大家一一探索这些方法,一起玩转属于自己的diffusion!
15、详细解读Diffuser DreamBooth代码
之前的博客《如何定制属于自己的stable diffusion?Dreambooth原理详解和代码实战》详细解读了dreambooth,不过那篇博客的代码讲解部分主要基于mmagic,不过瘾。这篇博客讲解一下diffuser的drembooth的部分。
16、详细解读ControlNet diffusers版本代码
ControlNet的原理部分可以看我之前写的博客《Image-to-Image任务的终结者:详解ControlNet原理与代码》 ,这篇博客主要讲解一下diffusers版本的ControlNet代码,从代码中洞悉原理,加深理解。
17、由浅入深理解Latent Diffusion/Stable Diffusion(5):利用预训练模型快速开始自己的科研任务
从零开始训练一个stable diffusion大概需要16万美元和1个月的时间,这对于一般的科研工作者来说难以承受,所以如何利用预训练模型快速开始自己的科研训练是一个非常有价值的问题。这篇博客将演示如何利用预训练模型快速开始自己的科研任务,希望对大家有所帮助!
18、代码解析:Stable Diffusion中Style控制是如何作用的?
不少读者发现,在Stable Diffusion的Webui上都有风格控制的功能,特别是Stable Diffusion XL的Style控制效果非常好。这篇博客讲解一下背后的技术和代码实现。
19、代码解读:如何微调Stable Video Diffusion?
Stable Video Diffusion是目前已开源的视频生成模型中效果最好的,微调Stable Diffusion图像模型的教程非常多,但是微调Stable Diffusion视频模型的教程几乎没有。这篇博客给出微调视频扩散模型的代码教程,希望能对读者们有所启发。
20、代码解读:Stable Video Diffusion 中对运动程度的控制
在SVD中,对运动的控制可以分成对镜头运动的控制和对内容运动的控制,这篇博客详细通过代码讲解如何对内容运动的控制。
21、代码解读:使用Stable Diffusion完成相似图像生成任务
作为内容生产重要的一部分,生成相似图像是一项有意义的工作,例如很多内容创作分享平台单纯依赖用户贡献的图片已经不够了,最省力的方法就是利用已有的图片生成相似的图片作为补充。这篇博客详细解读基于Stable Diffusion生成相似图片的原理和代码。
22、代码讲解:详细解读Diffusion Models中的noise augmentation(噪声增强)技术
做图像超分或者视频生成的小伙伴可能会经常看到训练时会用到noise augmentation技术,但是去Google/百度直接搜索,居然前三页都没有相关讲解。这篇博客就从原理和代码的角度详细解读一下Diffusion Models中的noise augmentation技术。
23、代码实战:使用Stable Diffusion完成虚拟模特换衣任务
之前在博客《解读DreamPose:基于Diffusion Models的模特视频生成》中介绍了如何生成模特换衣的视频,在电商场景下得到了广泛的应用。由于视频生成的技术还不太成熟,但是模特换衣图片生成却非常成熟,这篇博客从代码角度讲解如何完成这一任务。
25、代码解读:MimicMotion: High-Quality Human Motion Video Generation with Confidence-aware Pose Guidance
最近一年有很多非常火的人类跳舞视频生成的工作,最近腾讯出品了基于SVD模型的MimicMotion,是目前生成结果最好、效果最稳定、分辨率最高、人物ID特征保持最好的工作,这篇博客结合论文原理和细节,深入解读《MimicMotion: High-Quality Human Motion Video Generation with Confidence-aware Pose Guidance》的代码。
26、代码解读:Diffusion Models中的长宽桶技术(Aspect Ratio Bucketing)
自从SDXL提出了长宽桶技术之后,彻底解决了不同长宽比的图像输入问题,现在已经成为训练扩散模型必选的方案。这篇博客从代码详细解读如何在模型训练的时候运用长宽桶技术(Aspect Ratio Bucketing)。
27、源码剖析:详细解读基于DiT结构的视频生成模型EasyAnimate
Sora发布半年之后,开源社区也有很多有影响力的工作如Open-Sora、EasyAnimate、Open-Sora-Plan等,这些都复现了Sora里面的经典思想。这篇博客以《EasyAnimate: A High-Performance Long Video Generation Method based on Transformer Architecture》为例,详细解读EasyAnimate的代码,希望对follow Sora的读者有所帮助。
28、Open-Sora代码详细解读(1):解读DiT结构
目前开源的DiT视频生成模型不是很多,Open-Sora是开发者生态最好的一个,涵盖了DiT、时空DiT、3D VAE、Rectified Flow、因果卷积等Diffusion视频生成的经典知识点。本篇博客从Open-Sora的代码出发,深入解读背后的原理。
29、代码讲解:视频扩散模型中的时间层和空间层区别到底是什么?
虽然3D全卷积已经在CogVideo等模型上应用,可能会逐步取代时间层+空间层的扩散模型,但是目前时空层扩散模型依旧是视频生成领域的主要结构,这篇博客以DiT-based模型的为例,详细讲解视频扩散模型中的时间层和空间层区别到底是什么?他们之间的作用到底是什么?我们在训练/微调过程中需要如何利用他们各自的特点?
30、Open-Sora代码详细解读(2):时空3D VAE
目前开源的DiT视频生成模型不是很多,Open-Sora是开发者生态最好的一个,涵盖了DiT、时空DiT、3D VAE、Rectified Flow、因果卷积等Diffusion视频生成的经典知识点。本篇博客从Open-Sora的代码出发,深入解读背后的原理。
31、扩散模型代码实战:无条件图像生成扩散模型
无条件生成模型是最经典的扩散模型生成任务,是指模型经过训练后,生成与其训练数据分布相似的图像。由于不需要复杂的条件控制,非常适合刚入门的读者学习扩散模型的本质知识。这篇博客以代码为主,以原理为基石,深入讲解如何训练和推理无条件图像生成扩散模型。
32、扩散模型实战:从零开始训练手写数字生成模型
手写数字的数据集是绝大部分炼丹师的深度学习初恋,这篇博客以代码为主,手把手带读者搭建一个基于扩散模型的手写数字生成模型,非常适合刚接触扩散模型的初学者学习。
33、代码实战:使用扩散模型微调生成自己曲风的音频
扩散模型在图像领域的成功人尽皆知,其实扩散模型在音频领域相当成功,可以根据输入的一小段音频,就能微调生成出自己曲风的音频。这篇博客从代码开始讲解,使用预训练的音频扩散模型微调生成自己曲风的音频。
34、原理&代码解读:ControlNeXt: Powerful and Efficient Control for Image and Video Generation
ControlNet可以说是Diffusion Models条件生成领域最成功的作品之一,但是ControlNet的额外开销实在是太大了,可训练参数相当于所有预训练参数的近一半。除此之外,ControlNet采用零初始化会导致收敛速度慢,会阻止模块从损失函数接收准确的梯度。ControlNeXt完美解决了ControlNet存在的问题,很可能是下一代条件生成最成功的作品!这篇博客将从代码和原理的角度,全面解析ControlNeXt。
35、原理&代码解读:基于DiT结构视频生成模型的ControlNet
相比于基于UNet结构的视频生成模型,DiT结构的模型最大的劣势在于生态不够完善,配套的ControlNet、IP-Adapter等开源权重不多,导致难以落地。最近DiT-based 5B的ControlNet开源了,相比于传统的ControlNet有不少改进点,这篇博客将从原理和代码上重点解读一下。
36、详细解读个性化定制大杀器IP-Adapter代码
IP-Adapter作为Diffusion Models最成功的技术之一,已经在诸多互联网应用中落地。介绍IP-Adapter原理和应用的博客有很多,但是逐行详细解读代码的博客很少。这篇博客从细节出发,结合原理详细解读个性化定制大杀器IP-Adapter代码。
37、代码解读:CogVideoX-5B 1.0和CogVideoX-5B 1.5的区别
CogVideoX-5B 1.5相比于CogVideoX 5B-1.0在各个方面都有一个明显的提升,CogVideoX1.5-5B系列支持更高分辨率的10秒视频,CogVideoX1.5-5B-I2V支持任何分辨率的视频生成。但是由于模型架构等方面没有较大的改动,所以官方并没有公开技术报告。笔者详细阅读代码后发现,1.5版本相比于1.0的改动其实不少,这篇博客就详细介绍一下CogVideoX-5B 1.0和CogVideoX-5B 1.5的区别。
38、代码解读:如何将T2V模型训练成I2V模型?以CogVideoX为例
目前基础模型的训练大家都倾向于先训练一个T2V的模型,然后在T2V模型的基础上用少量数据(百万量级)训练出一个I2V模型。这篇博客以CogVideoX为例子,介绍Inpaint(CogVideoX-FUN)和Concat(CogVideoX-Factory)两种方法将将T2V模型训练成I2V模型。
39、详细解读经典跨模态对齐技术Q-Former代码
介绍BLIP2的博客层出不穷,介绍Q-Former的博客也不少,但是详细解读Q-Former代码的博客很少。这篇博客希望以代码为基础,讲明白Q-Former的原理和核心思想,并详细解读一些值得注意的细节。希望读者们能从这一经典技术中朝花夕拾,得到启发。
40、代码实战:使用Enhance-A-Video增强EasyAnimate视频生成的结果
今天是2025年的第一天,先祝大家元旦快乐!上一篇博客《原理&代码详细解读:一行代码增强HunYuan/CogVideox视频生成的利器Enhance-A-Video》讲解了Enhance-A-Video的原理以及在HunYuan/CogVideox上的应用。由于官方版本并没有提供对EasyAnimate的支持,因此这篇博客从代码实战出发,讲解如何写一个用Enhance-A-Video支持EasyAnimate生成的效果。
41、代码实战:使用LoRA训练HunYuan Video生成定制肖像视频(附调参经验)
使用Diffusion Models定制肖像图片的教程很多,效果也很不错。之前也有基于AnimateDiff/CogVideox定制肖像视频工作,但是相比于HunYuan Video效果差距很大。毫不夸张的说,HunYuan Video生成定制肖像视频已经能达到以假乱真的程度!这篇博客主要讲述如何通过几张自己的肖像照片,使用LoRA训练HunYuan Video生成定制肖像视频。
42、解读HunYuan Video代码(1):揭秘核心双流+单流的MM-DiT结构
FLUX和HunYuan-Video是目前开源效果最好的图像生成模型和视频生成模型,背后成功的关键之一就是双流+单流MM-DiT。很多社区的朋友讨论说DiT的效果很多方面表现不如UNet,诚然,改进版本双流+单流MM-DiT才是彻底击败UNet的关键。这篇博客是解读HunYuan Video代码的第一篇,首先解读最核心的网络结构。
43、论文和代码解读:RF-Inversion 图像/视频编辑技术
Rectified Flow的反演和DDIM这些不太一样,上一篇博客中介绍了腾讯提出的一种方法《基于Rectified Flow FLUX的图像编辑方法 RF-Solver》,主要就是用泰勒展开和一阶导数近似来分解反演公式。这篇博客介绍谷歌提出的方法RF-Inversion,这篇工作更有名,贡献度更高。
44、在Hunyuan Video上实现RF-Inversion
前面的博客《论文和代码解读:RF-Inversion 图像/视频编辑技术》,但是原始代码是基于FLUX和SD3实现的,这篇博客讲解一下如何在Hunyuan Video上实现RF-Inversion 。
45、RF-Solver(Taming Rectified Flow for Inversion and Editing) 代码解读
之前在博客《基于Rectified Flow FLUX的图像编辑方法 RF-Solver》中介绍了一种RF反演方法RF-Solver的原理,这篇博客从实战角度出发,详细解读其代码。
46、代码解读:如何将HunYuan T2V模型训练成I2V模型?
HunYuan T2V模型出来很久了,但是想要训练成I2V的模型还是有点难度。此外,还有很多预训练视频模型都是T2V的,可以借鉴本文的方法加入参考图作为条件,并严格保持视频的第一帧与Image一样。
47、论文和代码解读:Training Free的FLUX图像编辑方法Stable Flow
图像编辑一直是显卡资源不充足的研究组首选的 Diffusion 研究方向,当然不仅仅是这个方向对资源的要求比较低,更多是因为用于图像编辑的大规模配对数据集实在很难获取。其实图像编辑可以泛化到很多low-level方向,如去噪、去雾、去雨等,是一个广义上的image-to-image任务。
48、原理和代码解读:通义万相 WanX 2.1 视频生成模型
昨晚通义万相 WanX 2.1开源了,在多个指标上超越了sora、可灵、runway、hunyuan等模型。但是生成类的任务不能仅仅只看指标,实际的效果怎样?WanX 2.1 的技术架构是怎样的?有哪些技术改进?如何从T2V改造成I2V的模型的?这篇博客从原理和代码上详细解读这些问题。
49、原理和代码解读:音频驱动数字人经典项目AniPortrait
现在基于Diffusion的音频驱动数字人的工作有很多,其效果也是各有千秋。这篇博客解读一篇经典的工作AniPortrait,搞懂这篇经典之作,对于理解其他数字人的工作有很多好处。