Diffusion学习10-图像编辑
图像编辑是Diffusion算法中一个重要的方向,其旨在对生成或者真实的图像进行操作以得到与原图相似却某在某些方面(如背景、主体、风格等)存在不同的效果,具体应用其包含换主体、换背景、主体移动等各种方向。 图像编辑示例(原图来自InstructPix2Pix) Prompt-to-Prompt 《Prompt-to-Prompt Image Editing with Cross-Attention Control》 【主页】【论文】【代码】 prompt2prompt算法框架 算法流程:提出一个training-free的图像编辑算法,无需任何其他数据和优化过程。作者观察到cross-attention层是控制图像空间layout与prompt中每个单词之间关系的关键元素,通过只修改promp..
Read moreDiffusion学习9-风格迁移
一个图像的风格可以看作是图像的色彩、纹理等与内容无关的信息,而风格迁移旨在保证生成的图像具有指定的风格(不管是通过prompt指定还是通过图像指定),对于有指定内容的风格迁移,不仅要求生成结果具有指定的风格,还要保持和内容图具有相同内容(比如语义信息、layout),风格迁移的效果可以参考下面的示意图: 风格迁移示意图,原图来自InstantStyle-Plus Style Aligned 《Style Aligned Image Generation via Shared Attention》 【主页】【论文】【代码】 StyleAligned 算法流程:本算法提出了一个training-free的方法进行风格迁移,在生成的过程中通过共享图像之间的attention特征来保证生成风格一致..
Read moreDiffusion学习8-特征保持
特征保持是Diffusion下一个重要的研究领域,其在给定同主体的一张或者多张图像的情况,生成该物体不同风格、位姿、朝向的图像,同时要保证原主体特征不变【比如粗粒度的类别、颜色,细粒度的纹理细节、人脸特征等】。 特征保持示意图【原效果分别来自CustomNet和PuLID】 其实在之前博客《Diffusion学习6-生成可控性》提到的DreamBooth、LoRA、Textual Inversion等技术就是属于特征保持的算法,但是这类算法多多少少存在训练/推理耗时久、推理数据要求高等多个问题。而最近一些的特征保持算法则在训练速度、生成效果、数据要求上都得到了全方位的优化,所以这里单独开了一个篇章进行介绍。 IP-Adapter 《IP-Adapter:Text Compatible Image Pr..
Read more论文笔记-阴影生成
阴影生成是属于Image compositing的一个小分支,其旨在于将前景“粘贴复制”到背景上时,通过给前景添加合理的阴影以提升融合度,保证最终整个效果的真实感,效果如下: 阴影生成示意图 阴影生成的两大类方法主要是包括基于渲染(如借用3D模型)或者基于生成技术(如GAN或者Diffusion等),本笔记主要是记录了后者大类的阴影生成技术。 ShadowGAN 《ShadowGAN: Shadow synthesis for virtual objects with conditional adversarial networks》 【论文】 ShadowGAN网络结构 算法流程:是第一个提出使用深度神经网络进行阴影生成的算法,主框架基于生成对抗网络完成,包含一个生成器和两个判别器(全局+局..
Read morePytorch-数据加载
pytorch数据加载常用torch.utils.data.Dataset和torch.utils.data.DataLoader两个类进行实现,简单来说: torch.utils.data.Dataset:完成数据的初步读取和加载,其内的每一条数据是"零散"的 torch.utils.data.DataLoader:对torch.utils.data.Dataset中"零散"的数据进行打包,同时也可以进行一些后处理操作和采样操作。 下面就通过代码的方式详细介绍上面的两个类。 torch.utils.data.Dataset Dataset类简单来说就是完成数据的读取操作【当然也可以做一些简单操作】,pytorch中也内置了很多常用的计算机视觉的数据集【如如MNIST、CIFAR10、ImageNet..
Read moreDiffusion学习7-DiT
Scalable Diffusion Models with Transformers 【主页】【论文】【代码】 DiT Block架构 当前主流的Diffusion模型大都采用U-Net模型作为主干网络,U-Net网络的输入和输出具有同样的尺寸,自然也很在适合Diffusion中用于预测与输入noisy latent相同尺寸的noise。但是自ViT后,Transformer结构也已经在多个视觉任务上被验证了其有效性,且相比较于CNN结构的U-Net可能还具有更好的效果。今天这篇论文则成功将transformer结构应用在Diffusion模型上,并且探究了其scalability能力,最终的实验也表明其最大的模型DiT-XL/2在ImageNet 256x256的类别条件生成上达到了SOTA(FI..
Read more论文笔记-新视角生成(NVS)
新视角生成是从一个指定的图像或者prompt作为输入,生成该物体/场景在其他视角下的情况,要求生成的结果和原始的图像/Prompt是具有语义和纹理一致性的,同时如果生成多个视角还要保证多个视角之间也是一致的。下面Zero 1-to-3的效果就能很好表明这个问题: 新视角生成示意图(原图来自Zero 1-to-3) 【1】Zero-1-to-3: Zero-shot One Image to 3D Object 【项目主页】【论文】【代码】 Zero123 算法流程:该算法借助当前强大的2D 下的Diffusion模型生成3D物体,具体步骤为: 该模型根据指定的输入图和相机变换参数,来生成该物体新位置下的新视角图,然后使用多张新视角图再配合Score Jacobian chain来优化得到最终的..
Read morePytorch-Hook机制
Hook是什么? Hook(钩子)其实并不是Pytorch特有的机制,其在软件工程中也是相当常见的,一般来说Hook表示一种自动触发的机制,即在遇到某些时间/情况之后会自动执行的事项,其实在生活中也会遇到很多Hook的事件: 移动到光线变化的环境里,手机屏幕亮度会跟着变化 水烧开后就会沸腾把壶盖顶开 火灾情况下温度升高自动触发报警系统和灭火喷头 总而言之,虽然上面很多情况即便没有Hook,我们也能实现(比如手动调亮度、手动打开报警和灭火器等),但是Hook作为一种强大的自动触发机制,能够很大程度上帮助我们提高效率。 Pytorch中的 Hook是干嘛的? 当想要查看网络输出中每层特征的shape时,有没有过手动print每个tensor.shape的情况?虽然快但是不“优雅”而且很有可能导致代码显得冗余..
Read moreDiffusion学习6-生成可控性
Diffusion相比较起前辈GAN,在生成质量上已经得到了大幅度的提升,之前的文章介绍过虽然通过prompt配合上classifier-free guidance技术能够从一定程度达到控制生成内容的目的,但是如何更加精确控制diffuison结果,例如定制化生成指定的目标对象,控制生成目标的姿态、形状、颜色等,也成为后续研究的重点,当然这些控制性生成目前也已经能够达到下图所示的非常好的效果了,本篇文章也将重点介绍些这些控制diffusion生成的大杀器。 Diffusion可控性生成效果示意效果,原图来自huggingface/lllyasviel DreamBooth 《DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subje..
Read moreDiffusion学习5-高质量文生图模型
高质量Diffusion模型生成结果(原图来自DALLE-2) DALLE系列 DALLE 《Zero-Shot Text-to-Image Generation》 【主页】【论文】【代码-非官方】 DALL·E的名字是为了向艺术家萨尔瓦多·达利和皮克斯的机器人WALL-E致敬 DALLE-2 《Hierarchical Text-Conditional Image Generation with CLIP Latents》 【主页】【论文】 DALLE-3 《Improving Image Generation with Better Captions》 【主页】【论文】 GLIDE 《GLIDE: Towards Photorealistic Image Generation and Editin..
Read more