第1篇 目标检测概述 —(2)目标检测算法介绍

news2024/11/16 19:42:51

前言:Hello大家好,我是小哥谈。目标检测算法是一种计算机视觉算法,用于在图像或视频中识别和定位特定的目标物体。常见的目标检测算法包括传统的基于特征的方法(如Haar特征和HOG特征)以及基于深度学习的方法(如Faster R-CNN、YOLO和SSD)。本节课就给大家重点介绍下基于深度学习的目标检测算法,希望大家学习之后能够有所收获!🌈 

前期回顾:

             第1篇 目标检测概述 —(1)目标检测基础知识

            目录

🚀1.目标检测算法介绍

🚀2.两阶段目标检测算法

💥💥2.1 R-CNN

💥💥2.2 Fast R-CNN

💥💥2.3 Faster R-CNN

💥💥2.4 Mask R-CNN

🚀3.一阶段目标检测算法

💥💥3.1 SSD

💥💥3.2 YOLO算法

🚀1.目标检测算法介绍

目标检测算法是一种计算机视觉算法,用于在图像或视频中识别和定位特定的目标物体。常见的目标检测算法包括传统的基于特征的方法(如Haar特征和HOG特征)以及基于深度学习的方法(如Faster R-CNN、YOLO和SSD)。

传统的基于特征的目标检测算法通常是基于手工设计的特征和机器学习分类器的组合。这些算法通常包括以下步骤:提取图像特征、选择目标检测窗口、应用分类器进行目标判别和定位。而基于深度学习的目标检测算法则使用深度神经网络来自动学习图像特征和目标位置。这些算法通常由两个主要部分组成:卷积神经网络(如VGG、ResNet等)用于提取图像特征,以及用于目标检测的后处理步骤(如边界框回归和非极大值抑制)。

近几年来,目标检测算法取得了很大的突破。比较流行的算法可以分为两类,一类是基于Region Proposal的R-CNN系算法(R-CNN、Fast R-CNN、Faster R-CNN等),它们是two-stage的。而另一类是YOLO、SSD这类one-stage算法。第一类方法是准确度高一些,但是速度慢,但是第二类算法是速度快,但是准确性要低一些。

计算机视觉中关于图像识别有四大类任务

📗分类-Classification:解决“是什么?”的问题,即给定⼀张图⽚或⼀段视频判断里面包含什么类别的目标。

📗定位-Location:解决“在哪里?”的问题,即定位出这个目标的的位置。

📗检测-Detection:解决“是什么?在哪里?”的问题,即定位出这个⽬标的的位置并且知道目标物是什么。

📗分割-Segmentation:分为实例的分割(Instance-level)和场景分割(Scene-level),解决“每⼀个像素属于哪个目标物或场景”的问题。


🚀2.两阶段目标检测算法

💥💥2.1 R-CNN

R-CNN(Region-based Convolutional Neural Network)是一种目标检测算法,它在2014年由Girshick等人提出。R-CNN的主要思想是首先生成一组候选区域,然后对每个候选区域进行特征提取和分类,最后对分类结果进行边界框回归,以获得最终的目标检测结果。

具体流程如下:

  1. 输入图像被划分为多个候选区域,这些候选区域可以通过选择性搜索(Selective Search)等算法生成。
  2. 对每个候选区域,使用预训练的卷积神经网络(如AlexNet、VGG等)提取特征。
  3. 将提取的特征输入到一个支持向量机(SVM)进行分类,判断该区域是否包含目标物体。
  4. 对于被分类为包含目标物体的区域,使用线性回归模型进行边界框回归,以获得更准确的目标位置。

R-CNN算法虽然能够取得较好的检测结果,但其缺点也比较明显,如候选区域生成速度慢、训练和测试过程繁琐等。后续的改进算法(如Fast R-CNN、Faster R-CNN等)都是在R-CNN的基础上进行优化和改进。

R-CNN作为R-CNN系列的第⼀代算法,其实没有过多的使⽤“深度学习”思想,⽽是将“深度学习”和传统的“计算机视觉”的知识相结合。⽐如R-CNN pipeline中的第⼆步和第四步其实就属于传统的“计算机视觉”技术。使⽤ selective search提取region proposals,使⽤SVM实现分类。📚

比如对于猫的检测,如下图所示: 

在原论⽂中,R-CNN pipeline只有4个步骤,光看下图⽆法深刻理解R-CNN处理机制,下⾯结合图⽰补充相应⽂字。

🍀(1)预训练模型。选择⼀个预训练 (pre-trained)神经⽹络(如AlexNet、VGG)。

🍀(2)重新训练全连接层。使⽤需要检测的⽬标重新训练(re-train)最后全连接层(connected layer)。

🍀(3)提取proposals并计算CNN 特征。利⽤选择性搜索(Selective Search)算法提取所有proposals(⼤约 2000幅images),调整(resize/warp)它们成固定⼤⼩,以满⾜CNN输⼊要求(因为全连接层的限制),然后将feature map保存到本地磁盘。

🍀(4)训练SVM。利⽤feature map 训练SVM来对⽬标和背景进⾏分类(每个类⼀个⼆进制SVM)

🍀(5)边界框回归(Bounding boxes Regression)。训练将输出⼀些校正因⼦的线性回归分类器。

R-CNN创新点:

🍀(1)使⽤CNN(ConvNet)对 region proposals 计算 feature vectors。从经验驱动特征(SIFT、HOG)到数据驱动特征(CNN feature map),提⾼特征对样本的表⽰能⼒。

🍀(2)采⽤⼤样本下(ILSVRC)有监督预训练和⼩样本(PASCAL)微调(fine-tuning)的⽅法解决⼩样本难以训练甚⾄过拟合等问题。

说明:♨️♨️♨️

ILSVRC其实就是众所周知的ImageNet的挑战赛,数据量极⼤;PASCAL数据集(包含⽬标检测和图像分割等),相对较⼩。

R-CNN 实验结果:

R-CNN在VOC 2007测试集上mAP达到58.5%,打败当时所有的⽬标检测算法。

说明:♨️♨️♨️

论文题目:《Rich feature hierarchies for accurate object detection and semantic segmentation》 

论文地址:  https://openaccess.thecvf.com/content_cvpr_2014/papers/Girshick_Rich_Feature_Hierarchies_2014_CVPR_paper.pdf

💥💥2.2 Fast R-CNN

Fast R-CNN是一种目标检测算法,它在深度学习中被广泛应用。它是R-CNN系列算法中的一员,相比于前几个版本,Fast R-CNN在速度和准确性上都有明显的提升。

Fast R-CNN的工作流程如下:

  1. 输入一张图片和它对应的ground truth边界框。
  2. 使用预训练的卷积神经网络(CNN)提取图片的特征。
  3. 将特征图和ground truth边界框送入RoI (Region of Interest)池化层,将不同尺寸的RoIs映射到固定大小的特征图上。
  4. 把RoIs映射后的特征通过全连接层进行分类和回归,得到每个RoI的类别概率和边界框坐标调整值。
  5. 使用非最大抑制(NMS)来排除重叠的边界框,最终输出检测结果。

这种算法的优点是能够共享卷积特征提取过程,因此在处理多个RoIs时可以节省计算时间。此外,Fast R-CNN还引入了RoI池化层,解决了原始R-CNN中不同大小的RoI输入固定大小CNN的问题,提高了模型的准确性。

Fast R-CNN是基于R-CNN和SPPnets进⾏的改进。SPPnets,其创新点在于计算整幅图像的the shared feature map,然后根据object proposal在shared feature map上映射到对应的feature vector(就是不⽤重复计算 feature map了)。当然,SPPnets也有缺点:和R-CNN⼀样,训练是多阶段(multiple-stage pipeline)的,速度还是不够"快",特征还要保存到本地磁盘中。📚

以下是Fast R-CNN的流程图:

解析1:RoI Pooling层详解:

因为Fast R-CNN使⽤全连接层,所以应⽤RoI Pooling将不同⼤⼩的ROI转换为固定⼤⼩。RoI Pooling 是Pooling层的⼀种,⽽且是针对RoI的Pooling,其特点是输⼊特征图尺⼨不固定,但是输出特征图尺⼨固定(如7x7)。

解析2:什么是RoI呢?

RoI是Region of Interest的简写,⼀般是指图像上的区域框,但这⾥指的是由Selective Search提取的候选框。

 RoI的具体操作:

  1. 根据输⼊image,将ROI映射到feature map对应位置 。注:映射规则⽐较简单,就是把各个坐标除以“输⼊图⽚与feature map的⼤⼩的⽐值”,得到了feature map上的box坐标。
  2. 将映射后的区域划分为相同⼤⼩的sections(sections数量与输出的维度相同)。
  3. 对每个sections进⾏max pooling操作。

这样我们就可以从不同⼤⼩的⽅框得到固定⼤⼩的相应的feature maps。值得⼀提的是,输出的feature maps的⼤⼩不取决于ROI和卷积feature maps⼤⼩。RoI Pooling 最⼤的好处就在于极⼤地提⾼了处理速度。

Fast R-CNN创新点:

🍀(1)只对整幅图像进⾏⼀次特征提取,避免R-CNN中的冗余特征提取。

🍀(2)⽤RoI pooling层替换最后⼀层的max pooling层,同时引⼊建议框数据,提取相应建议框特征。

🍀(3)Fast R-CNN⽹络末尾采⽤并⾏的不同的全连接层,可同时输出分类结果和窗⼝回归结果,实现了end-to-end的多任务训练(建议框提取除外),也不需要额外的特征存储空间(R-CNN中的特征需要保持到本地,来供SVM和Bounding-box regression进⾏训练)。

🍀(4)采⽤SVD对Fast R-CNN⽹络末尾并⾏的全连接层进⾏分解,减少计算复杂度,加快检测速度。

说明:♨️♨️♨️

论文题目:《Fast R-CNN》

论文地址:  https://arxiv.org/abs/1504.08083

💥💥2.3 Faster R-CNN

Faster R-CNN是一种目标检测算法,它是在R-CNN(Region-based Convolutional Neural Networks)的基础上进行改进而来的。它的主要创新点是引入了候选区域生成网络(Region Proposal Network,简称RPN),将候选区域的生成和目标检测两个任务合并在一个网络中,从而实现了端到端的目标检测。

Faster R-CNN的工作流程如下:

  1. 输入图像经过卷积神经网络(CNN)提取特征。
  2. RPN网络在特征图上滑动窗口,并输出一系列候选区域和对应的边界框偏移信息。
  3. 对于每个候选区域,通过RoI池化层将其转化为固定大小的特征图。
  4. 将特征图输入全连接层进行分类和回归,得到目标的类别和位置信息。

以下是Faster R-CNN的网络结构图:

Faster R-CNN的优点是:

🍀(1)相较于R-CNN,它引入了共享卷积特征提取部分,从而大大减少了计算量。

🍀(2)候选区域生成和目标检测任务在同一个网络中进行,使得整个模型可以端到端地训练,提高了效率和准确性。

说明:♨️♨️♨️

论文题目:《Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》

论文地址:  https://arxiv.org/pdf/1506.01497.pdf

💥💥2.4 Mask R-CNN

Mask R-CNN是一种用于物体检测和语义分割的深度学习模型。它是基于Faster R-CNN模型的扩展,通过添加一个额外的分支来生成每个检测到的物体的精确掩码。Mask R-CNN模型通常由两个主要组件组成:区域建议网络(Region Proposal Network,RPN)和掩码预测分支。RPN负责生成候选目标区域,它会从输入图像中提取特征,并预测每个区域是前景还是背景。然后,这些候选区域会传递给掩码预测分支。掩码预测分支负责为每个检测到的物体生成精确的掩码。它会在每个候选区域上进行卷积操作,并输出一个与输入区域大小相匹配的二进制掩码图像。

通过结合目标检测和语义分割,Mask R-CNN可以准确地识别图像中的每个物体,并为它们生成精确的掩码。这使得Mask R-CNN成为许多计算机视觉任务(如实例分割、姿态估计等)的重要基础。

Mask R-CNN算法步骤:

  1. 输⼊⼀幅你想处理的图⽚,然后进⾏对应的预处理操作,或者预处理后的图⽚;
  2. 将其输⼊到⼀个预训练好的神经⽹络中(ResNeXt等)获得对应的feature map;
  3. 对这个feature map中的每⼀点设定预定个的RoI,从⽽获得多个候选RoI;
  4. 将这些候选的RoI送⼊RPN⽹络进⾏⼆值分类(前景或背景)和BB回归,过滤掉⼀部分候选的RoI;
  5. 对这些剩下的RoI进⾏RoI Align操作(即先将原图和feature map的pixel对应起来,然后将feature map和 固定的feature对应起来);
  6. 对这些RoI进⾏分类(N类别分类)、BB回归和MASK⽣成(在每⼀个RoI⾥⾯进⾏FCN操作)。

说明:♨️♨️♨️

论文题目:《Mask R-CNN》

论文地址:  https://arxiv.org/abs/1703.06870


🚀3.一阶段目标检测算法

💥💥3.1 SSD

SSD(Single Shot MultiBox Detector)是一种基于深度学习的目标检测算法,它能够同时进行目标的位置定位和类别预测。相比于其他目标检测算法,SSD具有快速、准确和端到端的优势。它采用了多层特征图来检测不同尺度的目标,并且通过预定义的一系列锚框(anchor boxes)来进行目标定位和分类。

SSD主要由两个部分组成:基础网络和特征提取网络常用的基础网络包括VGG16、ResNet等,用于提取原始图像的特征。特征提取网络由多个卷积层和池化层组成,用于生成一系列特征图。每个特征图都负责检测不同大小的目标。

在SSD中,每个锚框都与一个特定的尺度和长宽比相关联。对于每个锚框,SSD会计算其与真实目标框之间的IoU(Intersection over Union),并将其分为正样本和负样本。然后,SSD通过卷积操作对每个锚框进行类别预测和边界框调整,得到最终的检测结果。

不同于前⾯的R-CNN系列,SSD属于one-stage⽅法。SSD使⽤ VGG16 ⽹络作为特征提取器(和 Faster R-CNN 中使⽤的 CNN ⼀样),将后⾯的全连接层替换成卷积层,并在之后添加⾃定义卷积层,并在最后直接采⽤卷 积进⾏检测。在多个特征图上设置不同缩放⽐例和不同宽⾼⽐的先验框以融合多尺度特征图进⾏检测,靠前的⼤尺度特征图可以捕捉到⼩物体的信息,⽽靠后的⼩尺度特征图能捕捉到⼤物体的信息,从⽽提⾼检测的准确 性和定位的准确性。

下图是SSD的⽹络结构图。

SSD创新点:

🍀(1)基于Faster R-CNN中的Anchor,提出了相似的先验框(Prior box)

🍀(2)从不同⽐例的特征图(多尺度特征)中产⽣不同⽐例的预测,并明确地按长宽⽐分离预测。 

说明:♨️♨️♨️

论文题目:《SSD single shot multibox detector》

论文地址:  https://arxiv.org/abs/1512.02325

💥💥3.2 YOLO算法

YOLO(you only look once),将物体检测任务当做回归问题(regression problem)来处理,直接通过整张图片的所有像素得到bounding box的坐标、box中包含物体的置信度和 class probabilities。通过YOLO,每张图像只需要看一眼就能得出图像中都有哪些物体和这些物体的位置。

YOLO划分网格:

具体来说,YOLO的CNN网络将输入的图片分割成S×S网格,然后每个单元格负责去检测那些中心点落在该格子内的目标,如图所示,可以看到狗这个目标的中心落在左下角一个单元格内,那么该单元格负责预测这个狗。每个单元格会预测B个边界框(bounding box)以及边界框的置信度(confidence score)。所谓置信度其实包含两个方面,一是这个边界框含有目标的可能性大小,二是这个边界框的准确度。前者记为,当该边界框是背景时(即不包含目标),此时Pr(object)=0。而当该边界框包含目标时,Pr(object)=1。边界框的准确度可以用预测框与实际框(ground truth)的IoU(intersection over union,交并比)来表征。

使用YOLO来检测物体,其流程是非常简单明了的:

  1. 将图像resize到448 * 448作为神经网络的输入;
  2. 运行神经网络,得到一些bounding box坐标、box中包含物体的置信度和class probabilities;
  3. 进行非极大值抑制,筛选Boxes。

YOLO对每个bounding box有5个predictions:x, y, w, h, confidence:

🍀(1)坐标x,y代表了预测的bounding box的中心与栅格边界的相对值。

🍀(2)坐标w,h代表了预测的bounding box的width、height相对于整幅图像width,height的比例。

🍀(3)confidence就是预测的bounding box和ground truth box的IoU值。

Yolo算法开创了one-stage检测的先河,它将物体分类和物体检测网络合二为一, 都在全连接层完成。故它大大降低了目标检测的耗时,提高了实时性;但是,它的缺点也十分明显:

🍀(1)每个网格只对应两个bounding box,当物体的长宽比不常见(也就是训练数据集覆盖不到时),效果很差。

🍀(2)原始图片只划分为7x7的网格,当两个物体靠的很近时,效果很差。

🍀(3)最终每个网格只对应一个类别,容易出现漏检(物体没有被识别到)。

🍀(4)对于图片中比较小的物体,效果很差。这其实是所有目标检测算法的通病,SSD对它有些优化。


参考文献名:

【1】Rich feature hierarchies for accurate object detection and semantic segmentation;

【2】Fast R-CNN;

【3】Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks;

【4】You Only Look Once: Unfied,Real-Time Object Detection;

【5】SSD:Single Shot MultiBox Detector;

【6】Selective Search for Object Recognition;

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

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

相关文章

C语言指针笔试题讲解

大家好,我们来学习一些C语言的指针笔试题。对于C语言指针的模块想必大家都非常的头疼吧,那么我们就来就来看看一些关于C语言指针的笔试题。 首先让我们看到我们今天的第一题。 int main() { int a[5] { 1, 2, 3, 4, 5 }; int *ptr (int *)(&a 1)…

AUTOSAR RTE介绍(更新版230925)

RTE是什么 AUTOSAR RTE(Run Time Environment)实现了AUTOSAR系统中的虚拟功能总线(VFB),提供了SWC(Software Component)之间的访问接口和SWC对于BSW资源的访问接口。RTE为SWC中的Runnable提供与其他SWC或者BSW模块通信的接口,RTE将Runnable映射到OS Task中,并且管理Runna…

二进制中1的个数 C++实现

题目&#xff1a; 代码&#xff1a; #include<iostream> using namespace std; const int N100010; int a[N]; int n;int lowbit(int x){return x & -x; }int main(){scanf("%d",&n);for(int i0;i<n;i) scanf("%d",&a[i]);for(int i…

抽检监测实施

声明 本文是学习GB-T 42893-2023 电子商务交易产品质量监测实施指南. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件提供了开展电子商务交易的有形产品质量监测的总则&#xff0c;监测准备、监测实施、监测效果评价 与反馈等过程指导…

this.$nextTick()的使用场景

事件循环机制&#xff1a; 同步代码执行->查找异步队列&#xff0c;推入执行栈&#xff0c;执行Vue.nextTick[事件循环1]->查找异步队列&#xff0c;推入执行栈&#xff0c;执行Vue.nextTick[事件循环2]->查找异步队列&#xff0c;推入执行栈&#xff0c;执行Vue.nex…

Win10专业版系统一键重装怎么操作?

Win10专业版系统一键重装怎么操作&#xff1f;与传统的系统重装相比&#xff0c;一键重装不仅省去了繁琐的安装步骤&#xff0c;这一简单操作使得系统维护和恢复变得更加便捷&#xff0c;让用户不再为系统问题而烦恼。下面小编给大家详细介绍关于一键重装Win10专业版系统的操作…

使用bash脚本编译Qt工程

最近在搭建Qt工程的编译服务器&#xff0c;需要通过shell脚本执行工程的编译过程&#xff0c;写在这里&#xff0c;总结最近的工作。 1. 构建过程 以Windows为例&#xff0c;在QtCreator中左侧选择“项目”便可以看到编译的指令和参数&#xff0c;这些操作也会在我们点击“构建…

个人博客系统测试报告(一)

作者&#xff1a;爱塔居 专栏&#xff1a;测试 目录 一、项目背景介绍 二、项目功能 三、测试计划 3.1自动化测试用例 3.2 性能测试 ​​​​​​​&#xff08;未完&#xff09; 一、项目背景介绍 个人博客系统前端由注册页、登录页、列表页、详情页、编辑页、个人博客列…

CompletableFuture-通用异步编程

演示Completable接口完全可以代替Future接口&#xff1a; CompletableFuture减少阻塞和轮询&#xff0c;可以传入回调对象&#xff0c;当异步任务完成或者发生异常时&#xff0c;自动 调用回调对象的回调方法。 package com.nanjing.gulimall.zhouyimo.test;import java.util…

postman接口自动化测试框架实战

什么是自动化测试 把人对软件的测试行为转化为由机器执行测试行为的一种实践。 例如GUI自动化测试&#xff0c;模拟人去操作软件界面&#xff0c;把人从简单重复的劳动中解放出来。 本质是用代码去测试另一段代码&#xff0c;属于一种软件开发工作&#xff0c;已经开发完成的用…

Linux死锁

第三种情况 #include<stdio.h> #include<unistd.h> #include<pthread.h> #include<string.h>pthread_mutex_t mutex1, mutex2; void * workA(void * arg) {pthread_mutex_lock(&mutex1);sleep(1);pthread_mutex_lock(&mutex2);printf("w…

【MySQL】 Java的JDBC编程

文章目录 &#x1f332;数据库编程的必备条件&#x1f38b;Java的数据库编程&#xff1a;JDBC&#x1f38d;JDBC工作原理&#x1f333;建立数据库连接&#x1f4cc;在项目中新建一个包&#xff0c;名字自命名&#x1f4cc;将依赖包导入新建包中&#x1f4cc;DataSource&#xf…

EPLAN_002#常用功能(二)

一、快速添加端子 端子编号 端子定义 批量修改时&#xff0c;当名称出现冲突时&#xff0c;勾选上 端子排排序&#xff0c;可以基于页 二、多层端子的快速建立 有购物车的代表一个端子 三、手动鞍型跳线 标题 四、购物车图标 在导航器中&#xff0c;有购物车是陷进去的表示 在图…

基于微信小程序的线上教育课程付费商城(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

Springboot: Spring Cloud Gateway 使用的基本概念及配置介绍

1. SpringCloud 与 SpringBoot的版本映射关系 在已有的Spring Boot项目中增加Spring Cloud&#xff0c;首先要确定使用的Spring Cloud的版本&#xff0c;这取决于项目使用的Spring Boot的版本 SpringCloud 与 SpringBoot的版本映射关系 如果两者的版本不兼容&#xff0c;再会…

【洛谷 P1644】跳马问题 题解(动态规划)

跳马问题 题目背景 在爱与愁的故事第一弹第三章出来前先练练四道基本的回溯/搜索题吧…… 题目描述 中国象棋半张棋盘如图 1 1 1 所示。马自左下角 ( 0 , 0 ) (0,0) (0,0) 向右上角 ( m , n ) (m,n) (m,n) 跳。规定只能往右跳&#xff0c;不准往左跳。比如图 1 1 1 中所…

【已解决】PDF文件无法编辑怎么办?

打开PDF文件却发现无法编辑&#xff0c;怎么办&#xff1f; 首先&#xff0c;我们要知道&#xff0c;编辑PDF文件需要用到PDF编辑器&#xff0c;用PDF阅读器打开的话是无法编辑的。所以&#xff0c;先要确定是否用PDF编辑器打开PDF文件。 如果使用PDF编辑器打开后还是无法编辑…

2023-9-25 JZ25 合并两个排序的链表

题目链接&#xff1a;合并两个排序的链表 import java.util.*;/** public class ListNode {* int val;* ListNode next null;* public ListNode(int val) {* this.val val;* }* }*/public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c…

8.定义算法中的函数

在 algorithm2e 宏包中&#xff0c;您可以使用 \SetKwFunction 命令来定义算法中的函数。这个命令用于指定函数的名称和参数列表。以下是如何在算法中定义一个函数的示例&#xff1a; \documentclass{article} \usepackage[linesnumbered,boxed]{algorithm2e}\begin{document}…

Tomcat 开启远程调试

Tomcat 部署的 war包工程开启远程调试 Linux服务器下&#xff0c;编辑Tomcat bin 目录下的 startup.sh 文件 vim startup.sh在第一行加入&#xff1a;(不换行&#xff0c;在同一行) declare -x CATALINA_OPTS"-server -Xdebug -Xnoagent -Djava.compilerNONE -Xrunjdwp:…