深度解读 Chinese CLIP 论文:开启中文视觉对比语言预训练
目录
- 论文概述
- 1.论文摘要
- 2.论文脑图
- 3.论文创新
- 3.1模型构建
- 3.2训练方法
- 3.3数据构建
- 3.4部署优化
- 4.模型架构
- 论文解析
- 1. 引言
- 2. 方法
- 2.1数据说明
- 2.2预训练方法
- 2.2.1模型初始化方法
- 2.2.2两阶段预训练方法
- 2.3预训练细节
- 2.3.1模型初始化
- 2.3.2第一阶段预训练
- 2.3.3第二阶段预训练
- 2.3.4更高分辨率模型预训练
- 2.4微调细节
- 2.4.1微调数据集
- 2.4.2实验环境与策略
- 3. 评价
- 3.1跨模态检索
- 3.1.1数据集和评估指标
- 3.1.2评估结果
- 3.1.3消融研究
- 3.2零样本图像分类
- 3.2.1中文开放域图像分类基准
- 3.2.2实验结果
- 3.2.3实验分析
- 4.部署
- 4.1模型部署
- 4.2性能测试
- 4.3指标评估
- 5. 总结
- 6. 局限性及应对措施
- 6.1数据局限性及改进方向
- 6.2模型局限性及改进方向
- Chinese CLIP:Contrastive Vision-Language Pretraining in Chinese(中文视觉对比语言预训练)
- 论文:https://arxiv.org/abs/2211.01335(2023.05)
- GitHub:https://github.com/OFA-Sys/Chinese-CLIP
- 在人工智能领域,视觉与语言的融合一直是研究的热点方向。随着技术的不断发展,视觉语言基础模型如雨后春笋般涌现。然而,大多数跨模态预训练模型在向特定语言场景迁移时面临诸多挑战。今天,我们将深入研读 “Chinese CLIP: Contrastive Vision - Language Pretraining in Chinese” 这篇论文,来探究如何针对中文环境打造高效的视觉语言预训练模型。该论文由安杨、潘俊书等学者撰写。文章提出了 Chinese CLIP,这是一种在中文图像文本对上进行预训练的特定语言视觉语言基础模型,并通过实验证明了其在跨模态检索和零样本图像分类任务中的有效性。
论文概述
1.论文摘要
- 视觉语言基础模型取得的巨大成功推动了计算机视觉和多模态表征学习的研究与应用。然而,将这类基础模型有效地迁移到特定语言场景中仍然存在困难。在这项研究中,论文提出了中文 CLIP 模型,并采用两阶段预训练方法,第一阶段使用锁定图像调整(locked-image tuning)对模型进行训练,第二阶段则进行对比调整(contrastive tuning)。具体而言,论文开发了 5 种不同规模的中文 CLIP 模型,参数数量从 7700 万到 9.58 亿不等,并且在收集到的大规模中文图像文本对数据集上对这些模型进行了预训练。综合实验表明,中文 CLIP 在零样本学习和微调设置下,在 MUGE、Flickr30K-CN 和 COCO-CN 等数据集上均能达到最先进的性能表现。此外,基于 ELEVATER 基准测试的评估,该模型在零样本图像分类任务中也具备有竞争力的性能。
2.论文脑图
3.论文创新
3.1模型构建
- 特定语言模型构建:提出专门针对中文的视觉语言基础模型 Chinese CLIP,利用大规模中文图像文本对数据进行预训练,有效解决跨模态预训练模型难以向中文场景高效迁移的问题,促进了中文特定的多模态表示学习。
3.2训练方法
- 两阶段预训练方法:提出两阶段预训练方法,先通过 Locked-image Tuning(LiT)让文本编码器从基础视觉模型中读取高质量表示,再将整个模型迁移到引入的预训练数据领域。这种方法有效提升了模型性能,且优于从头开始预训练或直接微调预训练模型的方式。
3.3数据构建
- 大规模数据集构建:构建了大规模的中文图文对数据集,数据来源广泛,包括从 LAION-5B 中提取的中文数据、悟空数据集以及经典英文多模态数据集的翻译数据等。通过精心的数据预处理,为模型训练提供了高质量的数据支持。
3.4部署优化
- 模型部署优化:提供 NVIDIA TensorRT 和 ONNX 模型用于部署,显著提升了推理效率,推理速度比 Pytorch 模型快 2 - 10 倍,且几乎不损失性能,为模型的实际应用提供了更高效的解决方案。
4.模型架构
- 开发了 5 种不同规模的 Chinese CLIP 模型,参数数量从约 7700 万到 9.58 亿不等。包含 1 个基于 ResNet-50 的模型 CN-CLIPRN50 和 4 个基于视觉 Transformer(ViT)的模型,即 CN-CLIPViT-B/16、CN-CLIPViT-L/14、CN-CLIPViT-L/14@336px 和 CN-CLIPViT-H/14 。除特别说明外,这些模型均在分辨率为 224×224 的图像上进行预训练,各模型架构如下。
- ResNet-50、ViT-B/16 和 ViT-L/14 的骨干架构与 OpenAI CLIP 一致,ViT-H/14 的架构与 LAION CLIP 相同,这使得可以用这些模型的权重初始化 Chinese CLIP 的图像编码器。文本编码器采用中文 Roberta 模型,其中最轻量化的小尺寸模型使用 3 层 RBT3 架构,基础尺寸和大尺寸模型采用 12 层 RoBERTa-wwm-Base 架构,超大尺寸的 CN-CLIP 使用 24 层 RoBERTa-wwm-Large 架构。文本分词器的词汇表大小为 21,128。
论文解析
1. 引言
- 在基础模型的发展历程中,对比语言图像预训练模型 CLIP 是多模态表示学习领域的一个重要里程碑。与传统的生成式预训练不同,CLIP 是一种基于对比学习的模型,它在包含约 4 亿个图像 - 文本对的大规模数据集上进行预训练。CLIP 不仅在视觉语言检索中取得了卓越的性能,也在一系列数据集的零样本图像分类任务中展现出了最先进的性能。CLIP 在视觉和语言之间建立了联系,这种将视觉和语言关联起来的能力,为多模态表示学习提供了新的思路,推动了计算机视觉从依赖大量标注数据的传统模式向基于多模态关联的新方向发展 。
- 由于多种原因,将跨模态预训练模型有效地迁移到另一种语言中是很困难的,CLIP 在多数场景表现好,但在中文跨模态检索中,使用机器翻译的数据让它难以发挥实力,因为它没有充分学习中文视觉和语言数据的分布特点。在使用 MUGE 基准进行测试时,CLIP 的表现远不如 Chinese CLIP。如下图,这一结果凸显了 Chinese CLIP 针对中文数据进行优化的有效性,说明专门为中文设计的模型在处理中文相关任务时更具优势。
- 为了解决跨模态预训练模型在中文数据上的应用问题,本文提出了 Chinese CLIP,采用与 OpenAI CLIP 相同的架构,开发了一种两阶段预训练方法。第一阶段让文本编码器适应中文文本,利用已有的视觉编码器基础;第二阶段让两个编码器共同学习,使模型能更好地融合中文图像和文本信息。这种设计使得模型能有效利用预训练知识并适应中文数据,为后续在中文视觉 - 语言任务中的良好表现奠定了基础。
- 本文提供了用于部署的 NVIDIA TensorRT 和 ONNX 模型,在推理时,它们的运行速度比 PyTorch 模型快约 2 到 10 倍。
- Chinese CLIP 在零样本学习和微调设置下的跨模态检索任务中达到了最先进的性能水平,在零样本图像分类任务中也具备有竞争力的性能。
2. 方法
2.1数据说明
- 使用尽可能多的公开可用数据对 Chinese CLIP 进行预训练,收集高质量的公共数据集,包括从 LAION - 5B、悟空数据集提取中文数据,以及添加经典英文多模态数据集的翻译数据,构建了一个包含约 2 亿个图像文本对的中文多模态预训练数据集。对于图像,大多数情况下是将其分辨率调整为 224×224,对于 ViT - L/14@336px 模型,图像分辨率调整为 336×336 。
2.2预训练方法
2.2.1模型初始化方法
- 利用现有预训练模型的优势,使用 CLIP 官方发布的预训练检查点的权重来初始化图像编码器,使用 RoBERTa - wwm - ext 和 RBT3 的权重来初始化文本编码器。对比了 “对比调整”(contrastive tuning) 和 “锁定图像调整(Locked - image Tuning,LiT)” 两种预训练方式,突出 LiT 在下游迁移中的优势。
2.2.2两阶段预训练方法
- 第一阶段,在预训练过程中冻结图像编码器的参数,即 “锁定” 图像编码器,仅对文本编码器进行预训练以实现视觉 - 语言对齐,直到预训练性能没有显著提升为止。第一阶段让文本编码器更好地适应中文文本数据,利用预训练的图像编码器强大的特征提取能力,专注于文本编码器与图像编码器的对齐训练。
- 第二阶段,在没有任何参数冻结的情况下继续预训练,以便图像编码器能够学习对来自中文网站的图像数据分布进行建模。第二阶段让图像编码器学习中文图像数据的特征和分布,使得整个模型能够更好地融合视觉和语言信息。
2.3预训练细节
2.3.1模型初始化
- 图像编码器初始化:使用 OpenAI CLIP 的权重初始化 CN-CLIPRN50、CN-CLIPViT-B/16 和 CN-CLIPViT-L/14 的图像编码器,使用 LAION CLIP 的权重初始化 CN-CLIPViT-H/14 的图像编码器,除了 ResNet 或 ViT 的参数外,温度参数和视觉输出投影参数也用预训练的 CLIP 权重进行初始化。
- 文本编码器初始化:使用相应模型规模的已发布中文 Roberta 权重来初始化其参数,但会丢弃池化层权重,文本输出投影权重则通过正态分布随机初始化。
2.3.2第一阶段预训练
- CN-CLIPRN50、CN-CLIPViT-B/16、CN-CLIPViT-L/14 和 CN-CLIPViT-H/14 这4个模型共享超参数,图像编码器被冻结,分别预训练约 20、44、64 和 26 个 epoch,预训练的最优 epoch 数是通过在训练过程中测量 3 个下游零样本检索任务的平均召回率来确定,启用了混合精度训练。
- 对输入图像使用随机裁剪和自动数据增强,通过 GPU 之间的全收集通信(all-gather communications)来计算全局批次上的对比损失,对于 CN-CLIPRN50,在这个阶段不更新批归一化层的运行方差和均值。
- 使用 64 个 NVIDIA V100 GPU 对 CN-CLIPRN50 预训练 1.6 天,使用 128 个 NVIDIA V100 GPU 对 CN-CLIPViT-B/16 预训练 4.5 天,使用 128 个 NVIDIA V100 GPU 对 CN-CLIPViT-L/14 预训练 11.5 天,使用 184 个 NVIDIA A100 GPU 对 CN-CLIPViT-H/14 预训练 3.8 天。
2.3.3第二阶段预训练
- 解冻图像编码器并更新所有模型参数。除了峰值学习率、批量大小和训练 epoch 数外,第一阶段中提到的所有其他超参数保持不变。为了进行更精细的优化,我们将学习率降低到 2e-5。
- 由于 GPU 内存的限制,对于 CN-CLIPRN50、CN-CLIPViT-B/16 和 CN-CLIPViT-L/14,批量大小分别缩小到 16384、16384 和 4608。在处理 CN-CLIPViT-H/14 时,我们采用梯度检查点技术(gradient checkpointing),这使得批量大小可以增大到 32,768。这 4 个模型在第二阶段分别预训练约 44、15、7 和 7 个 epoch。
- 使用 64 个 NVIDIA V100 GPU 对 CN-CLIPRN50 预训练 5.8 天,使用 128 个 NVIDIA V100 GPU 对 CN-CLIPViT-B/16 预训练 3.0 天,使用 128 个 NVIDIA V100 GPU 对 CN-CLIPViT-L/14 预训练 8.0 天,使用 184 个 NVIDIA A100 GPU 对 CN-CLIPViT-H/14 预训练 2.2 天 。
2.3.4更高分辨率模型预训练
- 对 CN-CLIPViT-L/14 的图像位置嵌入进行插值,以适应更高的分辨率,然后使用分辨率为 336×336 的图像继续预训练。从 CN-CLIPViT-L/14 开始,继续预训练 2 个 epoch。预训练过程仅使用 128 个 NVIDIA A100 GPU,耗时 0.7 天。这是针对特定分辨率模型的训练优化,以充分利用更高分辨率图像中的信息,提升模型性能。
2.4微调细节
2.4.1微调数据集
- 选择 MUGE、Flickr30K-CN 和 COCO-CN 这 3 个跨模态检索数据集对 Chinese CLIP(CN-CLIP)进行微调,这是因为它们在跨模态检索研究中具有代表性,能有效检验模型在不同场景下的性能。
- MUGE 检索数据集是一个图像 - 文本检索数据集,其数据提取自中国的电子商务网站。Flickr30K - CN 和 COCO - CN这两个数据集基于经典的 Flickr30K 和 MSCOCO - 1K 数据集构建,通过将原数据集中的文本翻译成中文。
- MUGE、Flickr30K - CN 和 COCO - CN 这三个数据集的平均文本长度分别为 7.4、19.7 和 16.8。
2.4.2实验环境与策略
- 使用 32 个 NVIDIA A100 GPU 进行实验,微调策略和损失函数与预训练过程一致,便于模型快速适应微调任务。将批量大小设置得尽可能大,提高训练效率。在对 CN-CLIPViT-L/14@336px 和 CN-CLIPViT-H/14 进行微调时,采用梯度检查点技术,以便能够使用更大的批量大小。除了如批量大小、学习率等,其他超参数默认与预训练相同。在每个训练轮次结束时保存模型参数,以便后续选择最佳模型。
- 微调过程中批量大小、峰值学习率、最大训练轮数和热身迭代次数的具体设置如下
3. 评价
3.1跨模态检索
3.1.1数据集和评估指标
- 在 MUGE、Flickr30K-CN 和 COCO-CN三个跨模态检索数据集上对 Chinese CLIP 进行验证和测试。
- 通过零样本学习和微调两种设置来全面考察模型性能。零样本学习测试模型在未见过特定类别样本时对图像和文本的匹配能力,反映模型的泛化能力;微调则是在已有模型基础上,通过特定数据集进一步优化模型,看其在特定任务上的提升效果。
- 使用 Chinese CLIP 模型来计算图像与文本之间的相似度得分,并返回相似度最高的前 K 个候选结果。对于微调设置,采用对比调整的方法对 Chinese CLIP 模型进行跨模态检索的微调。其评估方式与零样本学习中的评估方式相同。评估指标为 Recall@K,其中 K 取值为 1、5、10,以及平均召回率(MR,即 Recall@K 的平均值)。
3.1.2评估结果
- MUGE - Retrieval 数据集:基础规模的 CN - CLIPViT - B/16 和小型的 CN - CLIPRN50 在零样本学习和微调设置下,相比基线模型 WukongViT - B/32 和 R2D2ViT - B,在平均召回率(MR)指标上有显著提升。大规模模型 CN - CLIPViT - L/14 及更高分辨率的 CN - CLIPViT - L/14@336px 性能突出,CN - CLIPViT - H/14 进一步提升了性能。
- Flickr30K - CN 和 COCO - CN 数据集:重点关注 R@1 指标,无论是基础规模模型 CN - CLIPViT - B/16 和 CN - CLIPRN50,还是大规模模型 CN - CLIPViT - L/14 及 CN - CLIPViT - L/14@336px,在零样本学习和微调设置下,在文本到图像检索和图像到文本检索方面,大多能超越基线模型。而且从 CN - CLIPViT - L/14 提升到 CN - CLIPViT - H/14,性能在各指标上普遍提高。
- 在平均文本长度为 45.3 的 ICR数据集上进行了微调实验。由于 ICR 数据集中的文本较长,我们在微调时将最大文本长度设置为 128。结果表明,Chinese CLIP 在处理较长文本的跨模态检索任务中,也能达到最先进的性能水平。
3.1.3消融研究
- 预训练方式对比:对比使用预训练模型初始化和从头开始预训练两种方式,强调从头开始预训练虽性能持续提升,但总体远不如使用预训练模型初始化的方式。
- LiT 在不同数据集的作用:在 MUGE 数据集(中文原生数据)上,不使用 LiT 预训练效果与两阶段预训练接近;而在 Flickr30K - CN 和 COCO - CN(翻译自英文数据集)上,两阶段预训练(含 LiT)优势显著,说明 LiT 对不同来源的数据影响不同。
- 两阶段预训练的优势:两阶段预训练从第一阶段到第二阶段的切换能有效提升模型性能,突出了让模型适应中文多模态数据分布(特别是视觉信息部分)对提升模型性能的重要意义。
3.2零样本图像分类
3.2.1中文开放域图像分类基准
- ELEVATER 基准测试是该领域的新进展,其中 ICinW 赛道包含如 ImageNet、CIFAR、MNIST 等一系列常用的图像分类数据集,为评估模型在开放域图像分类任务中的性能提供了标准和数据基础。本文基于这些数据集对 Chinese CLIP 零样本图像分类能力进行评估。
3.2.2实验结果
- 基线模型介绍:使用英文数据预训练的基线模型(如 CLIP 和 ALIGN)和中文数据预训练的基线模型(BriVL 和悟空)。
- 与中文基线模型比较:突出 Chinese CLIP 在所有数据集上对中文基线模型的显著优势,表明其在中文相关图像分类任务中的良好性能。
- 与英文基础模型比较:指出在多种数据集以及一般概念或物体分类上,Chinese CLIP 优于英文基础模型 CLIP 和 ALIGN,体现其在通用图像分类任务上的能力。
- 专有名词分类问题:提出在涉及专有名词的分类任务中( 如FGVC - Aircraft 数据集),各模型普遍精度低,特别强调中文模型受翻译和音译影响大,需要构建一个 “针对中文模型的野外图像分类” 基准。
3.2.3实验分析
- 对人工设计提示的敏感性:指出 ELEVATER 基准测试提供的特定提示并非总是最佳,对于某些数据集,利用人类知识设计的特定提示能够显著提升性能。与 OpenAI CLIP 提示翻译的基线对比,不同数据集情况有别。飞机分类的例子,使用与飞机知识相关的特定提示(如 “标签,一张飞机的照片”,“标签,一张战斗机的特写图像” 等),说明特定领域知识设计的提示能提升模型准确率,反映出模型对人工设计提示的敏感性。
- 无法理解否定含义:通过在 KITTI - Distance 和 Patch - Camelyon 数据集实验,表明 CLIP 模型难以理解否定含义。在相关数据集测试中,改变含否定意义的标签导致模型准确率大幅下降,原因是预训练数据集中缺乏关于物体缺失的描述,体现模型在学习否定含义方面的局限性。
4.部署
4.1模型部署
- 基于 PyTorch 预训练的 Chinese CLIP 模型开发基于 ONNX 和 TensorRT 的模型用于部署,这些模型在推理效率上显著提升且性能损失极小,基于 TensorRT 的模型推理效率比 PyTorch 模型快 2 - 10 倍,为模型实际应用提供了有效方案。
- 利用 PyTorch 的 ONNX 模块、ONNXMLTOOLS 工具包将 PyTorch 版 Chinese CLIP 模型转为 FP16 精度的 ONNX 模型,借助 ONNXRUNTIME - GPU 实现 NVIDIA GPU 推理;TENSORRT 工具包将 ONNX 模型转为 TensorRT 模型并提供 GPU 推理环境,且 TensorRT 模型也是 FP16 精度。
4.2性能测试
- 使用含单个 NVIDIA T4 GPU 的服务器(16 Intel Xeon (Skylake) Platinum 8163 CPU cores with 64GB memory.),对 PyTorch 版及转换后的模型做基准测试,模拟在线部署设置批量大小为 1,以 FP16 精度推理 100 批次,计算平均时间。结果显示基于 ONNX 和 TensorRT 的模型推理速度在各模型规模均有优化,小模型规模更显著。
4.3指标评估
- 通过测量在 MUGE 检索数据集上的零样本性能,来评估基于 ONNX 和基于 TensorRT 的模型表征质量。零样本实验结果表明转换后的基于 ONNX 或基于 TensorRT 的模型能够很好地保持视觉和文本表征的质量,在检索性能上平均召回率(MR)下降不超过 0.1。
5. 总结
- 在这项研究中,我们提出了 Chinese CLIP,这是一个专为中文设计的视觉 - 语言基础模型。具体而言,我们构建了一个包含约 2 亿个样本的预训练数据集,并使用所提出的两阶段预训练方法对一系列 Chinese CLIP 模型进行预训练,这种方法提高了预训练的效率和效果。我们全面的评估表明,Chinese CLIP 在多个跨模态检索数据集上,无论是零样本学习还是微调设置下,都能达到最先进的性能。此外,我们证明了 Chinese CLIP 模型在 10 个数据集的零样本图像分类任务中,也能取得颇具竞争力的成绩。
6. 局限性及应对措施
6.1数据局限性及改进方向
- 数据局限性:(1)CLIP 预训练的核心在于对海量数据进行简单却有效的大规模对比预训练,Chinese CLIP 已经使用了约 2 亿个样本,但预训练数据规模仍相对较小。(2)难以确定什么样的数据集对于 CLIP 而言是 “高质量” 的,在以往研究中,预处理方法大多较为简单,以避免数据丢失。然而,仍有许多样本的图像和文本匹配不当,这可能会给预训练提供负面信息。
- 改进方向:(1)扩大预训练数据的数量,以评估随着数据规模扩大,模型性能的提升情况.(2)计划使用预训练的 Chinese CLIP 模型为更大数据集中的每一个图像 - 文本对计算得分,过滤掉得分低于指定阈值的样本,并使用新数据预训练新模型。这是探索数据质量与预训练效果之间关系的可能解决方案之一。而且,这种循环操作可能会在下游任务中带来持续的性能提升。
6.2模型局限性及改进方向
- 模型局限性:随着Chinese CLIP 模型规模的扩大,在不同的下游任务(包括检索和分类)中都能实现稳定的性能提升,与实际应用相关的模型规模的另一个问题是如何构建有效的小型模型。实验结果表明,最小的 Chinese CLIP 模型 CN - CLIPRN50 的性能比 ViT 变体差很多。然而,在实际应用中,可用于部署的有效小型模型通常更受欢迎。
- 改进方向:将继续探索在扩大数据规模的同时扩大模型规模,以构建更有效的 Chinese CLIP,同时探索针对 CLIP 的知识蒸馏方法,以便将大型模型的能力迁移到小型模型中应用。
相关文章:

深度解读 Chinese CLIP 论文:开启中文视觉对比语言预训练
目录 论文概述1.论文摘要2.论文脑图3.论文创新3.1模型构建3.2训练方法3.3数据构建3.4部署优化 4.模型架构 论文解析1. 引言2. 方法2.1数据说明2.2预训练方法2.2.1模型初始化方法2.2.2两阶段预训练方法 2.3预训练细节2.3.1模型初始化2.3.2第一阶段预训练2.3.3第二阶段预训练2.3.…...

SpringBoot 2 后端通用开发模板搭建(异常处理,请求响应)
目录 一、环境准备 二、新建项目 三、整合依赖 1、MyBatis Plus 数据库操作 2、Hutool 工具库 3、Knife4j 接口文档 4、其他依赖 四、通用基础代码 1、自定义异常 2、响应包装类 3、全局异常处理器 4、请求包装类 5、全局跨域配置 补充:设置新建类/接…...

【Oracle专栏】sqlplus显示设置+脚本常用显示命令
Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 1.内容概述 本文主要针对oracle 运维中常用知识点进行整理,包括: 1)sqlplus模式下,为了方便查询设置相应的行宽、列宽、行数。…...

DeepSeek 助力 Vue3 开发:打造丝滑的页眉(Header)
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...

JVM线程分析详解
java线程状态: 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。 线程对象创建…...

【备赛】点亮LED
LED部分的原理图 led前面有锁存器,这是为了防止led会受到lcd的干扰(lcd也需要用到这些引脚)。 每次想要对led操作,就需要先打开锁存器,再执行操作,最后关闭锁存器。 这里需要注意的是,引脚配置…...
【音视频】编解码相关概念总结
NALU RTP PS流 三者总体关系 NALU在RTP中的应用:视频流的RTP传输通常将NALU作为基本的单元进行传输。每个RTP包携带一个或多个NALU,这些NALU包含了视频编码数据。RTP协议通过其头部信息(如时间戳、序列号等)帮助接收端重新排列和…...

Python爬虫(四)- Selenium 安装与使用教程
文章目录 前言一、简介及安装1. Selenium 简介2. Selenium 安装 二、Selenium 基本使用1. 导入Selenium2. 启动浏览器3. 打开网页4. 获取页面标题5. 关闭浏览器6. 完整示例代码 三、Selenium WebDriver1. 简介2. 基本操作2.1 启动浏览器2.2 关闭浏览器2.3 打开网页2.4 关闭当前…...

Node.js项目启动流程以及各个模块执行顺序详解
Node.js项目启动流程以及各个模块执行顺序的问题。首先,我需要仔细阅读并理解我搜索到的资料,从中提取关键信息,然后综合这些信息组织成一个结构化的回答。 首先,根据我搜索到的资料都详细描述了Node.js的启动流程,涉及…...

各种类型网络安全竞赛有哪些 网络安全大赛的简称
本文是对入门学习的一些概念了解和一些常规场景记录 1.CTF(capture the flag)是夺旗赛的意思。 是网络安全技术人员之间进行攻防的比赛。 起源1996年DEFCON全球黑客大会,替代之前真实攻击的技术比拼。 (DEFCON极客大会诞生1993,…...
浅谈人工智能与深度学习的应用案例研究
人工智能与深度学习的应用案例研究 人工智能(AI)与深度学习技术正以惊人的速度渗透到社会生活的各个领域,从医疗健康到艺术创作,从金融风控到城市治理,其应用案例不断突破传统边界。以下是近年来具有代表性的六大应用方向及具体案例: 一、医疗健康:精准诊断与药物研发 医…...

vue2版本elementUI的table分页实现多选逻辑
1. 需求 我们需要在表格页上实现多选要求,该表格支持分页逻辑。 2. 认识属性 表格属性 参数说明类型可选值默认值data显示的数据array——row-key行数据的 Key,用来优化 Table 的渲染;在使用 reserve-selection 功能与显示树形数据时&…...

AI数字人技术源码开发分享:革新短视频营销策略
集星幻影的AI数字人分身系统是一款融合了先进人工智能技术的综合性短视频营销解决方案。该系统整合了形象克隆、声音克隆、AI数字人分身生成、智能剪辑及文案创作等功能,旨在为用户打造虚拟人物资产并提供AI驱动的多模态交互服务。以下是该系统的主要功能概述&#…...

实验环境搭建集锦(docker linux ros2+强化学习环境+linux上单片机串口调试)
为了记住一些实验环境配置开的文章,边配置边记,免得之后忘了。 Docker环境搭建 yay -S docker //下载docker docker info //查看docker配置 sudo systemctl start docker //系统配置打开docker sudo systemctl enable docker //系统配置后台开启d…...
sql调优之数据库开发规范
数据库 数据库开发规范 也可用于PostgreSQL以及兼容PG的数据库 通用命名规则 【强制】 本规则适用于所有对象名,包括:库名、表名、列名、函数名、视图名、序列号名、别名等。 【强制】 对象名务必只使用小写字母,下划线,数字&…...

《Effective Objective-C》阅读笔记(上)
目录 高质量iOS之熟悉OC 了解OC语言的起源 在类的头文件中尽量少引入其他头文件 多用字面语法,少用与之等价的方法 字面数值 字面量数组 字面量字典 局限性 多用类型常量,少用#define预处理指令 用枚举表示状态、选项、状态码 高质量iOS之对象…...

ClkLog里程碑:荣获2024上海开源技术应用创新竞赛三等奖
2024年10月,ClkLog团队参加了由上海计算机软件技术开发中心、上海开源信息技术协会联合承办的2024上海数智融合“智慧工匠”选树、“领军先锋”评选活动——开源技术应用创新竞赛。我们不仅成功晋级决赛,还荣获了三等奖!这一成就不仅是对ClkL…...

【数据结构进阶】哈希表
🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:数据结构 目录 前言 一、哈希表的概念 二、哈希函数的实现方法 1. 直接定址法 2. 除留余数法 三、哈希冲突 1. 开放定址法(闭散列࿰…...

STM32内存五区及堆栈空间大小设置(启动文件浅析)
前言 嘿,朋友们!今天咱们来聊聊STM32的内存五区和堆栈空间大小设置。这可是嵌入式开发里的“必修课”,要是没整明白,程序说不定就“翻车”了。别担心,我这就带你一步步搞懂这事儿,让你轻松上手,…...

微信小程序调用火山方舟(字节跳动火山引擎)中的DeepSeek大模型
微信小程序的轻量化特性与DeepSeek大模型的AI能力结合,可快速构建智能问答、内容生成等场景化服务。通过火山方舟平台提供的标准化接口,开发者无需深入算法细节即可调用模型能力。 一、注册火山引擎账号,创建API Key和model(接入…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...

React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
学习一下用鸿蒙DevEco Studio HarmonyOS5实现百度地图
在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 1. 鸿蒙环境准备 开发工具:下载安装 De…...

Unity VR/MR开发-VR开发与传统3D开发的差异
视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...

《信号与系统》第 6 章 信号与系统的时域和频域特性
目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...

CSS3相关知识点
CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...