#PixArt-Σ

直接生成 4K图像! Weak-to-Strong 训练的 4K 高清文生图模型

PixArt-Σ 比现有的文生图的扩散模型,例如 SDXL (2.6B 参数) 和 SD Cascade (5.1B 参数) 相比,其生成的图片质量卓越,而且拥有极佳的用户指令遵从性能,且模型参数明显更低 (0.6B 参数)。

本文提出的 PixArt-Σ 是 PixArt 系列的最新力作,它是一个 Diffusion Transformer model (DiT),可以直接生成 4K 分辨率的图像。PixArt-Σ 相比其前身 PixArt-α,有重大的进步:可以生成明显更高保真度的图像,而且提高了与文本提示的对齐质量,如图 1,2 所示。PixArt-Σ 的一个关键特性是其训练效率。从 PixArt-α 的基本预训练为起点,通过结合更高质量的数据从一个 "weaker" 的基线演化为一个 "stronger" 的模型,这个过程作者称为 "weak-to-strong training"。

PixArt-Σ 的贡献包含 2 个方面:

高质量训练数据:PixArt-Σ 结合了高质量的图像数据,并与更精确和更详细的图像标题配对。

高效的 token 压缩模块:作者提出了一种新颖的注意力模块,该模块同时压缩 Self-attention 的 Key 和 Value,显著地提高了效率并能有效促进模型生成超高分辨率的图像。

PixArt-Σ 比现有的文生图的扩散模型,例如 SDXL (2.6B 参数) 和 SD Cascade (5.1B 参数) 相比,其生成的图片质量卓越,而且拥有极佳的用户指令遵从性能,且模型参数明显更低 (0.6B 参数)。此外,PixArt-Σ 生成 4K 图像的能力支持创建高分辨率海报和墙纸,有效地支持了电影和游戏等这类需要高质量视觉内容的行业。

51c视觉~合集27_视觉

图1:PixArt-Σ 生成的图像示例:该模型可以输出非常真实感的、高美学、或者具有极端纵横比、且风格各异的图像并遵循用户指令

51c视觉~合集27_视觉_02

图2:PixArt-Σ 根据复杂且密集的指令生成的 4K 高清大图示例。PixArt-Σ 可以直接生成 4K 分辨率的图像,无需后处理,并准确地响应给定的指令

1 PixArt 系列最新力作 PixArt-Σ:Weak-to-Strong 训练的 4K 高清文生图模型

论文名称:PixArt-Σ: Weak-to-Strong Training of Diffusion Transformer for 4K Text-to-Image Generation (ECCV 2024)

论文地址:http://arxiv.org/pdf/2403.04692

项目主页:http://pixart-alpha.github.io/PixArt-sigma-project/

1.1 生成 4K 高清大图的 PixArt-Σ:一个新的数据集,一个新的架构改进

高质量的文生图 (Text-to-Image, T2I) 模型在很大程度上影响了 AIGC 社区。私有模型包括 DALL·E 3[1]、Midjourney[2]等,开源模型包括 Stable Diffusion[3]和 PixArt-α[4]等。但是尽管如此,开发一个顶级 T2I 模型需要相当多的资源:从头开始训练 SD1.5 需要大约 6000 A100 GPU days,这个问题对于资源有限的个人研究者构成了重大的障碍,也从一定程度上讲阻碍了 AIGC 社区的创新。随着时间的推移,AIGC 社区在持续不断地获得不断更新、更高质量的数据集和更高级的算法。那么一个关键的问题是:如何有效地将这些新元素集成到现有的模型中,使我们得以在有限的资源约束下实现更强大的模型?

为了探索这个问题,本文聚焦于增强 PixArt-α,PixArt-α 是一种高效的 T2I 训练方法。PixArt-α 是使用 DiT[5]架构的早期探索。为了最大化这种架构的潜力,作者在 PixArt-α 的预训练的基础之上,继续改进得到更强大的模型 PixArt-Σ。作者把这种从一个相对较弱的模型通过高效训练演化为相对较强的模型的过程称为 "weak-to-strong training"。那么为了实现 "weak-to-strong training",作者使用了下面的改进:

1) 一个新的高质量的数据集

作者收集了一个优于 PixArt-α 中使用的高质量数据集。这个数据集有两个主要的特点:1) 高质量图片: 该数据集包含来自互联网的 33M 高分辨率图像,均超过 1K 分辨率,也包括分辨率约为 4K 的 2.3M 张图像。这些图像的主要特征是它们的高美学,而且包含广泛的艺术风格。2) 密集且精确的字幕: 为了为上述图像提供更精确和详细的字幕,作者将 PixArt-α 中使用的 LLaVA[6]替换为更强大的图像字幕模型 Share-Captioner[7]。此外,为了提高模型在文本和视觉概念之间的对齐能力,将文本编码器 (即 Flan-T5[8]) 的 token length 扩展到大约 300 个单词。可以观察到这些改进有效地消除了模型幻觉,从而带来更高质量的文本图像对齐。

2) 一个新的架构改进:Key Value token 压缩

为了增强 PixArt-α,将其生成分辨率从 1K 扩展到 4K。以超高分辨率 (例如 2K/4K) 生成图像会导致 token 的数量显着增加,导致计算需求量增加。为此,作者为 Self-attention 机制引入了 Key Value token 压缩方案。具体而言,利用 stride 为 2 的 Group Convolution 来在局部集成 Key 和 Value。而且,作者还采用了专门的权重初始化方案,允许从没有 KV 压缩的预训练模型来平滑微调。这种设计减少了约 34% 的高分辨率图像生成的训练和推理时间。

3) "weak-to-strong" 训练策略

作者提出了几种微调技术,以有效地从弱模型快速适应强模型:1) 用更强大的变分自动编码器 (VAE) 替换原来的 VAE。2) 从低分辨率扩展到高分辨率。3) 从没有键值 (KV) 压缩的模型演变为具有 KV 压缩的模型。这些结果证实了 "weak-to-strong" 训练策略的有效性。

51c视觉~合集27_视觉_03

图3:PixArt-Σ 与 PixArt-α 和 SDXL 这种开源模型进行比较

51c视觉~合集27_视觉_04

图4:PixArt-Σ和另外其他T2I产品:Firefly 2、Imagen2、Dalle 3 和 Midjourney 6 的生成结果比较

1.2 高质量的训练数据更高的美学和更高的分辨率

为了提高数据集的审美质量,作者将内部数据从 14M 扩展到 33M。为清楚起见,分别将两个数据集命名为 Inside-α 和 Inside-Σ。但是与一些开源模型 (比如 SD v1.5) 使用的巨量图片相比,这种数据集的扩展依然相对少。本文也证明了虽然数据集量有限,但是通过训练策略仍然可以获得强大的 T2I 模型。

Inside-Σ 内的图像高于 1K 分辨率。为了便于 4K 分辨率生成,作者还收集了 4K 分辨率的 8M 真实摄影图像数据集。为了确保审美质量,作者还采用了一个美学打分模型 (aesthetic scoring model, AES) 来过滤这些 4K 图片。这个过程最后会得到一个高度精细的 2M 超高分辨率和高质量图像数据集。

有趣的是作者观察到,随着图像的分辨率的增加,模型的保真度 (FID) 和语义分割 (CLIP Score) 性能有所提高。

51c视觉~合集27_视觉_05

图5:LLaVA 和 Share-Captioner 之间幻觉出现的差异。红色表示幻觉,绿色表示正确

更好的图文对齐

加强文本-图像描述的对齐对于提高模型能力至关重要。因此,为了进一步完善原始的图像描述,作者希望提高字幕的长度和准确性。值得注意的是,Internal-Σ 的描述在下面这几个方面比 Internal-α 更有优势:

1) 更好的字幕精度

如图 5 所示,PixArt-α 中使用的 LLaVA 具有一定的幻觉问题。PixArt-Σ 使用更强大的视觉语言模型,即 ShareCaptioner 来生成详细和正确的字幕。

2) 字幕长度增加

如下图 6 和 7 所示,平均字幕长度增加到 180 个单词,大大提高了字幕的描述性能力。而且,作者将文本编码器的 token 处理长度从 120 tokens 扩展到 300 tokens。本文呢的模型是在长字幕 (Share-Captioner) 和短字幕 (原始字幕) 上混合一起训练的,比例分别为 60% 和 40%。这种方法增强了文本描述的多样性。

图 7 是 Internal-α 和 Internal-Σ 的一个总结,作者通过各种指标来评估数据集的多样性,包括每个图像的名词多样性、总名词计数、平均标题长度和平均名词。

51c视觉~合集27_视觉_06

图6:字幕长度的直方图可视化。从原始字幕、内部 α 和内部 Σ 中随机选择 1M 个字幕来绘制相应的直方图。ACL 表示平均字幕长度

51c视觉~合集27_视觉_07

图7:不同数据集的名词概念统计。VN:有效的不同名词 (出现超过 10 次);DN:完全不同的名词;Average:每张图像的平均名词计数;ACL:平均字幕长度

高质量的评测数据集

大多数 T2I 模型喜欢使用 MSCOCO[9]作为评估集来评估 FID 和 CLIP 分数。但是本文作者观察到在 MSCOCO 数据集上进行的评估可能无法充分反映模型在美学和文本图像对齐方面的能力。因此,作者提出了一个包含 30,000 个高质量、美观的图文对的精选数据集,来帮助评估 T2I 模型。该数据集旨在提供对模型性能的更全面的评估,尤其是在捕捉美学吸引力的复杂性方面,以及文本描述和视觉内容之间对齐的保真度上面。

1.3 高效 DiT 架构设计

以超高分辨率生成图像时,计算需求显著增加,因此高效的 DiT 架构就是必不可少的。Self-Attention 机制在 DiT 中起着关键作用,但其二次计算需求显著限制了模型的可扩展性,尤其在更高的分辨率下,如 2K 和 4K 分辨率中。受 PVT v2[10]的启发,作者将 KV token 压缩技术合并到原始的 PixArt-α 中,以应对密集的计算量的挑战。这种设计仅增加了 0.018% 的总参数量,但通过 token 压缩技术有效降低了计算成本,同时仍然保留了空间和语义信息。

KV Token 压缩技术

本文提出了一个有趣的观察,即直接将 Key-Value (KV) Token 压缩应用于预训练的 PixArt-α,仍然可以生成合理的图像。这表明特征中存在冗余。

考虑到相邻的  Patch 内的高相似度, 作者假设窗口内的特征语义是多余的, 可以进行合理压缩。KV Token Compression 通过压缩相邻的  Patch 内压缩 token 的特征,以  表示, 如图 8 所示。

此外,为了减轻 Self-Attention 计算中 KV 压缩引起的潜在信息丢失,作者选择去保留了 Q 的所有 tokens。这种策略使作者能够有效地利用 KV Token 压缩,同时减轻丢失关键信息的风险。通过使用 KV Token 压缩,可以提高注意力机制计算的效率,减少计算复杂度从  到  ,从而更好地控制生成高分辨率图像的计算成本。

51c视觉~合集27_视觉_08

51c视觉~合集27_视觉_09

图8:KV Token 压缩技术

作者使用具有特定初始化的卷积算子 "Conv2×2" 压缩深层。作者设计了专门的卷积初始化 "Conv Avg Init",它利用 Group Convolution 初始化权重,相当于平均算子。这种初始化策略可以加速微调过程,同时只引入了 0.018% 的额外参数。

关于 KV Token 压缩的消融实验

作者也做了一些关于 KV Token 压缩的消融实验。首先是压缩的位置,如图 9 所示,在深层使用 KV Token 压缩可以显著提升性能。作者推测这是因为浅层通常编码详细的纹理内容,而深层表征高级语义内容。由于压缩往往会影响图像质量而不是语义信息,所以压缩深层可以达到最小的信息损失。

51c视觉~合集27_视觉_10

图9:压缩位置消融实验结果

作者也在图 10 中探索了不同压缩算子的影响。共计使用了 3 种技术,随机丢弃、平均池化和参数卷积,将 2×2 Token 压缩为单个 Token。"Conv 2×2" 方法优于其他方法,使用可学习卷积核比其他方法更有效地减少冗余。

51c视觉~合集27_视觉_11

图10:压缩算子消融实验结果

作者在图 11 中研究了不同压缩比对不同分辨率的影响。发现 Token 压缩不影响文本和图像 (CLIP Score) 之间的对齐,但会影响不同分辨率的图像质量 (FID)。尽管随着压缩率的增加,图像质量略有下降,但本文策略使训练速度提高了 18% 到 35%。

51c视觉~合集27_视觉_12

图11:不同分辨率的压缩率

作者进一步在图 12 中全面验证了推理速度的优势。在 4K 生成中,本文方法可以将训练和推理速度提高大约 35%。值得注意的是,可以观察到训练的加速随着分辨率的增加而增加:随着分辨率从 1K 增加到 4K,训练加速从 18% 增至 35%。这些结果也证明了本文方法对更高分辨率的图像生成任务的适用性。

51c视觉~合集27_视觉_13

图12:不同分辨率的速度

1.4 Weak-to-Strong 训练策略

作者提出了几种有效的训练策略,以增强从 "weak" 模型到 "strong" 模型的转换。这些策略包括 VAE 快速适配、高分辨率微调和 KV Token 压缩。

51c视觉~合集27_视觉_14

图13:本文的训练策略设计,促进模型由 weak 到 strong 的快速学习

将模型适配新的 VAE

随着 VAE 技术的持续演进,从头开始训练 T2I 模型需要巨量的计算资源。本文作者将 PixArt-α 的 VAE 替换为 SDXL 的 VAE,并继续微调扩散模型。作者观察到了快速收敛的现象,只需要微调 2K 步就可以迅速收敛,如图 13(a) 所示。对于处理那些 VAE 模型的迁移学习时,微调无疑是一种高效的选择。

适配更高的分辨率

当从低分辨率 (LR) 模型微调到高分辨率 (HR) 模型时,作者观察到了性能下降,如图 13(b) 所示,并将其归因于不同分辨率之间位置编码 (PE) 的差别。为了缓解这个问题,作者利用 "PE 插值"[11]技术:通过插值 LR 模型的 PE 来初始化 HR 模型的 PE,显著地增强了 HR 模型的初始状态并加速微调过程。

为模型应用于 KV Token 压缩

当现在有一个没有 KV Token 压缩的 LR 预训练模型,我们要对其进行微调时,就可以直接使用 KV Token 压缩。如图 13(c) 所示,使用本文的 "Conv Avg Init" 策略时,PixArt-Σ 可以从更好的初始状态开始,更容易收敛。值得注意的是,即使是只使用 100 训练步骤,PixArt-Σ 也能达到令人满意的视觉效果。通过 KV Token 技术和压缩层设计,训练和推理时间可以减少约 34%。

1.5 实验结果

作者遵循 Imagen[12]和 PixArt-α 使用 T5 的编码器 (即 Flan-T5[8]) 作为条件特征提取的文本编码器,并使用 PixArt-α 作为基本扩散模型。与大多数工作提取固定 77 个 text tokens 不同,作者把 text tokens 的数量从 PixArt-α 的 120 增加至 300,因为 Inside-Σ 数据集的标题要密集得多,可以提供更高细粒度的细节。为了捕捉输入图像的 latent representation,作者使用来自 SDXL[3]的预训练 VAE,保持冻结。其他实现细节与 PixArt-α 相同。模型使用位置编码插值技术在 PixArt-α 的 256px 预训练 ckpt 上微调。最终模型,包括 1K 分辨率,是在 32 个 V100 GPU 上训练的。作者还使用 16 个 A100 GPU 来训练 2K 和 4K 图像生成模型。

作者使用了权重衰减为 0 的 CAME 优化器[13]和 2e-5 的恒定学习率,而不是常规的 AdamW[14]优化器。这有助于降低优化器状态的维度,导致 GPU 内存较低,而不会导致性能下降。

评价指标方面,为了更好地说明美学和语义能力,作者收集了 30K 高质量的文本图像对来评测 T2I 模型。主要通过人类和人工智能偏好研究来评估 PixArt-Σ,因为 FID 指标可能不能充分反映生成能力。

图片质量评价

如图 1 所示,PixArt-Σ 可以生成高质量、逼真的图像,而且在不同的纵横比和风格上生成的图像也具有复杂的细节。如图 3 所示,作者将 PixArt-Σ 与开源模型 SDXL 和 PixArt-α 进行了比较,PixArt-Σ 增强了肖像的真实感,提高了语义分析的能力。与 SDXL 相比,PixArt-Σ 在遵守用户指令方面也有卓越的表现。

不仅优于开源模型,而且 PixArt-Σ 也与当前 T2I 闭源产品相比也是非常具有竞争力,如图 4 所示。PixArt-Σ 产生照片般逼真的结果,并密切遵守用户指令,与目前的一些商业产品的水平相当。

高分辨率图像生成

本文方法能够直接生成 4K 分辨率的图像,不需要任何后处理。此外,它擅长准确遵循用户提供的复杂、详细和长文本,如图 2 所示。因此,用户不需要提示工程就可以获得满意的结果。

Human/AI (GPT4V) 偏好研究

作者也进行了 Human/AI (GPT4V) 偏好研究,使用 300 个 captions,这 300 个 captions 是从 1.2 节提到的高质量评测集中抽到的。作者收集了由共 6 个开源模型生成的图像,包括 PixArt-α、PixArt-Σ、SD1.5[15]、Stable Turbo[16]、Stable XL、Stable Cascade[17]和 Playground-V2.0。作者开发了一个网站,并分发给评估者,要求他们评估图像,根据质量对它们进行排名以及它们与文本提示的匹配程度。结果表明 PixArt-Σ 相对于其他 6 个 T2I 生成器有显著的偏好。

51c视觉~合集27_视觉_15

图14:Human (蓝色) / AI (橙色和绿色) 对当前开放 T2I 模型的偏好评估。PixArt-Σ 在图像质量和提示跟踪方面都优于当前最先进的 T2I 模型

此外,作者还使用多模态模型 GPT-4 Vision[18]作为评估器。每个试验为 GPT-4 Vision 提供 2 张图片:一个来自 PixArt-Σ,另一个来自其他竞争对手 T2I 模型。作者制作了不同的 Prompts,引导 GPT-4 Vision 根据图像质量和图像和文本对齐进行投票。图 14 中的橙色和绿色条表示的结果显示了人类和 AI 偏好研究中一致的结果。PixArt-Σ 在超过了基线 PixArt-α。而且与 Stable Cascade 等模型相比,PixArt-Σ 在生成图像质量和指令跟随能力方面表现出极具竞争力的优越性能。




#WildHOI

基于二维先验学习的三维人物交互重建

本文提出了一种二维监督方法,从野外的二维图像中学习三维人体-物体空间关系的先验知识。

本文介绍我们组近期发表在ACM MM 2024的关于三维人-物交互重建的工作《Monocular Human-Object Reconstruction in the Wild》。本工作旨在从大规模的二维图片中学习三维环境中人和物体交互先验。本工作由汪婧雅教授指导完成。

论文地址:https://huochf.github.io/WildHOI/

代码链接:https://github.com/huochf/WildHOI

摘要

人体与物体之间的交互以及理解人类如何在三维空间中与物体交互是计算机视觉中的一个重要课题。之前的研究从实验室环境中收集的数据集中学习这种先验知识,但由于领域的多样性,这些方法在实际场景中普遍存在泛化困难。

为克服这一限制,我们提出了一种二维监督方法,从野外的二维图像中学习三维人体-物体空间关系的先验知识。我们的方法利用基于归一化流模型的神经网络学习数据集中每张图像的人体-物体关键点布局和摄像机视角的先验分布。通过在后优化阶段应用该先验来微调人体和物体之间的相对姿态,我们在人体-物体重建任务上说明了从二维图像中学习到的先验的有效性。

为了在自然场景下的图片中验证我们的方法,我们从YouTube网站收集了WildHOI数据集,该数据集包含在现实场景中与8种物体的各种交互。我们在室内BEHAVE数据集和室外WildHOI数据集上进行了实验。结果表明,尽管我们只利用了二维布局信息,但我们的方法在BEHAVE数据集上几乎能与完全的三维监督方法相媲美,并且在自然场景图像的泛化性和交互多样性方面超越了之前的方法。

问题定义

单目人-物联合重建的目的在于从输入图片中恢复出人体和物体的三维信息 , 考虑到单目重建赛道中人和物体相互遮挡而引发的不确定性和歧义性, 将这个问题建模为概率密度预测而不是单峰估计更为合适, 因此该问题目标在于给出概率密度分布 , 为了从数据集中学习该分布, 基于学习的方法需要每一幅图片中的三维标注, 然而, 由于获取三维标注的成本非常昂贵,难以大规模收集三维人-物交互 数据集, 尤其是在自然场景中。因此先前基于学习的方法受到训练数据集分布的限制, 难以推广到多样性较高的自然场景中。

自然场景中人体-物体交互信息大多以2D图片或者视频的形式呈现,这些信息更容易从互联网获取。基于这一观察,我们提出了一种从大规模二维图片中学习三维人-物空间关系先验知识的方法。定义图片 中 的评分函数为

51c视觉~合集27_视觉_16

式中,  是摄像机位姿,  是在相机姿态  下的透视投影函数  为相机姿态的分布。在上述定义中, 三维信息  被投射到不同的图像平面上, 得到  。 的得分是通过综合不同视角下的二维信息分布得到的, 它被视为原始概率密度分布  的近似值。

该定义背后的动机在于, 人与物体之间合理的 3D 空间排列从任何角度观察时都必须看起来相容,反之,人与物体之间 2D 投影布局 的相容性意味着相应 3D 空间排列的合理性。在这样的定义下, 目标变成学习  的分布以近似原始概率密度  。

基于归一化流的先验学习算法

使用归一化流模型来对 建模,归一化流模型由归一化层(actnorm layer)、可逆线性层(invertible 1x1 convolution layer)和解耦层(affine coupling layer)堆叠形成,其训练的目标函数为最小化对应的负对数似然。如下图所示,本文所提出的方法利用归一化流模型从大量自然场景图片中学习每个图像平面中人体和物体的二维学习的分布,该归一化流模型将来自高斯分布的样本 转换成一种介于三维和二维的中间表示的概率密度分布,该中间表示结合了相机姿态和二维人体和物体在图片中的二维排布信息。为了训练该归一化流模型,收集大量来自互联网的图片,并根据每个视角下人和物体的二维排布信息来对这些图片聚类,使用聚类的结果最优化最大似然来训练该归一化模型。

基于二维先验的重建算法

考虑在给定物体形状模板的前提下, 从单视角图片中重建人体和物体的任务, 在该任务中, 人体由SMPL模型中的形状参数  和姿态参数  表示, 物体由形状模板的旋转矩阵、平移向量 和尺度标量  表示。和大多数方法类似, 本文的重建方法采用了预测-优化两阶段的算法框架来从给定的图片  中重构出参数  。在第一阶段中使用预训练好的模型来预测并初始化人体和物体的位姿, 之后使用迭代式的优化算法来微调人体和物体的位姿, 优化的总目标损失函数为

51c视觉~合集27_视觉_17

上式中  是SMPL的重投影损失,  是物体的重投影损失,  是人体和物体的正则损失,  为人体和物体之间的接触面损失,  为本文引入的二维先验损失其具体定义为

51c视觉~合集27_视觉_18

自然场景人-物交互数据集

为了能够在自然场景中验证本章所提出的算法,本文构建了WildHOI数据集。该数据集包含从YouTube网站上收集的包含各种自然场景中人-物交互的视频数据,该数据集的标注流程如下图所示。

WildHOI数据集包含了在现实世界场景中与8个物体类别的多种交互,每张图片都标注有边界框、蒙版、SMPL参数和人-物关键点。数据集按照4:1的比例划分成训练集和测试集,每个物体类别的训练集中大约包含30k-100k帧,数据集的具体统计数据见下表。

实验结果及分析

在室内BEHAVE数据集和三维监督的方法相比,如下表所示,即使在没有直接访问三维标注的前提下,本文所提出的方法达到了和三维监督的方法近乎相同的重建精度,这说明本文所提出的算法是一种有效的更加监督轻量化的算法。

在自然场景WildHOI数据集中,和无需三维标注的基于优化的算法PHOSA相对比,结果如下所示,本文所提出的方法在各项指标均由于PHOSA,特别是在物体的偏移误差上明显由于PHOSA,由于实验中,PHOSA和本文所提出算法均使用了相同的人体初始化和物体重投影损失,所以在SMPL的重建误差和物体的旋转误差上仅有轻微差异。本文所提出的方法的性能提升在于二维先验损失的引入,通过从大量二维图片中学习强先验知识,在物体的偏移误差上比PHOSA有着更好的表现。

定性分析

在下图中,将本文所提出的方法和PHOSA进行了定性对比。从定性结果可以看出,本文所提出的方法能够精确重建出人体和物体之间的空间关系,在不同场景中,尽管PHOSA的重建结果能够和图片很好的对齐,但是从侧面观察时,重建结果并不正确。而且我们的方法可以处理非接触交互类型,相反,依赖于接触面来约束人体和物体的相对位姿的PHOSA在非接触式交互的情况表现不佳。

但本文所提出的方法在一些例子表现不好,在下图中,展示了本文方法的一些失败样例。

总结

在本文中,探讨了如何从自然场景的二维图像中学习人和物体之间的空间关系的强先验。通过大量实验,展示了即使在不使用任何三维标注或者人体和物体之间三维空间关系的常识的前提下,本文所提出的方法可以在室内实验室场景下构建BEHAVE数据集和室外场景的WildHOI数据集上取得很好的结果。然而,本文所提出的工作仍然存在一些局限性。首先,该方法假设物体的形状是已知的,只聚焦于学习人体和物体的三维空间关系先验。这在物体形状变化很大的真实场景中并不太实用。此外,该方法严重依赖于大量的二维标注数据,而大规模的二维图片数据集并不是容易获得或者这种监督方式并不适用于所有任务。最后,该方法学习的是实例级别的先验而不是类别级先验,这可能对影响到对未见或稀有物体的泛化能力。




#8款数据标注工具

AI 技术的浪潮一浪高过一浪,数据标注工具也在这波涛汹涌中不断升级换代。在数字化的海洋里,精准且高质量的数据集就像是宝藏,是打造超级智能AI模型的黄金钥匙。而选对数据标注工具,就好比是找到了打开AI宝库的钥匙。

说到数据标注界的元老级人物,LabelMe 和Label Studio 这些大佬们依然仍屹立不倒。但“江山代有才人出”,一波又一波的新兴工具也不断涌现。带着更酷炫的交互界面和更牛掰的模型能力,像一匹匹黑马,引领着行业的新潮流。接下来一起盘点 2024 年那些强得可怕的数据标注工具。


1.LabelMe

LabelMe 最早是由麻省理工学院 (MIT) 的计算机科学与人工智能实验室 (CSAIL) 于 2008 年发布的,类型覆盖了实例分割、语义分割、bbox标注、图片分类等,是标注领域中不得不提的元老。

时至2024年8月,LabelMe 也不出意外的进入了商业化,发布了新版官网,集成了SAM、YOLO-World等模型,支持本地安装,但这些功能主要在Pro版本,入门版还是手动标注为主。

51c视觉~合集27_视觉_19

工具特性:

  • 支持 Windows、macOS 和 Linux 系统本地安装
  • 入门版支持多边形、矩形、圆形、直线、点、线带等不同标注类型
  • Pro 版本提供 Python API ,可通过编程的方式自动化标注流程、批量处理标注数据、或将标注结果转换为其他格式

价格:基础功能免费,Pro 版(包含AI标注、数据管理等功能)27美元

网址:https://www.labelme.io/

2.Make Sense

Make Sense 是一款在线标注工具,于 2019 年发布。Make Sense 显著的优势是轻量化和清晰化,相比于 LabelMe 的传统 UI 界面,使用体验显著提升。支持常见格式的导入、导出。

值得一提的是, Make Sense 受到了 YOLOv5 和 Roboflow 的官方推荐。Make Sense 基于 Typescript 开发,同时有开源版本,但代码近两年没有更新,社区问题的响应率比较低。

51c视觉~合集27_视觉_20

工具特性:

  • 无需部署或进行环境配置,浏览器打开即可标注
  • 支持矩形、线条、点和多边形等标签类型
  • 输出文件格式包括YOLO、VOCXML、VGG、JSON、CSV
  • 接入 AI 模型(内置了 YOLOv5、COCO SSD 和 Pose-Net )可进行自动标注

价格:免费

网址:https://www.makesense.ai/

3.T-Rex Label

T-Rex Label 是IDEA研究院(发布开集检测模型 Grounding DINO、T-Rex2 的团队)2024年最新发布的标注工具。不同于预训练模型辅助的 AI 标注(Make Sense),或者基于文本提示的智能标注(LabelMe Pro),T-Rex Label 是使用了一种视觉提示的标注方式。

框选任意目标,就可以标注其他相似物体的bbox,这种方式对于难以用文本描述的物体标注尤为适用。T-Rex Label 的标注交互流畅,社区反馈的相关问题响应较快。

51c视觉~合集27_视觉_21

工具特性:

  • 基于视觉提示的Bbox自动标注
  • 无需下载安装, 支持 Github 登录
  • 支持导出为 COCO、YOLO 等主流格式

价格:免费

网址:https://trexlabel.com/

4.VoTT

VoTT(Visual Object Tagging Tool)是由微软开发的一款图像和视频标注工具,于2018 年发布。

目前 VoTT 的最新版本是 V2,使用 TypeScript 编写。VoTT 主攻图像和视频帧的标注,进入工具后能感受到界面简单直观,功能模块清晰。VoTT 也支持与预训练模型的集成,自动生成标注,很适合大规模数据集的处理。

VoTT 平台可以与多种数据源连接,包括本地文件系统和云存储,同时还支持自定义导入导出策略。

51c视觉~合集27_视觉_22

工具特性:

  • 支持 Windows、macOS 和 Linux 操作系统
  • 主要是矩形和多边形标注
  • 支持集成多种机器学习模型和框架,但有一些成本
  • 导出数据支持多种格式,如CSV、CNTK、TensorFlow 以及自定义JSON

价格:免费

网址:https://github.com/microsoft/VoTT

5.LabelU

LabelU 是一款综合性轻量级的标注工具,由 OpenDataLab 开发今年上半年推出。LabelU的优势是工具类型全面,甚至包括属性、立体框等工具,适合构建复杂的标注任务,建自己需求的标注界面。

LabelU 目前没有集成智能标注的功能,但支持预标注数据的一键载入,用户可以根据实际需要对其进行细化和调整。

51c视觉~合集27_视觉_23

工具特性:

  • 提供包括2D框、3D框、多边形、点、线等多种标注方式
  • 支持图像、视频和音频等类型的数据标注
  • 支持预标注数据的一键载入,进行细化和调整标注后的结果可一键导出
  • 目前支持JSON、COCO、MASK等导出格式

价格:免费

网址:https://github.com/opendatalab/labelU

6.Label Studio

Label Studio 相信都不陌生,由 Heartex 基于 Python 语言开发,于2019年推出,是一个全面强大的数据标注平台。在 Label Studio 中,可以根据项目需求自定义标注界面、调整标注工具,设置好后使用起来很顺手。

值得一提的是,Label Studio 提供了内置的质量控制机制,如标注审核和多标注员一致性检查,以确保标注数据的准确性和可靠性。

51c视觉~合集27_视觉_24

工具特性:

  • 支持本地部署和云部署,适应不同规模的团队和项目
  • 可通过编写 YAML 文件自定义标注界面
  • 支持与多种机器学习框架如 TensorFlow、PyTorch、scikit-learn 集成
  • 支持多种标注类型,包括图像、文本、音频、视频以及时间序列

价格:普通版免费,企业版详询官网

网址:https://labelstud.io

7.Supervisely

Supervisely 是一款基于 web 的数据标注平台,同样具有直观易用的 UI 设计。此外,Supervisely 更是一款名副其实的端到端数据标注和管理平台,可以在该平台上实现数据管理、自动化标注和团队协作的全流程功能。

企业版还支持本地部署和 Python 应用程序自定义标注工作流,尤其适合需要进行大规模数据处理和数据类型复杂多样的项目团队。

51c视觉~合集27_视觉_25

工具特性:

  • 具有数据集的版本控制、数据清理和预处理功能
  • 提供了 RESTful API 和 SDK,方便与其他系统集成
  • 标注形式包括:点、框、折线、多边形、智能工具 (Smart Tool)、像素点笔刷等
  • 支持丰富的导入格式及提供丰富的导出格式

价格:提供免费版本和付费版本,Pro 版本每月199欧元,企业版具体咨询,其中免费版本功能较为受限

网址:https://supervisely.com

8.Labelbox

Labelbox 于 2018 年推出,同样是一个专业的在线数据标注平台。除了标注外,Labelbox 还支持大规模数据管理、模型分析等功能,赋能整个研究过程。

此外,平台集成了 YOLOv8、GroundingDINO、SAM 等开源模型。但是,国内访问速度较慢,免费版本的限制较多。

51c视觉~合集27_视觉_26

工具特性:

  • 支持与 AWS、GCP、Azure 等云服务的无缝集成,便于管理和处理大规模数据集
  • 可进行图像、视频、文本、音频以及3D点云标注
  • 集成多种预训练模型,可选择对应模型进行辅助标注
  • 支持与主流机器学习框架 TensorFlow、PyTorch 和工具 Databricks、Snowflake 等集成

价格:以 LBU(Labelbox Unit)为计算单位,免费版每个月能够使用500 LBUs,升级版为每 LBU 0.1美元,企业版具体咨询

网址:https://labelbox.com




#SSD-KD

清华与天翼云联手打造,无数据蒸馏效率提升10倍

论文提出首个完全高效的D-KD方法,即小规模无数据知识蒸馏(SSD-KD)。从一种新颖的“小数据规模”视角出发,提高了对抗反演和蒸馏范式的整体训练效率。 

无数据知识蒸馏能够利用大型教师网络所学到的知识,来增强较小型学生网络的训练,而无需访问原始训练数据,从而避免在实际应用中的隐私、安全和专有风险。在这方面的研究中,现有的方法通常遵循一种反演蒸馏的范式,在预训练教师网络指导下实时训练生成对抗网络来合成一个大规模的样本集用于知识蒸馏。论文重新审视了这种常见的无数据知识蒸馏范式,表明通过“小规模逆向数据进行知识蒸馏”的视角,整体训练效率有相当大的提升空间。根据三个经验观察结果,这些观察结果表明在数据逆向和蒸馏过程中平衡类别分布在合成样本多样性和难度上的重要性,论文提出了小规模无数据知识蒸馏(SSD-KD)。在形式化上,SSD-KD引入了一个调节函数来平衡合成样本,并引入了一个优先采样函数来选择合适的样本,通过动态回放缓冲区和强化学习策略进行辅助。SSD-KD可以在极小规模的合成样本(例如,比原始训练数据规模小10X  )条件下进行蒸馏训练,使得整体训练效率比许多主流方法快一个或两个数量级,同时保持卓越或竞争性的模型性能,这一点在流行的图像分类和语义分割基准上得到了验证。

51c视觉~合集27_视觉_27

论文地址:https://arxiv.org/abs/2406.07876

论文代码:https://github.com/OSVAI/SSD-KD

Introduction

对于资源受限设备上的计算机视觉应用,如何学习便携的神经网络同时保持满意的预测准确性是关键问题。知识蒸馏(KD)利用预训练的大型教师网络的信息来促进在相同训练数据上的较小目标学生网络的训练,已经成为一种主流解决方案。传统的KD方法假设原始训练数据始终可用。然而,由于潜在的隐私、安全、专有或数据规模等问题,实际中通常无法访问教师网络训练时使用的源数据集。为了解决训练数据的限制,数据无关的知识蒸馏最近引起了越来越多的关注。

数据无关知识蒸馏(D-KD)的基本思想是基于预训练的教师网络构建合成样本进行知识蒸馏,这些合成样本应当匹配原始训练数据的潜在分布。现有的顶级D-KD方法通常采用对抗性反演和蒸馏范式。

在反演过程中,通过将预训练的教师网络作为判别器来训练生成器。

在随后的知识蒸馏过程中,实时学习的生成器将合成伪样本用于训练学生网络。

然而,对抗性D-KD方法通常需要生成大量的合成样本(与原始训练数据集的规模相比),以确保可信的知识蒸馏。这给训练资源消耗带来了沉重负担,抑制了其在实际应用中的使用。在最近的一项工作中,作者提出了一种有效的元学习策略,该策略寻找共同特征并将其作为初始先验以减少生成器收敛所需的迭代步骤。尽管可以实现更快的数据合成,但仍然需要生成足够多的合成样本以确保有效的知识蒸馏。这忽略了后续知识蒸馏过程的效率,成为整体训练效率的主要瓶颈。总而言之,目前尚未有研究工作通过共同考虑数据反演和知识蒸馏过程来提高D-KD的整体训练效率。

为了弥补这一关键差距,论文提出首个完全高效的D-KD方法,即小规模无数据知识蒸馏(SSD-KD)。从一种新颖的“小数据规模”视角出发,提高了对抗反演和蒸馏范式的整体训练效率。在这项工作中,“数据规模”指的是在一个训练周期内用于知识蒸馏的总反演样本数量。

SSD-KD的提出主要源于三个观察的启发。

51c视觉~合集27_视觉_28

首先,论文观察到,当在不同的教师-学生网络对上将合成样本和原始样本的数据规模显著缩减到相同水平(例如,源训练数据集大小的10%)时,训练于合成样本的学生网络相比于训练于原始样本的对应网络显示出更好的性能,如图1所示。需要注意的是,合成样本是在全源数据集上预训练的教师网络的指导下生成的,这自然反映了原始数据分布的不同视角。在足够小的数据规模下,这使得合成样本在拟合整个源数据集的基础分布方面优于原始样本。这一启发性的观察表明,如果能够构建一个小规模的高质量合成样本集,将创造出一种通向完全高效D-KD的有希望的方法。从原则上讲,论文认为一个高质量的小规模合成数据集应该在合成样本的多样性和难度方面具有良好的类别分布平衡。

然而,论文其他两个观察表明,现有的D-KD方法,包括传统的和最有效的设计,都没有在小数据规模下平衡上述两个方面的类别分布的良好能力,如图2所示。需要注意的是,已经存在一些D-KD方法来增强合成样本的多样性,但合成样本在样本难度方面的多样性尚未被探讨。

基于上述观察和分析,论文提出了SSD-KD,引入了两个相互依赖的模块以显著提高主要的对抗性反演和蒸馏范式的整体训练效率。SSD-KD的第一个模块依赖于一种新颖的调制函数,该函数定义了一个多样性感知项和一个难度感知项,以明确的方式共同平衡合成样本在数据合成和知识蒸馏过程中的类别分布。第二个模块定义了一种新颖的优先采样函数,这一函数通过强化学习策略来实现,从候选样本中选择少量适当的合成样本,这些样本存储在一个动态重放缓冲区中用于知识蒸馏,从而进一步提高端到端的训练效率。得益于这两个模块,SSD-KD具有两个吸引人的优点。一方面,SSD-KD可以在极小规模的合成样本(比原始训练数据规模小10倍)上进行蒸馏训练,使得整体训练效率比许多主流的D-KD方法快一个或两个数量级,同时保持竞争力的模型性能。另一方面,SSD-KD在学生模型准确性方面获得了大幅度的提升,并且在将合成样本的数据规模放宽到相对较大的数量时(仍然小于现有D-KD方法的规模)保持了整体训练效率。

MethodPreliminaries: D-KD

设  为一个在原始任务数据集上预训练的教师模型, 而该数据集现在已不可访问。DKD 的目标是首先通过反演教师模型学到的数据分布信息来构建一组合成训练样本 , 然后在这些样本上训练一个目标学生模型 , 迫使学生模型模拟教师的功能。现有的 D-KD 方法大多使用生成对抗网络  来生成合成训练样本 , 其中  为潜在噪声输入, 该生成对抗网络的训练是通过将教师模型作为鉴别器来进行的。

D-KD 的优化包含一个常见的蒸馏正则化项, 用于最小化教师-学生模型之间的功能差异 , 该差异基于 KL 散度。此外, 还包含一个任务导向的正则化项 , 例如, 使用教师模型的预测作为真实标签的交叉熵损失。除此之外, 由于 DKD 主要基于教师模型经过预训练后能够捕捉源训练数据分布的假设, 近年来的 D-KD 方法引入了额外的损失项, 以正则化数据反演过程中训练数据分布的统计量(批量归一化(BN)参数)。

51c视觉~合集27_视觉_29

其中,  和  分别表示第  层特征图的批量均值和方差估计;  对批量归一化 (BN)统计量的期望可以通过运行均值或方差进行近似替代。

D-KD的有效性在很大程度上依赖于从利用预训练教师模型知识反演得到的合成样本的质量。现行的对抗性D-KD范式包含两个过程,即数据反演和知识蒸馏。从效率和效果两个角度来看,一方面,数据反演过程在很大程度上影响学生模型的优化性能;另一方面,知识蒸馏的训练时间成本成为D-KD整体训练效率的一个重要限制因素。

Our Design: SSD-KD

51c视觉~合集27_视觉_30

SSD-KD专注于通过“用于知识蒸馏的小规模反演数据”这一视角来改进对抗性D-KD范式,着重于利用预训练教师模型和知识蒸馏过程的反馈来指导数据反演过程,从而显著加快整体训练效率。根据前述中的符号,SSD-KD的优化目标定义为

51c视觉~合集27_视觉_31

其中,

  1. 采用了一种多样性感知的调制函数 , 该函数根据教师模型对每个合成样本的预测类别分配不同的优先级。
  2. 在 BN 估计的约束下, 通过  鼓励生成器尽可能探索对教师模型来说更具挑战性的合成样本。
  3. 不采用随机采样策略来选择样本进行知识蒸馏, 而是采用重加权策略来控制采样过程。符号 - 来表示应用基于优先级采样函数  。
  4. 每个合成样本不仅由其调制函数  进行优先级排序, 而且在采样阶段还会重新加权, 该阶段重用了与  相同的中间值。

虽然D-KD流水线允许合成训练样本并用于在同一任务上训练学生模型,但存在大量数据冗余,这妨碍了D-KD方法的训练效率。SSD-KD是一种完全高效的D-KD方法,能够使用极小规模的合成数据,同时与现有的D-KD方法相比,达到具有竞争力的性能。

51c视觉~合集27_视觉_32

SSD-KD的流程总结在算法1中,现有对抗性D-KD方法的优化流程(包括传统家族和更高效家族)与我们的SSD-KD的比较如图3所示。

Data Inversion with Distribution Balancing

51c视觉~合集27_视觉_33

图2展示了D-KD中由于合成数据的大量不平衡导致的数据冗余。右侧两个子图描绘了教师模型预测的类别分布,显示了数据类别的显著不平衡,而左侧两个子图展示了不同预测难度下的样本数量(难度通过教师模型预测的概率来衡量)。对于D-KD来说,这表明仅仅根据教师-学生差异来生成样本会导致样本难度分布非常不均,并倾向于获得容易预测的数据样本。对于数据样本全部合成的D-KD任务,数据生成过程需要同时考虑教师-学生差异和教师自身的预训练知识,基于此,SSD-KD提出了考虑多样性和难度的数据合成方法。

Diversity-aware balancing

首先在数据反演过程中解决样本难度不平衡的问题。具体来说, 维护一个回放缓冲区 , 它存储一定数量(记作  )的合成数据样本。对于  中的每个数据样本 , 惩罚与  共享相同预测类别 (由教师模型预测) 的样本总量。为实现这一点, 采用了一个考虑多样性的平衡项, 该项鼓励生成器合成具有不常见类别的样本。

Difficulty-aware balancing

借鉴在对象检测领域中使用焦点损失来处理高度不平衡样本的经验, 进一步对每个样本  引入了一个基于预测概率  的难度感知平衡项。在这里,困难的合成样本被认为是那些由教师模型预测信心较低的样本,这些样本会受到难度感知平衡项的鼓励。

总之,论文引入了一个调节函数  来根据来自预训练教师模型的预测反馈调整生成器的优化。 旨在平衡类别分布, 并动态地区分容易和困难的合成样本, 从而使容易的样本不会过度主导蒸馏过程。形式上, 对于合成数据样本 , 其调节函数  的计算公式为

51c视觉~合集27_视觉_34

其中,  和  分别指代预训练教师模型预测的类别索引和概率(或置信度);  表示一个指示函数, 如果  的预测类别与  相同, 则该函数等于 1 , 否则为 0 ;  是一个超参数。

强调调节函数  的两个特性:

  1. 对于在教师模型中预测置信度较高的数据样本  (即被视为容易样本),  接近于低值,从而对任务相关损失  在公式('ref`{eq:loss})中的影响较小。
  2. 当教师网络预测的合成数据样本在  中的类别分布严重不平衡时, 与  中更多样本共享类别的样本  会受到惩罚, 从而  会削弱相应的  。

尽管公式表明调节函数  的值部分由当前的重放缓冲区  决定, 但需要注意的是,  是动态变化的, 并且也受到  的影响。这是因为公式中的项  直接优化了生成器, 该生成器合成数据样本以组成  。从这个意义上说, 考虑到  和  的相互影响, 在训练过程中保持了类别多样性的平衡。在数据逆向过程中, 平衡数据样本的类别尤为重要。

如图2所示,借助这两个平衡项,SSD-KD在样本类别和难度方面生成了温和的样本分布。

Distillation with Priority Sampling

原始的优先经验重放方法更频繁地重用重要知识的转移,从而提高学习效率。与此不同的是,论文的优先采样方法并不从环境中获得奖励,而是设计为适应无数据的知识蒸馏并从框架自身获取反馈。换句话说,优先采样方法在无数据知识蒸馏方法中扮演了相反的角色:它专注于训练一小部分高度优先的样本,而不是均匀采样,从而加速训练过程。

从当前的重放缓冲区  中采样合成数据 , 论文提出了一种名为优先采样 (Priority Samp ling, PS)的采样策略来调节采样概率, 而不是均匀采样。PS 的基本功能是衡量  中每个样本  的重要性, 因此引入了优先采样函数  。

51c视觉~合集27_视觉_35

 表示 softmax 输出  和  之间的 KL 散度;  和  依赖于训练步骤  ;  是用于归一化  中样本的校准项, 如下面的公式所形式化, 特别地, 当  时,  。

使用随机更新进行知识蒸馏的训练, 依赖于这些更新与其期望值具有相同的分布。优先采样数据会引入偏差, 因为它可能会改变数据分布, 从而影响估计值所收玫的解。因此, 通过引入一个重要性采样(Importance Sampling, IS)权重  来校正这种偏差, 用于数据样本

51c视觉~合集27_视觉_36

其中  是一个超参数;  是定义为的采样过渡概率

51c视觉~合集27_视觉_37

其中  是一个小的正数, 用于防止在优先级为零时转移不被选择的极端情况。优先采样函数  具有两个显著特性:

  1. 随着 delta 值的增加,  反映了当前  中合成样本的教师模型与学生模型之间的更大信息差异。因此, 学生模型应从信息差异更大的样本中进行优化, 这有助于更快地获取教师模型。
  2.  会随着学生模型和生成模型的每次更新迭代而动态变化。因此, 当学生模型在某些样本上获得了教师模型的能力时, 它会继续从相对于教师模型差异更大的样本中学习, 基于新的样本分布。这进一步提升了学生模型的性能。

Experiment

51c视觉~合集27_视觉_38

51c视觉~合集27_视觉_39

51c视觉~合集27_视觉_40

51c视觉~合集27_视觉_41

51c视觉~合集27_视觉_42




#CNN图像增强

为什么需要Image Augmentation?

    Image augmentation 两个主要的功能包含『弥补资料不足』以及『避免Overfitting』

    弥补资料不足

    通常我们想要训练一个准确性高、泛化性好的CNN图像辨识器,除了模型本身的架构外,最关键的就是我们所拥有的资料,资料量越大、越完整,那想必不用太过于复杂的架构也能获得不错的效果!但一般来说,图像资料的收集往往是我们最大的痛点,而在资料有限的状况下,我们又该如何自己创造新的资料呢?没错!最简单的方式就是透过Image augmentation,我们藉由旋转、裁切、增加噪点、白化等技术,将原本的图片做了一些『加强』,如此一来,我们就硬生生地增加了许多的资料。

    避免Overfitting

    在训练一个分类器时,大家应该很容易遇到Overfitting的状况,也就是对Training Data过于完美的拟合,此时,透过适当的图像增强,也能降低Overfitting 的可能性。

Keras图像数据生成器

    我们先来介绍Keras 的ImageDataGenerator,ImageDataGenerator可以做到许多的图像增强,以下列出几项常见的项目为大家介绍:

    featurewise_center:Boolean,以每一张feature map为单位将平均值设为0

    featurewise_std_normalization: Boolean,以每一张feature map为单位将数值除以其标准差(上述两步骤就是我们常见的Standardization)

    zca_whitening: Boolean,透过ZCA取出重要特征(详见:ZCA介绍)

    rotation_range:整数值,控制随机旋转角度

    width_shift_range:「浮点、整数、一维数」,图像宽度上随机偏移值

    height_shift_range:「浮点、整数、一维数」,图像高度上随机偏移值

    shear_range:浮点数,裁切强度

    zoom_range:浮点数或范围,控制随机缩放比例

    horizontal_flip: Boolean,随机水平翻转

    vertical_flip :Boolean,随机垂直翻转

    rescale:数值,缩放比例

    dtype:输出资料型态

from keras.preprocessing.image import ImageDataGenerator
import matplotlib.pyplot as plt
import numpy as np
import cv2
%matplotlib inline


##定義ImageDataGenerator
img_gen = ImageDataGenerator( featurewise_center=True,featurewise_std_normalization=True,rotation_range=10,width_shift_range=0.1,
                                            height_shift_range=0.1,shear_range=0.1,zoom_range=0.1,horizontal_flip=True,vertical_flip=False,dtype=np.float32)
width=224
height=224
batch_size=4


##讀入照片
img = cv2.imread('Tano.JPG')  
img = cv2.resize(img, (224,224))##改變圖片尺寸
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) #Cv2讀進來是BGR,轉成RGB
img_origin=img.copy()
img= np.array(img, dtype=np.float32)


img_combine=np.array([img,img,img,img],dtype=np.float32) ##輸入generator要是四維


batch_gen = img_gen.flow(img_combine, batch_size=4)
assert next(batch_gen).shape==(batch_size, width, height, 3)


plt.figure(figsize=(20,10))
i = 1
for batch in batch_gen:
    plt.subplot(1, 5, 1)
    plt.imshow(img_origin)
    plt.subplot(1, 5, i+1)
    plt.imshow(batch[0, :, :, :].astype(np.uint8))
    plt.imshow(batch[1, :, :, :].astype(np.uint8))
    plt.imshow(batch[2, :, :, :].astype(np.uint8))
    plt.imshow(batch[3, :, :, :].astype(np.uint8))
    plt.axis('off')
    i += 1
    if i > 4:
        break  # 如果不break會陷入無限迴圈

    看一下输入与输出照片,最左边是输入照片:

51c视觉~合集27_视觉_43

    面程式码示范如何在Keras中将Generator输出资料给Model:

#Training Generator
train_datagen = ImageDataGenerator(rescale = 1./255,shear_range = 0.2,zoom_range = 0.2,horizontal_flip = True)
#Test Generator,只需要Rescale,不需要其他增強
test_datagen = ImageDataGenerator(rescale = 1./255)


#將路徑給Generator,自動產生Label
training_set = train_datagen.flow_from_directory('dataset/training_set',
                                                 target_size = (64, 64),
                                                 batch_size = 32,
                                                 class_mode = 'categorical')


test_set = test_datagen.flow_from_directory('dataset/test_set',
                                            target_size = (64, 64),
                                            batch_size = 32,
                                            class_mode = 'categorical')


#訓練,假設classifier是你搭好的model
classifier.fit_generator(training_set,steps_per_epoch = 250,nb_epoch = 100,
                         validation_data = valid_set,validation_steps = 63)


#預測新照片
from keras.preprocessing import image as image_utils
test_image = image_utils.load_img('dataset/new_images/new_picture.jpg', target_size=(224, 224))
test_image = image_utils.img_to_array(test_image)
test_image = np.expand_dims(test_image, axis=0) 


result = classifier.predict_on_batch(test_image)

Imgaug

    这里额外向大家介绍一个好用的library叫做Imgaug( Github连结),可以点进Github内看细节介绍,安装方式最简单的话使用pip install imgaug,下面我们示范用Imgaug做Image augmentation:

from imgaug import augmenters as iaa
import matplotlib.pyplot as plt
import numpy as np
import cv2


img = cv2.imread('Tano.JPG')  
img = cv2.resize(img, (224,224))##改變圖片尺寸
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) #Cv2讀進來是BGR,轉成RGB
img_origin=img.copy()
img= np.array(img, dtype=np.float32)


images = np.random.randint(0, 255, (5, 224, 224, 3), dtype=np.uint8)##創造一個array size==(5, 224, 224, 3)


flipper = iaa.Fliplr(1.0) #水平翻轉機率==1.0
images[0] = flipper.augment_image(img) 


vflipper = iaa.Flipud(0.4) #垂直翻轉機率40%
images[1] = vflipper.augment_image(img) 


blurer = iaa.GaussianBlur(3.0)
images[2] = blurer.augment_image(img) # 高斯模糊圖像( sigma of 3.0)


translater = iaa.Affine(translate_px={"x": -16}) #向左橫移16個像素
images[3] = translater.augment_image(img) 


scaler = iaa.Affine(scale={"y": (0.8, 1.2)}) # 縮放照片,區間(0.8-1.2倍)
images[4] = scaler.augment_image(img)


i=1
plt.figure(figsize=(20,20))
for image in images:
    plt.subplot(1, 6, 1)
    plt.imshow(img_origin.astype(np.uint8))
    plt.subplot(1, 6, i+1)
    plt.imshow(image.astype(np.uint8))
    plt.axis('off')
    i+=1

    看一下输入与输出照片,最左边是输入照片:

51c视觉~合集27_视觉_44

    上面的程式代码中,我们示范了如何运用Imgaug library做简单的图像增强,大家应该已经有一些概念,下方程式码示范如何将多种增强效果包装起来:

import numpy as np
import imgaug as ia
import imgaug.augmenters as iaa
import matplotlib.pyplot as plt
%matplotlib inline


##輸入照片
img = cv2.imread('Tano.JPG')  
img = cv2.resize(img, (224,224))##改變圖片尺寸
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) #Cv2讀進來是BGR,轉成RGB
img_origin=img.copy()
img= np.array(img, dtype=np.float32)


img_combine=np.array([img,img,img,img],dtype=np.float32) 


sometimes = lambda aug: iaa.Sometimes(0.5, aug) # Sometimes(0.5, ...) 代表每次都有50%的機率運用不同的Augmentation


##包裝想運用之圖像強化方式
seq = iaa.Sequential([
    iaa.Crop(px=(0, 16)),
    iaa.Fliplr(0.4), 
   sometimes(iaa.CropAndPad(
        percent=(-0.05, 0.1),
        pad_mode=ia.ALL,
        pad_cval=(0, 255)
    )),
    sometimes(iaa.Affine(
        scale={"x": (0.8, 1.2), "y": (0.8, 1.2)}, 
        translate_percent={"x": (-0.2, 0.2), "y": (-0.2, 0.2)}, 
        rotate=(-10, 10),
        shear=(-8, 8), 
        order=[0, 1], 
        cval=(0, 255),
        mode=ia.ALL 
    )),
    sometimes(iaa.Superpixels(p_replace=(0, 1.0), n_segments=(20, 200))), # convert images into their superpixel representation
    sometimes(iaa.OneOf([
    iaa.GaussianBlur((0, 3.0)), # blur images 
                    iaa.AverageBlur(k=(1,3)), # blur image using local means with kernel sizes between 1 and 3
                    iaa.MedianBlur(k=(3, 5)), # blur image using local medians with kernel sizes between 3 and 5
                ])),
     sometimes(iaa.Sharpen(alpha=(0, 0.2), lightness=(0.1, 0.4))), # sharpen images
     sometimes(iaa.Emboss(alpha=(0, 0.3), strength=(0, 0.5))), # emboss images
    ],random_order=True)






images_aug = seq.augment_images(img_combine) ## Image Augmentation


##畫出來
i=1
plt.figure(figsize=(20,20))
for image in images_aug:
    plt.subplot(1, 5, 1)
    plt.imshow(img_origin.astype(np.uint8))
    plt.subplot(1, 5, i+1)
    plt.imshow(image.astype(np.uint8))
    plt.axis('off')
    i+=1

    看一下三组输入与输出照片,每次都是随机增强,最左边是输入照片:

51c视觉~合集27_视觉_45

结论

    Image Augmentation 是常见的影像前处理,然而也要避免一些错误的使用情境,如训练数字模型时使用垂直翻转,这样会造成6、9之间的训练问题,又如输入影像为小尺寸(ex. 32*32),结果随机裁切16个像素,如此几乎所有的内容都被裁切导致模型无法学到有用资讯。

    适当的运用Image Augmentation技巧相信能提升模型的表现!




#MME-RealWorld

挑战当前最难、规模最大多模态评测基准MME-RealWorld,QwenVL-2位列第一但并未及格

32 个标注者,29,429 条标注数据,图像平均分辨率 20001500,当前最难最大的纯手工标注图像感知 benchmark 来了!现有模型没有一个在总分上取得 60% 以上的准确率。

论文名称:MME-RealWorld: Could Your Multimodal LLM Challenge High-Resolution Real-World Scenarios that are Difficult for Humans?

论文链接:https://arxiv.org/abs/2408.13257

项目主页:https://mme-realworld.github.io/

代码链接:https://github.com/yfzhang114/MME-RealWorld

51c视觉~合集27_视觉_46

主要发现

  1. 在真实世界任务上,Qwen2-vl 和 InternVL2 在中文感知和推理任务上表现明显好于闭源模型比如 Claude 3.5,国内用户可以首选这两个。
  2. 英文版二者的感知能力 Qwen2-vl > InternVL2 > 其他,但是推理还是闭源模型 Claude 3.5 更胜一筹。
  3. 闭源模型比如 Gpt-4o 对于高分图像的能力被高估了,这方面 GPT-4o 基本上都排不到前三,Gemini-Pro 则更差。
  4. 所有 MLLMs 在自动驾驶,遥感数据,视频监控等复杂场景下的表现都非常差,在有些 domain上Qwen2-vl 的 Acc 也只有三十多(五分类),下游任务应用任重而道远。

真实场景部分任务展示

51c视觉~合集27_视觉_47

▲ 真实世界 OCR,需要在分辨率超过 1024 * 1024 的图像上识别细粒度的文字/数字

51c视觉~合集27_视觉_48

▲ 金融财报图表分析:超大图表的具体元素的定位,识别,比较与计算

51c视觉~合集27_视觉_49

▲ 监控数据分析:对视频监控数据的具体目标的计数/分析与识别

51c视觉~合集27_视觉_50

▲ 真实遥感数据物体识别:在高清遥感数据(单张图像大小甚至超过 500mb)上对小物体的统计与属性识别

51c视觉~合集27_视觉_51

▲ 自动驾驶:对自动驾驶场景下,自车或者其他车辆拍摄图像中的各种元素的行为理解与预测

为什么需要MME-RealWorld/现有benchmark的不足

51c视觉~合集27_视觉_52

▲ MME-RealWorld 是规模最大的完全由人类标注的数据集,具有最高的平均分辨率和最具挑战性的任务。

近年来,多模态大语言模型(MLLMs)得到了显著的发展。这些模型的主要设计目标是开发能够通过整合多种模态感官数据全面感知人类查询和环境情况的通用智能体。因此,出现了大量全面的评估基准,用于严格评估这些模型的能力。然而,也存在一些常见问题:

  1. 数据规模:许多现有的基准数据集包含少于 10,000 个问答对,例如 MME、MMbench、MMStar、MM-Vet、TorchStone 和 BLINK。有限的问答数量可能导致较大的评估波动。
  2. 注释质量:虽然一些基准(如 MMT-Bench 和 SEED-Bench)规模相对较大,但其注释是由 LLMs 或 MLLMs 生成的。由于这些模型的性能有限,这种注释过程不可避免地会引入噪声,从而影响注释的质量。例如,在我们的基准中,表现最好的模型 InternVL-2 的准确率仅为 50%,依赖这些模型会不可避免地降低注释的质量。
  3. 任务难度:目前,一些基准的最高性能已经达到了 80%-90% 的准确率,且先进 MLLMs 之间的性能差距较小。这使得验证先进模型的优势或改进变得具有挑战性,也难以区分哪个模型明显更优。

鉴于这些问题,作者提出了一个新的基准测试,名为 MME-RealWorld。作者首先关注了一系列具有明确动机的数据集家族,考虑了来自自动驾驶、遥感、视频监控、报纸、街景和金融图表等领域的图像。这些场景即使对人类来说也极具挑战性,作者希望 MLLMs(多模态大模型)能够真正提供帮助。

MME-RealWorld的数据来源与主要特征

基于这些主题,作者从超过 30 万个公共和互联网来源中收集了总计 13,366 张高分辨率图像,这些图像的平均分辨率为 2,000×1,500,包含丰富的图像细节。作者邀请了 25 位专业标注员和 7 位 MLLMs 领域的专家参与数据标注和质量检查,同时确保所有问题对 MLLMs 都具有挑战性。值得注意的是,作者指出,大多数问题甚至对人类来说也很难,需要多名标注员来回答并复查结果。

正如所示,MME-RealWorld 最终包含 29,429 个注释,涵盖 43 个子类任务,每个任务至少有 100 个问题。作者在这一基准测试中对 28 个先进的 MLLMs 进行了评估,并提供了详细的分析。

作者总结了 MME-RealWorld 相对于现有基准的主要优势,如下所示:

数据规模:通过 32 名志愿者的努力,作者手动标注了 29,429 个专注于现实世界场景的 QA 对,使其成为迄今为止最大的完全由人类标注的基准测试。

数据质量:

  • 分辨率:作者指出,许多图像细节(如体育赛事中的记分牌)包含关键信息。只有通过高分辨率图像才能正确解读这些细节,而这对于向人类提供有意义的帮助至关重要。据作者所知,MME-RealWorld 拥有现有基准中最高的平均图像分辨率。
  • 标注:所有标注均由专业团队手工完成,并进行交叉检查以确保数据质量。

任务难度与现实世界应用:上图(b)显示了不同 MLLMs 的性能结果,表明即使是最先进的模型,其准确率也未超过 60%。此外,作者在下图中展示,许多现实世界的任务显著比传统基准测试中的任务更难。例如,在视频监控中,模型需要计算 133 辆车的存在;在遥感中,模型必须识别并计算分辨率超过 5000×5000 的地图上的小物体。

51c视觉~合集27_视觉_53

MME-RealWorld-CN:作者指出,现有的中文基准通常从英文版本翻译而来,这有两个限制:

  • 问题与图像不匹配:图像可能与英文场景相关,但与中文问题没有直观的联系。
  • 翻译不匹配:机器翻译并不总是足够精确和完美。为此,作者收集了更多关注中国场景的图像,并邀请中国志愿者进行标注,最终获得了 5,917 个 QA 对。

模型效果与分析

51c视觉~合集27_视觉_54

▲ 感知任务的实验结果显示,模型按照其平均性能进行排名。为了区分,专有模型的行被灰色突出显示。各领域的任务分别用 “OCR”、“RS”、“DT”、“MO” 和 “AD” 表示,具体对应:野外光学字符识别、遥感、图表与表格、监控和自动驾驶。“Avg” 和 “Avg-C” 分别表示各领域子任务的加权平均准确率和未加权平均准确率。

上表展示了不同模型在 5 个领域中的感知能力表现。总体而言,Qwen2-VL 与 InternVL-2 表现出最强的感知能力,优于其他闭源模型。然而,各个任务的表现存在差异,作者总结了以下几点关键观察:

  1. OCR 任务表现:GPT-4o 在实际 OCR 任务中表现最佳,达到了 77% 的准确率,但在更具挑战性的任务中,其表现显著下降,落后于其他顶尖模型。这一趋势也在其他闭源模型中出现,如 Gemini-1.5-Pro 和 GPT-4o-mini,它们在 OCR 任务中表现良好,但在其他实际任务中表现欠佳。作者提出了三种可能的原因:
  • 闭源模型在上传本地图像时通常对最大图像尺寸和分辨率有限制。例如,Claude 3.5 Sonnet 的最大分辨率为 8K,最大图像质量为 5MB,而 GPT-4o 和 Gemini-pro 允许上传最大 20MB 的图像。这限制了某些高质量图像的输入,因为需要压缩图像才能上传。
  • 闭源模型往往更为保守。作者观察到,闭源模型输出 “E”(表示图像中不存在相关物体)的比例较高,这表明这些模型可能采用保守的应答策略,以避免幻觉或提供更安全的答案。
  • 闭源模型有时拒绝回答某些问题。由于不同的输入/输出过滤策略,一些样本被认为涉及隐私或有害内容,因此不予回答。
  1. 高分辨率输入的优势:允许更高分辨率输入的模型(如 Mini-Gemini-HD 和 SliME)相对于直接使用视觉编码器的模型(如 ShareGPT4V 和 LLaVA1.5)表现出显著优势。在相同的模型大小下,这些模型在不同子任务中的表现均有所提升。这强调了高分辨率图像处理对于解决复杂现实任务的重要性。
  2. 不同领域的趋势:遥感任务涉及处理极大图像,要求对图像细节有更深入的理解。在这些任务中,专注于高分辨率输入的模型(如 Cambrian-1、Mini-Gemini-HD 和 SliME)表现优于其他模型。此外,在大量图表数据上进行训练的模型在处理复杂图表时表现出更好的感知能力。例如,SliME 和 LLaVA1.5 的训练集中包含的图表数据有限且相对简单,因此在这一类别中的表现不及更近期的模型。
  3. 推理能力:下表展示了推理任务的实验结果。在推理能力方面,Claude 3.5 Sonnet 在大多数领域中表现最为出色,尤其是在图表相关任务中,比排名第二的 GPT-4o 高出 16.4%。闭源模型 GPT-4o 表现良好,略微落后于排名第二的 InternVL-2,但在多个领域中甚至优于 InternVL-2。

大多数开源模型表现不佳,传统基准方法(如 LLaVA1.5 和 Qwen-VL-Chat)的结果接近随机猜测。此外,推理任务比感知任务更具挑战性。即使是排名最高的模型,其平均准确率也未能超过 45%,类别准确率也未超过 50%。这表明当前模型在达到人类级别的推理能力方面仍有很大差距。

51c视觉~合集27_视觉_55

▲ 推理任务的实验结果显示,模型按照其平均性能进行排名。为了区分,专有模型的行被灰色突出显示。

目前MLLM的缺陷以及值得注意的点

现有模型在图像细节感知方面的不足: 多数模型选择答案 “E” 的频率远高于实际数据中的比例,这表明这些模型的视觉感知模块未能准确识别图像中的对象。

MLLMs 在理解动态信息方面的局限性: 在自动驾驶和监控任务中,MLLMs 在理解和推理动态信息方面表现出明显的不足,显示出与人类能力之间的巨大差距。

计算效率: 处理高分辨率图像时,各模型的计算效率差异显著。某些模型在处理超过 1024×1024 分辨率的图像时计算需求非常高,如 Mini-Gemini-HD,计算成本比 LLaVA1.5 高约 5 倍。这也显示了现有方法在处理高分辨率图像时的固有局限性。

错误选项分析: 研究发现,不同的 MLLM 在处理不确定问题时的应对策略有所不同。较大的模型通常采取更保守的策略,倾向于选择更安全的 “E” 选项,而较小的模型往往倾向于选择第一个选项 “A”。值得注意的是,InternVL-2 的错误选择分布非常均匀,这可能解释了其在评估中的优异表现。

指令跟随能力: 闭源模型在按照指令选择和输出单一答案方面表现较好,而开源模型往往不严格遵循指令,生成过多的附加分析,有时甚至在达到预定义的最大 token 数之前仍继续输出。这表明开源模型在指令执行能力方面仍有很大优化空间。

总结与未来工作

本文提出了 MME-RealWorld 基准测试,旨在解决现有 MLLM 评估中的关键局限性,如数据规模、标注质量和任务难度。作为迄今为止最大、分辨率最高的纯人工标注数据集,MME-RealWorld 得益于 32 名标注者的参与,确保了高质量数据和最小的个人偏差。大多数 QA 对都集中在自动驾驶和视频监控等现实世界场景上,这些场景具有重要的适用性。

此外,MME-RealWorld-CN 作为一个专注于中文场景的基准测试,基本上能够确保所有图像和问题都与中文环境相关,且全中文为母语的人工标注,不存在机器翻译引发的一系列问题。

本文还对广泛的模型进行的评估揭示了显著的性能差距,突出了当前模型在复杂图像感知方面的缺陷,并强调了进一步提高的需求。




#DPO数学原理

本文通过数学推导展示了如何从偏好对齐的总体优化目标出发,逐步简化并最终得到DPO的优化目标。

一、DPO在做一件什么事

在文章的开始,我们来思考一个问题:如果想让你训练一个能听得懂人类问题,并给出人类满意答案的模型,你会怎么设计大致的训练步骤?

一口吃成一个大胖子是困难的,所以不如让我们循序渐进地来设计这个训练过程:

首先,你的模型必须要有充足的知识储备,以应对你可能提出的任何问题

其次,你的模型需要明白“你在提出问题”或者“你在下达指令”这个动作,它在理解这一点的基础上,尝试按照你的指令给出相应的回答

最后,你希望模型不仅能对你的问题给出答案,还需要给出令你满意的回答,也就是你希望模型对齐你的偏好。

我们以chatGPT的训练为例,看看它是如何贴合这个训练步骤的:

  • 首先,它使用大量的数据(文本、代码、数学等),先训练出一个base模型。这个训练过程赋予模型对文本上下文的理解能力和通用的知识,你也可以理解成它训练出了一个能做好词语接龙的base模型
  • 然后,我们在这个base模型上做微调,使得模型能够听懂人类的指令,这个过程得到的模型我们称为
  • 最后,我们采用rlhf的方式(奖励模型 + ppo),使得模型不仅能够听懂人类指令,还能产出符合人类偏好的回答。

(关于chatGPT原理和rlhf原理的部分,可以参考这篇和这篇文章)。

现在,我们把焦点放在第三步上:如何训练模型对齐人类的偏好。在以chatGPT为代表的训练方法中:

  • 训练奖励模型(Reward Model, RM):
  • 首先,我们需要有一个【标准】,这个标准在告诉待训练的模型,什么回答才是人类喜欢的。这个标准就是奖励模型,它将对各个回答进行打分。
  • 然后,在训练奖励模型时,我们可以采用【偏好排序】来标注数据集。即对于一个prompt,我们可以产出若干个回答。然后让人工对这若干个回答进行偏好排序,我们就用这些数据来训练模型
  • 训练对齐模型:
  • 在这篇文章中,我们称经过偏好对齐训练后的模型为【对齐模型】,这个模型也是我们训练的最终目的

  • 设计对齐模型的优化目标:这个优化目标不仅考虑到奖励模型的得分,也尽量让对齐模型参数更新后输出的分布不要偏移太远,防止模型越训越差。

  • 使用强化学习的方法,采用PPO手段来训练这个优化目标,因为用到了强化学习,所以这种方法又被称为rlhf-ppo。在这个过程中,我们让对齐模型根据prompt自生成回答,并采用训练好的奖励模型对回答进行打分,对齐模型会根据评分结果不断调整自己的输出分布。更多细节在上面提到的rlhf相关文章中,这里不赘述。

当你仔细端详【对齐人类偏好】这个训练步骤时,你可能会感觉有些疑惑:

  • 看起来,在训练奖励模型的过程中,我们就已经在考虑“什么回答是好的,什么回答是不好的”这个问题了。而对齐模型依然是在考虑这个问题。所以,我们能不能避开奖励模型的训练,直接一步到位训练对齐模型呢?
  • 在实际rlhf-ppo的训练中,存在【显存占据大】、【超参多】、【模型训练不稳定】等一系列问题。所以,在考虑“一步到位训练对齐模型”的过程中,我们是不是也能顺手做到绕过强化学习,采用一个更简单的方式(比如类似于sft)来使用偏好数据训练对齐模型呢?

基于这些考虑,DPO(Direct Preference Optimization)应运而生,正如它名字中Direct蕴含的含义一样,比起传统基于强化学习PPO的方式,它改进了以下两点:

  • 不再训练奖励模型,直接使用人类标注的偏好数据,一步到位训练对齐模型。
  • 不再使用强化学习的方法,通过数学推理,将原始的偏好对齐目标步步简化,最后通过类似于sft的方式,用更简单的步骤训练出对齐模型。

我们借用DPO论文中的配图,来直观比较RLHF-PPO和DPO之间的差异:

51c视觉~合集27_视觉_56

这篇文章将从数学原理上详细解释,DPO是如何从最原始的偏好对齐优化目标开始,一步步做简化的(不涉及实操代码,这个后续有时间再单开一篇文章)。本文从更符合大家逻辑思考顺序的角度,重构了DPO的推导过程,并对每一步推导过程都给出了详细的注解,希望能帮大家解决一些数学上的困惑,也更好理解DPO。

二、偏好对齐模型的优化目标

51c视觉~合集27_视觉_57

不管你是ppo还是dpo,在偏好对齐这一步中,总的优化目标是不变的,如上式所示,其中:

  •  : 是我们正在训练的、目的是为了对齐人类偏好的模型
  •  : 是训练好的奖励模型
  •  :参考模型, 一般是sft步骤的模型初始化而来

下面开始循序渐进解释dpo loss函数是如何从这个总体优化目标中推导而出的,大家在这个过程中依然牢记两件事:

  • 绕过奖励模型
  • 最大可能简化优化目标
三、步骤1:从优化目标中求解最优对齐模型

3.1 推导细节

51c视觉~合集27_视觉_58

式(11)依然是总优化目标,符号稍作了改写。现在我们要找到能最大化这个优化目标的对齐模型。现在我们开始对它进行改进:

51c视觉~合集27_视觉_59

第1行~第2行:

所以可以从第1行改写成第2行。

第2行~第3行:

除以,并取反(因此max改成min)

第3行~第4行:

  • 首先,人为定义一个partition function:

  •  表示在给定某个 prompt  的前提下, ref模型可能生成的所有 y , 因此我们有
  • 由  的定义我们知道,它是关于  的函数,且它和我们准备优化的模型  没有关系。

我们把带入第3行,就可以得到第4行的结果。

观察式(12)中括号里的左半部分,我们发现它非常像一个KL散度的形式(即衡量了两个分布之间的相似性),鉴于分子已经是个显式的分布表示了,我们干脆把分母也写成一个显示的分布表示,我们定义一个分布:

好,现在再把这个人为定义的分布表达带回到式(12)中,我们得到:

51c视觉~合集27_视觉_60

观察式(14),前面我们说过  和我们准备优化的模型  没有关系,所以可以把它忽略掉。那么现在我们只用关心KL散度这一项。我们知道KL散度在两个分布完全相等时达到最小,由此我们可以写出模型的显式解:

51c视觉~合集27_视觉_61

我们对式(15)再做一个简单的改写:因为以上推导都是在假设我们有一个固定的奖励函数的基础上进行的,所以我们可以加一个下标来强调这一点,则式(15)可进一步被改写成:

51c视觉~合集27_视觉_62

可是, 在正常的对齐训练中, 这个奖励函数  可不是任意的, 它是我们先用数据训练出来的最优奖励模型,然后在这个最优奖励模型的基础上,我们再通过训练去找到最优对齐模型  。 最优的奖励模型  和基于它训练出的最优的对齐模型  依然满足式 (4) 的关系, 我们分别设它们为 , 则有:

后面这些推导步骤没有什么难度,无非是做了些公式和符号上的变化。

3.2 步骤1总结

到此为止,经过了长长的推导,你可能已经有点懵了,没关系,我们总结一下步骤1中我们做的事情:

  • 首先,我们有一个对齐人类偏好阶段的总优化目标函数,它是在假设我们已经有一个奖励函数的基础上设计的,我们的目标是找到能使这个目标值最大化的对齐模型:

51c视觉~合集27_视觉_63

  • 然后,我们从这个目标函数出发,找到的显式解(也就是在任意固定的奖励函数r的基础上最优的):

其中,  是人为定义的partition function, 它形式为

  • 最后,由于在实际训练中,我们肯定是在最优的奖励函数上去训练最优的对齐模型,所以我们对上式的符号稍加更改,令星号代表最优,则有:

四、步骤2:跳过奖励模型

虽然我们现在得到了对齐模型  的显式解  ,但是我们却很难直接利用起这个显式解形式,原因如下:

  •  的值很难估计。根据  的形式可知, 想要估计它, 需要对一个prompt x采样足够多的回答 y 。这个代价是十分昂贵的。
  • 同时回顾最开始我们的目标:省略训练奖励模型这个步骤,一步到位来训练对齐模型。而目前我们得到的  的显式解仍然需要一个确定的奖励函数 , 没有达到我们的目标。

所以现在我们继续来迭代。基于上述第 2 个原因,我们可以先从  的显式解中推出奖励函数  的形式:

51c视觉~合集27_视觉_64

好, 现在既然我们能用最优对齐模型  表示出最优奖励模型  了, 那么我们直接把  代入到奖励模型的训练优化目标中去, 不就意味着我可以明面上训练奖励模型, 实际上却一步到位训练出了对齐模型吗? 

现在,问题回到“奖励模型的训练上”来了。我们通常使用“偏好排序”这种数据标注方式来对奖励模型进行训练,一般有2种偏好排序方法:

  • 只生成2个回答,<prompt x, chosen y1, reject y2>,即对于一个prompt,我们只生成2个回答,让人工对这两个回答的偏好做排序,我们希望奖励模型对chosen回答的给分尽量高于对reject回答的给分。
  • 生成K个(K > 2)回答,<prompt x, y1, ..., yK>,假设人工标注后的偏好排序组合为(比如人工人为偏好从大到小应该为y2 > y3 > y1 >... > yK,则这个排列就为),那么我们希望奖励模型对这个排序的总得分要大于其余任何可能的偏好排序。

在某些框架(比如chatGPT)的训练中,当生成的回答>2个时,它会把回答拆成两两pair对,这样就可以和只生成2个回答时的目标函数做统一。但在更一般的场景中,对于>2个回答的场景,我们是把每一种可能的回答偏好排序当成一个整体数据进行处理的,然后希望真值排序的得分最高。DPO的推导是基于后者进行的,所以接下来,我们也对K=2和K>2这两种情况分别下DPO最终的目标函数形式推导进行详细说明。

4.1 BT模型:只生成2个回答

<prompt x, chosen y1, reject y2>,对于一个prompt,我们只生成两个答案,然后在这两个答案间进行偏好排序。那么在这种偏好标注数据下,我们该怎么设计奖励模型的训练目标呢?

首先,我们需要明确,我们到底希望一个好的奖励模型能做什么事?我们当然是希望“chosen y1打败reject y2的概率尽量大”。基于此,我们可以引入统计模型Bradley-Terry(BT模型) 进行建模,该模型在1952年被首次提出,用于分析成对数据间的相对优势或者偏好,被广泛应用于体育比赛分析、市场研究等场景。在该模型下,我们假设有一个成对数据,则“y1打败y2的概率”可以被表示成:

其中,  分别表示  的强度参数。

什么是强度参数呢? 假设我们现在想预测球队1在本场能打败球队2的概率,那么强度参数就可以是这两只球队过往的胜率。那么同理,如果现在y1和y2分别表示chosen和reject回答,那么强度参数就可以是奖励模型对这两个回答打出的分数,则根据BT模型,我们有:

我们希望y1打败y2的概率尽量大,也就是我们希望对于整个标注数据集,chosen打败reject的期望概率尽量大(其中,w=chosen,l=reject),所以奖励函数的总体优化目标可以设计成:

我们把P的具体形式代入这个函数,则有:

51c视觉~合集27_视觉_65

诶,你看,这最后一行公式你眼熟不?这不就是chatGPT中构造的奖励模型优化目标的最终形式么?在chatGPT的论文中,直接给出了这个优化目标,并做了直觉上的解读。而这里我们则更进一步:从最经典的BT模型开始,一步步推导出成对偏好数据下的奖励模型优化目标应该如何设计。

好,现在我们假设,最优奖励模型为,则我们将其带入上面的优化目标中,就有:

而同时,根据前文的推导,最优的奖励模型又可以用最优的对齐模型来显式表示,即:

我们把这个显式表示带入上面的优化目标中,则有:

到这里,你是否惊奇地发现:我们已经把训练奖励模型的目标函数转化成只和对齐模型相关了! 也就是说,我们可以一步到位,绕开训练奖励模型的过程,直接用标注好的【成对】偏好数据,以类似于sft的过程直接训练对齐模型了!因此我们对上述式子再稍加改动,我们设等待训练的对齐模型为,则有:

看,这就是【成对】偏好数据下DPO的优化目标。

总结一下,在这一节中:

  • 我们通过经典的BT模型,先一步步推导出【成对偏好数据】下训练奖励模型的优化目标
  • 然后,我们再使用前问推导出的奖励函数和对齐模型的关系,把奖励模型优化目标中和奖励函数相关的部分替换成对齐模型,构造出了【成对偏好数据】下的DPO优化目标,以此达到绕过奖励模型的偏好对齐训练。
4.2 PT模型:生成K(K>2)个回答

现在,如果我不想使用【成对偏好数据】,而是对于一个prompt,我标出K(K>2)个回答,然后对这些回答进行人工偏好排序,在这种方式下,我要怎么设计奖励模型优化目标呢?

类比于BT,我们同样有一个基于统计的PT模型(Plackett-Luce)可以对多数据的偏好进行排序,假设为人工标注出的真值排序,则我们当然希望能够打败其余任何一种可能的偏好排序,我们将“最优排序打败其余任何一种排序”的概率表示成:

其中,  表示人类标注的偏好序列  中的第  个数据, 序列  中的  个回答已经按照偏好从高到低进行排序

上面这个公式从直观上理解的话:

  • 对于真值  中的第一个回答 , 它是人工标注的偏好最高的数据, 我们当然希望它的得分在  中占大头
  • 对于真值  中的第一个回答 , 我们当然希望它的得分在  中占大头
  • 对于真值  中的第一个回答 , 我们当然希望它的得分在  中占大头
  • 以此类推, 则不难理解上述在PT模型下概率P的表达方式。

同样, 我们把最优奖励函数  代入上面的P中, 则有:

51c视觉~合集27_视觉_66

然后我们再用  去表示 , 则有 (这里我们可以把  省略掉, 因为正如前文所说, 它和对齐模型  没有关系) :

51c视觉~合集27_视觉_67

那么对于整个数据集来说,我们希望最优序列打败其余任何一个可能序列的期望概率尽量大,则多回答下DPO的目标函数可以写成:

51c视觉~合集27_视觉_68

五、(必看)DPO优化目标推导过程总结

我们把DPO的推导过程完整总结一次:

  • 首先, 我们有一个对齐人类偏好阶段的总优化目标函数, 它是在假设我们已经有一个奖励函数  的基础上设计的, 我们的目标是找到能使这个目标值最大化的对齐模型

51c视觉~合集27_视觉_69

  • 然后, 我们从这个目标函数出发, 找到  的显式解 (也就是在任意固定的奖励函数  的基础上最优的  ) :

其中,  是人为定义的partition function, 它形式为

  • 接着,由于在实际训练中,我们肯定是在最优的奖励函数上去训练最优的对齐模型pi,所以我们对上式的符号稍加更改,令星号代表最优:
  • 然后,由于我们的训练目标是尽量绕过奖励模型,直接使用偏好数据,通过类似sft的方式一步到位训练对齐模型,所以我们将上式先改写成如下形式。接下来,我们只需要关注如何构造奖励函数的训练目标,然后把这个式代入训练目标中,就可以一步到位训练对齐模型。
  • 在奖励模型的训练过程中,有2种数据标注的方式,分别是【成对回答偏好标注】和【多回答偏好标注】。
  • 成对回答偏好标注:在这类数据标注方式上,我们使用BT模型,先推导出奖励模型的优化目标,然后使用  替换掉优化目标中的 ,得到最终的dpo优化目标:
  • 多回答偏好标注:推导逻辑同上,但不同的是我们使用的是PT模型,最终得到的DPO优化目标为:

51c视觉~合集27_视觉_70