#Chat-Edit-3D
编辑能力无上限!北航&谷歌&旷视等开源Chat-Edit-3D: 3D 场景编辑新范式!
本文提出了一种全新的3D场景编辑新范式—CE3D。该方法基于大规模语言模型,通过解耦2D编辑和3D重建过程,实现了灵活且高效的任意模型的集成,大大丰富了文本对话能力和场景编辑能力。
文章链接:https://arxiv.org/abs/2407.06842
代码:https://github.com/Fangkang515/CE3D/tree/main
引言
过去的3D场景编辑方法往往局限于固定的文本输入模式和有限的编辑能力。用户需要学习特定的命令或特定的多模态模型来实现所需的效果。而且,这些方法通常只能进行简单的编辑,难以实现复杂的场景变换。然而实际应用中,用户的语言是及其丰富的,用户的编辑需要也是多种多样的,当前的方法的设计范式均无法满足用户的诉求。
为了突破这些限制,本文提出了一种全新的3D场景编辑新范式—CE3D。该方法基于大规模语言模型,通过解耦2D编辑和3D重建过程,实现了灵活且高效的任意模型的集成,大大丰富了文本对话能力和场景编辑能力。
什么是CE3D?
CE3D,即Chat-Edit-3D,对话式3D场景编辑的突破。它的核心思想是通过大规模语言模型解析用户的任意文本输入,并自主调用相应的视觉模型来完成3D场景的编辑。为了实现任意视觉模型的集成,CE3D设计了名为Hash-Atlas的映射网络,将3D场景的编辑转换为2D图集空间内的操作,从而实现了2D编辑与3D重建过程的完全解耦,从此无需再指定固定的3D表示形式和2D编辑方法。
文章主要贡献如下:
- Hash-Atlas映射网络:通过将3D场景的编辑转化为2D图集的操作,避免了传统管道架构中的3D模型和2D模型间复杂耦合的问题。
- 对话框架:借助大规模语言模型,CE3D能够解析用户文本输入,生成相应的响应,并管理多种视觉模型和场景文件。
- 实验结果:CE3D展示了强大的扩展性,兼容各种现有的2D和3D视觉模型,支持多轮对话,并在文本解析、编辑能力和交互自然性方面显著优于以往方法 。
方法
首先说明CE3D 整体pipeline(下图3),然后介绍Hash-Atlas网络的设计、atlas空间中的编辑策略以及CE3D中对话系统的组件。
Hash-Atlas网络
本节介绍了一种简单的方法,将场景的各个视图直接映射到2D图集上,从而将3D场景编辑过程重新定位到2D空间中。类似的技术最初用于将视频帧映射到图集,需要连续帧和平滑的摄像机运动,这与本文中使用的3D场景数据不同。为了实现本文所述的编辑功能,图集应满足以下条件:
- 防止图集中的过度失真和倾斜,以保持视觉模型的理解。
- 前景和背景图集应大致对齐,以确保精确编辑。
- 需要更快且更精确的映射,以促进高效编辑。
Hash-Atlas公式
为了满足上述条件,设计了一个基于哈希结构的网络,如下图4所示。
当图集被编辑后,通过方程3可以在不重新训练Hash-Atlas网络的情况下恢复3D场景每个视图的编辑效果。
训练和损失项
在图集空间中编辑
本文发现,直接编辑两个图集然后将它们映射回场景视图通常不会产生令人满意的编辑结果。这主要是因为单个图集包含的场景信息不完整,特别是在稀疏的前景图集中。这种限制使得编辑模型无法获取完整的场景语义,从而始终无法实现可靠的编辑。因此,设计了一种用于编辑图集的合并-拆分策略。在此过程中,利用ChatGPT的解析能力和VQA模型来识别编辑区域。如果这些区域涉及前景内容,我们将前景图集覆盖在背景图集上,并将其作为实际的编辑图集。随后,使用原始前景mask和新对象mask来分离编辑后的图集。用“执行器”来表示实际的编辑过程,如前面图3所示。
对话系统
对场景名称的敏感度
作为一种语言模型,ChatGPT无法直接访问文本以外的信息。然而,考虑到编辑过程中涉及的大量文件,将所有这些文件作为文本输入到ChatGPT中是不现实的。因此,用格式为‘xxx.scn’的单个字符串来表示所涉及的文件。这个字符串是唯一且无意义的,以防止ChatGPT捏造场景名称。尽管这个场景名称并不是一个真正可读的文件,但通过前端和后端的进一步处理,CE3D可以有效地处理真实文件。前端将编辑结果和ChatGPT的输出组织成用户回复,而后端则分发编辑过程中涉及的真实场景文件,并管理新场景的名称和文件。
用户查询的推理
在面对用户输入时,ChatGPT模拟一个思考过程:“我需要使用视觉工具吗?”→“我需要哪些工具?”→“这些工具的具体输入应该是什么?”。因此,预先向ChatGPT注入每个视觉专家的信息以完成这个推理过程是至关重要的。类似于[62, 66],将每个视觉工具标注为四个类别:工具名称、在什么情况下使用、所需参数和具体输入示例。
编辑能力展示
在多轮对话编辑案例中,CE3D能够处理各种类型的编辑请求,例如精准对象移除或替换、基于文本或图像的风格迁移、深度图预测、基于文本和深度图条件的场景再生、人体Pose预测、场景超分、场景分割等。此外,它还可以完成与场景相关的视觉问答任务和基本的文本对话。总之,因为能任意扩展视觉模型,因此编辑能力无上限!
未来展望
虽然CE3D在3D场景编辑方面取得了显著进展,但研究人员表示,这项技术仍有改进空间。例如,在处理360度全景场景时可能会遇到一些挑战,还有进一步研究的空间。
#GLWS
一个通用高效的框架统一弱监督学习
本文提出GLWS,一种基于最大期望算法(Expectation-Maximization, EM)的弱监督学习框架,通过将各种弱监督形式建模为非确定性有限自动机(Non-determinstic Finite Automata, NFA),并结合前向后向算法,高效的解决所提出的EM框架。
近年来,机器学习在各个领域展现出了惊人的性能表现,然而,获取高质量的大规模标注数据在实际应用中往往困难重重。本文介绍了一个应对这一挑战的通用框架——从弱监督中学习的通用框架(GLWS)。本文由来自卡耐基梅隆大学、微软研究院、新加坡科技设计大学等机构的研究人员共同完成,展示了一种通过期望最大化(EM)算法学习来自各种弱监督源的通用方法,在十几个弱监督问题中显著提升了模型的可扩展性和性能。
论文链接:https://arxiv.org/abs/2402.01922
论文代码:https://github.com/Hhhhhhao/General-Framework-Weak-Supervision
背景介绍:弱监督学习的挑战
弱监督标签在机器学习应用时广泛存在,比如噪音标签(noisy label), 单个数据对应多个标签(partial label/crowdsourcing), 多个数据对应单个标签(multiple-instance learning/label proportion)。在每个不同标签的场景下都有很多方法被提出。然而弱监督学习仍然面临着两个主要挑战:
- 处理多种弱监督配置的普适性: 过去的传统方法通常需要针对特定形式的弱监督设计特定的解决方案,难以在多种弱监督形式下普遍适用。然而实际应用中非常可能多种弱监督标签共同存在。
- 现有算法的复杂性导致的可扩展性问题: 过去的方法通常通过过于简单的假设或者过于复杂的模块设计来解决多种弱监督的问题,导致这些方法没办法很好的被大规模的实际应用。
本文提出GLWS,一种基于最大期望算法(Expectation-Maximization, EM)的弱监督学习框架,通过将各种弱监督形式建模为非确定性有限自动机(Non-determinstic Finite Automata, NFA),并结合前向后向(Forward-Backward Algorithm)算法,高效的解决所提出的EM框架。GLWS使得EM计算的时间复杂度从传统方法的二次或阶乘级别降低到了线性级别,并且可以广泛的应用于不同的弱监督场景(14+)。
弱监督分类学习的通用EM框架
全监督学习
弱监督学习
注:以上假设对于non-sequential network来说是完全准确的。
GLWS: 高效解决EM弱监督学习
非确定性有限自动机(NFA)
动态规划算法
以上算法可以通过把不同类别都表示为一个二分类问题从而简单的扩展到多分类问题上。
实验结果
我们在CIFAR-10、CIFAR-100、STL-10和ImageNet-100等多个数据集上进行了实验,GLWS在14个弱监督学习任务中都表现出色。例如,在ImageNet-100数据集上,GLWS在部分标签学习任务中的准确率相比之前最好的方法提高了1.28%。这里我们只展示部分结果,更多结果可以查看论文。
算法分析
我们同时对GLWS进行了一些算法层面的分析。
相比于之前的方法,GLWS展现出来稳定的快速收敛。
对于不同, GLWS展现符合预期的线性复杂度。
实践意义
GLWS不仅提高了机器学习模型在弱监督条件下的扩展性和性能,还为实际应用中的大规模部署铺平了道路。代码已开源,可供研究人员和开发者进一步研究和应用。
通过GLWS框架,弱监督学习不再局限于特定的场景,变得更加普遍适用和高效。GLWS的计算复杂度可以进一步被优化,融入NFA minimization和determinization来简化图。GLWS也可以被扩展到其他的sequential的任务中。期待未来更多的研究能够基于此框架以及GLWS和foundation model的交叉。
#Any2Point
首个多模态3D统一大范式,只需1%的参数量即可超越现有SOTA!
首次提出了3D-多模态大一统范式,将任意模态的预训练大模型,无缝适用到3D领域,并且取得了SOTA的结果!
作者单位:上海人工智能实验室,西北工业大学,香港中文大学,北京大学,电信AI
代码链接:https://github.com/Ivan-Tang-3D/Any2Point
论文链接:https://arxiv.org/pdf/2404.07989.pdf
中稿会议:ECCV 2024
目前主要设计将2D预训练模型应用到3D领域,而对于不同模态迁移到3D的通用方法却相对缺乏。在这篇文章中,我们提出了一种名为Any2Point的高效参数微调框架,该框架克服了现有的空间几何损失和计算成本高的问题。它允许各种模态(包括视觉、语言和音频)的大型模型进行3D理解,并且只需使用原模型参数量的1%便能在后续任务中达到超越现有最佳(SOTA)的表现!
一.出发点
现有的将2D大模型迁移到3D领域的范式旨在利用2D领域丰富的上下文和纹理知识,以提升对3D物体场景的理解能力。目前这类研究主要分为两个方向:一是数据模态的转换,该方法通过将3D点云数据转换为2D图像并输入到2D预训练模型中。PointCLIP V1和V2首先采用了CLIP的2D预训练知识,通过将3D点云投影到2D图像作为输入到预训练的骨干网络。P2P还提出了通过可学习的着色模块进行2D到3D的投影。尽管这些方法在下游任务上表现出色,但模态转换过程不可避免地导致3D数据中空间信息的丢失;二是跨模态的知识蒸馏,该方法通过将2D或视觉语言模型的预训练知识转移到3D模型。Image2Point提出了通过卷积层膨胀将2D语义转移到3D。ACT利用预训练的2D和语言变换器作为跨模态教师,通过离散变分自编码和提示调整进行3D学习。这不仅要求在训练时同时处理2D和3D模型,而且极度依赖大量的2D至3D配对数据。除了上述问题外,更重要的是,当前的方法主要关注从2D视觉到3D点云的模型适应,而不是用于其他模态的共享方法。
因此,我们开发一种通用的任意模态迁移到3D范式框架Any2Point,利用参数高效微调(PEFT)使得任何模态的大型模型都能够高效和有效地理解点云。我们的框架避免了点云投影,从而减少了3D信息损失,并直接微调来自其他模态的预训练模型,节省了知识蒸馏的资源,进一步减少可学习参数量并大大提高性能。Any2Point仅利用1.0%的可训练参数在多种任务上的表现均优于现有的3D预训练模型。
图一
二.具体实现方案
整体流程如图一所示:为了编码输入的点云, 我们丢弃了预训练模型中的原始嵌入模块, 例如1D语言模型中的Tokenizer和2D视觉/音频模型中的卷积,并使用3D小型网络对点云进行编码。在此基础上,编码后的3D令牌首先被送入3D到任意模态虚拟投影模块(3D-Any Virtual Projection Module)进行位置编码。这一设计的初衷是使源模态(1D/2D)的位置信息能够分配到每个3D Token上。然后进入冻结的1D/2D 变压器大模型,与任意模态到3D指导适配器(Any-3D Guided Adapter)进行交互,为了促进基于1D/2D引导的3D表示的适应性学习。整套框架中仅有最初的点云标记化网络和后续加入的适配器部分具有可学习能力。
图二
3D到任意模态的虚拟投影模块如图二所示: 由于预训练模型最初训练的空间处在1D/2D空间,若在我们的框架中设计新的3D位置编码,会在训练过程中和预训练模型冻结权重出现语义上的不匹配。为了解决这一问题,我们通过将3D Token虚拟地投影回源模态,从而获取适当的位置编码。在处理2D视觉和音频模态的Transformer时,我们采用PointCLIP中无需学习参数的简单投影方式将每个3D坐标虚拟地投影到M个不同的视图上,以获得2D空间中的多样性的位置坐标信息,并且我们不实际生成多视图图像。同样地,对于1D语言模态的 Transformer,我们将3D坐标虚拟地投影到M条1D线上。通过方向向量与3D点坐标的点积来确定3D点在1D线上的位置从而获得M个不同的1D位置编码。在获得这些1D/2D位置编码后,我们将其平均成一个统一的位置编码。这个模块将源模态的位置信息注入到3D令牌中, 减轻了真实投影带来的信息损失。
图三
任意模态到3D引导适配器如图三所示: 自注意力机制主要侧重于全局上下文的长距离交互,但对于3D形状的细节理解,细致的空间几何同样至关重要。为此,我们引入了专用的适配器层,旨在专门获取局部区域中的3D语义信息。另外,考虑到预训练模型是基于1D/2D位置编码的,我们专门开发了一种由1D/2D引导的聚合策略和一种适应性多模态到3D的整合技术。在适配器内部,我们首先根据1D/2D位置先验将3D令牌分组到不同的局部邻域。对于M个不同视角/线,我们进行M个并行的局部聚合过程,以充分利用不同投影视角。具体来说,对于2D,我们将每个虚拟投影图像均匀分割成局部2D块,对于1D,我们类似地将每条虚拟投影线均匀分割成局部1D段。在此基础上,我们对每个1D/2D邻域内的3D令牌采用自注意层,在1D/2D先验的指导下进行局部特征交互。然后我们采用池化和反池化操作将局部聚合特征传播到同一邻域内的每个点。在并行局部聚合后,我们获得M组3D令牌, 由于不同投影视角通常对3D表示的重要性不同,我们提出一种自适应集成方法来聚合每个令牌的M个特征。我们另外采用了一个独立于M个1D/2D指导局部聚合的3D特征转换分支。这个非参数分支将适配器前的3D令牌转换为自适应集成的特征基线,通过余弦相似度计算不同视角/线的相对权重,并最终聚合它们的特征以获得最终输出。
三.实验结果
在实际的3D物体数据集ScanObjectNN上,Any2Point框架使用不同模态如语言(CLIP-Text)、视觉(DINO V2-B)和音频(ImageBind-Audio)分别实现了91.9%、87.7%和87.0%的识别准确率。与此前的顶尖方法(ReCon)相比,Any2Point在使用语言模态和仅0.9M的可学习参数下实现了1.3%的准确率提升。在视觉和音频的2D模态中,Any2Point也明显超过了仅在3D数据集上进行预训练的最优方法,准确率分别提升了0.6%和1.3%。
在合成的3D物体数据集ModelNet40上,Any2Point框架通过语言、视觉和音频模态分别达到了94.3%、93.2%和92.7%的准确率。特别是使用1D语言模态,Any2Point比以前的最优方法(ReCon)提高了0.2%,同时减少了42.7M的可学习参数。令人注目的是,在ScanObjectNN和ModelNet40数据集上,无论使用哪种数据,Any2Point框架中的1D语言模态性能都超过了2D的视觉和音频模态。这可能是因为大型语言模型相比其他模态拥有更丰富的语义信息,这有助于对各种3D对象进行深入理解。
我们在ScanObjectNN数据集的“PB-T50-RS”上选择RoBERTa(1D)、DeiT(2D Vision)和SSAST(音频)作为预训练模型,微调设置与我们之前的实验一致, 进一步验证了我们的发现--无论是在ScanObjectNN还是ModelNet40数据集上,Any2Point框架都保持了1D模态(语言)表现优于2D模态(图像和音频)的性能趋势。我们猜测,由于预训练数据的原因,大型语言模型与其他模态相比拥有更强的语义信息,这有利于深入理解不同的3D对象。同时在 ScanObjectNN 数据集的“PB-T50-RS”上,2D & language预训练模型的大小增加可以增强 Any2Point 的性能。
四.总结
Any2Point框架允许从任何模态的预训练大型模型(如2D视觉、语言和音频)进行高效的3D理解。在这一框架中,我们采用了两项关键技术:3D到任意模态的虚拟投影和任意模态到3D的引导适配器,这两种技术不仅帮助提取3D结构的知识,还有效地对预训练模型进行微调。通过这种方式,Any2Point成功解决了现有方法中存在的问题,如3D几何信息的丢失和高昂的资源消耗。相较于以往的最佳3D预训练模型,Any2Point展示了出色的性能和高效率,同时只需极少的可训练参数便可达到显著的成效。
#2024录用论文汇总-上海地区
上海地区ECCV 2024录用论文46篇,由上海市计算机学会计算机视觉专委会整理。1. M3DBench: Towards Omni 3D Assistant with Interleaved Multi-modal Instructions
作者:李铭晟(复旦大学),陈欣(腾讯),张弛(腾讯),陈思锦(复旦大学),朱宏远(新加坡科技研究局),尹富坤(复旦大学),李卓远(复旦大学),俞刚(腾讯),陈涛*(复旦大学)
论文简介: 最近,对三维世界的理解引起了越来越多的关注。然而,现有三维视觉语言数据集和方法通常仅限于特定任务,限制了多场景适用性。为此,我们介绍M3DBench,这是一个专为复杂三维环境设计的多模态指令数据集,包含32万个指令-响应对,支持文本、点击、图像等多模态输入。我们还建立了评估模型在理解这些指令性能的新基准,旨在推动三维领域的MLM研究。
- Paper链接:
https://arxiv.org/abs/2312.10763 - Code链接:
https://m3dbench.github.io/
2. Self-supervised Feature Adaptation for 3D Industrial Anomaly Detection
作者:涂远鹏(同济大学),张博深(腾讯优图),刘亮(腾讯优图),李昱希(腾讯优图),张江宁(腾讯优图),王亚彪(腾讯优图),汪铖杰(腾讯优图),赵才荣*(同济大学)
论文简介: 已有方法使用大规模数据集上预训练的模型进行缺陷检测。然而由于训练数据和目标数据之间存在的域差异,这些方法难以准确检测细微瑕疵,同时容易将正确样本误判为异常样本。因此本文提出了一种局部到全局的自监督特征适应方法,包含模态间和模态内的共同微调。广泛的实验结果证明我们的方法可以在多个数据集上取得远超已有方法的性能。
3. Online Video Quality Enhancement with Spatial-Temporal Look-up Tables
作者:曲则帆(同济大学),蒋忻洋(微软亚洲研究院),杨一帆(微软亚洲研究院),李东胜(微软亚洲研究院),赵才荣*(同济大学)
论文简介: 对于视频会议和云游戏等基于在线视频的应用来说,低延迟率至关重要,这使得提高在线场景中的视频质量变得越来越重要。然而,现有的质量增强方法受限于缓慢的推理速度和对未来帧所含时间信息的要求,直接将其部署到在线任务中具有挑战性。在本文中,我们提出了一种新的视频增强方法 STLVQE,专门用于解决在线压缩视频质量增强(Online-VQE)问题。STLVQE 设计了一个新的 VQE 框架,其中包含一个模块共享特征提取器,大大减少了冗余计算,并重新设计了网络的传播、对齐和增强模块。我们还提出了一种时空查找表结构(STL),它能提取视频中的时空信息,同时节省大量计算资源与推理时间。据我们所知,我们是第一个利用 LUT 结构提取视频任务中时序信息的工作。在现有的压缩视频数据集上进行的大量实验表明,我们的 STLVQE 在性能-速度权衡方面取得了令人满意的效果。
- Paper链接:
hhttps://arxiv.org/abs/2311.13616
4. Unrolled Decomposed Unpaired Learning for Controllable Low-Light Video Enhancement
作者:朱凌玉(香港城市大学),杨文瀚(鹏城实验室),陈宝亮(香港城市大学),诸汉炜(香港城市大学),倪张凯(同济大学),毛琪(中国传媒大学),王诗淇*(香港城市大学)
论文简介: 基于非成对学习的可控低光视频增强是一个具有挑战性的任务,因为视频中的噪声、曝光和对比度相互交织,同时需要时间一致性。为了解决这些问题,本文提出了展开分解非配对网络(UDU-Net),它将优化函数展开到深度网络中,分解为空间和时间相关因子,并进行迭代更新。该方法在照明、噪声抑制和时间一致性等方面取得了出色的性能,优于当前最先进的方法。
5. OpenPSG: Open-set Panoptic Scene Graph Generation via Large Multimodal Models
作者:周子键(伦敦国王学院),朱政(极佳视界),Holger Caesar(代尔夫特理工大学),史淼晶*(同济大学)
论文简介: 全景场景图生成(PSG)旨在对图像中的物体进行分割并识别它们之间的关系,实现对图像的结构化理解。以往的方法主要集中于预定义的物体和关系类别的预测,因此在开放世界场景中的应用受到限制。随着多模态大模型(LMMs)的快速发展,在开放集物体检测和分割方面已取得显著进展,然而,在PSG中的开放集关系预测仍是一个未被探索的领域。在本文中,我们专注于与预训练的开放集全景分割模型集成的开放集关系预测任务,以实现真正的开放集全景场景图生成。为此,我们提出了一种名为OpenPSG的开放集全景场景图生成方法,该方法利用LMMs以自回归方式实现开放集关系预测。我们引入了一个关系查询变换器,用以高效提取物体对的视觉特征并估计它们之间关系的存在性,后者可以通过过滤不相关的对来增强预测效率。最后,我们设计了生成和判断指令,以自回归方式执行PSG中的开放集关系预测。据我们所知,我们是首个提出开放集PSG任务的。广泛的实验表明,我们的方法在开放集关系预测和全景场景图生成方面达到了最先进的性能。
- Code链接:
hhttps://github.com/franciszzj/OpenPSG
6. Enhanced Sparsification via Stimulative Training
作者:唐圣汲(复旦大学),林炜豪(复旦大学),叶涵诚(上海人工智能实验室),叶鹏(复旦大学),余翀(复旦大学),李抱朴,陈涛*(复旦大学)
论文简介: 基于稀疏化修剪的方法在模型压缩中扮演重要角色。现有方法通常设定稀疏化惩罚项来抑制被丢弃权重的重要性,这被视为抑制型稀疏化范式。然而,这种范式在修剪之前使网络的丢弃部分失活,导致容量损害,进而引发性能下降。为了缓解这一问题,我们首先研究并揭示了新兴激励训练中的相对稀疏效应,然后提出了一种名为STP的结构化修剪框架,基于增强的稀疏化范式,该范式通过自蒸馏来保持被丢弃权重的幅度,并增强保留权重的表达能力。此外,为了找到剪枝网络的最佳架构,我们提出了一个多维架构空间和一个知识蒸馏引导的探索策略。为了减少蒸馏过程中的巨大容量差距,我们提出了子网络变异扩展技术。在各种基准测试中的广泛实验表明了STP的有效性。特别是在不进行微调的情况下,我们的方法在不同预算下始终能够达到优越的性能,尤其是在极具挑战性的修剪场景下,例如在ImageNet上对ResNet-50进行85% FLOPs的减少,同时保持95.11%的Top-1准确率(在76.15%保留了72.43%的准确率)。
7. MotionChain: Conversational Motion Controllers via Multimodal Prompts
作者:江彪(复旦大学),陈欣(腾讯),张弛(腾讯),尹富坤(复旦大学),李卓远(复旦大学),俞刚(腾讯),范佳媛*(复旦大学)
论文简介: 今年来语言模型方面的进展展示了其在进行多轮对话和保持对话上下文方面的熟练程度。然而,这种能力在其他多模态生成模型,特别是在人类运动模型中,尚未得到充分探索。通过在控制连续虚拟人类运动中整合多轮对话,生成的人类运动模型可以为人形机器人、游戏智能体或其他具身系统实现直观的、逐步的人类任务执行过程。在这项工作中,我们提出了MotionChain,一个通过多模态提示生成连续和长期人类运动的对话式人类运动控制器。具体而言,MotionChain包括多模态分词器,这些分词器将文本、图像和运动等各种数据类型转化为离散的标记,并配有一个视觉-运动感知语言模型。通过利用大规模的语言、视觉-语言和视觉-运动数据来辅助与运动相关的生成任务,MotionChain能够理解多轮对话中的每个指令,并根据这些提示生成相应的人类运动。广泛的实验验证了MotionChain的有效性,展示了其在对话式运动生成中的最先进性能,以及在控制和与虚拟人类交互方面更直观的方法。
8. Relightable 3D Gaussian: Real-time Point Cloud Relighting with BRDF Decomposition and Ray Tracing
作者:高建(南京大学),顾淳(复旦大学),林尤添(南京大学),朱昊(南京大学),曹汛(南京大学),张力*(复旦大学),姚遥*(南京大学)
论文简介: 本文提出了一种新颖的可微分点基渲染框架,以实现逼真的重打光效果。我们通过将法向量、BRDF参数和入射光关联到3D高斯上,优化重建场景,并利用基于物理的可微分渲染技术分解BRDF和光照。为了实现高效的可见度计算,我们引入了一种创新的基于点的光线追踪方法。实验结果表明,所提出的框架在BRDF估计、新视图合成和重打光效果方面优于现有方法,展示了3D高斯溅射在编辑、光线追踪和重打光方面的巨大潜力。
9. Reason2Drive: Towards Interpretable and Chain-based Reasoning for Autonomous Driving
作者:聂铭(复旦大学),彭任远(复旦大学),王春微(华为诺亚方舟实验室),蔡信岳(华为诺亚方舟实验室),韩建华(华为诺亚方舟实验室),徐航(华为诺亚方舟实验室),张力(复旦大学)
论文简介: 本文提出了一个包含超过600K视频文本对的基准数据集,Reason2Drive,旨在促进复杂驾驶环境中可解释推理的研究。本文显式地将自动驾驶过程描述为感知、预测和推理步骤的顺序组合,并且从各种开源户外驾驶数据集中自动收集问答对。此外,文章引入了一种新的评估指标来评估自动驾驶系统中基于思维链的推理性能,缓解了现有指标(如BLEU和CIDEr)的推理歧义。基于提出的基准,文章进行大量实验来评估各种现有的多模态大模型在自动驾驶领域的可解释推理能力。
10. WoVoGen: World Volume-aware Diffusion for Controllable Multi-camera Driving Scene Generation
作者:卢嘉晨(复旦大学),黄泽(复旦大学),杨泽宇(复旦大学),张家辉(复旦大学),张力(复旦大学)
论文简介: 生成多摄像头街景视频对增强自动驾驶数据集至关重要。本文提出了世界体积感知多摄像头驾驶场景生成器(WoVoGen),利用四维世界体积作为视频生成的基础。模型通过预想四维时间世界体积和生成多摄像头视频,确保生成的传感器数据保持一致性和连贯性,能够生成高质量街景视频并促进场景编辑任务。
11. HIMO: A New Benchmark for Full-Body Human Interacting with Multiple Objects
作者:吕鑫涛(上海交通大学),徐良(上海交通大学、宁波东方理工大学),晏轶超(上海交通大学),金鑫(宁波东方理工大学),徐聪晟(上海交通大学),吴舒文(上海交通大学),刘轶凡(上海交通大学),李林橙(网易伏羲实验室),毕梦霄(网易伏羲实验室),曾文军(宁波东方理工大学),杨小康(上海交通大学)
论文简介: 生成人物-物体交互对于促进虚拟数字人真实性有着至关重要的作用。现有的4D人与物体交互数据集通常仅限于人与单个物体的互动,而忽略了日常生活中无处不在的多个物体组合使用;它们也缺少对交互序列的文本描述,使得文本生成动作的任务难以进行。因此,我们提出了HIMO数据集,一个包含人体与多物体交互的全身动捕数据集,并还为其标注了细粒度的文本描述及时间段切分。同时,我们在两个新颖的人物交互合成任务上进行实验,实验结果表明了HIMO数据集的有效性。
12. HybridBooth: Hybrid Prompt Inversion for Efficient Subject-Driven Generation
作者:官善琰(vivo移动通信有限公司),葛彦昊(vivo移动通信有限公司、同济大学),邰颍*(南京大学),杨健(南京大学),李伟(vivo移动通信有限公司),尤鸣宇*(同济大学)
论文简介: 主体内容驱动生成旨在生成指定主体的个性化图像。本研究提出了一种新的混合提示词反演框架HybridBooth,将直接估计和迭代优化的两类范式结合,以实现基于扩散模型的高效主体驱动生成。本框架首先设计了一种新的提示词反演网络,结合掩码引导的多词文本编码模块和主体特征多粒度特征融合模块,实现快速的主体提示词反演,然后提出一种提出重要性参数微调方法,提升反演精度。极限情况下本框架可基于单张图片以高效方式将任意视觉概念逆化同时兼顾原始模型的通用生成能力。
13. Cross-Domain Few-Shot Object Detection via Enhanced Open-Set Object Detector
作者:傅宇倩(ETH Zurich、INSAIT),王昱(复旦大学),潘逸轩(东南大学),怀莲(BOE),裘星宇(复旦大学),上官泽钰(BOE),刘童(BOE),付彦伟(复旦大学),Luc Van Gool(ETH Zurich、INSAIT),蒋星群(BOE)
论文简介: 本文研究了具有挑战性的跨域小样本目标检测任务(CD-FSOD),改任务旨在用跨数据域、少量标注样本的情况下构建目标检测器。尽管如DE-ViT等开放集检测器在传统的小样本目标检测中表现出色,但其在CD-FSOD中的泛化能力仍不明确:1)这些开放集检测方法能否泛化到CD-FSOD?2)如果不能,在面对巨大的领域差异时,如何提升模型性能?基于第一个问题,本文为CD-FSOD任务建立了一个新的基准数据集以评估目标检测方法,并提出三个衡量领域差异的指标:风格(style), 类别差异度(ICV),不可定义边界程度(IB)。本文实验揭示大多数现有方法由于受到风格变化、类别差异度低、边界模糊因素的影响,无法实现跨领域泛化。因此,本文提出了几个新的模块以逐个解决上述问题。首先,本文提出可学习的实例特征将初始固定实例特征与目标类别对齐,增强特征的可分辨性以解决类别差异度低的问题;其次,本文提出实例重加权模块为高质量的实例分配更高的重要性以此缓解目标领域存在边界模糊图像的问题;第三,本文提出领域提示器以引入虚拟的风格对语义特征进行适当干扰,以此提升模型对于不同视觉风格的泛化性。基于以上三个模块以及常用的微调方法,本文在DE-ViT基础之上构建了CD-ViTO检测器,在CD-FSOD的各个数据集上显著改进了基础DE-ViT。
14. Improving Neural Surface Reconstruction with Feature Priors from Multi-View Images
作者:任新麟(复旦大学),曹辰捷(复旦大学、阿里巴巴达摩院),薛向阳(复旦大学),付彦伟(复旦大学)
论文简介: 本研究通过探索七种预训练视觉任务的多视角特征先验,旨在提高神经表面重建(NSR)性能。结果表明,图像匹配和多视角立体的特征先验优于其他任务,将块级光度一致性扩展到特征级别比像素级方法更有效。这些方法在DTU和EPFL数据集上的表现证明了其在提高NSR结果方面的潜力。
15. VEON: Vocabulary-Enhanced Occupancy Prediction
作者:郑继来(上海交通大学),唐品(上海交通大学),王重道(华为诺亚方舟实验室),王国庆(上海交通大学),任相璇(上海交通大学),冯柏岚(华为诺亚方舟实验室),马超(上海交通大学)
论文简介: VEON聚焦于在自动驾驶场景下,预测三维占用栅格与开放世界语义。文章提出混合深度基础模型MiDaS和语义基础模型CLIP并进行维度提升,从而实现三维占用栅格的预测。为适配自驾场景,方法为MiDaS配备了Zoedepth和LoRA,并将高分辨率的侧适配器HSA附加到CLIP视觉编码器上,还采用类重加权策略优先考虑尾部类别。在Occ3D-nuScenes数据集上,VEON在不使用手动语义标签的前提下,达到了具有竞争力的性能。
16. Space-Correlated Transformer: Jointly Explore the Matching and Motion Clues in 3D Single Object Tracking
作者:谢斐(上海交通大学),聂佳浩(杭州电子科技大学),王重道(华为诺亚方舟实验室),何志伟(杭州电子科技大学),马超(上海交通大学)
论文简介: 激光雷达点云中的3D单目标跟踪(3D SOT)在自动驾驶中发挥着至关重要的作用。当前的方法大多遵循两种范式,即基于孪生匹配的和以运动为中心的。然而,激光雷达点云缺乏足够的外观信息,而以运动为中心的跟踪器则面临复杂的模型结构问题。为了解决这些问题,我们提出了一种新颖且概念简单的跟踪框架,称为SCtrack,该框架联合探索了点云中的匹配和运动线索。SCtrack将点云嵌入到空间结构化特征中,并沿着对齐的空间区域进行空间相关性计算。目标相对运动直接从相关特征中推断出来。我们采用了一种可变大小的空间区域策略,以适应空间相关性计算中不同目标的形状和位置。SCtrack在KITTI、NuScenes和Waymo 数据集上分别实现了先进的性能。
17. OccGen: Generative Multi-modal 3D Occupancy Prediction for Autonomous Driving
作者:王国庆(上海交通大学),王重道(华为诺亚方舟实验室),唐品(上海交通大学),郑继来(上海交通大学),任相璇(上海交通大学),冯柏岚(华为诺亚方舟实验室),马超*(上海交通大学)
论文简介: 现有的3D语义占用预测方法通常将任务视为一次性的3D体素级分割问题,专注于输入和占用图之间的单步映射,这限制了它们逐步细化和完成局部区域的能力。在本文中,我们介绍了OccGen,一个简单但功能强大的3D语义占用预测任务的生成式感知模型。OccGen采用了一种“噪声到占用”的生成范式,通过预测并消除来自随机高斯分布的噪声,逐步推断和细化占用图。OccGen由两个主要部分组成:一个能够处理多模态输入的条件编码器,以及一个应用扩散去噪的逐步细化解码器,使用多模态特征作为条件。这一生成流程的关键洞见是,扩散去噪过程自然能够模拟密集3D占用图的粗到细的细化,因此产生更详细的预测。在几个占用基准上的广泛实验表明,所提出的方法与现有最先进方法相比是有效的。例如,在nuScenes-Occupancy数据集下,OccGen在多模态、仅激光雷达和仅相机设置下分别相对提高了mIoU 9.5%、6.3%和13.3%。此外,作为一个生成式感知模型,OccGen展示了鉴别模型无法实现的期望属性,例如在提供多步预测的同时提供不确定性估计。
- Paper链接:
https://arxiv.org/abs/2404.15014 - Code链接:
https://occgen-ad.github.io/
18. PapMOT: Exploring Adversarial Patch Attack against Multiple Object Tracking
作者:龙佳欢(上海交通大学、军事科学院),姜廷松(军事科学院),姚雯(军事科学院),贾率(上海交通大学),张伟嘉(上海交通大学),周炜恩(军事科学院),马超(上海交通大学),陈小前(军事科学院)
论文简介: 在连续视频流中跟踪多个对象对于许多计算机视觉任务至关重要。这需要在连续帧中检测对象并将其身份进行关联。尽管多目标跟踪(MOT)已经取得了显著进展,最近的研究却揭示了现有MOT方法对对抗性攻击的脆弱性。然而,这些攻击大多属于数字攻击,通过在输入图像中注入像素级噪声,因此在物理场景中无效。为了填补这一空白,我们提出了PapMOT,这是一种可以在数字和物理场景中生成物理对抗性补丁的方法。除了攻击检测机制,PapMOT通过优化了一个可打印的补丁,使其能够被检测为新目标,从而误导身份关联过程。此外,我们引入了一种补丁增强策略,进一步降低视频帧之间跟踪结果的时间一致性,从而使得补丁更具攻击性。我们还开发了新的评估指标来衡量MOT在这种攻击下的鲁棒性。通过对多个数据集的广泛评估,我们证明了PapMOT可以成功攻击数字场景中的各种MOT跟踪器架构。同时,通过在现实世界中部署打印的对抗性补丁,我们验证了PapMOT在物理攻击中的有效性。
19. Spatially-Variant Degradation Model for Dataset-free Super-resolution
作者:郭绍杰(华东师范大学),宋昊飞(华东师范大学),李庆利(华东师范大学),王妍*(华东师范大学)
论文简介: 本文提出了一种无数据集盲图像超分辨率的方法。专注于为每个像素设计空间变化的退化模型,而不是为整个图像获取退化核。相比于数据驱动的方法,我们的方法使用极少的可学习参数。每个像素的退化核由少量空间变化原子核组成的可学习字典的线性组合表示,原子退化核的系数矩阵由模糊集合理论推断。我们提出了一种具有定制似然函数和先验项的概率BISR模型,并使用蒙特卡洛EM算法推断每个像素的退化核。与其他最先进的BISR方法相比,我们的方法平均改进了1 dB(2X)。
- Paper链接:
http://arxiv.org/abs/2407.08252
20. Tendency-driven Mutual Exclusivity for Weakly Supervised Incremental Semantic Segmentation
作者:司翀杰(上海交通大学),王雪辉(上海交通大学),杨小康(上海交通大学),沈为(上海交通大学)
论文简介: 弱监督增量语义分割利用预训练分割模型和图像级标签分割新类别。常用方法是为每个新类别生成种子区域,但像素级标注的缺乏使得新旧类别预测冲突难以解决。我们提出有偏的互斥关系,优先保留旧类别预测,同时生成新类别的伪掩码,并通过双层优化更新模型参数,有效应对增量学习中的灾难性遗忘问题。实验验证了框架的有效性,树立了新基准。
- Paper链接:
https://arxiv.org/abs/2404.11981
21. Bridging Synthetic and Real Worlds for Pre-training Scene Text Detectors
作者:官同坤(上海交通大学),沈为*(上海交通大学),杨学(上海人工智能实验室),王雪辉(上海交通大学),杨小康(上海交通大学)
论文简介: 我们提出了一种与真实域对齐的预训练范式,可以发挥有标签合成数据和未标注真实数据的互补优势。具体来说,我们为文本图像量身定制了一种基于字形的混合机制 (GlyphMix)。它描绘了合成图像的字符结构,并将它们作为涂鸦式单元嵌入到真实图像中。在不引入真实域漂移的情况下,GlyphMix 可以自由地生成具有来自合成标签的部分标注的真实世界图像,用于预训练。
22. PosFormer: Recognizing Complex Handwritten Mathematical Expression with Position Forest Transformer
作者:官同坤(上海交通大学),林城雨(上海交通大学),沈为*(上海交通大学),杨小康(上海交通大学)
论文简介: 我们为手写数学表达式识别提出了一个位置森林变换器 (PosFormer)。无需额外的注释,它解决了现有的基于序列自回归的方法隐式学习符号之间的位置和层次关系的问题。具体地,通过将数学表达式建模为一个位置森林结构,每个符号在森林中被分配一个位置标识符来表示其相对空间位置。网络学习预测这些信息,以显式地实现位置感知的符号特征表示学习。
23. Towards Open-ended Visual Quality Comparison
作者:吴昊宁(南洋理工大学),诸汉伟(香港城市大学),张子澄(上海交通大学),张尔立(南洋理工大学),陈超锋(南洋理工大学),廖梁(南洋理工大学),李春一(上海交通大学),王安娜(商汤科技),孙文秀(商汤科技),严琼(商汤科技),刘笑宏(上海交通大学),翟广涛(上海交通大学),王诗琪(香港城市大学),林维斯(南洋理工大学)
论文简介: 在这项工作中,我们扩展了新兴的多模态大模型的边界,以将视觉质量比较进一步推进到开放式设置中,这些设置 1)可以回应关于质量比较的开放范围问题;2)可以提供超越直接答案的详细推理。为此,我们提出了Co-Instruct。为了训练这种首创的开源开放式视觉质量比较器,我们收集了Co-Instruct-562K数据集,数据来源包括:(a)LLM合并的单一图像质量描述,(b)GPT-4V对未标记数据的标注。此外,为了更好地评估这一设置,我们提出了MICBench,这是首个针对多模态大模型的多图像比较基准。
24. Topo4D: Topology-Preserving Gaussian Splatting for High-Fidelity 4D Head Capture
作者:李炫辰(上海交通大学),程宇豪(上海交通大学),任星宇(上海交通大学),贾灏哲(华为云),徐迪(华为云),朱文瀚(学深智能),晏轶超*(上海交通大学)
论文简介: 本文提出了一种全新的自动动态人脸几何和纹理重建框架Topo4D。该框架简化了传统动态人脸重建流程,能够直接从多视角视频中重建拓扑一致的几何表面和包含毛孔级细节的动态8K纹理贴图。我们提出了高斯网格,将人脸表面表示为拓扑一致的动态三维高斯模型,并通过逐帧执行交替几何和纹理优化实现高质量的几何和纹理学习。实验表明,无论是在网格纹理质量还是时间一致性上,Topo4D都比最先进的人脸重建方法取得了更好的结果。
25. Think2Drive: Efficient Reinforcement Learning by Thinking with Latent World Model for Autonomous Driving (in CARLA-v2)
作者:李奇峰(上海交通大学),贾萧松(上海交通大学),王少博(上海交通大学),严骏驰(上海交通大学)
论文简介: 从高速进入城区,自动驾驶车辆面临的与各种行人、车辆间进行各种各样的强交互,对规控算法又有更高的要求。而业界主流仍使用手写规则的方案,然而,各类道路状况、车辆行人导致所有可能的状况是海量的,并且呈长尾分布,直接写规则的方式会导致“字典”越来越厚,新旧规则还可能存在潜在冲突,导致新增规则的难度呈指数级上升。这使得以数据与学习驱动的自动驾驶规控方案正受到越来越多的关注,而基于学习方法中的模仿学习方案“死记硬背”的学习过程,因此高度依赖于对所有可能出现情况的全覆盖,而这一点在现实中是非常难做到的,强化学习又需要需要海量的模拟来进行随机探索而代价昂贵,因此一个高效有力的规控方案是现今的研究痛点。而CARLA Leaderboard作为最流行的自驾闭环仿真评测基准,其针对城区自驾场景的V2版本包含大量的强交互场景,其复杂度导致自22年发布以来一直悬而未决,Think2Drive首次成功打破这一局面,单GPU训练三天即可解锁全部V2场景!
26. NeuroPictor: Refining fMRI-to-Image Reconstruction via Multi-individual Pretraining and Multi-level Modulation
作者:霍婧阳(复旦大学),王艺楷(复旦大学),汪昀(复旦大学),钱学林(复旦大学),李翀(复旦大学),付彦伟*(复旦大学),冯建峰(复旦大学)
论文简介: NeuroPictor是一种基于fMRI信号调制扩散模型生成过程的新方法,旨在优化fMRI到图像的重建。该方法通过多个体预训练和多层次调制,将fMRI信号直接应用于扩散模型的生成过程。NeuroPictor分为三步:fMRI校准编码以减少个体差异,跨个体预训练以学习高低层次条件,单个体细化以适应特定个体。经过在超过60,000对fMRI图像数据中的训练和直接调制扩散模型生成过程,我们的模型在重建fMRI图像的底层细节方面取得了显著的进展。
27. MagDiff: Multi-Alignment Diffusion for High-Fidelity Video Generation and Editing
作者:赵浩宇(复旦大学),陆天一(复旦大学),顾佳熙(华为诺亚方舟实验室),张星(复旦大学),郑清萍(浙江大学 ),吴祖煊(复旦大学),徐航(华为诺亚方舟实验室),姜育刚(复旦大学)
论文简介: 扩散模型被广泛应用在视频生成和编辑任务上。然而,如何在一个框架中同时支持这两种任务,是一个具有挑战性但至关重要的课题。此外,在由文本和参考图像同时指导的生成任务中,由于二者之间缺乏高对齐能力,导致生成的视频质量较差。因此,研究团队首次提出了一个统一的、具有多对齐能力的扩散模型MagDiff,以实现特定主题的视频生成以及视频编辑。为了统一生成和编辑任务,研究团队通过利用参考图像中主体区域的掩码,来控制需要生成和编辑的内容,从而实现了文本和生成内容的高度对齐。同时,为了提高文本和图像信息的对齐能力,研究团队提出了基于Dual Cross-attention的自适应特征对齐模块。此外,为了保持参考图像的细粒度信息,研究团队从不同分辨率的参考图像中来得到多尺度特征,实现了参考前景和生成内容的高度对齐。在UCF-101、MSR-VTT、DreamBooth和DAVIS四个数据集上的大量实验验证了MagDiff的优越性。相比于同类型的Image-to-Video生成模型,在UCF-101和MSR-VTT数据上的FVD指标分别提升了76和220。此方法实现了视频生成和编辑任务的统一,有望成为后续研究的基准工作之一。
- Paper链接:
https://arxiv.org/abs/2311.17338
28. Improving Text-guided Object Inpainting with semantic Pre-inpainting
作者:陈奕夫(复旦大学),陈静雯(智象未来),潘滢炜(智象未来),李业豪(智象未来),姚霆(智象未来),陈智能(复旦大学),梅涛(智象未来)
论文简介: 本文提出的CATdiffusion将经典的单阶段的方法分解为两个部分:先从跨模态语义空间提前修复缺失区域,然后再利用预修复的结果来控制目标生成。此二阶段方法解决了基于文本的图像修复任务面临的修改结果和提示内容不相符以及修改区域和非修改区域不和谐两大问题,具备强大的编辑能力,并且能很好的控制生成。
29. Unlocking Textual and Visual Wisdom: Open-Vocabulary 3D Object Detection Enhanced by Comprehensive Guidance from Text and Image
作者:焦鹏昆(复旦大学),赵娜(新加坡科技设计大学),陈静静(复旦大学),姜育刚(复旦大学)
论文简介: 开放词汇3D目标检测因为训练数据的稀缺而面临着巨大的挑战。本文首先利用2D目标检测模型来实现对场景中物体的零样本检测,这为识别新的三维物体提供了初始种子和选择引导。此外,为了将3D特征空间与视觉-语言特征空间对齐,本文引入了一种层次对齐方法,即使用预训练的“视觉-语言”基础模型,在实例、类别和场景级将3D特征空间与“视觉-语言”特征空间对齐。
- Paper链接:
https://arxiv.org/abs/2407.05256
30. Reliable and Efficient Concept Erasure of Text-to-Image Diffusion Models
作者:公超(复旦大学),陈凯(复旦大学),魏志鹏(复旦大学),陈静静(复旦大学),姜育刚(复旦大学)
论文简介: 当前文生图模型面临安全问题,如在恶意攻击下生成风险概念的内容。开源模型如Stable Diffusion的防护措施易被绕过。现有风险概念移除方法不彻底、耗费资源多、对红队攻击不鲁棒、损害生成能力。本文提出了一种高效可靠的概念移除方法(RECE),通过迭代推导和遗忘风险概念,确保彻底删除风险概念并保留生成能力。该方法基于解析解形式,避免梯度下降,仅需三秒即可实现SOTA移除效果。
31. DreamMesh: Jointly Manipulating and Texturing Triangle Meshes for Text-to-3D Generation
作者:杨海波(复旦大学),陈杨(智象未来),潘滢炜(智象未来),姚霆(智象未来),陈智能(复旦大学),吴祖煊(复旦大学),姜育刚(复旦大学),梅涛(智象未来)
论文简介: 传统的文本到3D生成方法通常很难得到高质量的三角网格结果。本文首次对三角网格的学习进行了显式建模。将网格学习分为两个阶段:1)通过文本引导的雅克比行列式优化三角网格,获得全局平滑的粗糙网格,并通过交替使用预先训练的2D扩散模型以免调整的方式获得相应的粗糙纹理;2)通过联合优化粗糙网格并细化粗糙纹理贴图,得到了具有丰富纹理细节和高质量几何结构的3D结果。
32. Adversarial Prompt Tuning for Vision-Language Models
作者:张家明(北京交通大学),马兴军*(复旦大学),王欣(复旦大学),邱凌瑜(南京航空航天大学),王嘉琦(北京交通大学),姜育刚(复旦大学),桑基韬*(北京交通大学)
论文简介: 近年来,视觉-语言模型展示了强大的能力和广泛的应用前景。然而,这些模型也容易受到对抗图像的干扰。为了应对这一挑战,本文提出了对抗提示微调(Adversarial Prompt Tuning,AdvPT)技术,通过微调可学习的文本提示来提升视觉语言模型的对抗鲁棒性。具体来说,AdvPT利用已训练的CLIP图像编码器生成大量对抗图像,并将其嵌入保存到对抗嵌入库中。随后,通过微调文本向量,重对齐文本嵌入与对抗嵌入,利用文本编码器的内在知识提升模型的识别能力。实验结果表明,AdvPT在多个数据集上显著提升了对抗鲁棒性。
- Paper链接:
https://arxiv.org/abs/2311.11261 - Code链接:
https://github.com/jiamingzhang94/Adversarial-Prompt-Tuning
33. SegIC: Unleashing the Emergent Correspondence for In-Context Segmentation
作者:孟令琛(复旦大学),兰石懿(NVIDIA),李恒多(马里兰大学),Jose M. Alvarez(NVIDIA),吴祖煊*(复旦大学),姜育刚(复旦大学)
论文简介: 上下文分割要求模型基于少量带标注的样本对新的样本进行分割,这使模型能快速被应用在新的分割任务中,可显著减少训练和标注成本。然而上下文分割极具挑战,这是因为模型需要通过极少量样本快速学习分割规则而不是直接使用传统分割任务中预定义好的规则。为了解决这个问题,本文充分挖掘了大规模视觉模型中“涌现”的图像匹配能力,进而提出了SegIC以实现高效的上下文分割。具体而言,本文将上下文分割任务解耦成了四个阶段:特征提取、匹配发掘 、上下文指令提取和掩码解码,并发现仅通过训练一个视觉解码器就可以获得十分出色的上下文分割能力。大量实验验证了SegIC的有效性。
34. PromptFusion: Decoupling Stability and Plasticity for Continual Learning
作者:陈昊然(复旦大学),吴祖煊(复旦大学),韩欣彤(虎牙),贾梦霖(康奈尔大学),姜育刚(复旦大学)
论文简介: 持续学习由于稳定性和可塑性困境面临重大挑战。传统方法往往过于侧重稳定性,导致模型在处理新任务时性能受限。为了解决这个问题,本文提出了名为PromptFusion的新框架,其包含稳定器和增强器两个模块,以同时实现稳定性和可塑性。为了提高计算效率,本文还引入了PromptFusion-Lite,在保持精度的同时显著减少了计算开销。大量实验验证了该方法的有效性。
35. MinD-3D: Reconstruct High-quality 3D objects in Human Brain
作者:高剑雄(复旦大学),傅宇倩(复旦大学),汪昀(复旦大学),钱学林(复旦大学),冯建峰(复旦大学),付彦伟*(复旦大学)
论文简介: 本文提出了学术界首个3D-fMRI数据集fMRI-Shape,该数据集包含14名被试和1624个3D物体(均来自ShapeNet),并定义了从人脑中重建三维物体的全新任务。基于fMRI-Shape,本文提出了首个从人脑解码3D物体的模型MinD-3D,验证了这一任务的可行性。
- Paper链接:
https://arxiv.org/pdf/2312.07485 - Code链接:https://github.com/JianxGao/MinD-3D
- 数据集链接:https://huggingface.co/datasets/Fudan-fMRI/fMRI-Shape
36. FedRA: A Random Allocation Strategy for Federated Tuning to Unleash the Power of Heterogeneous Clients
作者:苏上超(复旦大学),李斌(复旦大学),薛向阳(复旦大学)
论文简介: 在基础模型的联邦微调中,大量异构客户端由于计算和通信资源各异,无法同时支持完整模型的微调。为应对这一挑战,本文提出了一种新颖的联邦微调算法FedRA。在每轮通信中,FedRA随机生成分配矩阵,对于资源受限的客户端,根据分配矩阵重组原始模型,并使用LoRA进行微调。随后,服务器将LoRA参数聚合到原始模型的相应层中。相比于现有方法,FedRA允许所有客户端都无法支持完整的全局模型。在DomainNet和NICO++数据集上的测试结果表明,FedRA在各种Non-IID设置下都展现出了优越的性能。
37. EAFormer: Scene Text Segmentation with Edge-Aware Transformers
作者:余海洋(复旦大学),傅腾(复旦大学),李斌(复旦大学),薛向阳(复旦大学)
论文简介: 本文提出了一种名为EAFormer的边缘感知Transformer,旨在更准确地分割文本,尤其是文本的边缘部分。与现有文本分割方法不同,提出的方法注重文本边缘的重要性,通过设计文本边缘提取器和边缘引导编码器来实现,并采用基于MLP的解码器预测文本掩码。在常用基准数据集上的大量实验验证了EAFormer的有效性。实验结果表明,与以往方法相比,提出的方法在文本边缘分割方面表现更好。考虑到一些基准测试数据集(如COCO_TS和MLT_S)的标注不够准确,本文重新标注了这些数据集。实验证明,在训练时使用更准确的标注可以显著提升提出方法的性能。
38. UniProcessor: A Text-induced Unified Low-level Image Processor
作者:段慧煜(上海交通大学),闵雄阔(上海交通大学),吴思婧(上海交通大学),沈为(上海交通大学),翟广涛(上海交通大学)
论文简介: 图像处理包括图像恢复、图像增强等,涉及从退化的输入生成高质量的干净图像。基于深度学习的方法在单任务条件下已表现出对各种图像处理任务的卓越性能。然而,它们需要针对不同的退化和级别训练单独的模型,这限制了这些模型的泛化能力并限制了它们在现实世界中的应用。本文提出了一种用于低级视觉任务的文本诱导统一图像处理器,称为UniProcessor,它可以有效地处理各种退化类型和级别,并支持多模态控制。具体来说, UniProcessor使用主题提示对特定于退化的信息进行编码,并使用操作提示处理退化。这些上下文控制功能通过交叉注意注入到UniProcessor主干中以控制处理过程。对于自动主题提示生成,我们进一步通过指令调整技术构建了一个用于通用低级退化感知的视觉语言模型。UniProcessor涵盖了30种降级类型,大量实验表明,UniProcessor无需额外训练或调整即可很好地处理这些降级,并且优于其他竞争方法。此外,借助降级感知上下文控制,UniProcessor 首次展示了单独处理具有多个降级的图像中的单个失真的能力。
39. Prompt Grouping for Rehearsal-Free Continual Learning
作者:龚仁春(华东师范大学),张志忠(华东师范大学),田旭东(华东师范大学),曲延云(厦门大学),汪旻(商汤科技),鲁学权(La Trobe University),唐永强(中国科学院自动化所),谭鑫(华东师范大学),谢源(华东师范大学)
论文简介: 为了解决之前方法无法利用相似任务互补知识的问题,本文引入了“提示敏感度”的概念,用以评估每个提示对于当前学习任务的重要性。根据这个评分,相似任务的提示会被分组,使得组内的任务能够共享。本文还提出了一种校正策略,通过Proxy Loss和Head Correction来增强不同任务之间的特征提取器和分类头的区分能力。我们的方法在多个数据集上显著超过之前方法。
40. LightenDiffusion: Unsupervised Low-Light Image Enhancement with Latent-Retinex Diffusion Models
作者:江海(四川大学、旷视科技),罗骜(西南交通大学、旷视科技),刘笑宏(上海交通大学),韩松臣(四川大学),刘帅成(电子科技大学、旷视科技)
论文简介: 本文提出了基于隐空间-视网膜扩散模型的无监督低光图像增强方法,它将物理上可解释的视网膜理论和扩散模型相结合,通过在大量非成对的真实世界数据上训练以学习不同光照场景下的降质表示,提高扩散模型的泛化能力。
- Paper链接:
https://arxiv.org/abs/2407.08939 - Code链接:https://github.com/JianghaiSCU/LightenDiffusion
41. AutoEval-Video: An Automatic Benchmark for Assessing Large Vision Language Models in Open-Ended Video Question Answering
作者:陈修元(上海交通大学),林苑(ByteDance Research),张雨辰(ByteDance Research),黄维然(上海交通大学)
论文简介: 本文提出的AutoEval-Video是一个用来全面评估大型视觉-语言模型在开放式视频问题回答方面的新颖而具有挑战性的测试集。本测试集构建了横跨9个技能维度的开放式视频问题,包含感知、理解和生成等能力方面的评估,并涵盖40多个不同主题的视频素材。为了高效评估模型对于开放式问题的答案,我们采用了基于大型语言模型(LLM)的评估方法。我们为每个视频-问题对注释了独特的评估规则。为了最大限度地提高这些规则的稳健性,我们开发了一种新颖的对抗性注释机制。使用规则作为提示语,GPT-4能达到大约97.0%的稳定评估准确率,与人类评估者的94.9%-97.5%的准确率相当。此外,我们还评估了多个视觉语言模型在AutoEval-Video上的表现,其中GPT-4V(ision)的表现显著优于其他模型,达到了32.2%的准确率。然而,与人类72.8%的准确率相比,还有很大的提升空间。通过广泛的案例研究,我们总结并发现了视觉语言模型的几个缺点,比如有限的时序和动态理解能力、幻觉现象以及过于泛化的响应等。
- Paper链接:
https://arxiv.org/abs/2311.14906 - Code链接:https://github.com/Xiuyuan-Chen/AutoEval-Video
42. Enhancing Cross-Subject fMRI-to-Video Decoding with Global-Local Functional Alignment
作者:李翀(复旦大学),钱学林(复旦大学),汪昀(复旦大学),霍婧阳(复旦大学),薛向阳(复旦大学),付彦伟(复旦大学),冯建峰(复旦大学)
论文简介: 我们采集了一个大规模fMRI-视频配对的数据集,包含来自8个人的约75k样本,是之前基准数据集的约4.5倍。此外本文提出了fMRI全局-局部功能对齐,将不同个体 fMRI 帧对齐到统一脑空间,结合基于Transformer的fMRI编码器和基于扩散模型的视频生成器,解码fMRI生成了语义信息一致的高质量视频,在跨人语义分类任务中实现了84.7%的准确率。
43. Radiative Gaussian Splatting for Efficient X-ray Novel View Synthesis
作者:蔡元昊(约翰霍普金斯大学),梁逸勋(香港科技大学(广州) ),王嘉昊(约翰霍普金斯大学),王昂天(约翰霍普金斯大学),张宇伦*(上海交通大学),杨小康(上海交通大学),周纵苇*(约翰霍普金斯大学),Alan Yuille(约翰霍普金斯大学)
论文简介: 由于X射线比自然光具有更强的穿透力,被广泛应用于透射成像。现有基于NeRF的方法在生成新视角X射线投影时,训练时间长且推理速度慢。本文提出了一种名为X-Gaussian的3D高斯分布框架,用于X射线新视角合成。我们设计了一个排除视角方向影响的辐射高斯点云模型,并开发了CUDA实现的可微分辐射光栅化(DRR)。此外,提出了角度-姿态立方体均匀初始化(ACUI)策略。实验表明,X-Gaussian性能提高6.5dB,训练时间缩短至15%,推理速度提升73倍,并在稀疏视角CT重建中展示了实用价值。
- Paper链接:
https://arxiv.org/abs/2403.04116 - Code链接:https://github.com/caiyuanhao1998/X-Gaussian
44. SRPose: Two-view Relative Pose Estimation with Sparse Keypoints
作者:殷睿(横乐医学科技),张宇伦(上海交通大学),潘哲荣(腾讯光子工作室),朱建军(横乐医学科技),王澄(横乐医学科技),贾骉*(横乐医学科技)
论文简介: SRPose第一次使用稀疏特征点的描述子和位置信息作为输入,更精确地估计出相机或物体在两帧之间的相对位姿变换,比传统特征点匹配法更加快速。SRPose采用两视角几何,适用于不同的相机内参和图像大小,为SfM和SLAM提出了新的方向。
- Paper链接:
https://arxiv.org/abs/2407.08199 - Code链接:https://github.com/frickyinn/SRPose
45. HiT-SR: Hierarchical Transformer for Efficient Image Super-Resolution
作者:张翔(苏黎世联邦理工学院),张宇伦*(上海交通大学),Fisher Yu(苏黎世联邦理工学院)
论文简介: Transformer在计算机视觉任务中表现出色,包括图像超分辨率(SR)。然而,流行的基于Transformer的SR方法通常采用窗口自注意力,计算复杂度随窗口大小呈平方增长,导致窗口固定且接收野有限。本文提出了一种将基于Transformer的SR网络转换为分层Transformer(HiT-SR)的通用策略,通过多尺度特征提升SR性能,同时保持高效设计。我们首先将常用的固定小窗口替换为扩展的分层窗口,以聚合不同尺度的特征并建立长程依赖关系。考虑到大窗口的计算量,我们设计了一种线性复杂度的空间-通道相关方法,有效收集分层窗口的空间和通道信息。大量实验验证了HiT-SR的有效性和效率,我们改进的SwinIR-Light、SwinIR-NG和SRFormer-Light在参数、FLOPs更少,速度更快(∼7倍)的情况下,达到了最新的SR结果。
- Paper链接:
https://arxiv.org/abs/2407.05878 - Code链接:https://github.com/XiangZ-0/HiT-SR
46. Hierarchical Separable Video Transformer for Snapshot Compressive Imaging
作者:王平(西湖大学),张宇伦(上海交通大学),王理顺(西湖大学),袁鑫(西湖大学)
论文简介: 最近,深度学习模型在快照压缩成像(SCI)逆问题上取得了显著成功,即从单次观测中重建多个高保真帧。然而,现有研究缺乏对空间掩模和时间混叠的深入理解,通常沿用成功的视频恢复模型(如去噪、去模糊)的设计,限制了整体性能。在本工作中,我们专门设计了一个网络架构和层级可分离视频变压器(HiSViT)作为基础模块,由跨尺度可分离多头自注意力(CSS-MSA)和门控自调制前馈网络(GSM-FFN)组成。CSS-MSA将时空相似性计算分解为空间和时间维度,但在单个注意力层中按可控尺度关注所有时空标记。GSM-FFN通过门控机制和时空可分离卷积为CSS-MSA引入局部性。HiSViT由多个CSS-MSA和GSM-FFN组建,每组关注不同尺度,实现多尺度交互和长距离建模。大量实验表明,我们的模型达到了最先进的性能。
#MVGS
GS 优化新范式!最强 3D 与 4D 重建 GS 方法
本篇分享论文MVGS: Multi-view-regulated Gaussian Splatting for Novel View Synthesis
,悉尼科技大学、昆士兰大学和理想汽车联合提出 MVGS:GS 优化新范式!最强 3D 与 4D 重建 GS 方法,已开源!
- Author: Xiaobiao Du
- paper:https://arxiv.org/abs/2410.02103
- Project page: https://xiaobiaodu.github.io/mvgs-project/
- Code: https://github.com/xiaobiaodu/MVGS
摘要
最近在体积渲染领域开展的工作,例如 NeRF 和 3D Gaussian Splatting(3DGS)借助学习到的隐式神经辐射场或 3D Gaussians,大大提高了渲染质量和效率。
Vanilla 3DGS 及其变体在显式表示的基础上进行渲染,通过在训练过程中采用 NeRF 的每次迭代单视角监督来优化参数模型,从而提高实时效率。因此,某些视图被过度拟合,导致新视图合成中出现不令人满意的外观和不精确的三维几何图形。
为了解决上述问题,我们提出了一种新的 3DGS 优化方法,其中包含四个关键的新贡献:
- 我们将传统的单视角训练模式转变为多视角训练策略。通过我们提出的多视角约束,可以进一步优化三维高斯属性,而不会过度拟合某些训练视角。作为一种通用解决方案,我们提高了各种场景和不同高斯变体的整体准确性。
- 受多视图训练带来的好处和启发,我们进一步提出了cross-intrinsic guidance方案,从而实现了从粗到细的不同分辨率训练程序。
- 在多视角约束训练的基础上,我们进一步提出了cross-ray densification策略,从选定的视角出发,在射线交叉区域致密化更多的高斯核。
- 通过进一步研究致密化策略,我们发现当某些视图显著不同时,致密化的效果应该得到加强。
作为解决方案,我们提出了一种新颖的multi-view augmented densification策略,即鼓励三维高斯相应地致密化到足够的数量,从而提高重建精度。
我们进行了大量实验,证明我们提出的方法能够在各种任务中将基于高斯的显式表示方法的新视图合成的 PSNR 提高约 1 dB。
介绍
对于无界场景或单个物体的写实渲染在工业和学术领域都具有重要价值,如多媒体生成、虚拟现实和自动驾驶等。传统的基于几何图元的表示方法(如网格和点云)通过高效的光栅化技术实现了实时渲染。尽管这种渲染机制具有较高的效率,但在呈现精细、准确的外观时,仍然存在模糊伪影和不连续性的问题。
相反,隐式表示和神经辐射场(NeRF)利用多层感知机(MLP)提高了渲染高保真几何结构的能力,保留了更多细节。然而,即使采用加速算法,推理效率仍然有限。
近年来,基于3D高斯的显式表示(如高斯点阵)凭借定制的光栅化技术,在渲染质量和效率上都达到了最新水平。这种训练策略通过每次迭代使用单个相机视角的样本进行训练,在NeRF中常见。然而,由于其显式特性,我们观察到这种单视角训练模式容易导致过拟合,不能精确呈现场景中的所有细节。
本文提出了一种通用优化方法MVGS,增强了基于高斯的显式方法的精度。我们的主要贡献是改变传统的单视角训练方式,提出多视角约束学习。在训练过程中,3D高斯通过多个视角的结构和外观联合学习,避免了过拟合问题。此外,我们提出了从低分辨率到高分辨率的cross-intrinsic guidance,低分辨率训练提供了多视角信息,有助于在高分辨率训练中雕刻更精细的细节。
为了提高多视角学习的效果,我们还提出了一种Cross-ray Densification策略,利用2D损失图引导3D高斯在重叠区域进行密集化,从而提高多视角下的重建性能。此外,当视角差异显著时,我们提出了多视角增强的密集化策略,鼓励3D高斯适应多视角信息,改善表现。
大量实验表明,我们的方法在各种任务上提升了基于高斯方法的新视角合成精度,包括一般物体重建、4D重建和大规模场景重建。实验结果显示,随着每轮优化中视角数量的增加,精度得到显著提升。
方法
method
Gaussian Splatting 最近被提出用于实时的新视角合成和高保真 3D 几何重建。与 NeRF 和 NeuS 中采用的隐式表示(如 NeRF 中的密度场和 NeuS 中的 SDF)不同,Gaussian Splatting 利用了一组各自具有位置、颜色、协方差和不透明度的各向异性 3D 高斯函数来参数化场景。这种显式表示与之前的 NeRF 和 NeuS 方法相比,显著提高了训练和推理效率。
在渲染过程中,Gaussian Splatting 采用了基于点的体积渲染技术,类似于 NeRF。如图(a)所示,我们指出 NeRF 由于其点采样策略和隐式表示,无法在一个训练迭代中接收多视角监督。图像中像素 的视角依赖辐射 是通过混合沿着射线 的一组 3D 高斯来计算的。NeRF 使用采样器分配的点在辐射场中进行近似混合,而 3DGS 则通过栅格化与沿射线 的 个参数化核 进行精确混合。
假设第 个高斯 的属性分别由颜色 、不透明度 和协方差 描述,渲染的像素辐射 表示为
其中颜色 由透光率 加权。这里 表示高斯核的位置 与查询像素 之间的距离。 表示 3D 高斯的数量。
给定 对地真图像 及其对应的相机外参 和内参 ,即 ,3DGS 的目标是重建由多视角立体数据描述的 3D 模型。在训练策略方面,3DGS 遵循 NeRF 的惯例,即通过每次迭代的单视角监督来优化参数模型。关于训练,3DGS 通常通过每次迭代中的单视角信息监督进行优化,其中每次迭代中的监督是随机选择的 。
因此,原始 3DGS 的损失函数可以相应地表示为:
其中, 和 分别表示平均绝对误差和 D-SSIM 损失。 表示部分 会在单视角监督模式下受到较大的梯度影响。实际上,超参数 用于控制这两个损失项之间的比例。
Multi-view Regulated Learning
考虑到隐式表示(例如 NeRF)依赖于预训练的采样器来近似最具置信度的混合点,多视角监督并不能保证相较于单视角训练的提升,特别是在采样器未经过充分训练时。显式定义的高斯核则不依赖于采样器进行分配,因此我们提出的多视角训练策略是可行的,其中大部分混合核 可以通过多视角加权梯度进行反向传播,从而克服某些视角的过拟合问题。
与原始的单视角迭代训练不同,我们提出了一种多视角约束的训练方法,以多视角监督的方式优化 3D 高斯。具体来说,在一次迭代中,我们采样 对监督图像和相机参数。
因此,我们提出的在单次迭代中整合梯度的多视角约束学习可以表示为:
其中 表示在多视角训练中,每个视角的部分 3D 高斯 将受到大的梯度影响。与原始 3DGS 损失的唯一不同之处在于,我们提出的方法为优化一组 3D 高斯 提供了多视角约束。
通过这种方式,优化每个高斯核 可能会受到多视角信息的调节,从而克服对某些视角的过拟合问题。此外,多视角约束使 3D 高斯能够学习并推导出视角依赖信息,如反射,因此我们的方法在反射场景的新视角合成中表现良好。
Cross-intrinsic Guidance
如方法图底部所示,受图像金字塔的启发,我们提出了一种粗到细的训练方案,使用不同的相机设置(即内参 ),通过简单地补充更多的光栅化平面来实现。
具体来说,通过重新配置 中的焦距 和主点 ,可以构建一个具有降采样因子 的四层图像金字塔,如图(d) 所示经验上,设置 为 8 已足够容纳足够的训练图像进行多视角训练, 等于 1 意味着未应用降采样操作。
对于每一层,我们有匹配的多视角设置 。特别地,较大的降采样因子允许容纳更多视角,从而提供更强的多视角约束。
在最初的三个训练阶段,我们只在每个阶段运行几千次迭代,而不完全训练模型。由于目标图像经过降采样,模型在这些早期阶段无法捕捉到细节。因此,我们将前三个训练阶段视为粗略训练。在粗略训练期间,整合更多的多视角信息对整个 3D 高斯施加更强的约束。在这种情况下,丰富的多视角信息为整个 3DGS 提供了全面的监督,并促进粗略纹理和结构的快速拟合。
一旦粗略训练完成,细致训练就会开始。由于先前的粗略训练阶段提供了 3DGS 的粗略结构,细致训练阶段只需细化和雕刻每个 3D 高斯的细节。特别是,粗略训练阶段提供了大量的多视角约束,并将所学习的多视角约束传递到接下来的细致训练中。该方案有效地增强了多视角约束,并进一步提高了新视角合成的性能。
Cross-ray Densification
由于体积渲染的特性以及3D高斯(3DGS)的显式表示,某些区域的3D高斯在渲染时对不同视角有显著影响。例如,当相机从不同姿态拍摄中心时,中央的3D高斯在渲染中至关重要。然而,找到这些区域并不简单,尤其是在三维空间中。
我们提出了一种交叉射线密集化策略,从二维空间开始,然后自适应地在三维空间中搜索。具体而言,我们首先计算多个视角的损失图,然后使用大小为的滑动窗口定位包含最大平均损失值的区域。随后,我们从这些区域的顶点发射射线,每个窗口发射四条射线。接着,我们计算不同视角射线之间的交点。由于每个视角发射四条射线,这些交点可以形成多个立方体。这些立方体是包含显著3D高斯的重叠区域,在为多个视角进行渲染时发挥着重要作用。因此,我们在这些重叠区域中进一步密集化更多的3D高斯,以促进多视角监督的训练。
该策略依赖于准确搜索包含对多个视角具有高度重要性的3D高斯的重叠区域。首先,我们选择损失引导,因为它突出了每个视角需要改进的低质量区域。其次,射线投射技术使我们能够定位包含一组对这些视角贡献显著的3D高斯的三维区域。基于准确的位置,这些区域中的3D高斯被视为多视角联合优化的关键。因此,我们在这些区域内密集化这些3D高斯,以提高这些视角的重建性能。
Multi-view Augmented Densification
为了实现快速收敛、避免局部最小值并学习细粒度的高斯核,同时在不同视角之间的差异显著时,我们提出了一种多视角增强密集化策略。具体而言,我们的策略基于原始3D高斯(3DGS)的密集化策略,并使用预定义阈值β来确定哪些3D高斯应进行密集化。
如图所示,我们首先识别训练视角是否存在显著差异。我们不直接使用原始相机的平移,而是将采样视角的相机平移标准化到单位球体。这种方法使我们的策略适应各种场景。然后,计算每个相机与其他相机之间的相对平移距离 ,其中距离的数量n为M^2 - M,假设我们有M个训练视角。
在我们的多视角增强密集化中,我们有一个自适应标准可以表示为:
其中H(·)是Heaviside函数,当输入大于或等于0时返回1。τ是预定义的超参数。
通过这种方式,当每个视角之间的差异变大时,3D高斯的密集化程度也会增强。因此,我们提出的多视角增强密集化策略使得3D高斯能够更好地适应每个视角,并捕捉更细致的细节。
实验效果
3drec
3drec_vis
reflective
4d
vis
#Real-IAD
业界最大!腾讯优图发布Real-IAD大规模工业异常检测数据集!
Title:Real-IAD: A Real-World Multi-View Dataset for Benchmarking Versatile Industrial Anomaly Detection
Project Page:https://realiad4ad.github.io/Real-IAD/
动机:为什么构建Large-scale Real-world Real-IAD数据集
- 一方面,大多数最先进的方法在MVTec / VisA等主流数据集上已经达到饱和(AUROC超过99%),无法很好地区分方法之间的差异,且由于难度较小而与实际应用场景之间存在较大差距,因此需要更具挑战性的数据集来支持AD领域的进一步研究。
- 另一方面,各种新的实用异常检测设置的研究受到数据集规模的限制(比如带噪和小样本更贴近实际应用的setting),存在评估结果过拟合的风险,因此需要更大规模的数据集来支持;
- 工业生产中的良率通常介于60%-100%之间,与现有的100%良率实验setting不符,因此,需要更具实际应用价值的setting,即我们提出的Fully Unsupervised Industrial Anomaly Detection,FUIAD。
Real-IAD数据集特性:
- 更多的类别:30类真实产线物料
- 大规模数据量:150K数据
- 多种材料:金属,塑料,木材,陶瓷和混合材料
- 多种缺陷类别:缺失、划伤、裂纹、脏污、破洞、变形、凹坑、破损
- 多视角:5个拍摄角度(顶拍+4个侧拍)
- 更高的分辨率:2K~5K
- 支持多种实验设置:1)FUIAD;2)多视角AD;3)无监督AD;4)Zero-/Few-shot AD;5)带噪AD等
与主流的2D异常检测数据集规模及属性对比如下表
5个视角的采集效果图示例,包含两种典型异常场景:
1)缺陷可以在一个sample中的每个view都可见
2)缺陷仅在一个sample中部分view上可见
这更具有实际意义和更大的挑战性,将AD推向实际应用迈出了新的一步!
本文贡献
- 提出了一个新的Real-IAD数据集,它比现有的主流数据集大十倍以上。它包括30类对象,每类对象包含5个拍摄角度,共计150K高分辨率图像。Real-IAD具有更大的缺陷面积和缺陷比例范围,能够更好地区分不同方法的性能,满足IAD的各种研究设置。
- 基于Real-IAD数据集构建了一个更接近实际应用场景的FUIAD(Fully Unsupervised Industry Anomaly Detection)设置,其中仅使用大多数生产线的成品率大于60%的自然存在约束,而不引入额外的手动注释。
- 我们报告了常用的IAD方法在Real-IAD数据集上在几种设置下的性能,并提供了一个极具挑战性的基准,以促进异常检测领域的发展。
拆解 Real-IAD 数据收集的具体过程,如下图所示:
- 物料准备及缺陷产品构建
- 材料:包含金属,塑料,木材,陶瓷和混合材料
- 缺陷类型:包含缺失、划伤、裂纹、脏污、破洞、变形、凹坑、破损共8种
- 原型采集设备准备:包含1个顶拍相机加4个侧拍相机
- 工业级数据收集、标注、清洗过程:
使用3个基于HRNet-32w主干网络的Cascade RCNN进行检测、交叉验证,直到检测结果偏差小于预定条件(AP基本不变,修改标注的图片数/instance足够小)
Real-IAD数据统计分析:
更多的数据信息、下载方式及Benchmark 结果可移步项目主页:
Project Page: https://realiad4ad.github.io/Real-IAD/
基于该数据集的已有开源方法推荐:
AD Benchmark: https://github.com/zhangzjn/ader
MambaAD[NeurIPS'24]: https://github.com/lewandofskee/MambaAD
Dinomaly: https://github.com/guojiajeremy/Dinomaly
#diffusion模型
本文是关于去噪扩散概率模型(也称为DDPM或扩散模型)的详细实践指南,从基本原理出发,逐步介绍了如何在PyTorch中实现这一模型,并通过实验展示了模型在图像生成上的应用。文章还探讨了扩散模型的数学描述、神经网络架构以及训练和采样过程,为读者提供了一个全面的学习资源。
本文为The Annotated Diffusion Model博客的中文翻译版,仅用作学术交流分享。
在这篇文章中,我们将深入研究去噪扩散概率模型(也称为 DDPM、扩散模型、基于分数的生成模型或简称为 自动编码器),因为研究人员已经能够利用它们在(无)条件图像/音频/视频生成方面取得显著成果。在2022年时,流行的例子包括 OpenAI 的 GLIDE 和 DALL-E 2、海德堡大学的 Latent Diffusion 和 Google Brain 的 ImageGen。
我们将回顾 (Ho et al., 2020) 的原始 DDPM 论文,并基于 Phil Wang 的 实现 在 PyTorch 中逐步实现它,而 Phil Wang 的 实现 本身又基于 原始 TensorFlow 实现。请注意,生成建模的扩散概念实际上已在 (Sohl-Dickstein et al., 2015) 中引入。然而,直到 (Song et al., 2019)(斯坦福大学)和 (Ho et al., 2020)(Google Brain)才独立改进了该方法并取得了显著成效,之后diffusion模型才开始流行起来。
请注意,关于扩散模型有 几种观点。在这里,我们从离散时间(潜在变量模型)视角出发进行解读,但请读者务必对其他视角也进行一定的了解。OK,那我们就开始吧!
我们将首先安装并导入所需的库(假设你已经安装了 PyTorch)。
!pip install -q -U einops datasets matplotlib tqdm
import math
from inspect import isfunction
from functools import partial
%matplotlib inline
import matplotlib.pyplot as plt
from tqdm.auto import tqdm
from einops import rearrange, reduce
from einops.layers.torch import Rearrange
import torch
from torch import nn, einsum
import torch.nn.functional as F
什么是diffusion model ?
扩散模型(或去噪扩散模型)相比其他生成模型(如Normalizing Flows、GANs或VAEs)并不复杂:这些模型都是将某种简单分布中的噪声转换为数据样本。这种方式同样适用于扩散模型,其中神经网络学习逐渐去噪数据,从纯噪声开始逐步生成一个数据样本。
更具体来说,对于图像数据,模型包含两个过程:
- 一个我们可以选择的固定(或预定义)前向扩散过程 , 该过程逐渐将高斯噪声添加到图像中, 直到最终得到纯噪声。
- 一个学习到的反向去噪扩散过程 , 通过训练神经网络逐渐对图像去噪, 从纯噪声逐步生成一张真实图像。
前向和反向过程均基于时间步骤 进行, 且在有限时间步骤 内完成(DDPM 论文中采用 )。在 时,从数据分布中采样一个真实图像 (例如 ImageNet 数据集中的一张猫的图片),前向过程在每个时间步骤 中从高斯分布中采样一些噪声并将其添加到前一时间步骤的图像上。通过选择足够大的 和合理的噪声添加调度, 最终可以在 时通过渐进过程得到一个各向同性高斯分布。
从数学角度来描述
让我们更正式地描述这一过程,因为我们最终需要一个可计算的损失函数,供神经网络进行优化。
设 为真实数据分布(例如"真实图像")。我们可以从这个分布中采样一个图像, 即 。我们定义前向扩散过程 , 该过程在每个时间步骤 添加高斯噪声,根据一个已知的variance scheduler0 进行
回顾一下,正态分布(也称高斯分布)由两个参数定义:均值 和方差 。基本上,每个时间步 的新图像是从一个 条件高斯分布 中生成的, 其均值 且方差 。我们可以通过采样 并设置 来实现。
注意, 在每个时间步骤 中不是常数(因此带有下标)。实际上,人们定义了一种所谓的 "方差调度", 可以是线性的、二次的、余弦的等等(类似学习率调度)。
因此, 从 开始, 最终得到 , 若调度设置合理, 将为纯高斯噪声。
现在, 假设我们知道条件分布 , 那么可以运行反向过程:从一些随机高斯噪声 采样, 并逐渐"去噪", 最终得到一个来自真实分布的样本 。
然而, 我们并不知道 。这在计算上是不可行的, 因为需要知道所有可能图像的分布来计算这一条件概率。因此,我们将借助神经网络来 逼近(学习)这一条件概率分布,将其记作 , 其中 为神经网络的参数, 通过梯度下降进行更新。
因此,我们需要一个神经网络来表示反向过程的(条件)概率分布。假设这一反向过程也为高斯分布,回忆一下任何高斯分布都由两个参数定义:
- 均值由 参数化;
- 方差由 参数化;
因此我们可以参数化该过程为
其中均值和方差也依赖于噪声水平。
因此,我们的神经网络需要学习/表示均值和方差。然而,DDPM 论文的作者决定固定方差,仅让神经网络学习(表示)这一条件概率分布的均值。论文中提到:
首先, 我们设 为未训练的时间依赖常数。实验表明, 和 (参见论文)有类似的效果。
在后续的 改进的扩散模型 论文中,这一方法得到改进,神经网络不仅学习反向过程的均值,还学习方差。
因此,我们继续假设神经网络仅需要学习/表示这一条件概率分布的均值。
定义需要优化的目标函数
为了推导出一个用于学习反向过程均值的目标函数, 作者指出, 和 的组合可以视为变分自编码器(VAE)(Kingma et al.,2013)。因此,可以使用变分下界(也称 ELBO)最小化相对于真实数据样本 的负对数似然(关于 ELBO 的详细信息可参考 VAE 论文)。该过程的 ELBO 实际上是每个时间步骤 的损失的总和, 即 。通过前向过程 和反向过程的构建, 损失的每一项(除了 )实际上是两个高斯分布之间的 KL 散度,可以用关于均值的 L2 损失显式表示!
根据 Sohl-Dickstein 等人的结果, 前向过程 的一个直接结果是, 我们可以在任意噪声水平上以 为条件采样 (因为高斯分布的和仍是高斯分布)。这非常方便:我们不需要反复应用 来采样 。我们有
其中 且 。我们将此等式称为"优良特性"。这意味着我们可以采样高斯噪声, 适当缩放并将其添加到 上以直接得到 。注意, 是已知的 方差调度的函数,因此也是已知的,可以预先计算。这使得我们在训练过程中,可以优化损失函数 的随机项(换句话说, 在训练过程中随机采样 并优化 )。
这一特性的另一个好处是,如 Ho 等人所展示的,可以(通过一些数学推导,详细推导请参考这篇优秀博文)重新参数化均值,使神经网络学习(预测)在 KL 项中作为损失的噪声(通过网络)。这意味着我们的神经网络成为一个噪声预测器,而不是直接的均值预测器。均值可以如下计算:
最终的目标函数 如下所示(对于给定 的随机时间步骤 ):
这里, 是初始 (真实且未受污染的) 图像, 我们看到由固定的前向过程给出的直接噪声水平 样本。 是在时间步骤 采样的纯噪声, 而 是我们的神经网络。神经网络通过真实噪声和预测高斯噪声之间的简单均方误差 (MSE) 进行优化。
训练算法如下所示:
换句话说:
- 我们从真实的、可能复杂的数据分布 中随机采样一个样本
- 我们在 1 和 之间均匀采样噪声水平 (即随机时间步骤)
- 我们从高斯分布中采样一些噪声, 并在水平 将其添加到输入上(使用上面定义的优良特性)
- 神经网络被训练来基于被污染的图像 预测此噪声(即在已知调度 基础上对 应用噪声)
实际上,这些操作都是在数据批次上完成的,因为我们使用随机梯度下降优化神经网络。
神经网络(模型部分)
神经网络需要在特定时间步骤上接收一个带噪声的图像并返回预测的噪声。注意,预测的噪声是一个与输入图像大小/分辨率相同的张量。因此,网络实际上输入和输出具有相同形状的张量。那我们可以使用哪种类型的神经网络呢?
通常使用的神经网络与自编码器非常相似,您可能在“深度学习入门”教程中见过自编码器。自编码器在编码器和解码器之间具有所谓的“瓶颈”层。编码器首先将图像编码为一个较小的隐藏表示,称为“瓶颈”,然后解码器将该隐藏表示解码回实际图像。这强迫网络在瓶颈层中仅保留最重要的信息。
在架构方面,DDPM 的作者选择了 U-Net,由 (Ronneberger et al., 2015) 提出(当时在医学图像分割中实现了最先进的效果)。这种网络与任何自编码器一样,在中间有一个瓶颈,确保网络只学习最重要的信息。重要的是,它在编码器和解码器之间引入了残差连接,大大改善了梯度流动(灵感来源于 He et al., 2015 的 ResNet)。
如图所示,U-Net 模型首先对输入进行下采样(即在空间分辨率方面缩小输入),然后进行上采样。
下面,我们一步步实现这个网络。
辅助函数
首先,我们定义一些在实现神经网络时会使用到的辅助函数和类。特别地,我们定义一个 Residual
模块,它简单地将输入添加到特定函数的输出中(换句话说,为特定函数添加一个残差连接)。
我们还为上采样和下采样操作定义了别名。
def exists(x):
return x is not None
def default(val, d):
if exists(val):
return val
return d() if isfunction(d) else d
def num_to_groups(num, divisor):
groups = num // divisor
remainder = num % divisor
arr = [divisor] * groups
if remainder > 0:
arr.append(remainder)
return arr
class Residual(nn.Module):
def __init__(self, fn):
super().__init__()
self.fn = fn
def forward(self, x, *args, **kwargs):
return self.fn(x, *args, **kwargs) + x
def Upsample(dim, dim_out=None):
return nn.Sequential(
nn.Upsample(scale_factor=2, mode="nearest"),
nn.Conv2d(dim, default(dim_out, dim), 3, padding=1),
)
def Downsample(dim, dim_out=None):
# No More Strided Convolutions or Pooling
return nn.Sequential(
Rearrange("b c (h p1) (w p2) -> b (c p1 p2) h w", p1=2, p2=2),
nn.Conv2d(dim * 4, default(dim_out, dim), 1),
)
Position embeddings
由于神经网络的参数在时间(噪声水平)上是共享的,作者借鉴了 Transformer 的位置编码 (Vaswani et al., 2017),使用正弦位置编码对 进行编码。这使得神经网络可以“知道”它在每张批次中的图像上处于哪个特定时间步骤(噪声水平)。
SinusoidalPositionEmbeddings
模块接收一个形状为 (batch_size, 1)
的张量作为输入(即批次中若干带噪声图像的噪声水平),并将其转换为形状为 (batch_size, dim)
的张量,其中 dim
为位置嵌入的维度。然后,该嵌入将被添加到每个残差块中,后续我们会进一步说明。
class SinusoidalPositionEmbeddings(nn.Module):
def __init__(self, dim):
super().__init__()
self.dim = dim
def forward(self, time):
device = time.device
half_dim = self.dim // 2
embeddings = math.log(10000) / (half_dim - 1)
embeddings = torch.exp(torch.arange(half_dim, device=device) * -embeddings)
embeddings = time[:, None] * embeddings[None, :]
embeddings = torch.cat((embeddings.sin(), embeddings.cos()), dim=-1)
return embeddings
ResNet block
接下来,我们定义 U-Net 模型的核心构建块。DDPM 作者使用了一个宽残差网络块(Wide ResNet block) (Zagoruyko et al., 2016),但 Phil Wang 将标准卷积层替换为“权重标准化”的版本,这在与组归一化结合时表现更佳(详情请参见 (Kolesnikov et al., 2019))。
class WeightStandardizedConv2d(nn.Conv2d):
"""
https://arxiv.org/abs/1903.10520
weight standardization purportedly works synergistically with group normalization
"""
def forward(self, x):
eps = 1e-5 if x.dtype == torch.float32 else 1e-3
weight = self.weight
mean = reduce(weight, "o ... -> o 1 1 1", "mean")
var = reduce(weight, "o ... -> o 1 1 1", partial(torch.var, unbiased=False))
normalized_weight = (weight - mean) / (var + eps).rsqrt()
return F.conv2d(
x,
normalized_weight,
self.bias,
self.stride,
self.padding,
self.dilation,
self.groups,
)
class Block(nn.Module):
def __init__(self, dim, dim_out, groups=8):
super().__init__()
self.proj = WeightStandardizedConv2d(dim, dim_out, 3, padding=1)
self.norm = nn.GroupNorm(groups, dim_out)
self.act = nn.SiLU()
def forward(self, x, scale_shift=None):
x = self.proj(x)
x = self.norm(x)
if exists(scale_shift):
scale, shift = scale_shift
x = x * (scale + 1) + shift
x = self.act(x)
return x
class ResnetBlock(nn.Module):
"""https://arxiv.org/abs/1512.03385"""
def __init__(self, dim, dim_out, *, time_emb_dim=None, groups=8):
super().__init__()
self.mlp = (
nn.Sequential(nn.SiLU(), nn.Linear(time_emb_dim, dim_out * 2))
if exists(time_emb_dim)
else None
)
self.block1 = Block(dim, dim_out, groups=groups)
self.block2 = Block(dim_out, dim_out, groups=groups)
self.res_conv = nn.Conv2d(dim, dim_out, 1) if dim != dim_out else nn.Identity()
def forward(self, x, time_emb=None):
scale_shift = None
if exists(self.mlp) and exists(time_emb):
time_emb = self.mlp(time_emb)
time_emb = rearrange(time_emb, "b c -> b c 1 1")
scale_shift = time_emb.chunk(2, dim=1)
h = self.block1(x, scale_shift=scale_shift)
h = self.block2(h)
return h + self.res_conv(x)
Attention module
接下来,我们定义注意力模块,DDPM 作者在卷积块之间添加了这个模块。注意力机制是著名的 Transformer 架构的构建块 (Vaswani et al., 2017),它在从自然语言处理到视觉以及蛋白质折叠等各个 AI 领域中取得了巨大成功。Phil Wang 使用了两种注意力机制的变体:一种是常规的多头自注意力(与 Transformer 中使用的相同),另一种是线性注意力变体 (Shen et al., 2018),其时间和内存需求相对于序列长度呈线性增长,而常规注意力呈二次增长。
关于注意力机制的详细解释,请参考 Jay Allamar 的精彩博文。
class Attention(nn.Module):
def __init__(self, dim, heads=4, dim_head=32):
super().__init__()
self.scale = dim_head**-0.5
self.heads = heads
hidden_dim = dim_head * heads
self.to_qkv = nn.Conv2d(dim, hidden_dim * 3, 1, bias=False)
self.to_out = nn.Conv2d(hidden_dim, dim, 1)
def forward(self, x):
b, c, h, w = x.shape
qkv = self.to_qkv(x).chunk(3, dim=1)
q, k, v = map(
lambda t: rearrange(t, "b (h c) x y -> b h c (x y)", h=self.heads), qkv
)
q = q * self.scale
sim = einsum("b h d i, b h d j -> b h i j", q, k)
sim = sim - sim.amax(dim=-1, keepdim=True).detach()
attn = sim.softmax(dim=-1)
out = einsum("b h i j, b h d j -> b h i d", attn, v)
out = rearrange(out, "b h (x y) d -> b (h d) x y", x=h, y=w)
return self.to_out(out)
class LinearAttention(nn.Module):
def __init__(self, dim, heads=4, dim_head=32):
super().__init__()
self.scale = dim_head**-0.5
self.heads = heads
hidden_dim = dim_head * heads
self.to_qkv = nn.Conv2d(dim, hidden_dim * 3, 1, bias=False)
self.to_out = nn.Sequential(nn.Conv2d(hidden_dim, dim, 1),
nn.GroupNorm(1, dim))
def forward(self, x):
b, c, h, w = x.shape
qkv = self.to_qkv(x).chunk(3, dim=1)
q, k, v = map(
lambda t: rearrange(t, "b (h c) x y -> b h c (x y)", h=self.heads), qkv
)
q = q.softmax(dim=-2)
k = k.softmax(dim=-1)
q = q * self.scale
context = torch.einsum("b h d n, b h e n -> b h d e", k, v)
out = torch.einsum("b h d e, b h d n -> b h e n", context, q)
out = rearrange(out, "b h c (x y) -> b (h c) x y", h=self.heads, x=h, y=w)
return self.to_out(out)
Group normalization
DDPM 的作者在 U-Net 的卷积/注意力层之间插入了组归一化 (Wu et al., 2018)。下面,我们定义一个 PreNorm
类,用于在注意力层之前应用组归一化,后续会进一步说明。需要注意的是,关于在 Transformer 中应在注意力前还是注意力后应用归一化的问题,一直存在争论。
class PreNorm(nn.Module):
def __init__(self, dim, fn):
super().__init__()
self.fn = fn
self.norm = nn.GroupNorm(1, dim)
def forward(self, x):
x = self.norm(x)
return self.fn(x)
Conditional U-Net
现在我们已经定义了所有构建块(位置嵌入、ResNet 块、注意力和组归一化),是时候定义整个神经网络了。回顾一下,网络的任务是接收一批带噪声的图像及其相应的噪声水平,并输出添加到输入中的噪声。更正式地说:
- 网络接收一个形状为
(batch_size, num_channels, height, width)
的带噪声图像批次和一个形状为(batch_size, 1)
的噪声水平批次作为输入,返回一个形状为(batch_size, num_channels, height, width)
的张量
该网络的构建步骤如下:
- 首先,对带噪声图像批次应用卷积层,并为噪声水平计算位置嵌入
- 接着,应用一系列下采样阶段。每个下采样阶段由 2 个 ResNet 块 + 组归一化 + 注意力 + 残差连接 + 一个下采样操作组成
- 在网络中间,再次应用 ResNet 块并插入注意力层
- 然后,应用一系列上采样阶段。每个上采样阶段由 2 个 ResNet 块 + 组归一化 + 注意力 + 残差连接 + 一个上采样操作组成
- 最后,应用一个 ResNet 块和一个卷积层
最终,神经网络像堆叠乐高积木一样堆叠各层(不过理解它们的工作原理很重要)。
class Unet(nn.Module):
def __init__(
self,
dim,
init_dim=None,
out_dim=None,
dim_mults=(1, 2, 4, 8),
channels=3,
self_cnotallow=False,
resnet_block_groups=4,
):
super().__init__()
# determine dimensions
self.channels = channels
self.self_condition = self_condition
input_channels = channels * (2 if self_condition else 1)
init_dim = default(init_dim, dim)
self.init_conv = nn.Conv2d(input_channels, init_dim, 1, padding=0) # changed to 1 and 0 from 7,3
dims = [init_dim, *map(lambda m: dim * m, dim_mults)]
in_out = list(zip(dims[:-1], dims[1:]))
block_klass = partial(ResnetBlock, groups=resnet_block_groups)
# time embeddings
time_dim = dim * 4
self.time_mlp = nn.Sequential(
SinusoidalPositionEmbeddings(dim),
nn.Linear(dim, time_dim),
nn.GELU(),
nn.Linear(time_dim, time_dim),
)
# layers
self.downs = nn.ModuleList([])
self.ups = nn.ModuleList([])
num_resolutions = len(in_out)
for ind, (dim_in, dim_out) in enumerate(in_out):
is_last = ind >= (num_resolutions - 1)
self.downs.append(
nn.ModuleList(
[
block_klass(dim_in, dim_in, time_emb_dim=time_dim),
block_klass(dim_in, dim_in, time_emb_dim=time_dim),
Residual(PreNorm(dim_in, LinearAttention(dim_in))),
Downsample(dim_in, dim_out)
if not is_last
else nn.Conv2d(dim_in, dim_out, 3, padding=1),
]
)
)
mid_dim = dims[-1]
self.mid_block1 = block_klass(mid_dim, mid_dim, time_emb_dim=time_dim)
self.mid_attn = Residual(PreNorm(mid_dim, Attention(mid_dim)))
self.mid_block2 = block_klass(mid_dim, mid_dim, time_emb_dim=time_dim)
for ind, (dim_in, dim_out) in enumerate(reversed(in_out)):
is_last = ind == (len(in_out) - 1)
self.ups.append(
nn.ModuleList(
[
block_klass(dim_out + dim_in, dim_out, time_emb_dim=time_dim),
block_klass(dim_out + dim_in, dim_out, time_emb_dim=time_dim),
Residual(PreNorm(dim_out, LinearAttention(dim_out))),
Upsample(dim_out, dim_in)
if not is_last
else nn.Conv2d(dim_out, dim_in, 3, padding=1),
]
)
)
self.out_dim = default(out_dim, channels)
self.final_res_block = block_klass(dim * 2, dim, time_emb_dim=time_dim)
self.final_conv = nn.Conv2d(dim, self.out_dim, 1)
def forward(self, x, time, x_self_cnotallow=None):
if self.self_condition:
x_self_cond = default(x_self_cond, lambda: torch.zeros_like(x))
x = torch.cat((x_self_cond, x), dim=1)
x = self.init_conv(x)
r = x.clone()
t = self.time_mlp(time)
h = []
for block1, block2, attn, downsample in self.downs:
x = block1(x, t)
h.append(x)
x = block2(x, t)
x = attn(x)
h.append(x)
x = downsample(x)
x = self.mid_block1(x, t)
x = self.mid_attn(x)
x = self.mid_block2(x, t)
for block1, block2, attn, upsample in self.ups:
x = torch.cat((x, h.pop()), dim=1)
x = block1(x, t)
x = torch.cat((x, h.pop()), dim=1)
x = block2(x, t)
x = attn(x)
x = upsample(x)
x = torch.cat((x, r), dim=1)
x = self.final_res_block(x, t)
return self.final_conv(x)
定义diffusion前向过程
前向扩散过程在若干时间步骤 内逐渐向来自真实分布的图像添加噪声。这个过程依赖于一个方差调度。原始的 DDPM 作者采用了线性调度:
我们将前向过程的方差设置为常数,从 线性增加到 。
然而,(Nichol et al., 2021) 研究表明,使用余弦调度可以获得更好的结果。
下面,我们为个时间步定义了不同的调度(稍后我们会选择一个)。
def cosine_beta_schedule(timesteps, s=0.008):
"""
cosine schedule as proposed in https://arxiv.org/abs/2102.09672
"""
steps = timesteps + 1
x = torch.linspace(0, timesteps, steps)
alphas_cumprod = torch.cos(((x / timesteps) + s) / (1 + s) * torch.pi * 0.5) ** 2
alphas_cumprod = alphas_cumprod / alphas_cumprod[0]
betas = 1 - (alphas_cumprod[1:] / alphas_cumprod[:-1])
return torch.clip(betas, 0.0001, 0.9999)
def linear_beta_schedule(timesteps):
beta_start = 0.0001
beta_end = 0.02
return torch.linspace(beta_start, beta_end, timesteps)
def quadratic_beta_schedule(timesteps):
beta_start = 0.0001
beta_end = 0.02
return torch.linspace(beta_start**0.5, beta_end**0.5, timesteps) ** 2
def sigmoid_beta_schedule(timesteps):
beta_start = 0.0001
beta_end = 0.02
betas = torch.linspace(-6, 6, timesteps)
return torch.sigmoid(betas) * (beta_end - beta_start) + beta_start
首先, 我们使用线性调度设置 个时间步骤, 并从 定义我们将需要的各种变量,如方差的累积乘积 。下面的每个变量都是一维张量, 存储从 到 的值。重要的是, 我们还定义了一个 extract 函数, 用于从批次索引中提取适当的 索引。
timesteps = 300
# define beta schedule
betas = linear_beta_schedule(timesteps=timesteps)
# define alphas
alphas = 1. - betas
alphas_cumprod = torch.cumprod(alphas, axis=0)
alphas_cumprod_prev = F.pad(alphas_cumprod[:-1], (1, 0), value=1.0)
sqrt_recip_alphas = torch.sqrt(1.0 / alphas)
# calculations for diffusion q(x_t | x_{t-1}) and others
sqrt_alphas_cumprod = torch.sqrt(alphas_cumprod)
sqrt_one_minus_alphas_cumprod = torch.sqrt(1. - alphas_cumprod)
# calculations for posterior q(x_{t-1} | x_t, x_0)
posterior_variance = betas * (1. - alphas_cumprod_prev) / (1. - alphas_cumprod)
def extract(a, t, x_shape):
batch_size = t.shape[0]
out = a.gather(-1, t.cpu())
return out.reshape(batch_size, *((1,) * (len(x_shape) - 1))).to(t.device)
我们将使用一张猫的图像来展示在扩散过程的每个时间步骤中如何添加噪声。
from PIL import Image
import requests
url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
image = Image.open(requests.get(url, stream=True).raw) # PIL image of shape HWC
image
output_cats
噪声是添加到 PyTorch 张量上的,而不是 Pillow 图像。因此,我们首先定义图像转换,以便从 PIL 图像转换为 PyTorch 张量(在其上可以添加噪声),反之亦然。
这些转换相对简单:首先将图像标准化, 通过除以 255 使它们处于 范围内, 然后确保它们处于 范围内。根据 DPPM 论文:
我们假设图像数据由 中的整数组成, 线性缩放到 。这确保神经网络的反向过程在从标准正态先验 开始时对一致缩放的输入进行操作。
from torchvision.transforms import Compose, ToTensor, Lambda, ToPILImage, CenterCrop, Resize
image_size = 128
transform = Compose([
Resize(image_size),
CenterCrop(image_size),
ToTensor(), # turn into torch Tensor of shape CHW, divide by 255
Lambda(lambda t: (t * 2) - 1),
])
x_start = transform(image).unsqueeze(0)
x_start.shape
Output:
torch.Size([1, 3, 128, 128])
我们还定义了反向转换,它接收一个包含范围内值的 PyTorch 张量,并将其转换回 PIL 图像:
import numpy as np
reverse_transform = Compose([
Lambda(lambda t: (t + 1) / 2),
Lambda(lambda t: t.permute(1, 2, 0)), # CHW to HWC
Lambda(lambda t: t * 255.),
Lambda(lambda t: t.numpy().astype(np.uint8)),
ToPILImage(),
])
让我们来验证一下:
reverse_transform(x_start.squeeze())
output_cats_verify
现在我们可以按照论文中的描述定义前向扩散过程:
# forward diffusion (using the nice property)
def q_sample(x_start, t, noise=None):
if noise is None:
noise = torch.randn_like(x_start)
sqrt_alphas_cumprod_t = extract(sqrt_alphas_cumprod, t, x_start.shape)
sqrt_one_minus_alphas_cumprod_t = extract(
sqrt_one_minus_alphas_cumprod, t, x_start.shape
)
return sqrt_alphas_cumprod_t * x_start + sqrt_one_minus_alphas_cumprod_t * noise
让我们在特定的时间步骤上测试它:
def get_noisy_image(x_start, t):
# add noise
x_noisy = q_sample(x_start, t=t)
# turn back into PIL image
noisy_image = reverse_transform(x_noisy.squeeze())
return noisy_image
# take time step
t = torch.tensor([40])
get_noisy_image(x_start, t)
output_cats_noisy
让我们在不同的时间步骤上进行可视化:
import matplotlib.pyplot as plt
# use seed for reproducability
torch.manual_seed(0)
# source: https://pytorch.org/vision/stable/auto_examples/plot_transforms.html#sphx-glr-auto-examples-plot-transforms-py
def plot(imgs, with_orig=False, row_title=None, **imshow_kwargs):
if not isinstance(imgs[0], list):
# Make a 2d grid even if there's just 1 row
imgs = [imgs]
num_rows = len(imgs)
num_cols = len(imgs[0]) + with_orig
fig, axs = plt.subplots(figsize=(200,200), nrows=num_rows, ncols=num_cols, squeeze=False)
for row_idx, row in enumerate(imgs):
row = [image] + row if with_orig else row
for col_idx, img in enumerate(row):
ax = axs[row_idx, col_idx]
ax.imshow(np.asarray(img), **imshow_kwargs)
ax.set(xticklabels=[], yticklabels=[], xticks=[], yticks=[])
if with_orig:
axs[0, 0].set(title='Original image')
axs[0, 0].title.set_size(8)
if row_title is not None:
for row_idx in range(num_rows):
axs[row_idx, 0].set(ylabel=row_title[row_idx])
plt.tight_layout()
plot([get_noisy_image(x_start, torch.tensor([t])) for t in [0, 50, 100, 150, 199]])
output_cats_noisy_multiple
这意味着我们现在可以根据模型定义损失函数,如下所示:
def p_losses(denoise_model, x_start, t, noise=None, loss_type="l1"):
if noise is None:
noise = torch.randn_like(x_start)
x_noisy = q_sample(x_start=x_start, t=t, noise=noise)
predicted_noise = denoise_model(x_noisy, t)
if loss_type == 'l1':
loss = F.l1_loss(noise, predicted_noise)
elif loss_type == 'l2':
loss = F.mse_loss(noise, predicted_noise)
elif loss_type == "huber":
loss = F.smooth_l1_loss(noise, predicted_noise)
else:
raise NotImplementedError()
return loss
denoise_model
将是我们上面定义的 U-Net。我们将使用真实噪声和预测噪声之间的 Huber 损失函数。
定义PyTorch数据集和数据加载器
这里我们定义了一个常规的 PyTorch 数据集。该数据集仅包含来自真实数据集(如 Fashion-MNIST、CIFAR-10 或 ImageNet)的图像,线性缩放到范围内。
每张图像被调整到相同的尺寸。值得注意的是,图像也会随机水平翻转。论文中提到:
我们在 CIFAR10 训练期间使用了随机水平翻转;我们尝试了有翻转和无翻转的训练,发现翻转略微提高了样本质量。
这里我们使用 🤗 Datasets 库 方便地从 hub 加载 Fashion MNIST 数据集。该数据集包含分辨率相同的图像,即 28x28。
from datasets import load_dataset
# load dataset from the hub
dataset = load_dataset("fashion_mnist")
image_size = 28
channels = 1
batch_size = 128
接下来,我们定义一个将在整个数据集上即时应用的函数。我们使用 with_transform
功能 实现这一点。该函数仅应用了一些基本的图像预处理:随机水平翻转、重新缩放,并最终将它们的值置于范围内。
from torchvision import transforms
from torch.utils.data import DataLoader
# define image transformations (e.g. using torchvision)
transform = Compose([
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Lambda(lambda t: (t * 2) - 1)
])
# define function
def transforms(examples):
examples["pixel_values"] = [transform(image.convert("L")) for image in examples["image"]]
del examples["image"]
return examples
transformed_dataset = dataset.with_transform(transforms).remove_columns("label")
# create dataloader
dataloader = DataLoader(transformed_dataset["train"], batch_size=batch_size, shuffle=True)
batch = next(iter(dataloader))
print(batch.keys())
Output:
dict_keys(['pixel_values'])
采样
由于在训练期间我们会从模型中采样(以跟踪进展),我们在下面定义了相关代码。采样过程在论文中总结为算法 2:
从扩散模型生成新图像的过程是通过逆转扩散过程实现的:我们从 开始,从高斯分布中采样纯噪声, 然后使用神经网络逐渐去噪(使用它学到的条件概率),直到我们到达时间步骤 。如上所述, 我们可以通过使用均值的重新参数化, 利用我们的噪声预测器, 得出一个稍微去噪的图像 。请记住, 方差是提前已知的。
理想情况下,我们得到的图像看起来像是来自真实数据分布的图像。
下面的代码实现了这一过程。
@torch.no_grad()
def p_sample(model, x, t, t_index):
betas_t = extract(betas, t, x.shape)
sqrt_one_minus_alphas_cumprod_t = extract(
sqrt_one_minus_alphas_cumprod, t, x.shape
)
sqrt_recip_alphas_t = extract(sqrt_recip_alphas, t, x.shape)
# Equation 11 in the paper
# Use our model (noise predictor) to predict the mean
model_mean = sqrt_recip_alphas_t * (
x - betas_t * model(x, t) / sqrt_one_minus_alphas_cumprod_t
)
if t_index == 0:
return model_mean
else:
posterior_variance_t = extract(posterior_variance, t, x.shape)
noise = torch.randn_like(x)
# Algorithm 2 line 4:
return model_mean + torch.sqrt(posterior_variance_t) * noise
# Algorithm 2 (including returning all images)
@torch.no_grad()
def p_sample_loop(model, shape):
device = next(model.parameters()).device
b = shape[0]
# start from pure noise (for each example in the batch)
img = torch.randn(shape, device=device)
imgs = []
for i in tqdm(reversed(range(0, timesteps)), desc='sampling loop time step', total=timesteps):
img = p_sample(model, img, torch.full((b,), i, device=device, dtype=torch.long), i)
imgs.append(img.cpu().numpy())
return imgs
@torch.no_grad()
def sample(model, image_size, batch_size=16, channels=3):
return p_sample_loop(model, shape=(batch_size, channels, image_size, image_size))
请注意,上述代码是原始实现的简化版本。我们发现这种简化(与论文中的算法 2 一致)与原始的、更复杂的实现一样有效,原始实现中采用了裁剪。
训练模型
接下来,我们以常规的 PyTorch 方式训练模型。同时,我们定义了一些逻辑,使用上述定义的 sample
方法定期保存生成的图像。
from pathlib import Path
def num_to_groups(num, divisor):
groups = num // divisor
remainder = num % divisor
arr = [divisor] * groups
if remainder > 0:
arr.append(remainder)
return arr
results_folder = Path("./results")
results_folder.mkdir(exist_ok = True)
save_and_sample_every = 1000
下面,我们定义模型并将其移动到 GPU 上。同时定义一个标准优化器(Adam)。
from torch.optim import Adam
device = "cuda" if torch.cuda.is_available() else "cpu"
model = Unet(
dim=image_size,
channels=channels,
dim_mults=(1, 2, 4,)
)
model.to(device)
optimizer = Adam(model.parameters(), lr=1e-3)
让我们开始训练吧!!
from torchvision.utils import save_image
epochs = 6
for epoch in range(epochs):
for step, batch in enumerate(dataloader):
optimizer.zero_grad()
batch_size = batch["pixel_values"].shape[0]
batch = batch["pixel_values"].to(device)
# Algorithm 1 line 3: sample t uniformally for every example in the batch
t = torch.randint(0, timesteps, (batch_size,), device=device).long()
loss = p_losses(model, batch, t, loss_type="huber")
if step % 100 == 0:
print("Loss:", loss.item())
loss.backward()
optimizer.step()
# save generated images
if step != 0 and step % save_and_sample_every == 0:
milestone = step // save_and_sample_every
batches = num_to_groups(4, batch_size)
all_images_list = list(map(lambda n: sample(model, batch_size=n, channels=channels), batches))
all_images = torch.cat(all_images_list, dim=0)
all_images = (all_images + 1) * 0.5
save_image(all_images, str(results_folder / f'sample-{milestone}.png'), nrow = 6)
Output:
----------------------------------------------------------------------------------------------------
Loss: 0.46477368474006653
Loss: 0.12143351882696152
Loss: 0.08106148988008499
Loss: 0.0801810547709465
Loss: 0.06122320517897606
Loss: 0.06310459971427917
Loss: 0.05681884288787842
Loss: 0.05729678273200989
Loss: 0.05497899278998375
Loss: 0.04439849033951759
Loss: 0.05415581166744232
Loss: 0.06020551547408104
Loss: 0.046830907464027405
Loss: 0.051029372960329056
Loss: 0.0478244312107563
Loss: 0.046767622232437134
Loss: 0.04305662214756012
Loss: 0.05216279625892639
Loss: 0.04748568311333656
Loss: 0.05107741802930832
Loss: 0.04588869959115982
Loss: 0.043014321476221085
Loss: 0.046371955424547195
Loss: 0.04952816292643547
Loss: 0.04472338408231735
采样(推理)
要从模型中采样,我们可以直接使用上面定义的 sample
函数:
# sample 64 images
samples = sample(model, image_size=image_size, batch_size=64, channels=channels)
# show a random one
random_index = 5
plt.imshow(samples[-1][random_index].reshape(image_size, image_size, channels), cmap="gray")
output
看起来模型已经能够生成一件不错的 T 恤了(可能在读者看来效果并不好)!请注意,我们训练的数据集分辨率较低(28x28)。
进阶阅读
DDPM 论文表明扩散模型在(无)条件图像生成方面是一个有前途的方向。此后,它得到了(极大的)改进,尤其是在文本条件图像生成方面。以下列出了一些重要的工作,我们强烈建议对diffusion模型感兴趣的读者做进一步的阅读:
- Improved Denoising Diffusion Probabilistic Models (Nichol et al., 2021):发现学习条件分布的方差(除了均值外)有助于提高性能
- Cascaded Diffusion Models for High Fidelity Image Generation (Ho et al., 2021):引入级联扩散,这是一条多重扩散模型管道,通过生成逐渐提高分辨率的图像,实现高保真图像合成
- Diffusion Models Beat GANs on Image Synthesis (Dhariwal et al., 2021):通过改进 U-Net 架构以及引入分类器引导,展示了扩散模型可以实现优于当前最先进生成模型的图像样本质量
- Classifier-Free Diffusion Guidance (Ho et al., 2021):展示了通过单个神经网络联合训练条件和无条件扩散模型,可以在没有分类器的情况下引导扩散模型
- Hierarchical Text-Conditional Image Generation with CLIP Latents (DALL-E 2) (Ramesh et al., 2022):使用先验将文本标题转换为 CLIP 图像嵌入,然后扩散模型将其解码为图像
- Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding (ImageGen) (Saharia et al., 2022):展示了结合大型预训练语言模型(例如 T5)与级联扩散对于文本到图像合成非常有效
#MaskMamba
本文介绍了一种名为MaskMamba的新型混合模型,它融合了Mamba和Transformer架构,通过Masked Image Modeling实现非自回归图像合成,显著提升了推理速度并提高了生成质量。MaskMamba在2048x2048分辨率下的推理速度提升了54.44%,同时在条件生成和文本生成任务中展现出优越的性能。
图像生成模型遇到了与可扩展性和二次复杂性相关的挑战,主要原因是依赖于基于Transformer的 Backbone 网络。
在本研究中,作者引入了一种新颖的混合模型MaskMamba,它结合了Mambo和Transformer架构,使用Masked Image Modeling进行非自回归图像合成。
作者仔细重新设计了双向Mamba架构,通过实现两个关键的修改:
(1)用标准卷积替换因果卷积,以更好地捕捉全局上下文;
(2)用 ConCat 而不是乘法,这显著提高了性能,同时加快了推理速度。此外,作者还探索了MaskMamba的各种混合方案,包括串行和分组并行排列。
此外,作者引入了一个在语境中的条件,使得作者的模型可以执行分类到图像和文本到图像生成任务。MaskMamba 在生成质量上超过了基于Mamba和Transformer的模型。值得注意的是,它实现了在2048x2048分辨率下推理速度的54.44%的显著提升。
近年来,计算机视觉领域生成图像模型的研究取得了显著进展,特别是在类别到图像 ;Sun等人(2024);Sauer等人(2022))和文本到图像任务。传统的自回归生成模型,如VQGAN ,在条件生成方面表现出色。在文本条件生成领域,模型如Parti(Yu等人和 DALL-E 使用图像分词器和附加的 MLP 将图像转换为离散 Token ,并将编码的文本特征通过另一个MLP(Chen等人(2023))投射到描述嵌入中,以自回归方式在训练和推理中进行。
同时,非自回归方法,包括MAGE(Li等人(2023)和MUSE(Chang等人(2023))),利用Masked Image Modeling,在训练期间将图像转换为离散 Token ,并随机预测被遮挡的 Token 。
另一种在图像生成中具有突出地位的方法是扩散模型,例如LDM(Rombach et al. (2022))带有UNet Backbone 网络。尽管这些模型展示了很高的生成质量,但它们的卷积神经网络架构给可扩展性带来了限制。
为了解决这个问题,基于Transformer的生成模型,如DiT(Peebles和Xie (2023)),通过注意力机制显著增强了全局建模能力,同时显著提高了生成质量。然而,注意力机制的计算复杂性随序列长度呈平方关系增加,这限制了训练和推理效率。
Mamba (Gu和Dao (2023)) 提出了一个状态空间模型(Gu等人(2022,2021)),其具有线性时间复杂度,在处理长序列任务方面具有显著优势。当前的图像生成努力,包括 DiM 和 diffuSSM,主要用 Mamba 模块替代了原始的 Transformer 模块。这些模型在提高效率和可扩展性方面都有所提升。
然而,基于扩散模型的图像生成通常需要数百次迭代,这可能非常耗时。
为了消除Transformer模型中序列长度带来的二次复杂度增长和自动回归模型中生成迭代过多的问题,作者提出了MaskMamba,它整合了Mamba和Transformer架构,并利用非自回归式遮挡图像建模(Ni等人(2024);Lezama等人(2022))进行图像合成。作者精心重新设计了Bi-Mamba(Mo和Tian(2024);Zhu等人(2024)),通过用标准卷积替换因果卷积,使其适用于遮挡图像生成。
同时,在Bi-Mamba的最后阶段,作者选择连接而非乘法来降低计算复杂度,与Bi-Mamba(Zhu等人(2024))相比,显著提高了推理速度,提高了17.77%。
作者进一步研究了各种MaskMamba混合方案,包括串行和分组并行方案(Shaker等人,2024年)。在串行方案中,作者探索了层与层交替的安排,以及将Transformer放在最后层。对于分组并行方案,作者评估了将模型沿着通道维度分为两组或四组的影响。
作者的发现表明,将Transformer放在最后层可以显著提高模型捕捉全局上下文的能力。
此外,作者实现了一个在语境中的条件,使得作者的模型可以在单个框架中同时执行从类别到图像的生成和从文本到图像的生成任务,如图1所示。
同时,作者研究了条件嵌入(Zhu等人,2024年)的放置位置,包括输入序列的不同位置,包括 Head 、中部和尾部。结果表明,将条件嵌入放在中部可以获得最佳性能。
在实验部分,作者通过两个不同的任务来验证MaskMamba的生成能力:条件生成和文本生成,每个任务使用各种大小的模型。对于条件生成到图像的任务,作者在ImageNet1k(Deng等人(2009))数据集上训练300个周期,将作者的MaskMamba与类似大小的基于Transformer和Mamba的模型进行比较。结果表明,在生成质量和推理速度方面,作者的MaskMamba都优于这两个对照组。此外,作者在CC3M(Sharma等人(2018))数据集上进行训练和评估,在CC3M和MS-COCO(Lin等人(2014))验证数据集上取得了优越的性能。
总结起来,作者的贡献包括:
作者重新设计了Bi-Mamba,通过用标准卷积代替因果卷积来提高其对遮挡图像生成任务适用性。此外,在最后阶段用 ConCat 代替乘法,从而显著提高了性能并比Bi-Mamba快了17.77%的推理速度。
作者提出了MaskMamba,这是一个统一的生成模型,它集成了重新设计的Bi-Mamba和Transformer层,使得通过在语境中的条件,可以在同一模型中执行类到图像和文本到图像的生成任务。
作者的MaskMamba模型在ImageNet1k和CC3M数据集上,无论是在生成质量还是推理速度方面,都超过了基于Transformer和基于Mamba的模型。
相关工作图像生成。图像生成的领域正在当前研究中取得重大进展。最初的自动回归图像生成模型,如 VQGAN(Esser等人(2021))和LlamaGen(Sun等人(2024)),证明了通过将图像转换为离散 Token 并应用自动回归模型生成图像 Token ,可以生成高保真图像的潜力。文本到图像生成模型的出现,如Parti;2022)和 DALL-E(Ramesh等人(2021)),进一步推动了这一领域的进展。然而,这些模型在生成过程中存在特定效率问题。为了解决这些问题,非自动回归生成模型如MaskGIT、MAGE 和 MUSE(Chang等人(2023))通过 Mask 图像建模提高了生成效率。同时,扩散模型;Song等人(2020);Ho等人(2020);Dhariwal和Nichol;Saharia等人(2022),如LDM(Rombach等人(2022)),在生成质量方面尽管受到与卷积神经网络基础架构相关的可伸缩性限制,但在生成质量上表现出色。为克服这些限制,Transformer基生成模型,包括DiT(Peebles和Xie(2023)),通过引入注意力机制提高了全局建模能力。然而,当处理大量序列时,这些模型仍面临着计算复杂性随平方增加的挑战。
Mamba Vision。Transformer 作为一种领先的网络架构,在各种任务中得到了广泛应用。然而,其平方的计算复杂度为长序列任务的有效处理带来了巨大障碍。在最近的发展中,一种新的状态-空间模型(Gu等人,2021年;Gu和Dao,2023年;Dao和Gu,2024年)——被称为Mamba(Gu和Dao,2023年;Dao和Gu,2024年),在处理长序列任务方面展现出巨大的潜力,并在研究社区中引起了广泛关注。Mamba架构已经有效地替代了传统的Transformer框架,在多个领域取得了显著的成果。Mamba 家族涵盖了广泛的应用,包括文本生成、物体识别、3D点云处理、推荐系统以及图像生成,并有许多基于如Vision-Mamba 、U-Mamba 和Rec-Mamba 等框架的实现。Vision-Mamba采用双向状态-空间模型结构,并与混合 Transformer 相结合。
然而,Mamba在非自回归图像生成方面的应用尚未得到探索。目前,大多数基于Mamba的生成任务遵循扩散模型范式,这涉及到训练和推理次数的复杂性。
为了解决这些挑战,作者设计了一种新颖的混合Mamba结构,旨在将Mamba应用于非自回归图像生成任务,并将其与Masked Image Modeling(He等人,2022年)相结合,用于训练和推理,从而提高这些过程的效率。
如图2所示, 作者的MaskMamba核心包括三个部分。首先, 将图像像素 通过图像分词器(Yu等人(2021);Van Den Oord等人(2017);Esser等人(2021))量化为离散的 Token , 其中 表示图像分词器的下采样比。这些离散 Token 作为图像词表的索引。然后,作者随机选择 Mask 比例 (范围为 0.55 至 1.0),并从 Token 中进行 Mask,用可学习的 Mask Token 替换它们。其次, 作者将类别ID转换为可学习的标签嵌入(Peebles和Xie(2023);Esser等人 (2021)》,表示为 。另一方面,关于文本条件,作者首先使用T5-Large Encoder (Colin(2020))提取特征,然后将提取的特征映射到描述嵌入(Chen等人(2023)》,表示为 。
最后, 作者将条件嵌入 与图像 Token Embedding 在中部拼接, 其中 表示 或 , 并添加位置嵌入到这些 , cond, 。训练目标是利用交叉嫡损失(Zhang & Sabuncu (2018))预测被 Mask 区域的 Token 索引。
模型配置作者提出两种图像生成模型:条件分类模型和条件文本模型。遵循先前的研究工作(Radford等人(2019);Touvron等人(2023)的标准),作者遵循Mamba的标准配置。如Tab.1所示,作者提供了三种条件分类模型的不同版本,参数大小从103M到741M不等。生成的图像分辨率为256x256,经过16倍下采样因子后,图像 Token Embedding 的长度设置为256。类别条件嵌入的长度设置为1,文本条件嵌入的长度N设置为120。
MaskMamba Model: Architecture
3.2.1 Bi-Mamba-V2 Layer.
卷积替换。 如图3(c)所示,作者将原始的Bi-Mamba(朱等,2024年)架构进行了重新设计,以便更好地适应与遮挡图像生成相关的任务。作者将原始的因果卷积替换为标准卷积。由于遮挡图像生成的非自回归性质,因果卷积只允许单向的 Token 混合,这限制了非自回归图像生成的潜力。相反,标准卷积使 Token 可以在输入序列中的所有位置双向互动,有效地捕获全局上下文。
对称SSM分枝设计
作者将对称SSM分枝引入, 以更好地适应 Mask 图像生成。在对称分枝中, 作者在Backward SSM之前先将输入 翻转, 然后在其之后再翻转, 将其与Forward SSM的结果合并。此外, 与 Bi-Mamba右侧分枝相比,作者使用额外的卷积层来减少特征损失。为了充分利用所有分枝的优势, 作者将输入映射到大小为 的特征空间, 从而确保最终拼接维数一致。作者的输出可以表示为 , 其计算使用以下公式1。
群体方案设计。如图4(a)和图4(b)所示,作者设计了两组群体混合方案。在群体方案v1中,作者将输入数据沿通道维度分为两组,然后分别由作者的Bi-Mamba-v2层和Transformer层处理。接下来,作者将处理结果沿通道维度进行 ConCat ,并最终输入到Norm和Project层。在群体方案v2中,作者将输入数据沿通道维度分为四组。其中两组由作者 的Bi-Mamba-v2层在前向和后向SSM中处理,而另外两组由Transformer层处理。
串行方案设计。如图4(c)和图4(d)所示,作者还设计了两种串行混合方案。在串行方案v1中,作者依次层叠地排列作者的Bi-Mamba-v2和Transformer。在串行方案v2中,作者将Bi-Mamba-v2放在前层,将Transformer放在后层。由于Transformer的注意力机制可以更好地增强特征表示,作者在所有串行模式中,将Transformer层放在Mamba层之后。
Image Generation By MaskLambda
作者利用 Mask 图像生成(Li等人(2023);Chang等人(2022))方法进行图像合成。对于生成分辨率为256×256,下采样因子为16的情况下,在正向传播过程中,作者首先初始化256个 Mask Token 。然后,作者将条件嵌入与中间位置的 Mask Token 连接。受到MUSE(Chang等人(2023))迭代生成方法的启发,作者的解码过程也采用余弦计划(Chang等人(2022)),在每一步选择最高置信度的 Mask Token 进行预测。这些 Token 随后被设置为无 Mask ,剩余步骤中的 Mask Token 集合相应减少。通过这种方法,作者可以在20个解码步骤中推理256个 Token ,而自动回归方法(Touvron等人(2023);Sun等人(2024))需要256个步骤。
条件图像生成。 类别标签嵌入基于每个类别的索引。这些类别标签嵌入与 Mask Token ConCat ,MaskMamba通过余弦进度表逐渐预测这些 Mask Token 。
文本条件图像生成。 首先,作者使用Colin(2020)的T5-Large Encoder提取文本特征,然后将这些特征转换为描述符嵌入。与标签嵌入类似,作者将提取的描述符嵌入与 Mask Token Embedding ConCat 。MaskMamba通过余弦时间表逐渐预测这些 Mask Token 。
无分类引导图像生成 扩散模型(Ho 和 Salimans,2022年)提出的无分类引导(CFG)方法是一种非常有效的技术,可增强模型在处理文本和图像特征时的条件生成能力。因此,作者将这种方法应用到作者的模型中。在训练阶段,为了模拟无条件图像生成的过程,作者以0.1的概率随机删除条件嵌入。在推理阶段, 每个 Token 的logit 由以下方程确定:, 其中 是无条件 logit, 是条件 logit, 是CFG的缩放。
4 Experimental Results
Class-conditional Image Generation
训练设置所有类到图像生成模型都在ImageNet数据集上训练300个epoch,所有模型的训练参数设置保持一致。具体而言,基本学习率设置为每256个批次大小为1e-4,全局批量大小为1024。此外,作者使用AdamW优化器,其中β1 = 0.9,β2 = 0.95。正则化率保持一致,包括在特定条件下。在训练期间, Mask 率从0.5变化到1。所有模型和推理都将在具有32GB内存的V100 GPU上进行训练和推理。
评估指标作者使用FID-50K(Heusel等人(2017))作为主要的评估指标,同时采用Inception Score(Salimans等人(2016))(IS)和Inception Score标准差(IS-std)作为评估标准。在ImageNet验证数据集上,作者根据CFG生成50,000张图像,并使用上述指标对所有模型进行评估。
4.1.1 Qualitative Results
与其他图像生成方法的比较 如图2所示,作者将MaskMamba模型与流行的图像生成模型进行了比较,包括自回归(AR)方法(Esser等人(2021);Sun等人(2024))、 Mask 预测模型(Mask)(Li等人(2023);Chang等人(2022))和基于Transformer的模型(Masked Image Modeling训练使用相同的超参数),重点关注它们的基础网络差异。MaskMamba使用串行方案v2模式。在不同模型大小的比较中,MaskMamba表现出竞争力的性能。如图5所示,作者从MaskMamba-XL模型中随机选择的图像仅在ImageNet上训练即可获得高质量的结果。
无类别指导(CFG)和生成迭代的影响。 图6(a)显示了在图像生成中,当CFG设置为3时,随着迭代次数的增加,FID和IS变化。模型在25迭代时达到最佳性能,进一步增加迭代次数将降低FID。图6(b)显示了不同CFG设置下的FID和IS分数,表明无类别指导可以提高视觉质量,而当CFG=3时,模型达到最佳性能。
有效性分析 作者进行了一系列实验来评估作者重新设计的Bi-Mamba-v2层、原始Bi-Mamba层和Transformer层的有效性。为了评估在更高分辨率图像上的推理实验,作者主要关注单层推理速度和内存使用。所有关于效率分析的实验都是在A100 40G设备上进行的,并且作者比较了这些模型在不同分辨率下的推理速度, 如图7所示。结果表明, 当分辨率小于 时, 作者的Bi-Mamba-v2层和原始Bi-Mamba层比Transformer层稍慢。然而, 当分辨率超过 时,作者的Bi-Mamba-v2层比Transformer层和原始Bi-Mamba层都要快。值得注意的是, 在 的分辨率下, 作者的Bi-Mamba-v2层比Transformer层快1.5倍。作者还比较了不同批处理大小的GPU内存使用情况。
作者的Bi-Mamba-v2层的内存使用与Bi-Mamba层的内存使用相当,而Transformer层由于其二次复杂度,随着批处理大小的增加,内存使用呈指数增长。当批处理大小达到6时,Transformer层消耗了63GB的GPU内存,导致内存不足,而作者的Bi-Mamba-v2层只需要38GB。这些实验结果表明,作者的Bi-Mamba-v2层可以在更快的速度下生成图像,并且内存使用更低。
不同混合方案的影响. 如图3所示,作者对MaskMamba在各种混合配置下的图像生成结果进行了比较分析,这些混合配置分为两类:并行和串行。如图4所示,在分组并行配置中,作者研究将模型分为两组和四组的效果。在分层串行配置中,作者设计了一种交错结构,包括Bi-Mamba-v2和Transformer {MSMS...MSMS},以及另一种配置{MMMM...SSSS},其中前层是Mamba,后层是Transformer。这些实验的结果揭示了不同混合配置的性能和效率。
不同 Backbone 的影响。 作者在不同的 Backbone 上进行了消融实验:VisionMamba (Zhu等人,2024年)提出的Bi-Mamba,重新设计的 Bi-Mamba-V2 ,以及Transformer (Vaswani,2017年)。Bi-Mamba-L只使用原始的Bi-Mamba作为层,而 Bi-Mamba-V2 使用作者重新设计的Bi-Mamba-v2。Transformer只使用Transformer架构。在(Bi-Mamba + Transformer)-L中,前层是原始的Bi-Mamba,然后是层的Transformer。在(Bi-Mamba-V2 + Transformer)-L中,前层是Bi-Mamba-v2,然后是层的Transformer。
结果表明,作者重新设计的Bi-Mamba-v2在原始Bi-Mamba之上提高了性能,将Mamba和Transformer结合进一步提高了结果。因此,作者选择(Bi-Mamba-V2 + Transformer)用于MaskMamba。
不同条件嵌入位置的影响。作者进行消融实验来评估条件嵌入cond的放置对模型性能的影响。具体而言,作者研究了条件嵌入在序列的 Head 、中间和尾部的不同位置的组合效果。实验结果表明,当条件嵌入置于中间位置时,性能最优。这一结果主要归因于选择性扫描的机制。由于作者随机遮挡图像 Token 的一部分,将条件嵌入置于 Head 或尾部会导致由于注意力距离增加而无法提供足够的监督信息进行条件生成控制。
Text-conditional Image Generation
训练设置
与分类训练策略类似,作者为文本数据采用一种遮挡生成非自回归训练策略。在Sharma等人(2018年)的CC3M(256×256)数据集上训练模型30个周期。训练参数与之前的实验保持一致,基本学习率设置为每256个批次的1e-4,全局批处理大小为1024。此外,作者使用AdamW优化器,其中β1 = 0.9,β2 = 0.95。
基于CC3M的模型训练。如表6所示,作者在CC3M和MS-COCO的验证集上比较了Transformer-XL和作者的MaskMamba-XL在文本到图像生成的性能,评估了FID和IS。作者的结果始终优于基于Transformer的模型。如图8所示,作者使用CC3M中的文本作为 Prompt 来生成图像。MaskMamba-XL能够生成高质量的图像。然而,由于训练数据的有限性和CC3M数据集中文本描述的精度不精确,一些生成的图像存在局限性。
在本工作中,作者提出了一种新颖的混合模型 MaskMamba,该模型结合了Mamba 和 Transformer 架构,利用 Masked Image Modeling进行非自回归图像合成。
作者不仅重新设计了一种新的Bi-Mamba结构,使其更适合图像生成,而且还研究了不同的模型混合策略和条件嵌入的放置,最终确定了最佳设置。
此外,作者在一个包含上下文的条件下,提供了一系列类别条件图像生成模型和文本条件图像生成模型。
作者的实验结果表明,在生成质量和推理速度方面,作者的MaskMamba模型超过了基于Transformer和基于Mamba的模型。
作者希望Masked Image Modeling for non-autoregressive image synthesis在MaskMamba中的应用可以激发对Mamba图像生成任务进行进一步探索。
#HiCo
本文介绍了360人工智能研究院在NeurIPS 2024上提出的布局可控AI绘画模型HiCo,该模型允许用户通过矩形框和文本描述控制生成画面中不同主体的布局,实现更精确的图像生成效果。HiCo模型通过层次化建模和融合模块解决了对象丢失、光影不一致等问题,并在多个数据集上展现了其在生成质量和推理速度方面的优势。
AI绘画模型一直以来被概括为“文生图”模型,究其原因,是因为当前的主流图像生成模型基本都只提供了基于文本条件生成图像的能力,各家的AI绘画产品也主要在生成画质和文本理解能力上进行竞争。但对于专业的使用者来说,文本能提供的画面控制能力非常有限,导致当前的AI绘画产品还达不到作为专业生产力工具来使用的标准。
为了解决这一问题,360人工智能研究院在人工智能顶会NeurIPS2024上提出了布局可控AI绘画模型HiCo,并将于近期开源。基于HiCo模型,使用者可以对生成画面中的不同主体的布局进行自由控制和调整,实现“指哪打哪”的生成效果。话不多说,先让我们来看一组生成效果(使用者基于不同的矩形框和对应的文本描述,来控制在画面的不同位置生成指定的内容):
接下来是HiCo工作的详细原理解读:
- 论文标题:HiCo: Hierarchical Controllable Diffusion Model for Layout-to-image Generation
- 论文链接:https://arxiv.org/abs/2410.14324
- 项目主页:https://360cvgroup.github.io/HiCo_T2I/
布局到图像生成的任务是AIGC领域一项重要研究方向,通常指根据实例对象的文本描述及其空间位置合成目标图像。
现有的方法仍然难以生成复杂的布局,常见的不良情况包括对象丢失、光影不一致、视角冲突、重叠区域的目标交互等。
为了有效地解决这些问题,我们提出了一个层次可控(HiCo)扩散模型,具有对象分离的条件分支结构。
我们的主要观点是通过布局的层次化建模来实现空间分离。我们使用多分支结构来表示层次内容,并将它们聚合到融合模块中。
2.动机
主流的布局可控生成是采用新设计网络结构或特殊的交叉注意力机制,来实现目标的位置可控,然而在复杂场景下这些方法存在目标丢失、指令遵循能力下降、生成图像失真、推理资源消耗过大以及开源社区生态适配等问题。
如何在保证原始扩散模型能力的不变的同时,引入布局子区域的位置可控能力是我们面临的首要挑战。典型的引入外部可控条件进行图像生成的方法,如ControlNet、IP-Adapter等,其外部可控条件不限于人体姿态、关键点、参考图。
为了解决上述挑战,本文提出了层次可控扩散模型,本方法通过权值共享的分支分别提取层次化布局特征,并用融合网络进行精细聚合。
3.方法
3.1 模型整体架构
针对上述问题挑战,结合目前扩散模型外部控制条件引入的常用方法,本文提出一种名为HiCo的分层可控扩散模型(Hierarchical Controllable Diffusion Model),用于从布局生成高质量和逼真的图像。HiCo的整体架构如图1所示,包括主干SD基础模型、权重共享的旁支网络HiCo以及融合模块FuseNet。
图1:分层布局可控生成模型HiCo结构
3.2 层次化建模及融合模块
为了兼具扩散模型的能力,同时引入布局可控的能力,研究者提出了HiCo方法。该方法通过层次化建模解耦不同目标的空间布局,并动态整合背景信息和不同前景目标的内容及交互。
朴素的扩散模型的目标函数如下式:
引入外部控制条件的扩散模型目标函数如下式,给定输入图片 ,通过渐进式扩散加噪到 , 其中 为加噪步数, 为文本控制条件, 为特定控制条件, 为可学习的网络来预测不同阶段的噪声。
相对于包含常规控制条件的扩散模型,本方法新增额外的权重共享的HiCo Net来生成全局背景和不同布局区域内容,由于增加了多个不同的控制条件,则训练目标为:
其中, 、 代表第 个实例的文本描述和空间位置, F 代表融合模块。
融合模块主要实现对前背景的有效融合, 可根据具体的场景选择适合的融合方式, 包括平均、求和、掩码加权等。本文采用基于mask融合方式如下式, 其中 表示第 个实例的掩码信息, 表示背景区域的掩码信息。
HiCo在整体结构上采用了一种创新的权重共享机制,该机制能够根据文本描述和空间布局信息,分别解耦不同的前景实例和背景图像生成独立的特征,在上采样阶段对这些特性进行了战略性集成。图2展示了四个实例布局的HiCo模型的生成过程。
图2:HiCo模型分层特征的可视化
3.4 训练数据及策略
HiCo模型可以采用不同类型场景的Grounding数据训练来获取相应的布局可控生成能力。本文在开集的细粒度描述数据(GRIT-20M)以及闭集的粗粒度类别数据(COCO)上均进行了实验验证。其中我们对GRIT-20M的子集数据进行清洗筛选出1.2M的训练数据,并构建了细粒度的评估集HiCo-7K。
HiCo结构支持不同版本扩散模型,包括但不限于SD1.5、SDXL、SD3、Flux等。同时我们支持SD模型的快速生成插件或者底模,如LoRA、LCM、SDXL-Lighting等。详细训练及推理细节可参考原文。
4.实验评估
4.1 效果评估
细粒度描述定量评估。在细粒度测试集HiCo-7K上,对图片生成质量及布局可控两个维度进行了定量评估。HiCo模型均取得显著的效果,同时不同目标数量的复杂场景图片生成效果也非常理想。
图3:HiCo-7K定性比较。HiCo方法可以生成简单和复杂布局信息的高质量图像。
人工评估。我们采用多轮、多参与者交叉评价的方法,从目标数量、空间位置、全局图像质量等方面对人类偏好进行评价。下表为不同对比方法的人工评估指标,结果表明在空间位置和语义维度方面,HiCo方法优于其他模型。此外,在全局图像质量的细粒度维度上,它的性能接近RealisticVisionV51模型(SDReal),表明尽管增强了可控性,但我们的模型的生成能力仍然是鲁棒和有效的。
本文对HiCo结构、融合策略等进行了一系列消融实验,具体结果可以看下面的表格。
对于推断运行时间和内存使用,我们进行了两个维度比较,详细数据图4。横向比较不同方法的性能差异,我们评估了使用24GB VRAM 3090 GPU在HiCo-7K上直接生成512×512分辨率图像的推断时间和GPU内存使用情况。
HiCo的多分支有两种推理模式:“并行模式”和“串行模式”。为了验证HiCo在对象数量增加时的性能优势,纵向比较HiCo不同推理模式的性能差异,我们评估了在HiCo-7K上生成512×512分辨率图像的推理时间和GPU内存使用情况。结果表明HiCo模型推理方式灵活,在推理耗时和显存占用方面均具有明显优势。
图4:HiCo模型推理性能横纵向对比
5.总结与展望
复杂的目标交互和重叠区域的遮挡顺序是HiCo模型乃至布局可控领域对图像生成的重要挑战。HiCo通过将每个对象的位置和外观信息解耦为不同的分支,同时通过具有全局提示的背景分支和融合网络控制它们之间的整体交互,从而实现层次化的生成。
HiCo能够通过融合模块处理重叠区域的复杂相互作用。重叠对象的遮挡顺序也通过文本描述的全局提示指定。但由于缺少相应的遮挡顺序训练数据,成功率远未达到最优。对于目前的HiCo,确实缺乏更明确的遮挡顺序控制机制。
HiCo是一种基于扩散模型,以多分支结构为导向的可控布局生成模型。通过对自然场景中不同粒度的数据进行训练和测试,并进行算法度量评价和主观人为评价,证明了该方法的优越性。然而,仍有进一步改进的潜力,特别是在图像内容编辑和集成多种样式概念方面。通过结合当前可控生成功能,可以提高AI生成艺术品的整体可玩性。