(五)比赛中的CV算法(上2)目标检测初步:神经网络及优化方法

2023-05-16

-NeoZng【neozng1@hnu.edu.cn】

attention:5.2、5.3、5.4对于新人来说可能有一定难度。

若是新人或刚入门的 RMer,可以由此直接跳转道第六部分继续阅读,第六部分看完后再回来这里继续 ~~

5.2.目标检测

时下RM赛场上的自瞄算法分为两个流派:传统特征提取和神经网络。前一个部分已经介绍了和比赛相关的OpenCV函数,因此为了保证行文的连贯性和整体性又不重复叙述,这个部分主要介绍新兴的基于神经网络的目标检测算法。在第六部分当中则会介绍传统算法的全部流程。

神经网络是时下最火热的ML的子领域,也就是我们常听说的“深度学习”、“深度神经网络”。而基于卷及神经网络的目标检测算法又是这个领域的超级明星。基于机器人学习的目标检测几乎在各方面都替代了传统算法:传统算法需要手工设计检测目标特征,并且很难分离前景和背景。而前者则是通过学习算法来习得检测目标的特征,并且在速度上随着各种trick的加入已经对算本身的改进,已经达到了实时性。虽然缺乏一些可解释性,但也不能阻止其在CV方面大放异彩、在各种顶会顶刊上乱杀的势头。这个部分会介绍卷积神经网络的基本原理和几个热门的目标检测算法的相关知识。检测装甲板、机器人、能量机关这些都只是冰山一角,这些目标检测算法的检测对象几乎是没有限制的,因此基本只需要更改训练集和很少的超参数就可以将算法部署到其他问题上。

目标检测算法经过近十年的发展已经成长为一颗参天大树,基于CNN的目标检测现在大致可以分为两类:1-stage2-stage。也可以分为anchor-basedanchor-free,再加上使用transformer的后起之秀这三类。若要入门深度学习(神经网络),!!!强烈推荐吴恩达的深度学习系列课程!!!深入浅出贴近实践并且在coursera上有相关的练习。务必至少看完这个系列的前四部分视频再学习目标检测的相关内容。同时吴恩达教授的另一个系列课程机器学习经典名课也深受大家欢迎,若能学完这两个系列的课程,在AI方面就算是入门啦。

我们首先介绍目标检测的基础——神经网络

当开始阅读5.2之后,笔者默认读者已经拥有了微积分、线性代数、机器学习的基础。

5.2.1.神经网络

  • 和传统的统计学习方法如SVM、PCA、LDA等都是需要经过训练的。以最简单的单层感知机为例,其实我们可以将所有的神经网络看作是一个多维特征空间到另一个我们需要的得到的属性的映射。对神经网络的训练,就是用一对对标记好的数据(已知输入的特征向量和输出的属性,即数据标签)对这个“函数黑箱”的建模过程。其中的每个神经元的w、b即是我们需要得到函数的许多构成参数之一。然后我们根据BP(back propagation)算法等对网络进行最优化(让网络学会这个我们需要的函数,即学习过程),使得这个函数能够逼近我们需要的理想的映射。

    分类问题就是在回归问题的基础上增加后处理,如加入SVM和softmax函数等。对于基于卷积神经网络的猫狗图像分类器,假设其输入是320x320的图像,那么就是有320x320=102400个特征(每个像素作为一个特征,单通道位图),其输出是一个三维向量[cat dog none],每个元素智能取0和1并且最多只能有一个元素为1。那么,某个元素的值为1时说明此图像是对应的那种物体,none为1则为说明图像中没有猫也没有狗。那么,训练出来的函数就是一个102400元函数,其输出为3维的离散序列,此函数通过映射将一张图片映射到上述的三维离散空间中。

    在此网站:A visual proof that neural nets can compute any function,有对神经网络是如何拟合出任意函数的形象的、直观的解释。手机上还有一款就叫做神经网络的App,你可以手动设置隐藏层的数量、各个神经元的w、b和激活函数等,然后得到一张清晰的拟合出的函数的图片(当然只有3维空间以下的结果能够被可视化地输出)。

 app神经网络的截图,内部还提供了著名的网络如shuffleNet、语言模型、TextCNN、自编码器等

  • 对于深度学习或机器学习模型而言,我们不仅要求它对训练数据集有很好的拟合(训练误差小),同时也希望它可以对未知数据集(评价集、测试集、实际应用)有很好的拟合结果(泛化能力强,即训练生成的函数可以很好的根据输入预测输出且基本没有错误),所产生的测试误差被称为泛化误差。度量泛化能力的好坏,最直观的表现就是模型的过拟合(overfitting)和欠拟合(underfitting)。过拟合和欠拟合是用于描述模型在训练过程中的两种状态。这两个问题的都会导致神经网络的泛化能力下降,欠拟合一般是通过增大训练数据量和模型复杂度解决,而过拟合则是当前科研面临的主要问题,解决方法也多种多样。

    训练模型得到的几种状态的图解,以回归分析为例

  • 因此,在训练神经网络时,我们需要用一些trick来改善它的性能或加速训练过程,在此过程中就涉及到需要人为确定的许多“超参数”。这些超参数设定的数学依据较少甚至没有,很大部分都是启发式的(拍脑袋想出来的),而不是有一套严密优雅的数学方法来对神经网络的表达能力和学习有效性进行分析。这也是神经网络被传统的统计学习学派诟病为“炼丹”的原因:需要在实践中不断调整超参数的值和网络结构,根据训练结果才能改进网络的结构和超参数的值(就如控制领域的pid算法一样,虽然三板斧调参用起来猛,你却很难说出个所以然来)。

    不过它们确实有效,所以我们还是来看看他们的作用吧:

    • 正则化(Regularization)

      个人认为这种翻译的有些生硬也不够直观,按照笔者的理解,应该被称做“规范化”或“约束化”。通过对损失函数加入额外的先验知识,防止w在训练中变化过于剧烈,进而在很大的程度上改善过拟合的问题。在一些教程中,常常用一个两参数的单元来可视化这种方法:

      摘自周志华教授的《机器学习》,L1正则化和L2正则化的形象图解

      通过对w添加额外的限制,倘若w在训练过程中变化过于迅速(这是过拟合的一个主要原因,对训练集数据过于“亲近”,以至于学习到了部分分布当中的一些偏差与噪声,而不是整体分布的信息),额外的惩罚项会约束w的增减,降低其变化速度。详细的解释,在Andrew Ng的深度学习课程第二部分p5.

    • 数据增强(Data Augmentation)

      以图像分类为例,通过将训练集中的图像进行翻转、反转、裁切、旋转、变形和添加色彩偏差等方法来扩充数据集,是最廉价最简单的防止overfit的方法。虽然其效果不如收集更多的图片来的得好,可架不住成本低、几乎无开销的特点。在小规模训集上,数据增强是最有效的方法之一。

       

      通过翻转和旋转、裁切等操作,扩充了猫咪数据集

    • Dropout正则化(随机丢弃)

      初看dropout方法的同学一般都会认为它深度学习中显得更加玄乎。其原理大概是在某个隐藏层中随机使某个神经元失活(使其输出为零),这样拟合出来的函数参数量下降,不容易拟合复杂的函数,就更不容易出现过拟合的现象。然而dropout会在反向传播中出现难以解决的问题,由于其丢弃的结点是随机的,无法在每一轮反向传播中确定要更新的参数,因而无法明确的定义损失函数,除非每一轮训练只使用一个样本(想想为什么?)。

      从数学角度理解,似乎dropout能够产生L2正则化的效果,随机丢弃某一层中的一个结点,其结果就是该结点不会在本次反向传播对损失函数的计算产生影响。若该结点在之前的训练中变化过于剧烈,那么使其失活就有机会让其他结点的参数得到训练从而获得变化,而非将所有的赌注放在那个结点上(put all of its bets on)。因为每个结点失活的概率是相同的,那么他们应该会得到均等的训练机会。详细的解释参见深度学习课程第二部分p7

      dropout图示,使神经元失活即置零其输出

    • 归一化和标准化(Normalization and Standalization)

      这两个操作常常被混淆,在一些文献中也表示相同的意思,他们都是特征缩放的方法。因此本文将他们视作同一种类的不同操作。常见的归一化操作有minmax缩放、零均值化、方差归一化等。也可以把归一化理解成“单位化”、“统一化”。minmax缩放将所有数据通过线性映射把值变到一个区间内。零均值归一化操作会将数据特征的均值化为零,方差归一化则是将特征的方差变为1。后二者常结合在一起使用。

      使用了零均值化和方差归一化后的数据,截取自深度学习系列课程

      通过这些尺度缩放的操作,可以缩小存储数据需要的空间,同时可以让损失函数变得更加“圆润”。下图给出了未归一化和归一化后的损失函数的对比。显然通下降法,归一化后的数据能够更快地使网络收敛,因为在圆周上的任意一点梯度方向都是垂直于“等高线“的,梯度是函数变化最快的方向(多元微积分知识)。

      使用前后的损失函数对比,下方为损失函数的等梯度线(标量)

    • 防止陷入局部最优解

      当损失函数可能不是一个凸函数,或者它有多个极值点(大多数情况下都是这样),那么,使用梯度下降方法可能会使神经网络拟合出来的函数陷入局部最优解(向着不是最小/大的极值点不断迭代)

      • 多种初始化值(从头训练)

        在初始化网络参数权重时,一次选取多组参数,相当于一次训练多个有相同结构的网络。这样,我们能够从参数空间中的不同位置开始运行梯度下降。即使部分解陷入了局部最优,我们还有其他的解。可以把这种方法看成”广撒网“式的训练。最后我们会测试这多个网络的性能,选取其中最好的一个。虽然这种方法的效果最好,但是其缺点也十分明显:极大的训练开销

        从参数空间的不同位置(蓝色点)开始梯度下降,即使有部分陷入了局部最优解,也可能有一些会收敛到全局最优,至少也是比较好的极值

      • 局部扰动

        使用局部扰动有一定的概率跳出局部最优解:在网络的Loss function不再减小或缓慢振荡的时候(也许此时陷入了局部最优解),随机地给网络参数进行微小的扰动。若在有限步迭代(人为设置地超参数)内能够往其他方向移动并且进一步缩小了Loss function,那么说明我们找到了一个比原来的解更好的解,此时再继续运行梯度下降。若迭代次数超出了我们设置地扰动次数上限,则返回原来的位置,认为函数已经收敛到比较好的极值点了,得到了较优的结果。如此,就有概率跳出局部最优解。

        局部扰动和模拟退火算法在有某些相似之处。也有研究人员提出,可以利用模拟退火算法来在小规模网络上进行训练,收敛速度十分迅速。

        对局部最优解加入扰动后,成功找到了更好的解

    • mini-batch(小批量训练)

      不需要遍历整个数据集就进行一次剃度下降,选取部分样本作为一个批次来计算其loss。从另一个角度来理解,就是加快了迈步的频率。朴素的梯度下降是遍历整个数据集后再计算loss,对参数进行一次更新。minibatch则是把数据集分为32/64/128/256...这样的“小训练集“,在一个小训练集遍历后就进行更新。其优点很明显,就是可以提高训练速度。但它也同样存在一个小缺点:只使用部分训练集进行训练可能产生局部的过拟合或是欠拟合(小部分的数据集无法反映整体数据分布),还好在实践中对模型的影响似乎并不是很大。在数据集稍大的情况下,我们一般都会选择使用minibatch进行训练,否则收敛速度过慢且空间开销过大

    • Batch-Norm(批量归一化)

      • batch-norm字如其名,对每一小批数据进行标准化。它会一批数据的每一个隐藏层的输出都进行归一化。我们在前面已经了解到了Normalization的好处,于是,有研究人员就想到为什么不能对神经网络中的每一层输出都进行类似的操作呢?于是,我们采用的Batch-Norm会将数据集的数据划分为一个个batch,并对每个batch中的数据在每一层的输出都进行归一化。(为什么不对所有数据在每一个输出层都进行normalization?)

      • 在训练结束后进行推理时,一般都是单个数据的输入(特别是实时视频序列的处理),这时候要注意的问题就是每一个输出层的归一化使用的均值与方差的确定,显然对单个数据没有均值和方差可言。因此在训练过程中,我们会用指数加权平均的方式记录每一批norm的均值和方差,并以此作为推理时的参数(根据大数定律,这个值最终会近似实际的分布)。

      • Batch-Norm为什么奏效呢?在前面的归一化中我们已经了解过,这些操作能够让参数搜索空间中的loss function改变成“碗状”从而获得更好的梯度下降效果。但是既然数据分布已经完成了这件事,在中间的隐藏层为何还要继续使用normalization?这里就要涉及到一个叫做covariate shift的问题。想要理解covariate shift,请看下面这张图:

        从第三层开始,可以将其看作整个网络的”子“网络。每一层的参数都试图从前一层的输出中习得这些数据到训练标签y的一个映射

        这里只是以第三层为例,其实可以没去掉一层(计算一层)就把它看作是一组数据到y hat的映射。那么自然每一层的输出向量都可以看作是一个特征向量,则我们就对这一批“特征向量”进行归一化。Covariate Shift就是一个向量经过前层的计算,数据原来的分布已经改变了(每一层网络都是非线性映射,从极端的角度来看每一个隐藏层都是一个网络,单层感知机)。那么显然,如果数据的分布一直在改变,网络是很难习得一个映射的(数据分布随着参数更新始终发生变化,就像解方程我们需要一些确定的信心,而在这里这个信息却会一直发生变换表现得像未知数)。使用batch-norm则可以把每一层的输出都标准化为方差为1均值为0的分布,虽然它的具体形式还是未知,但至少我们可以线只它的均值和方差达到限制前层参数的更新对输出数据分布影响的目的

      • 同时由于batch-norm只对每一个batch的数据作用,显然一个batch不能体现整体数据的分布,因此会引入统计偏差和噪声,有时候这反而是有利的,其效果类似dropout,能够产生一定的正则化效果,避免网络拟合出来的映射过分依赖于某个神经元。

      关于Batch-Norm的更多信息,可以参阅论文原文。文章:re-thinking batch in batchNorm 也是一篇很好的参考文章,介绍了更多关于统计和数学原理的知识

    • 学习率衰减

      学习率作为最重要的超参数之一,于我们来说有很大的操作空间。训练的开始阶段加速学习迈大脚步,采用较大的学习率;在接近最优解时、Loss function下降减慢时减小学习率,防止超调和振荡。

      不同学习率对网络收敛的影响,对比蓝色曲线和绿色曲线,我们可以取二者的精华

      有些训练策略还会在初始阶段进行warmup,先选择较小的学习率防止随机初始化的权重使得模型大幅振荡。Warmup也有两种:一种是常量warmup,在热身时选择一个固定的学习率。它的不足之处在于从一个很小的学习率一下变为比较大的学习率可能会导致训练误差突然增大。另一种是渐进warmup,即从最初的小学习率开始,每个step增大一点点,直到达到最初设置的比较大的学习率,再在之后的学习中逐渐减小学习率。还有warmup-restart、cycling、cosine等方法,每隔若干epoch就会重新启动一次warmup、让学习率从大到小以正弦规律往复变化等。需要更深入的了解可以自行查阅相关资料。


  • 优化过的梯度下降方法

    • GDM(Gradient Descent with Momentum)

      动量梯度下降法的收敛速度总是要快于普通的梯度下降法,这得益于它的”动量累积“思想(Andrew Ng说物理好的人容易理解这个算法)。假设在一个网络的训练中你遇到的参数搜索空间如下图所示,其等梯度线呈椭圆排布,那么在训练的过程中就会遇到比较大的振荡(梯度总是沿着等梯度线的切线的径向),即蓝线所示的学习路线。一旦你增大学习率,就会得到紫色的学习轨迹,产生过大的振荡甚至出现不能收敛的问题。我们希望在这个学习问题中能够让竖直方向的学习速度下降,水平方向上的学习速度增加(蓝字所示)。

      一个二维的搜索空间,红点表示Loss的最小值

      观察蓝线会发现其竖直方向上的振荡均值始终为零,走了很多没必要的路,是否可以通过某种方式让竖直方向上的学习率降低?(注意此处说的竖直方向和水平方向的都是以二维情形为例,显然我们的搜索空间没有这么小,在高维空间里就对应多个方向)GDM就是通过观察学习的特点得到的一种优化方法。

      在每一个batch的迭代中,会记录下当前的dw和db,并且以指数加权平均的方式对dw、db进行累积,把得到的累积值用来更新参数。这样,GDM就会记录那些振荡项并把方向不同的dw、db分量抵消,而那些方向相同的分量则会随着迭代的进行不断增大,就好似GDM能够聪明地找到最快下降的方向,顺着“山坡”(最速降线)不断累积“动量”,迅速到达最小值点。

      竖直方向上的分量随着迭代减小,水平方向不断增大

      如果拿具象的例子类比,就是将一个小球置于碗中,并且给它一个切向的初速度(相当于一步迭代)。对于普通的GD,每次小球的切向速度为零时就让小球停下(把径向速度也归零,即重新计算dw),然后再次释放小球;而对于GMD,就只给小球一个切向速度,之后不去干扰小球(每次计算完成之后,dw都会加权累积),那么切向速度会随着往复运动而逐渐减小(dw的反方向分量会抵消缩小),径向由于有重力加速度(方向相同,累积后不断增大),动量会持续累积,以更快的速度到达碗底。

    • RMprop (Root Mean propagation)

      RMprop和GDM异曲同工之处,同样会在迭代中保存每一次的dw值并对其进行均方加权平均。在更新参数的时候会使用当前一次迭代的dw除以前述得到的值即前几次迭代中dw的平方的加权均值(想想为什么用平方),这样,当dw变化很大的时候,该累计值也会很大,经过相除这个值就会相对变小;而dw小的时候,累计值也相对小,那么相除后用于用于更新的参数将会相对变大。这样的操作让每次更新都更加保守,不会像GDM一样速度越来越快而是始终稳步前进(此速度可以通过加权平均的系数修改)。这种特性也允许在训练时使用更大的学习率。

      绿色的箭头就是是用了RMprop后的效果,可以看到学习的步伐非常稳健

      • Adam (Adaptive Moment Estimatation)

        Adams融合了上面两种方法,最后得到的参数更新公式如下:

        Adam方法“稳中求进”

        Vdw是GDM的累计项,Sdw是RMprop的累积项,在计算结束后对Vdw和Sdw都进行了指数平均修正,确保在刚开始的时候指数加权平均不至于过小。 

了解了神经网络的构成和基本原理后就可以开始进一步学习卷积神经网络了。这里也再次提醒读者应该至少至少先学习Ng的的一个和第四个视频再来了解相关方面的知识。拥有基本的了解和学习背景对于探索新领域是非常有必要的,否则你只会在n个不同的超链接里面反复横跳(这是啥?查一下,诶,这又是啥?再查一下......wft?怎么又回来了??)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(五)比赛中的CV算法(上2)目标检测初步:神经网络及优化方法 的相关文章

  • web安全--文件包含(本地包含,远程包含)

    前言 文件包含漏洞简介 xff1a 文件包含的函数的参数没有经过过滤或者是严格的定义 xff0c 并且参数可以被用户所控制 xff0c 这样就可能包含非预期的文件 一 文件包含漏洞常见的函数 xff08 默认都以php脚本为准啊 xff09
  • 〖数学算法〗求圆周率的几种算法

    圆周率大家都不陌生 xff0c 最早由欧几里德 几何原本 中提到圆周率是常数 xff0c 第一个用寻求圆周率数值的人是阿基米德 xff0c 中国数学家刘徽 xff0c 和后来大名鼎鼎的祖冲之分别对圆周率进行了计算 xff0c 从古到今对圆周
  • 优秀程序员不得不知道的20个位运算技巧

    一提起位运算 xff0c 人们往往想到它的高效性 xff0c 无论是嵌入式编程还是优化系统的核心代码 xff0c 适当的运用位运算总是一种迷人的手段 xff0c 或者当您求职的时候 xff0c 在代码中写入适当的位运算也会让您的程序增加一丝
  • ceph 维护系列(一)删除一个ceph 节点

    零 修订记录 序号修订内容修订时间1新增2021 2 19 一 摘要 本文是基于 xff08 ceph 纵向扩容 nautilus版本 xff09 https www cnblogs com weiwei2021 p 14381416 ht
  • iOS开发技巧-UIImageView 的contentMode属性说明和使用

    contentMode这个属性是用来设置图片的显示方式 xff0c 如居中 居右 xff0c 是否缩放等 苹果api里面的说明 span class hljs keyword typedef span NS ENUM span class
  • systemV信号量的使用案例

    systemV信号量处理的函数有 xff1a semget semctl semop 函数 semget函数 span class token macro property span class token directive hash s
  • 交叉编译Qt5.6.1:飞腾cpu(1500a v1.0 64位)+银河麒麟服务器

    交叉编译Qt5 6 1 xff1a 飞腾cpu 1500a v1 0 64位 43 银河麒麟服务器 目标机环境 xff1a 飞腾cpu 1500a v1 0 64位 xff0c 银河麒麟服务器操作系统 宿主机环境 xff1a Unbuntu
  • vscode安装拓展插件失败 要求手动安装, 手动下载后导入安装仍然失败。(Error when installing ‘Python‘ extension. Please check the)

    在vscode中点击对应插件的install按钮安装 xff0c 安装失败 xff0c 软件提示手动安装 manually install 英文报错为 xff08 39 Python 可为各种拓展插件 xff09 xff1a Error w
  • Hyper-V配置PCI设备直通(DDA)之GPU直通

    记录性随笔 xff0c 较随意 xff0c 有相同需求和问题欢迎留言交流 首先贴上所参考的大佬文章 xff1a https www licc tech article id 61 35 以下完全按照文章步骤进行 xff0c 并对遇到的问题提
  • java数据类型转换

    一些初学JAVA的朋友可能会遇到JAVA的数据类型之间转换的苦恼 xff0c 例如 xff0c 整数和float double型之间的转换 xff0c 整数和String类型之间的转换 xff0c 以及处理 显示时间方面的问题等 下面笔者就
  • Ubuntu安装时卡在安装界面怎么办

    当我们在虚拟机安装Ubuntu的时候 xff0c 可能很多的小伙伴会遇到界面卡住 xff0c 其实时那个界面显示太小了 xff0c 这时你应该关闭安装的界面 xff0c 你关闭之后会自动进入ubuntu的界面 xff0c 右击界面找到显示设
  • [编程题]带括号的四则运算

    一 问题描述 输入字符串中的有效字符包括 0 9 43 xff0c 算术表达式的有效性由调用者保证 输入描述 xff1a 输入一个算术表达式 输出描述 xff1a 得到计算结果 输入示例 xff1a 3 43 2 1 43 2 4 8 6
  • cJSON的简单应用(json对象、数组)

    cJSON 结构 xff1a typedef struct cJSON structcJSON next prev next prevallow you to walk array object chains Alternatively u
  • 关于阿里云上使用smtp的25号端口被禁用的问题

    在使用python进行SMTP服务进行发送邮件的时候 xff0c 出现在发送的的过程中阻塞但是并不报错的现象 xff0c 经过调试后发现 xff0c 在连接SMTP服务器的时候发生阻塞 这个原因的产生是因为阿里云服务器关闭了25号端口 xf
  • centos7中图数据库neo4j安装

    neo4j是目前最流行的开源的图数据库之一 xff0c 喜欢研究新技术的朋友们可以尝试着搭建一下图数据库 安装环境Centos7 xff08 阿里云vps xff09 版本 xff1a neo4j 社区版 1 首先安装jdk 2 安装neo
  • linux查看防火墙状态

    一 iptables防火墙 1 基本操作 查看防火墙状态 service iptables status 停止防火墙 service iptables stop 启动防火墙 service iptables start 重启防火墙 serv
  • centos7中mysql安装

    环境 xff1a centos7 xff08 阿里云vps xff09 mysqld 5 7 27 先检查系统是否装有mysql xff0c 如果返回空值 xff0c 说明没有安装MySQL xff1b root 64 localhost
  • 树莓派3B首次安装

    下载系统 xff1a 树莓派官网https www raspberrypi org downloads raspbian 从该系统下载相关的镜像文件 xff0c 我这里用的是 2017 09 07 raspbian stretch lite
  • LightPC: Hardware and Software Co-Design for Energy-Efficient Full System Persistence(论文阅读翻译)

    xff08 注 xff1a 课程作业要求 xff0c 机翻自己看的 xff09 Abstract 我们提出了LightPC xff0c 一种轻量级的持久性中心平台 xff0c 以使系统对电源故障具有鲁棒性 LightPC由硬件和软件子系统组
  • LINUX 常用命令

    LINUX 常用命令 1 cd命令 这是一个非常基本 xff0c 也是大家经常需要使用的命令 xff0c 它用于切换当前目录 xff0c 它的参数是要切换到的目录的路径 xff0c 可以是绝对路径 xff0c 也可以是相对路径 如 xff1

随机推荐

  • Linux 下安装 WordPress

    Linux 下安装 WordPress 1 下载 WordPress wget i https cn wordpress org wordpress 5 0 3 zh CN zip 2 解压 wordpress 5 0 3 zh CN zi
  • 注册表操作,reg脚本简单编写

    注册表操作 xff0c reg脚本简单编写 添加项 Windows Registry Editor Version 5 00 HKEY CURRENT CONFIG System CurrentControlSet SERVICES TSD
  • EUI-64格式生成

    EUI 64 IEEE EUI 64地址表示有一个用于网络接口寻址的新标准 在IPV6中 xff0c 无状态自动配置机制使用EUI 64格式来自动配置IPV6地址 无状态自动配置是指在网络中没有DHCP服务器的情况下 xff0c 允许节点自
  • Git使用

    Git使用 生成RSA密钥对 ssh keygen t rsa C email t 指定生成的加密方式 C 添加注释 xff0c 一般来说是邮箱 注 xff1a 如果指定了文件名字为github rsa xff0c 需要配置config 内
  • maven 常用镜像仓库

    maven 常用镜像仓库 lt mirror gt lt id gt alimaven lt id gt lt mirrorOf gt central lt mirrorOf gt lt name gt aliyun maven lt na
  • 面向对象的语言主要有哪些

    面向对象程序设计 Object Oriented Programming xff0c OOP 的实质是选用一种面向对象程序设计语言 OOPL xff0c 采用对象 类及其相关概念所进行的程序设计 主要有Smalltalk Eiffel C
  • Python如何自制包、如何安装自己的包并导入

    首先科普一下包和模块的概念 xff1a 在Python中 xff0c 包是一个包含多个模块的目录 xff0c 而模块则是一个单独的文件 一个包可以包含多个模块 xff0c 也可以包含其他的子包 当一个目录下面有一个 init py文件时 x
  • 使用OpenFeign代替RestTemplate来请求接口

    在使用RestTemplate来调用接口服务的时候 xff0c 需要写一个调用地址的参数 xff0c 这样做不太好管理接口地址 xff0c OpenFeign就提供了一个比较好的管理方式 xff0c 类似于写一个Mapper的接口 xff0
  • 手把手教你如何一键备份和恢复微信聊天记录

    相信大家的聊天记录都非常重要 xff0c 怎么能说没就没 xff01 xff01 今天就分享一个备份聊天记录的方法 备份聊天记录 首先在电脑版微信上 xff0c 点击左下角 三条横杠标志 按钮 xff0c 选择 备份与恢复 在弹出的 备份与
  • MonoSDF: Exploring Monocular Geometric Cues for Neural Implicit Surface Reconstruction论文翻译

    机翻的 这篇属实看不懂 Abstract 近年来 xff0c 神经隐式表面重建方法已成为多视图三维重建的流行方法 与传统的多视图立体方法相比 xff0c 由于神经网络的归纳平滑偏差 xff0c 这些方法往往会产生更平滑和更完整的重建 最先进
  • SPSS入门教程—相关性分析使用方法

    IBM SPSS Statistics为用户提供了三种相关性分析的方法 xff0c 分别是双变量分析 偏相关分析和距离分析 xff0c 三种相关分析方法各针对不同的数据情况 xff0c 接下来我们将为大家介绍如何使用SPSS相关性分析中的距
  • 使用IBM SPSS Statistics的新手应该如何入门

    一 什么是IBM SPSS Statistics xff1f IBM SPSS Statistics 是一款强大的统计软件平台 xff0c 它所提供的数据分析功能 xff0c 可以帮助企业 个人对各类数据进行切实可行的洞察分析 xff0c
  • linux 下清空回收站命令

    linux 下清空回收站命令 sudo rm fr root Trash
  • 了解CV和RoboMaster视觉组(目录和大纲)

    NeoZng neozng1 64 hnu edu cn 全网最最最全的RoboMaster视觉组入门教程和概览来啦 xff01 0 Catalogue 摘要 视觉组在不同兵种中的作用 2 1 装甲板识别 2 2 能量机关 2 3 哨兵 2
  • 了解CV和RoboMaster视觉组(一)摘要

    NeoZng neozng1 64 hnu edu cn 1 摘要 在阅读本文之前 xff0c 你需要有计算机科学的基本知识并至少掌握一门编程语言 xff0c 同时对robomaster比赛规则和过程有大致的了解 若只是希望知道视觉组的基本
  • 了解CV和RoboMaster视觉组(二)视觉在各兵种中的作用

    NeoZng neozng1 64 hnu edu cn 2 视觉在各兵种中的作用 2 1 装甲板识别 xff08 步兵 英雄 无人机 xff09 由于机器人上安装的图传模块到操作手看到的第一视角的延迟加上操作手反应速度的延迟 xff0c
  • 了解CV和RoboMaster视觉组(三)视觉组使用的软件

    NeoZng neozng1 64 hnu edu cn 3 视觉组接触的软件 进行视觉开发会用到各种各样的软件 开发环境 辅助工具等 xff0c 所以很有必要了解一些相关的快捷键 命令 使用技巧 选择一款适合自己的IDE能够提高开发效率
  • 了解CV和RoboMaster视觉组(四)视觉组使用的硬件

    NeoZng neozng1 64 hnu edu cn 4 视觉组接触的硬件 虽然别人总觉得视觉组就是整天对着屏幕臭敲代码的程序员 xff0c 实际上我们也会接触很多的底层硬件与传感器 xff0c 在使用硬件的同时很可能还需要综合运用其他
  • (五)比赛中的CV算法(上)cv基础知识和opencv的api

    5 比赛中的CV算法 讲了这么多 xff0c 视觉组的重头戏 算法终于来了 在大部分时候我们都不需要设计底层的算法 xff0c 而是直接调用封装好的API xff0c 设计更具体的应用于特定问题的算法 当然 xff0c 有必要了解一下造轮子
  • (五)比赛中的CV算法(上2)目标检测初步:神经网络及优化方法

    NeoZng neozng1 64 hnu edu cn attention xff1a 5 2 5 3 5 4对于新人来说可能有一定难度 若是新人或刚入门的 RMer xff0c 可以由此直接跳转道第六部分继续阅读 xff0c 第六部分看