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

超越所有SOTA达11%!媲美全监督方法 | UC伯克利开源UnSAM

文章链接:https://arxiv.org/pdf/2406.20081

github链接:https://github.com/frank-xwang/UnSAM

SAM 代表了计算机视觉领域,特别是图像分割领域的重大进步。对于需要详细分析和理解复杂视觉场景(如自动驾驶、医学成像和环境监控)的应用特别有价值。今天和大家一起学习的是无监督SAM(UnSAM),用于能够即时启动并自动进行整体图像分割,而无需人工标注数据的方法。UnSAM利用分而治之的策略来“发现”视觉场景的层次结构。首先,利用自顶向下的聚类方法将未标注的图像分割成实例级和语义级的segments。对于每个segment内的所有像素,采用自底向上的聚类方法来迭代合并它们,从而形成更大的组,建立层次结构。这些无监督的多粒度masks随后用于监督模型训练。

在七个流行数据集上评估结果显示,UnSAM在语义平均召回率(AR)方面与有监督的SAM模型取得了竞争力的结果,并且在无监督分割领域超过了先前的最新技术,提升了11%。此外,还展示了有监督的SAM模型也能从本文的自监督标签中受益。通过将无监督伪masks集成到SA-1B的真实masks中,并仅使用SA-1B的1%进行训练,轻度半监督的UnSAM经常能够分割出有监督SAM忽视的实体,其在SA-1B数据集上的AR提升超过了6.7%,AP提升了3.9%。

整体亮点如下:

UnSAM的能力在七个主要的整体实体和部分分割数据集上进行了严格测试,例如MSCOCO、LVIS、SA-1B、ADE、Entity、PartImageNet和PACO。如下图1所示,展示了一些值得注意的表现:

  • 无监督分割模型与SAM之间的性能差距可以显著缩小:通过在SA-1B中仅1%的未标注图像上使用ResNet50骨干网络进行训练,UnSAM不仅将无监督分割的最新技术水平提高了10%,还达到了与劳动密集的全监督SAM相媲美的性能。
  • 监督式SAM也可以从我们的自监督标签中受益:将无监督伪mask与SA-1B的真实数据结合并在该组合数据上重新训练UnSAM,使得UnSAM+在AR方面超越SAM 6.7%以上,在AP方面超越3.9%。观察到UnSAM和UnSAM+经常能够发现被SAM遗漏的实体。

UnSAM: 无监督SAM

分而治之的分层图像分割

无监督分割任何内容模型从生成尊重视觉场景分层结构的伪masks开始,无需监督。这种方法受到的启发是,“分而治之”的策略是人类视觉系统用来高效处理和分析自然场景中复杂视觉信息的基本组织原则。伪masks生成pipeline “分而治之”,在算法 1 中总结,并在图 2 中说明,包括两个阶段:

分阶段:利用基于归一化切的方法,即 CutLER,从未标注的原始图像中获取语义和实例级别的masks。然而,由 CutLER 预测的粗粒度masks可能存在噪声。为了减少这种影响,过滤掉置信度低于阈值 τ \tau τ 的masks。经验上,显著的语义和实例级别实体通常包含更丰富的部分级别实体(例如,一个人具有可识别的部分,如腿、手臂和头部,而背景天空则几乎没有或没有子级实体)。为了提取具有分层结构的这些部分级实体,使用Conquer stage。

Conquer阶段:对于在前一阶段发现的每个实例/语义级别masks,采用迭代合并来将粗粒度masks分解为更简单的部分,形成分层结构。

具体而言,首先使用在分阶段获得的masks裁剪局部patches,并双线性插值局部patches至分辨率为 256×256。然后,将它们送到预训练的 DINO ViT-B/8编码器 f(·) 中,并从最后的注意力层提取“关键”特征 k i = f ( p i ) k_i = f(p_i) ki=f(pi) 作为局部patch p i p_i pi 的patch特征。随后,Conquer stage采用迭代合并将patch分组为更大的clusters,具有预定义的余弦相似度阈值 θ ∈ { θ 1 , . . . , θ l } \theta \in \{\theta_1,...,\theta_l\} θ{θ1,...,θl},其中 l 是预定义的粒度级别。

在第 t 次迭代中,本文的方法找到两个具有最高余弦相似度的相邻patch ( p i , p j p_i, p_j pi,pj),这两个patch分别来自于两个不同的clusters ( C m t , C n t C^t_m, C^t_n Cmt,Cnt),其余弦相似度为 k i t k j t ∣ ∣ k i t ∣ ∣ 2 ∣ ∣ k j t ∣ ∣ 2 \frac {k^t_ik^t_j} {||k^t_i||_2||k^t_j||_2} ∣∣kit2∣∣kjt2kitkjt,将它们合并为一个clusters,并更新 k i t k^t_i kit k j t k^t_j kjt a m k i t + a n k j t a m + a n \frac {a_mk^t_i + a_nk^t_j} {a_m + a_n} am+anamkit+ankjt,其中 a m a_m am 是clusters C m t C^t_m Cmt 中的补丁数目( p i ∈ C m t p_i \in C^t_m piCmt)。Conquer stage重复这一步骤,直到最大余弦相似度小于 θ t \theta_t θt,将所有合并的clusters收集为新的部分级别伪masks,并使用较小的阈值 θ t + 1 \theta_{t+1} θt+1 再次进行迭代。每个在分阶段发现的粗粒度masks在Conquer stage后可以形成一个分层结构 H。

n t n_t nt 是属于粒度级别 t 的clusters/masks数量, n 0 n_0 n0 = 1。

masks合并:在Conquer stage发现的新的部分级别伪masks被添加回到分阶段确定的语义和实例级别伪masks中。然后,使用非极大值抑制(NMS)消除重复。在无监督图像分割的先前工作中,还采用诸如条件随机场(CRF)和CascadePSP等现成的masks精化方法,进一步改善伪masks的边缘。最后,在精化前后的交并比(IoU)显著差异的后处理masks被过滤掉。

初步结果:分而治之pipeline在伪masks池中实现了更多实体、更广泛的粒度级别和优越的质量,与之前的工作(如CutLER、U2Seg和SOHES)相比。如下表3所示,它在从SA-1B数据集中随机选择的1000张验证图像上达到了23.9%的语义平均召回率(AR),比现有技术提升了45.7%。

与先前伪masks生成工作的关键区别:UnSAM采用的分而治之策略使其区别于以往的工作:

[39, 28] 仅依赖于自顶向下的聚类方法,提供实例和语义级别的masks,从而错过了复杂图像中存在的分层结构。相反,本文的pipeline通过识别更细粒度的像素clusters捕捉了这种分层结构。

虽然 [6] 通过自底向上的迭代合并确实结合了一些分层结构,但仍然错过了许多细粒度实例和一些大尺度实例masks。此外,[6] 中的迭代合并专注于低于特定masks尺寸阈值的小区域,主要用于改进噪声小masks,限制了其检测各种实体尺寸的能力。本文的实验结果在质量和数量上表现出与先前工作相比的优越性能,特别是在生成更高质量、更详细的伪masks方面,更好地捕捉视觉场景的分层复杂性。

模型学习和自训练

尽管pipeline生成的伪masks在质量和数量上均优于先前的工作,但它们仍可能存在一定的噪声。自监督pipeline在识别某些类型的实例时存在局限性。例如,迭代合并有时无法正确关联同一实体的断开部分。为了解决这个问题,利用自训练策略进一步提升UnSAM模型的性能。UnSAM 使用分而治之策略发现的masks来学习图像分割模型。观察到自训练使模型能够“清洗”伪masks并预测更高质量的masks。一旦准备好伪masks,UnSAM 可以在模型学习或自训练阶段与任意的整体图像或可提示图像分割模型集成。

整体图像分割
为了简化,选择了基本的Masked Attention Mask Transformer(Mask2Former)。Mask2Former的关键创新在于在Transformer的交叉注意力块中引入了mask注意力机制,定义为 s o f t m a x ( M + Q K T ) V softmax(M + QK^T)V softmax(M+QKT)V,其中注意力mask M在特征位置(x, y)处的定义如下:$M(x, y) =
\begin{cases}
0, M(x, y) = 1 \
-\infty, otherwise
\end{cases}
\tag{1}
$。这种机制限制了在预测mask区域内的注意力。随后,UnSAM 使用以下mask预测损失进行训练:

基于损失函数 L c e L_{ce} Lce L d i c e L_{dice} Ldice,其中 λ c e λ_{ce} λce λ d i c e λ_{dice} λdice 是它们各自的权重。在伪masks上进行一轮自训练后,通过合并高置信度的masks预测(置信度大于 τ s e l f − t r a i n \tau_{self-train} τselftrain)作为新的“ground-truth”标注来执行第二轮自训练。为避免重复,过滤掉与预测masks的IoU大于0.5的真值masks。

可提示图像分割
与SAM类似,本文的无监督SAM也可以根据输入提示(如点)生成高质量的对象masks。利用Semantic-SAM作为基础模型,从单击中预测多个粒度级别的masks。在学习过程中,在masks的内部圆圈 (半径 ≤ 0.1 ⋅ m i n ( M a s k w i d t h , M a s k h e i g h t ) (半径 ≤0.1·min(Mask_{width}, Mask_{height}) (半径0.1min(Maskwidth,Maskheight))内随机采样点,模拟用户的点击操作。

UnSAM+: 通过无监督分割改进监督SAM

监督SAM模型依赖于人工标注数据,这引入了一个显著的偏见,基于标注人员对“什么构成一个实例”的感知,经常会错过图像中的某些实体。相比之下,由于masks生成pipeline不依赖于人工监督,它通常可以识别SA-1B真值标注忽略的有效对象或部分。

受此观察的启发,利用UnSAM来改进监督SAM的性能,实施一种简单而有效的策略:基于IoU,将SA-1B的真值masks DSA-1B 与无监督分割masks DUnSAM 合并,制定如下:

τ U n S A M + \tau_{UnSAM+} τUnSAM+ 是IoU阈值, I o U m a x IoU^{max} IoUmax C m C_m Cm D S A − 1 B i D^i_{SA-1B} DSA1Bi 中任何masks C n C_n Cn 之间的最大IoU, D S A − 1 B i D^i_{SA-1B} DSA1Bi D U n S A M + i D^i_{UnSAM+} DUnSAM+i 分别是图像i中的SA-1B和无监督masks集合。

然后,对DUnSAM+ 进行训练,用于可提示图像分割和整体图像分割。融合方法利用了监督和无监督标注的优势,解决了人工注释数据集固有的限制,同时显著丰富了训练数据的多样性和全面性。这导致了更强大、更具普适性的分割模型 UnSAM+,超越了SAM的性能。

实验

模型训练设置

伪masks生成:在分阶段,设置置信度阈值 τ = 0.3 \tau=0.3 τ=0.3;在Conquer 阶段,选择阈值 θ m e r g e = [ 0.6 , 0.5 , 0.4 , 0.3 , 0.2 , 0.1 ] \theta_{merge} = [0.6, 0.5, 0.4, 0.3, 0.2, 0.1] θmerge=[0.6,0.5,0.4,0.3,0.2,0.1]。在将伪masks与真值合并用于训练UnSAM+时,选择 τ U n S A M + = 0.02 \tau_{UnSAM+} = 0.02 τUnSAM+=0.02

整体图像分割:UnSAM选择DINO预训练的ResNet-50作为骨干网络,Mask2former作为mask解码器。默认学习率为 5 × 1 0 − 5 5 × 10^{-5} 5×105,batch大小为16,权重衰减为 5 × 1 0 − 2 5 × 10^{-2} 5×102。训练模型8个epochs。

可提示图像分割:UnSAM使用自监督预训练的Swin-Transformer Tiny模型作为骨干网络,并利用Semantic-SAM 作为基础模型。设置层级数为6,这也是UnSAM在推断期间针对每个提示生成的预测masks数。对于所有实验,使用SA-1B数据集的1∼4%未标注图像进行训练。

评估数据集和指标

整体图像分割:以zero-shot方式在各种数据集上测试本文的模型,以评估从所有粒度级别分割实体的性能。选择 COCO、LVIS、ADE20K、EntitySeg、SA-1B(主要包含语义-/实例级别实体)、PartImageNet 和 PACO(覆盖部分级别实体)。SA-1B 测试集包括随机选择的1000张不包含在训练集中的图像。值得注意的是,每个数据集仅涵盖特定层次的实体和特定预定义的类别,而模型从所有层次和所有类别生成masks。因此,COCO 平均精度(AP)指标可能无法反映模型在分割开放世界中所有实体方面的真实性能。遵循之前的工作,主要考虑平均召回率(AR)来与不同模型进行比较。

基于点提示的可提示图像分割:在 COCO Val2017上评估基于点的交互式模型。根据之前关于可提示图像分割的工作,选择两个指标来评估模型:MaxIoU 和 OracleIoU。对于每个点提示,UnSAM 预测6个masks,代表不同的粒度级别。MaxIoU 计算6个masks中具有最高置信度分数的masks与真值之间的IoU,而OracleIoU 选择6个预测masks与真值之间的最高IoU。对于每个测试图像,选择其中心作为点提示。

评估结果

无监督伪masks:分而治之pipeline生成的无监督伪masks不仅包含精确的粗粒度实例masks,还捕获了SA-1B真值标签常常忽略的细粒度部分,如下图3所示。

整体图像分割:UnSAM在所有评估数据集上均优于现有技术,如前面表1所总结的。UnSAM表现出色,即使只使用SA-1B训练数据的1%,并且使用参数为2300万的ResNet-50骨干网络,而现有技术则使用两倍的训练数据和几乎四倍的参数。这表明UnSAM是一个轻量级、更易于训练且对数据需求较少的模型,在分割开放世界中的实体时具有更好的zero-shot性能,如下图4和5所示。

平均而言,UnSAM在AR方面超过先前的SOTA达11.0%。在PartImageNet 和 PACO 上评估时,UnSAM分别超过先前的SOTA达16.6%和12.6%。与监督SAM相比,UnSAM在所有数据集上的AR差距仅为1%。在PartImageNet 和 PACO上,UnSAM分别比SAM超过24.4%和11.6%。这进一步展示了分而治之pipeline在发现人类标注者往往会忽略的细节方面的出色能力。

此外,UnSAM+,通过整合无监督伪masks和SA-1B真值进行训练,表现优于SAM的AR超过6.7%,AP超过3.9%,如前面表2和4所示。UnSAM+ 在所有评估数据集上的平均召回率优于SAM,除了ADE20K,这是由语义级别标注主导的数据集。UnSAM+ 在小实体上显著比SAM高出16.2%的AR进一步证实,伪masks可以有效地补充SA-1B数据集忽略的细节,而UnSAM+ 可以常常发现SAM错过的实体,如上面图4所示。

基于点提示的可提示图像分割:如下表5所示,使用伪masks训练的UnSAM在COCO上达到了40.3%的MaxIoU和59.5%的OracleIoU。值得注意的是,只使用了SAM 使用数据的1%以及一个具有4倍少参数的骨干网络进行训练。此外,使用整合的伪masks和SA-1B真值进行训练的UnSAM+ 在MaxIoU和OracleIoU上分别比SAM优于0.3%和1.3%。定性结果见下图6。

总结

图像分割是计算机视觉中的基本任务,传统上依赖于密集的人工标注来详细理解视觉场景。本文提出了UnSAM,一个无监督分割模型,在无监督图像分割的性能上显著超越了先前的最新技术。此外,无监督UnSAM模型取得了令人印象深刻的结果,与领先的监督SAM的性能相媲美,并在某些半监督设置下超越它。

参考文献

[1] Segment Anything without Supervision

相关文章:

超越所有SOTA达11%!媲美全监督方法 | UC伯克利开源UnSAM

文章链接:https://arxiv.org/pdf/2406.20081 github链接:https://github.com/frank-xwang/UnSAM SAM 代表了计算机视觉领域,特别是图像分割领域的重大进步。对于需要详细分析和理解复杂视觉场景(如自动驾驶、医学成像和环境监控)的应用特别有…...

享元模式(设计模式)

享元模式(Flyweight Pattern)是一种结构型设计模式,它通过共享细粒度对象来减少内存使用,从而提高性能。在享元模式中,多个对象可以共享相同的状态以减少内存消耗,特别适合用于大量相似对象的场景。 享元模…...

【机器学习】大模型训练的深入探讨——Fine-tuning技术阐述与Dify平台介绍

目录 引言 Fine-tuning技术的原理阐 预训练模型 迁移学习 模型初始化 模型微调 超参数调整 任务设计 数学模型公式 Dify平台介绍 Dify部署 创建AI 接入大模型api 选择知识库 个人主页链接:东洛的克莱斯韦克-CSDN博客 引言 Fine-tuning技术允许用户根…...

【Linux从入门到放弃】探究进程如何退出以进程等待的前因后果

🧑‍💻作者: 情话0.0 📝专栏:《Linux从入门到放弃》 👦个人简介:一名双非编程菜鸟,在这里分享自己的编程学习笔记,欢迎大家的指正与点赞,谢谢! 进…...

QT5 static_cast实现显示类型转换

QT5 static_cast实现显示类型转换,解决信号重载情况...

【ES】--Elasticsearch的翻页详解

目录 一、前言二、from+size浅分页1、from+size导致深度分页问题三、scroll深分页1、scroll原理2、scroll可以返回总计数量四、search_after深分页1、search_after避免深度分页问题一、前言 ES的分页常见的主要有三种方式:from+size浅分页、scroll深分页、search_after分页。…...

3.js - 纹理的重复、偏移、修改中心点、旋转

你瞅啥 上字母 // ts-nocheck // 引入three.js import * as THREE from three // 导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls // 导入lil.gui import { GUI } from three/examples/jsm/libs/lil-gui.module.min.js // 导入twee…...

RS232隔离器的使用

RS232隔离器在通信系统中扮演着至关重要的角色,其主要作用可以归纳如下: 一、保护通信设备 电气隔离:RS232隔离器通过光电隔离技术,将RS-232接口两端的设备电气完全隔离,从而避免了地线回路电压、浪涌、感应雷击、静电…...

一切为了安全丨2024中国应急(消防)品牌巡展武汉站成功召开!

消防品牌巡展武汉站 6月28日,由中国安全产业协会指导,中国安全产业协会应急创新分会、应急救援产业网联合主办,湖北消防协会协办的“一切为了安全”2024年中国应急(消防)品牌巡展-武汉站成功举办。该巡展旨在展示中国应急(消防&am…...

【面试系列】PHP 高频面试题

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、…...

JAVA极简图书管理系统,初识springboot后端项目

前提条件: 具备基础的springboot 知识 Java基础 废话不多说! 创建项目 配置所需环境 将application.properties>application.yml 配置以下环境 数据库连接MySQL 自己创建的数据库名称为book_test server:port: 8080 spring:datasource:url:…...

MySQL 重新初始化实例

1、关闭mysql服务 service mysqld stop 2、清理datadir(本例中指定的是/var/lib/mysql)指定的目录下的文件,将该目录下的所有文件删除或移动至其他位置 cd /var/lib/mysql mv * /opt/mysql_back/ 3、初始化实例 /usr/local/mysql/bin/mysqld --initialize --u…...

VCS编译bug汇总

‘typedef’ is not expected to be used in this contex 注册前少了分号。 Scope resolution error resolution : 声明指针时 不能与类名同名,即 不能声明为adapter. cannot find member "type_id" 忘记注册了 拼接运算符使用 关键要加上1b&#xff0…...

【2024LLM应用-数据预处理】之如何从PDF,PPT等非结构化数据提取有效信息(结构化数据JSON)?

🥰大家知道吗,之前在给AI大模型"喂数据"的时候,我们往往需要把非结构化数据(比如PDF、PPT、Excel等)自己手动转成结构化的格式,这可真是太累人儿了。🥵 幸好现在有了Unstructured这个神级库,它内置的数据提取函数可以帮我们快速高效地完成这个…...

冯雷老师:618大退货事件分析

近日冯雷老师受邀为某头部电商36名高管进行培训,其中聊到了今年618退货潮的问题。以下内容整理自冯雷老师的部分授课内容。 一、引言 随着电子商务的蓬勃发展,每年的618大促已成为消费者和商家共同关注的焦点。然而,在销售额不断攀升的同时…...

JAVA基础教程DAY0-基础知识

JAVA语言的特点 简单性、面向对象、安全性、跨平台性、支持多线程、分布性 面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它通过将数据和操作这些数据的方法封装在一起,以创建对象的形式来组织代…...

鸿蒙开发Ability Kit(程序访问控制):【安全控件概述】

安全控件概述 安全控件是系统提供的一组系统实现的ArkUI组件,应用集成这类组件就可以实现在用户点击后自动授权,而无需弹窗授权。它们可以作为一种“特殊的按钮”融入应用页面,实现用户点击即许可的设计思路。 相较于动态申请权限的方式&am…...

【信息系统项目管理师】18年~23年案例概念型知识

文章目录 18上18下19上19下20上20下21上21下22年上22年下23年上 18上 请简述 ISO 9000 质量管理的原则 领导作用、 过程方法、 管理的系统方法、 与供方互利的关系、 基于事实的决策方法、 持续改进、 全员参与、 以顾客为关注焦点 概念 国家标准(GB/T 1 9000 2008)对质量的定…...

什么是字符串常量池?如何利用它来节省内存?

字符串常量池是Java中一个非常重要的概念,尤其对于理解内存管理和性能优化至关重要。想象一下,你正在管理一家大型图书馆,每天都有无数读者来借阅书籍。 如果每本书每次借阅都需要重新印刷一本,那么图书馆很快就会陷入混乱&#…...

Selenium自动化测试20条常见异常+处理方案

常见的Selenium异常 以下是所有Selenium WebDriver代码中可能发生的一些常见Selenium异常。 1、ElementClickInterceptedException 由于以某种方式隐藏了接收到click命令的元素,因此无法正确执行Element Click命令。 2、ElementNotInteractableException 即使目…...

verilog将信号和常数拼接起来

正确的拼接 1 s_axis_data_tdata {32b0000_0000_0000_0000_0000_0000_0000_0000,32b0011_1111_1000_0000_0000_0000_0000_0000}; 2 注意,信号的两部分都要用{}花括号括起来 s_axis_data_tdata {{32{1b1}},{32b0100_0000_0000_0000_0000_0000_0000_0000}}; 3…...

OpenSSH远程代码执行漏洞 (CVE-2024-6387)

1. 前言 OpenSSH是一套基于安全外壳(SSH)协议的安全网络实用程序,它提供强大的加密功能以确保隐私和安全的文件传输,使其成为远程服务器管理和安全数据通信的必备工具。 OpenSSH 自 1995 年问世近 20 年来,首次出现了…...

高薪程序员必修课-java并发编程的bug源头

前言 Java并发编程虽然强大,但也容易引发复杂的bug。并发编程的bug主要源自以下几个方面:竞态条件、死锁、内存可见性问题和线程饥饿。了解这些bug的源头及其原理,可以帮助开发者避免和解决这些问题。以下是详细的讲解和相应的示例。 1. 竞态…...

c++:#include 某文件.h底层如何寻找其.cpp实现

在C中,当你编写了一个头文件(如MyLibrary.h)和对应的实现文件(如MyLibrary.cpp)时,其他源文件(如main.cpp)只需要包含头文件(#include "MyLibrary.h"&#xff…...

uniapp中如何进行微信小程序的分包

思路:在uniapp中对微信小程序进行分包,和原生微信小程序进行分包的操作基本上没区别,主要就是在pages.json中进行配置。 如图,我新增了一个包diver-page 此时需要在pages.json中的subPackages数组中新增一项 root代表这个包的根…...

win10下安装PLSQL14连接Oracle数据库

问题背景 在使用Oracle开发过程中,经常会使用工具来连接数据库,方便查询、处理数据。其中有很多工具可以使用,比如dbeaver、plsql等。本文主要介绍在win10环境下,plsql14的安装步骤以及安装过程中遇到的一些问题。 安装步骤及问题…...

高考失利咨询复读,银河补习班客服开挂回复

补习班的客服在高考成绩出来后,需要用专业的知识和足够的耐心来回复各种咨询,聊天宝快捷回复软件,帮助客服开挂回复。 ​ 前言 高考成绩出来,几家欢喜几家愁,对于高考失利的学生和家长,找一个靠谱的复读补…...

java 代码块

Java中的代码块主要有三种类型:普通代码块、静态代码块、构造代码块。它们的用途和执行时机各不相同。 普通代码块:在方法内部定义,使用一对大括号{}包围的代码片段。它的作用域限定在大括号内,每当程序执行到该代码块时就会执行其…...

vue中避免多次请求字典接口

vuex缓存所有字典项 背景vuex管理所有字典项调用字典接口处理字典项数据的filter页面中使用字典 背景 每次用到字典都需要通过对应的字典type调用一次字典接口,当一个页面用到字典项很多时,接口请求炒鸡多,会导致接口响应超时。 本篇文章改为…...

Snappy使用

Snappy使用 Snappy是谷歌开源的压缩和解压的开发包,目标在于实现高速的压缩而不是最大的压缩 项目地址:GitHub - google/snappy:快速压缩器/解压缩器 Cmake版本升级 该项目需要比较新的cmake,CMake 3.16.3 or higher is requi…...

跨越重洋:在Heroku上配置Pip镜像源的终极指南

🌐 跨越重洋:在Heroku上配置Pip镜像源的终极指南 Heroku是一个支持多种编程语言的云平台即服务(PaaS),它允许开发者部署和管理应用程序。然而,由于Heroku的服务器位于海外,直接使用Python的包管…...

SpringBoot + 虚拟线程,性能炸裂!

一、什么是虚拟线程 虚拟线程是Java19开始增加的一个特性,和Golang的携程类似,一个其它语言早就提供的、且如此实用且好用的功能,作为一个Java开发者,早就已经望眼欲穿了。 二、虚拟线程和普通线程的区别 “虚拟”线程&#xf…...

Java Character类

Character是char的包装类 转义序列 Character类的方法...

Python中的爬虫实战:猫眼电影爬虫

随着互联网技术的快速发展,网络上的信息量越来越庞大。猫眼电影作为国内领先的电影数据平台,为用户提供了全面的电影信息服务。本文将介绍如何利用python编写简单的猫眼电影爬虫,获取电影相关数据。 爬虫概述 爬虫,即网络爬虫&a…...

WAIC2024 | 华院计算邀您共赴2024年世界人工智能大会,见证未来科技革新

在智能时代的浪潮汹涌澎湃之际,算法已成为推动社会进步的核心力量。作为中国认知智能技术的领军企业,华院计算在人工智能的广阔天地中,不断探索、创新,致力于将算法的潜力发挥到极致。在过去的时日里,华院计算不断探索…...

数据库原理之数据库基本概念

目录 前言 基本概念 数据库完整性 前言 今天我们来看看数据库的基本概念,帮助大家对数据库有一点点最基本的了解 基本概念 4个基本概念 数据data:描述事物的符号,数据库中存储的基本对象。 数据库Database:长期存储在计算机…...

vue2项目的打包以及部署

打包 当我们写好vue2的项目后,可以通过npm build来对项目进行打包 npm build 打包完成后我们可以看到在当面目录下生成了dis目录,src下的文件都会被打包进这个目录里,当然打包后的文件我们不能直接在浏览器打开,需要进行部署 部署 1.新建一个…...

Java的全局异常处理代码

第一步:先写一个异常管理类: package com.example.firefighting.exceptions;import com.example.firefighting.utils.Result; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerA…...

Hi3861 OpenHarmony嵌入式应用入门--LiteOS semaphore作为锁

CMSIS 2.0 接口中的 Semaphore(信号量)是用于嵌入式系统中多线程或中断服务例程(ISR)之间同步和共享资源保护的重要机制。Semaphore 是一种用于控制对多个共享资源访问的同步机制。它可以被看作是一个计数器,用于跟踪可…...

注意!年龄越大,社交圈子越窄?其实这是老人的理性选择!数学家告诉你:何时该跳槽,何时该坚守!你必须知道的三个智慧:让你的人生更加精彩!

我们到底应该在什么情况下探索新事物,什么情况下专注于已有的东西呢?本质上来说,这个问题就是在询问,你究竟应该耗费精力去探索新的信息,还是专注从既有的信息中获取收获? 有人采访了临终的老人&#xff0c…...

[SwiftUI 开发] 嵌套的ObservedObject中的更改不会更新UI

1. 发生问题的demo 业务逻辑代码 class Address: ObservableObject {Published var street "123 Apple Street"Published var city "Cupertino" }class User: ObservableObject {Published var name "Tim Cook"Published var address Addr…...

全面了解机器学习

目录 一、基本认识 1. 介绍 2. 机器学习位置 二、机器学习的类型 1. 监督学习 2. 无监督学习 3. 强化学习 三、机器学习术语 1. 训练样本 2. 训练 3. 特征 4. 目标 5. 损失函数 四、机器学习流程 五、机器学习算法 1. 分类算法 2. 聚类算法 3. 关联分析 4. …...

作为图形渲染API,OpenGL和Direct3D的全方位对比。

当你在网页看到很多美轮美奂的图形效果,3D交互效果,你知道是如何实现的吗?当然是借助图形渲染API了,说起这个不就不得说两大阵营,OpenGL和Direct3D,贝格前端工场在本文对二者做个详细对比。 一、什么是图形…...

安装Rabbitmq遇到的坑

!!!一定要对号版本号 不同的虚拟机unbontu、cetenos和不同的erlang和不同的rabbitmq之间要对应下载对应版本 下面给出我的版本centos7erlangrabbitmq 分割线 安装好后,如果在虚拟机的服务器上可以打开,在本地浏览器…...

React+TS 从零开始教程(4):useEffect

上一节传送门:ReactTS 从零开始教程(3):useState 源码链接:https://pan.quark.cn/s/c6fbc31dcb02 上一节,我们已经学会了React的第一个Hook:useState。 这一节,我们要学习的是另一…...

网络安全学习路线图(2024版详解)

近期,大家在网上对于网络安全讨论比较多,想要学习的人也不少,但是需要学习哪些内容,按照什么顺序去学习呢?其实我们已经出国多版本的网络安全学习路线图,一直以来效果也比较不错,本次我们针对市…...

你了解人工智能吗?

前言 人工智能(Artificial Intelligence,AI)是计算机科学的一个重要分支,致力于开发能够执行通常需要人类智能的任务的系统。本文将从历史发展、关键技术、应用领域以及未来挑战等方面,深入探讨人工智能的相关内容。 …...

如何使用Vue.js实现动态文档生成与下载功能

在现代Web应用开发中,用户往往需要在浏览器端完成复杂的操作,如生成和下载特定格式的文档,而无需服务器直接干预。本文将以一个Vue.js应用程序为例,详细介绍如何利用axios(或自定义请求模块)结合FileReader…...

web基础及http协议

一、WEB:就是我们所说的页面,点开的每个页面都是web。(全球广域网、万维网) 分布式图形信息系统:同一个服务,但是部署在不同的机器上且提供的服务和内容全部一致,集群就是建立在分布式的基础上。…...

【vuejs】vue-router 之 addRoute 动态路由的应用总结

1. Vue Router 概述 Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用。它与 Vue.js 深度集成,让开发者能够轻松地构建具有复杂用户界面的单页面应用。Vue Router 允许你定义不同的路由,并通过 router-view 组件在应用中显示匹配的…...

轻松设置:服务器域名配置全攻略

目录 前置条件 在阅读本篇内容之前,请先确保以下物料已准备好: 一台公网服务器,服务正常运行申请完成的域名,在对应域名服务商后台正常DNS解析域名备案完成可选条件:有https访问请求时,需要申请SSL证书 …...

maven项目使用netty,前端是vue2,实现通讯

引入的java包 <!-- 以下是即时通讯--><!-- Netty core modules --><dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.76.Final</version> <!-- 使用最新的稳定版本…...

MySQL的Geometry数据处理之WKB方案

MySQL的Geometry数据处理之WKT方案&#xff1a;https://blog.csdn.net/qq_42402854/article/details/140134357 MySQL的Geometry数据处理之WKT方案中&#xff0c;介绍WTK方案的优点&#xff0c;也感受到它的繁琐和缺陷。比如&#xff1a; 需要借助 ST_GeomFromText和 ST_AsTex…...

Hadoop集群搭建

一、 Hadoop安装部署模式 单机模式 Standalone 一台机器&#xff0c;所有的角色在一个java进程中运行。 适合体验。 伪分布式 一台机器 每个角色单独的java进程。 适合测试 分布式 cluster 多台机器 每个角色运行在不同的机器上 生产测试都可以高可用&#xff08;持续可用…...

Spring Boot + liteflow 居然这么好用!实战

在我们的日常开发中&#xff0c;经常会遇到一些需要串行或并行处理的复杂业务流程。 那我们该如何利用Spring Boot结合liteflow规则引擎来简化我们的业务流程 先看一个实战案例&#xff01;&#xff01; 在电商场景下&#xff0c;当订单完成后&#xff0c;我们需要同时进行积…...

git初识

1、安装git sudo apt insatll git $ git --version git version 2.25.12、初始化仓库 创建一个目录用来存放仓库。 nkdir gitrepo初始化仓库 cd gitrepo git init --bare runoob.git新增用户git,将给runoob.git的所属改成git $ ls -l gitrepo total 4 drwxrwxr-x 7 git gi…...

嘉兴燃气09908与嘉兴管网公司订立天然气供应框架协议

智通财经APP讯,嘉兴燃气发布公告,于2024年5月23日,该公司(作为供应商)与嘉兴管网公司作为(作为买方)订立天然气供应框架协议。根据天然气供应框架协议,嘉兴管网公司与该公司可不时就该公司于2024年5月23日至2027年3月31日期间向嘉兴管网公司供应天然气订立最终协议,惟须遵…...

web刷题记录(1)

[GXYCTF 2019]Ping Ping Ping 进入页面&#xff0c;发现有一个传入参数的框&#xff0c;目的就是为了让我们通过参数传入内容来执行代码。这里先传入本地ip&#xff0c;方便后面的ping命令运行 ls命令来查看&#xff0c;目录中的文件 传入后&#xff0c;发现目录下有flag.php,…...

Flutter 中的 RichText 小部件:全面指南

Flutter 中的 RichText 小部件&#xff1a;全面指南 Flutter 是一个流行的跨平台 UI 工具包&#xff0c;它允许开发者使用 Dart 语言来构建高性能、高保真的移动应用。在 Flutter 中&#xff0c;RichText 是一个非常有用的小部件&#xff0c;它允许开发者在同一个文本行中混合…...

电脑录屏怎么录?7个电脑录屏软件免费版强势来袭,赶快收藏!

电脑录屏怎么录&#xff1f;相信很多小伙伴们都不知道怎么在Windows电脑上录屏吧&#xff1f;在当今社会&#xff0c;随着互联网的快速发展&#xff0c;越来越多的小伙伴们开始通过制作视频内容来分享知识、展示技能或者记录生活。电脑录屏成为了一种简单高效的方式&#xff0c…...

原神抽卡点名程序教程(直接下载用)

今天我要给大家分享一个在抖音上特别火的视频——原神抽卡点名程序教程。 &#xff08;要源码的私信扣31&#xff09; 废话不多说&#xff0c;直接上效果图 &#xff1a; 步骤1&#xff1a; 步骤2&#xff1a;&#xff08;写名单&#xff0c;前面加数字代表星级&#xff0c;用…...

在做题中学习(62):矩阵区域和

1314. 矩阵区域和 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a;二维前缀和 思路&#xff1a;读题画图才能理解意思&#xff1a;dun点点的是mat中的一个数&#xff0c;而要求的answer同位置的数 以点为中心上下左右延长 k 个单位所围成长方形的和。 因为最后answ…...