【论文阅读】FreePCA

FreePCA: Integrating Consistency Information across Long-short Frames in Training-free Long Video Generation via Principal Component Analysis

  • 原文摘要

    • 问题背景

      • 核心挑战

        • 长视频生成通常依赖在短视频上训练的模型,但由于视频帧数增加会导致数据分布偏移(distribution shift)。这表现为:

          • 局部信息需保持视觉和运动质量。

          • 全局信息需确保整体外观一致性。

      • 现有方法缺陷

        • 当前训练无关的方法难以平衡局部与全局信息,因为视频中的外观和运动高度耦合,导致生成结果出现运动不一致或视觉质量下降。
    • 核心发现

      • PCA的应用

        • 作者发现,通过主成分分析(PCA),可以将视频特征解耦为:

          • 全局一致性外观(由主要成分主导,表征稳定特征)。

          • 局部运动强度(由次要成分主导,表征动态变化)。

      • 关键优势

        • 这种解耦允许分别优化全局一致性和局部质量,避免两者相互干扰。
    • FreePCA

      • 特征解耦

        • 在PCA空间中,通过余弦相似度度量分离外观和运动特征:

          • 外观特征:从主成分中提取,确保跨帧一致性。

          • 运动特征:从次要成分中提取,保留动态细节。

      • 渐进式融合

        • 逐步整合解耦后的特征,以:

          • 保持原始短视频的生成质量。

          • 实现长视频中帧间的平滑过渡。

      • 噪声统计复用

        • 重用初始噪声的均值统计量,进一步强化时间一致性。

1. Introduction

1.1 研究背景与问题定义

  • 长视频生成的瓶颈

    • 现有视频扩散模型通常在短视频数据集上训练,直接生成长视频会导致分布偏移(distribution shift),表现为:

      • 质量下降

      • 运动缓慢

      • 语义丢失

  • 现有方法的局限性

    1. 全局对齐方法(Global Aligned)
      • 直接输入长序列噪声生成视频,但忽略局部质量,导致运动贫乏。
    2. 局部拼接方法(Local Stitched)
      • 通过滑动窗口生成短视频再拼接,但窗口间一致性差
    3. 频域融合方法
      • 如通过全局噪声增强一致性,但依赖长帧特征,牺牲了生成灵活性。
  • 核心问题:如何平衡全局一致性(长视频稳定性)与局部质量(短视频细节)?

1.2 核心发现与动机

  • 局部与全局信息的互补性
    • 局部信息(通过滑动窗口提取):保留模型训练分布,确保视觉和运动质量。
    • 全局信息(通过长序列生成):提供跨帧一致性,但质量较低。
  • PCA的启发性应用
    • 背景分割任务启发(PCA分离静态背景与动态前景),作者发现:
      • 时间维度的PCA可将视频特征解耦为:
        1. 一致外观(全局主成分,表征稳定特征)
        2. 运动强度(局部次要成分,表征动态变化)
    • 这一发现为解耦与融合全局/局部信息提供了理论依据。

1.3 FreePCA方法概述

提出一种Training-Free的长视频生成框架,通过PCA实现:

  1. 一致性特征分解(Consistency Feature Decomposition)
    • 全局特征(长帧生成)和局部特征(滑动窗口生成)投影到PCA空间。
    • 通过余弦相似度划分主次成分:
      • 高相似成分(外观一致)→ 从全局特征中提取,补充局部特征。
        • 因为一致性特征在全局特征中更稳定,所以用全局补充局部。
      • 低相似成分(运动变化)→ 保留局部特征的动态细节。
  2. 渐进式融合(Progressive Fusion)
    • 滑动窗口时,逐步增加全局一致性特征的融合比例,确保平滑过渡。
    • 噪声均值复用:重用初始噪声的统计量,进一步强化时间一致性。
  • 优势

    • training-free,兼容多种视频扩散模型

    • 支持多提示生成(multi-prompt)和连续视频生成

2. Related Work

2.1 Text-to-Video Diffusion Models

  1. 早期方法
    • 基于VAE(变分自编码器)和GAN(生成对抗网络)的视频生成技术,但受限于生成质量和时序一致性。
  2. 扩散模型的发展
    • 扩散模型(Diffusion Models)凭借高保真生成能力成为主流
    • 关键技术改进
      • 3D卷积与时序注意力:增强帧间连贯性。
      • 运动模块微调:兼容LoRA,提升实用性和适配性。
      • 潜空间视频扩散:通过降维提升生成效率。
      • 高质量图像引导:利用图像数据提升视频视觉质量。
  • 现存问题

    • 受计算资源和高质量视频数据稀缺的限制,现有模型仅能生成固定长度的短视频,难以直接扩展至长视频。

    • FreePCA的定位:无需额外训练,基于短视频扩散模型生成长视频。

2.2 Long Video Generation

  1. 基于训练的方法
    • GAN-basedDiffusion-based方法需大量计算资源。
  2. 训练无关的方法(FreePCA的对比基线):
    • 外推法(Extrapolation)
      • 优点:保留原始生成质量。
      • 缺点:窗口间一致性差。
    • 内插法(Interpolation)
      • 优点:全局一致性较好。
      • 缺点:牺牲运动多样性和局部细节。
  • FreePCA的创新点

    • 结合外推与内插的优势

      • 从外推法中保留局部质量(滑动窗口生成)。
      • 从内插法中提取全局一致性(PCA解耦外观与运动)。
    • 无需训练:避免资源消耗,直接适配现有模型。

3. Observation and Analysis

3.1 PCA的动机与发现

  • 动机

    • PCA的启发性应用

      • 受视频分割任务中PCA分离静态背景(一致性)与动态前景(运动)的启发,作者发现PCA在时间维度上可解耦视频特征:

        • 高一致性成分:对应全局外观(如场景、主体结构)。

        • 低一致性成分:对应局部运动(如动态细节)。

  • 验证方法

    1. 边缘检测与PSNR量化

      • 对PCA分解后的各成分,用Canny边缘检测生成叠加边缘图。
      • 一致性判定
        • 若边缘集中且结构清晰(下图中的b),则PSNR > 35dB;
        • 若分散混乱(下图中的c),则PSNR < 35dB。
    2. 统计对比全局与局部方法

      • 对100组生成视频的PCA分析显示(下图中的表格):

        • 全局方法(长帧生成):64%视频含高一致性成分。
        • 局部方法(滑动窗口):仅37%视频含高一致性成分。
      • 结论:全局方法更易保留一致性,但牺牲运动多样性;局部方法反之。

WechatIMG777.jpg

3.2 特征解耦与互补性分析

  • 可视化PCA观察

    • 余弦相似度划分特征

      在PCA空间中,比较全局与局部特征的余弦相似度:

      • 高相似成分(外观一致):全局特征更平滑(下图中的c),局部特征更混沌(下图中的d)。
      • 低相似成分(运动变化):局部特征变化强度比全局特征变化强度大(下图中的f),保留丰富动态信息。
  • 物理意义

    • 外观与运动的解耦

      • PCA明确分离了两种特征,而传统方法因耦合性难以区分。
    • 互补必要性

      • 全局特征的高一致性可修正局部窗口的闪烁问题。

      • 局部特征的高运动强度可弥补全局生成的动态贫乏。

        WechatIMG778.jpg

3.3 与现有方法的差异

  • 对比方法

    1. 局部拼接法

      • 依赖滑动窗口,未显式建模全局一致性,导致窗口间不连贯。
    2. 频域融合法

      • 直接融合全局与局部特征,但未解耦外观与运动,导致细节丢失。
  • FreePCA的创新

    • 解耦能力:PCA提供明确的特征分离(外观vs运动),而传统方法仅隐式混合。

    • 精准融合

      • 仅用全局的高相似成分增强一致性。
      • 保留局部的低相似成分维持运动多样性。

4. Method

WechatIMG779.jpg

4.1 Consistency Feature Decomposition

  1. 输入特征
    时空Transformer模块的输入特征为 x ∈ R ( b × h × w ) × F × c x \in \mathbb{R}^{(b \times h \times w) \times F \times c} xR(b×h×w)×F×c,其中:

    • b , h , w b, h, w b,h,w:批大小、高度、宽度

    • F F F:长视频的总帧数(目标帧数)

    • c c c:通道数

    • 预训练模型限制:模型仅在短视频( f f f帧, f < F f < F f<F)上训练,直接输入长序列会导致分布偏移。

    • 核心任务

      • 从长视频(全局)和滑动窗口(局部)的特征中,解耦出一致性外观运动强度特征。
  2. 全局与局部特征提取

    • 全局特征(Global Feature)

      • 输入整个长序列 x x x 到时序注意力模块(Temp),得到 x global ∈ R ( b × h × w ) × F × c x_{\text{global}} \in \mathbb{R}^{(b \times h \times w) \times F \times c} xglobalR(b×h×w)×F×c

      • 对齐操作:按滑动窗口位置切片,得到与局部特征对齐的 x global i ∈ R ( b × h × w ) × f × c x^i_{\text{global}} \in \mathbb{R}^{(b \times h \times w) \times f \times c} xglobaliR(b×h×w)×f×c
        x global i = Slice i ( Temp ( x ) ) x^i_{\text{global}} = \text{Slice}^i(\text{Temp}(x)) xglobali=Slicei(Temp(x))

    • 局部特征(Local Feature)

      • 对第 i i i 个滑动窗口( f f f帧)应用时序注意力,得到 x local i ∈ R ( b × h × w ) × f × c x^i_{\text{local}} \in \mathbb{R}^{(b \times h \times w) \times f \times c} xlocaliR(b×h×w)×f×c
        x local i = Temp ( Slice i ( x ) ) x^i_{\text{local}} = \text{Temp}(\text{Slice}^i(x)) xlocali=Temp(Slicei(x))

      • 关键差异

        • 全局特征因长序列输入存在分布偏移,需通过注意力熵缩放(缩放因子 λ = log ⁡ f F \lambda = \sqrt{\log_f F} λ=logfF )调整Query值。
  3. PCA投影与特征解耦

    • PCA投影矩阵计算

      • 对全局特征 x global i x^i_{\text{global}} xglobali 进行PCA预处理(数据归一化、协方差矩阵分解、特征值排序),得到变换矩阵 P ∈ R f × f P \in \mathbb{R}^{f \times f} PRf×f
        P = T PCA ( x global i ) P = \mathbb{T}_{\text{PCA}}(x^i_{\text{global}}) P=TPCA(xglobali)

      • 降维操作:将 x global i x^i_{\text{global}} xglobali x local i x^i_{\text{local}} xlocali R ( b × h × w ) × f × c \mathbb{R}^{(b \times h \times w) \times f \times c} R(b×h×w)×f×c 重塑为 R f × ( b × h × w × c ) \mathbb{R}^{f \times (b \times h \times w \times c)} Rf×(b×h×w×c),再投影到主成分空间:
        z global i , z local i = P ⋅ x global i , P ⋅ x local i z^i_{\text{global}}, z^i_{\text{local}} = P \cdot x^i_{\text{global}}, P \cdot x^i_{\text{local}} zglobali,zlocali=Pxglobali,Pxlocali

    • 基于余弦相似度的特征选择

      • 计算全局与局部特征在主成分空间中的余弦相似度 s s s,按相似度排序:
        s ( 1 ) , … , s ( f ) = CosSim ( z global i , z local i ) s_{(1)}, \dots, s_{(f)} = \text{CosSim}(z^i_{\text{global}}, z^i_{\text{local}}) s(1),,s(f)=CosSim(zglobali,zlocali)

        n ( 1 ) , … , n ( f ) = argsort ( s ( 1 ) , … , s ( f ) ) n_{(1)}, \dots, n_{(f)} = \text{argsort}(s_{(1)}, \dots, s_{(f)}) n(1),,n(f)=argsort(s(1),,s(f))

      • 解耦策略

        • 一致性外观特征( z con i z^i_{\text{con}} zconi):选取相似度最高的前 k k k 个主成分(来自全局特征):
          z con i = z global i [ n ( 1 ) , … , n ( k ) ] z^i_{\text{con}} = z^i_{\text{global}}[n_{(1)}, \dots, n_{(k)}] zconi=zglobali[n(1),,n(k)]

        • 运动强度特征( z mot i z^i_{\text{mot}} zmoti):保留剩余主成分(来自局部特征):
          z mot i = z local i [ n ( k + 1 ) , … , n ( f ) ] z^i_{\text{mot}} = z^i_{\text{local}}[n_{(k+1)}, \dots, n_{(f)}] zmoti=zlocali[n(k+1),,n(f)]

4.2 Progressive Fusion

WechatIMG780.jpg

  1. 渐进式融合的核心动机

    • 核心问题:直接替换局部特征中的全部一致性成分可能破坏原始生成质量,需平衡融合强度与灵活性

    • 解决思路

      • 动态调整融合比例:随着滑动窗口的推进,逐步增加一致性特征的融合量(避免突变)。
      • 保护局部质量:限制最大融合比例(K_max=3),确保运动细节不被过度覆盖。
  2. 渐进式融合的具体实现

    • 动态选择主成分数量 k

      • 对第 i 个滑动窗口,按以下规则选择融合的主成分数 k
        k = min ⁡ ( i , K max ) , K max = 3 k = \min(i, K_{\text{max}}), \quad K_{\text{max}}=3 k=min(i,Kmax),Kmax=3

        • 早期窗口(i ≤ 3)k = i(逐步增加融合比例)。
        • 后期窗口(i > 3)k = 3(达到最大融合比例)。
    • 特征拼接与逆投影

      • 将解耦后的 z con i z^i_{\text{con}} zconi(一致性)与 z mot i z^i_{\text{mot}} zmoti(运动)沿时间维度拼接:
        z fuse i = Concat ( z con i , z mot i ) z^i_{\text{fuse}} = \text{Concat}(z^i_{\text{con}}, z^i_{\text{mot}}) zfusei=Concat(zconi,zmoti)

      • 通过PCA逆变换矩阵 P T P^T PT 映射回原始空间:
        x fuse i = P T ⋅ z fuse i x^i_{\text{fuse}} = P^T \cdot z^i_{\text{fuse}} xfusei=PTzfusei

    • 重叠窗口平均

      • 对重叠部分的帧特征取平均,消除边界伪影,最终输出 x fuse ∈ R ( b × h × w ) × F × c x_{\text{fuse}} \in \mathbb{R}^{(b \times h \times w) \times F \times c} xfuseR(b×h×w)×F×c
  3. 去噪过程的阶段性策略

    • DDIM去噪步骤(50步)的分阶段处理

      • 前25步:完整应用FreePCA(优先建立全局一致性)。
      • 后25步:仅用局部方法(保留细节生成能力)。
    • 理论依据

      • 扩散模型早期生成场景布局和主体结构(需全局一致性),后期细化细节(需局部多样性)[6]。

4.3 Reuse Mean Statistics

  1. 动机

    • 直接噪声重调度会限制生成多样性,而时序均值能反映外观一致性。
  2. 实现步骤

    • 初始噪声生成:
      ϵ t ∼ N ( 0 , 1 ) , t = 1 , 2 , . . . , F \epsilon_t \sim \mathcal{N}(0, 1), \quad t=1,2,...,F ϵtN(0,1),t=1,2,...,F

    • 均值替换:将后续窗口的噪声均值对齐到首窗口:
      ϵ j : j + f ′ = ϵ j : j + f − mean ( ϵ j : j + f ) + mean ( ϵ 1 : f ) \epsilon'_{j:j+f} = \epsilon_{j:j+f} - \text{mean}(\epsilon_{j:j+f}) + \text{mean}(\epsilon_{1:f}) ϵj:j+f=ϵj:j+fmean(ϵj:j+f)+mean(ϵ1:f)

      • 其中 j = n f + 1 j = nf + 1 j=nf+1n为整数),确保覆盖所有窗口。
    • 帧顺序随机化:对调整后的噪声 ϵ \epsilon ϵ 进行帧间打乱( s h ( ⋅ ) sh(·) sh()),增强生成灵活性。

  3. 优势

    • 保持外观一致性的同时,避免严格噪声约束导致的场景单一化。

5. Experiments

5.1 Implement Details

  1. Setup

    • 目标模型

      • VideoCrafter2LaVie(基于16帧短视频训练的公开扩散模型)。
      • 目标:扩展生成长视频(64帧),无需微调,直接应用于推理阶段。
    • 测试数据

      • 使用 VBench[20] 的 326个文本提示词(涵盖多样场景与动作)。
  2. Evaluation Metrics

    • 两类评估维度一致性(Consistency)质量(Quality),共6项指标:

      维度指标计算方法物理意义
      一致性Subject Consistency基于 DINO 特征计算帧间物体相似度主体(如人物、物体)是否稳定不变
      Background Consistency基于 CLIP 特征计算帧间背景相似度场景(如天空、建筑)是否连贯
      Overall Consistency基于 ViCLIP 特征计算帧间语义与风格相似度整体视频的语义和风格一致性
      质量Motion Smoothness使用 AMT视频插值模型 评估运动平滑度动作是否自然流畅
      Dynamic Degree基于 RAFT光流 计算相邻帧运动强度视频动态丰富性(避免静态或卡顿)
      Imaging Quality使用 MUSIQ(SPAQ数据集训练)评估单帧图像质量画面清晰度、色彩、细节等
    • 基线方法(Baseline)

      • 对比三类训练无关的长视频生成方法:

        1. Direct Sampling

          • 直接输入64帧噪声,用短视频模型生成(无任何优化)。
          • 问题:分布偏移导致质量骤降(主体消失、运动迟缓)。
        2. FreeNoise

          • 通过噪声重调度强制对齐帧间噪声分布,提升一致性。

          • 局限:噪声约束过强,生成场景单一。

        3. FreeLong

          • 在频域融合低频全局特征高频局部注意力图

          • 局限:未解耦外观与运动,细节丢失。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/80317.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux:线程同步与互斥

目录 线程互斥 锁 初始化 销毁 加锁 解锁 线程同步 条件变量 初始化 销毁 等待条件满足 唤醒等待 pthread_cond_signal pthread_cond_broadcast 生产者消费者模型 3种关系 2种角色 1个交易场所 POSIX信号量 初始化 销毁 等待 发布 线程互斥 互斥相关…

LeetCode --- 448 周赛

题目列表 3536. 两个数字的最大乘积 3537. 填充特殊网格 3538. 合并得到最小旅行时间 3539. 魔法序列的数组乘积之和 一、两个数字的最大乘积 由于数据都是正数&#xff0c;所以乘积最大的两个数&#xff0c;本质就是找数组中最大的两个数即可&#xff0c;可以排序后直接找到…

Azure Document Intelligence

Azure Document Intelligence(以前称为 Form Recognizer)是一项云服务&#xff0c;可用于从文档中提取文本、键值对、表等信息。下面是一个使用 Python SDK 进行文档转换和提取信息的基本示例。 1. 安装依赖 首先&#xff0c;你需要安装 azure-ai-formrecognizer 库&#xff0c…

51单片机快速成长路径

作为在嵌入式领域深耕18年的工程师&#xff0c;分享一条经过工业验证的51单片机快速成长路径&#xff0c;全程干货无注水&#xff1a; 一、突破认知误区&#xff08;新手必看&#xff09; 不要纠结于「汇编还是C」&#xff1a;现代开发90%场景用C&#xff0c;掌握指针和内存管…

SQLite数据库加密(Java语言、python语言)

1. 背景与需求 SQLite 是一种轻量级的关系型数据库,广泛应用于嵌入式设备、移动应用、桌面应用等场景。为了保护数据的隐私与安全,SQLite 提供了加密功能(通过 SQLCipher 扩展)。在 Java 中,可以使用 sqlite-jdbc 驱动与 SQLCipher 集成来实现 SQLite 数据库的加密。 本…

《AI大模型应知应会100篇》第53篇:Hugging Face生态系统入门

第53篇&#xff1a;Hugging Face生态系统入门 ——从模型获取到部署的全流程实战指南 &#x1f4cc; 摘要 在人工智能快速发展的今天&#xff0c;Hugging Face已成为自然语言处理&#xff08;NLP&#xff09;领域最具影响力的开源平台之一。它不仅提供丰富的预训练模型、强大…

什么是向量数据库?向量数据库和关系数据库有什么区别?

什么是向量数据库&#xff1f; 向量数据库是一种专门设计用来存储、索引和查询向量数据的数据库系统。在当今的人工智能和机器学习领域中&#xff0c;向量数据库变得越来越重要&#xff0c;尤其是在处理高维数据如图像、音频和文本等非结构化数据时。 主要用途 相似度搜索&…

关于甲骨文(oracle cloud)丢失MFA的解决方案

前两年&#xff0c;申请了一个招商的多币种信用卡&#xff0c;然后就从网上撸了一个oracle的免费1h1g的服务器。 用了一段时间&#xff0c;人家要启用MFA验证。 啥叫MFA验证&#xff0c;类似与短信验证吧&#xff0c;就是绑定一个手机&#xff0c;然后下载一个app&#xff0c;每…

基于Arduino Nano的DIY示波器

基于Arduino Nano的DIY示波器&#xff1a;打造属于你的口袋实验室 前言 在电子爱好者的世界里&#xff0c;示波器是不可或缺的工具之一。它能够帮助我们观察和分析各种电子信号的波形&#xff0c;从而更好地理解和调试电路。然而&#xff0c;市面上的示波器价格往往较高&…

LeetCode 解题思路 47(最长回文子串、最长公共子序列)

解题思路&#xff1a; dp 数组的含义&#xff1a; dp[i][j] 是否为回文子串。递推公式&#xff1a; dp[i][j] s.charAt(i) s.charAt(j) && dp[i 1][j - 1]。dp 数组初始化&#xff1a; 单字符 dp[i][i] true&#xff0c;双字符 dp[i][i 1] s.charAt(i) s.charA…

通过管道实现C++ Linux独立进程之间的通信和字符串传递

在Linux环境下&#xff0c;独立进程之间的通信&#xff08;IPC&#xff09;可以通过多种方式实现&#xff0c;包括管道、消息队列、共享内存和套接字。本文将详细介绍如何使用管道&#xff08;pipe&#xff09;在C中实现独立进程之间的通信&#xff0c;并传递字符串。 一、管道…

神经网络极简入门技术分享

1. 引言 神经网络是深度学习的基础&#xff0c;其设计灵感来源于人脑神经元的结构和工作方式。尽管现代神经网络已经变得异常复杂&#xff0c;但其核心原理却相对简单易懂。本报告旨在通过剖析神经网络的最基本单元——神经元&#xff0c;帮助初学者理解神经网络的工作原理。 …

五、Hadoop集群部署:从零搭建三节点Hadoop环境(保姆级教程)

作者&#xff1a;IvanCodes 日期&#xff1a;2025年5月7日 专栏&#xff1a;Hadoop教程 前言&#xff1a; 想玩转大数据&#xff0c;Hadoop集群是绕不开的一道坎。很多小伙伴一看到集群部署就头大&#xff0c;各种配置、各种坑。别慌&#xff01;这篇教程就是你的“救生圈”。 …

科研项目管理:4款高效工具推荐与效率提升实践

一般来说&#xff0c;科研项目往往涉及复杂的任务、跨部门协作以及严格的时间和预算限制。传统的管理方式&#xff0c;如电子表格或邮件沟通&#xff0c;难以应对多任务并行、资源分配复杂的需求。借助现代项目管理工具&#xff0c;研究人员能够优化工作流程、提升团队协作效率…

如何统一修改word中所有英文字母的字体格式

1.需求分析 我想让整篇论文中的所有英文字母格式都修改为Time New Roman格式。 2.直观操作流程 点击左上角开始 --> 点击替换 --> 点击更多 --> 点击特殊格式 --> 选择查找内容为任意字母(Y) --> 将光标点到替换内容 --> 点击格式 --> 点击字体 --> …

【疑难杂症2025-003】Java-mvn项目在gitlab-ci构建镜像时遇到的问题和解决方案

本文由Markdown语法编辑器编辑完成&#xff0e; 1.背景: 之前从同事手里接手了一个java的项目&#xff0c;是用maven构建项目的&#xff0e;由于我们的服务都是基于docker来部署的&#xff0c;因此这个java项目也是要编译成docker image然后发布&#xff0e;但是之前一直都是…

【RT-Thread Studio】nor flash配置Fal分区

前置条件&#xff1a;【RT-Thread Studio】W25Q128配置 添加 FAL软件包 配置SFUD驱动程序&#xff0c;使用FAL的设备为W25Q128 将fal_cfg.h和fal_flash_sfud_port.c提取出来&#xff0c;放到自己创建的fal_porting目录。 修改 fal_flash_sfud_port.c struct fal_flash_dev n…

Spring MVC 视图解析器 (ViewResolver) 如何配置? Spring Boot 是如何自动配置常见视图解析器的?

我们来详细分析一下视图解析器 (ViewResolver) 的配置以及 Spring Boot 是如何自动配置它们的。 视图解析器 (ViewResolver) 是什么&#xff1f; 在 Spring MVC 中&#xff0c;当控制器 (Controller) 方法处理完请求并返回一个逻辑视图名 (String) 时&#xff0c;DispatcherS…

理解网站导航文件:robots.txt、sitemap.xml与LLMs.txt的全面解析

在当今数字化时代&#xff0c;网站不仅需要为人类用户提供良好的浏览体验&#xff0c;还需要考虑搜索引擎和人工智能系统的可访问性。本文将深入探讨三种关键的网站导航文件&#xff1a;传统的robots.txt和sitemap.xml&#xff0c;以及新兴的LLMs.txt&#xff0c;分析它们的功能…

leetcode 349. Intersection of Two Arrays

题目描述 题目限制0 < nums1[i], nums2[i] < 1000&#xff0c;所以可以开辟一个1001个元素的数组来做哈希表。 class Solution { public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {vector<int> table(1001,0…