计算机视觉与深度学习-图像分割-视觉识别任务02-目标检测-【北邮鲁鹏】

news2024/9/26 3:31:29

目录标题

  • 参考
  • 目标检测定义
  • 深度学习对目标检测的作用
    • 单目标检测
      • 多任务框架
      • 多任务损失
      • 预训练模型
      • 姿态估计
    • 多目标检测
      • 问题
      • 滑动窗口(Sliding Window)
        • 滑动窗口缺点
      • AdaBoost(Adaptive Boosting)
        • 参考
      • 区域建议 selective search 思想
      • 慢速R-CNN
        • 慢速R-CNN思路
        • 边界框回归(Bbox reg)
        • 慢速R-CNN缺点
      • Fast R-CNN
        • 改进一:先提取特征后区域建议
        • 改进二:全连接神经网络
        • 改进三:裁剪+缩放特征(RoI Pool)
        • 为什么需要RoI Pool?
        • 区域裁剪
          • Rol Pool
          • Rol Align
        • Fast R-CNN的问题
      • Fast R-CNN vs 慢速R-CNN
      • Faster R-CNN
        • RPN(Region Proposal Network)
        • 区域建议(Region Proposal Network)
        • 运行分为两个阶段
        • Faster R-CNN速度
      • 目标检测: 影响精度的因素 ...

参考

【计算机视觉】计算机视觉与深度学习-07-目标检测-北邮鲁鹏老师课程笔记
计算机视觉与深度学习 北京邮电大学 鲁鹏 清晰版合集(完整版)

目标检测定义

目标检测的目标是确定图像中存在的目标的类别,并在图像中标记出它们的位置,通常使用边界框来表示目标的位置和大小。

单目标检测:分类+定位
在这里插入图片描述

深度学习对目标检测的作用

深度学习通过使用深层神经网络模型,可以从原始像素级别上学习和提取图像特征,从而实现目标检测。
在这里插入图片描述

单目标检测

将定位任务建模为回归问题!
在这里插入图片描述

多任务框架

一个任务是:分类。
另一个任务是:定位。
在这里插入图片描述

多任务损失

网络训练的目标是降低总损失,所以 softmax loss 和 L2 loss 将同时减小,也可以为 softmax loss 和 L2 loss 分别设置一个权重,通过改变权重,调整 softmax loss 和 L2 loss 在总损失中所占的比重。

预训练模型

目标检测中,一般不从头开始训练网络,而是使用ImageNet上预训练的模型。
在这里插入图片描述
一般分三个阶段:

1、分类训练阶段

在这个阶段,通常使用预训练的分类模型(如在ImageNet上预训练的模型)来进行训练。该模型已经在大规模图像分类任务上学习到了丰富的图像特征。然后,将最后的全连接层替换成适应目标检测任务的新的全连接层,并使用目标检测数据集进行训练。这个阶段的目标是学习分类任务所需的特征表示。

2、定位训练阶段

在这个阶段,固定预训练模型的大部分层,并仅仅调整输出层和一些顶层特征层。然后,使用目标检测数据集进行训练,让模型学习如何准确地定位目标。这个阶段的目标是学习目标的位置信息。

3、分类和定位一起训练阶段

在这个阶段,不仅训练分类任务,还同时训练目标的位置信息。在模型中同时使用分类和定位损失函数,并根据这两个任务的权重进行综合训练。这个阶段的目标是综合考虑分类和定位任务,使模型能够准确地检测并定位目标。

姿态估计

姿态估计(Pose Estimation)是计算机视觉中的一个重要任务,旨在从图像或视频中推断出人体、物体或其他目标的姿态信息,包括位置、方向和关节角度等。

单目标检测的思路,还应用于单人体姿态估计,与box coordinates不同的是,在人体上标注关键点,然后通过训练,与标答进行对比。
在这里插入图片描述

  • 目标检测: 首先,使用目标检测算法来检测图像中的人体目标。目标检测算法可以是传统的方法(如基于特征的方法)或深度学习方法(如基于卷积神经网络的方法)。检测到的人体目标将作为后续姿态估计的输入。

  • 关键点定位: 对于每个检测到的人体目标,需要进一步定位其关键点,例如人体姿态估计中的关节点。可以使用关键点检测算法(如姿态估计算法或关键点检测算法)来定位人体关键点。这些算法可以是传统的机器学习方法,也可以是基于深度学习的方法。

  • 姿态估计: 一旦获得了人体关键点的位置,可以使用姿态估计算法来推断人体的姿态信息,如人体的位置、旋转和关节角度等。姿态估计算法可以基于几何模型、优化方法或深度学习方法。根据应用需求,可以选择合适的姿态表示形式,如关节角度、骨架模型或三维姿态等。

  • 后处理与应用: 最后,可以对估计的姿态结果进行后处理,如滤波或平滑操作,以提高估计的准确性和稳定性。得到最终的姿态估计结果后,可以将其应用于各种应用领域,如动作识别、运动分析、虚拟现实、增强现实等。

多目标检测

问题

困境:每张图像期望输出的维度都不一样。

在这里插入图片描述
神经网络的标答是预先建立好的,因为多目标检测中目标数量并不确定,输出的维度不确定,就无法建立Correct box标答,如果使用单目标检测的训练方法,无法建立多目标检测的表达,训练将不能进行。

滑动窗口(Sliding Window)

在图像上以不同的尺度和位置滑动固定大小的窗口,然后在每个窗口上应用分类器或特征提取方法来判断窗口内是否存在目标。滑动窗口方法可以用于检测不同尺寸的目标,并且可以通过滑动步长控制检测的精度和速度。

将图像中所有可能的区域都给到分类器进行分类,只留下能正确分类的窗口。
在这里插入图片描述
困境:CNN需要对图像中所有可能的区域(不同位置、尺寸、长宽比)进行分类,计算量巨大!

滑动窗口缺点

穷举图像中成千上万的区域进行分类,对于神经网络,计算量很大。

针对这个问题,提出了一种新的思想,先从图像中产生一些候选区域再进行分类,而不是穷举图像中所有区域。例如:selective search

AdaBoost(Adaptive Boosting)

AdaBoost是一个非常快的分类器,可以对图像上的区域进行穷举后分类。

参考

AdaBoost算法超详细讲解

AdaBoost 是一种集成学习算法,用于提高分类器的性能。它通过迭代训练一系列弱分类器(如决策树、支持向量机等),每次迭代都根据前一轮分类结果对样本进行调整,使得难以分类的样本获得更高的权重,从而加强对这些样本的分类能力。最终,通过组合多个弱分类器,AdaBoost 可以产生一个强大的分类器。

区域建议 selective search 思想

针对穷举图像所有区域神经网络分类计算量大这个问题,提出了一种新的思想,先从图像中产生一些候选区域再进行分类,而不是穷举图像中所有区域。例如:selective search。
在这里插入图片描述
选择性搜索(Selective Search):选择性搜索是一种经典的区域建议算法。它基于图像的颜色、纹理、边缘等信息,在不同尺度和层次上进行区域合并和分割,生成一系列候选区域。

selective search思想是在R-CNN的论文中提出的。

慢速R-CNN

基于区域的目标检测算法。

慢速R-CNN思路

1 利用区域建议产生感兴趣的区域。(存入硬盘)
2 对区域进行缩放。
3 将图像区域送入卷积网络进行特征提取。(存入硬盘)
4 使用支持向量机对区域进行分类,同时进行边界框回归(修正学习)。
在这里插入图片描述

边界框回归(Bbox reg)

区域建议生成的区域,可能有损失,效果不好,进行边界框回归,就是为了修正区域建议生成的区域与真实区域的偏差。

边框回归(Bounding Box Regression)详解

在这里插入图片描述
对于上图,绿色的框表示Ground Truth, 红色的框为Selective Search提取的Region Proposal。那么即便红色的框被分类器识别为飞机,但是由于红色的框定位不准(IoU<0.5), 那么这张图相当于没有正确的检测出飞机。 如果我们能对红色的框进行微调, 使得经过微调后的窗口跟Ground Truth 更接近, 这样岂不是定位会更准确。 确实,Bounding-box regression 就是用来微调这个窗口的。

慢速R-CNN缺点

问题:计算效率低下,每张图像大约有2k个区域需要卷积网络进行特征提取,重叠区域反复计算。

Fast R-CNN

在Fast R-CNN中,首先通过卷积神经网络(CNN)提取整个图像的特征图。然后,针对每个感兴趣区域(Region of Interest,RoI),通过RoI池化层将其映射为固定大小的特征图。这样可以避免在每个RoI上进行独立的卷积操作,从而大大减少了计算量。

接下来,将RoI映射后的特征图输入到全连接层中,进行目标分类和边界框回归。分类部分使用softmax函数对RoI进行多类别分类,而边界框回归则用于预测目标的位置和大小。
在这里插入图片描述
Fast R-CNN的训练是端到端的,可以通过反向传播同时优化特征提取网络和分类/回归网络。这种端到端的训练方式比R-CNN中的多阶段训练更加高效。

改进一:先提取特征后区域建议

如果先进行区域建议后进行特征提取,计算量比较大。因此先对整个图片进行卷积提取特征后,在特征图上进行区域扣取。

改进二:全连接神经网络
改进三:裁剪+缩放特征(RoI Pool)
为什么需要RoI Pool?

先来看一个问题:对于传统的CNN(如AlexNet和VGG),当网络训练好后输入的图像尺寸必须是固定值,同时网络输出也是固定大小的vector or matrix。如果输入图像大小不定,这个问题就变得比较麻烦。有2种解决办法:

  1. 从图像中crop一部分传入网络。
  2. 将图像warp成需要的大小后传入网络。

在这里插入图片描述
两种办法的示意图如图,可以看到无论采取那种办法都不好,要么crop后破坏了图像的完整结构,要么warp破坏了图像原始形状信息。

回忆RPN网络生成的proposals的方法:对positive anchors进行bounding box regression,那么这样获得的proposals也是大小形状各不相同,即也存在上述问题。所以Faster R-CNN中提出了RoI Pooling解决这个问题。不过RoI Pooling确实是从Spatial Pyramid Pooling发展而来。

通过RoI Pooling,即使大小不同的proposal输出结果都是固定大小,实现了固定长度输出。

参考:一文读懂Faster RCNN

区域裁剪

在这里插入图片描述

Rol Pool

区域顶点规整到网格交点上(有偏移)

在这里插入图片描述
然后进行处理
在这里插入图片描述
Rol Pool处理前不同的区域特征的空间尺寸可能不一致,但是处理后的所有区域特征尺寸都是一样的。

问题: 处理后的区域特征会有轻微的对不齐!

Rol Align

区域顶点不规整到网格交点上(无偏移)
在每个区域中选择几个关键点,关键点个数是可自定义的,是超参数。

在这里插入图片描述
RoI Align 解决了传统 RoI Pooling 中的精度损失和空间错位问题。它通过使用双线性插值的方式,精确地计算感兴趣区域内每个位置的特征值。具体而言,RoI Align 将感兴趣区域划分为更细的小格,然后在每个小格内使用双线性插值计算对应位置的特征值。最后,这些特征值通过平均池化得到感兴趣区域的特征表示。

在这里插入图片描述
双线性插值: 在每个小格内使用双线性插值来计算对应位置的特征值。双线性插值利用小格内的四个相邻像素的特征值,通过加权平均来估计目标位置的特征值。
在这里插入图片描述
双线性插值通过使用周围四个最近的数据点来估计目标位置的值。假设我们要在一个二维网格上进行插值,其中四个最近的数据点的坐标为 (x1, y1)、(x1, y2)、(x2, y1) 和 (x2, y2),目标位置的坐标为 (x, y)。双线性插值的计算步骤如下:

  • 计算水平方向上的插值:

a. 在 x 轴上,对数据点 (x1, y1) 和 (x2, y1) 进行线性插值,得到两个插值结果:
f 1 = f ( x 1 ) + ( x − x 1 ) ∗ ( f ( x 2 ) − f ( x 1 ) ) / ( x 2 − x 1 ) f_1 = f(x1) + (x - x1) * (f(x2) - f(x1)) / (x2 - x1) f1=f(x1)+(xx1)(f(x2)f(x1))/(x2x1)
f 2 = f ( x 1 ) + ( x − x 1 ) ∗ ( f ( x 2 ) − f ( x 1 ) ) / ( x 2 − x 1 ) f_2 = f(x1) + (x - x1) * (f(x2) - f(x1)) / (x2 - x1) f2=f(x1)+(xx1)(f(x2)f(x1))/(x2x1)
b. 在 x 轴上,对数据点 (x1, y2) 和 (x2, y2) 进行线性插值,得到两个插值结果:
f 3 = f ( x 1 ) + ( x − x 1 ) ∗ ( f ( x 2 ) − f ( x 1 ) ) / ( x 2 − x 1 ) f_3 = f(x1) + (x - x1) * (f(x2) - f(x1)) / (x2 - x1) f3=f(x1)+(xx1)(f(x2)f(x1))/(x2x1)
f 4 = f ( x 1 ) + ( x − x 1 ) ∗ ( f ( x 2 ) − f ( x 1 ) ) / ( x 2 − x 1 ) f_4 = f(x1) + (x - x1) * (f(x2) - f(x1)) / (x2 - x1) f4=f(x1)+(xx1)(f(x2)f(x1))/(x2x1)

  • 计算垂直方向上的插值:

a. 在 y 轴上,对插值结果 f1 和 f2 进行线性插值,得到结果: f 12 = f 1 + ( y − y 1 ) ∗ ( f 2 − f 1 ) / ( y 2 − y 1 ) f_{12} = f_1 + (y - y_1) * (f_2 - f_1) / (y_2 - y_1) f12=f1+(yy1)(f2f1)/(y2y1)
b. 在 y 轴上,对插值结果 f3 和 f4 进行线性插值,得到结果: f 34 = f 3 + ( y − y 1 ) ∗ ( f 4 − f 3 ) / ( y 2 − y 1 ) f_{34} = f_3 + (y - y_1) * (f_4 - f_3) / (y_2 - y_1) f34=f3+(yy1)(f4f3)/(y2y1)

最终的插值结果为在垂直方向上插值得到的 f 12 f_{12} f12 f 34 f_{34} f34的线性插值结果: f = f 12 + ( y − y 1 ) ∗ ( f 34 − f 12 ) / ( y 2 − y 1 ) f = f_{12} + (y - y_1) * (f_{34} - f_{12}) / (y_2 - y_1) f=f12+(yy1)(f34f12)/(y2y1)

Fast R-CNN的问题

selective search 区域建议 耗时过高,几乎等于单张图片的检测时间。
在这里插入图片描述

Fast R-CNN vs 慢速R-CNN

在这里插入图片描述

Fast R-CNN 相对于慢速 R-CNN 有几个改进点:

  • 特征共享:Fast R-CNN 在整个图像上只进行一次卷积运算,而慢速 R-CNN 需要为每个候选区域分别进行卷积运算。这意味着 Fast R-CNN 可以共享卷积层的计算,从而更高效地提取特征。
  • 单次前向传播:Fast R-CNN 可以通过单次前向传播同时计算所有候选区域的特征和分类结果,而慢速 R-CNN 需要为每个候选区域独立地进行前向传播,效率较低。
  • 损失函数:Fast R-CNN 引入了多任务损失函数,同时优化目标分类和边界框回归,而慢速 R-CNN 仅使用分类损失函数。

Faster R-CNN

参考:一文读懂Faster RCNN
在结构上,在中间特征层后加入区域建议网络RPN(Region Proposal Network) 产生候选区域,其他部分保持与Fast R-CNN一致,即扣取每个候选区域的特征,然后对其进行分类。
在这里插入图片描述

RPN(Region Proposal Network)

在目标检测任务中,RPN的作用是在输入图像上提出可能包含目标的候选框(或称为候选区域)。RPN是一个小型的神经网络,它以滑动窗口的方式在特征图上滑动,并为每个位置生成多个不同尺度和长宽比的候选框。

RPN的输入是经过卷积神经网络(如VGG、ResNet等)提取的特征图。特征图具有丰富的语义信息,可以帮助RPN更好地定位目标。RPN在特征图上应用一个小型的卷积滑动窗口,并对每个窗口位置生成多个anchors。

对于每个anchor,RPN会通过卷积和全连接层进行处理,并输出两个值:
1)表示该anchor是否包含目标的概率(通常是二分类问题);
2)对应目标边界框的修正信息,用于调整候选框的位置和形状。

通过这个过程,RPN能够生成大量的候选框,并为每个候选框提供目标概率和边界框的修正信息。然后,根据这些概率和修正信息,可以对候选框进行筛选和精细调整,选出最具有潜力的候选区域。

RPN所生成的候选区域随后被传递给后续的分类器和边界框回归器,进行目标分类和精确定位。

区域建议(Region Proposal Network)

实际使用中,对于每个特征图上的每个位置,我们通常会采用k个不同尺寸和分辨率的锚点区域(anchor boxes)
在这里插入图片描述

四种损失联合训练:
• RPN分类损失(目标/非目标)
• RPN边界框坐标回归损失
• 候选区域分类损失
• 最终边界框坐标回归损失

运行分为两个阶段

在这里插入图片描述

第一阶段:候选区域生成

在第一阶段,Faster R-CNN使用Region Proposal Network (RPN) 来生成候选区域。

RPN通过在输入图像上滑动窗口,并在不同位置和尺度上生成一系列的候选框(也称为锚框或anchors),这些候选框可能包含目标。对于每个候选框,RPN预测其包含目标的概率以及对应目标边界框的修正信息。

第二阶段:目标分类和边界框回归

在第二阶段,Faster R-CNN使用先前生成的候选区域作为输入,对这些候选区域进行目标分类和边界框回归。通常,这个阶段包括一个用于特征提取的卷积神经网络(如VGG、ResNet等),以及用于目标分类和边界框回归的全连接层。这些层将从候选区域中提取的特征映射与目标类别进行关联,并对边界框进行微调,以更准确地定位目标。

Faster R-CNN速度

在这里插入图片描述

目标检测: 影响精度的因素 …

在这里插入图片描述

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

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

相关文章

ISP代理是什么?双ISP是什么意思?

代理是路由互联网流量的中间服务器&#xff0c;通常分为两类&#xff1a;数据中心、住宅ISP。根据定义&#xff0c;ISP 代理隶属于互联网服务提供商&#xff0c;但实际上&#xff0c;大家会将它们视为数据中心和住宅代理的组合。 让我们仔细研究一下ISP代理&#xff0c;看看它们…

verilog学习笔记(1)module实例化

兜兜转转又回来学硬件了&#xff0c;哎&#xff0c;命啊&#xff01; 我的答案&#xff08;有bug&#xff09;&#xff1a; module top_module ( input a, input b, output out );wire w1;wire w2;wire w3;mod_a mod_a_inst1(.in1(w1),.in2(w2),.out(w3) );assign w1 a…

【Vue】轻松理解数据代理

hello&#xff0c;我是小索奇&#xff0c;精心制作的Vue教程持续更新哈&#xff0c;想要学习&巩固&避坑就一起学习叭~ Object定义配置方法 代码 引出数据代理&#xff0c;先上代码&#xff0c;后加解释 <!DOCTYPE html> <html><head><meta cha…

助力工业智能化升级 复合移动机器人生态圈在沪启动

9月19日&#xff0c;由移动机器人&#xff08;AGV/AMR&#xff09;产业联盟组织&#xff0c;深圳优艾智合机器人科技有限公司&#xff08;以下简称“优艾智合”&#xff09;牵头&#xff0c;工业机器人产业上下游30家代表企业共同组成的复合移动机器人生态圈在上海国家会展中心…

SpringBoot 统一登录鉴权、异常处理、数据格式

本篇将要学习 Spring Boot 统一功能处理模块&#xff0c;这也是 AOP 的实战环节 用户登录权限的校验实现接口 HandlerInterceptor WebMvcConfigurer 异常处理使用注解 RestControllerAdvice ExceptionHandler 数据格式返回使用注解 ControllerAdvice 并且实现接口 Response…

Android 9 底部导航栏样式不正确

1.项目预制了GMS后&#xff0c;底部导航栏只剩下一个返回键和唤醒Assistant的按钮&#xff0c;需要回到原来的导航栏来 修改方式屏蔽掉 config_defaultAssistantAccessPackage&#xff0c;使用Android原始的config_defaultAssistantAccessPackage vendor/partner_gms/product…

超硬核的Move Dev Meetup上海线下交流会圆满结束

北京时间9月16日下午2–6点&#xff0c;由MoveFuns DAO联合其他组织举办的Move开发者线下交流会在上海悦达国际大厦圆满完成。此次活动也是上海区块链周的周边活动&#xff0c;受到了Web3从业者的广泛关注。 本场交流会邀请了OpenBuild技术社区主理人Ian主持&#xff0c;50余位…

百度测开面试题分享

1、java常用的异常处理机制&#xff1f; Java常用的异常处理机制有以下几种&#xff1a; 1&#xff09;try-catch-finally 语句&#xff1a;用于捕获和处理异常。将可能抛出异常的代码放在try块中&#xff0c;然后在catch块中处理异常。无论是否发生异常&#xff0c;finally块…

MySQL什么情况下会死锁,发生了死锁怎么处理呢?

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师…

Zabbix5.0_介绍_组成架构_以及和prometheus的对比_大数据环境下的监控_网络_软件_设备监控_Zabbix工作笔记

z 这里Zabbix可以实现采集 存储 展示 报警 但是 zabbix自带的,展示 和报警 没那么好看,我们可以用 grafana进行展示,然后我们用一个叫睿象云的来做告警展示, 会更丰富一点. 可以看到 看一下zabbix的介绍. 对zabbix的介绍,这个zabbix比较适合对服务器进行监控 这个是zabbix的…

华为云云耀云服务器L实例评测|轻量级应用服务器对决:基于 STREAM 深度测评华为云云耀云服务器L实例的内存性能

本文收录在专栏&#xff1a;#云计算入门与实践 - 华为云 专栏中&#xff0c;本系列博文还在更新中 相关华为云云耀云服务器L实例评测文章列表如下&#xff1a; 华为云云耀云服务器L实例评测 | 从零开始&#xff1a;云耀云服务器L实例的全面使用解析指南华为云云耀云服务器L实…

C++虚函数表

一、虚函数和纯虚函数 1.1 虚函数 在类成员方法的声明 (不是定义) 语句前加 “virtual”&#xff0c;如 virtual void func() class ISpeaker { public:virtual void func(); }; 1.2 纯虚函数 在虚函数后加 “0”&#xff0c;如 virtual void func()0 class ISpeaker { pu…

【JAVA-Day29】 多维数组和一维数组的区别:简明对照

多维数组和一维数组的区别&#xff1a;简明对照 多维数组和一维数组的区别&#xff1a;简明对照摘要&#xff08;博主语气&#xff09;&#xff1a;多维数组和一维数组是编程中常用的数据结构&#xff0c;它们在定义和使用上有很大的不同。本文将详细介绍它们的区别&#xff0c…

优麒麟下载、安装、体验

下载 官网 优麒麟 点击增强版、或者基础版进行下载 虚拟机安装 选择镜像 修改名称和存储路径 设置为50G 下一步&#xff0c;点击完成 开启安装 设置语言 去掉下载更新选项 继续 点击restart now 输入密码 出现下图说明安装成功&#xff0c;可以畅快的使用了

React中插槽处理机制

React中插槽处理机制 需求&#xff1a;假如底部可能有按钮&#xff0c;根据需求判断需要展示或不展示&#xff0c;或者需要展示不同的按钮或者其他DOM 解决1&#xff1a;需要的按钮可以在组件中写死&#xff0c;后期基于传递进来的属性来进行判断 解决2&#xff1a;我们也可以…

Nacos安装指南(Windows环境)

Windows安装 开发阶段采用单机安装即可。 1.下载安装包 在Nacos的GitHub页面&#xff0c;提供有下载链接&#xff0c;可以下载编译好的Nacos服务端或者源代码&#xff1a; GitHub主页&#xff1a;https://github.com/alibaba/nacos GitHub的Release下载页&#xff1a;https:…

基于微信小程序的音乐播放器设计与实现(源码+lw+部署文档+讲解等)

前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb;…

Matlab学习笔记(不定期更新)

MATLAB学习笔记 个人上了一点网课之后&#xff0c;感觉MATLAB自带的学习指导真好用 添加所需要的变量 >> a 1 a 1 >> ans sin(a) ans 0.8415edX提供的各项MATLAB函数 遇到不会使用的函数怎么办&#xff1f; 通过在搜索文档里键入自己需要搜索的函数&#xff…

数据结构---AVL树

AVL树 AVL树的概念AVL树节点的定义AVL树的插入源代码 AVL树的概念 二叉搜索树虽然可以缩短查找的效率&#xff0c;但是&#xff0c;如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找元素相当于在顺序表中搜索元素&#xff0c;效率就会变低。因此&#xff0c;两…

Java移除链表元素

目录 1.题目描述 2.题解 题解1 题解2 1.题目描述 给你一个链表的头节点 head 和一个整数 val&#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 输入&#xff1a;head [1,2,6,3,4,5,6]&#xff0c;val 6 输出&#xff1a;…