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

EfficientDet:Scalable and Efficient Object Detection中文版 (BiFPN)

EfficientDet: Scalable and Efficient Object Detection

EfficientDet:可扩展和高效的目标检测

摘要

模型效率在计算机视觉中变得越来越重要。本文系统地研究了用于目标检测的神经网络架构设计选择,并提出了几个关键的优化方法来提高效率。首先,我们提出了**加权双向特征金字塔网络(BiFPN),可以轻松快速地进行多尺度特征融合;其次,我们提出了一种复合缩放方法,同时统一调整所有骨干网络、特征网络和框/类别预测网络的分辨率、深度和宽度。**基于这些优化和更好的骨干网络,我们开发了一系列名为 EfficientDet 的新型目标检测器,这些检测器在广泛的资源约束范围内始终比先前技术取得更好的效率。特别地,在单模型和单尺度的情况下,我们的 EfficientDet-D7 在 COCO test-dev 上实现了最先进的 55.1 AP,拥有 7700 万参数和 410 亿 FLOPs,比先前的检测器小 4 倍至 9 倍,并且使用的 FLOPs 减少了 13 倍至 42 倍。代码可在 https://github.com/google/automl/tree/master/efficientdet 获取。

介绍

近年来,在实现更准确的目标检测方面取得了巨大进步;与此同时,最先进的目标检测器也变得愈发昂贵。例如,最新基于AmoebaNet的NAS-FPN检测器[45]需要167M个参数和3045B的FLOPs(比RetinaNet[24]多30倍),才能实现最先进的准确性。庞大的模型尺寸和昂贵的计算成本阻碍了它们在许多实际应用中的部署,比如在机器人技术和自动驾驶汽车等领域,模型大小和延迟受到严格限制。考虑到这些现实世界的资源约束,模型的高效性变得愈发重要。

先前的研究致力于开发更高效的检测器架构,例如一阶段检测器[27, 33, 34, 24]和无锚点检测器[21, 44, 40],或者压缩现有模型[28, 29]。虽然这些方法往往能够取得更好的效率,但通常会牺牲准确性。此外,大多数先前的工作只关注特定或一小范围的资源需求,但从移动设备到数据中心等各种实际应用通常需要不同的资源约束。

一个自然的问题是:是否可能构建一个可扩展的检测架构,既具有更高的准确性,又能够在各种资源约束范围内实现更好的效率(例如,从3B到300B的FLOPs)?本文旨在通过系统地研究各种检测器架构的设计选择来解决这个问题。基于一阶段检测器范式,我们研究了骨干网、特征融合和类别/边界框网络的设计选择,并确定了两个主要挑战:
挑战1:高效的多尺度特征融合——自[23]提出以来,FPN已被广泛用于多尺度特征融合。最近,PANet[26]、NAS-FPN[10]和其他研究[20,18,42]开发了更多网络结构用于跨尺度特征融合。在融合不同输入特征时,大多数先前的研究简单地将它们求和而没有加以区分;然而,由于这些不同的输入特征处于不同的分辨率,我们观察到它们通常不均匀地对融合输出特征产生贡献。为解决这个问题,我们提出了一种简单但高效的加权双向特征金字塔网络(BiFPN),它引入了可学习的权重来学习不同输入特征的重要性,同时重复应用自顶向下和自底向上的多尺度特征融合。

挑战2:模型缩放——先前的研究主要依赖于更大的骨干网络[24,35,34,10]或更大的输入图像尺寸[13,45]来实现更高的准确性,但当考虑到准确性和效率时,我们观察到扩展特征网络和盒/类别预测网络也至关重要。受最近的研究[39]启发,我们为目标检测器提出了一种复合缩放方法,联合扩展了所有骨干网络、特征网络和盒/类别预测网络的分辨率/深度/宽度。最后,我们还观察到最近推出的EfficientNets[39]比以往常用的骨干网络效率更高。结合EfficientNet骨干网络与我们提出的BiFPN和复合缩放,我们开发了一种名为EfficientDet的新型目标检测器系列,其在参数和FLOP数远远少于以往的目标检测器的情况下,始终能够实现更好的准确性。图1和图4显示了在COCO数据集[25]上的性能比较。在类似准确性的约束下,我们的EfficientDet使用的FLOP数比YOLOv3[34]少28倍,比RetinaNet[24]少30倍,比最近基于ResNet的NAS-FPN[10]少19倍。特别是,在单模型和单测试时间尺度下,我们的EfficientDet-D7在具有77M参数和410B FLOP的情况下达到了55.1的AP,优于之前最佳检测器[45]4个AP,同时规模更小、FLOP数减少了2.7倍,FLOP数减少了7.4倍。我们的EfficientDet在GPU/CPU上也比以往的检测器快4到11倍。

通过简单的修改,我们还展示了我们的单模型单尺度EfficientDet在Pascal VOC 2012语义分割任务上以18B FLOPs实现了81.74%的mIOU准确率,与DeepLabV3+[6]相比,在9.8倍的FLOPs下,准确率提高了1.7%。

2.相关工作

单阶段检测器:现有的目标检测器主要根据是否具有感兴趣区域(proposal)步骤进行分类(两阶段[11,35,5,13])或者没有(单阶段[36,27,33,24])。虽然两阶段检测器往往更灵活、更准确,但单阶段检测器通常因利用预定义的锚点[17]而被认为更简单、更高效。最近,单阶段检测器由于其高效性和简单性引起了相当大的关注[21,42,44]。在本文中,我们主要遵循单阶段检测器的设计,并展示通过优化网络架构,可以实现更好的效率和更高的准确性。

多尺度特征表征:目标检测中的主要困难之一是有效地表征和处理多尺度特征。早期的检测器通常直接基于从骨干网络提取的金字塔式特征层次进行预测[4,27,36]。作为先驱工作之一,特征金字塔网络(FPN)[23]提出了一条自顶向下的路径来组合多尺度特征。在这个理念的指导下,PANet[26]在FPN之上增加了一个额外的自底向上路径聚合网络;STDL[43]提出了一个尺度转换模块来利用跨尺度特征;M2det[42]提出了一个U形模块来融合多尺度特征,而G-FRNet[2]引入了门控单元来控制特征之间的信息流。最近,NAS-FPN[10]利用神经架构搜索来自动设计特征网络拓扑结构。尽管它取得了更好的性能,但NAS-FPN在搜索过程中需要数千小时的GPU时间,并且得到的特征网络是不规则的,因此难以解释。在本文中,我们旨在通过更直观和原则性的方式优化多尺度特征融合。

为了获得更高的准确性,通常会通过采用更大的骨干网络(例如,从移动尺寸模型[38,16]和ResNet[14]到ResNeXt[41]和AmoebaNet[32]),或增加输入图像尺寸(例如,从512x512[24]到1536x1536[45])来扩展基线检测器。一些最近的工作[10,45]表明,增加通道大小和重复特征网络也可以带来更高的准确性。这些缩放方法主要集中在单一或有限的缩放维度上。最近的研究[39]证明了通过联合扩展网络的宽度、深度和分辨率在图像分类方面取得了显著的模型效率。我们提出的用于目标检测的复合缩放方法主要受到[39]的启发。

在这里插入图片描述

图2:特征网络设计——(a) FPN[23]引入了一个自3级到7级(P3-P7)的自顶向下路径,用于融合多尺度特征;(b) PANet[26]在FPN之上添加了一个额外的自底向上路径;© NAS-FPN[10]使用神经网络架构搜索来找到不规则的特征网络拓扑结构,然后重复应用相同的块;(d) 是我们的BiFPN,具有更好的准确性和效率的权衡。

3.BIFPN

在本节中,我们首先对多尺度特征融合问题进行了表述,然后介绍了我们提出的 BiFPN 的主要思想:高效的双向跨尺度连接和加权特征融合。

3.1.Problem Formulation

多尺度特征融合旨在聚合不同分辨率的特征。形式上,给定多尺度特征列表 Pin = (Pinl1, Pinl2, …),其中 Pinlirepresent表示层级 li 的特征,我们的目标是找到一个转换函数 f,能够有效地聚合不同的特征,并输出一个新特征列表:Pout = f(Pin)。作为一个具体的例子,图2(a)展示了传统的自顶向下的特征金字塔网络(FPN)[23]。它接受来自级别3至7的输入特征 Pin=(Pin3,…Pin7),其中 Pinirepresent 表示分辨率为输入图像的1/2i的特征级别。例如,如果输入分辨率为640x640,则 Pin3表示特征级别3(640/23=80)的特征,分辨率为80x80,而 Pin7表示分辨率为5x5的特征级别7。传统的FPN以自顶向下的方式聚合多尺度特征:
在这里插入图片描述
其中,Resize通常是一个用于上采样或下采样以匹配分辨率的操作,而Conv通常是一个用于特征处理的卷积操作。

3.2. 跨尺度连接

传统的自顶向下FPN受单向信息流的固有限制。为了解决这个问题,PANet[26]在图2(b)中增加了额外的自底向上路径聚合网络。跨尺度连接在[20,18,42]中进一步研究。最近,NAS-FPN[10]利用神经架构搜索来搜索更好的跨尺度特征网络拓扑,但在搜索过程中需要数千个GPU小时,并且所找到的网络是不规则的,难以解释或修改,如图2©所示。通过研究这三个网络的性能和效率(见表5),我们观察到PANet在准确性上优于FPN和NAS-FPN,但代价是更多的参数和计算量。为了提高模型的效率,本文提出了几种跨尺度连接的优化方法:首先,我们删除那些只有一个输入边的节点。我们的直觉很简单:如果一个节点只有一个输入边,并且没有特征融合,则它对旨在融合不同特征的特征网络的贡献较小。这导致了一个简化的双向网络;其次,如果原始输入和输出节点位于同一级别,我们在它们之间添加额外的边,以便在不增加太多成本的情况下融合更多特征;第三,不同于只有一个自顶向下和一个自底向上路径的PANet[26],我们将每个双向(自顶向下和自底向上)路径视为一个特征网络层,并重复相同的层多次,以实现更多高级特征的融合。第4.2节将讨论如何使用复合缩放方法确定不同资源约束下的层数。通过这些优化,我们将新的特征网络命名为双向特征金字塔网络(BiFPN),如图2和图3所示。

3.3. 加权特征融合

在融合具有不同分辨率的特征时,一种常见的方法是首先将它们调整为相同的分辨率,然后将它们相加。金字塔注意力网络[22]引入了全局自注意力上采样以恢复像素定位,这在[10]中进一步研究。所有先前的方法都同等对待所有输入特征,没有区别对待。然而,我们观察到,由于不同的输入特征具有不同的分辨率,它们通常不会对输出特征产生相同的贡献。**为了解决这个问题,我们建议为每个输入添加额外的权重,并让网络学习每个输入特征的重要性。**基于这个想法,我们考虑了三种加权融合方法:

在这里插入图片描述
在这里插入图片描述
无界融合:(O = \sum_{i} w_i \cdot I_i),其中(w_i)是可学习的权重,可以是标量(每个特征),向量(每个通道)或多维张量(每个像素)。我们发现标量权重可以在最小的计算成本下达到与其他方法相当的准确性。然而,由于标量权重是无界的,可能会导致训练不稳定。因此,我们采用权重归一化来限制每个权重的值范围。
在这里插入图片描述
**基于softmax的融合:**一个直观的想法是对每个权重应用 softmax 函数,使得所有权重归一化为概率,取值范围从 0 到 1,表示每个输入的重要性。然而,正如我们在第 6.3 节的割除研究中所示,额外的 softmax 导致 GPU 硬件显著减速。为了最小化额外的延迟成本,我们进一步提出了一种快速融合方法。

在这里插入图片描述
快速归一化融合 :wi ≥ 0是通过在每个wi后应用Relu来确保的,而=0.0001是一个小值,用于避免数值不稳定。类似地,每个归一化权重的值也介于0和1之间,但由于这里没有softmax操作,所以更为高效。我们的割除研究表明,这种快速融合方法具有与基于softmax的融合非常相似的学习行为和准确性,但在GPU上运行速度更快,最多可提高30%(见表6)。

我们最终的BiFPN结合了双向跨尺度连接和快速归一化融合。作为具体示例,我们描述了图2(d)中BiFPN在第6级处融合的两个特征:
在这里插入图片描述
其中,Ptd6表示自顶向下路径上第6级的中间特征,而Pout6表示自底向上路径上第6级的输出特征。所有其他特征的构建方式类似。值得注意的是,为了进一步提高效率,我们在特征融合中使用深度可分离卷积[7,37],并在每个卷积后添加批归一化和激活。

4.EfficientDet

基于我们的BiFPN,我们开发了一个名为EfficientDet的新型检测模型系列。在本节中,我们将讨论EfficientDet的网络架构以及一种新的复合缩放方法。

4.1 EfficientDet 架构

在这里插入图片描述

3:EfficientDet 架构 - 它采用 EfficientNet[39] 作为主干网络,
BiFPN 作为特征网络,并使用共享的类别/框预测网络。根据不同的资源约束,BiFPN 层和类别/框网络层都会根据表 1 中所示进行多次重复。

图 3 显示了EfficientDet的总体架构,它主要遵循单阶段检测器范例[27,33,23,24]。我们采用在ImageNet上预训练过的 EfficientNet 作为主干网络。我们提出的 BiFPN 充当特征网络,它从主干网络中获取 3 到 7 级的特征 {P3, P4, P5, P6, P7},并反复应用自顶向下和自底向上的双向特征融合。这些融合后的特征输入到类别网络和框网络,分别产生目标类别和边界框的预测。与[24]类似,类别和框网络的权重在所有特征级别上是共享的。、

4.2 复合缩放

针对优化精度和效率,我们希望开发一系列模型,能够满足各种资源约束的需求。关键挑战是如何扩展基准 EfficientDet 模型。以往的研究主要通过使用更大的主干网络(如 ResNeXt[41] 或 AmoebaNet[32])、使用更大的输入图像或堆叠更多 FPN 层来扩展基准检测器。这些方法通常不够有效,因为它们只关注单个或有限的扩展维度。最近的研究[39]显示了通过共同扩展网络宽度、深度和输入分辨率的所有维度,在图像分类中取得了显著的性能。受到这些工作的启发,我们提出了一种新的对象检测的复合缩放方法,它使用一个简单的复合系数 φ,来共同扩展主干网络、BiFPN、类别/框网络和分辨率的所有维度。与[39]不同,对象检测器具有比图像分类模型更多的缩放维度,因此针对所有维度进行网格搜索成本过高。因此,我们采用一种基于启发式的缩放方法,但仍遵循共同扩展所有维度的主要思路。

总结:

1. BiFPN 的主要思想:

双向跨尺度连接 + 加权特征融合

2. 双向跨尺度连接

2.1 FPN(单向连接)

在这里插入图片描述

传统的自顶向下FPN受单向信息流的固有限制。

2.2 PANet(双向连接)

为了解决这个问题,PANet[26]在图2(b)中增加了额外的自底向上路径聚合网络。
在这里插入图片描述
PANet在准确性上优于FPN和NAS-FPN,但代价是更多的参数和计算量。作者为了提高模型的效率,提出了几种跨尺度连接的优化方法。

3.加权特征融合

所有先前的方法都同等对待所有输入特征,没有区别对待。然而,我们观察到,由于**不同的输入特征具有不同的分辨率,它们通常不会对输出特征产生相同的贡献。**为了解决这个问题,我们建议为每个输入添加额外的权重,并让网络学习每个输入特征的重要性。

相关文章:

EfficientDet:Scalable and Efficient Object Detection中文版 (BiFPN)

EfficientDet: Scalable and Efficient Object Detection EfficientDet:可扩展和高效的目标检测 摘要 模型效率在计算机视觉中变得越来越重要。本文系统地研究了用于目标检测的神经网络架构设计选择,并提出了几个关键的优化方法来提高效率。首先&…...

视频监控技术经历了哪些发展阶段?视频监控技术未来趋势展望

随着城市经济的发展和进步,视频监控也已经应用在人们衣食住行的方方面面,成为社会主体的一个重要组成部分。随着视频监控的重要性越来越凸显,大家对视频监控技术的发展也非常关注。今天我们来简单阐述一下,视频监控技术经历的几个…...

德人合科技 | 设计公司文件加密系统——天锐绿盾自动智能透明加密防泄密系统

设计公司文件加密系统——天锐绿盾自动智能透明加密防泄密系统 PC端访问地址: www.drhchina.com 一、背景介绍 设计公司通常涉及到大量的创意作品、设计方案、客户资料等重要文件,这些文件往往包含公司的核心价值和商业机密。因此,如何确保…...

类和对象(下篇)

再谈构造函数 构造函数体赋值 在之前的学习中我们知道,在创建一个对象时,我们的编译器就会自动调用构造函数将对象初始化,给对象中各个成员变量一个合适的初始值。 例如: class Date { public:Date(int year, int month, int d…...

华为鸿蒙(HarmonyOS):连接一切,智慧无限

华为鸿蒙是一款全场景、分布式操作系统,旨在构建一个真正统一的硬件生态系统。该操作系统于2019年8月首次发布,并被设计为可以应用于各种设备,包括智能手机、智能手表、智能电视、车载系统等多种智能设备。 推荐一套最新版的鸿蒙4.0开发教程 …...

劈窗算法反演地表温度

目录 摘要操作步骤提取热红外单波段提取NDVI同步像元分辨率与个数劈窗算法地表温度反演制图 摘要 主要使用HJ-2(环境减灾二号卫星)的IRS传感器的两个热红外波段,以及红波段与近红波段计算得到的NDVI,使用劈窗算法,得到…...

持续集成交付CICD:基于ArgoCD 的GitOps 自动化完成前端项目应用发布与回滚

目录 一、实验 1. 环境 2. K8S master节点部署Argo CD 3.基于ArgoCD 实现GitOps (同步部署文件) 4.基于ArgoCD 实现GitOps (同步HELM文件) 二、问题 1. ArgoCD 连接K8S集群状态为 Unknown 2.ArgoCD 创建application失败 …...

SSH无密登陆配置

1 SSH介绍 ssh命令用于远程登录到其他计算机,实现安全的远程管理。 基本语法: ssh 域名/IP地址 示例: (1)从hadoop100服务器上远程连接hadoop101服务器 [hadoophadoop100 ~]$ ssh hadoop101 如果出现如下内容 Ar…...

【bug日记】如何切换jdk版本,如何解决java和javac版本不一致

背景 今天在安装jenkins后,使用java运行war包的时候,提示jdk1.8版本太低,需要提高版本,所以就需要切换jdk版本 解决 在用户变量中,首先更改了JAVA_HOME的地址为17的目录,发现javac的版本改为17了&#x…...

【C语言】6-5 判断回文字符串 分数 20

6-5 判断回文字符串 分数 20 全屏浏览题目 切换布局 作者 C课程组 单位 浙江大学 本题要求编写函数,判断给定的一串字符是否为“回文”。所谓“回文”是指顺读和倒读都一样的字符串。如“XYZYX”和“xyzzyx”都是回文。 函数接口定义: bool palindr…...

STL中优先队列(堆)的详解

文章目录 priority_queue的基本介绍堆(heap)堆的概念与结构 priority_queue 的介绍与使用 priority_queue的基本介绍 这个priority_queue翻译成中文就是优先级队列,但其实我们很难去一眼看出他的意思到底是什么,他的逻辑结构实际上类似于数据结构中的堆…...

@vue/cli脚手架

0_vue/cli 脚手架介绍 目标: webpack自己配置环境很麻烦, 下载vue/cli包,用vue命令创建脚手架项目 vue/cli是Vue官方提供的一个全局模块包(得到vue命令), 此包用于创建脚手架项目 脚手架是为了保证各施工过程顺利进行而搭设的工作平 vue/cli的好处 开箱即用 0配置webpack babe…...

在 MyBatis 中<应该怎么写

在 MyBatis 中&#xff0c;< 符号在 XML 配置文件中是一个特殊字符&#xff0c;用于标记 XML 标签的开始。因此&#xff0c;如果你在 MyBatis 的 if 标签中直接使用 < 符号&#xff0c;它会被解析为 XML 标签的开始&#xff0c;从而导致解析错误。 为了避免这个问题&…...

采访亚马逊云科技代闻:深度解读2023re:Invent与生成式AI

2023亚马逊云科技re:Invent已于拉斯维加斯圆满落幕&#xff0c;为进一步解析re:Invent 2023能够对开发者带来哪些深刻影响&#xff0c;亚马逊云科技大中华区解决方案架构部总经理代闻在大会现场接受了InfoQ中国创始人霍太稳的采访&#xff0c;并就re:Invent 2023的前沿洞察与重…...

黑豹程序员-安装docker-ce

docker分为商用版和社区版&#xff0c;我们使用社区版CE 1 安装yum-utils包&#xff08;提供yum-config-manager 实用程序&#xff09;并设置阿里镜像库 sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/cent…...

多臂老虎机算法步骤

内容导航 类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统…...

pgsql的jsonb相关处理及样例

目录 1、某个字段中包含目标list中的全部使用>&#xff1a; 2、某个字段中包含目标list中任意值使用?|&#xff1a; 3、其他操作样例&#xff1a; 1、某个字段中包含目标list中的全部使用>&#xff1a; SELECT * FROM "public"."t_a" WHERE a::j…...

LeetCode-17 电话号码的字母组合

LeetCode-17 电话号码的字母组合 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff1a; 输入&#xff1a;d…...

Ubuntu 22.04 系统创建用户并授权sudo权限

文章目录 Ubuntu 22.04 系统创建用户并授权sudo权限添加用户将用户添加到 sudo 用户组中&#xff0c;以使其具有执行需要管理员权限的命令的能力 Ubuntu 22.04 系统创建用户并授权sudo权限 添加用户 adduser zkdocker我们刚刚创建了一个名为“zkdocker”的新用户&#xff0c;…...

Vue2源码梳理:源码构建流程与运行时和编译时的版本选择

Vue.js 源码构建 1 &#xff09;rollup 和 webpack 的对比 vuejs的源码呢是基于rollup构建的 参考: https://github.com/rollup/rollup rollup 和 webpack 都是一个构建工具 webpack 它会更强大一些, 会把像图片, css等静态资源通通编译成javascriptrollup 更适合一种javscri…...

透视数据:数据可视化工具的多重场景应用

数据可视化工具已经成为了许多领域中的重要利器&#xff0c;它们在各种场景下发挥着重要作用。下面我就以可视化从业者的角度简单谈谈数据可视化工具在不同场景下的应用&#xff1a; 企业数据分析与决策支持 在企业层面&#xff0c;数据可视化工具被广泛应用于数据分析和决策…...

系列十四(面试)、谈谈你对StackOverflowError的理解?

一、StackOverflowError 1.1、概述 StackOverflowError是栈内存溢出的意思。栈中主要存储的是8种基本数据类型 引用类型 实例方法&#xff0c;栈的空间也是有限的&#xff0c;当存储进栈中的容量大于栈的最大容量时&#xff0c;就会报StackOverflowError的错误。 1.2、案例 …...

【WebRTC---源码篇】(二十五)音视频同步

RTC音视频同步场景: 音视频不在同一个时间点开始采集,如在视频先采集,音频后采集的情况下。我们不能贸然的认为音频起点来对齐视频起点,这种情况下,如何对音视频进行处理,就涉及到了音视频同步的知识。 解决思路: 通过现有条件,我们拥有RTP和SR,那么是不是可以用这两…...

鸿蒙开发之统一样式, @Styles 复用样式

只能使用通用样式 Entry Component struct Test {// 样式 就近原则 即{}之内的优先级更高 Styles customStyles(){.width(200).height(60).backgroundColor(Color.Red)}build() {Row() {Column({ space: 5 }) {Text("自定义样式").fontSize(30).textAlign(TextAlign…...

解决java内存问题

遇到 Java 控制台程序中的 Exception in thread “main” java.lang.OutOfMemoryError: Java heap space 错误通常意味着程序在其分配的堆内存空间中耗尽了内存。这个问题通常可以通过以下方法解决&#xff1a; 增加堆内存大小 可以通过调整 JVM&#xff08;Java虚拟机&#x…...

分享5款为你生活带来便捷的小工具

​ 生活需要一些小巧而贴心的工具&#xff0c;它们能够在细节处为我们带来便捷。这五款工具简洁而实用&#xff0c;看看它们是否适合融入你的生活。 1.图片压缩——TinyPNG ​ TinyPNG是一款图片压缩工具&#xff0c;可以智能地减少WebP、PNG和JPEG图片的文件大小。TinyPNG通…...

【Java JVM】JVM 分析工具

在 $JAVA_HOME/bin 的目录下, 存在着许多小工具, 除了编译和运行 Java 程序外, 打包, 部署, 签名, 调试, 监控, 运维等各种场景都可能会用到它们。 1 常用的命令行工具 1.1 jps (JVM Process Status Tool) - 虚拟机进程状况工具 列出正在运行的虚拟机进程, 并显示虚拟机执行…...

融资项目——vue之双向数据绑定

上一篇文章中使用的v-bind是单向绑定方法&#xff0c;即数据改变&#xff0c;网页相应的视图发生改变&#xff0c;但是网页视图发生改变其相关联的数据不会发生改变。但是双向数据绑定不同之处在于网页视图发生改变其相关联的数据也会发生改变。Vue可以使用v-model进行双向数据…...

『番外篇五』SwiftUI 进阶之如何动态获取任意视图的 tag 和 id 值

概览 在某些场景下,我们需要用代码动态去探查 SwiftUI 视图的信息。比如任意视图的 id 或 tag 值: 如上图所示:我们通过动态探查技术在运行时将 SwiftUI 特定视图的 tag 和 id 值显示在了屏幕上。 这是如何做到的呢? 在本篇博文,您将学到如下内容: 概览1. “如意如意,…...

姿态识别、目标检测和跟踪的综合应用

引言&#xff1a; 近年来&#xff0c;随着人工智能技术的不断发展&#xff0c;姿态识别、目标检测和跟踪成为了计算机视觉领域的热门研究方向。这三个技术的综合应用为各个行业带来了巨大的变革和机遇。本文将分别介绍姿态识别、目标检测和跟踪的基本概念和算法&#xff0c;并探…...

非法集资罪提供网站建设/线上推广方式都有哪些

数据结构和算法到底有什么用&#xff1f; 数据结构是对在计算机内存中&#xff08;有时在磁盘中&#xff09;的数据的一种安排。数据结构包括数组、链表、栈、二叉树、哈希表等等。算法对这些结构中的数据进行各种处理。例如&#xff0c;查找一条特殊的数据项或对数据进行排序…...

图片生成器软件/淘宝关键词优化技巧教程

在一般的网页中&#xff0c;都会有登录功能&#xff0c;只有登录的用户才能有权限访问系统中的资源。一般检查用户是否登录通常是通过跟踪用户的session完成的&#xff0c;通过ActionContext既可以访问到session中的属性&#xff0c;拦截器的intercept(ActionInvocation invoca…...

广州做网站好的公司/网络营销师资格证

CSS布局实例:上中下三行布局&#xff0c;上下定高&#xff0c;中间栏自适应浏览器高度&#xff0c;且内容垂直居中。本文代码在firefox 2.0 / winie 6/ win ie 7 /opera 8.5 cn/win safari测试通过。对于非ie内核浏览器&#xff0c;通过设定display:table、display:table-row和…...

流量对网站排名的影响因素/软文写作要求

本节重点介绍jquery中调用ajax的4种方法&#xff1a;$.get、$.post、$getJSON、$ajax。如果读者没有javascript和jquery的知识&#xff0c;或没有ajax的概念&#xff0c;请先参阅下本站的javascript教程与jquery教程栏目中的相关内容。1、$.get$.get()方法使用GET方式来进行异步…...

苏州最新新闻事件今天/seo引流什么意思

允许一组线程全部等待彼此达到共同屏障点的同步辅助。 循环阻塞在涉及固定大小的线程方的程序中很有用&#xff0c;这些线程必须偶尔等待彼此。 屏障被称为循环 &#xff0c;因为它可以在等待的线程被释放之后重新使用。 它的作用就是会让所有线程都等待完成后才会继续下一步行…...

网站模板切换/制作网站的平台

线段树的应用&#xff1a; 1&#xff09;求面积&#xff1a; 一.坐标离散化&#xff1b; 二.垂直边按x坐标排序&#xff1b; 三.从左往右用线段树处理垂直边&#xff0c;累计每个离散x区间长度和线段树长度的乘积。 2&#xff09;求周长&#xff1a; 一.坐标离散化&#…...