多模态论文笔记——CogVLM和CogVLM2(副)

news2025/1/5 8:07:50

大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍多模态模型的LoRA版本——CogVLM和CogVLM2。在SD 3中使用其作为captioner基准模型的原因和优势。

在这里插入图片描述

文章目录

    • CogVLM
      • 论文
      • 背景
        • VLMs 的任务与挑战
        • 现有方法及其局限性
          • 浅层对齐方法(Shallow Alignment Methods)
          • 深度融合方法(Deep Fusion Methods)
        • CogVLM 的创新点
      • 模型架构
      • 视觉专家模块
        • 架构
        • 工作流程
          • 输入拆分
          • 注意力计算
          • FFN层
      • 训练细节
        • 1. 预训练阶段
          • 预训练第一阶段:图像描述损失函数
          • 预训练第二阶段:图像描述损失函数 + 指代表达理解(REC)任务的损失函数
        • 2. SFT有监督微调
    • CogVLM2
      • 论文
      • 优化
        • 1. 视觉专家模块的改进
        • 2. MLP 适配器的增强
        • 3. 视觉优先的加强

首先我们需要知道CogVLM是主要用于图像生成文本的。在此之前,我们已经介绍了BLIP和BLIP2,但是BLIP模型生成的文本描述较为简单,模型训练则需要更详细、准确的图像描述或字幕。

在上期文章中将介绍了模型Coca(Contrastive Captioners,谷歌出品),OpenAI的DALL·E 3在处理图像-文本训练数据集就是基于谷歌的CoCa模型,微调一个image captioner,用来合成图像的caption。

Coca参考历史文章:多模态论文笔记——Coca

同样,在SD 3中也使用了模型去优化图像-文本数据集中的文本描述,只不过SD 3中使用了CogVLM。

SD 3介绍参考 SD 系列文章:Stable Diffusion 3详解

CogVLM

论文

CogVLM: Visual Expert for Pretrained Language Models

背景

VLMs 的任务与挑战

VLM 的应用任务: 视觉语言模型具有广泛的应用场景,例如:图像描述、视觉问答、视觉定位、分割等。这些任务需要模型具备强大的多模态推理能力,而这种能力通常依赖于对视觉和语言数据的深度理解与融合

训练 VLM 的挑战: 训练与大规模语言模型(如 LLaMA2)性能相匹配的 VLM 是一项复杂任务。当前的主流方法是复用已有的预训练语言模型(如 GPT),并在此基础上扩展视觉处理能力。而这个扩展过程的核心挑战在于解决视觉特征和语言特征的对齐问题。

现有方法及其局限性
浅层对齐方法(Shallow Alignment Methods)

代表方法有 BLIP 2(原文为:InstructBLIP,)MiniGPT-4

  • 通过一个 冻结的预训练语言模型(如 GPT)和 预训练视觉编码器(如 CLIP)实现简单连接。
  • 通过 可训练的 Q-Former 或线性层,将图像特征映射到语言模型的输入嵌入空间。
  • 优势:收敛快,训练简单。
  • 劣势:性能劣于深度融合模型,例如 LLaVA-1.5。问题包括:
    1. 视觉与语言特征的不匹配:视觉特征在经过浅层映射后无法充分适配语言模型的深层结构。
    2. 任务表现受限:在生成任务(如图像描述)中,这种方法难以捕获特定任务的细节。

BLIP2 参考历史文章:多模态论文笔记——BLIP2

深度融合方法(Deep Fusion Methods)

代表方法有 LLaVA-1.5PaLIQwen-VL

  • 在预训练或监督微调阶段,直接对语言模型进行训练
  • 问题:深度融合方法会显著改变语言模型的分布,导致 灾难性遗忘(Catastrophic Forgetting)。
    • 语言模型在训练过程中会失去其原有的 NLP 能力,例如自然语言生成(NLG)性能下降。

注意:

  • 浅层对齐方法和深度融合方法的区分点在于:是否会改变原始模型的权重参数,如果会修改,则是深度融合方法,否则,为浅层对齐方法。
    • LLaVA 属于浅层对齐方法,原始的语言和视觉模型权重是冻结的;
    • LLaVA 1.5 属于深度融合方法,原始的语言和视觉模型权重不是被冻结的,而是可以进行训练的。
CogVLM 的创新点

CogVLM 提出了新的解决方案,回答了一个核心问题:是否能在保留语言模型 NLP 能力的同时,赋予其强大的视觉理解能力?

CogVLM 的方法:引入视觉专家(Visual Expert)

  • CogVLM 并不对原始语言模型进行修改,而是添加了一个 可训练的视觉专家
    • 视觉专家的作用:在每一层中,视觉特征通过QKV 矩阵MLP 层 与文本特征交互。
    • 参数与效率:视觉专家的引入使参数数量增加一倍,但模型的计算量(FLOPs)保持不变。
  • 优势
    • 保留语言模型的 NLP 能力:原始语言模型的参数完全冻结,避免灾难性遗忘问题。如果输入序列中没有图像,模型表现与原始语言模型一致。
    • 深度融合视觉与语言特征:使用类似低秩矩阵的思想,间接改变模型参数的方式实现深度融合。避免浅层对齐中的特征分布偏移问题。

这个灵感来源于:P-Tuning 与 LoRA 的对比

  • P-Tuning
    • 学习任务特定的输入前缀(prefix embedding),通过调整输入来适配模型。
    • 类似浅层对齐方法中的图像特征映射。
  • LoRA
    • 在每一层通过引入低秩矩阵分解调整模型权重,实现更好的性能与稳定性。
  • 类比:CogVLM 的视觉专家类似于 LoRA,它通过在每一层引入视觉-语言交互,解决了浅层对齐方法中的特征不匹配问题。

P-Tuning和LoRA请分别参考微调系列文章:

  • SD模型微调之Textual Inversion和Embedding fine-tuning
  • SD模型微调之LoRA

模型架构

在这里插入图片描述

图4. CogVLM的架构。(a) 关于输入的示意图,其中一张图像由预训练的ViT处理,并映射到与文本特征相同的空间。(b) 语言模型中的Transformer模块。图像特征具有不同的QKV矩阵和FFN。只有紫色部分是可训练的。

CogVLM模型共包含四个基本组件:ViT 编码器,MLP 适配器,预训练大语言模型(GPT-style)和视觉专家模块。

  1. ViT 编码器
    CogVLM 中采用了 预训练的 EVA2-CLIP-E作为ViT 编码器,该编码器将图像输入转化为特征表示。在 CogVLM-17B 中,移除了 ViT 编码器的最后一层,因为该层主要用于整合 [CLS] 特征用于对比学习。
  2. MLP 适配器
    CogVLM 使用了一个 两层的 MLP(SwiGLU) 作为 MLP 适配器。MLP适配器的作用是将 ViT 的输出映射到与 文本特征 相同的空间。
    SwiGLU 是一种高效的激活函数,通常用于提升模型的表达能力和稳定性。所有的图像特征共享相同的 position id,这意味着模型不会区分图像特征的顺序,仅仅根据位置进行编码。MLP适配器在训练过程中通过少量参数的调整,显著提升了模型的表现。
  3. 预训练大语言模型
    CogVLM 的预训练大语言模型采用了与 GPT-style 的大语言模型兼容的设计。具体来说,CogVLM-17B 采用了 Vicuna-7B-v1.5 作为基础模型,进行进一步的训练。此外,还选择了 GLM 系列模型LLaMA 系列模型,这确保了 CogVLM 能够在各种预训练大语言模型上进行扩展,以优化多模态任务的表现。
  4. 视觉专家模块
    CogVLM 引入了 视觉专家模块,在每一层 Transformer 中加入 图像特征的深度融合。每个 Transformer 层中的图像特征使用与 文本特征不同的 QKV 矩阵和 MLP 层,这些矩阵和层都是可训练的。这个设计使得视觉特征和语言特征能够深度融合,提高视觉与语言特征对齐的精度,进而增强多模态任务的效果。

视觉专家模块

在传统的多模态模型中,图像在处理过程中往往被当作“附庸”来处理,图像特征通常被直接对齐到文本特征的输入空间(拼接到一起,如LLaVA、ViT、ViLT等)。

  • 这种方式使得图像特征在多模态模型中并没有获得与文本同等的处理和重视。这导致了图像理解的能力有限,尤其是在需要复杂图像理解和生成的任务中,模型的效果自然会受到限制。

CogVLM 通过引入 视觉专家 来改变这一思路,采用 视觉优先 的方法。

  • 通过让图像特征与语言特征在每一层 Transformer 进行深度融合,CogVLM 使得图像特征能够在多个层次上参与建模,并获得与文本特征同等的重视,从而提升了图像理解的效果,避免了传统方法中图像特征被视为“附庸”的情况。
架构

CogVLM 中,视觉专家模块被引入到每一层,以实现深度视觉-语言特征融合。这个模块主要由两部分组成:

  1. QKV矩阵:用于计算注意力,决定哪些部分的信息对当前输出最重要;
  2. MLP层用于前馈神经网络,对注意力计算后的特征进行进一步的非线性转换,增强模型的表达能力。
    在这里插入图片描述
工作流程

视觉专家模块在每个transformer层对图像特征进行专门处理,使得模型更好理解和融合视觉信息。

输入拆分

首先,输入的隐藏状态 X X Xhidden states)会被拆分成图像隐藏状态 X I X_I XI)和文本隐藏状态 X T X_T XT)。

其中,输入的隐藏状态为 X ∈ R B × H × ( L I + L T ) × D X \in \mathbb{R}^{B \times H \times (L_I + L_T) \times D} XRB×H×(LI+LT)×D

  • B B B:批次大小(batch size)
  • L I L_I LI:图像序列的长度
  • L T L_T LT:文本序列的长度
  • H H H:注意力头的数量(Attention heads)
  • D D D:隐藏层的大小(hidden size)
注意力计算

视觉专家模块中的注意力机制计算过程如下:

  1. Q、K、V的计算
    Q = concat ( X I W I Q , X T W T Q ) Q = \text{concat}(X_I W_I^Q, X_T W_T^Q) Q=concat(XIWIQ,XTWTQ)
    K = concat ( X I W I K , X T W T K ) K = \text{concat}(X_I W_I^K, X_T W_T^K) K=concat(XIWIK,XTWTK)
    V = concat ( X I W I V , X T W T V ) V = \text{concat}(X_I W_I^V, X_T W_T^V) V=concat(XIWIV,XTWTV)
    • 其中 W I Q , W I K , W I V W_I^Q, W_I^K, W_I^V WIQ,WIK,WIV 是视觉专家的 QKV 矩阵, W T Q , W T K , W T V W_T^Q, W_T^K, W_T^V WTQ,WTK,WTV 是原始语言模型的 QKV 矩阵。
  2. 注意力权重计算
    使用上一步得到的 Q、K、V ,代入下面的公式,进行计算:
    Attention ( X , W I , W T ) = softmax ( Tril ( Q K T ) D ) V \text{Attention}(X, W_I, W_T) = \text{softmax}\left(\frac{\text{Tril}(QK^T)}{\sqrt{D}}\right) V Attention(X,WI,WT)=softmax(D Tril(QKT))V
    • W I W_I WI W T W_T WT 分别是视觉专家和原始语言模型中的 QKV 矩阵。
    • Tril ( ) \text{Tril}() Tril()下三角矩阵操作,用于掩盖掉未来信息(常用于自注意力机制中的掩码操作)。
FFN层

在计算完注意力后,视觉和文本特征会被进一步传递到前馈神经网络(FFN)层
FFN ( X ) = concat ( FFN I ( X I ) , FFN T ( X T ) ) \text{FFN}(X) = \text{concat}(\text{FFN}_I(X_I), \text{FFN}_T(X_T)) FFN(X)=concat(FFNI(XI),FFNT(XT))

  • 其中 FFN I \text{FFN}_I FFNI FFN T \text{FFN}_T FFNT 分别是视觉专家和原始语言模型的前馈神经网络

训练细节

CogVLM的训练是氛围两阶段,第一阶段进行预训练,第二阶段,对下游任务进行针对性微调。

这个两阶段的训练过程,在大模型中很常见,例如LLaVA也是两阶段:

  • 阶段1:特征对齐预训练
  • 阶段2:端到端微调

LLaVA参考历史文章:多模态论文笔记——LLaVA

1. 预训练阶段

数据集:

  • 预训练数据集:公开可用的图像文本对进行训练

  • 视觉定位数据集:作者还构建了一个包含4000万张图像的视觉定位数据集,图像中的名词与边界框相关联,表示物体在图像中的位置

预训练超参数:参考论文原文表5。

预训练第一阶段:图像描述损失函数

在预训练的第一阶段,主要使用 图像描述损失函数 来进行训练,目标是让模型学会根据图像生成描述文本。具体来说,模型被训练去预测图像对应的文本序列中的下一个标记(token)。

使用了15亿图像文本对,进行12万次迭代,批量大小为8192。

  • 目标:对于每一张图像,模型需要生成与之对应的描述文本。这个过程类似于传统的图像描述生成(image captioning)任务,模型通过最大化对文本部分的下一个标记预测的概率来进行训练。
  • 损失函数:通常使用 交叉熵损失(cross-entropy loss)来计算模型生成的文本序列与真实描述序列之间的差异,损失函数定义为:
    Loss = − ∑ t = 1 T log ⁡ P ( y t ∣ x , y < t ) \text{Loss} = -\sum_{t=1}^{T} \log P(y_t|x, y_{<t}) Loss=t=1TlogP(ytx,y<t)
    • 其中, P ( y t ∣ x , y < t ) P(y_t|x, y_{<t}) P(ytx,y<t) 表示在给定图像 x x x 和前面生成的文本 y < t y_{<t} y<t 的条件下,预测下一个标记 y t y_t yt 的概率。
预训练第二阶段:图像描述损失函数 + 指代表达理解(REC)任务的损失函数

第二阶段,除了图像描述任务外,还引入了 指代表达理解(REC)任务。REC任务要求根据物体的文本描述预测图像中的边界框位置,采用类似VQA的训练形式(问题:物体在哪里?答案: [ x 0 , y 0 , x 1 , y 1 ] [x_0,y_0,x_1,y_1] [x0,y0,x1,y1])。

在第二阶段,训练进行了6万次迭代,批量大小为1024,最后3万次迭代中提升了输入分辨率(从224×224到490×490),以增加图像细节和增强模型的泛化能力。

  • 图像描述损失:与第一阶段相同,图像描述损失函数依然用于训练模型生成图像的描述文本。

  • REC任务的损失函数:REC任务需要模型根据物体的文本描述预测图像中的边界框位置。具体来说问题:物体在哪里?答案: [ x 0 , y 0 , x 1 , y 1 ] [x_0,y_0,x_1,y_1] [x0,y0,x1,y1]。为了训练这一任务,使用 下一个标记预测的损失函数,即类似于图像描述任务的交叉熵损失,但这次输出是坐标值。

  • 损失函数:对于 REC 任务,损失函数可以形式化为:
    Loss REC = ∑ i = 1 N MSE ( y pred , i , y gt , i ) \text{Loss}_{\text{REC}} = \sum_{i=1}^{N} \text{MSE}(y_{\text{pred}, i}, y_{\text{gt}, i}) LossREC=i=1NMSE(ypred,i,ygt,i)
    其中, y pred , i y_{\text{pred}, i} ypred,i 是模型预测的边界框坐标, y gt , i y_{\text{gt}, i} ygt,i 是真实的边界框坐标, N N N 是边界框的数量。

2. SFT有监督微调
  • 微调数据:可以参考数据集 CogVLM-SFT-311K 进行训练。
  • 微调超参数:参考论文原文表6。
  • 训练细节:在有监督微调(SFT)阶段,除 Vision Transformer (ViT) 编码器外,所有的参数都是可以训练的。

这些训练细节展示了 CogVLM 的多阶段训练过程,其中预训练和微调的结合确保了模型能够高效地理解和生成图像与文本之间的关系。

CogVLM2

论文

CogVLM2: Visual Language Models for Image and Video Understanding

优化

CogVLM 2与第一代CogVLM类似,CogVLM 2在注意力和FFN模块中都采用了视觉专家的架构。这种架构创新促进了视觉和语言特征的深度融合,同时保留了模型固有的语言能力。
与第一代模型不同,CogVLM 2进一步采用2×2下采样模块,在保持效率的同时提高输入分辨率,并使用LLaMA 3-8B作为LLM骨干。此外,我们从多样性和质量方面不断增强训练前和训练后数据,详细信息见第3.1节和第4.1节。

CogVLM2CogVLM 的基础上做了多项优化和改进,主要体现在以下几个方面:

1. 视觉专家模块的改进
  • CogVLM 中的视觉专家模块主要通过引入视觉专家对每一层的视觉特征进行深度处理,实现图像特征与文本特征的深度融合。
  • CogVLM2 进一步优化了视觉专家模块,使得图像特征的处理更加高效和精确。具体来说,CogVLM2引入了 多层视觉专家模块,让视觉专家模块在每一层都能更加精细地调节图像和文本特征的融合。
2. MLP 适配器的增强
  • CogVLM 中使用了 MLP适配器 来将视觉特征与文本特征对齐,这一操作是通过一个两层的 MLP(SwiGLU)来完成的。
  • CogVLM2 中对 MLP 适配器进行了优化和增强,增强了适配器的能力,使其能够更有效地映射不同模态的特征,进一步提高了图像和文本特征的融合效果。具体增强了适配器的容量和非线性表达能力,使得图像和文本的对齐更加精细。
  • CogVLM2 使用了 Downsample 操作来降低计算复杂度,同时保证特征的准确性,使得模型在处理更大规模的图像数据时依然保持高效。
3. 视觉优先的加强
  • CogVLM 中,视觉特征在多个层次上和文本特征进行对齐,但图像的处理可能没有完全达到视觉信息的深度融合。
  • CogVLM2 强化了“视觉优先”的思想,进一步优化了图像特征与文本特征的深度融合过程,确保图像特征在各个层次上都有充分的表达,而不是仅在浅层中对齐。这使得 CogVLM2 能够更好地理解复杂的视觉信息,并在视觉任务上取得更好的效果。

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

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

相关文章

gitlab-runner的卸载与安装

如果你使用rpm方式安装gitlab-runner&#xff0c;则可以参考本教程。 卸载 停止和卸载gitlab-runner 停止 gitlab-runner stopchkconfig gitlab-runner off卸载 gitlab-runner uninstall删除rpm包 查询出rpm包名&#xff0c;根据包名删除rpm。 [rootEuler02 ~]# rpm -qa …

Nacos配置中心总结

Nacos配置中心总结 Nacos配置文件的加载顺序和优先级 加载顺序 nacos作为配置中心时&#xff0c;需要在bootstrap.yml文件中添加nacos config相关的配置&#xff0c;这样系统启动时就能先去拉取nacos server上的配置了。拉取过来后会和本地配置文件进行合并。 bootstrap.ym…

赛博周刊·2024年度工具精选(图片资源类)

1、EmojiSpark emoji表情包查找工具。 2、fluentui-emoji 微软开源的Fluent Emoji表情包。 3、开源Emoji库 一个开源的emoji库&#xff0c;目前拥有4000个emoji表情。 4、中国表情包大合集博物馆 一个专门收集中国表情包的项目&#xff0c;已收录5712张表情包&#xff0c;并…

Goland:专为Go语言设计的高效IDE

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;Goland是JetBrains公司开发的集成开发环境&#xff08;IDE&#xff09;&#xff0c;专为Go语言设计&#xff0c;提供了高效的代码编辑、强大的调试工具和丰富的项目管理功能。其智能代码补全、强大的调试与测试支…

小程序发版后,用户使用时,强制更新为最新版本

为什么要强制更新为最新版本&#xff1f; 在小程序的开发和运营过程中&#xff0c;强制用户更新到最新版本是一项重要的策略&#xff0c;能够有效提升用户体验并保障系统的稳定性与安全性。以下是一些主要原因&#xff1a; 1. 功能兼容 新功能或服务通常需要最新版本的支持&…

EasyExcel(环境搭建以及常用写入操作)

文章目录 EasyExcel环境搭建1.创建模块 easyexcel-demo2.引入依赖3.启动类创建 EasyExcel写1.最简单的写入1.模板2.方法3.结果 Write01.xlsx 2.指定字段不写入Excel1.模板2.方法3.结果 Write02.xlsx 3.指定字段写入excel1.模板2.方法3.结果 Write03.xlsx 4.按照index顺序写入ex…

典型常见的基于知识蒸馏的目标检测方法总结三

来源&#xff1a;Google学术2023-2024的顶会顶刊论文 NeurIPS 2022&#xff1a;Towards Efficient 3D Object Detection with Knowledge Distillation 为3D目标检测提出了一种知识蒸馏的Benchmark范式&#xff0c;包含feature的KD&#xff0c;Logit的cls和reg的KD&#xff0c…

通过Dockerfile来实现项目可以指定读取不同环境的yml包

通过Dockerfile来实现项目可以指定读取不同环境的yml包 1. 挂载目录2. DockerFile3. 运行脚本deploy.sh4. 运行查看日志进入容器 5. 接口测试修改application-dev.yml 6. 优化Dockerfile7. 部分参数解释8. 优化不同环境下的日志也不同调整 Dockerfile修改部署脚本 deploy.sh重新…

开源的go语言统一配置中心 - nacos + nacos go sdk

配置文件实时更新机制的场景需求 配置文件热更新主要应用于需要在不停机的情况下动态调整系统行为的场景&#xff0c;例如修改服务参数、切换数据源等。其原理在于通过一个中心化的管理平台来存储和分发最新的配置信息。当配置文件发生变化时&#xff0c;该平台会主动或被动地…

对45家“AI+安全”产品/方案的分析

一. 关键洞察 “AI+安全”创新非常活跃,一片百家争鸣之势,赛道选择上,以事件分诊Incident Triage、 安全辅助Security Copilots、自动化Automation三者为主为主,这充分反映了当前安全运营的主要需求,在产品理念选择上以 AI 和 自动化为主,这确实又切合上了在关键…

GESP202412 三级【数字替换】题解(AC)

》》》点我查看「视频」详解》》》 [GESP202412 三级] 数字替换 题目描述 小杨有一个包含 n n n 个数字的序列 A A A&#xff0c;即 A [ a 1 , a 2 , … , a n ] A[a_1,a_2,\ldots,a_n] A[a1​,a2​,…,an​]&#xff0c;他想将其中大于 k k k 的数字都替换为序列的最大…

springboot集成websokcet+H5开发聊天原型(二)

本文没有写完~~~~ 聊天相关数据结构&#xff1a; 我们初步设计了如下几个数据结构。 //存放 sessionId 与 userId 的map private Map<String,String> sessionId_userId new HashMap<>(); // 用于存储用户与群组的关联关系&#xff0c;键为用户ID&#xff0c;值…

List接口(源码阅读)

文章目录 1.List接口常用方法1.代码2.结果 2.ArrayList底层机制1.结论2.ArrayList底层源码1.代码2.debug添加第一个元素1.进入2.elementData数组存储ArrayList的数据3.初始化为空数组4.首先确保使用size1来计算最小容量5.如果elementData为空&#xff0c;最小容量就是106.modCo…

Python爬虫(一)- Requests 安装与基本使用教程

文章目录 前言一、简介及安装1. 简介2. 安装 Requests2.1 安装2.2 检查安装是否成功 二、使用 Requests 发送 HTTP 请求1. 发送 GET 请求2. 发送 POST 请求3. 发送 PUT 请求4. 发送 DELETE 请求5. 发送 HEAD 请求6. 发送 OPTIONS 请求 三、传递参数1. GET 请求传递 URL 参数1.1…

风力涡轮机缺陷检测数据集,86.6%准确识别率,11921张图片,支持yolo,PASICAL VOC XML,COCO JSON格式的标注

风力涡轮机缺陷检测数据集&#xff0c;86.6&#xff05;准确识别率&#xff0c;11921张图片&#xff0c;支持yolo&#xff0c;PASICAL VOC XML&#xff0c;COCO JSON格式的标注 数据集下载 yolov11&#xff1a; https://download.csdn.net/download/pbymw8iwm/90206849 yolov…

简易屏幕共享工具-基于WebSocket

前面写了两个简单的屏幕共享工具&#xff0c;不过那只是为了验证通过截屏的方式是否可行&#xff0c;因为通常手动截屏的频率很低&#xff0c;而对于视频来说它的帧率要求就很高了&#xff0c;至少要一秒30帧率左右。所以&#xff0c;经过实际的截屏工具验证&#xff0c;我了解…

python-leetcode-多数元素

169. 多数元素 - 力扣&#xff08;LeetCode&#xff09; class Solution:def majorityElement(self, nums: List[int]) -> int:candidate Nonecount 0for num in nums:if count 0: # 更新候选元素candidate numcount (1 if num candidate else -1)return candidate

js按日期按数量进行倒序排序,然后再新增一个字段,给这个字段赋值 10 到1

效果如下图&#xff1a; 实现思路&#xff1a; 汇总数据&#xff1a;使用 reduce 方法遍历原始数据数组&#xff0c;将相同日期的数据进行合并&#xff0c;并计算每个日期的总和。创建日期映射&#xff1a;创建一个映射 dateMap&#xff0c;存储每个日期的对象列表。排序并添加…

MM-2024 | 智能体遇山开路,遇水架桥! ObVLN:突破障碍,受阻环境中的视觉语言导航

作者&#xff1a;Haodong Hong, Sen Wang, Zi Huang 单位&#xff1a;昆士兰大学 论文链接&#xff1a;Navigating Beyond Instructions: Vision-and-Language Navigation in Obstructed Environments (https://dl.acm.org/doi/pdf/10.1145/3664647.3681640) 代码链接&#…

1Panel自建RustDesk服务器方案实现Windows远程macOS

文章目录 缘起RustDesk 基本信息实现原理中继服务器的配置建议 中继服务器自建指南准备服务器安装1Panel安装和配置 RustDesk 中继服务防火墙配置和安全组配置查看key下载&安装&配置客户端设置永久密码测试连接 macOS安装客户端提示finder写入失败hbbs和hbbr说明**hbbs…