#Meissonic

来自非自回归模型的反击?全新文生图基座模型:1B文生图Non-AR新范式,专为消费级显卡设计

Meissonic,一个基于非自回归掩码图像建模(MIM)的新型文本到图像(T2I)模型,Meissonic通过一系列技术创新,如增强型Transformer架构、先进的位置编码和动态采样条件,以及特征压缩层,实现了在图像质量和生成效率上的显著提升。

近年来,大语言模型在自然语言处理领域取得了突破性的进展。以LLaMA和Qwen等模型为代表,这些模型通过遵循扩展规律,展现出强大的语言处理能力。这些成功促使研究者们探索类似方法在文生图(T2I)任务中的应用。然而,现有的T2I模型在架构和生成机制上仍存在诸多限制,尤其是在生成高分辨率图像时,效率较低。

在视觉生成领域,扩散模型(如Stable Diffusion和SDXL)已成为主流方法,凭借其优越的生成质量赢得了广泛的应用。研究社区逐渐关注到扩散模型与语言模型截然不同的工作机制会导致其在构建统一的语言-视觉生成模型方面面临挑战。类似地,自回归文生图模型(如LlamaGen)通过预测next-token进行图像生成,但由于生成的图像token数量庞大,自回归文生图模型在效率和分辨率上也存在瓶颈。

Meissonic模型带来了全新的解决方案,基于非自回归的掩码图像建模(MIM),为高效、高分辨率的T2I生成设立了新的标杆。通过架构创新、先进的位置编码策略以及优化的采样方式,Meissonic在生成质量和效率上不仅与领先的扩散模型(如SDXL)相媲美,甚至在某些场景下超越了这些模型。此外,Meissonic利用高质量的数据集,并通过基于人类偏好评分的微观条件进行训练,同时采用特征压缩层,大幅提升了图像的保真度与分辨率。

以下是Meissonic在方法上的几项重要技术改进:

增强型Transformer架构: Meissonic采用了多模态与单模态相结合的Transformer层。多模态Transformer层旨在捕捉语言与视觉之间的交互信息,从未池化的文本表示中提取有用信号,架起两者之间的桥梁;而单模态Transformer层则进一步细化视觉表示,提升生成图像的质量与稳定性。研究表明,这种架构下多模态与单模态Transformer层的1:2比例能够实现最佳性能。

先进的位置编码与动态采样条件: 为了保持高分辨率图像中的细节,Meissonic引入旋转位置编码(RoPE),为queries和keys编码位置信息。RoPE有效解决了随着token数量增加,传统位置编码方法导致的上下文关联丢失问题,尤其是在生成512×512甚至更高分辨率图像时。此外,Meissonic通过引入掩码率作为动态采样条件,使模型能够自适应不同阶段的采样过程,进一步提升图像细节和整体质量。

高质量训练数据与微观条件: Meissonic的训练依赖于经过精心挑选的高质量数据集。为提升图像生成效果,Meissonic在训练中加入了图像分辨率、裁剪坐标及人类偏好评分等微观条件,显著增强了模型在高分辨率生成时的稳定性。

特征压缩层: 为了在保持高分辨率的同时提高生成效率,Meissonic引入特征压缩层,使其在生成1024×1024分辨率图像时有效降低计算成本。

那么,Meissonic到底有多厉害呢?

让我们来看看它的表现:

在HPS V2.0基准测试中,Meissonic以平均0.56分的优势超越了SDXL。

51c视觉~合集37_视觉

在图像编辑能力测评数据集Emu-Edit上,Meissonic模型表现出色,其Zero-shot图像编辑性能甚至超越了经过图像编辑指令微调后的模型:

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

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

在风格多样性生成上,Meissonic更是展现出来远超SDXL的性能。同时,在zero-shot inpainting\outpainting和mask-free editing上的表现也可圈可点!

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

而这一切,都只需要SDXL 1/3的推理时间和1/2的显存占用。值得注意的是,Meissonic原生就可以在8GB显存下运行,以后用中低端显卡的宝宝们有福了。

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

此外,Meissonic还展现了超强的zero-shot图像编辑能力,无需微调即可对有mask和无mask的场景进行灵活编辑,提供了更多的创作可能性。

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

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

高效推理与训练的结合

在当下的文本到图像合成领域,Meissonic模型以其卓越的效率脱颖而出。该模型不仅致力于实现高效的推理过程,同时也在训练阶段显著提升了效率。Meissonic通过一套精心设计的四阶段训练流程,逐步提升生成效果。

阶段一:从广泛的数据中理解基础概念

研究发现,原始LAION数据集的文本描述无法充分满足文本到图像模型的训练需求,通常需要多模态大型语言模型(MLLM)进行优化。然而,这种方式计算资源消耗巨大。虽然部分研究使用了广泛标注的SA-10M数据集,但Meissonic团队发现,该数据集在人脸等特定领域仍有不足。因此,Meissonic在初始阶段采用了更加平衡的策略,通过降分辨率的方法提高效率,利用经过筛选的高质量LAION数据学习基础概念。最终保留了约2亿张高质量图像,并将初始训练分辨率设定为256 x 256。

阶段二:通过长提示增强文本与图像的配对

在第一阶段,模型的训练未依赖于高质量的图文配对数据。为了弥补这一点,第二阶段的重点在于提升模型理解长文本描述的能力。团队筛选了审美分数高于8的图像,并引入了120万对优化后的合成图文对及600万对内部高质量的图文对。此阶段,训练分辨率提升至512 x 512,配对数据总量达到约1000万对。通过这一阶段,Meissonic在处理复杂提示(如多样风格和虚拟角色)以及抽象概念方面展现了显著进步。

阶段三:特征压缩实现高分辨率图像生成

在Masked Image Modeling(MIM)领域,生成高分辨率图像依然是一大挑战。与使用外部超分辨率模块的方式不同,Meissonic通过特征压缩技术高效实现了1024 x 1024分辨率的图像生成。引入特征压缩层后,模型可以在较低计算成本下实现从512 x 512到1024 x 1024的顺畅过渡。此阶段的数据集经过进一步筛选,仅保留了约600万对高分辨率、高质量的图文配对,以1024分辨率进行训练。

阶段四:精细化高分辨率图像的美学生成

在最后阶段,Meissonic通过低学习率微调模型和文本编码器,并引入人类偏好评分作为训练条件,进一步提升了模型生成的图像质量和多样性。这一阶段的训练数据与第三阶段保持一致,但更注重对高分辨率图像生成的美学细节的打磨。

基于前述四个阶段的训练,Meissonic在训练数据和计算成本上显著减少。具体来说,Meissonic在训练过程中,仅使用了210万张图像,相较于其他主流模型(如SD-1.5和Dall-E 2),训练数据的使用量显著降低。在使用8个A100 GPU进行训练的情况下,Meissonic的训练时间仅需19天。这一时间显著低于Würstchen、SD-2.1等模型的训练时间。

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

广泛影响

最近,移动设备上的端侧文本到图像应用如谷歌Pixel 9的Pixel Studio和苹果iPhone 16的Image Playground应运而生。这些创新反映出提升用户体验和保护隐私的日益趋势。作为一种开创性的资源高效的文本到图像基座模型,Meissonic在这一领域代表了重要的进展。

相关链接:

arXiv Paper: https://arxiv.org/abs/2410.08261

GitHub Code: https://github.com/viiika/Meissonic

Huggingface Model: https://huggingface.co/MeissonFlow/Meissonic






#Sana

4K分辨率拿下!超强杀器SANA:线性扩散模型+文生图+高分辨率+从头训练的极佳范本!Sana通过32倍压缩率的AutoEncoder、线性注意力机制、Decoder-only的文本编码器以及高效的训练和采样方法,实现了在计算效率和图像质量上的显著提升。sana能够快速生成高达4K分辨率的高质量图像,并且可以在笔记本电脑的GPU上运行。

线性扩散模型 + 文生图 + 高分辨率 + 从头训练的极佳范本。

NVIDIA 的研究员们,联合 MIT 韩松团队等一起提出 Sana 模型,是一个基于扩散模型的文生图框架,可以高效生成高达 4K (4096×4096) 分辨率的图像。Sana 可以非常快的速度生成文本图像对齐得很好的高分辨且高质量图片,而且可以部署在笔记本电脑的 GPU 上。

Sana-0.6B 与超大型扩散模型 (如 Flux-12B) 相比很有竞争力,同时比后者小 20 倍,吞吐量快 100+ 倍。Sana-0.6B 也可以部署在 16GB 笔记本电脑 GPU 上,生成 1K (1024×1024) 分辨率的图像需要的时间不到 1 秒。

下图 1(a) 是 1.6B 的 Sana 模型的生成结果采样。图 1(b) 和 1(c) 分别是生成 1024×1024 和 4096×4096 图片时不同模型的延时数据对比。

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

图1(a):1.6B 的 Sana 模型的生成结果采样。图 1(b), 1(c):生成 1024×1024 和 4096×4096 图片时不同模型的延时数据对比

本文的核心贡献包括:

1) 一个 32 倍压缩率的 AutoEncoder: 传统的 AutoEncoder 一般都是压缩 8 倍,本文训练了一个超高倍压缩的 AutoEncoder,可以极大程度降低 latent tokens 的数量。

2) 把 DiT 换成线性注意力的 Linear DiT: 在高分辨率下不损失质量,同时更高效。

3) Decoder-only 的 LLM 作为文本编码器: 把文本编码器从 T5 换成 decoder-only 的小 LLM。同时,设计了一些复杂的人类指令来增强图像-文本对齐。

4) 高效的训练和采样: 提出 Flow-DPM-Solver 减少采样步骤,通过高效的字幕标记和选择加速收敛。

下面是对本文的详细介绍。

1 SANA:高分辨率文生图的线性扩散模型

论文名称:SANA: Efficient High-Resolution Image Synthesis with Linear Diffusion Transformers

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

项目主页:http://nvlabs.github.io/Sana/

1.1 SANA 研究背景

Latent Diffusion Model 对于文生图扩散模型的帮助很大,而且取得了不小的商业价值。研究人员对几个关键点逐渐取得了一些共识:

  1. 把 U-Net 换成 ViT,代表作:PixArt-α,PixArt-Σ,Stable Diffusion 3。
  2. 使用 Vision Language Models (VLM) 对图片做标签,代表作:PixArt-α,Dalle-3,Lumina-Next,Playground v3。
  3. 改进 Variational Autoencoders (VAEs) 或者文本编码器,代表作:SDXL,Stable diffusion v3,Emu。
  4. 高分辨率图像生成,代表作:PixArt-Σ。

另一方面,工业界的模型变得越来越大,参数量从 PixArt 的 0.6B 到 SD3 的 8B,LiDiT 的 10B,Flux 的 12B,Playground v3 的 24B。这种趋势导致训练和推理成本极高,给那些苦于昂贵成本的消费者们带来了挑战。

鉴于这些挑战,本文提出一个关键的问题:能否开发一个高质量且高分辨率的图像生成器,该生成器的计算效率很高,并在云和边缘设备上运行非常快?

本文提出了 Sana,Sana 是一种高效且具有成本效益的训练和合成图像的模型,支持分辨率有 1K (1024×1024) 和 4K (4096×4096)。除了 PixArt-Σ[1]之外,还没有已发表的作品直接探索了 4K 分辨率的图像生成。然而,PixArt-Σ 仅限于生成接近于 4K (3840×2160) 分辨率图像,并且在生成此类高分辨率图像时相对慢。

1.2 Sana 核心贡献

Sana 的几个核心设计:

1) 一个 32 倍压缩率的 AutoEncoder: 传统的 AutoEncoder 一般都是压缩 8 倍 (AE-F8)。与 AE-F8 相比,本文的 AE-F32 使得 latent tokens 节约 16 倍,这对于高效地训练和生成超高分辨率 (例如 4K 图像) 而言至关重要。

2) 高效的线性注意力 Linear DiT: 引入线性 DiT,把计算复杂度从 变为 。同时引入一个 Mix-FFN 模块,把 3×3 Depth-wise 卷积引入 MLP 来聚集局部信息。本文认为:线性注意力可以通过适当的设计实现与普通注意力相当的结果,并且对于高分辨率图像生成更高效 (例如,在 4K 分辨率时加速 1.7 倍)。此外,Mix-FFN 的间接好处是使得模型不再需要位置编码 (NoPE)。首次删除了 DiT 中的位置编码,且没有发现质量损失。

3) Decoder-only 的 LLM 作为文本编码器: 把文本编码器从 T5 换成 decoder-only 的小 LLM Gemma,来增强有关用户提示的理解和推理能力。作者认为原先常用的 T5 或者 CLIP 进行文本编码缺乏强大的文本理解和指令跟踪能力。而 Decoder-only 的 LLM,例如 Gemma,表现出强大的文本理解和推理能力,展示了有效遵循人类指令的能力。其次,本文设计了一些复杂的人类指令来增强图像-文本对齐,来利用LLM强大的指令跟踪、上下文学习和推理能力来改进图像-文本对齐。

4) 高效的训练和采样: 本文提出了一组自动标记和训练策略来提高文本和图像之间的一致性。首先,对于每个图像,利用多个 VLM 来生成重新标题。尽管这些 VLM 的能力各不相同,但它们的互补优势提高了字幕的多样性。此外,本文提出了一种基于 clipscore 的训练策略,根据概率为对应于图像的多个字幕动态选择具有高 clipscore 的标题。实验表明,该方法提高了训练收敛性和图文对齐。此外,本文提出了一种 Flow-DPM-Solver,与广泛使用的 Flow-Euler-Solver 相比,它将推理采样步骤从 28-50 减少到 14-20 步,同时取得了更好的结果。

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

图1:算法-系统联合优化将 4096×4096 图像生成的推理延迟从 469 秒减少到 9.6 秒,实现比目前的 SOTA 模型 FLUX 快 106 倍。测试使用 A100 GPU,batch size 为 1

1.3 32 倍压缩率的 AutoEncoder

Latent Diffusion Model (LDM) 的思想就是令扩散模型在压缩之后的 latent 空间中使用。这个 latent 空间一般是通过一个预训练好的 AutoEncoder 得到的。很多工作诸如 PixArt-a, PixArt- , Stable Diffusion 3 等等采用下采样率  的 AutoEncoder, 把图片从像素空间  映射到  。如果再在 latent 空间使用 Patch 化,最终的 token 数量就会变为  。

之前的 LDM,例如 PixArt-α,PixArt-Σ、SD3 和 Flux,通常使用 AE-F8C4P2 或 AE-F8C16P2,其中 AE 压缩 8 倍,DiT 压缩 2 倍。在本文 Sana 中,将压缩因子缩放到 32 倍,并提出了几种保持质量的技术。

与之前的 AE-F8 不同,本文的目标是增加压缩比。动机是高分辨率图像自然包含更多冗余信息。此外,高分辨率图像 (例如 4K) 的有效训练和推理需要 AutoEncoder 的高压缩比。图 2 表明,在 MJHQ-30K 上,虽然以前的方法 (如 SDv1.5) 尝试使用 AE-F32C64,但质量仍然明显低于 AEF8C4。本文的 AE-F32C32 有效地弥合了这一质量差距,实现了与 SDXL 的 AE-F8C4 相当的重建能力。作者认为 AE 的微小差异不会成为 DiT 能力的瓶颈。

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

图2:不同 AutoEncoder 的重建能力

而且,作者认为 AutoEncoder 应该完全负责压缩,使得我们可以不用通过增加 Patch Size PP 来进一步压缩,从而允许 latent diffusion model 只关注去噪。因此,作者开发了一个下采样因子为 F=32F=32 、通道 C=32C=32 的 AE,并在其 latent 空间中运行扩散模型,Patch Size 为 1 (AE-F32C32P1)。这种设计将 token 的数量减少了 4 倍,显着提高了训练和推理速度,同时降低了 GPU 内存需求。

不同 AutoEncoder 设计消融实验

从模型结构的角度来看,作者实现了几个调整来加速收敛。将 vanilla self attention 机制替换为 linear attention,以提高高分辨率生成的效率。此外,从训练的角度来看,本文提出了一种多阶段训练策略来提高训练稳定性,该策略涉及在 1024 × 1024 图像上微调 AE-F32C32,以在高分辨率数据上获得更好的重建结果。

作者对比了不同 Patch Size: AE-F8C16P4, AE-F16C32P2 和 AE-F32C32P1。这3种设置将 1024×1024 图像压缩为 32 × 32 tokens。FID 结果为 F32C32P1<F16C32P2<F8C16P4,如下图 3 所示。这表明允许 AutoEncoder 只关注高比压缩,并且 Diffusion Model 专注于去噪是最佳选择。

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

图3:Deep Compression AutoEncoder 消融实验

作者对比了 AE-F32 中的不同 Channel 数:最后选择  作为设置。如图 3(b) 所示, 更少的通道更快地收玫, 但重建质量更差。在 35 K 训练步骤后,  和  的收敛速度相似;然而,  产生更好的重建指标, 从而获得更好的 FID 和 CLIP 分数。尽管 C=64 提供了优越的重建, 但其以下 DiT 的训练收玫速度明显慢于  。

1.4 高效的线性注意力线性 DiT

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

图4:Sana 模型架构。(a) 训练的 pipeline;(b) Linear DiT 模块的具体架构以及 Mix-FFN 结构

本文所使用的 Linear attention 模块的示意图如图 4 所示。Self-attention 的计算复杂度为  ,在处理高分辨率图像时计算效率较低,开销较大。为了解决这个问题,作者首先提出了 Linear DiT,它完全用 Linear Attention 替换了原始的 Self-Attention,在不影响性能的情况下在高分辨率生成中实现了更高的计算效率。

此外,作者使用 Mix-FFN 来替换原始的 MLP-FFN,结合 3×3 Depth-wise Convolution 来更好地聚合 token 信息,同时保持 DiT 的宏观架构设计以保持简单性和可扩展性。

下面是 Linear attention 的表达式,作为初步探索,作者使用了一个简单的形式:

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

因为  和  只需要计算 1 次,可以被不同的  所复用, 所以内存和计算方面的计算复杂度为  。

Mix-FFN 模块。 与 Softmax 注意力相比,Linear attention 模型受益于计算复杂度的降低和更低的延迟。然而,没有非线性的相似度函数可能会导致次优的性能。作者在图像生成中观察到了类似的结论,其中 Linear attention 模型的收敛速度较慢。为了进一步提高训练效率,作者将原始 MLP-FFN 替换为 Mix-FFN。Mix-FFN 由倒置残差块、3×3 Depth-wise Convolution 和 GLU 组成。Depth-wise Convolution 增强了模型捕获局部信息的能力,弥补了 ReLU Linear attention 的较弱局部信息捕获能力。

不使用位置编码 (NoPE) 的 DiT。 作者发现,删除位置编码也不会损失性能。与之前主要使用绝对位置编码、可学习位置编码和 RoPE 的方法相比,本文提出了 NoPE,第一个完全省略了 DiT 中的位置编码设计。

Triton 加速训练和推理。 为了进一步加速线性注意力,作者使用 Triton[2]来融合线性注意块的前向和后向传递的Kernel,以加快训练和推理速度。通过将所有逐元素操作 (包括激活函数、精度转换、填充操作和除法) 融合到矩阵乘法中,作者减少了与数据传输相关的开销。

1.5 Decoder-only 的 LLM 作为文本编码器

最先进的 LLM 是在大规模的数据上训练的 Decoder-only 的 GPT 架构。与 T5 相比,Decoder-only 的 LLM 具有强大的推理能力。它们可以通过使用思维链 (CoT) 和上下文学习 (ICL) 来跟踪复杂的人类指令。一些小的 LLM,如 Gemma-2[3],可以与大型 LLM 的性能相媲美,同时非常高效。因此,本文作者选择采用 Gemma-2 作为文本编码器。

如下图 5 所示,与 T5-XXL 相比,Gemma-2-2B 的推理速度快 6 倍,而 Gemma-2B 的性能在 Clip Score 和 FID 方面与 T5-XXL 相当。

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

图5:不同文本编码器比较。所有模型都使用具有 FP16 精度的 A100 GPU 进行测试。Gemma-2B 模型以相似的速度实现了比 T5-large 更好的性能,并且与更大、更慢的 T5-XXL 的性能相当

使用 LLM 作为文本编码器稳定训练:作者提取 Gemma2 Decoder 的最后一层特征作为 text Embedding。作者凭经验发现,直接使用 T5 的文本嵌入作为 Cross attention 训练的 Key,Value,图片 token 作为 Query 的方法会导致不稳定,训练损失经常变成 NaN。

作者发现 T5 text embedding 的方差比 Decoder-only 的 LLM 的方差小几个数量级 (Gemma-1-2B、Gemma-2-2B、Qwen-2-0.5B),表明 text embedding 输出中存在很多较大的绝对值。为了解决这个问题,作者在 Decoder-only 的文本编码器之后添加了一个归一化层 (即 RMSNorm),将文本嵌入的方差归一化为 1.0。此外,作者发现了一个有用的技巧,通过初始化一个小的可学习比例因子 (例如 0.01) 并将其乘以文本嵌入来进一步加速模型收敛。

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

图6:使用 text embedding 归一化和小尺度因子的消融实验结果

复杂的人类指令改进文本图像对齐: Gemma 比 T5 具有更好的指令跟随能力。作者可以进一步利用这种能力来加强 text embedding。Gemma 是一个聊天模型,尽管它具有强大的能力,但它在某种程度上可能是不可预测的,因此需要添加指令来帮助它专注于提取和增强提示本身。LiDiT[4]是第一个将简单的人类指令与用户提示相结合的人。在这里,通过使用 LLM 的上下文学习来设计复杂的人类指令 (CHI) 来进一步扩展它。如图 7 所示,在训练期间结合 CHI,无论是从头开始还是通过微调,都可以进一步提高图像-文本对齐能力。

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

图7:复杂人类指令消融实验

此外,如图 8 所示,作者发现当给定一个短提示 (例如 "a cat") 时,CHI 帮助模型生成更稳定的内容。很明显,没有 CHI 的模型经常输出与提示无关的内容。

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

图8:使用或者不使用 CHI 的结果。如果没有 CHI,简单的提示可能会导致较差的生成结果,包括伪影和不详细的结果

1.6 高效的训练和采样

数据调配

多字幕自动标注的 Pipeline:对于每个图像,不论其是否本就有 prompt,都使用 4 个 VLM 对其进行标记:VILA-3B/13B、InternVL2-8B/26B。多个 VLM 可以使字幕更准确、更多样化。

基于 CLIP-Score 的字幕采样器:多个字幕的一个问题是训练期间选择哪一个。随机选择一个有可能选择到低质量的文本并影响模型性能。

本文提出了一个基于 clip score 的采样器, 希望以更大的概率对高质量的文本进行采样。首先计算对应于图像的所有字幕的 clip score  。在采样时, 根据剪辑分数的概率进行采样。在这里, 我们在概率公式中引入了一个额外的超参数温度  。温度可用于调整采样强度。如果温度接近 0,则只采样 clip score 最高的文本。图 9 的结果表明,字幕的变化对图像质量 (FID) 的影响最小,同时在训练期间提高语义对齐。

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

图9:训练期间不同图片-文本对采样策略结果的比较

级联分辨率训练:受益于使用 AE-F32C32P1,作者跳过 256px 分辨率预训练并直接以 512px 分辨率开始预训练,逐渐将模型微调为 1024px、2K 和 4K 分辨率。作者认为,传统的 256px 分辨率的图像丢失了太多详细的信息,导致模型在图像-文本对齐方面学习速度较慢。

Flow-based 训练和推理

训练:

作者分析了 SD3 的 Rectified Flow 的性能,并发现与依赖预测 noise 的 DDPM 不同,1-Rectified Flow (RF)[5]和 EDM[6]使用预测 data 或者 velocity,使得收敛更快,性能更好。

所有这些方法都遵循一个共同的扩散公式:, 其中  表示图像数据, 表示随机噪声,  和  是扩散过程的超参数。

DDPM 的训练目标是预测 noise, 定义为  。

EDM 和 RF 都遵循不同的方法:EDM 旨在以目标  进行预测 data, 而 RF 使用目标  来预测 velocity。

这种从预测 noise 到预测 data 或者 velocity 的转变在  附近至关重要, 其中预测 noise 可能导致不稳定,而预测 data 或者 velocity 提供了更精确和更稳定的估计。正如  所指出的, 附近的注意力激活值更强,进一步强调了准确预测在这个临界点的重要性。这种移位有效地减少了采样过程中的累积误差, 使得收敛更快和性能更好。

推理:

本文修改了原始的 DPM-Solver++  调整 Rectified Flow 公式, 称为 Flow-DPM-Solver。关键调整包括用  替换比例因子 , 其中  保持不变, 但时间步长在  范围内重新定义, 而不是 [1,1000], 遵循 SD3 应用时间步长移位来实现更低的信噪比。此外, 本文模型预测 velocity, 这与原始 DPM-Solver++ 预测 data 不同。具体来说,数据来自: data  其中  是模型预测的速度。

结果如图 10 所示,Flow-DPM-Solver 在 14∼20 步收敛,性能更好,而 Flow-Euler 采样器需要 28∼50 步才能收敛,结果更差。

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

图10:采样步骤对 FID 和 CLIP-Score 的影响:Flow DPM-Solver 和 Flow-Euler 的比较

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

图11:256×256 分辨率不同训练计划的比较

1.7 端侧部署

为了实现端侧部署,作者对本文模型使用 8-bit 整数量化。具体来说,作者采用 per-token 对称 INT8 量化激活值,per-channel 对称 INT8 量化权重。此外,为了保持与 16-bit 模型的高度语义相似性,同时产生最小的运行开销,作者以全精度保留归一化层、线性注意力和在 Cross-attention 块内的 Key,Value 投影层。

作者使用 CUDA C++ 中实现了本文的 W8A8 GEMM Kernel,并使用 Kernel Fusion 技术来减轻与不必要的激活负载和存储相关的开销,从而提高整体性能。具体来说,将线性注意的  与 QKV 投影层相结合。作者还将门控线性单元 (GLU) 与 Mix-FFN 中的量化内核融合,并组合其他 Element-Wise 的操作。此外,作者调整了激活布局,以避免 GEMM 和 Conv Kernel 中的任何转置操作。

下图 12 展示了在 4090 GPU 的客户级边缘设备上部署优化前后的速度比较。为了生成 1024×1024 分辨率的图像,本文优化的实现实现了 2.4 倍的加速,只需要 0.37 秒,同时保持几乎无损的图像质量。

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

图12:边缘设备上部署:W8A8 量化推理引擎使用单个 RTX-4090 GPU 在客户级边缘生成 1024px 图像时实现了 2.4 倍的加速。Sana 的性能是在 MJHQ-30K 上使用 CLIP-Score 和 Image-Reward 来评估的 (前 1K 张图片)

1.8 模型架构细节和评测标准

下图 13 展示了网络架构的详细信息。Sana-0.6B 仅包含 590M 参数,层数和 Channel 数与原始 DiT-XL 和 PixArt-Σ 几乎相同。Sana-1.6B 将参数增加到 1.6B,每层有 20 层,每层 2240 个 Channel,并将 FFN 中的 Channel 增加到 5600。作者认为将模型层保持在 20 到 30 之间在效率和质量之间取得了很好的平衡。

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

图13:Sana 模型架构

作者使用 5 个主流评估指标来评估 Sana 的性能:FID、Clip Score、GenEval、DPG-Bench 和 ImageReward,并将其与 SOTA 方法进行比较。在 MJHQ-30K 数据集上评估 FID 和 Clip 分数,该数据集包含来自 Midjourney 的 30K 图像。GenEval 和 DPG-Bench 都专注于测量文本图像对齐,分别有 533 和 1,065 个测试 Prompt。ImageReward 评估人类的偏好性能并包括 100 个 Prompt。

1.9 性能比较

作者将 Sana 与最先进的文生图扩散模型进行对比,结果如图 14 所示。对于 512×512 分辨率,Sana-0.6 展示了比具有相似尺寸的 PixArt-Σ 快 5 倍的吞吐量,并且在 FID、Clip Score、GenEval 和 DPG-Bench 中明显优于 PixArt-Σ。对于 1024×1024 分辨率,Sana 比大多数具有 3B 参数的模型都强得多,并且在推理延迟方面表现出色。即使与更高级的大模型 FLUX-dev 相比,Sana 也能实现有竞争力的性能。比如,DPG-Bench 的精度在 GenEval 上轻微下降,但是 Sana-0.6B 的吞吐量快 39 倍,Sana-1.6B 快 23 倍。

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

图14:效率和性能方面与 SOTA 方法的综合比较。速度在 FP16 Precision 的 A100 GPU 上测试。吞吐量:用 batch=16 测量。延时:用 batch=1 和 sampling step=20 测量

在下图 15 中,作者分析了在 1024×1024 分辨率下将原始 DiT 模块替换为相应的 Linear DiT 模块的效率。可以观察到,使用 AE-F8C4P2,用 Linear attention 替换原始的 Self-attention 可以将延迟从 2250ms 降低到 1931ms,但生成结果更差。用本文的 Mix-FFN 替换原始 FFN 补偿性能损失,尽管它牺牲了一些效率。通过 Triton Kernel Fusion,Linear DiT 最终可以在 1024×1024 尺度上比原始 DiT 稍快,并且在更高的分辨率下更快。此外,当从 AE-F8C4P2 升级到 AE-F32C32P1 时,MAC 可以进一步减少 4 倍,吞吐量也可以提高 4 倍。Triton Kernel Fusion 可以带来约 10% 的加速。

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

图15:Sana Block Design Space 性能。速度在 1024×1024 大小的 FP16 Precision 的 A100 GPU 上进行测试。MAC:单次前向传递的多累积操作。TP (吞吐量):用batch=16测量。延时:用batch=1测量

下图 16 左侧比较了 Sana、Flux-dev、SD3 和 PixArt-Σ 的生成结果。

第 1 行文本渲染的中,PixArt-Σ 缺乏文本渲染能力,而 Sana 可以准确地呈现文本。

第 2 行中,Sana 和 FLUX 生成的图像质量具有可比性,而 SD3 的文本理解不准确。

图 16 的右侧显示 Sana 可以成功地在本地部署在笔记本电脑上。

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

图16:左:Sana-1.6B 与 FLUX-dev、SD3 和 PixArt-Σ 的可视化比较。速度在具有 FP16 精度的 A100 GPU 上进行了测试。右图:量化 Sana-1.6B 可部署在 GPU 笔记本电脑上,在 1 秒内生成 1K×1K 图像







#MonST3R

UC伯克利、DeepMind等提出的运动状态下估算几何图形的先进方法

本篇分享论文MonST3R: A Simple Approach for Estimating Geometry in the Presence of Motion,探索在运动状态下估算几何图形的简单方法——MonST3R。作者来自UC伯克利、DeepMind等。

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

代码链接:https://github.com/Junyi42/monst3r

项目链接:https://monst3r-project.github.io/

演示链接:https://monst3r-project.github.io/page1.html

视频结果展示:

摘要

从动态场景中估计几何形状,尤其是物体随时间移动和变形的情景,仍然是计算机视觉中的一个核心挑战。目前的方法通常依赖多阶段管道或全局优化,将问题分解为深度和光流等子任务,使得系统复杂且容易出错。

本文提出一种新的以几何为中心的方法—— Motion DUSt3R(MonST3R),直接从动态场景中估计每个时间步的几何形状。其中关键见解是,通过简单地为每个时间步估计点图,可以有效地将 DUST3R 的表示(之前仅用于静态场景)适应于动态场景。然而,这种方法面临一个重大挑战:缺乏适合的训练数据,即带有深度标签的动态视频。

但作者表示,通过将问题视为微调任务,识别多个合适的数据集,并在有限的数据上有策略地训练模型,也能成功使模型能够处理动态场景,即使没有明确的运动表示。基于此,针对几个下游视频特定任务引入了新的优化,并在视频深度和相机姿态估计方面表现出色,超越了之前的工作,展现出更高的鲁棒性和效率。此外,MonST3R 在前馈 4D 重建方面也显示出良好的结果。

方法

本文利用 DUSt3R 的点图表示来直接估计动态场景的几何形状。DUSt3R 的点阵图表示法:估算两帧的 xyz 坐标,并以第一帧的相机坐标对齐。但对于 DUSt3R 是否可以有效地处理带有移动物体的视频数据。作者发现 DUSt3R 训练数据分布存在两个重大限制。

如下图所示:

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

DUSt3R 在动态场景中的局限性

  • 左图:DUSt3R 对齐了移动的前景主体,但由于只在静态场景中进行了训练,因此对齐了背景点。
  • 右图:DUSt3R 无法估计前景主体的深度,将其置于背景中。

但引起这些局限的主要问题是数据缺失,因此通过对一小部分动态视频进行微调,可以使 DUSt3R 适应动态场景,效果出人意料地好。

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

用于动态场景微调的训练数据集

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

关于微调的消融研究

主要贡献:

  • 提出 Motion DUSt3R (MonST3R),一种几何优先的动态场景方法,它能以点图的形式直接估计几何图形,即使是移动的场景元素也不例外。为此,确定几个合适的数据集,可喜的是,小规模的微调也能够实现动态场景直接几何估计的良好结果。
  • MonST3R 在多个下游任务(视频深度和相机位姿估计)上取得了令人满意的结果。与之前的工作相比,MonST3R 尤其具有以下主要优势:
  • 鲁棒性更强,尤其是在具有挑战性的场景中;
  • 与基于优化的方法相比,速度更快;
  • 在视频深度估计、相机位姿估计和密集重建方面,与专门技术相比,结果更具竞争力。

实验结果video depth estimation(视频深度估计)

定量结果

从定量结果来看,视频深度估计与该特定任务方法相比性能仍有竞争力,甚至与最近发布的DepthCrafter相当。

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

定性结果

从定性结果来看,MonST3R 与真实深度的对齐效果更好,如下图 Bonn 数据集中第一行的结果。

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

在Bonn数据集上的视频深度评估,预测的深度经过了尺度和偏移对齐处理。

camera pose estimation(相机位姿估计)

定量结果

从定量结果来看,相机位姿估计结果在与任务特定方法的比较中同样具有竞争力。

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

定性结果

从下图的定性结果看,MonST3R 在具有挑战性的场景中表现更具鲁棒性,例如 Sintel 中的 cave_2 和 temple_3。

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

在Sintel数据集上的相机位姿估计结果

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

在Scannet数据集上的相机位姿估计结果

joint dense reconstruction and pose estimation(联合密集重建和位姿估计)

定性结果

从下图定性结果来看,MonST3R同时输出可靠的相机轨迹和动态场景的几何形状。

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

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

在DAVIS数据集上的联合密集重建和位姿估计结果

另外,作者在社交媒体上表示,该结果的速度比以前的方法快 10 倍。

Pairwise prediction(成对预测)

最后,还展示了前馈成对点图预测的结果,如下图。

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

第一行表明,即使经过微调,所提出方法仍然能够处理不断变化的相机内参。简言之就是可以可以处理动态焦点。

第二行和第三行表明,所提出方法能够处理“impossible”的对齐情况,即两帧图像几乎没有重叠,即使在有运动的情况下也是如此,而不像 DUSt3R 会根据前景物体进行错误对齐。简言之,可以在动态场景中进行“不可能匹配”。

第四行和第五行表明,除了使模型能够处理运动之外,微调还提高了模型表征大尺度场景的能力,而 DUSt3R 预测大尺度场景是平面的。简言之,可以更好地估计大场景中的几何图形。

4D 在线演示

特别值得一提的是,作者还提供了一个有趣的 4D 在线演示,可以探索 MonST3R 对各种动态场景的 4D 重建结果,感兴趣的小伙伴可以前来了解!

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

  • 可交互结果展示:https://monst3r-project.github.io/page1.html

结论

MonST3R,是一种直接估算动态场景几何图形并提取相机姿态和视频深度等下游信息的简单方法。

MonST3R 利用每个时间步长的点图作为动态场景的强大表示法。尽管在相对较小的训练数据集上进行了微调,但 MonST3R 在下游任务上仍然取得了令人印象深刻的结果,甚至超过了之前最先进的特定技术。







#ClearCLIP

倒反天罡,删除两个组件反而可以提升密集预测性能

本文介绍了一种名为ClearCLIP的视觉-语言推理模型,它通过在CLIP模型的最后一层中去除残差连接、采用自注意力机制和舍弃前馈网络(FFN),来增强模型在密集视觉-语言推理任务中的性能,特别是在开放词汇语义分割任务上。ClearCLIP在多个基准测试中表现出比现有方法更清晰、更准确的分割图。 

  • 论文地址:https://arxiv.org/abs/2407.12442
  • 论文代码:https://github.com/mc-lan/ClearCLIP

创新点

  • 发现两个关键因素在将CLIP适配密集视觉-语言推理中起着至关重要的作用:残差连接影响的减少以及通过自注意力机制的空间信息重组。
  • 提出ClearCLIP,在CLIP的最后一层中进行了三项简单的修改:去除残差连接、最后一个注意力层中采用自注意力机制以及舍弃前馈网络(FFN)。这些修改旨在增强注意力输出,从而为开放词汇语义分割任务生成更清晰的表示。

内容概述

尽管大规模预训练的视觉-语言模型(VLMs),特别是CLIP在各种开放词汇任务中取得了成功,但它们在语义分割中的应用仍然面临挑战,常常产生噪声分割图,存在误分割区域。

论文仔细重新审视了CLIP的架构,并确定残差连接是降低分割质量的主要噪声源。通过对不同预训练模型中残差连接与注意力输出的统计特性进行比较分析,发现CLIP的图像-文本对比训练范式强调全局特征,而牺牲了局部可区分性,从而导致噪声分割结果。

为此,论文提出了ClearCLIP,这是一种新颖的方法,旨在分解CLIP的表示,以增强开放词汇语义分割。对最终层进行了三项简单的修改:去除残差连接、最后一个自注意力层中采用自注意力机制以及丢弃前馈网络。ClearCLIP可以一致地产生更清晰、更准确的分割图,并在多个基准测试中超过现有方法。

ClearCLIP

基于ViT的CLIP模型由一系列残差注意力块组成。

舍弃残差连接

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

通过比较COCOStuff数据集中CLIP-B/16和CLIP-L/14模型最后一个模块的残差连接 与不同注意力输出 的范数来开始分析,可以很容易地观察到这两个子图的共性和差异:

  1. 共性在于mIoU曲线和的范数曲线表现出一定程度的正相关。
  2. 差异包括:1)CLIP-B/16中的范数远小于CLIP-L/14的范数;2)CLIP-B/16中的注意力修改在q-k基线之上表现出一致的改善,而CLIP-L/14中的情况则没有。

因此,当的影响(或范数)最小化时,注意力修改才是有效的。换句话说,显著削弱了CLIP在密集推断任务上的表现。

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

为了验证这一假设, 基于 CLIP-B / 16 使用  、  和  进行开放词汇语义分割实验。COCOStuff 数据集上的实验结果如图 3 所示, 发现  的 mIoU 接近于零, 这表明残差连接可能对图像分割没有帮助。相反,仅使用  的 mIoU 显著高于  。图3中的可视化结果表明,CLIP 的噪声分割图可以分解为一个模糊的  图和一个更清晰的  图。根据这些实验结果,可以初步得出结论:分割图中的噪声主要来源于残差连接。

为了进一步证明  如何影响 CLIP 的性能, 引入了一个缩放因子 , 使得  ,该因子控制  相对于  的相对影响。实验表明表明更大的  显著提升了性能,这清楚地说明了  对性能的不利影响。

最后,论文建议直接舍弃残差连接以在密集的视觉-语言推理任务中实现最佳性能。

舍弃前馈网络(FFN)

Transformer架构中的前馈网络(FFN)在建模数据中的关系和模式方面起着至关重要的作用,但最近的研究显示,FFN在推理过程中对图像表示的影响微乎其微。最后一个注意力模块中的FFN特征与最终分类特征的余弦角度明显更大,因此建议在密集预测任务中舍弃FFN。

在应用于基础CLIP模型时,论文发现移除FFN对开放词汇语义分割任务的影响较小。但当与去除残差连接相结合时,舍弃FFN会导致结果的改善,特别是在模型规模较大的情况下。这种改进的原理在于,去除残差连接显著改变了FFN的输入,从而影响其输出。因此,去除FFN的输出可能会减轻其对性能的负面影响。

自注意力机制

基于上述分析,使用最后一个自注意力层的注意力输出用于视觉-语言推理。

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

受到之前工作的启发, 可以在注意力机制  中使用不同的查询-键组合。实际上,  在大多数情况下始终能够实现更好的性能,因此选择默认使用它。

主要实验

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

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

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








#60行代码训练/微调 Segment Anything 2 (SAM 2)

SAM2(Segment Anything 2)是 Meta 推出的一款新模型,旨在分割图像中的任何内容,而不局限于特定的类别或领域。该模型的独特之处在于其训练数据规模:1100 万张图像和 110 亿个掩码。这种广泛的训练使 SAM2 成为训练新图像分割任务的强大起点。

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

    你可能会问,如果 SAM 可以分割任何东西,为什么我们还需要重新训练它?答案是,SAM 非常擅长处理常见物体,但在罕见或特定领域的任务上表现不佳。

    然而,即使在 SAM 给出的结果不足的情况下,仍然可以通过对新数据进行微调来显著提高模型的能力。在许多情况下,这将比从头开始训练模型需要更少的训练数据并获得更好的结果。

    本教程演示了如何仅用 60 行代码(不包括注释和导入)对新数据进行 SAM2 微调。

    完整的训练脚本可以在以下位置找到:

https://github.com/sagieppel/fine-tune-train_segment_anything_2_in_60_lines_of_code/blob/main/TRAIN.py?source=post_page-----928dd29a63b3--------------------------------

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

任何内容的细分工作原理

    SAM 的主要工作方式是获取图像和图像中的点,然后预测包含该点的片段的掩码。这种方法无需人工干预即可实现完整的图像分割,并且对片段的类别或类型没有任何限制。

    使用SAM进行全图像分割的流程:

    1. 选择图像中的一组点

    2. 使用 SAM 预测包含每个点的线段

    3, 将结果片段组合成一张地图

    虽然 SAM 也可以利用其他输入,例如蒙版或边界框,但这些输入主要与涉及人工输入的交互式分割相关。在本教程中,我们将重点介绍全自动分割,并且仅考虑单点输入。

下载SAM2并设置环境

    SAM2 可以从以下位置下载:

https://github.com/facebookresearch/segment-anything-2?source=post_page-----928dd29a63b3--------------------------------

    如果您不想复制训练代码,您也可以下载我分叉的版本,其中已经包含TRAIN.py脚本。

https://github.com/sagieppel/fine-tune-train_segment_anything_2_in_60_lines_of_code?source=post_page-----928dd29a63b3--------------------------------

    按照 github 存储库上的安装说明进行操作。

    一般来说,你需要 Python >=3.11 和PyTorch。

    此外,我们将使用 OpenCV,可以使用以下命令安装:

pip install opencv-python

下载预先训练的模型

    您还需要从以下位置下载预先训练的模型:

https://github.com/facebookresearch/segment-anything-2?tab=readme-ov-file#download-checkpoints

    有几种模型可供您选择,所有模型均与本教程兼容。我建议使用训练速度最快的小型模型。

下载训练数据

    在本教程中,我们将使用LabPics1 数据集来分割材料和液体。您可以从此 URL 下载数据集:

https://zenodo.org/records/3697452/files/LabPicsV1.zip?download=1

准备数据读取器

    我们需要编写的第一件事是数据读取器。它将读取并准备网络的数据。

    数据读取者需要生成:

    1. 一张图片

    2. 图像中所有片段的蒙版。

    3. 每个蒙版内的一个随机点

    让我们开始加载依赖项:

import numpy as np
import torch
import cv2
import os
from sam2.build_sam import build_sam2
from sam2.sam2_image_predictor import SAM2ImagePredictor

    接下来我们列出数据集中的所有图像:

data_dir=r"LabPicsV1//" # Path to LabPics1 dataset folder
data=[] # list of files in dataset
for ff, name in enumerate(os.listdir(data_dir+"Simple/Train/Image/")):  # go over all folder annotation
    data.append({"image":data_dir+"Simple/Train/Image/"+name,"annotation":data_dir+"Simple/Train/Instance/"+name[:-4]+".png"})

    现在介绍加载训练批次的主要函数。训练批次包括:一张随机图像、属于该图像的所有分割掩码以及每个掩码中的一个随机点:

def read_batch(data): # read random image and its annotaion from  the dataset (LabPics)


   #  select image


        ent  = data[np.random.randint(len(data))] # choose random entry
        Img = cv2.imread(ent["image"])[...,::-1]  # read image
        ann_map = cv2.imread(ent["annotation"]) # read annotation


   # resize image


        r = np.min([1024 / Img.shape[1], 1024 / Img.shape[0]]) # scalling factor
        Img = cv2.resize(Img, (int(Img.shape[1] * r), int(Img.shape[0] * r)))
        ann_map = cv2.resize(ann_map, (int(ann_map.shape[1] * r), int(ann_map.shape[0] * r)),interpolatinotallow=cv2.INTER_NEAREST)


   # merge vessels and materials annotations


        mat_map = ann_map[:,:,0] # material annotation map
        ves_map = ann_map[:,:,2] # vessel  annotaion map
        mat_map[mat_map==0] = ves_map[mat_map==0]*(mat_map.max()+1) # merged map


   # Get binary masks and points


        inds = np.unique(mat_map)[1:] # load all indices
        points= []
        masks = [] 
        for ind in inds:
            mask=(mat_map == ind).astype(np.uint8) # make binary mask
            masks.append(mask)
            coords = np.argwhere(mask > 0) # get all coordinates in mask
            yx = np.array(coords[np.random.randint(len(coords))]) # choose random point/coordinate
            points.append([[yx[1], yx[0]]])
        return Img,np.array(masks),np.array(points), np.ones([len(masks),1])

    该函数的第一部分是选择一个随机图像并加载它:

ent  = data[np.random.randint(len(data))] # choose random entry
Img = cv2.imread(ent["image"])[...,::-1]  # read image
ann_map = cv2.imread(ent["annotation"]) # read annotation

    请注意,OpenCV 将图像读取为 BGR,而 SAM 需要 RGB 图像。通过使用[…,::-1],我们将图像从 BGR 更改为 RGB。

    SAM 预计图像大小不超过 1024,因此我们将把图像和注释图的大小调整为此大小。

r = np.min([1024 / Img.shape[1], 1024 / Img.shape[0]]) # scalling factor
Img = cv2.resize(Img, (int(Img.shape[1] * r), int(Img.shape[0] * r)))
ann_map = cv2.resize(ann_map, (int(ann_map.shape[1] * r), int(ann_map.shape[0] * r)),interpolatinotallow=cv2.INTER_NEAREST)

    这里的一个重点是,在调整注释地图 ( ann_map ) 的大小时,我们使用INTER_NEAREST模式(最近邻)。在注释地图中,每个像素值都是其所属段的索引。因此,使用不会向地图引入新值的调整大小方法非常重要。

    下一个块特定于 LabPics1 数据集的格式。注释图 ( ann_map ) 包含一个通道中图像中血管的分割图,以及另一个通道中材料注释的图。我们将把它们合并为一张图。

mat_map = ann_map[:,:,0] # material annotation map
ves_map = ann_map[:,:,2] # vessel  annotaion map
mat_map[mat_map==0] = ves_map[mat_map==0]*(mat_map.max()+1) # merged map

    这为我们提供了一个映射 ( mat_map ),其中每个像素的值是其所属段的索引(例如:所有值为 3 的单元格都属于段 3)。我们希望将其转换为一组二进制掩码 (0/1),其中每个掩码对应不同的段。此外,我们希望从每个掩码中提取一个点。

inds = np.unique(mat_map)[1:] # list of all indices in map
points= [] # list of all points (one for each mask)
masks = [] # list of all masks
for ind in inds:
            mask = (mat_map == ind).astype(np.uint8) # make binary mask for index ind
            masks.append(mask)
            coords = np.argwhere(mask > 0) # get all coordinates in mask
            yx = np.array(coords[np.random.randint(len(coords))]) # choose random point/coordinate
            points.append([[yx[1], yx[0]]])
return Img,np.array(masks),np.array(points), np.ones([len(masks),1])

    我们得到了图像(Img)、与图像中的片段相对应的二进制掩码列表(mask),以及每个掩码内单个点的坐标(points)。

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

加载 SAM 模型

    现在让我们加载网络:

sam2_checkpoint = "sam2_hiera_small.pt" # path to model weight
model_cfg = "sam2_hiera_s.yaml" # model config
sam2_model = build_sam2(model_cfg, sam2_checkpoint, device="cuda") # load model
predictor = SAM2ImagePredictor(sam2_model) # load net

    首先,我们在sam2_checkpoint参数中设置模型权重的路径。我们之前从这里 下载了权重。“sam2_hiera_small.pt”指的是小模型,但代码适用于任何模型。无论你选择哪种模型,都需要在model_cfg参数中设置相应的配置文件。配置文件位于主存储库的子文件夹“ sam2_configs/”中。

细分任何事物 总体结构

    在开始训练之前,我们需要了解模型的结构。

    SAM由三部分组成:

    1)图像编码器,2)提示编码器,3)掩码解码器。

    图像编码器负责处理图像并创建图像嵌入。这是最大的组件,训练它需要强大的 GPU。

    提示编码器处理输入提示,在我们的例子中是输入点。

    掩码解码器获取图像编码器和提示编码器的输出并生成最终的分割掩码。

设置训练参数:

    我们可以通过设置来启用掩码解码器和提示编码器的训练:

predictor.model.sam_mask_decoder.train(True) # enable training of mask decoder 
predictor.model.sam_prompt_encoder.train(True) # enable training of prompt encoder

    您可以使用以下方式启用图像编码器的训练:

“ predictor.model.image_encoder.train(True)”

    这将需要更强大的 GPU,但会为网络提供更多的改进空间。如果您选择训练图像编码器,则必须扫描 SAM2 代码以查找“ no_grad”命令并将其删除。(no_grad会阻止梯度收集,这可以节省内存但会阻止训练)。

    接下来,我们定义标准的adamW优化器:

optimizer=torch.optim.AdamW(params=predictor.model.parameters(),lr=1e-5,weight_decay=4e-5)

    我们还将使用混合精度训练,这是一种更节省内存的训练策略:

scaler = torch.cuda.amp.GradScaler() # set mixed precision

主训练循环

    现在让我们构建主要的训练循环。第一部分是读取和准备数据:

for itr in range(100000):
    with torch.cuda.amp.autocast(): # cast to mix precision
            image,mask,input_point, input_label = read_batch(data) # load data batch
            if mask.shape[0]==0: continue # ignore empty batches
            predictor.set_image(image) # apply SAM image encoder to the image

    首先,我们将数据转换为混合精度以实现高效训练:

with torch.cuda.amp.autocast():

    接下来,我们使用之前创建的读取器函数来读取训练数据:

image,mask,input_point, input_label = read_batch(data)

    我们将加载的图像传递给图像编码器(网络的第一部分):

predictor.set_image(image)

    接下来,我们使用网络提示编码器处理输入点:

mask_input, unnorm_coords, labels, unnorm_box = predictor._prep_prompts(input_point, input_label, box=None, mask_logits=None, normalize_coords=True)
  sparse_embeddings, dense_embeddings = predictor.model.sam_prompt_encoder(points=(unnorm_coords, labels),boxes=None,masks=None,)

    请注意,在此部分我们也可以输入框或掩码,但我们不会使用这些选项。

    现在我们对提示(点)和图像进行了编码,最终我们可以预测分割掩码:

batched_mode = unnorm_coords.shape[0] > 1 # multi mask prediction
high_res_features = [feat_level[-1].unsqueeze(0) for feat_level in predictor._features["high_res_feats"]]
low_res_masks, prd_scores, _, _ = predictor.model.sam_mask_decoder(image_embeddings=predictor._features["image_embed"][-1].unsqueeze(0),image_pe=predictor.model.sam_prompt_encoder.get_dense_pe(),sparse_prompt_embeddings=sparse_embeddings,dense_prompt_embeddings=dense_embeddings,multimask_output=True,repeat_image=batched_mode,high_res_features=high_res_features,)
prd_masks = predictor._transforms.postprocess_masks(low_res_masks, predictor._orig_hw[-1])# Upscale the masks to the original image resolution

    该代码的主要部分是model.sam_mask_decoder,它运行网络的 mask_decoder 部分并生成分割掩码(low_res_masks)及其分数(prd_scores)。

    这些掩码的分辨率低于原始输入图像,并在postprocess_masks 函数中调整为原始输入大小。

    这给了我们网络的最终预测:我们使用的每个输入点的3 个分割掩码( prd_masks )和掩码分数( prd_scores)。prd_masks包含每个输入点的 3 个预测掩码,但我们只会使用每个点的第一个掩码。prd_scores包含网络认为每个掩码有多好(或它在预测中的确定性)的分数。

损失函数

    分割损失

    现在我们有了净预测,我们可以计算损失了。首先,我们计算分割损失,这意味着预测的掩模与地面真实掩模相比有多好。为此,我们使用标准交叉熵损失。

    首先,我们需要使用 sigmoid 函数将预测掩码( prd_mask )从 logit 转换为概率:

prd_mask = torch.sigmoid(prd_masks[:, 0])# Turn logit map to probability map

    接下来我们将真实情况掩码转换为 torch 张量:

prd_mask = torch.sigmoid(prd_masks[:, 0 ]) # 将logit图转为概率图

    最后,我们使用基本事实(gt_mask)和预测概率图(prd_mask )手动计算交叉熵损失(seg_loss ) :

seg_loss = (-gt_mask * torch.log(prd_mask + 0.00001 ) - ( 1 - gt_mask) * torch.log(( 1 - prd_mask) + 0.00001 )).mean() # 交叉熵损失

(我们添加 0.0001 以防止对数函数因零值而爆炸)。

Score loss(可选)

    除了掩码之外,网络还会预测每个预测掩码的好坏得分。训练这部分不太重要,但很有用。要训练这部分,我们首先需要知道每个预测掩码的真实得分是多少。也就是说,预测掩码实际上有多好。我们将通过使用交并比 (IOU) 指标比较 GT 掩码和相应的预测掩码来做到这一点。IOU 只是两个掩码之间的重叠部分除以两个掩码的总面积。首先,我们计算预测掩码和 GT 掩码之间的交集(它们重叠的面积):

inter = (gt_mask * (prd_mask > 0.5)).sum(1).sum(1)

    我们使用阈值(prd_mask > 0.5)将预测掩码从概率转换为二元掩码。

    接下来,我们通过将交点除以预测和 gt 掩码的组合面积(并集)来获得 IOU:

iou = inter / (gt_mask.sum(1).sum(1) + (prd_mask > 0.5).sum(1).sum(1) - inter)

    我们将使用 IOU 作为每个 mask 的真实分数,并将预测分数与我们刚刚计算的 IOU 之间的绝对差作为分数损失。

score_loss = torch.abs ( prd_scores[:, 0 ] - iou).mean()

    最后,我们合并分割损失和分数损失(给予第一个更高的权重):

loss = seg_loss+score_loss* 0.05   # 混合损失

最后一步:反向传播和保存模型

    一旦我们得到了损失,一切都完全标准化了。我们使用之前制作的优化器计算反向传播并更新权重:

predictor.model.zero_grad() # 空梯度
scaler.scale(loss).backward()   # 反向传播
scaler.step(optimizer) 
scaler.update() # 混合精度

    我们还希望每 1000 步保存一次训练好的模型:

if itr%1000==0: torch.save(predictor.model.state_dict(), "model.torch") # save model

    由于我们已经计算了 IOU,我们可以将其显示为移动平均值,以查看模型预测随时间的改善程度:

if itr==0: mean_iou=0
mean_iou = mean_iou * 0.99 + 0.01 * np.mean(iou.cpu().detach().numpy())
print("step)",itr, "Accuracy(IOU)=",mean_iou)

    就这样,我们用不到 60 行代码(不包括注释和导入)训练/微调了 Segment-Anything 2。经过大约 25,000 步后,您应该会看到显著的改进。

    该模型将保存到“model.torch”。

    你可以在此处找到完整的训练代码:

https://github.com/sagieppel/fine-tune-train_segment_anything_2_in_60_lines_of_code/blob/main/TRAIN.py?source=post_page-----928dd29a63b3--------------------------------

    本教程每批使用单个图像,更有效的方法是每批使用多个不同的图像,执行此操作的代码位于:

https://github.com/sagieppel/fine-tune-train_segment_anything_2_in_60_lines_of_code/blob/main/TRAIN_multi_image_batch.py

推理:加载并使用训练好的模型:

    现在模型已经微调,让我们用它来分割图像。

    我们将按照以下步骤进行操作:

    加载我们刚刚训练的模型。

    给模型一张图像和一堆随机点。对于每个点,网络将预测包含该点的片段掩码和一个分数。

    将这些蒙版拼接起来形成一张分割图。

    完整代码可从以下位置获取:

https://github.com/sagieppel/fine-tune-train_segment_anything_2_in_60_lines_of_code/blob/main/TEST_Net.py?source=post_page-----928dd29a63b3--------------------------------

    首先,我们加载依赖项并将权重转换为 float16,这使得模型运行速度更快(仅适用于推理)。

import numpy as np 
import torch 
import cv2 
from sam2.build_sam import build_sam2 
from sam2.sam2_image_predictor import SAM2ImagePredictor 


# 对整个脚本使用 bfloat16(节省内存)
 torch.autocast(device_type= "cuda" , dtype=torch.bfloat16).__enter__()

    接下来,我们加载示例图像和想要分割的图像区域的蒙版(下载图像/蒙版):

image_path = r"sample_image.jpg" # path to image
mask_path = r"sample_mask.png" # path to mask, the mask will define the image region to segment
def read_image(image_path, mask_path): # read and resize image and mask
        img = cv2.imread(image_path)[...,::-1]  # read image as rgb
        mask = cv2.imread(mask_path,0) # mask of the region we want to segment


        # Resize image to maximum size of 1024


        r = np.min([1024 / img.shape[1], 1024 / img.shape[0]])
        img = cv2.resize(img, (int(img.shape[1] * r), int(img.shape[0] * r)))
        mask = cv2.resize(mask, (int(mask.shape[1] * r), int(mask.shape[0] * r)),interpolatinotallow=cv2.INTER_NEAREST)
        return img, mask
image,mask = read_image(image_path, mask_path)

    在我们要分割的区域内随机取样30个点:

num_samples = 30  # 要采样的点/段的数量
def  get_points ( mask, num_points ): # 输入掩码内的采样点 points
         =[] 
        for i in  range (num_points): 
            coords = np.argwhere(mask > 0 ) 
            yx = np.array(coords[np.random.randint( len (coords))]) 
            points.append([[yx[ 1 ], yx[ 0 ]]]) 
        return np.array(points) 
input_points = get_points(mask, num_samples)

    加载标准 SAM 模型(与训练中相同)

# 加载模型您需要已经制作好预训练模型
sam2_checkpoint = "sam2_hiera_small.pt" 
 model_cfg = "sam2_hiera_s.yaml" 
 sam2_model = build_sam2(model_cfg, sam2_checkpoint, device= "cuda" ) 
predictor = SAM2ImagePredictor(sam2_model)

    接下来,加载我们刚刚训练的模型的权重(model.torch):

predictor.model.load_state_dict(torch.load("model.torch"))

    运行微调模型来预测我们之前选择的每个点的分割掩模:

with torch.no_grad(): # prevent the net from caclulate gradient (more efficient inference)
        predictor.set_image(image) # image encoder
        masks, scores, logits = predictor.predict(  # prompt encoder + mask decoder
            point_coords=input_points,
            point_labels=np.ones([input_points.shape[0],1])
        )

    现在我们有了预测的掩码及其分数的列表。我们希望以某种方式将它们拼接成一个一致的分割图。但是,许多掩码重叠并且可能彼此不一致。

    拼接方法很简单:

    首先,我们将根据预测分数对预测的掩码进行排序:

masks=masks[:,0].astype(bool)
shorted_masks = masks[np.argsort(scores[:,0])][::-1].astype(bool)

    现在让我们创建一个空的分割图和占用图:

seg_map = np.zeros_like(shorted_masks[ 0 ],dtype=np.uint8) 
occupancy_mask = np.zeros_like(shorted_masks[ 0 ],dtype= bool )

    接下来,我们将蒙版逐一(从高分到低分)添加到分割图中。我们只会在蒙版与之前添加的蒙版一致时才添加蒙版,也就是说,只有当我们要添加的蒙版与已占用区域的重叠度小于 15% 时,我们才会添加蒙版。

for i in range(shorted_masks.shape[0]):
    mask = shorted_masks[i]
    if (mask*occupancy_mask).sum()/mask.sum()>0.15: continue 
    mask[occupancy_mask]=0
    seg_map[mask]=i+1
    occupancy_mask[mask]=1

    seg_mask现在包含预测的分割图,每个分割图有不同的值,背景为 0。

    我们可以使用以下方法将其转换为彩色图:

rgb_image = np.zeros((seg_map.shape[0], seg_map.shape[1], 3), dtype=np.uint8)
for id_class in range(1,seg_map.max()+1):
    rgb_image[seg_map == id_class] = [np.random.randint(255), np.random.randint(255), np.random.randint(255)]
cv2.imshow("annotation",rgb_image)
cv2.imshow("mix",(rgb_image/2+image/2).astype(np.uint8))
cv2.imshow("image",image)
cv2.waitKey()

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

    完整的推理代码可在此处获得:

https://github.com/sagieppel/fine-tune-train_segment_anything_2_in_60_lines_of_code/blob/main/TEST_Net.py?source=post_page-----928dd29a63b3--------------------------------








#Meissonic

来自非自回归模型的反击?全新文生图基座模型Meissonic:1B文生图Non-AR新范式 专为消费级显卡设计

近年来,大语言模型在自然语言处理领域取得了突破性的进展。以LLaMA和Qwen等模型为代表,这些模型通过遵循扩展规律,展现出强大的语言处理能力。这些成功促使研究者们探索类似方法在文生图(T2I)任务中的应用。然而,现有的T2I模型在架构和生成机制上仍存在诸多限制,尤其是在生成高分辨率图像时,效率较低。

在视觉生成领域,扩散模型(如Stable Diffusion和SDXL)已成为主流方法,凭借其优越的生成质量赢得了广泛的应用。研究社区逐渐关注到扩散模型与语言模型截然不同的工作机制会导致其在构建统一的语言-视觉生成模型方面面临挑战。类似地,自回归文生图模型(如LlamaGen)通过预测next-token进行图像生成,但由于生成的图像token数量庞大,自回归文生图模型在效率和分辨率上也存在瓶颈。

Meissonic模型带来了全新的解决方案,基于非自回归的掩码图像建模(MIM),为高效、高分辨率的T2I生成设立了新的标杆。通过架构创新、先进的位置编码策略以及优化的采样方式,Meissonic在生成质量和效率上不仅与领先的扩散模型(如SDXL)相媲美,甚至在某些场景下超越了这些模型。此外,Meissonic利用高质量的数据集,并通过基于人类偏好评分的微观条件进行训练,同时采用特征压缩层,大幅提升了图像的保真度与分辨率。

以下是Meissonic在方法上的几项重要技术改进:

  • 增强型Transformer架构: Meissonic采用了多模态与单模态相结合的Transformer层。多模态Transformer层旨在捕捉语言与视觉之间的交互信息,从未池化的文本表示中提取有用信号,架起两者之间的桥梁;而单模态Transformer层则进一步细化视觉表示,提升生成图像的质量与稳定性。研究表明,这种架构下多模态与单模态Transformer层的1:2比例能够实现最佳性能。
  • 先进的位置编码与动态采样条件: 为了保持高分辨率图像中的细节,Meissonic引入旋转位置编码(RoPE),为queries和keys编码位置信息。RoPE有效解决了随着token数量增加,传统位置编码方法导致的上下文关联丢失问题,尤其是在生成512×512甚至更高分辨率图像时。此外,Meissonic通过引入掩码率作为动态采样条件,使模型能够自适应不同阶段的采样过程,进一步提升图像细节和整体质量。
  • 高质量训练数据与微观条件: Meissonic的训练依赖于经过精心挑选的高质量数据集。为提升图像生成效果,Meissonic在训练中加入了图像分辨率、裁剪坐标及人类偏好评分等微观条件,显著增强了模型在高分辨率生成时的稳定性。
  • 特征压缩层: 为了在保持高分辨率的同时提高生成效率,Meissonic引入特征压缩层,使其在生成1024×1024分辨率图像时有效降低计算成本。

那么,Meissonic 到底有多厉害呢?

让我们来看看它的表现:

在HPS V2.0基准测试中,Meissonic以平均0.56分的优势超越了SDXL。

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

在图像编辑能力测评数据集Emu-Edit上,Meissonic模型表现出色,其Zero-shot图像编辑性能甚至超越了经过图像编辑指令微调后的模型:

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

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

在风格多样性生成上,Meissonic更是展现出来远超SDXL的性能。同时,在zero-shot inpainting\outpainting和mask-free editing上的表现也可圈可点!

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

而这一切,都只需要SDXL 1/3的推理时间和1/2的显存占用。值得注意的是,Meissonic原生就可以在8GB显存下运行,以后用中低端显卡的宝宝们有福了。

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

此外,Meissonic还展现了超强的zero-shot图像编辑能力,无需微调即可对有mask和无mask的场景进行灵活编辑,提供了更多的创作可能性。

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

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

高效推理与训练的结合

在当下的文本到图像合成领域,Meissonic模型以其卓越的效率脱颖而出。该模型不仅致力于实现高效的推理过程,同时也在训练阶段显著提升了效率。Meissonic通过一套精心设计的四阶段训练流程,逐步提升生成效果。

阶段一:从广泛的数据中理解基础概念

研究发现,原始LAION数据集的文本描述无法充分满足文本到图像模型的训练需求,通常需要多模态大型语言模型(MLLM)进行优化。然而,这种方式计算资源消耗巨大。虽然部分研究使用了广泛标注的SA-10M数据集,但Meissonic团队发现,该数据集在人脸等特定领域仍有不足。因此,Meissonic在初始阶段采用了更加平衡的策略,通过降分辨率的方法提高效率,利用经过筛选的高质量LAION数据学习基础概念。最终保留了约2亿张高质量图像,并将初始训练分辨率设定为256 x 256。

阶段二:通过长提示增强文本与图像的配对

在第一阶段,模型的训练未依赖于高质量的图文配对数据。为了弥补这一点,第二阶段的重点在于提升模型理解长文本描述的能力。团队筛选了审美分数高于8的图像,并引入了120万对优化后的合成图文对及600万对内部高质量的图文对。此阶段,训练分辨率提升至512 x 512,配对数据总量达到约1000万对。通过这一阶段,Meissonic在处理复杂提示(如多样风格和虚拟角色)以及抽象概念方面展现了显著进步。

阶段三:特征压缩实现高分辨率图像生成

在Masked Image Modeling(MIM)领域,生成高分辨率图像依然是一大挑战。与使用外部超分辨率模块的方式不同,Meissonic通过特征压缩技术高效实现了1024 x 1024分辨率的图像生成。引入特征压缩层后,模型可以在较低计算成本下实现从512 x 512到1024 x 1024的顺畅过渡。此阶段的数据集经过进一步筛选,仅保留了约600万对高分辨率、高质量的图文配对,以1024分辨率进行训练。

阶段四:精细化高分辨率图像的美学生成

在最后阶段,Meissonic通过低学习率微调模型和文本编码器,并引入人类偏好评分作为训练条件,进一步提升了模型生成的图像质量和多样性。这一阶段的训练数据与第三阶段保持一致,但更注重对高分辨率图像生成的美学细节的打磨。

基于前述四个阶段的训练,Meissonic在训练数据和计算成本上显著减少。具体来说,Meissonic在训练过程中,仅使用了210万张图像,相较于其他主流模型(如SD-1.5和Dall-E 2),训练数据的使用量显著降低。在使用8个A100 GPU进行训练的情况下,Meissonic的训练时间仅需19天。这一时间显著低于Würstchen、SD-2.1等模型的训练时间。

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

广泛影响

最近,移动设备上的端侧文本到图像应用如谷歌Pixel 9的Pixel Studio和苹果iPhone 16的Image Playground应运而生。这些创新反映出提升用户体验和保护隐私的日益趋势。作为一种开创性的资源高效的文本到图像基座模型,Meissonic在这一领域代表了重要的进展。

相关链接:

  • arXiv Paper: https://arxiv.org/abs/2410.08261
  • GitHub Code: https://github.com/viiika/Meissonic
  • Huggingface Model: https://huggingface.co/MeissonFlow/Meissonic








#PredFormer

无循环!无卷积!时空预测学习新里程碑PredFormer,Moving MNIST预测均方误差达11.6,比SimVP直降51%

时空预测学习是一个拥有广泛应用场景的领域,比如天气预测,交通流预测,降水预测,自动驾驶,人体运动预测等。

提起时空预测,不得不提到经典模型ConvLSTM和最经典的benchmark moving mnist,在ConvLSTM时代,对于Moving MNIST的预测存在肉眼可见的伪影和预测误差。而在最新模型PredFormer中,对Moving MNIST的误差达到肉眼难以分辨的近乎完美的预测结果。

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

ConvLSTM

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

PredFormer

在以前的时空预测工作中,主要分为两个流派,基于循环(自回归)的模型,以ConvLSTM/PredRNN//E3DLSTM/SwinLSTM/VMRNN等工作为代表;更近年来,研究者提出无需循环的SimVP框架,由CNN Encoder-Decoder结构和一个时间转换器组成,以SimVP/TAU/OpenSTL等工作为代表。

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

RNN系列模型的缺陷在于,无法并行化,自回归速度慢,显存占用高,效率低;CNN系列模型无需循环提高了效率,得益于归纳偏置,但往往以牺牲泛化性和可扩展性为代价,模型上限低。

于是作者提出了问题,时空预测,真的需要RNN吗?真的需要CNN吗?

是否能够设计一个模型,可以自动地学习数据中的时空依赖,而不需要依赖于归纳偏置呢?

一个直觉的想法是利用Transformer,因为它在各种视觉任务中的广泛成功,并且是RNN和CNN的有力替代者。在此前的时空预测工作中,已有研究者把Transformer嵌入到上述两种框架中,比如SwinLSTM(ICCV23)融合了Swin Transformer和LSTM,比如OpenSTL(NeurIPS23)把各种MetaFormer结构(比如ViT,Swin Transformer等)作为SimVP框架中的时间转换器。但是,纯Transformer结构的网络鲜有探索。

设计纯Transformer模型的挑战在于,如何在一个框架中同时处理时间和空间信息。一个简单的想法是合并空间序列和时间序列,计算时空全注意力,由于Transformer的计算复杂度是序列长度的二次复杂度,这样的做法会导致计算复杂度较大。

在这篇文章中,作者提出了用于时空预测学习的新框架PredFormer,这是一个纯ViT模型,既没有自回归也没有任何卷积。作者利用精心设计的基于门控Transfomer模块,对3D Attention进行了全面的分析,包括时空全注意力,时空分解的注意力,和时空交错的注意力。

PredFormer 采用非循环、基于Transformer的设计,既简单又高效,更少参数量,Flops,更快推理速度,性能显著优于以前的方法。

在合成和真实数据集上进行的大量实验表明,PredFormer 实现了最先进的性能。在 Moving MNIST 上,PredFormer 相对于 SimVP 实现了 51.3% 的 MSE 降低,突破性地达到11.6。对于 TaxiBJ,该模型将 MSE 降低了 33.1%,并将 FPS 从 533 提高到 2364。

此外,在 WeatherBench 上,它将 MSE 降低了 11.1%,同时将 FPS 从 196 提高到 404。这些准确度和效率方面的性能提升证明了 PredFormer 在实际应用中的潜力。

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

PredFormer模型遵循标准ViT的设计,先对输入进行Patch Embedding,把输入为[B, T, C, H, W]的时空序列转换为[B, T, N, D]的张量。在位置编码环节,作者采用了不同于一般ViT设计的可学习的位置编码,而是采用了基于sin函数的绝对位置编码,作者在消融实验中进一步阐述了绝对位置编码在时空任务中的优越性。

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

PredFormer的编码器部分,由门控Transfomer模块以不同的方式堆叠而成。由于编码器部分是纯Transformer结构,没有任何卷积,也没有分辨率的下降,每一个门控Transformer模块都建模了全局信息,这允许模型只需使用一个简单的解码器就可以构成一个性能强大的预测模型。作者采用了一个线性层作为解码器来进行Patch Recovery,这让模型的输出从[B, T, N, D]恢复到[B, T, C, H, W]。

不同于标准Transformer模型采用MLP作为FFN,PredFormer采用了Gated Linear Unit(GLU)作为FFN,这是受GLU在NLP任务中优于MLP启发的改进。作者在消融实验中进一步阐述了GLU相比于MLP在时空任务上的优越性。

作者对3D Attention进行了全面的分析,并提出了9种PredFormer变体。在以前用于视频分类的Video ViT设计中,TimesFormer(ICML21), ViviT(ICCV21), TSViT(CVPR23)等工作也对时空分解进行了分析,但是TimesFormer是在self-attention层面进行分解,也就是spatial attention和temporal attention共用一个MLP。ViviT则是提出了在Encoder层面(先空间后时间),self-attention层面和head层面进行时空分解。而TSViT发现先时间后空间的Encoder对卫星序列图像分类更有效。

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

不同于以上工作,PredFormer是在Gated Transformer Block(GTB)层面(多了基于Gated Linear Unit)进行时空分解。对时间和空间的self-attention都加GLU是至关重要的,因为它可以让学习到的时空特征相互作用并且增强非线性。

PredFormer提出了时空全注意力Encoder,时间在前和空间在前的2种分解Encoder和6种新颖的时空交错的Encoder,一共9种模型。PredFormer提出了PredFormer Layer的概念,即一个既能建模空间信息,又能建模时间信息的最小单元。基于这种想法,作者提出了三种基本范式,二元组(由一个Temporal GTB和一个Spatial GTB组成,有T-S和S-T两种方式),三元组(T-S-T和S-T-S),四元组(两个二元组以相反的方向重组)。

这一设计源于不同的时空预测任务往往有着不同的空间分辨率和时间分辨率(时间间隔以及变化程度),这意味着不同的数据集上对时间信息和空间信息的依赖程度不同,作者设计了这些模型以提高PredFormer模型在不同任务上的适应性。

在实验部分,作者控制了提出的每种变体使用相同的GTB数目,这可以保证模型的参数量基本一致,从而对比不同模型的性能。对于三元组GTB个数无法整除的情况,选择最为接近的三元组个数。

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

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

实验发现了一些规律,

  1. 时间在前的分解Encoder模型优于时空全注意力模型,由于空间在前的分解Encoder模型;
  2. 时空交错的6种模型在大多数任务上表现都很好,都能达到sota,但最优模型因为数据集本身的不同时空依赖特性而不同,这体现了PredFormer这种框架和时空交错设计的优势;
  3. 作者在讨论环节提出了建议,在其他的时空预测任务上,从四元组-TSST开始尝试,因为这个模型在三个数据集上都表现sota,先调整M个TSST(即4M个门控Transformer)的M参数,然后尝试M个TST和M个STS以确定数据集是时间依赖更强或空间依赖更强的模型。得益于Transformer构架的可扩展性,不同于SimVP框架的CNN Encoder-Decoder模型,对spatial和temporal的hidden dim以及block数都设置了不同的值,PredFormer对spatial和temporal GTB采用相同的固定的参数,因此只需要调整M的值,在比较少次数的调整后就可以达到最优性能。

ViT模型的训练通常要求较大的数据集,在时空预测任务上,大多数据集在几千到几万的量级,数据量少,因此很容易过拟合。作者还探索了不同的正则化策略,包括dropout和drop path,通过广泛的消融实验,作者发现同时使用dropout和uniform的drop path(不同于一般ViT使用线性增加的drop path rate)会产生最优的模型效果。

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

作者还进行了可视化比较,可以看到,在PredFormer相对于TAU明显减少了预测误差。作者还给出了一个特殊例子来证明PredFormer模型相比于CNN模型在泛化性上的优越性。在交通流预测任务上,当第四帧相比前三帧明显减少流量时,TAU受限于归纳偏置仍然预测了较高的流量,而PredFormer却能捕捉到这里的变化。PredFormer预测剧烈变化的能力在交通流和天气预测中可能有非常宝贵的应用价值。

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

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

这篇文章提出了一个无循环,无卷积的纯Transformer模型,并对时空注意力分解进行了全面的分析。PredFormer不仅提供了一个鲁棒的基线模型,还为以后的基于纯Transformer构架的创新工作铺平了道路。

参考文献

[1] PredFormer: Transformers Are Effective Spatial-Temporal Predictive Learners https://arxiv.org/abs/2410.04733








#TopoFR

一、前言

在数字人领域,形象的生成需要依赖于基础的表征学习。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 复形随着尺度参数

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

变化而进化的过程中所呈现的拓扑不变性特征,其主要用于分析复杂点云的潜在拓扑结构。近年来,持续同调技术在信号处理、视频分析、神经科学、疾病诊断以及表征学习策略评估等领域表现出了极大的优势。在机器学习领域,一些研究已经证明了在神经网络训练过程中融入样本的拓扑特征可以有效地提高模型的性能。

符号:

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

表示一个点云,

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

表示一个在

51c视觉~合集37_视觉_71

空间中的距离度量。矩阵

51c视觉~合集37_视觉_72

表示点云

51c视觉~合集37_视觉_73

中各点之间的成对距离矩阵。

Vietoris-Rips 复形:Vietoris-Rips 复形是从度量空间中一组点构建的特殊单纯复形,可用于近似表示底层空间的拓扑结构。对于

51c视觉~合集37_视觉_74

,我们表示点云

51c视觉~合集37_视觉_75

在尺度

51c视觉~合集37_视觉_76

处所对应的 Vietoris-Rips 复形为

51c视觉~合集37_视觉_77

,其包含了点云

51c视觉~合集37_视觉_78

中所有的单纯形(即子集),并且点云

51c视觉~合集37_视觉_79

中的每个成分满足一个距离约束:

51c视觉~合集37_视觉_80

51c视觉~合集37_视觉_81

此外 Vietoris-Rips 复形还满足一个嵌套关系:

51c视觉~合集37_视觉_82

。基于这个关系,我们能够随着尺度系数

51c视觉~合集37_视觉_83

的增加而追踪单纯复形的进化过程。值得注意的是

51c视觉~合集37_视觉_84

51c视觉~合集37_视觉_85

是等价的,因为构建 Vietoris-Rips 复形只需要距离信息。 

同调群:同调群是一种代数结构,用于分析不同维度

51c视觉~合集37_视觉_86

下单纯复形的拓扑特征,例如连通分量 (

51c视觉~合集37_视觉_87

)、环 (

51c视觉~合集37_视觉_88

)、空洞 (

51c视觉~合集37_视觉_89

) 和更高维特征 (

51c视觉~合集37_视觉_90

)。通过跟踪 Vietoris-Rips 复形的拓扑特征 

51c视觉~合集37_视觉_91

随着尺度 

51c视觉~合集37_视觉_92

 增加而呈现的相应变化,可以深入了解底层空间的多尺度拓扑信息。 

持续图和持续配对:持续图

51c视觉~合集37_视觉_93

是笛卡尔平面

51c视觉~合集37_视觉_94

中点

51c视觉~合集37_视觉_95

的多重集合,其编码了关于拓扑特征寿命的信息。具体来说,它总结了每个拓扑特征的诞生时间b和消失时间d ,其中诞生时间b表示特征被创建的尺度,而消失时间d指的是特征被销毁的尺度。持续配对

51c视觉~合集37_视觉_96

包含与持久图

51c视觉~合集37_视觉_97

中标识的拓扑特征的诞生和消失相对应的单纯形

51c视觉~合集37_视觉_98

的索引

51c视觉~合集37_视觉_99

。 


三、方法

1. 本文动机

现存的人脸识别工作主要关注于设计更高效的基于 Margin 的损失函数或者更复杂的网络架构,以此来帮助卷积神经网络更好地捕捉细腻度的人脸特征。

近年来,无监督学习和图神经网络的成功已经表明了数据结构在提升模型泛化能力中的重要性。大规模人脸识别数据集中天然地蕴含着丰富的数据结构信息,然而,在人脸识别任务中,目前还没有研究探索过如何挖掘并利用大规模数据集中所蕴含的结构信息来提升人脸识别模型在真实场景中的泛化性能。因此本文致力于将大规模人脸数据集中内在的结构信息注入进隐层空间中,以此来显著提升人脸识别模型在真实场景中的泛化性能。

我们使用持续同调技术调研了现存的基于卷积神经网络的人脸识别模型框架数据结构信息的变化趋势,如图 1 与图 2 所示,并得到了以下三个新颖观测结论:

(i)随着数据量的增大,输入空间的拓扑结构变得越来越复杂

(ii)随着数据量的增大,输入空间与隐层空间的拓扑结构差异越来越大

(iii)随着网络深度的增加,输入空间与隐层空间的拓扑结构差异越来越小,这也揭示了为什么越深的神经网络能够达到越高的人脸识别精度。

51c视觉~合集37_视觉_100

图 1:我们分别从 MS1MV2 数据集中抽样了 1000(a)、5000(b)、10000(c)和 100000(d)张人脸图像,并使用持续同调技术计算它们的持续图,其中

51c视觉~合集37_视觉_101

表示第j维同调。持续图是用来描述空间拓扑结构的数学工具,其中持久图中的第j维同调

51c视觉~合集37_视觉_102

代表空间中的第j维空洞。在拓扑理论中,如果空间中高维空洞的数量越多,那么底层空间的拓扑结构就更越复杂。如图 1 (a)-1 (d) 所示,随着人脸数据量的增加,输入空间的持久图中包含的高维空洞(如

51c视觉~合集37_视觉_103

51c视觉~合集37_视觉_104

)也越来越多。因此,这一实验现象清晰地表明了输入空间的拓扑结构也变得越来越复杂。 

51c视觉~合集37_视觉_105

图 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 所示。

51c视觉~合集37_视觉_106

图 3:所提出的 TopoFR 模型整体架构示意图。

51c视觉~合集37_视觉_107

表示乘法操作。

51c视觉~合集37_视觉_108

表示对每个训练样本应用 RSP 的概率。 

2.2 扰动引导的拓扑结构对齐策略 PTSA

我们发现,直接采用持续同调技术对齐人脸识别模型输入空间和隐层空间的拓扑结构,难以在隐层空间上本质保留输入空间的结构信息,进而容易导致模型的隐层空间遭遇结构崩塌现象。为了解决这个问题,我们提出了扰动引导的拓扑结构对齐策略 PTSA,其包含了两个机制:随机结构扰动 RSP 和 不变性结构对齐 ISA。

随机结构扰动 RSP

RSP 引入了一个多样性数据增强集合

51c视觉~合集37_视觉_109

,其中包含了四个常见的数据增强运算:随机擦除

51c视觉~合集37_视觉_110

,高斯模糊

51c视觉~合集37_视觉_111

,灰度化

51c视觉~合集37_视觉_112

以及颜色增强

51c视觉~合集37_视觉_113

。对于每一个训练样本

51c视觉~合集37_视觉_114

,RSP 会随机挑选一个数据增强

51c视觉~合集37_视觉_115

运算来对其进行扰动:

51c视觉~合集37_视觉_116

其次,扰动后的样本

51c视觉~合集37_视觉_117

将正式送入网络进行有监督训练,这极大地增加隐层特征空间的拓扑结构多样性。我们采用 ArcFace Loss 作为基础分类损失函数:

51c视觉~合集37_视觉_118

不变性结构对齐 ISA

在网络训练过程中,我们分别构建出原始输入空间

51c视觉~合集37_视觉_119

与扰动特征空间

51c视觉~合集37_视觉_120

的 Vietoris-Rips 复形

51c视觉~合集37_视觉_121

51c视觉~合集37_视觉_122

。并利用持续同调技术求解出其对应的持续图

51c视觉~合集37_视觉_123

和持续配对

51c视觉~合集37_视觉_124

。理想地,不管输入的人脸图像怎样被干扰,其编码在隐层空间中的位置应该保持不变。因此,我们提出对齐原始输入空间和扰动特征空间的拓扑结构,不变性结构对齐机制所对应的损失函数如下所示:

51c视觉~合集37_视觉_125

2.3 结构破坏性估计 SDE

在实际的人脸识别场景中,训练集通过会包含一些低质量的人脸图像,这也被称为困难样本。这些困难样本在隐层空间中很容易被编码到靠近决策边界附近的异常位置,严重破坏了隐层空间的拓扑结构,并会影响输入空间和隐层空间拓扑结构的对齐。

为了解决这个问题,我们提出了结构破坏性估计策略 SDE 来精准地识别出这些困难样本,并鼓励模型在训练阶段重点学习这些样本,逐渐引导起回归到合理的空间位置上。

预测不确定性

困难样本通常分布在决策边界附近,因此也有着较大的预测不确定性 (即分类器处的预测分布熵较大) ,这也是其容易被错误分类的原因。为精准地筛选出这些困难样本,我们提出利用高斯 - 均匀混合分布概率模型来建模这些样本的预测不确定性,其利用分类器处的预测熵作为概率分布的变量:

51c视觉~合集37_视觉_126

其中,均匀分布

51c视觉~合集37_视觉_127

建模了困难样本,而高斯分布

51c视觉~合集37_视觉_128

建模了简单样本。因此,某个样本属于困难样本(即由于较大的预测不确定性)的后验概率可以被计算为:

51c视觉~合集37_视觉_129

当分类器的预测分布十分接近于均匀分布时,那么样本属于困难样本的概率将十分接近于 1。

结构破坏性分数 SDS

相比于正确分类样本,错误分类样本有着更大的困难性,并且对隐层空间的拓扑结构损害更大。受 Focal Loss 设计思想的启发,我们在衡量样本对空间结构破坏性大小时综合考虑了预测不确定性与预测精度,并设计出概率感知的打分机制

51c视觉~合集37_视觉_130

来自适应地为每个样本计算结构破坏性分数 SDS:

51c视觉~合集37_视觉_131

为鼓励模型在训练阶段重点关注那些对拓扑结构破坏较大的困难样本,我们将结构破坏性分数 SDS 加权至最终的分类损失函数上:

51c视觉~合集37_视觉_132

在训练过程中,最小化

51c视觉~合集37_视觉_133

将带来两个好处:

(i)最小化

51c视觉~合集37_视觉_134

将鼓励模型从多样化的训练样本中捕捉出更有泛化性的人脸特征。(ii)最小化结构破坏性分数 SDS

51c视觉~合集37_视觉_135

能够有效减轻困难样本对隐层空间结构的破坏,这有利于结构信息的保留以及清晰决策边界的构建。

2.4 模型优化

TopoFR 模型整体的目标函数如下所示:

51c视觉~合集37_视觉_136


四、关键实验及分析

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 的竞争者模型。

51c视觉~合集37_视觉_137

1.3 高斯 - 均匀混合分布概率模型的有效性

为验证高斯 - 均匀混合分布概率模型在挖掘困难样本方面的有效性,我们展示了模型训练过程中利用分类器预测熵所估计的高斯分布密度函数,如下图 4 所示。

结果表明,被错误分类的困难样本通常有着较小的高斯密度(即有着较高的高斯 - 均匀混合分布后验概率),因此能够被高斯 - 均匀混合分布概率模型轻易探测出来。提得一提的是,即使部分被错误分类的困难样本有着较小的熵(即有着较大的高斯密度和较低的后验概率),它们的结构性破坏分数

51c视觉~合集37_视觉_138

也能被 Focal Loss

51c视觉~合集37_视觉_139

所修正。

51c视觉~合集37_视觉_140

图 4:模型训练过程中所估计的高斯密度(蓝色曲线)。绿色标记

51c视觉~合集37_视觉_141

和黑色标记

51c视觉~合集37_视觉_142

分别表示正确分类样本和错误分类样本的熵。

1.4 扰动引导的拓扑结构对齐策略的泛化性能

为表明此拓扑结构对齐策略 PTSA 在保持数据结构信息方面的一流泛化性能,我们在 IJB-C 测试集上调查了 TopoFR 模型与其变体 TopoFR-A 在输入空间与隐层空间上的拓扑结构差异,如下图 5 所示。值得一提的是,变体 TopoFR-A 直接利用持续同调技术来对齐两个空间的拓扑结构。

所得到的可视化统计结果明显地表明了我们所提出的扰动引导的拓扑结构对齐策略 PTSA 在保留数据结构信息方面的有效性和泛化性。

51c视觉~合集37_视觉_143

图 5:TopoFR 和变体 TopoFR-A 在不同网络主干架构和训练数据集上的拓扑结构差异 [网络主干架构,训练数据集]。变体 TopoFR-A 直接利用持续同调技术对齐两个空间的拓扑结构。值得注意的是,我们使用 Glint360K 数据集训练的 TopoFR 模型在 IJB-C 测试集上几乎完美地对齐了输入空间和隐层空间的拓扑结构(即蓝色直方图几乎收敛为一条直线)。 

五、结论

本文提出了一种人脸识别新框架 TopoFR,其有效地将隐藏在输入空间中的结构信息编码到隐层空间,极大地提升了人脸识别模型在真实场景中的泛化性能。一系列在主流的人脸识别基准上的实验结果表明了我们 TopoFR 模型的 SOTA 性能。








#Fluid

恺明新作:文生图质量刷新纪录

恺明团队的新作品Fluid,这是一个在文本到图像生成领域取得突破的模型。文章详细讨论了在视觉领域,尤其是文本生成图像任务中,自回归模型的扩展行为,并提出了使用连续token和随机顺序生成的新模型Fluid。Fluid模型在MS-COCO 30K数据集上实现了新的零样本生成FID记录。

文章链接:https://arxiv.org/pdf/2410.13863

缩放法则(Scaling laws) 是大语言模型(LLMs)前所未有成功的基础。实证研究表明,在自回归模型中增加参数数量通常会显著提升性能,并在自然语言处理(NLP)任务中产生新的能力。这一实证关系激励了众多扩展语言模型的努力,导致许多高性能模型的发展。受到这一成功的鼓舞,许多尝试将自回归模型应用并扩展到计算机视觉领域,特别是在文本到图像生成等生成任务中。然而,这些模型生成的内容在性能和视觉质量上往往不及其他生成模型,如扩散模型,使得在视觉领域是否适用类似的缩放法则仍不清楚。

本文提出了几个关于性能差距的假设。

  • 首先,大多数视觉自回归模型所需的矢量量化(VQ)步骤可能会引入显著的信息损失,最终限制模型的性能。
  • 其次,与语言的固有顺序性质不同,生成视觉内容可能更需要不同的自回归预测顺序。
  • 第三,在评估视觉模型的缩放法则时,通常会在两个层次的泛化能力之间产生混淆:(a) 使用与训练损失相同的指标(通常称为验证损失)对新数据的泛化,和 (b) 对不同于训练目标的新指标或问题的泛化,例如FID、GenEval基准或视觉质量。我们假设,幂律缩放适用于自回归模型在视觉数据上的(a)情况,但不一定适用于(b)情况。

为了研究这些假设,对文本到图像生成背景下自回归模型的缩放行为进行了全面的实证研究。并基于研究提出了一个新的模型——Fluid,先来看看效果如何。

效果展示

总结速览

解决的问题: 本文探讨了在视觉领域,特别是文本生成图像任务中,扩大自回归模型并不像在大语言模型中那样有益的现象。具体关注了以下两个关键问题:

  • 模型使用离散还是连续的token。
  • 模型在生成token时,使用随机顺序还是固定顺序(基于BERT或GPT的Transformer架构)。

提出的方案:

  • 通过实验对比不同模型,研究模型在使用离散或连续token,以及在随机顺序或光栅顺序生成时的表现。
  • 基于实验结果,提出了一种新的模型——Fluid,该模型使用随机顺序的自回归生成方式,并基于连续token进行训练。

应用的技术:

  • 使用 BERT 和 GPT 类型的Transformer架构,结合离散和连续token的生成。
  • 通过 FID(Fréchet Inception Distance)GenEval评分,以及视觉质量来评估模型性能。
  • 在新提出的 Fluid 模型中采用随机顺序的自回归生成方式,并利用连续token进行训练。

达到的效果:

  • 使用连续token的模型在视觉质量上显著优于使用离散token的模型。
  • 随机顺序的模型在 GenEval 评分上优于光栅顺序的模型。
  • Fluid 10.5B 模型在 MS-COCO 30K 数据集上实现了新的零样本生成的 FID 纪录,并在 GenEval 基准上获得了 0.69 的综合评分,达到当前最佳表现。
实现

本文的文本生成图像模型训练的整体框架非常简单。首先,图像分词器将原始图像转换为tokens。然后,这些tokens被部分masked,接着训练一个Transformer模型,在文本的条件下重建被masked的tokens。下图3详细描述框架中的每个组件。

图像分词器:使用一个预训练的图像分词器将256×256的图像编码为token空间。该分词器可以是离散的或连续的,以便为自回归模型实现不同的训练目标。实验中,离散分词器是一个预训练于WebLI数据集的VQGAN模型。Muse的方法,将每张图像编码为16×16的离散tokens,词汇表大小为8192。对于连续分词器采用了Stable Diffusion模型,该模型将图像编码为32×32的连续tokens,每个token包含4个通道。为了与离散分词器在序列长度上一致,将每2×2块的连续tokens分组为一个token,最终序列长度为256,每个token包含16个通道。如下图4所示,连续分词器在重建质量上明显优于离散分词器。

文本编码器:原始文本(最大长度128)通过SentencePiece进行分词,并通过预训练的T5-XXL编码器进行嵌入,该编码器有47亿个参数并在训练期间被冻结。为了进一步对齐用于图像生成的文本embeddings,在T5嵌入的基础上添加了一个由六个可训练的Transformer模块组成的小型文本对齐器,来提取最终的文本表示。

Transformer:在将原始图像编码为tokens序列后,使用一个标准的仅解码Transformer模型进行自回归生成。每个块由三个连续的层组成——自注意力、交叉注意力和MLP层。自注意力和MLP层仅应用于视觉tokens,而交叉注意力层则将视觉和文本tokens分别作为查询和键。如下图2所示,对于光栅顺序模型,Transformer使用自注意力块中的因果注意力基于先前的tokens预测下一个token,类似于GPT。在随机顺序模型中,未知的tokens由一个可学习的token masked,Transformer使用双向注意力来预测这些被masked的tokens,类似于BERT。

输出头:对于离散tokens,遵循自回归模型的常见做法。输出通过一个线性层后,使用softmax转换为类别分布,这个线性层的权重与输入embedding层的权重共享。对于连续tokens,应用一个六层轻量级的MLP作为扩散头来建模每个token的分布。该扩散头的嵌入维度与主干transformer相同。每个token的扩散过程遵循。噪声调度为余弦形状,训练时为1000步;在推理时,重新采样为100步。

实验

数据集:使用WebLI(Web Language Image)数据集的一个子集作为训练集,该数据集由网络上的图像-文本对组成,并且这些对在图像质量和alt文本相关性上都有高分。默认情况下,图像进行中心裁剪并调整大小为256×256。

训练:使用AdamW优化器(  ,权重衰减为 0.02 ,每个模型训练 万 步,批次大小为2048。这相当于在数据集上约 3 个epoch。对于连续tokens, 使用常数学习率调度, 线性预热 65 K步, 最大学习率为 ; 对于离散tokens, 使用余弦学习率调度, 发现效果更好。对于训练随机顺序模型, 在  范围内随机采样masking比例, 并按照余弦调度对每张图像进行mask, 类似于 MaskGIT。对于所有模型,使用权重的指数移动平均(EMA),衰减率为 0.9999 ,然后在评估时使用。

推理:遵循Imagen、Muse和Parti的做法,根据文本提示生成图像,不进行拒绝采样。对于随机顺序模型,使用64步生成并按照余弦调度。为了进一步增强生成性能,应用了温度和无分类器引导,这是常见的做法。

评估:对不同的自回归模型变体的扩展行为进行了定量和定性评估。定量评估包括在MS-COCO 2014训练集中的30K图像上计算验证损失,以及两个广泛采用的指标:MS-COCO上的零样本Frechet Inception Distance(FID)和GenEval分数。推理的超参数,如温度和无分类器引导,针对每个评估指标进行优化。FID是在MS-COCO 2014训练集中的30K随机选取的图像-文本对上计算的,用于评估生成图像的保真度和多样性。GenEval基准则衡量模型生成准确反映给定提示的图像的能力。对于定性评估,从几个提示中生成图像,并比较生成图像的视觉质量。

扩展行为

研究者们探索了自回归图像生成模型中的两个关键设计选择——token表示和生成顺序——如何影响性能和扩展行为。构建了具有这两种设计选择不同组合的模型,产生了四种不同的自回归图像生成模型变体。还探讨了这些模型在不同数据和评估指标上的泛化能力。本文的实验揭示了几个有趣的特性。

验证损失随模型规模线性扩展。在下图5中,研究者们考察了四种自回归变体在验证损失方面的扩展行为。验证损失和模型规模在对数空间中呈现线性关系,模型规模从1.5亿参数增加到30亿参数。这与Henighan等人发现的幂律规律相一致。这表明,增加模型规模所带来的训练损失改进能够很好地泛化到与训练数据不同的验证数据上。

使用连续tokens的随机顺序模型在评估分数上的扩展表现最佳。下图6中分析了四种自回归变体在FID和GenEval总体分数方面的扩展行为。验证损失的改进并不总是线性地转化为更好的评估指标,这意味着这些指标与模型规模之间没有严格的幂律关系。例如,使用离散tokens的光栅顺序模型(蓝线)在约10亿参数时FID和GenEval分数趋于平稳。在四种变体中,使用连续tokens的随机顺序模型(即Fluid)在评估指标上显示出一致的改进,参数规模扩展至30亿,表现最佳。

随机顺序模型的连续token随训练计算量扩展。下图7中绘制了不同大小的Fluid模型在总训练步数和计算量上的验证损失、FID和GenEval分数。随着训练步数和计算量的增加,验证损失和评估性能都表现出持续改进。然而,训练步数的收益在大约1M步时趋于饱和,这表明相比于训练较小模型更长时间,训练较大模型更少的步数在计算上更加高效。这一行为与语言模型中的观察结果一致,突显了在足够的训练条件下扩展模型大小的潜力。

验证损失和评估指标之间的强相关性。下图8绘制了不同大小的Fluid模型的FID和GenEval分数与验证损失的关系,并观察到两者之间存在强相关性。为了量化这一关系,使用线性回归拟合了数据点。FID和GenEval分数的皮尔逊相关系数分别为0.917和-0.931,表明在150M到3B的模型规模范围内,验证损失与这些评估指标之间存在近乎线性的关系。训练了一个拥有10.5B参数、批次大小为4096的模型,并训练1M步,取得了最先进的文本生成图像性能。

连续token和大模型对视觉质量至关重要。下图9比较了四种自回归变体生成的图像的视觉质量。使用离散token的模型生成的图像质量明显不如使用连续token的模型。例如,离散token模型生成的柯基犬的眼睛是不对称的,扩大模型规模无法解决这个问题。这个局限性主要是由于离散tokenizer引入了大量信息丢失。例如,即使拥有3B参数,使用离散token的模型也无法生成精确的《蒙娜丽莎》,这是因为tokenizer的重构质量较差(见前面图4)。相比之下,使用连续token的模型能够生成质量更高的图像。

此外,较大的模型在视觉质量和图像-文本对齐方面表现出持续改进。例如,一个拥有0.2B参数的随机顺序模型难以生成“一个愤怒的鸭子在健身房举重”,而拥有3B参数的相同模型则可以成功生成对应的图像。这表明,处理连续token并增加模型规模对于在自回归图像生成模型中实现高质量视觉效果至关重要。

与之前系统的对比

下表1为Fluid模型(即连续随机顺序自回归模型)与领先的文本生成图像系统进行比较。Fluid最小的模型,拥有369M参数,在MS-COCO数据集上实现了零样本FID 7.23和GenEval总分0.62,与许多拥有数十亿参数的最先进模型相匹敌(例如,Parti拥有20B参数仅实现了7.23)。Fluid最大的模型,拥有10.5B参数,进一步将MS-COCO数据集上的零样本FID提高到6.16,并将GenEval总分提升至0.692,在每个TPU上生成每张图像的速度为1.571秒(基于32 TPU v5,批次大小为2048)。

结论

本文对自回归模型在文本生成图像任务中的扩展行为进行了实证研究。探讨了两个关键设计因素:随机顺序与光栅顺序,以及离散token与连续token。结果表明,使用连续token的随机顺序模型在各种评估指标和视觉质量方面均表现出最佳的性能和扩展性。基于这些发现,将连续token的随机顺序模型(即Fluid)扩展至10.5B参数,取得了最先进的文本生成图像性能。希望这些发现和有前景的结果能为自回归模型在图像生成任务中的扩展性行为提供有价值的见解,并帮助缩小视觉模型与语言模型之间的性能差距。







#基于深度学习的无人机检测和识别研究

低空经济万字综述

文章详细介绍了无人机检测和识别的技术背景、传统方法以及基于深度学习的方法,并探讨了这些技术在视觉、音频、雷达和射频信号等方面的应用。文章还分析了当前存在的问题和未来的研究方向,强调了建立高质量数据集、开发小样本学习算法和多模态技术在无人机检测和识别中的重要性。

近年来,无人机以其体积小、动作灵活和易于操控等特点,在民用、军事以及科学研究等多个领域展现出巨大的潜力。例如,在恶劣环境下的电力线路检测、大气环境监测、抢险救灾和侦察敌情等方面[1-3],无人机都发挥着重要作用。然而,无人机数量的快速增加和广泛应用,也带来了一系列公共安全和隐私问题[4-5]。

为了更好地监督和管理无人机、及时了解无人机的活动情况,无人机检测和识别变得尤为重要[6-7],其核心目标是利用无人机搭载的视觉、音频、雷达、射频等传感器,对目标或环境的检测、分析和识别。其中,视觉传感器用于捕捉和处理可见光及其他波段图像;音频传感器感知环境声音并将其转换成电信号;雷达传感器发射无人机脉冲并接收回波;射频传感器利用无线电信号感知距离、位置、运动和温度等特性。

作者通过不同类型传感器对无人机进行检测和识别,而不同类型传感器生成不同类型的无人机信号,如视觉信号[8]、音频信号[9]、雷达信号[10]、射频信号[11]等。针对不同类型的信号数据,需要采用不同的检测和识别技术,其原理和优缺点各不相同。

传统的无人机检测和识别方法主要依赖于人工特征提取[12],这个过程需要大量的时间和精力,并且无法处理所有复杂的情况。然而,近年来,随着深度学习[13]的蓬勃发展,基于深度学习的无人机检测和识别技术取得了长足进展。深度学习的关键特点是其算法模型可以自主学习特征,而无须依赖于人工提取。

基于深度学习的方法极大地提高了无人机检测和识别的准确性和效率,且能够处理各种复杂情况。从不同类型的无人机数据角度,可以将无人机检测和识别分为基于音频、视觉、雷达和射频的方法[14-22]。无人机音频检测和识别利用环境中的音频信号进行环境感知,并利用神经网络分类器自动识别无人机音频信号[14]。

但是,现实环境中存在的各种噪声和干扰信号会导致无人机音频检测和识别的性能下降。为此,文献[15]提出了一种结果级融合的卷积神经网络,用于无人机音频检测。图像数据具有丰富的视觉信息,可以捕捉到无人机的外观特征。因此,研究人员构建神经网络对无人机视觉数据集进行训练,进而实现对无人机的检测与识别[16-18]。然而,在特定场景下,无人机的高速移动会带来图像检测的巨大挑战,因为即使无人机距离很近,也可能由于反应不及时而无法采取及时的反制措施。

为解决上述问题,文献[19]提出了一种基于热量图的检测方法。无人机的金属结构和机体形状通常导致雷达波的反射,形成独特的回波信号,可用于区分其他非目标物体。因此,一些研究人员尝试利用雷达信号对无人机进行检测和识别[20-21]。然而,由于目标无人机的体积较小,这导致雷达信号无法有效覆盖到无人机。

与上述方法不同,无人机射频检测和识别由于射频信号在传播中的稳定性较好,不易受环境影响,并且有较高的实时性。例如,文献[22]提出了一种基于深度学习的无人机射频信号分类方法,并且在真实无人机数据集上取得了95%的识别率。可以看出,深度学习方法在不同场景下的检测和识别均具有较好的适应性,特别是基于射频数据的方法在无人机检测和识别方面性能更佳、鲁棒性更强。

综上所述,基于深度学习的无人机检测和识别研究具有重要的理论意义与应用价值。本文首先明确了无人机检测和识别的定义,以及传统方法在该领域的研究现状。接着,分析了深度学习在无人机检测和识别方面的研究意义和重要性。随后,根据不同数据类型对无人机检测和识别进行了分类综述,探讨了各种技术的原理和优缺点。最后,对当前存在的问题进行了分析,并展望了未来研究方向和发展趋势。

02 基于传统方法的无人机检测和识别

无人机检测和识别是指从数据集中检测无人机样本,并对检测到的无人机样本进行进一步的识别[23]。

在本文中,我们将无人机的检测定义为一个二分类问题,而识别则是一个多分类问题(根据类型、数量和飞行模式等对无人机进行识别)[24]。无人机检测和识别的属性包括无人机的存在、距离、类型、高度、数量以及飞行模式等关键特征,这些属性详细记录在表1中。

表1 无人机检测和识别参数

以往,无人机的检测和识别采用各种传统方法设计特征,然后使用分类器进行检测和识别。无人机视觉检测和识别技术通常分为两个步骤。

具体地说,先利用方向梯度直方图和尺度不变特征变换等技术对无人机图像提取特征,再使用支持向量机等算法对提取的特征进行分类[25]。无人机音频检测和识别技术通常先提取无人机音频信号的线性预测编码、傅里叶系数和梅尔频率倒谱系数等特征[26],然后将提取出来的特征与预先保存的标签进行比较,以便识别无人机。无人机雷达检测和识别常利用调频连续波雷达发送连续波并测量发送和接收信号的频率差异以确定目标无人机及其距离[27]。早期的研究者使用从捕获的射频信号中提取的统计特征来检测和识别无人机。例如,文献[28]运用无线数据包嗅探器来捕获无人机射频信号,并提取统计特征以识别无人机。可以看出,这些传统方法均需要手工提取特征,而这一过程比较复杂且性能较差。

相比下,基于深度学习的算法能够简化特征提取过程,并显著提高检测和识别效果。因此,深度学习在无人机检测和识别方面的应用显得尤为必要。接下来的章节将详细论述基于深度学习的无人机检测和识别方法的最新研究成果。

03 基于深度学习的无人机视觉检测和识别

无人机视觉检测和识别旨在运用搭载于无人机上的视觉传感器以及图像处理技术,实现对目标进行自动化检测和识别的任务。

与传统的无人机视觉检测和识别方法依赖手动提取无人机图像特征不同,基于深度学习的方法使用深度神经网络训练一个端到端的模型,能够实现高精度的检测和识别。基于深度学习的无人机视觉检测和识别方法可分为单阶段检测和两阶段检测,相关工作总结在表2中。

表2 无人机检测和识别视觉方法相关工作总结

深度学习的核心在于从大量数据中提取特征进行检测和识别。然而,在无人机视觉领域,可靠的数据集相对匮乏。

为解决这一问题,文献[29]发布了一个大规模无人机图像数据集。该数据集通过多种型号的无人机进行收集,包含8599张图像,涵盖了各种真实世界场景。卷积神经网络(Convolutional Neural Network, CNN)作为神经网络的一种重要模型,因其能够自动学习和提取数据的重要特征而备受关注。特别是在目标检测方面,CNN已经取得了令人瞩目的性能突破。

文献[30]提出了一种基于深度卷积神经网络的无人机识别方法。该方法首先使用SSD算法对视频图像数据集进行目标检测,然后通过训练一个基于VGG16的学习网络来得到高效地识别模型。以上研究结果表明,将深度学习应用在基于无人机视觉数据的检测和识别领域具有巨大的潜力,并为无人机检测和识别系统的智能化和自主化发展提供了重要支持。

3.1 单阶段检测

单阶段检测算法通过将目标检测问题转化为回归问题,能够显著提高算法的计算速度[31]。该算法通常使用神经网络提取数据中的高级特征,并对特征图进行融合处理以实现目标的定位。目前常见的单阶段检测算法有YOLO、SSD和RetinaNet,其流程图如图1所示。

图1 单阶段检测算法

YOLO是一种强大的多目标检测算法,它能够将复杂的识别问题转化为回归问题,并通过单个端到端神经网络实现高精度和快速检测[32]。然而,由于YOLO在训练过程中所使用的数据与新输入的无人机图像数据的样本空间几乎没有交集,导致YOLO在无人机图像数据中空间定位边界框的过程存在问题。为了将YOLO应用于无人机图像中,研究者通常会采取各种技术来修改YOLO的超参数,如微调、数据增强和优化超参数。文献[33]针对上述问题提出了一种改进的YOLO算法“YOLODrone”,用于检测无人机图像中的物体。在VisDrone2019数据集上对该算法进行了评估。实验结果表明,与YOLOv3算法相比,YOLODrone算法的性能更好。

随着无人机趋向小型化,YOLO在应对检测任务上存在效率不高的问题。相较之下,SSD在不同尺度的特征图上执行检测,能够捕捉不同尺寸目标,对小尺寸物体的检测效果更佳。

例如,文献[34]提出了一种改进的基于深度学习的目标检测与跟踪算法。该算法在SSD单阶段检测算法的基础上,结合了目标检测和跟踪技术,实现了更精确的动态目标追踪。实验结果表明,该算法的平均准确率达到了91.5%,取得了良好的效果。RetinaNet引入了Focal Loss,有效解决了上述算法目标检测中正负样本不平衡的问题,从而有助于应对无人机类别的不平衡。文献[35]提出了一种基于RetinaNet框架的方法,用于从无人机航拍图像中检测车辆。在VisDrone2019数据集上评估了探测器在车辆检测方面的性能。结果表明,在所使用的数据集上,该方法具有较高的检测精度和稳定性,为无人机车辆检测提供了重要参考。

3.2 两阶段检测

两阶段检测算法包括两个目标检测步骤:首先,候选区域提取模块用于检测前景和背景区域;随后,候选区域分类和坐标修正模块构成第二个检测器,用于对第一个检测器的结果进行目标分类和位置回归,以确定目标的准确类别和位置[36]。图2展示了两阶段检测的流程。与单阶段检测算法相比,两阶段检测算法模型虽然更复杂,但实现了更高的检测精度,代表有Faster R-CNN和Mask R-CNN。

图2 两阶段检测算法

Faster R-CNN是R-CNN系列目标检测模型的改进版本,引入了区域生成网络以实现端到端的目标检测[37]。文献[38]将Faster R-CNN引入无人机图像检测领域,用于多类电气设备缺陷检测。该模型由深度全卷积网络和快速R-CNN检测器组成,前者用于生成区域建议,后者将区域建议和图像数据作为输入传递至训练网络。通过共享深度卷积层的特征,整个算法形成了一个统一的双阶段目标检测网络。实验结果表明,该方法在真实的电气设备图像数据集上优于传统的目标检测算法。

相对于Faster R-CNN,Mask R-CNN在其基础上增加了一个分支网络,并引入了ROI Align,不仅能够检测目标的位置,还能够精确地分割出目标的像素级别的区域。文献[39]将Mask R-CNN应用于无人机图像中的车辆检测。该方法不仅适用于静态图像,还可用于动态图像和视频。为了解决低空航拍图像中尺度变化的问题,文献[40]在两阶段检测框架中引入了特征金字塔网络,成功实现对各种尺度物体的有效检测,从而显著提高无人机图像目标检测的性能。

3.3 深度学习在无人机视觉检测和识别中的技术挑战与未来方向

近年来,深度学习技术的发展和应用推动了无人机视觉数据检测和识别的研究。深度学习方法通过端到端训练自动学习任务相关的特征,替代了传统手工提取特征的方法,从而获取了图像数据的高层次抽象表示。然而,目前面临的问题是缺乏用于无人机检测和识别的大规模、多样化数据集。为了解决这个问题,研究者们采用了迁移学习的思想。

此外,当前的深度学习方法在处理多目标遮挡和小尺寸目标等复杂场景时表现出的效果还不够理想。尽管增加额外的训练数据可以提高模型的性能,但无法完全克服这些困难。因此,需要改进模型结构以进一步提升无人机检测和识别效果。为此,需要深入挖掘深度学习理论并提出新的模型结构和训练方法,以加速模型训练并提高检测效果。数据增强和迁移学习是当前最有效的方法,而生成对抗网络等生成模型可能成为未来的发展方向。此外,考虑到无人机视觉检测和识别的实际应用场景,将多媒体信息(如音频、雷达、射频等)融合进深度学习模型也是一个值得探索的方向。

04 基于深度学习的无人机音频检测和识别

音频信号包含音源的语义信息和声音的特定特征,这些特性可以被广泛应用于识别不同的声音源以及进行声音事件检测等任务[41-42]。无人机噪声通常分为气动噪声和机械噪声[43-44]。

前者源于旋翼切割空气和机体与空气摩擦,其通常分布在声音信号的低频部分,衰减较慢;后者源于电机和传动部件,通常分布在声音信号的高频部分,衰减较快。此外,风和雨声作为实际环境中最常见的背景噪声,属于宽带噪声信号,其信号特性与无人机信号特性存在明显差异,容易在时域和频域上进行区分。因此,可以通过利用无人机声音的独特性质来与环境噪声进行有效区分。

无人机音频检测和识别技术旨在通过无人机搭载的音频传感器获取环境中的声音数据,并应用算法实现目标检测和识别。由于深度学习算法能够更好地提取无人机音频数据集中的特征,因此可以实现对无人机产生的各种类型音频信号的准确检测和识别[45]。本节根据研究内容和方法,将基于深度学习的无人机音频检测和识别研究分为无人机分类、异常检测和声源定位三个方面。表3总结了基于深度学习的无人机音频信号检测和识别相关研究的工作。

表3 无人机音频信号检测和识别方法相关工作总结

4.1 无人机分类

基于音频信号的无人机分类旨在通过分析无人机产生的声音数据,将无人机区分为不同的类别,包括检测无人机存在的二分类模型,以及识别无人机类型、模式等的多分类模型。

文献[46]提出了一种用于无人机存在检测的二分类模型,首次在高噪声真实环境中探究了无人机音频检测,并使用高斯混合模型(Gaussian Mixture Model, GMM)、CNN和递归神经网络(Recurrent Neural Network, RNN)三种模型在城市街道收集的数据集上进行实验。实验结果证实了这些模型在真实环境中的有效性。并且,RNN模型在真实环境中表现出最佳的检测性能,仅需240毫秒的输入音频数据即可获得0.8009的F-score。这表明RNN模型在高噪声真实环境中进行无人机检测具有较好的高效性和较短的处理时间,适用于实时检测系统。

在将深度学习技术应用到无人机音频领域之前,需要对深度学习算法进行修改验证。为验证无人机音频检测和识别多分类任务,文献[47]构建了一个开源的无人机音频数据集,并通过实验证实了基于卷积递归神经网络、CNN和RNN等深度学习技术的无人机检测和识别方法在无人机音频检测中的有效性。这些方法不仅能够检测无人机的存在,还能够识别无人机的类型。由于无人机音频信号通常包含长时间的时序信息,堆叠双向LSTM能够捕捉和利用时序数据中的长期依赖关系,有助于更准确地识别音频中的特定模式和事件。文献[48]首次尝试将堆叠双向LSTM应用于无人机音频数据分类任务。实验结果表明,提出的方法可以将无人机的音频信号分为“已装载的无人机”、“未装载的无人机”和“没有无人机”。此外,开发的堆叠双向LSTM模型能够以94.02%的良好精度对多个无人机的音频信号进行分类。

4.2 异常检测

在无人机音频检测中,异常检测被用于捕捉与正常无人机音频信号不同或不寻常的声音模式,其目标是在大量无人机音频数据中发现潜在的异常事件。

Liu和Katta等人分别构建了自己的无人机螺旋桨音频数据集,并设计神经网络对其进行检测[49-50]。

其中,文献[49]将无人机音频数据转换为时频频谱图,并采用迁移学习来增强基于CNN诊断模型的适用性。该模型可以检测频谱图的异常特征以判断螺旋桨的物理损坏。文献[50]使用自己构建的无人机音频数据集进行实验,验证了CNN、深度神经网络(Deep Neural Network, DNN)、长短期记忆(Long Short-Term Memory, LSTM)和变压器编码器异常检测的有效性。然而,部分研究者过于关注算法的识别精度,而忽略了神经网络的训练速度,导致目前神经网络的参数数量不断增加。

为解决这一问题,文献[51]提出了一个混合的基于深度学习的Transformer和CNN框架,用于通过分析无人机发出的音频信号来检测无人机中的异常情况。该框架将VGG-16的参数数量从138M减少到仅有3.6M个,并实现了高精度的无人机异常检测。

4.3 声源定位

声源定位(Sound Source Localization, SSL)指对采集到的音频信号进行去噪、滤波和放大等处理后,提取处理后的信号特征,并通过神经网络算法计算无人机的准确位置。

例如,文献[52]提出了一种端到端的一维膨胀卷积神经网络——DOANet,旨在解决在搜救行动中从无人机中检测人类语音的SSL的挑战。作者使用DREGON数据集和计算机模拟生成的合成数据集对DOANet进行训练。实验结果表明,与基准方法相比,DOANet在SSL性能方面表现更出色。在特定场景下,无人机的高速移动为声源定位带来了新的技术挑战。

为了克服无人机和声源的移动、旋转电机和螺旋桨所产生的强烈自噪声,文献[53]提出了一种基于深度学习的无人机声源定位框架。该框架结合了单声道降噪和多通道声源定位,采用了可控响应功率(Steered Response Power, SRP)DNN和时间-频率空间滤波(Time-Frequency Spatial, TFS)DNN两种下游多通道声源定位算法。实验结果表明,在实际场景和模拟数据下,TFS-DNN相比于竞争方法(包括SRP-DNN)都表现出更好的性能。

4.4 深度学习在无人机音频检测和识别中的技术挑战与未来方向

通过上述文献调研可以看出,基于深度学习的无人机音频信号检测和识别是一个新兴且有实际应用前景的研究领域。无人机的小型化使摄像头有时无法检测其存在,雷达也难以反射小目标的信号,而自主无人机可以绕过无线电检测。

现有的无人机音频信号的检测和识别存在多种不同的预处理和特征提取方法,包括提取哪些时域和频域特征、采用何种音频片段长度、是否需要片段间的重叠等。然而,这些方法尚未形成统一的标准。因此,需要进行敏感性研究,以获得最佳的无人机音频检测预处理和特征提取参数。

为解决无人机音频数据集稀缺的问题,通常采用生成对抗网络(Generative Adversarial Network, GAN)的生成模型产生大规模的数据集[54]。这一方法为解决数据集匮乏提供了有效思路。未来的研究重点可集中在充分利用多种传感器信息,提高音频数据集的多样性和真实性,以提高检测和识别的准确性和鲁棒性。此外,目前大部分研究侧重于无人机检测,对于声源定位的研究相对较少。因此,我们希望未来能有更多的研究人员致力于该领域,深入研究音频信号的声源定位,推动无人机音频检测和识别技术的发展和应用。

05 基于深度学习的无人机雷达检测和识别

在现代高科技战争中,无人机因其搭载雷达传感器而被广泛应用于电子战[55-56]。雷达作为一种主动传感器,与计算机视觉和声学传感器技术不同,其不受光照和音频等因素的影响,能够全天候工作。因此,无人机雷达检测和识别一直在电子战中扮演关键角色,其核心目标在于从拦截的敌方无人机雷达信号中提取重要信息[57]。

无人机雷达检测和识别系统的结构如图3所示。无人机雷达信号的截获阶段构成后续信号检测和识别的基础;信号预处理主要用于降噪和对齐,信号主要处理则涉及有效特征提取方法,以实现无人机雷达信号的检测和识别,进而确定无人机的类型和功能,以及威胁评估等[58-60]。

图3 无人机雷达检测和识别系统

深度学习技术的引入能够极大简化无人机雷达信号检测和识别的过程,并提高准确性。不同于图3中传统信号处理系统的方法,深度学习方法在信号预处理后直接利用神经网络提取无人机雷达信号特征,避免过于依赖人工处理,从而简化了信号处理过程[61]。此外,深度神经网络能够捕捉无人机雷达信号的更深层次特征,从而大幅提高了检测和识别的准确性。本节将基于深度学习的无人机雷达检测和识别划分为无人机与无人机之间的分类和无人机与非无人机之间的分类,并分析了当前存在的问题和未来的研究方向。表4概括了无人机雷达信号检测和识别的相关研究工作。

表4 无人机雷达信号检测和识别方法相关工作总结

5.1 无人机与无人机分类

无人机与无人机的分类通过对无人机雷达信号进行检测和识别,将不同类型的无人机进行有效分类。鉴于神经网络在图像处理领域的卓越性能,通常将采集到的无人机雷达信号处理成图像形式,如频谱图等[62-63],再利用神经网络进行分类。

在文献[62]中,作者通过使用CNN处理模拟雷达信号的短时傅里叶变换频谱图,对五种不同的无人机进行分类,同时考虑了噪声误报情况。实验证实了使用机器学习对无人机雷达信号数据进行分类的可行性。

另一方面,文献[63]提出了一种基于深度学习的无人机分类模型。该模型通过学习雷达频谱图像上的微多普勒特征实现对无人机的精准分类,解决了上述模型不能实时检测和识别的问题。在自建的雷达频谱图数据集上进行验证,证明了所提出的模型相较于ResNet-18模型,具备更短的训练时间和更高的准确率。

5.2 无人机与非无人机分类

由于环境中存在来自其他信号源的干扰,实现对无人机雷达信号的分类需要先将无人机与非无人机的信号进行区分。无人机与非无人机分类的流程如图4所示。

首先,研究人员收集原始的雷达信号数据,并对其进行数据预处理。随后,利用神经网络进行训练,得出分类结果。值得注意的是,大部分研究不仅能实现无人机的检测,还可以对无人机进行更细致地分类,比如对不同类型的无人机进行区分。同时,这些方法还具备识别非无人机信号的能力,例如鸟类信号。文献[64]提出了一种基于深度学习的无人机分类方法,用于区分无人机和非无人机(如鸟类、噪声等)。

作者使用真实的无人机雷达信号数据进行评估,实验验证了该方法的有效性,整体分类准确率可达95.0%。在无人机飞行中,与鸟类碰撞的事件时有发生,因此许多研究采用雷达系统对天空中的鸟类进行连续监测,并进行无人机和鸟类的识别分类。例如,文献[65]利用深度学习分类器区分无人机和鸟类(目标检测)以及不同类型的无人机(目标分类),分类准确率达到98%。文献[66]研究了CNN在无人机和非无人机识别方面的应用。该研究在真实数据集(包括无人机、鸟类、汽车和未知类别)上评估了CNN和决策树网络的性能。研究结果表明,相比决策树网络,CNN能更准确地区分无人机和非无人机,对鸟类的识别准确率达到了82.5%,整体正确分类性能高达98.89%。

图4 基于雷达信号的无人机与非无人机分类流程

5.3 深度学习在无人机雷达检测和识别中的技术挑战与未来方向

无人机雷达检测利用雷达信号在无人机机体反射回接收端的回波信号来实现,同时也能够实现对无人机距离的探测。传统方法[67]和机器学习[68]方法一直是该领域的主要研究手段。

近年来,基于深度学习的无人机雷达信号检测和识别受到了广泛关注。深度学习在图像识别和目标检测领域已经取得了显著成就,并开始广泛应用于雷达目标检测和识别[69]。研究者通常将雷达回波信号转化为图像形式,如合成孔径雷达图像[70]和频谱图等,以便于应用CNN进行训练。

然而,当前基于深度学习的无人机雷达信号检测和识别仍存在一些问题。首先,可用于训练和测试深度学习算法的数据集数量仍然有限。其次,对雷达信号的特征提取方法需要进一步研究和探索,以提高算法的性能和泛化能力。此外,无人机飞行过程中的各种因素(如姿态变化和雷达探测角度)会影响雷达回波信号的特征。因此需要寻找有效的方法进行自适应特征提取和调整,以提高检测和识别的准确性。

未来,在条件允许下,应构建更多优质的数据集,研究更有效的特征提取方法、优化模型结构以提升算法性能和泛化能力。同时,可以考虑将深度学习与传统方法相结合,充分发挥它们各自的优势,提高算法的鲁棒性和可靠性。

06 基于深度学习的无人机射频检测和识别

无人机射频信号检测和识别旨在监测和识别无人机在遥测遥控、通信或导航过程中发射的射频信号,以确定无人机的存在、类型、位置、行为以及可能的威胁等信息[71]。

无人机通常包含一个机载发射器,该发射器通过射频信号进行数据交换以控制和操作无人机。由于无人机在射频频谱中使用特定的频率,因此可以将无人机通信与其他设备(如智能手机和笔记本电脑)发射的所有无线电频率区分开来。在无人机射频检测与识别过程中,核心在于捕获其射频信号。通常,无人机射频信号的采集流程如图5所示。

首先,无人机信号经接收天线接收,然后通过接收机进行下变频处理,将接收的高频信号转换为更易于处理的中频信号。此后,该信号进入模数转换器(Analog-to-Digital Converter, AD)进行采样,并传输至2个可编程逻辑门阵列(Field-Programmable Gate Array, FPGA)进行后续处理[72]。为了获取持续的无人机射频数据以便后续分析,需构建缓存转发机制(如DDR3 SDRAM)。最后,通过以太网将缓存数据发送至计算机。

图5 无人机射频信号的采集流程

传统无人机射频检测和识别方法依赖于研究人员利用从捕获的射频信号中提取的统计特征。然而,由于射频信号的非线性,传统算法在实际大规模部署中通常难以提供足够的准确性和鲁棒性。因此,研究人员开始转向更复杂的深度学习方法用于对无人机进行检测和识别。

基于深度学习的无人机射频检测和识别利用深度神经网络对捕获的无人机射频信号进行特征提取,并使用分类器对其进行检测和识别。深度学习的方法不仅可以提高无人机检测和识别精度,在某些情况下还可以确定无人机的制造商和型号。

本节将基于深度学习的无人机射频检测和识别分为二分类(无人机与非无人机)和多分类(多种无人机分类),相关工作总结如表5所示。

表5 无人机射频信号检测和识别方法相关工作总结

6.1 二分类

射频天线被动接收空中无人机及地面控制和图传信号,从而实现无人机的检测定位,且其没有电磁辐射,检测距离远,具有低误判率和高准确率。因此,近年来研究人员尝试使用射频信号进行无人机检测和识别,特别是在二分类方面取得了显著的性能表现。

基于深度学习的无人机射频检测和识别框架如图6所示。首先对无人机射频信号进行数据处理,将其划分训练和测试集。

在二分类阶段(图6中的部分I),测试样本输入第一个分类器(二分类器)进行学习,分类器1将信号分为无人机和非无人机。例如,文献[73]提出了一种基于CNN的无人机检测和识别方法,并在射频信号数据集上进行了实验。实验结果验证了基于射频信号数据和CNN相结合的无人机射频检测和识别方法的有效性和可行性。该方法在无人机检测方面的F1-score超过99.7%,同时能够准确地识别无人机,其F1-score达到了88.4%。文献[74]提出了一种将区块链、深度循环神经网络(Deep Recurrent Neural Network, DRNN)和边缘计算相结合的框架,用于无人机识别和飞行模式的检测。

作者使用公开数据集DroneRF对DRNN模型进行评估,并采用二分类、四分类和十分类的标记方法对数据集进行处理。实验结果表明,所提DRNN模型在两类、四类和十类的检测准确率分别达到了99.9%、90.0%和56.0%。

图6 基于深度学习的无人机射频检测和识别框架

6.2 多分类

二分类任务将信号分为两个类别,即“有或无无人机”,而多分类任务则需要将输入的射频信号分为多个不同类别,每个类别代表特定的无人机类型或模式。因此,多分类问题需要更多的输出神经元,每个神经元对应一个类别的概率。这样的设计使得模型结构变得更为复杂,参数数量也相应增加。

无人机射频的多分类框架如图6部分Ⅱ所示,本节展示了3个分类器。分类器1在检测到无人机信号时,将该信号传递给后续的分类器进行分类。分类器2对检测到的无人机信号进行识别,区分出不同无人机类型(如大疆御Mavic 2、大疆御Mavic Air和大疆晓Spark等)。在确定无人机类型后,分类器3对其进行更精细的识别,辨别相关无人机的飞行模式(如开机模式、悬停模式、飞行模式和追踪模式等),最终得出识别结果。

为了更好地满足复杂环境下对无人机监管的需求,研究人员开始深入研究无人机射频检测和识别的多分类,并取得了显著的研究成果[75-77]。文献[75]提出了一种利用复值卷积神经网络进行无人机信号识别的方法,该方法在分类精度和检查设备运行时间方面都表现出更高的性能。通过对比五种最先进的识别算法在射频信号数据集上的识别性能和设备效率,验证了所提出方法的有效性。实验结果表明,所提方法能够在较短的计算时间内有效地识别各种无人机的信号。

为了更全面、有效地检测和识别无人机,一些研究人员开始致力于对无人机类型和状态进行识别。文献[76]采用三个DNN用于检测无人机的存在、无人机的存在及其类型、无人机的存在及类型和飞行模式。实验结果显示,在射频信号数据集上,三个实验的平均准确率分别为99.7%、84.5%、46.8%。文献[77]在DroneRF数据集上采用多通道一维卷积神经网络进行实验。在检测无人机的实验中,平均准确率高达100%;在检测无人机并识别其类型的实验中,平均准确率为94.6%;检测无人机、识别其类型并确定其飞行模式的平均准确率也能达到87.4%。从上述文献可以看出,随着类别数的增加,无人机的检测和识别性能也随之下降。

6.3 深度学习在无人机射频检测和识别中的技术挑战与未来方向

射频信号作为无人机的重要特性具有多种优点,例如不受物理特性和天气影响,实用性强。与基于雷达信号的无人机检测和识别技术相比,射频感应设备/接收器具有被动监听、无须发射信号、节能和保密性好等优势。通过上述文献调研,证实了深度学习在无人机射频检测和识别领域的可行性,并取得了一系列显著成果。然而,该技术的主要限制在于无法有效检测自主飞行的无人机。未来,随着自主无人机的广泛应用,为了更全面地评估射频检测的潜力,无人机射频检测和识别的准确性性能仍需更深入的研究和实地验证。此外,目前大部分基于射频的无人机检测和识别方法仅适用于特定通信方式的无人机,即仅能检测和识别公开协议的无人机,如Wi-Fi信号的无人机。

最近的研究表明,基于射频指纹的检测和识别方法可应用于检测未加密、专有协议的无人机,但需要对这些协议进行深入研究和分析,以获取它们的射频指纹信息。因此,射频指纹检测和识别方法需要进一步发展和完善,以满足不同类型和协议的无人机检测需求。基于深度学习的方法为解决这一问题提供了新的研究途径。通过建立大规模、多样化的射频数据集,并应用深度学习算法进行特征提取和模式识别,可以提高无人机射频信号的检测准确性和可靠性。大数据的分析和挖掘能够揭示射频信号中的关键模式和特征,从而实现对不同类型无人机的精确识别和分类。

07 结论与展望

近年来,无人机行业的飞速发展引发了许多公共安全的问题。频繁发生的“滥飞”和“黑飞”事件突显了无人机检测和识别的紧迫性。当前,无人机检测和识别主要依赖视觉、音频、雷达和射频等方法,以适应不同的检测和识别场景。

视觉检测成本低、检测速度快,但其检测范围有限。音频检测适用于相对安静的环境,但在嘈杂环境中难以检测到目标无人机。雷达检测和识别可广泛应用于大型物体检测,具有远距离检测和高效率的优势,但在小型无人机方面效果较差。射频检测不受光照、地形遮挡等限制,且具有实时检测和长距离检测的优势,因此研究人员开始广泛应用射频技术于无人机检测和识别。

然而,无人机检测和识别首先面临一个主要的共性问题——缺乏高质量的公开数据集。无论采用何种检测和识别的方法,其有效性和可靠性都依赖于大规模数据集。因此,建立高质量的标记数据集对于基于深度学习的无人机检测与识别研究至关重要。其次,由于小样本学习能够在样本有限的情况下,通过小样本分类器实现对目标无人机精准地检测和识别,因此,开发高效地小样本学习算法是解决无人机检测和识别所需数据不足的有效途径。

此外,如上文所述,由于现有无人机检测和识别方法只针对特定的应用场景,而多模态技术能够将不同类型的数据融合在一起,可以更有效获取数据特征、进一步提升准确性与可靠性,因此,在复杂场景下将多模态思想引入无人机检测和识别是一个切实可行的研究思路。进而,还应全面考虑外部因素,如障碍物、天气条件和环境噪声等,以确保在实际环境中对无人机进行检测和识别的效果依然具有鲁棒性。

最后,由于现有研究主要关注检测与识别的准确性,而忽视了无人机与接收机之间的距离信息,因此,还应对其进行特征增强,以确保在千米级的范围内实现对无人机的高效检测与识别。