基于深度学习的铁路异物侵限检测算法研究_整体认知感觉欠点意思,但是有一个新的变形卷积-Octave 卷积

  • 相比于其他的交通运输方式,铁路运输具有准时性高、连续性强、速度快、运输量大、运输成本低以及安全可靠等优点。同时由于国家高速铁路网络建设的不断推进,铁路运输逐渐成为我国客运与货运的主要运输方式。虽然铁路运输为人们出行和货物运输带来的极大的便利,但铁路网规模的扩大和列车速度的提升同时对列车运行安全带来了更大的挑战,列车运行过程中可能出现的安全隐患亟待解决。其中的铁路异物侵限问题可能会极大的影响列车的安全运行。

  • 铁路异物侵入安全限界会对人民的生命财产和国家的经济利益造成极大的威胁,解决异物侵限问题迫在眉睫。传统的防止异物入侵检测的手段主要是人工线路定期巡检,但是使用人工巡检的检测方式需要消耗大量的人力并且实时性能较低,难以实现24 小时全天候的检测。异物在何时何地侵入限界内通常具有很大的不确定性,当有异物不在巡检时间内进入限界就可能会导致异物无法被检测出,从而影响铁路列车的正常运行。

  • 为了克服传统检测方式存在的不足,近年来,许多传统的机器视觉方法被引入铁路异物检测领域,传统的机器视觉方法主要依靠人工设计的特征提取算子提取出的图像纹理、颜色或形状等特征完成相应的图像处理任务。但是由于该方法依赖根据经验设计出的特征提取算子,存在一定的主观性,可能无法提取出图片中的潜在特征。

  • 当图片中出现遮挡或者光照异常等情况时,将提取出错误的特征信息。而铁路列车的运行环境复杂,因此使用传统的机器视觉方法可能会造成漏检和误检等情况出现,检测的可靠性并不高。这就需要寻找一种更加精确有效的检测算法来实现异物侵限检测。

  • 国内外对于如何检测侵限异物保障列车安全运行进行了许多研究,其中主要可以将异物检测方法分为两个大类:第一类是接触式的检测手段,主要包括电网检测、光纤光栅检测、防护网检测等手段;第二类是非接触式检测,主要有红外检测,超声检测和计算机视觉的检测方法。

  • 相较与国外,国内的铁路建设起点较晚,因此对于铁路异物侵限检测的研究也相对更晚,但后期发展迅速。考虑到使用接触式的异物检测具有的安装费用和维护费用高的缺点,我国也有学者考虑将智能识别的方法运用到铁路异物检测领域,李丹丹提出了改进的 canny 算子和双背景差分法结合的铁路异物侵限方法。此方法先用改进的 canny 算子检测出图像中存在的物体边缘,作者在传统的 canny 算法中加入了迭代式的阈值分割方法用来寻找最高阈值和最低阈值。该方法能够极大的抑制伪边缘,并提取出图像的真实边缘,之后利用直线边缘提取算法提取出铁路轨道的直线边缘,根据直线边缘就可以确定异物检测的范围。考虑到使用单独的某个图像差分算法检测出的结果容易受到噪声干扰,因此作者将背景差分法和帧间差分法进行结合,此方法能够在异物检测范围内检测出的异物轮廓,并且受到外界环境的干扰较小。随着深度学习技术的兴起,国内出现不少学者将深度学习的方法加入到异物智能识别中。姜峰运用生成对抗网络的特点,利用生成网络生成与输入图像相同的图像,如果当图像中存在异物时生成网络产生的图像与原始图像会产生一定的差异,通过判断差异值的大小就可以判断出检测区域内是否存在侵限物体。此方法可以避免训练深度学习模型需要的训练集数量不足的问题,但是当检测环境发生变化时生成网络产生的图片可能会与原图产生差异从而造成误检现象出现,并且这种方式没有办法对异物具体的侵限位置和异物的类别进行判断。陶慧青将 Faster-RCNN 目标检测算法用在异物检测中,并且使用全局平均池化替代了原算法中的全连接层。此方法不仅能够有效的检测出异物的位置还能预测出异物所属的类别。考虑到 Faster-RCNN 算法实时性不够的问题,于晓英等学者采用 YOLOv1算法进行异物检测,检测的准确度虽然没有 Faster-RCNN 算法高,但是检测实时性很高。基于深度学习的铁路异物侵限检测算法研究

  • 许多学者将目光投向了智能检测方向,使用传统的机器视觉或图像差分的方法来进行异物检测。但铁路运营环境复杂多变,依靠根据经验设计的特征提取算子无法适应复杂的检测环境,并不具备良好的泛化能力,容易造成漏检和误检的情况。

  • 帧间差分法是当检测环境内有运动目标时候使用的检测方法,其利用的原理是当有移动物体存在于视频中时候,视频中不同帧的图像的像素之间存在一定的差异。因此使用相邻帧之间的图像进行差分运算,就能够得到图像之间的像素的差值,当此差值达到设定的阈值时,就能够确定是否有运动的物体存在于检测场景中

  • 背景差分法是将图像分成前景和背景,前景即需要检测的物体,背景即除了检测物体之外的其他区域,将包含前景与背景的图像与只包含背景的图像进行差分计算,当差分结果大于给定的阈值时,即判断当前的检测场景中存在物体

  • 传统的机器视觉方法主要先将检测图片划分多个检测窗口,之后对每一个检测窗口采用特征描述子提取检测窗口内的特征,之后基于提取出的特征采用分类器判断前景和背景区域。在对图像进行特征提取之前,需要将图片划分成多个检测窗口,每个检测窗口内都包含一定面积的像素区域,在检测前需要预先设定检测区域的大小和检测窗口移动的步长,每个检测窗口可能包含有待检测物体的局部特征。这种按检测窗口逐个对图片特征进行提取的方法速度缓慢并且操作繁琐因此并不适用于实时性高的场合

  • 根据特征的抽象程度和所包含的语义信息的大小可以分为三类:浅层特征、中层特征和深层特征。浅层特征表示使用简单的特征提取方式就能从图像当中提取出的特征,抽象程度较低,包含的信息含义也能够直观理解,比如颜色、纹理、形状等特征;中层特征指的是在浅层特征的基础上通过多种特征融合的方法得到的综合特征,比如将图像的纹理特征和颜色特征进行融合的特征提取方式 LOMO;深层特征指的是利用深度神经网络对图像数据进行挖掘后得到的特征,这类特征受外界环境影响较小,能够适应各种应用场景,缺点是抽象程度较高,无法知道特征具体表示的含义。

  • 传统的机器视觉方法对特征的提取采用的是手工设计的特征描述子,提取的是主要是图像的浅层特征和中层特征,现有图像特征研究使用的特征描述子主要有提取图像颜色特征的颜色直方图、颜色矩和颜色集;提取图像纹理特征的 LBP 和灰度共生矩阵;提取图像边缘特征的 Canny 算子和 Sobel 算子。这类特征描述子基于图像本身固有的特征,不需要依靠大量数据进行学习和训练,但易受到诸如光照、图像拍摄角度等外界环境影响,而且特征提取过程复杂,提取时间较长。对于复杂的铁路场景,当异常环境情况出现时,可能会对检测结果造成很大的影响。

  • 传统的机器视觉方法最常用的分类器主要是 SVM 分类器,使用HOG 算子提取图像的梯度方向特征,最后使用 SVM 对得到的梯度信息进行分类,区分行人和背景的梯度方向,但对大规模样本进行分类的时候,需要储存和计算大型矩阵,这将会消耗大量的计算资源和计算时间,并且在预测时需要单独训练 SVM 分类器,使网络的训练过程变得更加复杂。

  • 深度学习方法与传统计算机视觉方法最大的不同就在于摒弃了手工设计的特征提取器,转而使用足够深的特征卷积神经网络来提取图像中的抽象特征,虽然无法描述出提取出的特征的具体含义,但此类特征相比手工特征描述子提取出的特征具有更加丰富的语义信息,能够表征待检测的物体。

  • 一个函数能够作为神经网络的激活函数应当具有以下五个性质:

    • 非线性,线性函数对增加神经网络的表达能力并无作用,还会因此增加网络的计算量,因此,选用的激活函数必须满足非线性。

    • 连续可微。神经网络通常运用梯度下降法来求解代价函数的最小值,运用反向反向传播算法来计算神经网络每一处参数的梯度,所以必须保证在激活函数的可微性。

    • 激活函数必须含有非饱和区段,函数的饱和区段是指对函数求导为零的区段,在饱和区段时,使用反向传播算法的到的梯度大小为零,神经网络将无法进行梯度下降

    • 单调性,当激活函数满足单调性时,激活函数的导数正负性不会发生改变,这会使得梯度的方向不发生改变,有利于梯度下降法的进行(感觉不太对🙅‍,swish, softmax)。

    • 在原点处近为线性,神经网络在训练前需要对网络的每一处参数进行初始化,当初始化参数接近于零时,在原点处近似为线性的激活函数有助于加快神经网络的学习(有些激活函数都不过原点)。

    • 激活函数的导函数值域要在一个合适的区间内,不能太大也不能太小,否则会影响训练的效率和稳定性。

  • 知道神经网络模拟了人类神经元的工作机理,激活函数(Activation Function)是一种添加到人工神经网络中的函数,旨在帮助网络学习数据中的复杂模式。在神经元中,输入的input经过一系列加权求和后作用于另一个函数,这个函数就是这里的激活函数。类似于人类大脑中基于神经元的模型,激活函数最终决定了是否传递信号以及要发射给下一个神经元的内容。在人工神经网络中,一个节点的激活函数定义了该节点在给定的输入或输入集合下的输出。标准的计算机芯片电路可以看作是根据输入得到开(1)或关(0)输出的数字电路激活函数。

  • 因为神经网络中每一层的输入输出都是一个线性求和的过程,下一层的输出只是承接了上一层输入函数的线性变换,所以如果没有激活函数,那么无论你构造的神经网络多么复杂,有多少层,最后的输出都是输入的线性组合,纯粹的线性组合并不能够解决更为复杂的问题。而引入激活函数之后,我们会发现常见的激活函数都是非线性的,因此也会给神经元引入非线性元素,使得神经网络可以逼近其他的任何非线性函数,这样可以使得神经网络应用到更多非线性模型中。

  • 目标检测网络模型一般由三个模块组成,第一个部分是由上一节所述特征提取网络构成的主干网(backbone),第二个部分是用于将主干网络提取出的特征进行处理并输入给检测模块的连接模块(neck),第三个部分是用于定义损失函数以及将连接模块的输出特征处理成物体预测信息的检测模块。现有的目标检测模型,可以根据是否使用区域建议网络(RPN)分为“一阶段”和“二阶段”目标检测模型,两种检测模型的总体框架如图 2-15 所示,其中“二阶段”网络主要包括 RCNN 系列网络,“一阶段”网络主要包括 YOLO 系列网络。

  • 在图像处理领域,对于一张采集到的图片,通常由不同的频率分量组成,其中高频部分能够保留比较完整的图片细节信息,而低频部分通常保留着图像中的全局结构。由于图片中的低频部分保存的是图片中的全局结构,所以存在着大量的冗余信息,通过压缩低频部分的图像信息可以达到在保留图像大致结构的基础上,减少信息冗余。相似的,对于卷积层输出的特征图也能够看成是不同频率分量的组合,对于输出特征图的低频部分,每一个位置都独立的储存着自己的特征描述子,而忽略了那些可以共同储存和处理的相邻区域的特征描述子,这就造成了在进行卷积运算时不必要的计算量的产生,因此可以将经过卷积层处理后的特征图分解成不同频率的两个部分,通过对其中低频部分的进行压缩处理,使得特征图中相邻位置的相似特征信息可以同时被储存和处理,这样就可以节省卷积的计算量,节约设备中的计算资源

  • 在卷积神经网络中,传统的卷积方式是使用一定大小的卷积核上的每一个元素乘以原图片或特征图上相应位置的特征值,最后相加,将得到的数值作为经过卷积操作的到的特征图上对应位置的特征值,具体计算公式如式

    • Y i , j = ∑ i , j ∈ N k W i + k − 1 2 , j + k − 1 2 T X p + i , q + j Y_{i,j}=\sum_{i,j\in N_k}W^T_{i+\frac{k-1}{2},j+\frac{k-1}{2}}X_{p+i,q+j} Yi,j=i,jNkWi+2k1,j+2k1TXp+i,q+j
  • 本文对低频部分的特征在空间分辨率上进行了压缩处理,因此在使用上式的卷积方式对不同的频率特征进行处理时,需要先将低频部分的特征图上采样到和高频特征图的大小一致后再沿着通道方向进行拼接,然后将拼接好的特征图输入到卷积神经网络中进行特征提取,这将会给网络带来额外的计算量和存储量,相当于抵消了低频特图压缩给网络带来的计算复杂性的降低,而 Octave 卷积可以解决这个问题。Octave卷积的目的是有效的处理高低频率的特征张量,并且可以完成不同频率特征之间信息的交互,首先将 X 和 Y 作为待分解的输入特征和经过卷积层处理后的输出特征,那么经过分解后,输出特征 Y = { Y H + Y L } Y=\{Y^H+Y^L\} Y={YH+YL},其中 Y H = Y H → H + Y L → H , Y L = Y L → L + Y H → L Y^H=Y^{H→H}+Y^{L→H},Y^L=Y^{L→L}+Y^{H→L} YH=YHH+YLH,YL=YLL+YHL,式中的 Y H → H Y^{H→H} YHH Y L → L Y^{L→L} YLL表示同频率特征图之间的更新, Y L → H Y^{L→H} YLH Y H → L Y^{H→L} YHL 表示不同频率特征图之间的信息交流。为了能够分别计算不同频率的特征,Octave 卷积将卷积核 W 分为两个部分即 W H = { W H → H , W L → H } W^H=\{W^{H→H},W^{L→H}\} WH={WHH,WLH},其中的 W H W^H WH W L W^L WL 同样可以被分解为频率内和频率间两个分即 W H = { W H → H , W L → H } W^H=\{W^{H→H},W^{L→H}\} WH={WHH,WLH} W H = { W L → L , W H → L } W^H=\{W^{L→L},W^{H→L}\} WH={WLL,WHL},Octave 卷积的计算方式和 k* k 卷积核形状如图示。

    • 在这里插入图片描述
  • 下表 为 Octave 卷积的不同计算通道的计算复杂度,其中假设输入特征图的通道数等于输出特征图的通道数等于 c,即 c = c i n = c o u t c=c_{in}=c_{out} c=cin=cout ,输入特征图低频特征通道数占总通道数的比率等于输出特征图低频特征通道数占总通道数的比率等于,即 α = α i n = α o u t \alpha=\alpha_{in}=\alpha_{out} α=αin=αout

    • 在这里插入图片描述

    • 可知新型卷积的计算复杂度为 ( 1 − 0.75 α ( 2 − α ) ) ∗ h ∗ w ∗ k 2 ∗ c 2 (1-0.75\alpha(2-\alpha))*h*w*k^2*c^2 (10.75α(2α))hwk2c2 ,传统卷积得到的计算复杂度为 h ∗ w ∗ k 2 ∗ c 2 h*w*k^2*c^2 hwk2c2 。当  取 0.5 的时,新型卷积的计算复杂度只有传统卷积的 0.44 倍。

  • Octave卷积的主题思想来自于图片的分频思想,首先认为图像可进行分频:

    • 低频部分:图像低频部分保存图像的大体信息,信息数据量较少

    • 高频部分:图像高频部分保留图像的细节信息,信息数据量较大

    • class OctaveConv(pt.nn.Module):
          def __init__(self,Lin_channel,Hin_channel,Lout_channel,Hout_channel,
                  kernel,stride,padding):
              super(OctaveConv, self).__init__()
              if Lout_channel != 0 and Lin_channel != 0:
                  self.convL2L = pt.nn.Conv2d(Lin_channel,Lout_channel, kernel,stride,padding)
                  self.convH2L = pt.nn.Conv2d(Hin_channel,Lout_channel, kernel,stride,padding)
                  self.convL2H = pt.nn.Conv2d(Lin_channel,Hout_channel, kernel,stride,padding)
                  self.convH2H = pt.nn.Conv2d(Hin_channel,Hout_channel, kernel,stride,padding)
              elif Lout_channel == 0 and Lin_channel != 0:
                  self.convL2L = None
                  self.convH2L = None
                  self.convL2H = pt.nn.Conv2d(Lin_channel,Hout_channel, kernel,stride,padding)
                  self.convH2H = pt.nn.Conv2d(Hin_channel,Hout_channel, kernel,stride,padding)
              elif Lout_channel != 0 and Lin_channel == 0:
                  self.convL2L = None
                  self.convH2L = pt.nn.Conv2d(Hin_channel,Lout_channel, kernel,stride,padding)
                  self.convL2H = None
                  self.convH2H = pt.nn.Conv2d(Hin_channel,Hout_channel, kernel,stride,padding)
              else:
                  self.convL2L = None
                  self.convH2L = None
                  self.convL2H = None
                  self.convH2H = pt.nn.Conv2d(Hin_channel,Hout_channel, kernel,stride,padding)
              self.upsample = pt.nn.Upsample(scale_factor=2)
              self.pool = pt.nn.AvgPool2d(2)
          def forward(self,Lx,Hx):
              if self.convL2L is not None:
                  L2Ly = self.convL2L(Lx)
              else:
                  L2Ly = 0
              if self.convL2H is not None:
                  L2Hy = self.upsample(self.convL2H(Lx))
              else:
                  L2Hy = 0
              if self.convH2L is not None:
                  H2Ly = self.convH2L(self.pool(Hx))
              else:
                  H2Ly = 0
              if self.convH2H is not None:
                  H2Hy = self.convH2H(Hx)
              else:
                  H2Hy = 0
              return L2Ly+H2Ly,L2Hy+H2Hy
      
  • OctConv 是一种即插即用的卷积单元,可以直接替代传统的卷积,而无需对网络架构进行任何调整。在自然的图像中,信息以不同的频率传递,其中较高的频率通常以精细的细节编码,较低的频率通常以全局结构编码。

  • 在这项工作中,作者提出将混合特征映射根据其频率进行分解,并设计了一种全新的卷积运算:Octave Convolution (OctConv),用以存储和处理在较低空间分辨率下空间变化 “较慢” 的特征图,从而降低了内存和计算成本。

  • 通过简单地用 OctConv 替代卷积,我们可以持续提高图像和视频识别任务的精度,同时降低内存和计算成本

  • 卷积神经网络 (CNNs) 在许多计算机视觉任务中都取得了显著的成功,并且随着最近的研究在降低密集模型参数和特征图通道维数的固有冗余,它们的效率不断提高。然而,CNN 生成的特征图在空间维度上也存在大量冗余,其中每个位置独立存储自己的特征描述符,忽略了可以一起存储和处理的相邻位置之间的公共信息。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

BOXTRADE-天启量化分析平台 主要功能介绍

BOXTRADE-天启量化分析平台 主要功能介绍 potato 数学 web 缘起 月晕而风,础润而雨 BOXTRADE-天启量化 欢迎来到天启量化!这是一个专注于量化分析的网站。我们致力于为用户提供市场行情技术指标和量化策略分析方面的优质内容和资源。 我们的使命是 做…

“SRP模型+”多技术融合在生态环境脆弱性评价模型构建、时空格局演变分析与RSEI 指数的生态质量评价

近年来,国内外学者在生态系统的敏感性、适应能力和潜在影响等方面开展了大量的生态脆弱性研究,他们普遍将生态脆弱性概念与农牧交错带、喀斯特地区、黄土高原区、流域、城市等相结合,评价不同类型研究区的生态脆弱特征,其研究内容…

【Java 动态数据统计图】动态数据统计思路案例(动态,排序,数组)四(116)

需求::前端根据后端的返回数据:画统计图; 1.动态获取地域数据以及数据中的平均值,按照平均值降序排序; 说明: X轴是动态的,有对应区域数据则展示; X轴 区域数据降序排序…

C语言案例 判断是否为回文数-06.1

题目:随机输入一个5位数,判断它是不是回文数 步骤一:定义程序的目标 编写C程序,随机输入一个5位数,判断它是不是回文数 步骤二:程序设计 原理:即12321是回文数,个位与万位相同&#…

回归预测 | MATLAB实现NGO-SVM北方苍鹰算法优化支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现NGO-SVM北方苍鹰算法优化支持向量机多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现NGO-SVM北方苍鹰算法优化支持向量机多输入单输出回归预测(多指标,多图)效果一览基…

Spring事件监听源码解析

spring事件监听机制离不开容器IOC特性提供的支持,比如容器会自动创建事件发布器,自动识别用户注册的监听器并进行管理,在特定的事件发布后会找到对应的事件监听器并对其监听方法进行回调。Spring帮助用户屏蔽了关于事件监听机制背后的很多细节…

对象内存布局与对象头

对象内存布局 在Hotspot虚拟机里,对象在堆内存中的存储布局可以划分为三个部分:对象头、实例数据、对齐填充。 对象头 在64为系统中,Mark word 占了8个字节,cla ss Pointer 占了8个字节。从jdk1.8开始,存在指针压缩&am…

Python tkinter Notebook标签添加关闭按钮元素,及左侧添加存储状态提示图标案例,类似Notepad++页面

效果图展示 粉色框是当前页面,橙色框是鼠标经过,红色框是按下按钮,灰色按钮是其他页面的效果; 存储标识可以用来识别页面是否存储:例如当前页面已经保存用蓝色,未保存用红色,其他页面已经保存用…

基于.Net Core开发的医疗信息LIS系统源码

SaaS模式.Net Core版云LIS系统源码 医疗信息LIS系统是专为医院检验科设计的一套实验室信息管理系统,能将实验仪器与计算机组成网络,使病人样品登录、实验数据存取、报告审核、打印分发,实验数据统计分析等繁杂的操作过程实现了智能化、自动化…

在 OpenCV 中使用深度学习进行年龄检测-附源码

文末附完整源码和模型文件下载链接 在本教程中,我们将了解使用 OpenCV 创建年龄预测器和性别分类器项目的整个过程。 年龄检测 我们的目标是创建一个程序,使用图像来预测人的性别和年龄。但预测年龄可能并不像你想象的那么简单,为什么呢?您可能会认为年龄预测是一个回归问…

11. 实现业务功能--获取用户信息

目录 1. 实现 Controller 2. 单体测试 3. 修复返回值存在的缺陷 3.1 用户的隐私数据:密码的密文和盐不能显示 3.2 将值为 null 的字段可以进行过滤 3.3 时间的格式需要进行处理,如 yyyy-mmmm-ddd HH:mm:ss 3.4 data 属性没有返回 4. 实现前端页…

机器学习笔记 - 基于keras + 小型Xception网络进行图像分类

一、简述 Xception 是深度为 71 层的卷积神经网络,仅依赖于深度可分离的卷积层。 论文中将卷积神经网络中的 Inception 模块解释为常规卷积和深度可分离卷积运算(深度卷积后跟点卷积)之间的中间步骤。从这个角度来看,深度可分离卷积可以理解为具有最大数量塔的 Inception 模…

【第三阶段】kotlin语言使用replace完成加解密操作

fun main() {val password"ASDAFWEFWVWGEGSDFWEFEWGFS"println("原始密码:$password")//加密操作,就是把字符替换成数字,打乱加密var newPsdpassword.replace(Regex("[ADWF]")){when(it.value){//it.value 这里的每一个字…

AR/VR眼镜转接器方案,实现同时传输视频快充方案

简介 虚拟现实头戴显示器设备,简称VR头显VR眼镜,是利用仿真技术与计算机图形学人机接口技术多媒体技术传感技术网络技术等多种技术集合的产品,是借助计算机及最新传感器技术创造的一种崭新的人机交互手段。VR头显VR眼镜是一个跨时代的产品。不…

听GPT 讲Prometheus源代码--discovery

Prometheus是一个开源的系统监控和警报工具包,以下是Prometheus源代码中一些主要的文件夹及其作用: cmd/:这个目录包含了Prometheus主要的命令行工具,如prometheus/,promtool/等。每个子目录都代表一个可执行的命令行应…

外网连接局域网的几种方式?快解析内网穿透安全便利吗?

外网连接局域网是一项网络连接中的关键技术,它能够让远程用户通过互联网访问内部局域网中的资源和服务。外网连接局域网为企业提供了更大的灵活性和便捷性,但也需要严格的安全措施来防止未经授权的访问。 外网连接局域网的几种方式 在将外网连接到局域…

C语言之整数_数据存储篇(1)

目录 数据类型 整形家族 浮点型家族 构造类型 指针类型 空类型 整形在内存中的存储(原反补) NO1. NO2. NO3. NO4. NO5. NO6. 大端小端字节序 NO.1 NO.2 NO.3 NO.4 练习题 NO1. NO2. NO3. NO4. NO5. NO6. 总结 数据类型 …

计蒜客T1266——出勤记录

水题&#xff0c;唯一考验操作水平的只有同级连续字符串最大值这一操作&#xff0c;解决方式如下&#xff1a; int late-1; //连续缺勤的次数 int max0;//最长连续的L //缺勤检验 for(int k0;k<temp.size()-1;k){if(temp[k]L&&late-1){late1;//当前是连续的第一个…

26、springboot的自动配置03--核心功能--自定义条件注解及使用

开发自己的自动配置------开发自己的条件注解 ★ 自定义条件注解 好处有两个&#xff1a; 1. 真正掌握Spring boot条件注解的本质。 2. 项目遇到一些特殊的需求时&#xff0c;也可以开发自己的自定义条件注解来解决问题。自定义条件注解&#xff1a; ▲ 所有自定义注解其实都…

1.flink快速入门

前言 下图表示的是一个简单的flink-job的计算图&#xff0c;这种图被称为DAG(有向无环图)&#xff0c;表示的这个任务的计算逻辑&#xff0c;无论是spark、hive、还是flink都会把用户的计算逻辑转换为这样的DAG&#xff0c;数据的计算按照DAG触发&#xff0c;理论上只要构建出…