51c视觉~合集36
我自己的原文哦~ https://blog.51cto.com/whaosoft/12275223
#无监督盲超分算法MLMC
即插即用的解决方案
本文介绍了一种新的无监督盲超分辨率算法MLMC,该算法结合了元学习和马尔可夫链蒙特卡罗核估计,无需监督预训练或参数先验,即可实现卓越的核估计和图像恢复性能。
文章地址:https://ieeexplore.ieee.org/abstract/document/10533864
项目地址:https://github.com/XYLGroup/MLMC
1 导言
近年来,基于深度学习的方法在盲单图像超分辨率 (SISR) 任务中取得了巨大成功。然而,现有方法通常需要手工设计的先验和基于有监督学习的先验。基于模型方法通常存在着不适定性和盲 SISR 问题的非凸性,在优化过程中通常会陷局部模式。基于学习方法在实际应用中仍然受到对训练样本的高度数据依赖和模型训练的专用时间消耗的限制。
在本文中,我们提出了一种基于元学习和马尔可夫链蒙特卡罗核估计的 SISR 方法采用轻量级网络作为核生成器,并通过从随机高斯分布的 MCMC 模拟中学习进行优化。该过程为合理的模糊核提供了近似值,并在 SISR 优化过程中引入了网络级朗之万动力学,这有助于防止核估计出现不良局部最优解。同时,提出了一种基于元学习的交替优化程序来分别优化核生成器和图像恢复器。与传统的交替最小化策略相比,基于元学习的框架被用于学习自适应优化策略,该策略贪婪性较低,可实现更好的收敛性能。
所提方法首次在无监督推理中实现了基于学习的即插即用盲 SISR 解决方案。在合成和真实数据集上与最新技术相比,大量实验证明了所提出方法的卓越性能和泛化能力。
本文所提算法(MLMC)以及相关的对比方法baseline的代码都是开源的。该算法不仅对盲图像超分问题求解有效,对其他逆问题(例如其他图像恢复任务、雷达成像、医学影像等)有一定的通用性,我们自己也做了一些初步尝试。配好pytorch环境后即可轻松实现运行,有问题欢迎随时找我讨论交流。项目地址:https://github.com/XYLGroup/MLMC.
2 问题陈述
盲图像超分问题中的图像退化的数学表达式可以被写为:
其中为低分辨图像,为高分辨图像,为模糊核,为缩放倍数,为加性噪声。盲图像超分问题可以被写为如下最大后验(MAP)的形式:
其中为数据项,和为先验项。上述MAP问题也可以写出显式优化问题的形式:
其中和表示先验项。
通常我们采用基于投影交替最小化 (PAM)解决此类双变量优化问题。在本文中,我们设计了学习辅助优化建模,通过神经网络来辅助最优化问题的模型构建或优化求解过程,不改变原问题的基本数学映射关系和物理建模基础。对于上述多变量优化问题,可以引入两个神经网络分别作为核估计器和图像重建器将问题中对变量的优化问题转换为对网络参数的优化问题:
3 方法
3.1 总体框架
基本范式建立在 MCKA(蓝色)和 MLAO(黄色)阶段分别对核估计器的参数和图像恢复器的参数进行交替优化的基础上。MCKA和 MLAO之间的交替优化过程称为外循环。在每个外循环步骤中,分别有 MCKA内循环和MLAO内循环。在 MCKA内循环中,内核生成的参数根据随机高斯分布上的L次MCMC模拟进行迭代更新,以赋予随机内核先验。在 MLAO 内循环中,内核之间的交替估计和 HR图像恢复经过 Q次迭代处理,以确保在给定 LR 观测的基础上的估计精度。
3.2 马尔可夫链蒙特卡罗核估计
我们提出一种随机高斯分布的 MCMC采样以提供核先验,并在核生成器的参数上构建马尔可夫链,这些参数在 MCMC 过程中迭代更新,以近似盲 SISR 任务的模糊核。首先,我们应用具有参数的浅层FCN来生成模糊核,其通过将固定随机噪声作为输入,形式如下:
表示来自随机高斯分布的模糊核, 表示MCMC采样的随机核
随机生成的分布涵盖不同的核大小、中心和类别。其中表示当前参数状态给定的 HR 图像和 LR 图像的后验。积分运算可以被整个分布上充分采样的求和所取代,近似为:
可以表示第个采样核的权重。在本文中,上的马尔可夫链在一次蒙特卡洛模拟中通过核权重对所有采样核进行重新加权,可以表示为:
随机采样的核由加权,由 LR 图像重建项以及第l次迭代时采样核和近似核的 MSE组成。因此,我们认为随机采样的核被分布在最小化 LR 图像重建误差的核附近,新的采样将优先发生在最后采样核的附近。LR 图像重建误差促使随机采样的核实现后验分布,而 MSE 在核 PSNR 的急剧变化和获得的合理模糊核的稳定收敛之间取得平衡。
与经典 MCMC方法不同,该方法并非使用极大的采样数 T 在的整个范围内进行穷举采样,而是在一个 MCKA 阶段中仅随机采样少数实现。在马尔可夫链转换对采样核进行重新加权后,将获得的集成核应用于优化参数,该近似优化可表示为:
MCKA 过程用于解决盲 SISR 问题有两个主要贡献。一方面,MCMC 采样为模糊核估计提供了松散但合理的核先验,而不需要预训练和标记数据,实现了“即插即用”。另一方面,MCKA 过程会定期对参数的收敛带来随机扰动,这些参数会针对 MLAO 阶段中的 LR 图像重建误差损失进行交替优化,可以防止参数的优化由于内在的非凸性和不适定性而收敛到不良局部模式。
3.3 网络级朗之万动力学
为了提高基于梯度下降的变量更新优化算法的性能,我们提出了基于网络的朗之万动力学表达式:
其中第二项表示数据一致性更新项,第三项表示随机先验更新项。与经典的Langevin更新式的主要区别在于,我们这里利用的是随机样本而不是随机噪声。这样适配网络参数更新,不仅保留了原本的随机扰动,防止更新陷入局部最优,同时随机采样得到的模糊核同样也能提供合理的随机数据先验,保证了模糊核估计的性能。
3.4 基于元学习的交替优化策略
传统基于 AM 的方式在核估计和图像恢复两个子问题之间通过网络交替估计 HR 图像和模糊核。然而每个子问题的中间解通常包含显著的噪声,并且仅使用一阶信息对每个子问题进行最小化行为从全局收敛的角度来看不一定会产生良性解。因此,我们设计了一种基于元学习的交替优化策略,称为MLAO 过程,用于从观察到的 LR 图像中优化和。在第p次迭代中,LR 图像重建误差可以表示为:
我们不是最小化而穷举地优化每个子问题,而是将 P 次迭代中图像重建误差累积起来作为元学习损失,来更新参数Q次。
这种优化策略贪婪程度较低但适应性更强,通过全局学习优化策略在迭代过程中对部分重建误差轨迹的相互知识,穷尽地优化每个单独的子问题实现。模糊核估计的优化策略就被赋予了一种松弛,这允许在估计迭代期间在第 p 次子问题中对有非最优解,但从 P 次迭代的角度来看,它能够收敛到更好的最优解。
在每次迭代中,图像重建器通常易受图像噪声影响,从而导致过度拟合到不良的局部最优值。因此,我们设计了一种基于超拉普拉斯图像先验对图像重建子问题进行最优求解的方法来更新参数,首先为基础退化模型制定了一个独立同分加性高斯白噪声 (AWGN) 模型:
超拉普拉斯先验被用来约束估计的 HR 图像的 AWGN:
图像估计器的参数通过损失函数进行优化:
4 实验
4.1 实验设定
我们在各向异性高斯核上进行了大部分实验,在非高斯核上如运动核进行了少量实验。我们使用随机核合成LR图像,在基于四个流行的公共基准数据集的测试数据上进行实验,包括Set5、Set14、BSD100、Urban100和真实世界数据集RealSRSet,对比了无监督方法PAM、DIP、KernelGAN+ZSSR、Double-DIP、FKP-DIP和 BSRDM,以及基于深度学习的方法(模型在 LR-HR 配对数据集上进行了预训练):RCAN、DASR、BSRGAN、KDSR、KULNet、UDKE、KXNet,还使用基于 MANet 的核估计的非盲模型 USRNet和我们的 MLMC作为两种基于深度学习的方法MANet+USRNet 和 MLMC+USRNet进行对比。
4.2 性能分析
所提出的 MLMC 方法在性能指标和可视化效果都取得了相较于其它无监督方法展现出更优异的性能,在核估计结果方面明显优无监督方法 BSRDM,BSRDM 通过对高斯分布的显式建模遵循基于梯度的核估计,而 MLMC 通过网络级朗之万动态以从随机核先验中学习以获得更好的收敛性能。同时,MLMC 超越了大多数基于深度学习的监督方法,其性能与 KULNet 相当,仅次于 MANet+USRNe,当无监督 MLMC 与预训练图像估计器 USRNet 一起使用时,所提出的 MLMC+USRnet 能够实现比有监督 MANet+USRNet 略好的性能。在可视化效果上,MLMC 获得了最简洁的模糊核以及恢复的 HR 图像,几乎与原图像保持一致,而 FKP-DIP 和 BSRDM 在估计的核上表现出不同程度的失真,Double-DIP 无法估计合理的模糊核。尤其对于真实图像测试结果表明,除 MLMC 之外的所有方法都估计出一个类似高斯的模糊核,而 MLMC 倾向于找到一种非高斯模式,从替代蒙特卡洛模拟中学习到了一种自适应和灵活的核估计原理,因此更适合真实世界的应用。
我们将这些方使用不同的核先验如分布外的核和运动核进行测试,以进一步评估所提出的 MLMC 方法的泛化能力,MLMC 的表现明显优于Double-DIP、BSRDM 和 FKP-DIP。由于高度依赖预先训练的核先验,这些方法都存在问题,而 MLMC 仍然表现出优异的性能。即使没有特定的核先验,MLMC 对任意核都具有出色的泛化能力,并且对未见过的核和非高斯核也表现出优异的鲁棒性。同时,MLMC可以直接用于解决运动核任务,而无需重新训练验证了MLMC 对复杂的退化核具有更好的泛化能力。
我们在模糊和下采样后将图像噪声添加到 LR 图像中,MLMC 在所有情况下都表现出优异的恢复性能,并且对不同程度的图像噪声表现出良好的鲁棒性。此外,我们通过三个消融实验验证了引入的蒙特卡罗采样核估计和元学习 SISR 阶段的有效性。图展示了现实世界图像上的消融可视化,与 MLMC 相比,没有蒙特卡罗采样的估计核的 PSNR 下降较多,并且图像失真明显。同时,没有元学习方案会导致优化过程中出现明显的可见偏差,估计的核很容易收敛到局部最优,导致核估计和图像恢复性能不佳。
在模型大小(参数数量)、运行时间和预训练要求方面,MLMC具有与其他方法相似的模型大小,并且具有有竞争力的运行时间。所有模拟过程均由 GeForce RTX 3090 GPU 加速,输入 LR 图像的大小为 256×256,比例因子 s = 2、3、4。MLMC用于生成 1024 × 10 24 大小的 HR 图像的 GPU 大约需要 11GB 内存,接近 Double-DIP(11.2GB)和 DIP-FKP(10.6GB)。这种即插即用的方式和对未知退化的更好灵活性在处理具有真实场景的盲 SR 任务方面具有显著的优势,尤其是那些面对训练数据质量低和复杂模糊的场景,例如太空高速目标(例如卫星、飞机)和医学图像(例如跳动的心脏)。
5 总结
在本文中,我们提出了一种新的基于学习的盲 SISR 方法,该方法结合了马尔可夫链蒙特卡罗模拟和元学习训练以实现卓越的核估计,值得注意的是所提出的方法不需要任何监督预训练或参数先验。我们主要有以下创新点:
- 提出了一种基于网络的退化模型的通用统计框架,以阐述基于网络的 SISR 问题方法。在此基础上,建立了一个基于随机高斯分布的 MCMC 模拟模型,并考虑了 LR 图像重建误差,以阐述新的核估计阶段。
- 与常用的预训练或手动设计的核先验不同,随机核学习方案取代了普通核先验,实现了基于学习但即插即用的核先验生成范式,并有助于实现通用的网络级朗之万动力学优化以改善收敛。
- 构建了一种基于元学习的自适应策略来解决盲 SISR 问题。它学习以不太贪婪的优化策略优化非凸和不适定的盲 SISR 问题,从而确保在仅依赖于观察到的 LR 图像时更好地收敛到地面实况。
在未来的工作中,我们将研究MLMC 方法的两个主要应用方向,包括:
- 扩展到更多退化模型,例如压缩伪影、去雨和阴影去除,以提高泛化能力。
- 应用更先进的预训练 SR 模型,例如 USRNet 和 Diffusion 模型,发挥核先验学习模块的作用,以提高性能。
MLMC 是一个基于学习但即插即用的 SISR 方法,可以直接应用于常见的核估计任务,包括各向同性和各向异性的高斯、非高斯和运动核,与最先进的方法相比,具有具有竞争力的参数数量、运行时间和内存使用量,以及对噪声的鲁棒性。这种从随机性中学习以提供先验和基于元学习的非凸优化算法,将引领解决盲图像恢复任务的新方向,以有限的计算复杂度实现卓越的性能。
#IterComp
“左脚踩右脚”提升文生图模型综合能力!清北牛津普林斯顿联合发布 IterComp
本文分享论文IterComp: Iterative Composition-Aware Feedback Learning from Model Gallery for Text-to-Image Generation,清北牛津普林斯顿联合发布 IterComp,提升文生图模型综合能力!
论文地址:https://arxiv.org/abs/2410.07171
代码地址:https://github.com/YangLing0818/IterComp
模型地址:https://huggingface.co/comin/IterComp
Civitai:https://civitai.com/models/840857
自2022年以来,基于diffusion的文生图模型取得了快速的发展,尤其在复杂组合生成(complex/compositional generation)任务上取得了显著进展。
例如,今年8月发布的FLUX展现出了十分震撼的复杂场景生成能力与美学质量;RPG通过MLLM的辅助,将复杂的组合生成任务分解为简单子任务;InstanceDiffusion通过布局控制(layout-based),实现了与布局分布高度一致的精确图像生成。
在组合生成中不同模型展现出不同的优势(composition-aware model preference)
然而,我们发现这些模型的优势仅限于某些特定的组合生成任务,且存在诸多局限。基于文本(text-based)的生成方法(如SDXL、SD3、FLUX等)由于其训练数据和框架的优势,在物体与场景的模拟上表现出色,特别在美学质量、属性绑定和非空间关系(non-spatial relationships)方面表现出色。然而,当涉及多个物体,且存在复杂的空间关系时,这类模型往往表现出明显的不足。
基于大语言模型(LLM-based)的生成方法,如Omost和RPG,通常需要对LLM进行额外训练或设计复杂的提示提示。然而,对于LLM处理后的复杂指令,diffusion backbone并不具备复杂指令下精确生成的能力。基于布局(layout-based)的生成方法,如Instancediffusion和LMD+,虽然提供了精确的控制,但在图像的美学质量和真实性上存在明显下降,并且需要人为设计布局。
因此,一个值得深入探讨的问题是:我们能否设计出一个强大的模型,在上述多个方面都表现出色,同时不引入额外的复杂指令或增加计算开销?
基于此,我们提出一个全新的文生图框架:IterComp。
要充分解决这一问题,我们面临两大难点:
1.如何提取不同模型在各自领域的优势,并引导模型进行有效学习?
针对该问题,我们首先构建了模型库(model gallery),其包含多种在不同方面表现出色的模型,每个模型都具备特定的组合生成偏好(composition-aware model preference)。我们尝试通过扩散模型对齐方法,将base diffusion model与模型库中的组合生成偏好进行对齐。
我们聚焦于compositional generation的三个关键方面:属性绑定(attribute binding)、空间关系(spatial relationship)和非空间关系(non-spatial relationship)。为此,我们收集了不同模型在这些方面的偏好数据,并通过人工排序,构建了一个面向组合生成的模型偏好数据集(composition-aware model preference dataset)。
针对这三个方面,我们分别训练三个composition-aware reward models,并对base模型进行多奖励反馈优化。
2.组合生成任务很难优化,如何更充分地学习到不同模型的组合偏好?
我们在diffusion领域创新地引入迭代式学习框架(iterative feedback learning),实现reward models与base diffusion model之间“左脚踩右脚登天”。
具体地,在上述第一轮优化后,我们将optimized base diffusion model以及额外选择的其他模型(例如Omost等)添加进model gallery。对新增模型进行偏好采样,与初始model gallery中的图像按照预训练的reward model构建图像对。这些图像对被用于进一步优化奖励模型,随后继续用更新的奖励模型优化基础扩散模型。具体的流程如下伪代码所示:
实验结果
与其他三类compositional generation方法相比,IterComp取得了显著的组合质量的提升,并且不会引入额外的计算量。
从定量结果中可以看出,IterComp在T2I-CompBench上取得了各方面的领先,另外,针对图像真实性以及美学质量,IterComp也表现出色
然而IterComp的应用潜力并非如此,其可以作为强大的backbone显著提升Omost, RPG等模型的生成能力。
本文还有很多技术细节,后续会再更新此帖,也欢迎大家关注项目地址:https://github.com/YangLing0818/IterComp
#Tora
阿里轨迹控制版视频生成 Tora 开源发布
阿里团队近期在 GitHub 上正式开源了轨迹控制版的视频生成工具—— Tora。这一开源项目为学术界和开源社区提供了强大的工具,允许用户探索视频生成领域的无限可能。
Tora 基于先进的 DiT 框架,专注于轨迹控制的视频生成。在此次发布中,阿里团队提供了完整的代码与模型权重,供研究人员和开发者在学术环境中使用。
根据 GitHub 仓库中的 README 文件,由于阿里团队目前的商用计划,当前开放的版本仅为文生视频版本。
未来,团队还计划提供 ModelScope 的试用 demo、训练代码及完整版 Tora,让更多用户受益于其强大的功能。
Tora 的文生视频功能通过 Gradio 可视化界面展现,用户的操作过程极为简单。只需绘制任意数量的轨迹,并输入一段文本提示(prompt),便可生成为期 6 秒的轨迹控制视频。
用户可以选择使用提供的预设轨迹,或者自定义绘制轨迹,以实现更具个性化的效果。
demo展示:06
从此次 github 仓库的 demo 中看,Tora 无论在处理直线轨迹还是螺旋曲线方面都表现出色。尤其令人印象深刻的是,当输入的文本提示中的物体未能与预设轨迹精确匹配时,Tora 仍能尽力保持物体的自然运动规律,确保其运动尽可能符合预设轨迹。这种趋于自然的效果使得生成的视频更具观看价值,极大地提升了用户体验。
如果您对这项技术感兴趣,欢迎访问其(https://github.com/alibaba/Tora)进行探索与尝试。
#POINTS
解锁视觉语言模型新高度!微信提出多模态大模型 POINTS: 简单高效又不失性能
微信团队开发的多模态大模型POINTS,该模型通过创建强大的基线、预训练数据集过滤策略和模型融合(model soup)方法,有效地提升了视觉语言模型的性能,同时保持了简单和高效。
论文地址:https://arxiv.org/pdf/2409.04828
论文源码:https://github.com/WePOINTS/WePOINTS
项目主页:https://huggingface.co/papers/2409.04828
导读
2022年11月30日,OpenAI推出了ChatGPT,最初仅是在业界的小范围内引起了关注。几个月后,GPT-4.0的发布彻底点燃了整个行业并从此进入了普罗大众的视野。经过一年的发展,大家逐渐意识到单纯的LLM已无法满足需求,开~发~板~商~城~物联网设备,这一点从各大厂商和顶尖科研机构发布的成果中可以看出,人工智能正朝着VLM的方向发展。
今年,各路大神纷纷亮出自家的视觉语言模型,仿佛一场科技界的选美大赛。首当其冲的便是著名的闭源明星选手如 GPT-4、Gemini Pro 1.5和Claude 3 等模型,其成功将 LLM 扩展到视觉语言模型领域。而 LLaVA、QwenVL、InternVL 等开源届的代表新秀也不甘示弱,各方面能力也在不断赶超、逼近甚至部分超越闭源模型。
然而,这场视觉AI的狂欢也面临着几个棘手的问题:
"闭门造车"之谜: 许多模型像谍战片里的特工,行踪神秘,训练细节讳莫如深。相比之下,开源模型倒是敞开了大门,但其训练策略仍有许多未解之谜。
"数据饥渴症": 目前的模型都患上了"数据饥渴症",对训练数据的需求似乎永无止境。研究人员们绞尽脑汁,不断寻找新的数据来源,甚至动用合成数据的魔法,就是希望有朝一日能喂饱这些贪婪的AI。
"微调大作战": 在微调阶段,研究者们如同调酒师,不断尝试各种数据配方,期望调制出最佳性能的AI鸡尾酒。
面对这些挑战,微信团队摩拳擦掌,提出了自己的三板斧:
- "超级基线": 俗话说,基础不牢,地动山摇。首先,研究人员打造了一个实力超群的baseline模型,为接下来的研究奠定了坚实基础。
- "数据魔法": 其次,借鉴了LLM中的ppl技巧,开发出了一套高明的数据筛选方法,最终炼就了100万条精华数据。
- "模型大乱炖": 最后,在微调阶段,作者们将各种数据大杂烩煮在一起,结果发现这种"大乱炖"方法居然能让模型性能更上一层楼!
总之,本文的实验结果令人振奋,证明了这套方法确实能够显著提升模型性能。让我们一起往下学习吧!
强大的基线
我们首先将现在开源工作中的各种技术(动态高分辨率,CapFusion,双视觉编码器,Individual Select)进行了整合,并提出一种新的动态分辨率分割方法,以搭建一个更加稳健和高效的 baseline。
上图是POINTS的模型结构。对于每个模块(例如 OCR ViT、General ViT、MLP Projector 和 Large Language Model),虚线左侧标签表示预训练时的状态,右侧标签表示指令调优时的状态。
保持固定纵横比的高分辨率动态显示
众所周知,将高分辨率图像提供给视觉语言模型有利于捕捉细粒度细节和减少幻觉。与 LLaVA-Next 和 InternVL-1.5 中的动态高分辨率不同的是,我们在对高分辨率图像进行切分时保持了图块的纵横比。在InternVL-1.5 中,在分割图像之前,图像大小会被调整为预定义分辨率中与其最接近的目标分辨率,这种切图方式容易导致失真。而我们通过在切图时引入 overlap 的方式在把图像切割为固定大小图块的同时,保持了图块纵横比。
如上示意图所示,CATTIY 的具体步骤如下:
i) 首先,预定义图像可以分割成的最大图块数(在我们的实验中设置为8)。
ii) 列出图块数不超过最大图块数的所有整数分辨率组合。
iii) 给定一个高度为H和宽度为W的图像,我们寻找与分辨率最近的整数分辨率,乘以编码器的图像尺寸,得到目标图像的高度Hr和宽度Wr,并通过以下公式将图像大小调整为目标大小Ht × Wt:
给定视觉编码器的输入分辨率 , 目标图像应分为 图块。接下来, 我们使用一个滑动窗口分割目标图像 , 该窗口的步幅分别为 Height 和 width。步幅 的计算方式如下: (若 , 则 为0, 若 为0)
除了使用 CATTY 分割的图块,我们还加入了整体图像的缩略图来捕获整体上下文信息。在将视觉编码器输出的特征对齐并传入到大型语言模型之前,我们 InternLM-XComposer2-4KHD 中的 pixel-shuffile,设置下采样因子为 0.25,减少图像特征的序列长度以提高效率。
CapFusion
预训练数据集中原始 caption 通常存在很多噪声和结缺陷。为了解决这个问题,LAION-COCO 和 BLIP-LAION 等提出了通过 image captioning model 生成 synthetic caption。然而,合成字幕中较为简单的句法和语义结构可能会导致缺失可扩展性和缺乏世界知识。
针对这个现象,CapFusion 利用大语言模型整合原始 caption 和 synthetic caption,在丰富的世界知识和结构化且语法简单之间取得了较好的平衡。我们使用 InternLM-XComposer2 为图像生成合成描述,使用 InternLM2 来整合原始 caption 和 synthetic caption。
多视觉编码器
相关工作如 SPHINX 和 Cambrian1,已经证明不同的视觉编码器会在不同的领域表现优势,结合多个视觉编码器可以在性能上有更大的提升。文本密集型图像所需的视觉编码能力在一定程度上有别于自然图像。为了增强光学字符识别(OCR)能力,我们训练了一个单独的视觉编码 OCR ViT,遵循 Vary 的方法从图像中提取文本特征。
与其不同的是,作者没有从零构建图文对的训练样本(如图表),我们使用PaddleOCR提取的文本结果构建数据集,并在数据集中加入描述自然图像的caption组成完整的预训练数据集。我们将完成训练的 OCR ViT 与通用视觉编码器(通用 ViT)用过加权平均值合并,然后将输入到大型语言模型中。
笔者认为,这种构建多视觉编码器方法显得有些复杂化了。从直觉上来看,结合多个视觉编码器而得到的性能提升更多的可能仅是"参数量"的额外增益。个人更倾向于"大道至简"的原则,即在单一架构中融合不同类型图像的处理能力,而不是增加模型的复杂度。因为,简洁往往能带来更优雅、更有效的解决方案。
个性化选择
Individual Select 通过贪心选择的方式从一个数据池中确定最有效的指令调优数据集。我们收集了其中所提到的开源数据集,并整合了DeepSeekVL、Cambrian-1 和 Cauldron 使用的数据以及额外的16个数据集。此外,鉴于学术数据集的提示风格趋于同质,为了增强提示的多样性,我们从 LAION-5B 中随机选取了一些图像使用 GPT-4o 生成了一系列问答对。最终我们得到了可视化指令调优数据集 Base Set。
预训练数据筛选策略
perplexity(PPL) 常在大语言模型中被用作评估预训练数据集质量的指标。受其启发, 我们利用已被训练过的视觉语言模型 P来进一步过滤CapFusion获得的预训练数据集中的低质量部分。对于预训练数据集中的每个数据样本 , 我们使用以下公式计算所有文本的PPL( 表示 中的文本序列) :
我们对所有样本进行排序,并选择前20%用于预训练。与大型语言模型中的筛选结果不同,对于PPL前20%和后20%的样本,我们发现两者的区别并不反映在数据的质量。PPL后20%的物品通常包含噪声混淆造成的世界知识,例如游戏版本和计算机动画中的片序列等,这些世界知识不仅罕见,且信息量非零,因此对模型的学习不太有益。
Model Soup
视觉指令调优数据对于现有视觉语言模型的卓越性能至关重要。但现有工作大多通过迭代消融来选择更有效的数据集,这种方法很快会达到一个瓶颈期,后续的数据选择带来的提升就会减小,甚至会降低性能。要改善选择逻辑遇到瓶颈后,我们使用 model soup 整合使用不同特性调优数据集进行微调的模型优参。model soup 的原理是通过使用不用的模型参数(学习率、数据增强、初始化等)来调优模型。对模型进行调优后,这些模型的优参被保留,所有选择模型的权重进行组合,以得到更强的模型。
为了将 model soup 的思路应用在数据集的优选组合上,我们在性能的基准 base set 上额外加入一个 Individual Select 的数据集来提高性能的基准集;优选数据 base set 上的模型假设回收到了不同局部最优值,再将这些模型双重组合得到新的模型集。我们提出了 Maximum Soup、Average Soup 和 Greedy Soup 三种方法来缩减模型的最佳组合。
Maximum Soup
给定评估函数 Acc,我们使用以下公式获得一个更强模型:
Average Soup
通过取所有微调模型的权重平均值,我们可以获得更强的模型:
Greedy Soup
首先根据评估分数对微调后的模型进行降序排序。接着遍历排序后的模型。对于每个模型,我们计算其权重与模型池中当前所有模型的权重的平均值。如果评估分数提高,则模型将添加到池中。最后,我们对池中所有模型的权重进行平均,以获得更强的模型。下表概述了 Greedy Soup 的步骤。
实验
我们使用 OpenCompass中 的 8 个基准,从不同角度均衡地对模型进行评估。这些指标包括:MMBench 和 MMStar:用于评估通用能力;MMMU:用于测试STEM(科学(Science)、技术(Technology)、工程(Engineering)和数学(Mathematics))能力;MathVista:用于数学相关能力;AI2D:用于图表相关能力;OCRBench:用于OCR功能;MMVet:用于主观评估。我们使用 OpenCompass 提供的 VLMEvalKit 进行标准化评估,在 MMBench 上选择 dev-en split.
数据配置
在预训练阶段,训练 OCR VIT 时,我们没有额外抓取PDF文件并转换为图像格式数据集。为了提高多字符背景下的 OCR 能力,我们从 LAION-5B-en、LAION-5B-cn、WuKong 和 Zero 中随机选择了 2000 万个数据样本。使用 PaddleOCR 从图像中提取文本,替换原始 caption 以形成新的数据集对。此外我们加入 LAION-5B 的 1000 万个原始数据样本,构成最终数据集进行训练。
在指令微调阶段,基于 Deepseek-VL 中确定的数据,我们继续使用 Individual Select 的方式在其他开源数据工作中进行了选择,确定为基础数据集。对于未能通过 Individual Select 得到增益的其余数据集,我们将其组成数据池,以至通过 model soup 的方式加以选择和利用。
训练配置
在 OCR VIT 的预训练阶段,我们使用 LLaVA 架构,视觉编码器从 OpenAI 的 CLIP-VIT-Large-336 初始化,大型语言模型是从 VIT-1.5-9B-Chat 初始化。设置大型语言模型为低秩,视觉编码器和MLP是可训练的。视觉编码器和MLP的学习率分别设置为 2×10⁻⁴ 和 2×10⁻⁵,学习率的schedule在训练过程的前3%采用预热(warm up),剩余步骤采用余弦衰减。
在整体视觉语言模型的预训练阶段,遵照 VIT 从 OpenAI 的 CLIP-VIT-Large-336 初始化的,OCR VIT 则是我们个阶段的位置,参考 Vary 的设置,我们通用 VIT 只有最后三层是可训练的,OCR VIT 则在整个阶段保持冻结状态。我们选择通用 VIT 和 OCR VIT 仅最后三层特征通过 MLP 与大型语言模型连接。起到特征对齐作用的 MLP,在预训练阶段保持训练状态,遵照 VIT 和 MLP 的学习率分别设置为 2 × 10⁻⁴ 和 2 × 10⁻⁵,学习率的schedule在训练过程的前 3% 采用预热(warm up),剩余步骤采用余弦衰减。
在指令微调阶段,我们冻结遵照 VIT 和 OCR VIT,MLP 和大预言模型保持可训练状态。学习率设置为 2 × 10⁻⁵,学习率的 schedule 在训练过程的前 3% 采用预热(warm up),剩余步骤采用余弦衰减。
与目前先进的方法对比
除了 OpenCompass 的8个基准外,我们增加了ScienceQA、MME、LLaVA-Wild 和 ReadWorldQA 更详细地与目前领域内最先进的模型进行比较。POINTS的性能可与现有类似尺寸的模型媲美,甚至超越更大参数量的模型性能,如 Cambrian-34B。此外,与其他模型相比,POINTS 使用的预训练数据集和指令调优数据集更少且是公开可用的,我们下面将从各角度对 POINTS 进行了彻底的分析,充分论证每种策略的有效性。这意味着后续开源工作能够更简单直接地使用本文提出的方法。
Strong Baseline 的消融实验
CF:CapFusion,DHR:动态高分辨率,CATTY:我们提出的一致纵横比动态高分辨率,DEV:双视编码器,IS:Individual Select。MMB:MMBench、MV:MathVista、HB:HallusionBench、OCR:OCRBench、Overall:前 8 个基准的平均值。
每个组件都有助于稳步改进。这些增强功能非常重要,例如:
- 在引入动态高分辨率来分割输入图像后,我们观察到 OCR 相关任务(如 OCRBench)有了实质性的改进,性能从 56.9% 对 60.3%。
- 此外,使用具有动态高分辨率的高分辨率图像有助于减少幻觉,这主要是由于高分辨率图像中的细节增加。
- 用 CATTY 替换原来的动态高分辨率会导致各种基准测试的显着改进,OCR 相关基准测试的收益比其他基准测试更大。这可能是因为图像失真对图像中的文本有更明显的负面影响。
- 与一般的视觉特征提取相比,CLIP-ViT 从图像中提取文本特征的能力是有限的,因为它是在大量的通用图像-文本对上训练的。
- 因此,在集成了来自附加 ViT 的特征后,我们观察到 OCRBench 有了实质性的改进,并在文本丰富的图像上进行了后训练。
在这 5 种策略中,通过 Individual Select 整合更多的可视化指令调整数据集会产生最显着的改进。这一观察结果与现有工作一致,强调了在视觉指令调整阶段选择有效数据集的重要性。
通过PPL筛选预训练数据的实验(左),Dual Vision Encoder 的实验(中),model soup 融合指令调优数据的实验(右)
(左)前两行比较了预训练阶段不同数据量的使用情况。第三行表示第一行中5M数据集按PPL筛选了升序排序的前20%子集。将预训练数据大小从 5M 扩展到 20M 反而会导致性能下降,我们认为可能的原因是:
- 现有大多数视觉语言模型的视觉编码器都是从基于大量图像-文本对进行预训练的视觉模型初始化的。而我们的视觉语言模型,在预训练阶段使用的大部分数据很可能已经被视觉编码器训练过,导致在扩大预训练数据集的大小时,只会带来有限甚至负向的影响。
- 现有的大规模网络爬虫数据集,例如 LAION-5B 和 COYO-700M,数据分布非常同质。我们提取图像的主要实体后绘制密度图后,发现这是一种长尾分布,因此,不加选择地增加数据量进行预训练只能带来有限的提升。而我们仅使用 1M 数据对模型进行预训练,这些数据是 5M 数据的按照 PPL 升序排序后的前 20%。这表明,在过渡过程中,过度地将模型暴露在晦涩和稀缺的知识中,不利于其学习。
(中)DVE:Dual Vision Encoder 架构。SVE:Single Vision Encoder 架构。
(右)lr:在不同学习率微调的模型上使用Model Soup。ds:使用不同数据集微调的模型上使用Model Soup。
添加更多的指令调优数据集通常会达到一个瓶颈。然而,通过整合不同数据集训练得到的模型汤,我们观察到了实质性的改进,总分从 59.0 提高到 61.2。我们对各种 Model Soup 策略进行了比较。其中,greedy soup 的表现最好,分别比 maximum soup 和 average soup 高出 0.8 和 0.6 个百分点。此外,我们还对比了使用不同超参数(例如不同的学习率)进行模型汤的结果,其只能带来有限提升。
model soup 与 Individual Select 的对比实验
这幅图展示了在相同基础数据集基础上,使用 Individual Select 和 Model Soup 加入单个数据集的性能差距。表明当通过 Individual Select 的方式选择并添加额外的指令调整数据集无益时,使用 Model Soup 的融合方式可以显著提高性能。
总结
POINTS 是微信团队开发的先进视觉语言模型,融合了多项创新技术。它采用保持纵横比的高分辨率动态显示(CATTY)、CapFusion 技术整合图像描述、双视觉编码器架构,并引入了基于 perplexity 的预训练数据筛选策略。POINTS 还利用 Individual Select 方法选择指令调优数据,并创新性地应用 Model Soup 技术来融合不同数据集训练的模型。这些方法的结合使 POINTS 在多个基准测试中表现卓越,甚至超越了一些参数量更大的模型,为视觉语言模型领域的发展提供了新的思路和方法。
#Co-GNNs
牛津提出合作图神经网络Co-GNNs,更灵活的消息传递新范式
本文提出了一种训练图神经网络的新框架“合作图神经网络”(Co-GNNs), 其中每一个节点可以被看作一个独立的玩家,可以在消息传递之前基于当前特征计算出一个动作分布,然后根据分布采样选择该节点在本层的动作。
01 摘要
本文提出了一种训练图神经网络的新框架“合作图神经网络”(Co-GNNs), 其中每一个节点可以被看作一个独立的玩家,可以在消息传递之前基于当前特征计算出一个动作分布,然后根据分布采样选择该节点在本层的动作。
可选择的动作分为以下几种:倾听”、“广播”、“倾听和广播(又称标准)”或“隔离”。Co-GNNs 提供了一种更灵活和动态的消息传递范式,其中每个节点可以根据其状态确定自己的策略,并有效地在学习过程中探索图拓扑结构。
论文链接:
https://arxiv.org/abs/2310.01267
代码链接:
https://github.com/benfinkelshtein/CoGNN
Towards Data Science:
https://towardsdatascience.com/co-operative-graph-neural-networks-34c59bf6805e
02 消息传递与信息瓶颈
大多数图神经网络都属于消息传递神经网络(Message passing neural networks,MPNNs),其中每一个节点在每一层都沿着图的边进行信息的交换,然后通过聚合函数来更新当前节点特征。
我们注意到,因为 MPNN 需要至少 k 层才能收到 k-hop 邻居的信息,增加 MPNN 层数会导致感受野的指数增长。因为最终必须将越来越多的领域信息压缩成固定大小的节点嵌入,导致大量信息丢失。这个现象被称为消息传递神经网络的过度压缩(Over-squashing)。
一些常见的解决过度压缩的方法有 动态图重写(dynamic graph rewiring),注意力机制(attention),或者门控机制(gating)。主要的思路都是通过修改邻域矩阵或者降低权重。
03 合作图神经网络
为了更好的解决过度压缩问题, 我们提出了合作图神经网络(Co-GNNs),通过两个图神经网络来决定模型最后的输出。其中第一个图神经网络被称为 动作网络 (Action network),输入当前节点嵌入与图本身,对每一个节点选择以下四个动作:
倾听和广播/标准(S): 广播自己的节点嵌入给所有倾听的邻居,并倾听正在广播的邻居。
倾听(L): 只倾听正在广播的邻居,而不广播自己。
广播(B): 只广播自己,而不倾听任何邻居。
隔离(I): 既不广播也不倾听,保持自己当前状态。
▲ 每个节点可以选择标准(S),倾听(L),广播(B),和隔离(I)四种动作
注意到当所有节点都选择标准(S)动作时,Co-GNN 会退化成标准的消息传递神经网络(MPNNs)。当所有节点都选择隔离(I)动作时,Co-GNNs 会退化成 DeepSets,完全不考虑图的邻居信息。
▲ Co-GNN 的三个例子:所有节点都选择标准动作,所有节点都选择隔离动作,以及节点根据其当前状态选择最适合的动作。
当动作选择完后,第二个图神经网络 环境网络(Environment network)会在一个通过所选择的动作重写的子图上进行消息传递并得到输出。Co-GNNs 其中一个特点是两个网络同时通过一个损失函数进行训练,就像两个网络在“合作”解决一个问题一样。
▲ 经典 MPNNs 和 Co-GNNs 的计算图示例。
04 Co-GNN的优势
以具体任务为导向: 通过允许每个节点仅从相关的邻居处倾听信息,Co-GNNs 可以确定最适合目标任务的计算图。
定向: 节点可以采取的动作结果相当于输入图的一种特殊形式的“定向重连”。例如一条边可以被删除(两个邻居都倾听但不广播);保持无向边(两个邻居都倾听和广播);或者变成一条有向边(一个邻居倾听同时另一个邻居广播)。
动态: Co-GNNs 并不在预先固定的计算图上操作,而是在通过节点动作选择学到的计算图上操作,这个计算图在各层之间可以是不一样的。
基于特征和结构: Co-GNNs 可以为具有不同节点特征的两个节点学习不同的动作。
异步: Co-GNNs 可以允许节点间的异步更新。
比1-WL更有表达力: Co-GNNs有一定概率对于 1-WL 无法区分的一对节点会采样到不同的动作,导致这两个节点在消息传递时考虑到的邻域不同,以此区分该对节点。
适用于长距离任务: 长距离任务通常需要在远距离节点之间传递信息。我们的消息传递模式可以通过学习专注于连接这两个节点的最短路径来有效过滤无关信息,从而最大化信息流向目标节点。
防止过度压缩: 由于 Co-GNNs 可以灵活地选择消息传递路径和动作,它能够减少信息在压缩过程中丢失。
防止过度平滑:“过度平滑(Over-smoothing)”是指随着消息传递层数的增加,节点嵌入在整个图中变得越来越相似的趋势。Co-GNNs 通过选择 隔离(I) 动作,可以模拟门控机制自适应地禁用来自特征相似的邻居的节点更新,从而有效防止过度平滑。
05 实验结果
Co-GNNs 在异质节点分类任务中超过了所有已有的模型。
▲ 异质节点分类的性能结果(准确率 %)。前三名分别用红色、蓝色和灰色表示。
其中我们发现,Co-GNNs 在同质图与异质图的表现有明显的区别。同质图(homophilic)指的是图中的节点倾向于与具有相似特征或标签的节点相连接。这种类型的图在社交网络、生物网络和知识图谱等领域中很常见。同质图中的节点关系通常较为均匀,信息在图中的传播和聚合更为直接和有效。
实验中我们发现,Co-GNNs 倾向于首先保留大量原图的边,优先聚合周围邻居的信息。在之后层里会逐渐减少边的链接,防止信息过度传播。
相反,异质图(heterophilic)则指的是图中的节点倾向于与具有不同特征或标签的节点相连接。这类图在一些特殊场景中出现,例如跨领域的推荐系统或多样化的社会网络。在异质图中,节点关系较为复杂,信息的传播和聚合需要更为灵活和动态的机制,因此 Co-GNNs 在这种类型的图中可以更好地发挥其优势。
实验发现,Co-GNNs 在异质图中会先优先限制邻居节点的信息交流,让更远处的节点信息传递来以后,在之后的层里再进行处理和融合。通过这种方式,Co-GNNs 可以有效避免信息过度压缩和过度平滑的问题,从而在复杂的异质图结构中保留更多的有用信息。
▲ 横轴为环境网络层数,纵轴为通过动作网络生成的子图边的数量与原图边的数量比值。cora 是一个经典的引用网络同质图,roman-empire 为异质图。
#TopoFR
开源拓扑对齐人脸表征模型
本篇论文已被NeurIPS 2024接收,论文第一作者但俊来自浙江大学&FaceChain社区,共一作者刘洋来自伦敦国王学院&FaceChain社区,通讯作者孙佰贵来自阿里巴巴&FaceChain社区,还有合作作者包括帝国理工学院邓健康,FaceChain社区谢昊宇、李思远,伦敦国王学院罗山。
一、前言
在数字人领域,形象的生成需要依赖于基础的表征学习。FaceChain 团队除了在数字人生成领域持续贡献之外,在基础的人脸表征学习领域也一直在进行深入研究。采用了新一代的 Transformer 人脸表征模型 TransFace 后,FaceChain 去年也是推出了 10s 直接推理的人物写真极速生成工作,FaceChain-FACT。继 TransFace 之后,FaceChain 团队最近被机器学习顶级国际会议 NeurIPS 2024 接收了一篇人脸表征学习新作, "TopoFR: A Closer Look at Topology Alignment on Face Recognition",让我们一睹为快。
- 论文链接:https://arxiv.org/pdf/2410.10587
- 开源代码:https://github.com/modelscope/facechain/tree/main/face_module/TopoFR
二、背景
1. 人脸识别
卷积神经网络在自动提取人脸特征并用于人脸识别任务上已经取得了巨大的成功。训练基于卷积神经网络的人脸识别模型的损失函数主要分为以下两种类型:(1)基于 Metric 的损失函数,例如 Triplet loss, Tuplet loss 以及 Center loss。(2) 基于 Margin 的损失函数,例如 ArcFace, CosFace, CurricularFace 与 AdaFace。
相比于基于 Metric 的损失函数, 基于 Margin 的损失函数能够鼓励模型执行更加高效的样本到类别的比较,因此能够促进人脸识别模型取得更好的识别精度。其中,ArcFace 成为业界训练人脸识别模型首选的损失函数。
2. 持续同调
下面介绍一下持续同调与我们方法相关的一些知识。
持续同调是一种计算拓扑学方法,它致力于捕捉 Vietoris-Rips 复形随着尺度参数
变化而进化的过程中所呈现的拓扑不变性特征,其主要用于分析复杂点云的潜在拓扑结构。近年来,持续同调技术在信号处理、视频分析、神经科学、疾病诊断以及表征学习策略评估等领域表现出了极大的优势。在机器学习领域,一些研究已经证明了在神经网络训练过程中融入样本的拓扑特征可以有效地提高模型的性能。
符号:
表示一个点云,
表示一个在
空间中的距离度量。矩阵
表示点云
中各点之间的成对距离矩阵。
Vietoris-Rips 复形:Vietoris-Rips 复形是从度量空间中一组点构建的特殊单纯复形,可用于近似表示底层空间的拓扑结构。对于
,我们表示点云
在尺度
处所对应的 Vietoris-Rips 复形为
,其包含了点云
中所有的单纯形(即子集),并且点云
中的每个成分满足一个距离约束:
,
。
此外 Vietoris-Rips 复形还满足一个嵌套关系:
。基于这个关系,我们能够随着尺度系数
的增加而追踪单纯复形的进化过程。值得注意的是
和
是等价的,因为构建 Vietoris-Rips 复形只需要距离信息。
同调群:同调群是一种代数结构,用于分析不同维度
下单纯复形的拓扑特征,例如连通分量 (
)、环 (
)、空洞 (
) 和更高维特征 (
)。通过跟踪 Vietoris-Rips 复形的拓扑特征
随着尺度
增加而呈现的相应变化,可以深入了解底层空间的多尺度拓扑信息。
持续图和持续配对:持续图
是笛卡尔平面
中点
的多重集合,其编码了关于拓扑特征寿命的信息。具体来说,它总结了每个拓扑特征的诞生时间b和消失时间d ,其中诞生时间b表示特征被创建的尺度,而消失时间d指的是特征被销毁的尺度。持续配对
包含与持久图
中标识的拓扑特征的诞生和消失相对应的单纯形
的索引
。
三、方法
1. 本文动机
现存的人脸识别工作主要关注于设计更高效的基于 Margin 的损失函数或者更复杂的网络架构,以此来帮助卷积神经网络更好地捕捉细腻度的人脸特征。
近年来,无监督学习和图神经网络的成功已经表明了数据结构在提升模型泛化能力中的重要性。大规模人脸识别数据集中天然地蕴含着丰富的数据结构信息,然而,在人脸识别任务中,目前还没有研究探索过如何挖掘并利用大规模数据集中所蕴含的结构信息来提升人脸识别模型在真实场景中的泛化性能。因此本文致力于将大规模人脸数据集中内在的结构信息注入进隐层空间中,以此来显著提升人脸识别模型在真实场景中的泛化性能。
我们使用持续同调技术调研了现存的基于卷积神经网络的人脸识别模型框架数据结构信息的变化趋势,如图 1 与图 2 所示,并得到了以下三个新颖观测结论:
(i)随着数据量的增大,输入空间的拓扑结构变得越来越复杂
(ii)随着数据量的增大,输入空间与隐层空间的拓扑结构差异越来越大
(iii)随着网络深度的增加,输入空间与隐层空间的拓扑结构差异越来越小,这也揭示了为什么越深的神经网络能够达到越高的人脸识别精度。
图 1:我们分别从 MS1MV2 数据集中抽样了 1000(a)、5000(b)、10000(c)和 100000(d)张人脸图像,并使用持续同调技术计算它们的持续图,其中
表示第j维同调。持续图是用来描述空间拓扑结构的数学工具,其中持久图中的第j维同调
代表空间中的第j维空洞。在拓扑理论中,如果空间中高维空洞的数量越多,那么底层空间的拓扑结构就更越复杂。如图 1 (a)-1 (d) 所示,随着人脸数据量的增加,输入空间的持久图中包含的高维空洞(如
和
)也越来越多。因此,这一实验现象清晰地表明了输入空间的拓扑结构也变得越来越复杂。
图 2:(a) 我们首先使用基于 ResNet-50 架构的 ArcFace 模型对 MS1MV2 训练集执行推断,以此来探究数据量与拓扑结构差异之间的关系。在推断时,batch-size 被分别设置为 256、1024 和 2048,并分别进行了 1000 次迭代。我们使用直方图来近似这些拓扑结构差异分布。
(b) 其次,我们使用具有不同 ResNet 架构的 ArcFace 模型在 MS1MV2 训练集上进行推断(batch-size=128)以此来研究网络深度与拓扑结构差异之间的关系。
(c) 此外,我们研究了训练过程中拓扑结构差异的变化趋势(批量大小 = 128),发现 i) 直接使用 PH 对齐拓扑结构会导致差异急剧减少至 0,这意味着隐层空间的拓扑结构遭遇了结构崩塌现象;ii) 而我们的 PTSA 策略促进了结构差异的平稳收敛,有效地将输入空间的结构信息注入进隐层空间。
(d) 直接使用 PH 对齐拓扑结构会导致模型在 IJB-C 测试集中出现显著差异。我们的 PTSA 策略有效缓解了这种过拟合问题,在 IJB-C 数据集上评估过程中展现出更小的拓扑结构差异。
基于以上的观测结论,我们可以推断出,在大规模识别数据集上训练人脸识别模型时,人脸数据的结构信息将被严重破坏,这无疑限制了人脸识别模型在真实应用场景中的泛化能力。
因此,本文研究的问题是,在人脸识别模型训练过程中,如何在隐层空间有效地保留输入空间的数据所蕴含的结构信息,以此提升人脸识别模型在真实场景中的泛化性能。
2. 具体策略
2.1 模型的整体架构
针对上述问题,本文从计算拓扑学角度出发,提出了基于拓扑结构对齐的人脸识别新框架 TopoFR,如下图 3 所示。
图 3:所提出的 TopoFR 模型整体架构示意图。
表示乘法操作。
表示对每个训练样本应用 RSP 的概率。
2.2 扰动引导的拓扑结构对齐策略 PTSA
我们发现,直接采用持续同调技术对齐人脸识别模型输入空间和隐层空间的拓扑结构,难以在隐层空间上本质保留输入空间的结构信息,进而容易导致模型的隐层空间遭遇结构崩塌现象。为了解决这个问题,我们提出了扰动引导的拓扑结构对齐策略 PTSA,其包含了两个机制:随机结构扰动 RSP 和 不变性结构对齐 ISA。
随机结构扰动 RSP
RSP 引入了一个多样性数据增强集合
,其中包含了四个常见的数据增强运算:随机擦除
,高斯模糊
,灰度化
以及颜色增强
。对于每一个训练样本
,RSP 会随机挑选一个数据增强
运算来对其进行扰动:
其次,扰动后的样本
将正式送入网络进行有监督训练,这极大地增加隐层特征空间的拓扑结构多样性。我们采用 ArcFace Loss 作为基础分类损失函数:
不变性结构对齐 ISA
在网络训练过程中,我们分别构建出原始输入空间
与扰动特征空间
的 Vietoris-Rips 复形
和
。并利用持续同调技术求解出其对应的持续图
和持续配对
。理想地,不管输入的人脸图像怎样被干扰,其编码在隐层空间中的位置应该保持不变。因此,我们提出对齐原始输入空间和扰动特征空间的拓扑结构,不变性结构对齐机制所对应的损失函数如下所示:
2.3 结构破坏性估计 SDE
在实际的人脸识别场景中,训练集通过会包含一些低质量的人脸图像,这也被称为困难样本。这些困难样本在隐层空间中很容易被编码到靠近决策边界附近的异常位置,严重破坏了隐层空间的拓扑结构,并会影响输入空间和隐层空间拓扑结构的对齐。
为了解决这个问题,我们提出了结构破坏性估计策略 SDE 来精准地识别出这些困难样本,并鼓励模型在训练阶段重点学习这些样本,逐渐引导起回归到合理的空间位置上。
预测不确定性
困难样本通常分布在决策边界附近,因此也有着较大的预测不确定性 (即分类器处的预测分布熵较大) ,这也是其容易被错误分类的原因。为精准地筛选出这些困难样本,我们提出利用高斯 - 均匀混合分布概率模型来建模这些样本的预测不确定性,其利用分类器处的预测熵作为概率分布的变量:
其中,均匀分布
建模了困难样本,而高斯分布
建模了简单样本。因此,某个样本属于困难样本(即由于较大的预测不确定性)的后验概率可以被计算为:
当分类器的预测分布十分接近于均匀分布时,那么样本属于困难样本的概率将十分接近于 1。
结构破坏性分数 SDS
相比于正确分类样本,错误分类样本有着更大的困难性,并且对隐层空间的拓扑结构损害更大。受 Focal Loss 设计思想的启发,我们在衡量样本对空间结构破坏性大小时综合考虑了预测不确定性与预测精度,并设计出概率感知的打分机制
来自适应地为每个样本计算结构破坏性分数 SDS:
为鼓励模型在训练阶段重点关注那些对拓扑结构破坏较大的困难样本,我们将结构破坏性分数 SDS 加权至最终的分类损失函数上:
在训练过程中,最小化
将带来两个好处:
(i)最小化
将鼓励模型从多样化的训练样本中捕捉出更有泛化性的人脸特征。(ii)最小化结构破坏性分数 SDS
能够有效减轻困难样本对隐层空间结构的破坏,这有利于结构信息的保留以及清晰决策边界的构建。
2.4 模型优化
TopoFR 模型整体的目标函数如下所示:
四、关键实验及分析
1.1 训练数据集与测试基准
我们分别采用 MS1MV2 (5.8M 图像,85K 类别),Glint360K (17M 图像,360K 类别) 以及 WebFace42M (42.5M 图像,2M 类别) 作为我们模型的训练集。
利用 LFW, AgeDB-30, CFP-FP, IJB-C 以及 IJB-B 等多个人脸识别测试基准来评估我们模型的识别与泛化性能。
1.2 在 LFW, CFP-FP, AgeDB-30, IJB-C 以及 IJB-B 测试基准上的实验结果
我们可以观察到,TopoFR 在这些简单的基准上的性能几乎达到了饱和,并显著高于对比方法。此外,TopoFR 在不同 ResNet 框架下都取得了 SOTA 性能。值得一提的是,我们基于 ResNet-50 架构的 TopoFR 模型甚至超越了大部分基于 ResNet-100 的竞争者模型。
1.3 高斯 - 均匀混合分布概率模型的有效性
为验证高斯 - 均匀混合分布概率模型在挖掘困难样本方面的有效性,我们展示了模型训练过程中利用分类器预测熵所估计的高斯分布密度函数,如下图 4 所示。
结果表明,被错误分类的困难样本通常有着较小的高斯密度(即有着较高的高斯 - 均匀混合分布后验概率),因此能够被高斯 - 均匀混合分布概率模型轻易探测出来。提得一提的是,即使部分被错误分类的困难样本有着较小的熵(即有着较大的高斯密度和较低的后验概率),它们的结构性破坏分数
也能被 Focal Loss
所修正。
图 4:模型训练过程中所估计的高斯密度(蓝色曲线)。绿色标记
和黑色标记
分别表示正确分类样本和错误分类样本的熵。
1.4 扰动引导的拓扑结构对齐策略的泛化性能
为表明此拓扑结构对齐策略 PTSA 在保持数据结构信息方面的一流泛化性能,我们在 IJB-C 测试集上调查了 TopoFR 模型与其变体 TopoFR-A 在输入空间与隐层空间上的拓扑结构差异,如下图 5 所示。值得一提的是,变体 TopoFR-A 直接利用持续同调技术来对齐两个空间的拓扑结构。
所得到的可视化统计结果明显地表明了我们所提出的扰动引导的拓扑结构对齐策略 PTSA 在保留数据结构信息方面的有效性和泛化性。
图 5:TopoFR 和变体 TopoFR-A 在不同网络主干架构和训练数据集上的拓扑结构差异 [网络主干架构,训练数据集]。变体 TopoFR-A 直接利用持续同调技术对齐两个空间的拓扑结构。值得注意的是,我们使用 Glint360K 数据集训练的 TopoFR 模型在 IJB-C 测试集上几乎完美地对齐了输入空间和隐层空间的拓扑结构(即蓝色直方图几乎收敛为一条直线)。
五、结论
本文提出了一种人脸识别新框架 TopoFR,其有效地将隐藏在输入空间中的结构信息编码到隐层空间,极大地提升了人脸识别模型在真实场景中的泛化性能。一系列在主流的人脸识别基准上的实验结果表明了我们 TopoFR 模型的 SOTA 性能。
#基于视觉的反无人机综述
本篇分享论文A Survey on Vision-Based Anti Unmanned Aerial Vehicles Methods
,基于视觉的反无人机综述。
- 论文地址:https://www.mdpi.com/2504-446X/8/9/518
摘要
近年来,由于无人机滥用带来很多问题,许多反无人机方法被引入来解决这些问题。这些方法主要依赖于物理层面,如雷达检测、射频分析和声学检测。
传统的雷达系统在检测小型无人机方面表现出了一定的效果,特别是在反射和干扰众多的复杂地形和城市环境中。射频和声学检测系统通常是低成本且易于部署的,但它们非常容易受到城市环境中电磁和噪声干扰的影响。这些方法没有考虑到视觉方面的信息。
事实上,视觉信息具有独特的优势,因为它允许通过捕获和分析无人机的视觉特征来进行更直观、更精确的识别和跟踪。然而,视觉信息的处理具有一些挑战:
- 无人机目标经常经历剧烈尺度变化,飞行过程中频繁消失,跟踪性能受到相机运动的严重影响;
- 在红外场景中,无人机目标尺度小,分辨率低,外观信息不足,容易被背景信息掩盖;
- 无人机在复杂场景下的飞行会导致目标遮挡和不稳定的飞行路径。
本文概述了近年来基于视觉的反无人机检测方法。根据使用的主干类型和应用场景,我们将相关方法分类为基于传感器的方法和基于视觉的方法。我们搜集并总结了9个公开的反无人机数据集,涵盖了RGB图像、红外图像和声学数据。
本文还提供了数据集有效原始链接,以便读者可以快速访问它们。我们对反无人机数据集和方法的局限性进行了详细的讨论,同时,为未来的研究提出了几个潜在的方向。
概要
我们主要在Google Scholar, IEEE Xplore, Web of Science以及一些学术网站上搜集反无人机方法的文献,主要搜集近5年的文献,这可以代表最新的研究进展。
搜索关键词为"Anti-UAV", "UAV Detection", "UAV Tracking", "Deep learning for anti drone detection"。
文献主要包括期刊论文、会议论文、预印本及各种竞赛资料。本文将它们按国家和出版时间进行分类。如下图所示,图中总结了全球不同国家或地区的论文数量,并给出了发表日期的分布情况。
左图所示文献的数量保持增长的趋势,意味着该领域受到越来越多的关注;右图反映了中国发表的文献最多,占68%。这可能得益于中国在无人机领域技术研发的持续投入。
我们对收集到的近5年的文献进行综合分析,将反无人机方法分为两类:基于传感器的方法和基于视觉的方法。
MethodsClassy
数据集
数据集名称和链接如下所示:
DatasetExample
部分有代表性的方法示意图
- 基于传感器的方法示意图
- 基于视觉的方法示意图
讨论
当前数据集的一些限制
- 缺乏多目标数据集
- 分辨率和质量较低
- 场景缺乏多样性
- 无人机类型单一
当前算法的一些限制
- 缺乏统一的评估规则
- 模型大小的不确定性
- 难以实现性能与精度之间的权衡
- 泛化能力不足
- 无人机群的探测和跟踪仍然不发达
未来可能的研究方向分析
- 图像超分辨率重建
- 自主学习能力
- 多模态感知技术的整合
- 对抗多智能体协同作战
- 抗干扰能力
#Plain-Det
同时支持多数据集训练的新目标检测
论文提出了Plain-Det,提供了灵活性以适应新的数据集,具有跨多样数据集的稳健性能、训练效率和与各种检测架构的兼容性。结合Def-DETR和Plain-Det,在COCO上达到51.9的mAP,匹配当前最先进的检测器。在13个下游数据集上进行了广泛的实验,Plain-Det展现了强大的泛化能力。
近期在大规模基础模型上的进展引发了对训练高效大型视觉模型的广泛关注。一个普遍的共识是必须聚合大量高质量的带注释数据。然而,鉴于计算机视觉中密集任务(如目标检测和分割)标注的固有挑战,实际的策略是结合并利用所有可用的数据进行训练。
论文提出了
Plain-Det
,提供了灵活性以适应新的数据集,具有跨多样数据集的稳健性能、训练效率和与各种检测架构的兼容性。结合Def-DETR
和Plain-Det
,在COCO
上达到51.9
的mAP
,匹配当前最先进的检测器。在13
个下游数据集上进行了广泛的实验,Plain-Det
展现了强大的泛化能力。
- 论文地址:https://arxiv.org/abs/2407.10083
- 论文代码:https://github.com/SooLab/Plain-Det
Introduction
大规模数据集促进了计算机视觉的显著进步,从用于图像分类的ImageNet
到最近的图像分割数据集SA-1B
。目标检测作为计算机视觉中的基本任务之一,固有地需要大规模的带注释数据。然而,注释如此广泛和密集的对象既昂贵又具有挑战性。另一种直接且实用的方法是统一多个现有的目标检测数据集,以训练一个统一的目标检测器。然而,数据集之间的不一致性,例如如图1a
所示的不同分类法和数据分布,给多数据集训练带来了挑战。
论文旨在解决使用多个目标检测数据集训练一个有效且统一的检测器所面临的挑战,期望该检测器应具备以下特性:
- 对新数据集具有灵活性,以无缝且可扩展的方式进行适应,而不需要手动调整、复杂设计或从头开始训练。
- 在逐渐引入新数据集时性能具有稳健性,始终能够提高性能,或者至少保持稳定的性能。
- 训练效率。多数据集训练所需的训练迭代次数不应超过单一数据集的训练次数。
- 与检测系列的兼容性,例如
Faster-RCNN
系列和基于DETR
的检测架构。
首先,引入一个简单而灵活的多数据集目标检测基线,这大胆挑战了一些近期的设计原则,同时保持其他进展。近期的研究明确将不同数据集之间的分类法统一为一个单一的统一分类法。然而,尽管它们采用了自动化方法,但仍然需要精心设计的组件,并在扩展到更多数据集时缺乏灵活性。这主要是因为1
) 从数据集特定标签空间到统一标签空间的映射自动学习后,随着标签空间大小的增长变得越来越嘈杂;2
) 结合新数据集需要重构统一的分类法。
因此,论文引入一个共享检测器,拥有完全数据集特定的分类头,以自然地防止不同分类法之间的冲突,并确保灵活性。此外,利用类别标签的文本嵌入构建所有标签的共享语义空间。值得注意的是,语义空间隐式地建立了来自不同分类器的标签之间的连接,使得尽管有数据集特定的分类头,仍然能够充分利用所有训练数据。尽管多数据集基线模型展示了灵活性,但其性能显著低于单一数据集目标检测器。
为此,论文探讨了影响基线成功的关键因素,并提供了三个见解,以使其不仅具有超强的灵活性,同时也具有高度的有效性:
Semantic space calibration
语义空间校准的灵感源于质疑使用固定文本嵌入的分类器是否适用于目标检测。图1b
的origin
展示了类别之间文本嵌入的相似性矩阵,这与由可学习分类权重生成的矩阵(图1b
的learnable
)明显不同。
这种偏差源于CLIP
的训练数据分布,例如CLIP
中的文本-图像对通常在名词频率上表现出长尾分布。这导致频繁出现的名词(如图1b
中的person
)的文本嵌入与其他词(包括NULL
)之间具有高相似性。反过来,论文发现不常出现的NULL
与频繁出现的词具有高相似性,而与不常出现的词具有低相似性。
因此,可以将空字符串NULL
视为一个无意义的基准,以提取受频率驱动的基准,从而得到图1b
的modified
中所示的校准相似性矩阵。
Sparse proposal generation
在目标检测中,目标提案生成至关重要,尤其是在多数据集场景下。这是因为相同的目标提案用作锚点,以预测不同数据集的不同目标集。例如,虽然COCO
和LVIS
共享相同的图像集,但标注类别存在显著差异。这要求在同一图像中相同的目标提案能够锚定来自COCO
的80
个类别和LVIS
的1203
个类别的不同目标。
目前,目标提案生成方法大致可分为两种类型:1
) 密集或从密集到稀疏的提案生成,生成跨越所有图像网格的提案或从密集提案中选择一个小子集,以及2
) 稀疏提案生成,通常直接生成一组可学习的提案(见图2a
)。
因此,论文对这两种类型的提案生成方法在COCO
和LVIS
数据集的多数据集目标检测中进行了初步实验和比较。结果表明,稀疏提案生成方法在两个目标检测器系列中始终优于密集方法,如图2b
所示。一个可能的原因是,与密集提案生成相比,稀疏提案(即稀疏查询)被证明能够捕捉数据集的分布,使得从多个数据集中学习联合分布变得更加容易。然而,由于需要相同的查询来捕捉不同数据集的先验,多数据集训练的性能仍低于单数据集训练。
因此,论文基于统一的语义空间和图像先验改进稀疏查询为类感知查询,这缓解了一组查询必须适应多个数据集的挑战。
Dynamic sampling strategy inspired by the emergent property
尽管上述两个见解解锁了在像COCO
和LVIS
这样的多个数据集上训练统一检测器的潜力,但纳入数据集Objects365
会导致训练过程中检测性能的大幅波动(如图2b
的static sampler
),主要是由于数据集大小的不平衡(见图2c
)。
令人惊讶的是,论文观察到,即使在某次迭代中检测器在某个数据集上的精度较低,它也可以通过对该特定数据集进行几次额外的训练迭代显著提高其精度(如图2b
的emergent
)。论文将这一现象归因于多数据集检测训练的涌现特性:在多个数据集上训练的检测器,固有地具备比单一数据集训练更一般化的检测能力,并且这种能力可以通过几次特定于数据集的迭代被激活并适应特定的数据集。
受到这一特性的启发,论文提出了一种动态采样策略,以在不同数据集之间实现更好的平衡,该策略在后续迭代中根据先前观察到的数据集特定损失动态调整多数据集采样策略。
最后,论文提出了Plain-Det
,这是一种简单但有效的多数据集目标检测器,得益于基线的灵活性,可以通过直接将上述三项见解应用于基线来轻松实现。
总而言之,论文的贡献为:
- 提供了三项关键见解,以应对多数据集目标检测训练的挑战,包括标签空间的校准、稀疏查询的应用和改进,以及少量迭代的特定数据集训练的涌现特性。
- 基于这三项见解,提出了一种简单但灵活的多数据集检测框架,称为
Plain-Det
,满足以下标准:能够灵活适应新数据集、在不同数据集上表现出良好的鲁棒性、训练效率高,以及与各种检测架构兼容。 - 将
Plain-Det
集成到Def-DETR
模型中,并在公共数据集上进行联合训练,这些数据集包含2,249
个类别和400
万张图像。这一集成将Def-DETR
模型在COCO
上的mAP
性能从46.9%
提升至51.9%
,达到了与当前最先进的目标检测器相当的性能。此外,它在多个下游数据集上创造了新的最先进的结果。
Our Method
Preliminaries
Query-based object detector
通过将目标检测重新构造成一组预测问题,最近的基于查询的目标检测器利用可学习或动态选择的对象查询直接生成最终对象集的预测,例如基于DETR
的方法或Sparse-RCNN
。这种方法消除了对手工制作组件的需求,如锚框预设和后处理非极大抑制(NMS
)。一个基于查询的检测器由三个组成部分构成:一组对象查询、一个图像编码器(例如,DETR
中的Transformer
编码器或Sparse-RCNN
中的CNN
),以及一个解码器(例如,DETR
中的Transformer
解码器或Sparse-RCNN
中的动态头)。
对于给定的图像 , 图像编码器 提取图像特征, 这些特征随后与对象查询 —起输入解码器 , 以预测每个查询的类别 和边界框 。通常情况下, 分类头 和框回归头 由几层多层感知机(MLP)构成。
整个检测管道可以如下所示:
其中, 是经过解码器层查询优化后的查询特征。为了简化演示, 用 表示目标检测器, 其中编码器 、解码器 、可学习或选择的查询 、分类头 和框回归头 是其组成部分。
Single-dataset object detection training
对于在单一数据集上的训练,基于查询的目标检测器的优化目标可以表述如下:
其中 表示来自数据集 的图像和标注对。损失函数 通常是类别预测的交叉摘损失和框回归的广义交并比损失。
Dataset-specific Head with Frozen Classifier
论文的多数据集目标检测框架与任何基于查询的目标检测架构兼容。为了支持多个数据集,为每个数据集设定了一个独特的数据集特定分类头。在这些分类头中,分类器在训练期间是预先提取并且被冻结的。
Object detector with dataset-specific classification head
多个数据集 及其对应的标签空间 可能具有不一致的分类法。例如,Obj365 数据集中的 " dolphin" 类在 COCO 数据集中被标记为背景。因此,最近的工作通过串联每个数据集特定的标签空间、学习从每个标签空间到统一标签空间的映射, 或为类名的子词集分配软标签,手动或自动地为 个数据集创建一个统一的标签空间。然而,统一的标签空间在扩展到更多数据集时缺乏灵活性, 并且随着标签空间大小的增加, 往往变得更加嘈杂。
因此,论文提出保持每个标签空间的独立,以直接和自然地解决不一致分类法的问题。具体而言,通过添加 个数据集特定的分类头 来增强基于查询的目标检测器, 每个分类头专注于对其对应标签空间内的对象进行分类:
其中 是数据集 在标签空间 上的分类头。编码器 、解码器 、对象查询 和类无关的框回归头 在各个数据集之间是共享的。值得注意的是,尽管检测器在形式上与分区检测器相似, 但分类头是根据各自的目标独立优化的。相比之下, 分区检测器随后优化分区检测器的输出, 以统一分类法为目标。
Frozen classifiers with a shared semantic space
虽然数据集特定的头部解决了由于不一致的分类法引起的冲突,但它们并未充分利用来自不同数据集的相似语义类,例如共同类“person
”,以实现全面学习。为了解决这个问题并在不同数据集之间传递共有知识,论文选择利用预训练的CLIP
模型的特征空间作为类标签的共享语义空间。
具体而言, 对于每个数据集 及其标签空间 , 将其标签的 CLIP 文本嵌入作为其分类头 中的分类器
其中 为标签空间 中的每个类生成文本提示 " the photo is [ class nam 是 CLIP 的冻结文本编码器。
为了纠正因CLIP
的训练数据分布而产生的偏差,通过去除基础偏差来校准文本嵌入,具体如下:
其中 (NULL) 是空字符串的文本嵌入, Norm 是 L2 归一化。
Class-Aware Query Compositor
Object query generation
作为基于查询的目标检测器的核心组件,目标查询生成在单数据集训练中得到了广泛的研究,产生了多种类型,基于它们与图像的独立性。在多数据集目标检测中,由于涉及的多个数据集的多样性,初始化目标查询变得更加重要,这超出了单数据集目标检测中查询初始化的范围。
在单数据集目标检测中,查询通常是随机初始化或根据数据集特定的Top-K
分数从输入图像特征图生成的(见图4a
和b
)。在对多数据集目标检测的初步实验中,从编码器(图2
中的Def-DETR
++)中选择Top-K
像素特征导致性能显著下降,而相比之下,单数据集训练的性能更好。这是因为图像内的Top-K
候选对象在很大程度上依赖于数据集分类法,并且与数据集密切相关。过于强烈的数据集先验使检测器向特定于数据集的解码倾斜,从而阻碍了解码器充分利用多个数据集进行全面学习。相反,数据集无关的查询初始化(图2
中的Def-DETR
)在所有数据集之间共享相同的可学习目标查询。
基于这些观察和见解,论文提出了一种新颖的多数据集目标检测查询初始化方法(见图4c
)。类感知查询初始化既不是数据集无关的,也不是强烈依赖数据集的,而是依赖于与数据集和图像相关的弱先验。
给定图像 及其对应数据集 的分类器 ,首先根据分类器构造数据集特定的弱查询嵌 ,具体如下:
值得注意的是,尽管是数据集特定的,但与直接选择特定于数据集的图像内容的强先验不同,通过使用其数据集特定的分类器获得了一个弱先验,该分类器在不同的数据集中共享相同的语义空间。通过这个弱先验,不同数据集之间的相似语义标签可以被共享。
随后,选择提取全局图像特征,而不是Top-K
本地内容特征,作为弱图像先验,将它与特定于数据集的查询结合如下:
其中Max-Pool
对整个图像执行最大池化,而 可以被视为一个弱图像先验。表示输入到解码器的最终查询特征。重要的是,论文的修改仅专注于分类头和查询初始化,使其能够轻松应用于所有基于查询的目标检测器,并与其兼容。
Training with Hardness-indicated Sampling
除了上述的检测器架构调整以适应多个数据集外,训练一个多数据集检测器还带来了额外的挑战,这些挑战源于数据集分布、图像数量、标签空间大小等方面的显著差异。
论文首先制定多数据集训练的目标, 然后基于对图 2 中引入的突现特性的观察来改进训练策略。总的来说, 用于在 个数据集 上训练多数据集目标检测器的优化目标可以表述如下:
其中, 除了针对特定任务的分类头 外, 目标检测器 的其余组件, 包括编码器 、解码器 、用于生成目标查询 的轻量级 MLPs (公式 7 )以及与类别无关的框回归头 ,在不同数据集之间是共享的。多亏了特定于数据集的分类头 ,损失 能够自然地针对特定数据集进行定制,确保针对每个数据集单独保留原始训练损失和采样策略。例如,对长尾 LVIS 数据集应用 RFS,但不用于 COCO 数据集。
虽然特定于数据集的损失可以适应每个数据集的内部特征,但数据集之间的显著差异,例如数据集大小的差异,带来了必须解决的训练挑战。因此,论文提出了一种硬度指示的采样策略,以平衡不同数据集之间的图像数量,并在在线训练过程中动态评估数据集的难度。
首先定期记录不同数据集的框损失 。然后按如下方式计算在线采样权重 :
其中 表示第 i 个数据集中图像的数量, 将涉及控制数据采样中每个数据集的权重。在线采样器将根据其对应的权重 的比例从每个数据集中采样数据。
Experiment
#PaddleOCR 2.9 发布
正式开源文本图像智能分析利器
OCR 方向的工程师,之前一定听说过 PaddleOCR 这个项目。目前项目累计 Star数量已超过 43k+ ,安装包月下载量超过 40w+ 。
滑动查看更多图片
本次 PaddleOCR 最新发版,带来两大重磅升级,包括:
- 发布文档场景信息抽取v3(PP-ChatOCRv3-doc)开源版,大幅提升了文本图像版面解析能力,充分发挥文心一言语言理解优势,信息抽取整体效果相比于上一个版本提升 6 %,同时新增 7 个实用的 OCR 基础模型。
- 支持 OCR 领域低代码全流程开发能力,通过极简的 Python API 一键调用 17个 OCR 相关模型,提供基于统一命令和图形界面两种方式,实现模型简洁高效的使用、组合与定制。支持各种主流硬件如英伟达GPU、昆仑芯、昇腾和寒武纪无缝切换。
PaddleOCR 代码库地址,欢迎大家star:
https://github.com/PaddlePaddle/PaddleOCR
PP-ChatOCRv3-doc 在线体验地址:
https://aistudio.baidu.com/community/app/182491/webUI
下面我们就对上述升级依次进行说明。
文档场景信息抽取v3开源版
PP-ChatOCRv3-doc 的系统流程如下图所示:首先输入预测图片,送入通用 版面分析 系统,经过版面分析后,预测图像中的文字信息和表格结构。将版面分析系统预测出的版面类别、文字、表格结构与 Query 之间进行向量检索,得到与 Query 相关的文本信息,然后送入 Prompt 生成器重新组合成,基于文心大语言模型将海量数据和知识的融合,信息抽取准确率高且应用广泛。其中版面分析系统中集成了图像矫正(可选)、版面区域定位、常规文本检测、印章文本检测、文本识别、表格识别等多个功能,可实现 CPU/GPU 上的高精度实时预测。通过大小模型的融合策略,各部分得以充分展现其优势:小模型以其高精度的图像处理能力脱颖而出,而大模型则展现出卓越的内容理解能力。
在研发 PP-ChatOCRv3-doc 同时,沉淀了 7 个实用的 OCR 基础模型,方便独立使用。具体如下:基于 RT-DETR 的 2 个高精度版面区域检测模型和 1 个基于 PicoDet 的高效率版面区域检测模型、高精度表格结构识别模型 SLANet_Plus 、文本图像矫正模型 UVDoc 、公式识别模型 LatexOCR 、基于 PP-LCNet 的文档图像方向分类模型。
OCR 领域低代码全流程开发
飞桨低代码开发工具 PaddleX,依托于 PaddleOCR 的先进技术,支持了 OCR 领域的低代码全流程开发能力。通过低代码全流程开发,可实现简单且高效的模型使用、组合与定制。这将显著减少模型开发的时间消耗,降低其开发难度,大大加快模型在行业中的应用和推广速度。特色如下:
- 模型丰富一键调用:将文本图像智能分析、通用 OCR 、通用版面解析、表格识别、公式识别、印章识别涉及的 17 个模型整合为 6 条模型产线,通过极简的 Python API 一键调用,快速体验模型效果。此外,同一套 API ,也支持图像分类、目标检测、图像分割、时序预测等共计 200+ 模型,形成 20+ 单功能模块,方便开发者进行模型组合使用。
- 提高效率降低门槛:提供基于统一命令和图形界面两种方式,实现模型简洁高效的使用、组合与定制。支持高性能推理、服务化部署和端侧部署等多种部署方式。此外,对于各种主流硬件如英伟达GPU、昆仑芯、昇腾、寒武纪和海光等,进行模型开发时,都可以无缝切换。
下面是 PP-ChatOCRv3-doc 的快速推理程序,5 行代码实现经典模型和大语言模型的交互。
# 安装PaddlePaddle和PaddleX,PP-ChatOCRv3-doc的快速推理程序
from paddlex import create_pipeline
predict = create_pipeline( pipeline="PP-ChatOCRv3-doc",
llm_name="ernie-3.5",
llm_params = {"api_type":"qianfan","ak":"","sk":""} )
visual_result, visual_info = pipeline.visual_predict("https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/contract.pdf")
vector = pipeline.build_vector(visual_info=visual_info)
chat_result = pipeline.chat(key_list=["乙方", "手机号"], visual_info=visual_info, vector=vector)
如果您对产线的预训练模型效果满意,可以直接对产线进行高性能推理/服务化部署/端侧部署,如果不满意,您也可以使用产线的二次开发能力,提升效果。完整的产线开发流程文档请参考:
https://paddlepaddle.github.io/PaddleOCR/latest/paddlex/overview.html
此外,我们也在星河社区为开发者提供了基于云端图形化界面零代码的全流程开发工具,下面是 PP-ChatOCRv3-doc 零代码模型产线的开发界面,只需按要求准备好微调模型的数据,就可以快速进行模型迭代和集成部署,详细可以参考教程《零门槛开发产业级AI模型》中相关章节:
https://aistudio.baidu.com/practical/introduce/546656605663301
#FreeScale
首次实现8K图像生成!南洋理工&阿里&复旦提出FreeScale:让扩散模型解锁更高分辨率
本文介绍了一种无需微调的推理范式FreeScale,它通过融合不同尺度的信息,使预训练的扩散模型能够生成高分辨率的图像和视频。FreeScale首次实现了8K分辨率图像的生成,并在图像和视频生成任务中显著提升了高分辨率生成的能力,同时解决了高分辨率生成中的重复模式问题。
文章链接:https://arxiv.org/pdf/2412.09626
项目链接:http://haonanqiu.com/projects/FreeScale.html
亮点直击
- 提出了 FreeScale,一种无需微调的推理范式,通过融合不同尺度的信息,使预训练的扩散模型能够生成生动的高分辨率结果。
- 在文本生成图像模型和文本生成视频模型上对该方法进行了实证评估,证明了其有效性。
- 首次实现了8K分辨率图像的生成。与其他最新的无需微调方法相比,FreeScale 以更少的推理时间获得了更高质量的视觉效果。
总结速览解决的问题
当前的视觉扩散模型由于高分辨率数据缺乏和计算资源限制,仅能在有限分辨率下训练,难以生成高保真图像或视频。在生成高于训练分辨率的内容时,模型容易引入高频信息,导致重复模式和低质量内容。
提出的方案
FreeScale 是一种无需微调(tuning-free)的推理范式,通过尺度融合(scale fusion)实现高分辨率视觉内容生成。它通过处理不同感受野尺度的信息,并提取所需的频率成分进行融合,从而克服高频信息引发的重复模式问题。
应用的技术
- 多尺度信息处理:对不同感受的尺度信息进行提取和处理。
- 频率成分提取与融合:提取并融合目标频率成分,优化高分辨率生成质量。
达到的效果
- 在图像和视频生成任务中显著扩展了高分辨率生成的能力。
- 首次实现了8K分辨率图像的生成,相较于现有最优方法表现更优。
- 通过无调参方式解决了高分辨率生成中的重复模式问题,提升了生成内容的质量与保真度。
8K效果
方法
定制化的自级联超分辨率
直接生成高分辨率结果容易导致重复对象的出现,破坏原本良好的视觉结构。为了解决这一问题,采用了来自先前研究[13, 14]的自级联超分辨率框架,该框架通过逐步增加生成结果的分辨率来实现高质量的视觉输出。
其中, 表示带噪的中间潜变量, 表示分辨率级别(1代表原始分辨率,2代表高度和宽度的两倍), 是一个上采样操作。通过这种方式, 该框架可以在低分辨率下生成合理的视觉结构, 并在生成高分辨率结果时保持这种结构。
对于 有两种选择:直接在潜变量空间上采样 或在RGB空间上采样( , 其中 和 分别是预训练VAE的编码器和解码器)。在RGB空间上采样更符合人类的预期,但会引入一些模糊效果。通过实验证明,这些模糊会影响视频生成的质量,但有助于在图像生成中抑制冗余的高频信息。因此, 我们在高分辨率图像生成中采用RGB空间上采样, 而在高分辨率视频生成中采用潜变量空间上采样。
细节级别的灵活控制
与超分辨率任务不同,FreeScale 会随着分辨率的增加不断添加更多细节。当所有合理的细节都已生成时,这种行为可能会影响生成质量。为了控制新增细节的级别,我们将我们将 修改为 ,其中
其中, 是一个带有缩放因子 的缩放余弦衰减因子。
即使在同一张图像中, 不同区域的细节级别也会有所不同。为了实现更灵活的控制, 可以是一个二维张量, 允许空间上的变化。在这种情况下, 用户可以根据在前一过程中计算的 , 为不同语义区域分配不同的值。
受约束的膨胀卷积
ScaleCrafter 发现,导致对象重复问题的主要原因是卷积感受野的限制,并提出使用膨胀卷积来解决该问题。
给定一个隐藏特征图 、一个卷积核 和带有膨胀因子 的膨胀操作 , 膨胀卷积可以表示为:
其中, 、 和 是用于索引特征或卷积核的空间位置,⊛表示卷积操作。
为了避免灾难性的质量下降,ScaleCrafter仅将膨胀卷积应用于 UNet 的部分层,仍保留了多个上采样块(up-blocks)。然而,在上采样块的层中使用膨胀卷积会导致生成许多混乱的纹理。因此,与以往的工作不同,仅在下采样块(down-blocks)和中间块(mid-blocks)的层中应用膨胀卷积。此外,在最后几个时间步中,结果的细节被渲染,而视觉结构几乎固定。因此,在最后几个时间步中使用原始卷积。
尺度融合
虽然定制化的自级联超分辨率和受约束的膨胀卷积能够保持粗略的视觉结构,并有效生成 分辨率的图像,但生成 分辨率的图像仍会出现伪影,例如局部重复(如额外的眼睛或鼻子)。这一问题的根源在于膨胀卷积削弱了对局部特征的关注。DemoFusion通过使用局部块操作增强局部关注解决了这个问题。然而, 尽管局部块操作缓解了局部重复问题, 却在全局范围内引入了小对象的重复。
为结合两种策略的优势,本文设计了尺度融合(Scale Fusion),通过融合不同感受野尺度的信息,实现局部和全局细节的平衡增强。
对于全局信息的提取,采用了全局自注意力特征。原因在于,自注意力层基于相似性增强了块信息,使后续的交叉注意力层更容易将语义聚合成完整的对象。这可以表述为:
其中, 。
在此公式中, 查询 、键 和值 是通过线性层 从 计算得到的, 而 是自注意力的缩放系数。
随后, 自注意力层独立应用于这些局部潜在表示上, 计算为 。然后, 将 重构为原始大小, 并对重叠部分取平均, 得到 ,其中 表示重构过程。
关于局部信息的提取
遵循之前的研究工作 [2, 13, 37],通过局部计算自注意力以增强局部关注。具体而言,首先应用一个偏移裁剪采样,在每个自注意力层之前获得一系列局部潜在表示:
其中
和 分别代表垂直和水平的步幅。
随后,自注意力层独立应用于这些局部潜在表示上,计算为:
所得输出
被映射回原始位置,并对重叠部分取平均,形成:
其中 表示重构过程。
虽然倾向于生成更好的局部结果,但它可能在全局范围内引入意外的小对象重复。这些伪影主要来源于分散的高频信号,而这些信号本应通过全局采样被聚集到正确的区域。
因此, 用来自全局层级 的高频信号替换局部表示中的高频信号:
其中表示高频信号提取操作。
在这里, G 是通过高斯模糊实现的低通滤波器, 表达式 的作用是对 实现高通滤波。
实验
实验设置
实验条件
基于开源文本到图像扩散模型 SDXL 和开源文本到视频扩散模型 VideoCrafter2 进行了实验。考虑到计算资源限制,在图像生成实验中评估了 和 分辨率,视频生成实验中则评估了 640 分辨率。所有实验均使用单张 A800 GPU 完成。
数据集
在 LAION-5B 数据集中随机抽取 1024 条描述语句来评估图像生成性能。为了更贴近人类的审美偏好,我们从 LAION-Aesthetics-V2-6.5plus 数据集中随机选择提示语进行图像生成评估。LAION-Aesthetics-V2-6.5plus 是 LAION-5B 的一个子集,包含高视觉质量的图像,这些图像在美学预测模型中的评分达到 6.5 或更高。
在视频生成评估中,从 WebVid-10M 数据集中随机抽取 512 条描述语句。
评价指标
由于高分辨率推理方法旨在保持原始分辨率输出的质量,我们计算了原始低分辨率图像/视频与对应高分辨率输出之间的所有指标。
- 图像质量评估:我们报告了 **Frechet Image Distance (FID)**和 **Kernel Image Distance (KID)**。FID 和 KID 在比较之前需要将图像调整到 的尺寸,这一操作可能会导致高分辨率图像的质量损失。因此,受前人研究 [8] 启发,我们使用裁剪的局部区域计算这些指标,称为 FIDc 和 KIDc。
- 视频质量评估:我们使用 Frechet Video Distance (FVD) 来评估视频生成的质量。
- 动态性和美学质量:从 VBench中测试了动态程度和美学质量,用以评估视频的动态性和视觉吸引力。
高分辨率图像生成
将 FreeScale 与其他高分辨率图像生成方法进行了对比,包括:
- SDXL 直接推理 (SDXL-DI)
- ScaleCrafter
- DemoFusion
- FouriScale
若兼容,采用 FreeU 作为后处理方法。
定性比较
定性比较结果如下图 3 所示。观察到以下现象:
- 直接生成(SDXL-DI) 通常会导致多个重复对象,并且原始视觉结构丢失。
- ScaleCrafter 容易产生局部重复现象。
- DemoFusion 生成的画面中常伴有孤立的小物体。
- FouriScale 对于某些描述,会大幅改变生成图像的风格。
相比之下,FreeScale 能够生成高质量图像,避免任何意外的重复现象。
定量比较
定量结果进一步证实了 FreeScale 的优越性。如下表 1 所示:
- SDXL-DI 在 FIDc 和 KIDc 指标上表现最佳。这是因为 SDXL-DI 倾向于生成多个重复对象,并且裁剪区域可能更接近参考图像。然而,这种行为会牺牲视觉结构的完整性,因此在分辨率为 的场景下,SDXL-DI 在 FID 和 KID 指标上表现最差。
- 总体上,FreeScale 在所有与质量相关的指标上都取得了最佳或次优成绩,并且额外的时间成本可以忽略不计。
灵活细节控制
此外,FreeScale 提供了对生成结果中细节级别的灵活控制。下图 4 展示了对不同语义区域调整细节级别的示例。
在获得放大后的 1× 结果后,我们可以轻松计算语义mask,并在公式 4 中为每个区域分配不同的值。如下图 4 所示,在 Griffons 区域增加权重系数,而在其他区域降低权重系数时,生成结果会更加优异。
高分辨率视频生成
将 FreeScale 与其他无需调优的高分辨率视频生成方法进行了对比,包括:
- VideoCrafter2 直接推理 (VC2-DI)
- ScaleCrafter
- DemoFusion
由于 FouriScale 结合的 FreeU 在视频生成中表现不佳,因此未进行评估。如下图 5 所示,VC2-DI 和 ScaleCrafter 的行为与它们在图像生成中的表现相似,分别倾向于生成重复的完整对象和局部部分。然而,DemoFusion 在视频生成中表现完全不可预期。其 Dilated Sampling 机制导致所有帧中出现奇怪的图案,而 Skip Residual 操作则使整个视频模糊不清。相比之下,FreeScale 能有效生成高分辨率的视频,且保真度高。下表 3 显示,我们的方法在推理时间较短的情况下取得了最佳的 FVD 分数。更多定量评估可以参考补充材料。
消融实验
FreeScale 主要由三个组件组成:
- 定制自级联上采样
- 限制性膨胀卷积
- 尺度融合
为了直观展示这三个组件的有效性,我们对 SDXL 生成的 和 图像进行了消融实验。首先,展示了在 RGB 空间进行上采样的优势。如下图 6 所示,在潜在空间进行上采样会在狮子眼睛中引入一定的伪影。接着,在上块中膨胀卷积或去除尺度融合会导致生成结果中出现一些杂乱的纹理,这些是由于小范围重复问题引起的。下表 2 显示,在所有实验设置中,我们最终的 FreeScale 在质量相关的指标上都取得了更好的成绩。
结论
FreeScale,一种无需调优的推理范式,旨在增强预训练扩散模型在高分辨率生成中的能力。通过利用多尺度融合和选择性频率提取,FreeScale 有效解决了高分辨率生成中常见的问题,如重复模式和质量退化。实验结果表明,FreeScale 在图像和视频生成中都表现出色,超越了现有方法的视觉质量,同时在推理时间上也具有显著优势。与以前的方法相比,FreeScale 不仅消除了各种形式的视觉重复,而且确保了生成图像中的细节清晰和结构一致性。最终,FreeScale 实现了前所未有的8k 分辨率图像生成。
#Late Chunking×Milvus
如何提高RAG准确率
01.背景
在RAG应用开发中,第一步就是对于文档进行chunking(分块),高效的文档分块,可以有效的提高后续的召回内容的准确性。而对于如何高效的分块是个讨论的热点,有诸如固定大小分块,随机大小分块,滑动窗口重新采样,递归分块,基于内容语义分块等方法。而Jina AI提出的Late Chunking从另外一个角度来处理分块问题,让我们来具体看看。
02.Late Chunking是什么
传统的分块在处理长文档时可能会丢失文档中长距离的上下文依赖关系,这对于信息检索和理解是一大隐患。即当关键信息散落在多个文本块中,脱离上下文的文本分块片段很可能失去其原有的意义,导致后续的召回效果比较差。
以Milvus 2.4.13 release note为例,假如分为如下两个文档块,如果我们要查询Milvus 2.4.13有哪些新功能?
,直接相关内容在分块2里,而Milvus版本信息在分块1里,此时,Embedding 模型很难将这些指代正确链接到实体,从而产生质量不高的Embedding。
由于功能描述与版本信息不在同一个分块里,且缺乏更大的上下文文档,LLM 难以解决这样的关联问题。尽管有一些启发式算法试图缓解这一问题,如滑动窗口重新采样、重叠的上下文窗口长度以及多次文档扫描等,然而,像所有启发式算法一样,这些方法时灵时不灵,它们可能在某些情况下有效,但是没有理论上的保证。
传统的分块采用一种预先分块的策略,即先分块,再过 Embedding 模型。首先依据句子、段落或预设的最大长度等参数对文本进行切割。然后Embedding 模型会对这些分块逐一进行处理,通过平均池化等方法,将 token 级的 Embedding 聚合成单一的块 Embedding 向量。而Late Chunking则是先过 Embedding 模型再分块(late的含义就是在于此,先向量化再分块),我们先将 Embedding 模型的 transformer 层应用到整个文本,为每个 token 生成一个包含丰富上下文信息的向量表示序列。然后,再对这些 token 向量序列进行平均池化,最终得到考虑了整个文本上下文的块 Embedding。
(图片来源:https://jina.ai/news/late-chunking-in-long-context-embedding-models/)
Late Chunking生成的块Embedding,每个块都编码了更多的上下文信息,从而提高了编码的质量和准确性。我们可以通过支持长上下文的 Embedding 模型,如 jina-embeddings-v2-base-en
,它能够处理长达8192个token 的文本(相当于 10 页 A4 纸),基本满足了大多数长文本的上下文需求。
综上所述,我们可以看到Late Chunking在RAG应用中的优势:
- 提高准确性:通过保留上下文信息,与简单分块相比,Late Chunking为查询返回了相关度更高的内容。
- 高效的LLM调用:Late Chunking可以减少传递给LLM的文本量,因为它返回的分块更少且相关度更高。
03.测试Late Chunking
3.1. Late Chunking基础实现
函数sentence_chunker对于原始文档以段落进行分块,返回分块内容以及分块标记信息span_annotations(即分块的开始和结束标记)
def sentence_chunker(document, batch_size=10000):
nlp = spacy.blank("en")
nlp.add_pipe("sentencizer", cnotallow={"punct_chars": None})
doc = nlp(document)
docs = []
for i in range(0, len(document), batch_size):
batch = document[i : i + batch_size]
docs.append(nlp(batch))
doc = Doc.from_docs(docs)
span_annotations = []
chunks = []
for i, sent in enumerate(doc.sents):
span_annotations.append((sent.start, sent.end))
chunks.append(sent.text)
return chunks, span_annotations
函数 document_to_token_embeddings 通过模型 jinaai/jina-embeddings-v2-base-en
的模型以及tokenizer,返回整个文档的Embedding。
def document_to_token_embeddings(model, tokenizer, document, batch_size=4096):
tokenized_document = tokenizer(document, return_tensors="pt")
tokens = tokenized_document.tokens()
outputs = []
for i in range(0, len(tokens), batch_size):
start = i
end = min(i + batch_size, len(tokens))
batch_inputs = {k: v[:, start:end] for k, v in tokenized_document.items()}
with torch.no_grad():
model_output = model(**batch_inputs)
outputs.append(model_output.last_hidden_state)
model_output = torch.cat(outputs, dim=1)
return model_output
函数 late_chunking 对整个文档的Embedding以及原始分块的标记信息span_annotations进行分块。
def late_chunking(token_embeddings, span_annotation, max_length=None):
outputs = []
for embeddings, annotations in zip(token_embeddings, span_annotation):
if (
max_length is not None
):
annotations = [
(start, min(end, max_length - 1))
for (start, end) in annotations
if start < (max_length - 1)
]
pooled_embeddings = []
for start, end in annotations:
if (end - start) >= 1:
pooled_embeddings.append(
embeddings[start:end].sum(dim=0) / (end - start)
)
pooled_embeddings = [
embedding.detach().cpu().numpy() for embedding in pooled_embeddings
]
outputs.append(pooled_embeddings)
return outputs
如使用模型jinaai/jina-embeddings-v2-base-en
进行Late Chunking
tokenizer = AutoTokenizer.from_pretrained('jinaai/jina-embeddings-v2-base-en', trust_remote_code=True)
model = AutoModel.from_pretrained('jinaai/jina-embeddings-v2-base-en', trust_remote_code=True)
# First chunk the text as normal, to obtain the beginning and end points of the chunks.
chunks, span_annotations = sentence_chunker(document)
# Then embed the full document.
token_embeddings = document_to_token_embeddings(model, tokenizer, document)
# Then perform the late chunking
chunk_embeddings = late_chunking(token_embeddings, [span_annotations])[0]
3.2. 与传统Embedding方法对比
我们以milvus 2.4.13 release note 这一段内容为例,
Milvus 2.4.13 introduces dynamic replica load, allowing users to adjust the number of collection replicas without needing to release and reload the collection.
This version also addresses several critical bugs related to bulk importing, expression parsing, load balancing, and failure recovery.
Additionally, significant improvements have been made to MMAP resource usage and import performance, enhancing overall system efficiency.
We highly recommend upgrading to this release for better performance and stability.
分别进行传统Embedding,即先分块,然后进行Embedding。以及Late Chunking方式Embedding,即先Embedding,然后再分块。然后,把 milvus 2.4.13
分别与这两种Embedding方式的结果进行对比
cos_sim = lambda x, y: np.dot(x, y) / (np.linalg.norm(x) * np.linalg.norm(y))
milvus_embedding = model.encode('milvus 2.4.13')
for chunk, late_chunking_embedding, traditional_embedding in zip(chunks, chunk_embeddings, embeddings_traditional_chunking):
print(f'similarity_late_chunking("milvus 2.4.13", "{chunk}")')
print('late_chunking: ', cos_sim(milvus_embedding, late_chunking_embedding))
print(f'similarity_traditional("milvus 2.4.13", "{chunk}")')
print('traditional_chunking: ', cos_sim(milvus_embedding, traditional_embeddings))
从结果来看,词语 milvus 2.4.13
与分块文档Late Chunking结果相似度高于传统Embedding。原因是Late Chunking先对于全部文本段落进行Embedding,使得整个文本段落得到了 milvus 2.4.13
信息,进而在后续的文本比较中显著的提高了相似度。
similarity_late_chunking("milvus 2.4.13", "Milvus 2.4.13 introduces dynamic replica load, allowing users to adjust the number of collection replicas without needing to release and reload the collection.")
late_chunking: 0.8785206
similarity_traditional("milvus 2.4.13", "Milvus 2.4.13 introduces dynamic replica load, allowing users to adjust the number of collection replicas without needing to release and reload the collection.")
traditional_chunking: 0.8354263
similarity_late_chunking("milvus 2.4.13", "This version also addresses several critical bugs related to bulk importing, expression parsing, load balancing, and failure recovery.")
late_chunking: 0.84828955
similarity_traditional("milvus 2.4.13", "This version also addresses several critical bugs related to bulk importing, expression parsing, load balancing, and failure recovery.")
traditional_chunking: 0.7222632
similarity_late_chunking("milvus 2.4.13", "Additionally, significant improvements have been made to MMAP resource usage and import performance, enhancing overall system efficiency.")
late_chunking: 0.84942204
similarity_traditional("milvus 2.4.13", "Additionally, significant improvements have been made to MMAP resource usage and import performance, enhancing overall system efficiency.")
traditional_chunking: 0.6907381
similarity_late_chunking("milvus 2.4.13", "We highly recommend upgrading to this release for better performance and stability.")
late_chunking: 0.85431844
similarity_traditional("milvus 2.4.13", "We highly recommend upgrading to this release for better performance and stability.")
traditional_chunking: 0.71859795
3.3. Milvus中测试Late Chunking
导入Late Chunking数据到Milvus
batch_data=[]
for i in range(len(chunks)):
data = {
"content": chunks[i],
"embedding": chunk_embeddings[i].tolist(),
}
batch_data.append(data)
res = client.insert(
collection_name=collection,
data=batch_data,
)
查询测试
我们定义cosine相似度查询方法,以及使用Milvus原生查询方法分别对于Late Chunking进行查询。
def late_chunking_query_by_milvus(query, top_k = 3):
query_vector = model(**tokenizer(query, return_tensors="pt")).last_hidden_state.mean(1).detach().cpu().numpy().flatten()
res = client.search(
collection_name=collection,
data=[query_vector.tolist()],
limit=top_k,
output_fields=["id", "content"],
)
return [item.get("entity").get("content") for items in res for item in items]
def late_chunking_query_by_cosine_sim(query, k = 3):
cos_sim = lambda x, y: np.dot(x, y) / (np.linalg.norm(x) * np.linalg.norm(y))
query_vector = model(**tokenizer(query, return_tensors="pt")).last_hidden_state.mean(1).detach().cpu().numpy().flatten()
results = np.empty(len(chunk_embeddings))
for i, (chunk, embedding) in enumerate(zip(chunks, chunk_embeddings)):
results[i] = cos_sim(query_vector, embedding)
results_order = results.argsort()[::-1]
return np.array(chunks)[results_order].tolist()[:k]
从结果来看,两个方法返回内容是一致的,这表明Milvus中对于Late Chunking查询结果是准确。
> late_chunking_query_by_milvus("What are new features in milvus 2.4.13", 3)
['\n\n### Features\n\n- Dynamic replica adjustment for loaded collections ([#36417](https://github.com/milvus-io/milvus/pull/36417))\n- Sparse vector MMAP in growing segment types ([#36565](https://github.com/milvus-io/milvus/pull/36565))...
> late_chunking_query_by_cosine_sim("What are new features in milvus 2.4.13", 3)
['\n\n### Features\n\n- Dynamic replica adjustment for loaded collections ([#36417](https://github.com/milvus-io/milvus/pull/36417))\n- Sparse vector MMAP in growing segment types ([#36565](https://github.com/milvus-io/milvus/pull/36565))...
04.总结
我们介绍了Late Chunking产生的背景,基本概念以及基础实现,然后通过在Mivlus测试发现,Late Chunking效果不错。总体来看,Late Chunking在准确性、效率和易于实施方面的结合,使其成为RAG应用的一个有效的方法。
参考文档:
- https://stackoverflow.blog/2024/06/06/breaking-up-is-hard-to-do-chunking-in-rag-applications
- https://jina.ai/news/late-chunking-in-long-context-embedding-models/
- https://jina.ai/news/what-late-chunking-really-is-and-what-its-not-part-ii/
示例代码:
链接: https://pan.baidu.com/s/1cYNfZTTXd7RwjnjPFylReg?pwd=1234 提取码: 1234
代码在 aws g4dn.xlarge 机器上运行