VideoAgent: Long-form Video Understanding with Large Language Model as Agent

VideoAgent: Long-form Video Understanding with Large Language Model as Agent

基本信息

博客贡献人

燕青

作者

Xiaohan Wang, Yuhui Zhang, et al.

标签

Large Language Model Agent, Long-form Video Understanding, Vision-Language Foundation Models

摘要

长视频理解是计算机视觉中的一个重要挑战,需要一个能够在长多模态序列上进行推理的模型。受人类对长视频理解的认知过程的启发,本文强调交互推理和规划,而不是处理冗长的视觉输入的能力。本文提出了一个新颖的基于Agent的系统VideoAgent,它使用一个大型语言模型作为中心Agent,迭代地识别和编译关键信息来回答一个问题,视觉语言基础模型作为翻译和检索视觉信息的工具。在具有挑战性的Ego Schema和NExT-QA基准测试集上进行评估,VideoAgent的零样本准确率分别为54.1%和71.3 %,平均使用的帧数仅分别为8.4帧和8.2帧。这些结果证明了本文方法的有效性和效率优于当前最先进的方法,突出了基于代理的方法在推进长视频理解方面的潜力。

问题定义

理解从几分钟到几小时不等的长视频是计算机视觉领域的一个重大挑战。该任务要求模型能够处理多模态信息处理超长序列,并对这些序列进行有效的推理。尽管通过增强这三种能力能力来应对这一挑战的尝试不胜枚举,但现有的模型很难同时在这三个领域中脱颖而出。

目前的大语言模型( large language models,LLMs )擅长推理和处理长语境,但缺乏处理视觉信息的能力。相反,视觉语言模型( visual language models,VLMs )难以对冗长的视觉输入进行建模。以往的工作致力于使VLMs具有长上下文建模能力,但这些适配在视频理解benchmarks中表现不佳,并且在处理长视频内容时效率低下。

将整个长视频直接送入模型中的做法与人类实现长视频理解任务的做法存在显著差异。在理解长视频任务时,人类通常依赖以下交互过程来形成答案:该过程开始于对视频的快速概述,以了解其上下文。随后,在手边特定问题的引导下,人类迭代地选择新的帧来收集相关信息。当获得足够的信息来回答问题时,迭代过程结束,并给出答案。在整个过程中,控制这一迭代过程的推理能力比直接处理冗长视觉输入的能力更为关键

受人类如何理解长视频的启发,本文提出了VideoAgent系统,该系统通过一个基于Agent的系统来模拟这个过程。本文将视频理解过程描述为状态、动作和观察的序列,LLM作为控制这个过程的代理(如图1所示)。最初,LLM通过从视频中截取一组均匀采样的帧来熟悉视频上下文(观察)。在每次迭代过程中,LLM评估当前信息(状态)是否足以回答问题;如果不是,它确定了需要哪些额外的信息(动作)。该设计强调对长视觉输入直接处理的推理能力和迭代过程,其中VLM和CLIP作为功能性组件,使LLM具有视觉理解和长上下文检索能力。

1
图1. Videoagent的概述
给定一个长视频,VideoAgent通过迭代地搜索和聚合关键信息来回答问题。该过程以大语言模型( LLM )为主体,以视觉语言模型( VLM )和对比语言-图像模型( CLIP )为工具进行控制。

Related Work - 长视频理解

由于时空输入固有的复杂性和高维性,长视频理解是计算机视觉中一个特别具有挑战性的领域,这导致了计算需求的显著增加。长视频理解方法需要平衡计算效率和性能,大体上可以分为选择性压缩或压缩稀疏策略。

选择性压缩方法试图利用输入的问题/文本作为向导,将视频分解成更有意义的帧,实际上试图只采样与问题有关的帧。例如,R - VLM和R2A等方法利用CLIP模型在给定文本提示的情况下检索相关帧,而Q-ViD则利用问题对视频进行选择性描述。与以前的工作不同,我们允许LLM引导视频帧被描述者采样。

压缩稀疏方法,试图以尽可能小的维度将视频压缩成有意义的嵌入。例如,MovieChat采用了一种基于余弦相似度合并相似相邻帧令牌的内存合并机制,有效地减少了长视频序列中的令牌冗余。Chat-UniVi利用kNN聚类对视频令牌进行时空压缩。然而,压缩不必发生在嵌入本身,可以被压缩到空时图甚至文本中。例如,Zhang等人引入了LLoVi,并证明了在LLM之前简单地对视频进行字幕并使用这些字幕来提示LLM可以作为一个强基线。

方法

总体框架

VideoAgent的灵感来源于人类理解长视频的认知过程。给定一个带有问题的视频,人类首先会浏览若干帧以了解其上下文,然后迭代搜索额外的帧以获得足够的信息来回答问题,最后汇总所有的信息并做出预测。

本文将该过程建模为状态、动作和观测序列 { ( s t , a t , o t s_t , a_t , o_t st,at,ot) | 1 ≤ t ≤ T 1≤t≤T 1tT },其中状态为所有已见帧的现有信息,动作为是否回答问题或继续搜索新帧,观测为当前迭代中所见的新帧,T为最大迭代次数。

本文使用大型语言模型( LLM ) GPT-4作为代理来执行上述过程。

1
图2. Videoagent详细迭代过程
每一轮从状态开始,状态中包含先前观看的视频帧。然后,大语言模型通过回答预测和自我反思来决定后续的行动。如果需要额外的信息,则以视频帧的形式获取新的观测值。

获取初始状态

为了开始迭代过程,模型首先熟悉LLM与视频的上下文,这可以通过浏览从视频中均匀采样的N帧来实现。由于LLM没有视觉理解能力,本文利用VLM将视觉内容转换为语言描述。具体来说,本文用prompt【详细描述图像】对这N帧图像进行描述,并将描述信息反馈给LLM。这个初始状态 s 1 s_1 s1 记录了视频的内容和语义的概要。

确定下一步动作

考虑到当前状态 s t s_t st 存储了所有已见帧的信息,下一步动作 a t a_t at 有两种可能的选择:

  • Action1: 回答问题。如果状态 s t s_t st 中的信息足以回答问题,则回答问题,退出迭代过程。
  • Action2: 搜索新信息。如果当前 s t s_t st 中的信息不足,应该决定需要哪些进一步的信息来回答这个问题并继续搜索。

为了决定动作1和动作2,需要LLM对问题和已有信息进行推理。这是由三步过程实现的。

  • 首先,通过思维链提示,使LLM根据当前状态和问题进行预测。

  • 其次,根据步骤1生成的状态、问题、预测及其推理过程,让LLM进行自我反思并生成置信度评分。

    置信度评分有三个等级:1 (信息不充分)、2 (部分信息)、3 (信息充分)。

  • 最后,根据置信度得分选择动作1或动作2。

采集新的观测数据

假设LLM确定回答问题的信息不足并选择搜索新信息。在这种情况下,则进一步要求LLM来决定需要什么额外的信息,以便可以利用工具来检索它们。由于一段视频中的信息可能多次出现,为了增强时间推理能力,本文采用片段级检索(segment-level)代替视频级检索(video-level)。例如,假设问题是"男孩离开房间后在沙发上留下的玩具是什么? ",男孩在第 i i i 帧离开房间。如果以查询"显示玩具在沙发上的一帧"在整段视频中进行检索,则可能检索到第 i i i 帧之前的包含"玩具在沙发上"的一帧,但与问题无关。

为了实现片段级检索,我们首先根据可见帧的索引将视频分割成不同的片段,并要求LLM根据查询文本预测哪些片段需要检索。例如,如果我们看到视频的帧 i , j i, j i,j k k k ,一个有效的预测是在第 i i i ~ j j j 帧的片段,查询"玩具在沙发上的一帧"。

本文利用CLIP来获得给定LLM输出的这一额外信息。具体来说,给定每个查询和片段,返回与该片段中的文本查询余弦相似度最高的图像帧。这些检索到的帧作为观测值来更新状态。

由于种种原因,在检索步骤中使用CLIP的计算效率与使用LLM或VLM相比可以忽略不计。首先,CLIP的特征计算只涉及一个前馈过程。其次,CLIP采用了图像-文本的后期交互架构,实现了跨不同文本查询的图像帧特征的缓存和重用。最后,本文的片段级检索设计只需要计算特定片段内的特征,进一步提高了效率。本文的实验表明CLIP的计算量不到VLM和LLM的1%。

更新当前状态

最后,给定新的观测值(即检索到的帧),利用VLMs为每一帧生成标题(caption),然后根据帧索引将新标题与旧标题进行简单排序和拼接,并请求LLM生成下一轮预测。

一个可能的问题是,为什么本文利用多轮过程,因为一些现有的工作使用全部或均匀采样的帧作为单步中的状态。与这些基线相比,本文的方法有许多优点。首先,使用过多的帧会引入大量的信息和噪声,这会导致性能下降,因为LLMs的上下文较长,容易分散注意力。此外,由于LLM上下文长度的限制,计算效率很低,并且很难扩展到数小时长的视频。相反,使用太少的帧可能无法捕获相关信息。本文的自适应选择策略找到了最相关的信息,并且在不同的难度级别上回答问题所需的成本最低。

VideoAgent的算法可以总结为图3中的伪代码。

1
图3. Videoagent算法

实验

在实验中,本文使用两个不同的成熟数据集来测试本文模型的性能,并特别关注零样本理解能力。

数据集

  • EgoSchema

    EgoSchema是一个长视频理解的benchmark,由5,000个自我中心(egocentric)视频衍生出5,000个选择题。这些视频提供了人类从事广泛活动的自我中心视角。该数据集的一个显著特点是其视频的长度,每次持续3分钟。EgoSchema仅包含一个测试集,由500个具有公开标签的问题组成子集。全套问题仅在官方的排行榜上进行评价。

    egocentric videos:指从第一人称视角拍摄的视频。这些视频通常是通过佩戴在头部、眼镜或胸部的摄像设备拍摄的,捕捉的是拍摄者的视角。

  • NExT-QA

    NExT-QA数据集包括5,440个日常生活中具有物体交互特征的自然视频,并附有48,000道选择题。视频的平均长度为44秒。这些问题分为三类:时态性(Temporal)、因果关系(Causal)和描述性(Description),为视频理解模型提供了全面的评价。根据标准做法,本文的零样本评估集中于验证集,该验证集包含570个视频和5,000个多选题。

由于每个数据集都具有多项选择题的特点,本文使用准确率作为模型的评价指标。

实现细节

本文以1 fps的速度解码实验中的所有视频,并使用EVA-CLIP-8Bplus根据生成的视觉描述和帧特征之间的余弦相似度来检索最相关的帧。在Ego Schema上的实验中,使用La ViLa作为视觉描述子(captioner),这是一种基于剪辑的描述模型。为了确保零样本评估的可靠性,本文使用了在ego4D数据集上重新训练的LaViLa模型,并过滤掉与EgoSchema重叠的视频。本文根据CLIP检索模块返回的帧索引对视频片段进行采样进行字幕生成。对于NExT-QA,本文采用CogAgent作为描述子。本文使用GPT-4作为所有实验的LLM,GPT的版本固定为gpt-4-1106-preview以确保可重复性。

与SOTA的比较

VideoAgent制定了新的基准,在EgoSchema和NExT-QA数据集上取得了最先进的(state-of-the-art, SOTA)结果,大大超过了以前的方法,同时只需要很少的帧数进行分析。

  • EgoSchema

    如表1和表2所示,VideoAgent在Ego Schema全数据集上达到了54.1 %的准确率,在500个问题子集上达到了60.2 %的准确率。由于该数据集没有公开GT标签,通过将本文的模型预测上传到官方的排行榜来验证整个数据集的准确性。这些结果不仅比之前的SOTA方法LLo Vi显著提升了3.8 %,而且取得了与Gemini-1.0等先进专有模型相当的性能。值得注意的是,本文的方法平均每个视频只需要8.4帧——与现有方法相比显著减少了2倍到30倍。

    1
    表1. 在EgoSchema上的结果与公开模型进行了比较。
    从官方的排行榜中获得了全集结果。

    1
    表2. 在EgoSchema上的结果与大规模专有模型进行了比较。

  • NExT-QA

    在表3中,本文展示了VideoAgent在NExT-QA全验证集上达到了71.3 %的准确率,超过之前的SOTA方法LLoVi,提高了3.6 %。VideoAgent平均每个视频仅使用8.2帧进行零样本评估。在所有测试子集上,VideoAgent所用帧数始终比以往的有监督和零样本方法大幅度降低,包括测试模型的因果、时间和描述能力的方法。重要的是,VideoAgent在更具挑战性的子集ATPhard上取得了显著的性能提升,证明了其在处理复杂的长视频查询方面的能力。

    1
    表3. NExT-QA的结果与SOTA相比。
    C、T和D分别是因果子集、时间子集和描述子集。

迭代帧选择的分析

VideoAgent的一个关键组成部分是其迭代的帧选择,它动态地搜索和聚合更多的信息,直到足以回答问题为止,模仿人类理解视频的过程。为了更好地理解这一过程,本文进行了全面的分析和消融研究。

  • 帧效率

    本文的第一个分析集中在帧选择是否有效地识别回答问题所需的信息帧。这可以通过帧效率来衡量:给定固定的帧数,可以达到多高的模型精度。该分析基于假设,识别的含有效信息的帧越多,帧效率就应该越高。

    在图3(左)中,本文将所提出的方法与均匀采样基线和其他方法在Ego Schema 500问题子集上的准确率进行了比较。本文的方法在相同帧数下显著优于均匀选择和其他基线,证明了其在帧效率上的优越性。值得注意的是,本文的方法只使用了8.4帧,就达到了60.2 %的准确率,超过了均匀采样180帧达到59.6 %准确率的基线。这强调了本文的方法在寻找包含信息的帧方面的有效性,并揭示了更多的帧并不总是能带来更好的性能,因为不相关和有噪声的信息可以压倒具有长上下文和干扰的语言模型。

    1
    图3(左). 帧效率相比于均匀采样和之前的方法。X轴处于对数尺度。
    图3(右).不同类型NExT-QA问题的帧数。绘出了min,mean,max分布图。

  • 轮数

    本文还分析了迭代轮数对模型性能的影响。同样是在图3(左)中,本文绘制了1-4轮和所选帧数的性能,在5、7.5、8.4和9.9帧的情况下,分别实现了53.8 %、58.6 %、60.2 %和59.8 %的准确率。在Ego Schemaa 500-问题子集上,性能随着轮数的增加而提高,但在3轮时达到饱和。这表明我们的方法可以有效地找到回答问题所需要的信息,而超过某一点后,额外的信息对回答问题没有进一步的帮助。

  • 不同的问题类型

    考虑到本文的帧选择过程是动态的,通过语言模型代理来确定信息是否足够。因此假设不同的问题类型可能需要不同的信息量,因为它们的难度不同。本文在NExT-QA数据集上检验了这一假设,该数据集为每个问题类型提供了注释:描述性任务、因果推理或时间推理。在图3(右)中,本文绘制了每一类问题的帧数的分布图。本文观察到,使用的平均帧数如下:描述性问题( 5.9帧 )、因果性问题( 7.1帧 )和时间性问题( 7.8帧 )。

  • 初始帧数

    在启动迭代帧选择过程之前,本文对N帧进行均匀采样,以使语言模型与视频上下文相联系。为了探究初始采样帧数对模型性能和平均使用帧数的影响,本文进行了消融研究。具体来说,本文首先在EgoSchema 500问题子集上取样3、5和8个帧,并在表4中报告研究结果。结果显示,准确率分别为58.4 %、60.2 %和57.4 %,平均使用6.4、8.4和11.0帧。从5帧开始可以获得最高的性能。此外,与帧数相近或略低的本文采样方法相比,均匀采样方法对7、9和11帧的准确率分别为54.6 %、54.8 %和55.8 %。这种比较再次凸显了本文的帧选择方法的优越效率。

    1
    表4. 初始均匀采样帧数的消融实验

  • 自我评估

    在迭代选择过程中,LLM进行自我评估,以确定可用信息是否足以回答查询。如果充分,则迭代在这一阶段终止。本文将其与没有自我评估的基线方法进行了比较,其中每个问题都通过3轮迭代进行处理。如表5所示,观察到平均帧数从8.4增加到11.8,准确率从60.2 %下降到59.6 %。这些结果强调了自我评价在确定信息充分性方面的有效性,从而减少了不必要的迭代。值得注意的是,通过额外的轮次收集更多的信息并没有带来绩效的提升,反而会导致边际下降。

    1
    表5. 分段选择与自我评估的消融实验

  • 分段选择

    当确定需要额外的信息时,对输入的视频进行分段。然后,LLM生成专门为检索这些段中的信息而定制的查询。该方法与不指定段的生成查询的替代策略进行了对比。在表5中,观察到当段选择被禁用时,准确率下降了3.6 %。片段选择提高了模型的时序推理能力,降低了不同片段信息混叠的风险。这对于诸如"发生在…之后的事情? "这样的查询特别有利,因为在这些查询中,检索只需要从后续的片段中获得。

相关知识链接

论文原文

VideoAgent: Long-form Video Understanding with Large Language Model as Agent

总结

本文提出了VideoAgent系统,该系统使用一个大型语言模型作为Agent,以反映人类理解长视频的认知过程。VideoAgent通过多轮迭代过程有效地搜索和聚合信息。在各种数据集上的定量和定性研究都表明,它在长视频理解中表现出非凡的有效性和效率。

[局限]

  • 整体分为3个组件——LVM、LLM、CLIP,非端到端可训练,针对下游任务进行微调比较困难

[启发]

  • 采用初始均匀帧采样,后续迭代帧采样补充信息的方式,可以大幅减少视频理解所用帧数,并提高理解准确性
  • 利用LVM进行图像描述,LLM进行信息整合和评估,可以有效利用两种大模型的优势进行互补,且解决LVM对长视频理解的缺陷

BibTex

@misc{wang2024videoagentlongformvideounderstanding,title={VideoAgent: Long-form Video Understanding with Large Language Model as Agent}, author={Xiaohan Wang and Yuhui Zhang and Orr Zohar and Serena Yeung-Levy},year={2024},eprint={2403.10517},archivePrefix={arXiv},primaryClass={cs.CV},url={https://arxiv.org/abs/2403.10517}, 
}

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

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

相关文章

Android中systrace配置及注意问题

Android中systrace配置及注意问题 systrace配置的官方文档地址如下:优化启动时间 Systrace systrace 允许在启动期间收集内核和 Android 跟踪记录。systrace 的可视化可以帮助分析启动过程中的具体问题。(不过,如果要查看整个启动过程中的平…

2024.7.22 作业

1.将双向链表和循环链表自己实现一遍&#xff0c;至少要实现创建、增、删、改、查、销毁工作 循环链表 looplinklist.h #ifndef LOOPLINKLIST_H #define LOOPLINKLIST_H#include <myhead.h>typedef int datatype;typedef struct Node {union {int len;datatype data;}…

win10开启Linux子系统

打开win10开发人员模式&#xff0c;在设置–>更新和安全–>针对开发人员&#xff0c;中勾选开发人员模式。 然后在控制面板中勾选添加Linux子系统。依次进入控制面板–>程序–>启用或关闭windows功能&#xff0c;勾选适用于windows的linux的子系统&#xff0c;点击…

Mac清理垃圾的软件有哪些 怎么清理电脑上的缓存文件和垃圾清理

如果你发现你的Mac运行速度开始慢如蜗牛&#xff0c;或者硬盘空间快速减少&#xff0c;那么可能是时候使用一款好的清理软件来“洗个澡”了。市场上有许多优秀的Mac清理软件&#xff0c;包括一些出色的国产软件和国际知名软件。那么&#xff0c;mac电脑清理垃圾的软件有哪些&am…

Java---后端文件上传详解

袁门才俊志高远&#xff0c; 震古烁今意决然。 风采翩翩才情显&#xff0c; 雄姿英发立世间。 目录 一&#xff0c;简单案例演示 二&#xff0c;服务器本地存储 三&#xff0c;配置单个文件上传大小限制 一&#xff0c;简单案例演示 首先简单编写一个前端网页&#xff1a; &l…

知识图谱:知识图谱概述(一)

一、知识图谱简介 知识图谱&#xff0c;是结构化的语义知识库&#xff0c;主要用于描述现实世界中的实体及其相互关系&#xff0c;由节点和边组成。节点可以是实体&#xff0c;如汽车、街道等&#xff0c;或是抽象的概念&#xff0c;如AI、疾病等。边可以是实体的属性&#xff…

基于FPGA的以太网设计(2)----以太网的硬件架构(MAC+PHY)

1、概述 以太网的电路架构一般由MAC、PHY、变压器、RJ45和传输介质组成,示意图如下所示: 需要注意的是,上图是一个简化了的模型,它描述的是两台主机之间的直接连接,但在实际应用中基本都是多台主机构成的局域网,它们之间并不直接相连,而是通过交换机Switch来进行…

【PPT把当前页输出为图片】及【PPT导出图片模糊】的解决方法(sci论文图片清晰度)

【PPT把当前页输出为图片】及【PPT导出图片模糊】的解决方法 内容一&#xff1a;ppt把当前页输出为图片&#xff1a;内容二&#xff1a;ppt导出图片模糊的解决方法&#xff1a;方法&#xff1a;步骤1&#xff1a;打开注册表编辑器步骤2&#xff1a;修改注册表&#xff1a; 该文…

万字长文之分库分表里无分库分表键如何查询【后端面试题 | 中间件 | 数据库 | MySQL | 分库分表 | 其他查询】

在很多业务里&#xff0c;分库分表键都是根据主要查询筛选出来的&#xff0c;那么不怎么重要的查询怎么解决呢&#xff1f; 比如电商场景下&#xff0c;订单都是按照买家ID来分库分表的&#xff0c;那么商家该怎么查找订单呢&#xff1f;或是买家找客服&#xff0c;客服要找到对…

深入浅出WebRTC—ULPFEC

FEC 通过在发送端添加额外的冗余信息&#xff0c;使接收端即使在部分数据包丢失的情况下也能恢复原始数据&#xff0c;从而减轻网络丢包的影响。在 WebRTC 中&#xff0c;FEC 主要有两种实现方式&#xff1a;ULPFEC 和 FlexFEC&#xff0c;FlexFEC 是 ULPFEC 的扩展和升级&…

websocket实现进度条

websocket实现进度条 做一个简易的websocket实现进度条的练习&#xff0c;效果如下&#xff1a; 前端vue3 <template><el-progress type"circle" :percentage"this.progressValue" :status"this.perstatus" /><el-button cli…

docker tomcat 404

HTTP 404状态码表示“Not Found”&#xff0c;即服务器无法找到请求的页面。 当用户尝试访问一个不存在的网页时&#xff0c;服务器会返回这个状态码。这个状态码是HTTP协议的一部分&#xff0c;用于告知客户端&#xff08;通常是浏览器&#xff09;服务器无法完成请求。404状…

黑马JavaWeb企业级开发(知识清单)02——HTML实现标题:样式(CSS引入、CSS选择器、span标签)和超链接

文章目录 前言一、标题样式1&#xff1a;新闻标题颜色1. CSS三种引入方式2. 颜色表示3. javacode实现 二、标题样式2&#xff1a;发布时间颜色1. < span >标签2. CSS选择器1&#xff09;元素&#xff08;标签&#xff09;选择器&#xff08;优先级最低&#xff09;2&…

IC秋招RTL代码合集

一 全加器和半加器 全加器 module full_adder1(input Ai, Bi, Ci,output So, Co);assign So Ai ^ Bi ^ Ci ;assign Co (Ai & Bi) | (Ci & (Ai | Bi)); endmodule module full_adder1(input Ai, Bi, Cioutput So, Co);assign {Co, So} Ai Bi Ci ; endm…

wireshark过滤器,如何使用wireshark捕获指定域名的流量

过滤器比较高级&#xff0c;但是也很重要&#xff0c;我决定通过一个案例来学习过滤器的知识点。 比如&#xff0c;我现在访问 zhangdapeng.com 我希望能够捕获关于这个域名下的流量&#xff0c;该如何实现呢&#xff1f; 我选择了捕获以太网的流量&#xff0c;但是目前捕获到…

python-爬虫实例(4):获取b站的章若楠的视频

目录 前言 道路千万条&#xff0c;安全第一条 爬虫不谨慎&#xff0c;亲人两行泪 获取b站的章若楠的视频 一、话不多说&#xff0c;先上代码 二、爬虫四步走 1.UA伪装 2.获取url 3.发送请求 4.获取响应数据进行解析并保存 总结 前言 道路千万条&#xff0c;安全第一条 爬…

Java:114-Spring Boot的底层原理(上篇)

Spring Boot的底层原理 之前学习过了Spring Boot&#xff08;在88章博客&#xff09;&#xff0c;但是并没有很深入的了解&#xff0c;这里致力于在原来的基础上学习更多Spring Boot知识 回顾&#xff08;注意&#xff1a;只是回顾&#xff0c;所以更多细节在88章博客&#x…

【2】Spring Cloud 工程搭建

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f525;个人专栏&#xff1a;Spring Cloud实战&#x1f4d5;格言&#xff1a;吾愚多不敏&#xff0c;而愿加学欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 1.声明项目依赖和项目构建插件 2.完善子项目订单服务 2.1完善启动…

开源发票识别InvoiceNet项目Windows部署踩坑记(1)

今天安装在github上的InvoiceNet开源项目&#xff0c;准备对它进行测试&#xff0c;安装过程出现了一些问题&#xff0c;做个记录&#xff0c;给遇到兄弟爬坑。 第一个问题&#xff0c;conda的问题&#xff0c; 这是另外一个包管理器&#xff0c;不仅仅可以管理python的虚拟…

layui+thymeleaf+jquery实现多图片,多视频的上传、预览、放大、编辑功能

layuithymeleafjquery实现多图片&#xff0c;多视频的上传、预览、放大、编辑功能 html: <!--多图片上传--> <div class"layui-row layui-col-space10"><div class"layui-form-item"><div class"layui-form-item layui-form-te…