当前位置: 首页 > news >正文

多模态论文笔记——U-ViT

大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍U-ViT的模型架构和实验细节,虽然没有后续的DiT在AIGC领域火爆,但为后来的研究奠定了基础,但其开创性的探索值得学习。

在这里插入图片描述

文章目录

      • 论文
      • 背景
      • 架构
      • 训练细节
        • 1. 长跳跃连接 (Long Skip Connections)
        • 2. 时间信息的注入方式 (Feeding Time into the Network)
        • 3. 额外的卷积块 (Extra Convolutional Block)
        • 4. Patch Embedding 的变体
        • 5. 位置编码 (Position Embedding)
      • 深度、宽度、patch大小的影响
      • 总结
      • 长跳跃连接在图像扩散模型中的作用
        • 1. 信息传递
        • 2. 特征整合
        • 3. 梯度传播
        • 4. 其他作用
  • 历史文章
    • 机器学习
    • 深度学习
      • 多模态论文

在前面的多模态系列文章中,我们介绍了DiT,其作为AIGC时代的新宠儿,将Transformer和Diffusion结合起来的,是近几年图像和视频生成的领域的优选结构。其实早在2022年9月,清华大学团队就发布了用「基于Transformer的架构U-ViT」替代基于卷积架构的U-Net,只不过没有现在的DiT火热。下面详细介绍U-ViT:

论文

All are Worth Words: A ViT Backbone for Diffusion Models

背景

扩散模型是一种强大的深度生成模型,近年来在高质量图像生成任务中展现了巨大的潜力。它们的发展速度迅猛,广泛应用于文本到图像生成、图像到图像生成、视频生成、语音合成以及3D合成等领域。

在目前的扩散模型中,骨干(backbones)结构的变革在扩散模型中起着核心作用。目前火热的扩散模型,如SD系列模型就是基于CNN的U-Net的,并取得了优异的性能。它通过下采样(encoding)和上采样(decoding)操作,结合跳跃连接,在捕捉局部细节和全局结构方面表现突出。

在SD 3 之前的扩散模型使用的是以基于CNN的U-Net为骨干结构的,在SD 3 之后的系列中,则是使用了DiT作为了骨干结构。
扩散模型系列参考:SD合集

将视觉和Transformer相结合的 ViT 在各种视觉任务中显现出了前景,而基于CNN的U-Net在扩散模型中仍占主导地位。本文中设计了一个简单而通用的基于ViT的架构(U-ViT),替代扩散模型中的U-Net,用于生成图像。

ViT参考:多模态论文笔记——ViT、ViLT

  • 设计一个基于其他架构(如ViT)的模型,要在性能上达到甚至超越U-Net并不容易。
  • ViT作为Transformer家族的一员,擅长处理全局特征,但其对局部细节的捕捉能力不如CNN。因此,直接用ViT替代U-Net并不现实。

U-ViT 核心设计如下:

  • U-ViT是基于ViT(Vision Transformer)架构的,它借鉴了U-Net的结构,用于替代扩散模型中的基于 CNN 的 U-Net,以生成图像。
  • 它将时间、条件和噪声图像补丁作为 token 输入,并使用**长跳跃连接(long skip connections)**连接浅层和深层。

效果:

  • 在无条件、类条件图像生成和文本到图像生成任务中,U-ViT表现出色。
  • 研究表明,长跳跃连接对于扩散模型中的图像建模至关重要,而 CNN-based U-Net 中的下采样和上采样操作并非总是必需的。

架构

本文中,作者设计的U-ViT架构,如下图所示:
在这里插入图片描述

图1. 用于扩散模型的U-ViT架构,其特点是将所有输入(包括时间、条件和噪声图像补丁)作为token,并在浅层和深层之间采用(#Blocks-1)/2个长跳跃连接。

架构说明:

  • U-ViT遵循ViT的设计方法,对图片进行一个Patch化的操作,并且U-ViT将所有输入(包括时间、条件和图像patch)都视为token。
    • 将时间 t t t、条件 c c c图像patch后的加噪图像 x t x_t xt 作为输入,然后【通过 ϵ θ ( x t , t , c ) \epsilon_\theta(x_t, t, c) ϵθ(xt,t,c)】在 U-ViT模型中预测加入 x t x_t xt中的噪声。
  • 受基于CNN的U-Net在扩散模型中的成功启发,U-ViT采用了类似的浅层和深层之间的长跳跃连接。
    • ϵ θ ( x t , t , c ) \epsilon_\theta(x_t, t, c) ϵθ(xt,t,c)的目标是像素级预测任务,对低级特征敏感。长跳跃连接为低级特征提供了捷径,使用长跳跃连接(long skip connections)连接浅层和深层,使浅层特征传递到深层,为深层网络提供更丰富的信息。
  • 【可选项】U-ViT在输出之前添加一个3×3的卷积块。旨在防止transformer生成的图像中出现潜在的伪影(potential artifacts in images)。

在论文的Background部分,还对扩散模型的扩散原理进行了简单的回顾,如不了解这个内容,建议参考:Stable Diffusion的加噪和去噪详解

训练细节

作者通过系统的实验研究,精心设计了其关键实现细节,并在CIFAR10数据集上进行了消融实验,通过消融实验,作者确定了以下最佳实现细节:

  1. 长跳跃连接采用 连接后线性投影 的方式。
  2. 时间信息通过 Token 注入更优。
  3. 额外卷积块在 线性投影后 添加效果最佳。
  4. Patch Embedding 使用 线性投影 更好。
  5. 位置编码使用 一维可学习嵌入(1-dimensional learnable position embedding) 是最佳选择(U-ViT和ViT、ViLT、DiT选择的位置编码一样,都是1D position embeddings,不同的是:DiT是不可学习的,ViT、ViLT和U-ViT是可学习的)。

消融实验(Ablation Study)是一种常见的实验方法,用于评估复杂系统中各个组件或设计对整体性能的贡献。通过系统地移除、替换或修改某个组件,然后观察模型性能的变化,研究人员可以验证该组件的作用并优化设计。

1. 长跳跃连接 (Long Skip Connections)

问题:哪种长跳跃连接方法更优?
实验设置:考虑以下几种主分支 h m h_m hm 和长跳跃分支 h s h_s hs 的组合方法:

  • 方法1:将它们连接后执行线性投影: Linear(Concat ( h m , h s ) ) \text{Linear(Concat}(h_m, h_s)) Linear(Concat(hm,hs))
  • 方法2:直接相加: h m + h s h_m + h_s hm+hs
  • 方法3:线性投影 h s h_s hs 后相加: h m + Linear ( h s ) h_m + \text{Linear}(h_s) hm+Linear(hs)
  • 方法4:相加后进行线性投影: Linear ( h m + h s ) \text{Linear}(h_m + h_s) Linear(hm+hs)
  • 方法5:不使用长跳跃连接。

在这里插入图片描述

结果

  • 方法1(连接后线性投影) 的性能最佳。该方法显著改变了表征信息,提升了模型性能。
  • 方法2(直接相加) 表现较差,因为Transformer内部已有加法操作,导致无显著增益。

2. 时间信息的注入方式 (Feeding Time into the Network)

问题:如何将时间 t t t 送入网络?
实验设置

  • 方法1:将时间 t t t 作为一个Token输入(如图1所示)。
  • 方法2:通过自适应层归一化 (Adaptive LayerNorm, AdaLN) 融入时间信息:
    AdaLN ( h , y ) = y s ⋅ LayerNorm ( h ) + y b \text{AdaLN}(h, y) = y_s \cdot \text{LayerNorm}(h) + y_b AdaLN(h,y)=ysLayerNorm(h)+yb
    其中, y s y_s ys y b y_b yb 为时间嵌入的线性投影。

在这里插入图片描述

结果

  • 方法1(将时间视为Token) 效果更好,尽管实现简单。

3. 额外的卷积块 (Extra Convolutional Block)

问题:Transformer后额外卷积块的位置对性能的影响?
实验设置

  • 方法1:在线性投影后添加一个3×3卷积块,将Token映射到图像Patch。
  • 方法2:在线性投影前添加一个3×3卷积块。
  • 方法3:不添加卷积块。

在这里插入图片描述

结果

  • 方法1(在线性投影后添加卷积块)性能略优。

4. Patch Embedding 的变体

问题:哪种Patch Embedding方式更好?
实验设置

  • 方法1:使用线性投影将Patch映射为Token嵌入(原始方式)。
  • 方法2:堆叠3×3卷积块,后接1×1卷积块,将图像映射为Token嵌入。

在这里插入图片描述

结果

  • 方法1(原始线性投影) 表现优于卷积堆叠方式。

5. 位置编码 (Position Embedding)

问题:哪种位置编码更优?
实验设置

  • 方法1:一维可学习位置嵌入(ViT默认设置)。
  • 方法2:二维正弦位置嵌入,Patch的 position ( i , j ) \text{position}(i, j) position(i,j) i i i j j j 的正弦编码拼接得到, i i i j j j 分别是二维网格中的行索引列索引
  • 方法3:不使用任何位置编码。

在这里插入图片描述

结果

  • 方法1(1D可学习位置嵌入) 性能最佳。
  • 方法3(无位置编码) 无法生成有意义的图像,表明位置编码对图像生成至关重要。

深度、宽度、patch大小的影响

论文中还探讨了深度(层数)、宽度(隐藏层尺寸)和patch size对模型性能的影响。效果如下图所示:

在这里插入图片描述

  1. 深度 (Depth):

    • 随着模型深度的增加,性能得到了提高(例如:depth=9, 13),证实了 scale 特性。
    • 然而,在50K训练迭代后,增加到更大的深度(depth=17)并未带来额外的性能提升。
  2. 宽度 (Width):

    • 增加隐藏层的宽度(例如:width=256, 512)有助于性能的提升。
    • 然而,进一步增加到width=768并没有带来性能增益。
  3. Patch Size:

    • 减小patch size可以提高性能(例如:patch-size=8, 2),但是,减小到patch-size=1时,不再有任何性能提升。
    • 作者认为,为了获得良好的性能,较小的patch size(如patch-size=2)是必要的。推测原因是扩散模型的噪声预测任务需要低级别的细节,而这与高级任务(如分类)不同。
  4. 低维潜在表示:

    • 小的patch尺寸对于高分辨率图像的计算代价较高,因此作者选择将图像转换为低维潜在表示,并利用U-ViT对这些低维表示进行建模,【同SD模型,使用VAE进行降维】。

总结

通读完U-ViT,可以看出 U-ViT 和 后面发布并且爆火的 DiT在设计上有异曲同工之处:

  • 二者均是将 Transformer 与扩散模型融合的思路
  • 实验路径也相似,比如都采用了1 D 的位置编码 、在patch size上,都得出了同样的结论:patch size 为 2*2 是最理想的,都使用了和ViT一样的位置编码:1 D的正余弦。
  • 在模型参数量上,两者都在 50M-500M 左右的参数量上做了实验,最终都证实了Transformer的强大 scale 特性。
  • 额外的条件信息(时间信息/Timesteps,和文本信息)的注入方式实验中,都验证了自适应层规范化(AdaLN)。只不过U-ViT实验表明将时间 t t t 作为一个Token输入虽然简单,但是表现更好;而DiT实验中则认为AdaLN(准确的说是adaLN-Zero)效果更好。

DiT参考历史文章:多模态论文——DiT

长跳跃连接在图像扩散模型中的作用

长跳跃连接(long skip connections) 在图像扩散模型中的作用和 ResNet(Residual Networks) 的作用有相似之处。下面是长跳跃连接在图像扩散模型中的作用的详细介绍

1. 信息传递
  • 直接连接浅层和深层,细节保留:通过长跳跃连接(long skip connections),浅层提取的低级特征(如边缘、纹理等)可以直接传递给深层网络。 使深层网络可以获得来自浅层的更丰富的信息。这种信息传递可以帮助深层网络更好地理解和捕捉图像中的细节和特征,从而提高图像扩散模型的性能。
2. 特征整合
  • 融合多层次信息,增强上下文理解:通过跳跃连接,将浅层特征与深层特征融合(如通过加法、拼接等操作),形成丰富的多尺度特征表示。可以获得更丰富、更全局的特征表示。这种特征整合可以帮助模型更好地理解图像的上下文和语义信息,提高生成图像的质量和准确性。
3. 梯度传播
  • 缓解梯度消失和梯度爆炸,增强训练稳定性:长跳跃连接通过直接连接浅层和深层,使得梯度能够从深层更有效地反向传播到浅层,避免梯度在传播过程中的逐渐衰减或增大。梯度的顺畅传播有助于网络各层参数的学习更加稳定,从而提高训练的收敛速度和效果。
4. 其他作用
  • 支持高分辨率生成:在高分辨率图像生成中,长跳跃连接能够帮助模型更好地传递细粒度特征信息,避免因过多的下采样导致的分辨率损失。
  • 减少依赖下采样和上采样操作:相比传统的卷积U-Net中大量依赖下采样和上采样,长跳跃连接可以减少对这些操作的依赖,从而降低结构复杂度。

历史文章

机器学习

机器学习笔记合集

深度学习

深度学习笔记合集

多模态论文

深度学习笔记——ViT、ViLT
深度学习笔记——DiT(Diffusion Transformer)
深度学习笔记——CLIP、BLIP
多模态论文笔记——BLIP2
深度学习笔记——VQ-VAE和VQ-VAE-2
多模态论文笔记——dVAE(DALL·E的核心部件)
多模态论文笔记——LLaVA
多模态论文笔记——Coca
多模态论文笔记——CogVLM和CogVLM2

相关文章:

多模态论文笔记——U-ViT

大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍U-ViT的模型架构和实验细节,虽然没有后续的DiT在AIGC领域火爆,但为后来的研究奠定了基础,但其开创性的探索值得学习…...

08-1_队列的理论讲解

08-1_队列的理论讲解 队列概念理解 队列就是一个传送带,就是一个流水线 工人放入的数据, 放在传送带上,送给消费者, 消费者第一次拿到的数据,就是工人第一次放上的数据(类比队列,先进先出) freertos队列应用思考 队列对于消费者(取数据): (1)当队列没有数据, 消费者需要进入…...

HTML基础入门——简单网页页面

目录 一,网上转账电子账单 ​编辑 1,所利用到的标签 2,代码编写 3,运行结果 二,李白诗词 1,所用到的标签 2,照片的编辑 3,代码编写 4,运行结果 一,网…...

Proteus-8086调试汇编格式的一点心得

这阵子开始做汇编的微机实验(微机原理与接口技术题解及实验指导,吴宁版本13章),中间出了挺多问题,解决后记录下。 先上电路图 用子电路来仿真发现仿真的时候子电路这块根本没有高低电平输出,只好把子电路拿…...

Python入门教程 —— 多任务

1.线程 1.1.线程安全问题 线程访问全局变量 import threading g_num = 0 def test(n):global g_numfor x in range(n):g_num += xg_num -= xprint(g_num)if __name__ == __main__:t1 = threading.Thread(target=test, args=(10,))t2 = threading.Thread(target=test, args=(…...

【笔记】算法记录

1、求一个数的素因子&#xff08;试除法&#xff09; // 获取一个数的所有素因子 set<int> getPrimeFactors(int num) {set<int> primeFactors;for (int i 2; i * i < num; i) {while (num % i 0) {primeFactors.insert(i);num / i;}}if (num > 1) {prime…...

2024年1月4日蜻蜓hr人才招聘系统v1.1.7更新-正式版发布-客户端源代码开源发布供学习-本产品完成上线正式版-修复多个bug-优雅草果果|小无

2024年1月4日蜻蜓hr人才招聘系统v1.1.7更新-正式版发布-客户端源代码开源发布供学习-本产品完成上线正式版-修复多个bug-优雅草果果|小无 前端代码开源库 关于开源说明&#xff1a;企业服务-招聘信息管理系统-前端uniapp-系统前端开放源代码仅供学习-优雅草科技-目前优雅草科…...

【网络】计算机网络的分类 局域网 (LAN) 广域网 (WAN) 城域网 (MAN)个域网(PAN)

局域网是通过路由器接入广域网的 分布范围 局域网Local Area Network&#xff1a;小范围覆盖&#xff0c;速度高&#xff0c;延迟低(办公室&#xff0c;家庭&#xff0c;校园&#xff0c;网络) 广域网Wide Area Network 大范围覆盖&#xff0c;速度相对低&#xff0c;延迟高…...

DeepSeek:性能强劲的开源模型

deepseek 全新系列模型 DeepSeek-V3 首个版本上线并同步开源。登录官网 chat.deepseek.com 即可与最新版 V3 模型对话。 性能对齐海外领军闭源模型​ DeepSeek-V3 为自研 MoE 模型&#xff0c;671B 参数&#xff0c;激活 37B&#xff0c;在 14.8T token 上进行了预训练。 论…...

MySql 通过 LOAD DATA INFILE 导入大量数据

背景&#xff1a;要在本地Mysql导入几十万-百万条数据非常耗时&#xff0c;从网上找到通过load data infile 方式可以快速导入大量数据&#xff0c;就动手尝试了。结果就是不太适合复杂的格式数据导入&#xff0c;比如字段多&#xff0c;数据格式多等&#xff0c;但对于简单的表…...

Linux系统中解决端口占用问题

在日常的 Linux 系统管理和开发过程中&#xff0c;端口占用是一个常见且令人头疼的问题。无论是部署新服务、调试应用程序&#xff0c;还是进行系统维护&#xff0c;遇到端口被占用都可能导致服务无法正常启动或运行。本文将详细介绍在 Linux 系统中如何识别和解决端口占用问题…...

两种方式实现Kepware与PLC之间的心跳检测

两种方式实现Kepware与PLC之间的心跳检测 实现Kepware与PLC之间的心跳检测1.OPCUA 外挂程序2.Kepware Advanced Tag 实现Kepware与PLC之间的心跳检测 1.OPCUA 外挂程序 这是通过上位程序来触发心跳的一种机制&#xff0c;在C#中&#xff0c;可以利用OPC UAOPCAutodll的方式…...

使用DockerCompose部署服务

由于格式或图片解析问题&#xff0c;为了更好的阅读体验&#xff0c;可前往 阅读原文 以前我们总是用命令管理每个容器的启动、停止等等&#xff0c;若有多个容器时可能还存在启动优先级的问题&#xff0c;那就要等到指定的容器启动后再去启动另一个容器&#xff0c;对于整体的…...

第P5周-Pytorch实现运动鞋品牌识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 具体实现 &#xff08;一&#xff09;环境 语言环境&#xff1a;Python 3.10 编 译 器: PyCharm 框 架: Pytorch &#xff08;二&#xff09;具体步骤 时间…...

react-quill 富文本组件编写和应用

index.tsx文件 import React, { useRef, useState } from react; import { Modal, Button } from antd; import RichEditor from ./RichEditor;const AnchorTouchHistory: React.FC () > {const editorRef useRef<any>(null);const [isModalVisible, setIsModalVis…...

因泰立科技激光车检器,高速公路的精准流量统计专家

高速公路自由流门架激光车检器&#xff0c;专为解决高速公路交通管理中的各种挑战而设计。该产品采用先进的激光测量技术&#xff0c;能够对动态通过的车辆进行高速动态扫描&#xff0c;通过测量物体表面点的反射距离&#xff0c;迅速换算成三维空间坐标&#xff0c;实现对车辆…...

windows中,git bash 使用conda命令

1、首先在Anaconda的安装路径如/Anaconda3/Scripts下&#xff0c;打开git bash窗口&#xff0c;然后输入下面的命令。 ./conda init bash 运行之后&#xff0c;会在用户目录下面生成.bash_profile文件&#xff0c;文件内容如下&#xff1a; # >>> conda initialize…...

《繁星路》V1.8.3(Build16632266)官方中文学习版

《繁星路》官方中文版https://pan.xunlei.com/s/VODae2_2Z3QyMF02I5y321uHA1?pwdqgsh# 作为一款星际模拟游戏&#xff0c;完美融合了硬科幻元素与基地建设玩法&#xff0c;体验改造行星的恢弘与壮阔。化身人工意识AMI&#xff0c;遵照基本指示推进火星改造的各项工作&#xf…...

vscode 无法使用npm, cmd命令行窗口可以正常执行

解决方法&#xff1a; 执行命令获得命令的位置 get-command npm 得到如下 然后删除或者修改 npm.ps1文件 让其不能使用就行。然后重启vscode即可。 pnpm 同理即可 另外加速源 国内镜像源&#xff08;淘宝&#xff09;&#xff1a; npm config set registry https://regist…...

html + css 顶部滚动通知栏示例

前言 在现代网页设计中&#xff0c;一个吸引人的顶部滚动通知栏不仅能够有效传达重要信息&#xff0c;还能提升用户体验。通过使用HTML和CSS&#xff0c;我们可以创建既美观又功能强大的组件&#xff0c;这些组件可以在不影响网站整体性能的情况下提供实时更新或紧急通知。 本…...

阿里mod_asr3.0集成webrtc静音算法

alibabacloud-nls-cpp-sdk-master 先到阿里官网下载nls库的源代码&#xff0c;编译生成对应的库文件和头文件。 我编译的放到了以下目录。 /home/jp/2025/alibabacloud-nls-cpp-sdk-master/build/install/NlsSdk3.X_LINUX/include/ /home/jp/2025/alibabacloud-nls-cpp-sdk-…...

【MySQL】表的基本查询

文章目录 1. 插入 insert1.1 单行插入2.2 多行插入2.3 插入 否则更新2.4 替换 2. 查找 select2.1 select 列2.2 where 条件2.3 order by 排序2.4 筛选分页结果 3. 更新 update4. 删除 delete5. 截断 truncate6. 插入查询结果7. 聚合函数8. group by子句 我们经常说数据库就是CR…...

2025-01-07日SSH钓鱼日志

今天发现了挖矿程序部署脚本&#xff0c;可针对性排查。 时间来源类型详情20:16:08146.190.50.206:36694CHANNEL_REQUEST通道&#xff1a;1&#xff0c;类型&#xff1a;exec(command:uname -a)20:16:08146.190.50.206:36694OPEN_CHANNEL通道&#xff1a;1&#xff0c;类型&am…...

C++语言的计算机基础

C语言的计算机基础 引言 C是一种通用的编程语言&#xff0c;由Bjarne Stroustrup于1979年开发。它在C语言的基础上增加了面向对象的特性&#xff0c;使得程序设计变得更加灵活和高效。C广泛应用于系统软件、游戏开发、实时仿真等领域。本文将深入探讨C语言的基础知识&#xf…...

怎么把word试题转成excel?

在教育行业、学校管理以及在线学习平台中&#xff0c;试题库的高效管理是一项核心任务。许多教育工作者和系统开发人员常常面临将 Word 中的试题批量导入 Excel 的需求。本文将详细介绍如何快速将试题从 Word 转换为 Excel&#xff0c;帮助您轻松解决繁琐的数据整理问题&#x…...

在线商城系统设计与开发-代码(源码+数据库+文档)

亲测完美运行带论文&#xff1a;文末获取源码 文章目录 项目简介&#xff08;论文摘要&#xff09;运行视频包含的文件列表&#xff08;含论文&#xff09;前端运行截图后端运行截图 项目简介&#xff08;论文摘要&#xff09; 现代经济快节奏发展以及不断完善升级的信息化技术…...

HCIE-day10-ISIS

ISIS ISIS&#xff08;Intermediate System-to-Intermediate System&#xff09;中间系统到中间系统&#xff0c;属于IGP&#xff08;内部网关协议&#xff09;&#xff1b;是一种链路状态协议&#xff0c;使用最短路径优先SPF算法进行路由计算&#xff0c;与ospf协议有很多相…...

解决SSH连接时遇到的“远程主机身份验证已更改 (WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!)”警告

文章目录 引言警告信息解读造成原因解决方案 引言 在使用SSH协议进行远程服务器管理的过程中&#xff0c;可能会遇到这样的情况&#xff1a;当尝试通过SSH连接到某个远程主机时&#xff0c;终端突然弹出一条警告信息&#xff0c;提示“远程主机身份验证已更改”。 警告信息解…...

C语言的循环实现

C语言的循环实现 C语言是一种功能强大且广泛使用的编程语言&#xff0c;其语法简单易懂&#xff0c;适用于系统软件、嵌入式系统和高性能应用程序等多个领域。在C语言中&#xff0c;控制程序执行流程的基本结构之一就是循环。循环允许程序在满足某个条件的情况下重复执行一段代…...

如何使用vue引入three.js

在 Vue.js 项目中引入和使用 Three.js 是一个常见的需求&#xff0c;Three.js 是一个用于在浏览器中创建和显示动画 3D 计算机图形的 JavaScript 库。以下是一个基本的示例&#xff0c;展示如何在 Vue 项目中引入和使用 Three.js。 1. 创建 Vue 项目 如果你还没有一个 Vue 项…...

【C++】深入理解迭代器(Iterator)

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;什么是迭代器&#xff1f;迭代器与指针的比较 &#x1f4af;std::string 中的迭代器示例代码与图示分析运行结果&#xff1a;图示说明&#xff1a; 小提示 &#x1f4af;正…...

微信小程序实现长按录音,点击播放等功能,CSS实现语音录制动画效果

有一个需求需要在微信小程序上实现一个长按时进行语音录制&#xff0c;录制时间最大为60秒&#xff0c;录制完成后&#xff0c;可点击播放&#xff0c;播放时再次点击停止播放&#xff0c;可以反复录制&#xff0c;新录制的语音把之前的语音覆盖掉&#xff0c;也可以主动长按删…...

QPS和TPS 的区别是什么?QPS 大了会有什么问题,怎么解决?

QPS 和 TPS 的区别是什么&#xff1f;QPS 大了会有什么问题&#xff0c;怎么解决&#xff1f; QPS&#xff08;Queries Per Second&#xff09;和 TPS&#xff08;Transactions Per Second&#xff09;都是衡量系统性能的重要指标&#xff0c;尤其是在 Web 服务、数据库和分布…...

小程序开发-页面事件之上拉触底实战案例

&#x1f3a5; 作者简介&#xff1a; CSDN\阿里云\腾讯云\华为云开发社区优质创作者&#xff0c;专注分享大数据、Python、数据库、人工智能等领域的优质内容 &#x1f338;个人主页&#xff1a; 长风清留杨的博客 &#x1f343;形式准则&#xff1a; 无论成就大小&#xff0c;…...

[读书日志]从零开始学习Chisel 第六篇:Scala面向对象编程——特质(敏捷硬件开发语言Chisel与数字系统设计)

3.4特质 3.4.1什么是特质 特质使用trait开头&#xff0c;它与单例对象很像&#xff0c;两者都不能有输入参数&#xff0c;但单例对象是具体的&#xff0c;特质是抽象的。两者都不能用new实例化&#xff0c;类&#xff0c;单例对象&#xff0c;特质三者内部都可以包含字段和方…...

导航技术的分类

导航技术可以根据不同的分类标准进行划分&#xff0c;以下是从不同角度对导航技术的分类&#xff1a; 一、按导航信息获取原理分类 无线电导航&#xff1a;利用无线电波的传播特性来测定运动体的位置、速度等导航参数。常见的无线电导航系统包括罗兰-C、奥米加、台卡等。卫星…...

学习标准库atomic_base.h中typedef enum memory_order

1、背景 在多线程编程中&#xff0c;特别是在使用原子操作时&#xff0c;内存顺序&#xff08;Memory Order&#xff09;是一个关键的概念。在C11及其之后的标准中&#xff0c;memory_order 枚举类型&#xff08;typedef enum memory_order&#xff09;用于控制原子操作的内存…...

git push -f 指定分支

要将本地代码推送到指定的远程分支&#xff0c;你可以使用以下步骤和命令&#xff1a; 确认远程仓库&#xff1a; 确保你的本地仓库已经与远程仓库关联。你可以使用以下命令查看当前的远程仓库状态&#xff1a; git remote -v查看本地分支&#xff1a; 使用命令查看当前存在的本…...

ADO.NET知识总结3---SqlCommand命令对象

目录 4.1 SqlCommand对象介绍 4.2 SqlCommand创建 4.3 Command执行方法 4.1 SqlCommand对象介绍 SqlCommand&#xff1a;Ado.Net中执行数据库命令的对象。 它对SQLServer数据库执行一个T-SQL语句或存储过程。 重要属性: Connection: SqlCommand对象使用的SqlConnection对…...

CANopen转EtherCAT网关连接伺服驱动

在现代工业自动化领域&#xff0c;CANopen和EtherCAT是两种常见的通信协议&#xff0c;各自在不同的应用场景中发挥着重要作用。然而&#xff0c;随着工业自动化系统的日益复杂化&#xff0c;不同设备间的通信需求也变得多样化。因此&#xff0c;如何实现不同协议设备之间的无缝…...

前端基础技术全解析:从HTML前端基础标签语言开始,逐步深入CSS样式修饰、JavaScript脚本控制、Ajax异步通信以及WebSocket持久通信

目录 前言&#xff1a; 1.前端技术html简单了解&#xff1a; 1.1HTML代码是由标签构成的。 1.2.HTML 文件基本结构 1.3.HTML 常见标签 标题标签: 段落标签: p 文本格式化标签 图片标签&#xff1a; 超链接标签: a 测试代码&#xff1a; 展示效果&#xff1a; 表单…...

试用kotlin multiplatform

目录 多平台框架简介 示例工程建立与运行 常用库 桌面平台遇到的一些问题 使用总结 多平台框架简介 多平台的框架不少,flutter,rust,每一个都是优点明显,缺点也明显. flutter的桌面端控件少,质量不一.dart语言丑陋又慢.我不喜欢它. rust,桌面gui不成熟,成熟一些的slint…...

Scratch023-(沙漠变绿洲)

提示&#xff1a; 知识回顾&#xff1a; 1、画笔的各个属性 2、“将笔的颜色设为”积木 3、“将笔的颜色增加”积木 文章目录 前言一、案例展示二、功能分析三、步骤拆解1.背景角色和画笔的初始化&#xff08;1&#xff09;初始化画笔2、一起绘制一个小雨滴3、绘制多个随机的小…...

【Linux】深入理解文件系统(超详细)

目录 一.磁盘 1-1 磁盘、服务器、机柜、机房 &#x1f4cc;补充&#xff1a; &#x1f4cc;通常网络中用高低电平&#xff0c;磁盘中用磁化方向来表示。以下是具体说明&#xff1a; &#x1f4cc;如果有一块磁盘要进行销毁该怎么办&#xff1f; 1-2 磁盘存储结构 ​编辑…...

基于 Apache Commons Pool 实现的 gRPC 连接池管理类 GrpcChannelPool 性能分析与优化

基于 Apache Commons Pool 实现的 gRPC 连接池管理类 GrpcChannelPool 性能分析与优化 1. 输出关键信息的代码示例 日志记录方法 使用以下代码记录连接池的关键信息&#xff0c;帮助分析连接池的状态和性能瓶颈&#xff1a; import org.apache.commons.pool2.impl.GenericO…...

微信小程序实现登录注册

文章目录 1. 官方文档教程2. 注册实现3. 登录实现4. 关于作者其它项目视频教程介绍 1. 官方文档教程 https://developers.weixin.qq.com/miniprogram/dev/framework/路由跳转的几种方式&#xff1a; https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.switchTab…...

网络安全-kail linux 网络配置(基础篇)

一、网络配置 1.查看网络IP地址&#xff0c; 我的kail&#xff1a;192.168.15.128 使用ifconfig查看kail网络连接情况&#xff0c;ip地址情况 又复制了一台kail计算机的IP地址。 再看一下windows本机&#xff1a;使用ipconfig进行查看&#xff1a; 再看一下虚拟机上的win7I…...

Lua语言的软件工程

Lua语言的软件工程 引言 在软件工程领域&#xff0c;编程语言的选择对项目的成功与否有着至关重要的影响。Lua语言作为一种轻量级、高效、可扩展的脚本语言&#xff0c;近年来在游戏开发、嵌入式系统以及其他高性能应用程序中得到了广泛应用。本文将深入探讨Lua语言的特点、优…...

【Rust自学】11.4. 用should_panic检查恐慌

喜欢的话别忘了点赞、收藏加关注哦&#xff08;加关注即可阅读全文&#xff09;&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 11.4.1. 验证错误处理的情况 测试函数出了验证代码的返回值是否正确&#xff0c;还需要验证…...

基于深度模型的印章检测(c++)

效果展示&#xff1a; 有点&#xff1a; &#xff08;1&#xff09;快速&#xff08;几十毫秒级别&#xff09;&#xff1b; &#xff08;2&#xff09;精度高&#xff1b; int main() {std::string imagePath;// 提示用户输入图像路径std::cout << "请输入图像路…...