基于深度学习的语义分割之FCN、SegNet、UNet、LinkNet、PSPNet、DeepLab系列
图像分割(Image Segmentation)是计算机视觉研究中的一个经典难题,也是图像理解领域关注的一个热点,在场景理解、医学图像分析、机器人感知、视频监控、增强现实、图像压缩等领域有着广泛的应用。图像分割,简单来说就是在图像中把目标从背景中分离出来,分为语义分割(Semantic Segmentation)和实例分割(Instance Segmentation)。语义分割(应用于静态2D图像、视频,甚至3D数据、体数据)需要将视觉输入分为不同的语义可解释类别,语义的可解释性意为分类类别在真实世界中是有意义的,是像素级别的分类,主要应用领域有地理信息系统、无人驾驶、医疗影像分析、机器人等。实例分割现有的方法主要是,机器自动从图像中用目标检测方法框出不同实例,再用语义分割方法在不同实例区域内进行逐像素标记。
语义分割是在像素级别上的分类,属于同一类的像素都要被归为一类,因此语义分割是从像素级别来理解图像的。如下左图所示,属于人的像素都要分成一类,属于建筑物的像素也要分成一类,除此之外还有背景像素也被分为一类。如下右图所示,实例分割不同于语义分割,如果一张照片中有多个人,对于语义分割来说,只要将所由人的像素都归为一类,但是实例分割还要将不同人(实例)的像素归为不同的类,也就是说实例分割比语义分割更进一步。
如下所示,展示了自2014年以来流行的语义分割工作以及实例分割的时间表。图片出自2020年新出的一篇语义分割综述《Image Segmentation Using Deep Learning: A Survey》,图中橘色部分代表着语义分割的网络,绿色部分代表了实例分割的网络。本篇博客将逐步按照FCN →SegNet →U-Net →LinkNet →PSPNet →DeepLab系列的顺序,依次整理基于深度学习的语义分割网络。
基于深度的语义分割网络
- FCN(2014)
- SegNet(2015)
- U-Net(2015)
- PSPNet(2016)
- LinkNet(2017)
- DeepLab系列
- DeepLab v1(2015)
- DeepLab v2(2016)
- DeepLab v3(2017)
- DeepLab v3+(2018)
FCN(2014)
分类网络尽管表面上来看可以接受任意尺寸的图片作为输入,但是由于网络结构最后全连接层的存在,使其丢失了输入的空间信息,因此,这些网络并没有办法直接用于解决诸如分割等稠密估计的问题。考虑到这一点,《Fully Convolutional Networks for Semantic Segmentation》发表在CVPR 2015,并且作为当年best paper的候选论文,提出了全卷积网络(FCN)的概念,针对语义分割训练一个端到端、点对点的网络,用于像素级的预测。FCN创新点:(1)用卷积层和池化层替代了分类网络中的全连接层,从而使得网络结构可以适应像素级的稠密估计任务,而且能够实现端到端的训练;(2)利用反卷积(deconv)层进行上采样,能够输出精细的结果;(3) 结合不同深度层特征的跳跃(skip)结构,同时确保鲁棒性和精确性。
- 全卷积化(Fully Convolutional):分类所使用的网络通常会在最后连接全连接层,它会将原来二维的矩阵(图片)压缩成一维的,从而丢失了空间信息,最后训练输出一个标量。而图像语义分割的输出则需要是个分割图,且不论尺寸大小,但是至少是二维的,所以网络前半部分在VGG的基础上丢弃全连接层换上卷积层,就是所谓的全卷积化了。具体地,假如说原来最后一层卷积输出的是6×6×256的特征图,那么第一个全连接层会把这个矩阵给拉成一维向量9216,然后再用9216×(9216,4096)=1×1×4096大小的一维向量。而全卷积就是在得到6×6×256的特征图后,再用6×6×256的卷积核去卷积这幅特征图,如果输出通道是4096的话,得到就是1×1×4096的热图,如果输入尺寸发生变化,那么输出的尺寸就不是1×1×4096了。
-
反卷积(Deconvolution) :将输出映射到密集像素的一种方法是内插,例如简单的双线性插值,即通过线性映射来计算来自最近四个输入的每个输出,线性映射仅依赖于输入单元和输出单元的相对位置。但是利用反卷积操作,层中的滤波器不需要是固定的,可以被学习,并且堆叠反卷积层和激活函数甚至可以学习到非线性上采样。
-
跳跃结构(Skip Architecture):通过跨层连接的结构,结合了网络浅层的细(fine-grain)粒度信息信息以及深层的粗糙(coarse)信息,以实现精准的分割任务。具体结构如下,其中的FCN-s代表了全局的下采样步长:
过程如下:
1、32x upsampled
原图经过不断的卷积和池化,得到pool5层的特征(比原图缩小了32倍),将pool5通过32倍的上采样(反向卷积)得到最后结果。但是pool5层的特征属于高层抽象特征,采样后得到的结果不够精细。
2、16x upsampled
将pool5的结果进行2倍上采样,与pool4相加,作为“融合”,然后将“融合”结果进行16倍的上采样(反向卷积)得到最后结果(注:融合是指对应位置像素值相加,后来的UNet则直接是通道上拼接)。
3、8x upsampled
将pool5的结果进行2倍上采样,与pool4相加,作为“融合”,然后将“融合”结果进行2倍的上采样,再与pool3的结果进行“融合”,之后进行八倍的上采样。
参考链接:
[1] FCN——Semantic Segmentation的开山之作之论文解析
[2] https://zhuanlan.zhihu.com/p/38214117
SegNet(2015)
SegNet是一个由剑桥大学团队开发的图像分割的开源项目,《SegNet: A Deep Convolutional Encoder-Decoder Architecture for Robust Semantic Pixel-Wise Labelling》被收录于CVPR 2015,《SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation》被收录于PAMI 2017。SegNet和FCN思路十分相似,但是提出了一个encoder-decoder结构的卷积神经网络。
- 编码器:如上图所示,左边是卷积提取特征,通过pooling增大感受野,同时图片变小,该过程称为编码。每一个encoder执行密集卷积、非线性ReLU、不重叠的 2×2 最大池化,来进行下采样。
- 解码器:右边是卷积与upsampling,通过卷积使得图像分类后特征得以重现,upsampling还原到图像原始尺寸,该过程称为解码。每个decoder使用存储的Pooling Indices对其输入进行上采样,再送入卷积。
- Pooling Indices:即每次pooling,都会保存通过max选出的权值在2x2 filter中的相对位置。图中绿色的pooling与橘色的特征图通过pool indices操作,得到pooling后的indices输出到对应的upsampling,就是Pooling的逆过程。可以看出,SegNet上采样不需要训练学习(只是占用了一些存储空间),而FCN则是用transposed convolution策略,即将feature反卷积后得到upsampling,这一过程需要学习。
优势:
1)提升边缘刻画度;
2)减少训练的参数;
3)这种模式可包含到任何编码-解码网络中。
SegNet 的编码器结构与解码器结构是一一对应的,即一个 decoder 具有与其对应的 encoder 相同的空间尺寸和通道数。编码器在拓扑上与VGG16网络中的13个卷积层相同,网络最后一层是soft-max分类器,它独立地对每个像素进行分类,最后输出的是一个K个通道的图像,其中K是类别的数量。
U-Net(2015)
U-Net是基于FCN的一个语义分割网络,初衷是为了解决医学图像分割问题,《U-Net: Convolutional Networks for Biomedical Image Segmentation》发表于MICCAI 2015。在医学图像上需要对每个像素进行分类,有人提出用滑动窗口的方法,通过一个patch(该像素周围)的类别对该像素进行分类。但存在两点不足:1)由于需要逐patch地输入来进行预测,因此非常的慢,会因为重叠造成很多冗余;2)没有解决位置信息和上下文信息之间的trade-off问题,即大patch有上下文信息但是缺少位置信息(max-pooling所致),小patch有位置信息但是缺少上下文信息。创新点:(1)基于FCN的一个U型对称结构,左侧是contracting path(encoder),用于获取上下文信息(context),右侧是expanding path(decoder),用于精确的定位(localization);(2)skip-connections,使得最终所得到的feature map中既包含了high-level 的feature,也包含很多的low-level的feature,实现了不同scale下feature的融合;(3)使用弹性形变进行数据增强,使用少量的数据进行训练的情况下获得精确的分割结果;(4)采用了Overlap-tile strategy(边界镜像);(5)加权交叉熵损失函数(让模型有分离边界的能力)。
- 网络结构:上图为U-net网络结构图,每个蓝色框对应一个多通道特征图(feature map),其中通道数在框顶,尺寸位于框的左下角;白色框表示复制的特征图;箭头表示不同的操作。蓝色箭头代表3×3的卷积操作,由于stride是1,padding策略是valid,因此,每个该操作以后,feature map的大小会减2。灰色箭头表示复制和剪切操作,因为U-Net网络的每个卷积层得到的特征图都会concatenate到对应的上采样层(U-net采用了完全不同的特征融合方式:拼接,将特征在channel维度拼接在一起,而FCN融合时使用的对应点相加),而在同一层卷积的最后一层要比上采样的第一层要大一些,这就导致想要利用浅层的feature,就要进行一些剪切。在最后一层,利用1×1的卷积核进行卷积运算,将每个64维的特征向量映射网络的输出层,通道数为类别个数,输入是572×572的,但是输出变成了388×388,这说明经过网络以后,输出的结果和原图不是完全对应的。
- Overlap-tile:为了预测图像边界区域中的像素,可以通过输入图像的镜像操作来推断遗失的上下文。由于医学图像很大,所以要切成一张张小的patch,切成patch的时候适合切成Overlap-tile(重叠平铺)的切图。如下图所示,左图中的白框是要分割区域,但是在切图的时候要包含周围区域(周围overlap部分可以为分割区域边缘部分提供纹理信息),为了预测黄色区域中的分割,需要蓝色区域内的图像数据作为输入。从右图可以看出,黄框区域分割结果没有因为切成小patch而造成分割情况不好。
- 数据增强:为了对平移和旋转具有不变性,以及对变形和灰度值变化具有鲁棒性,通过对原始图像进行弹性形变以获得扩充图像,这可以让网络学习弹性形变不变性。
- 带边界权值的损失函数:如下图所示,a是输入数据,b是Ground Truth,c是基于Ground Truth生成的分割掩码,d是U-Net使用的用于分离边界的损失权值。
其中是损失函数, 是像素点的标签值,是像素点的权值,目的是为了给图像中贴近边界点的像素更高的权值。增大对粘连的同类物体之间的像素的loss权重,使得每个物体的分割轮廓是清晰的。
其中是平衡类别比例的权值, 是像素点到距离其最近的细胞的距离,则是像素点到距离其第二近的细胞的距离。 和是常数值,在实验中分别为10,5。
参考链接:
[1] 【语义分割系列:四】Unet 论文阅读翻译笔记 医学图像 pytorch实现
[2] https://zhuanlan.zhihu.com/p/43927696
PSPNet(2016)
作者发现当前基于FCN的模型的主要问题是,缺乏合适的策略来利用全局场景类别线索,从而在判断图像中像素点类别时预测失败。《Pyramid Scene Parsing Network》收录于CVPR 2017,提出了金字塔池化模块(pyramid pooling module)能够聚合不同区域的上下文信息,从而提高获取全局信息的能力。本文的baseline是 FCN 和 DeepLab v1。
复杂场景解析的几个常见问题:
语境关系不匹配:语境关系是普遍存在的,尤其在对复杂场景的理解中极为重要,有些物体常常是一起出现的,例如,飞机很可能在跑道上或在空中飞行,而不是在公路上;汽车不会在河上行驶。所以,缺乏收集语境信息的能力会增大错误分类的概率。
类别混淆:有许多类别标签在分类时容易出现混淆,比如田野和土地,山脉和丘陵,墙、房子和建筑物,它们的外观十分相似。利用类别之间的关系即可解决上述问题。
不明显的类别 :通常来说,场景中包含着任意大小的物体。一些小的东西,比如路灯和标志牌,尽管它们可能很重要,但很难被找到。相反,大的物体或东西可能会超过FCN的感受野,从而导致的预测不连续性。要提高对非常小或非常大的对象的识别能力,应该特别注意包含不明显类别物体的不同子区域。
- 金字塔池化模块:全局语境信息结合局部语境信息有助于区分出各种类别,越好的特征越能融合来自感受野大小不同的子区域的信息。如下图所示,金字塔池化模块融合了四种不同尺度下的特征。图中用红色突出显示的为最粗略的层级,是使用全局池化(实验结果表明平均池化效果更好)生成的单个bin输出。剩下的三个层级将输入特征图划分成若干个不同的子区域,并对每个子区域进行池化,最后将包含位置信息的池化后的单个bin组合起来(1×1、2×2、3×3和6×6的bin大小)。金字塔池化模块中不同层级输出不同尺度的特征图,为了保持全局特征的权重,我们在每个金字塔层级后使用1x1的卷积核,当某个层级维数为时,即可将语境特征的维数降到原始特征的。然后,通过双线性插值直接对低维特征图进行上采样,使其与原始特征图尺度相同。最后,将不同层级的特征图拼接为最终的金字塔池化全局特征。
对于图(a)中的输入图像,使用一个预训练过的ResNet模型来提取特征图,最终特征图尺寸为输入图像的,如图(b)所示。对上述特征图使用(c)中所示的金字塔池化模块来获取语境信息,其中,金字塔池化模块分4个层级,其池化核大小分别为图像的全部、一半和小部分,最终它们可融合为全局特征。然后,在(c)模块的最后部分,我们将融合得到的全局特征与原始特征图concat起来。最后,在(d)中通过一层卷积层生成最终的预测图。 - 基于深度监督的loss:除了使用Softmax loss来训练最终分类器的的主分支外,在第四阶段(即res4b22残差块)后再使用另一个分类器。这两个loss同时传播,通过各自前面所有层,辅助loss有助于优化学习过程,主loss仍是主要的优化方向。通过增加权重,以平衡辅助loss(实验表明辅助分支损失权重0.4性能最优)。在测试阶段,放弃辅助分支,只使用优化好的主分支来进行最终的预测。
参考链接:https://www.jianshu.com/p/57329a0b7a2d
LinkNet(2017)
目前的分割算法虽然精度较高,但参数与操作上的数量都是十分巨大的。《LinkNet: Exploiting Encoder Representations for Efficient Semantic Segmentation》,是VCIP 2017的论文,贡献是在不影响处理时间的条件下得到较高分割准确率。一般,编码层由于卷积池化丢失的位置信息通过池化层最大值的索引或者反卷积操作进行恢复。该文创新点是并未使用上述方法进行恢复,绕过空间信息,直接将编码器与解码器连接来提高准确率,一定程度上减少了处理时间。通过这种方式,保留编码部分中不同层丢失的信息,同时,在进行重新学习丢失的信息时并未增加额外的参数与操作。
文中模型结构近乎类似U-Net,是一个典型的Encoder-Decoder结构。左侧是Encoder模块,右侧是Decoder模块。LinkNet网络结构如图所示,其中conv表示卷积,full-conv表示转置卷积。/2表示因子为2的下采样,使用带步长的卷积来实现。*2表示因子为2的上采样。encoder开始处有一个initial block,其余部分由残差块组成,表示为encoder-block(i),decoder用了通道约减方案(channel reduction scheme),其细节如下所示。现在的分割算法大多使用VGG16、ResNet101等作为encoder,参数量太大了。LinkNet使用ResNet18作为encoder。
参考链接:http://jialexu.com/index.php/archives/172/
DeepLab系列
DeepLab v1(2015)
Deep Convolutional Neural Networks (DCNNs) 能够很好的处理图像级别的分类问题,因为它具有很好的平移不变性(空间细节信息已高度抽象),但是DCNNs很难处理像素级别的分类问题,例如姿态估计和语义分割,它们需要准确的位置信息。目前的两个大问题就是(1)重复池化和下采样导致分辨率大幅下降,位置信息丢失难以恢复;(2)空间不变性导致细节信息丢失。《Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs》收录于ICLR 2015,创新点在于:对于降采样问题,我们使用‘atrous’新型卷积来实现(就是后来的空洞卷积);不变性问题,加入CRF来对图像进行优化。
- 空洞卷积:为了加载预先在ImageNet训练好的VGG16模型,并保证图片仅缩放8倍,首先将VGG16的全连接层改为卷积层,再使用采样率rate=2或4的空洞卷积方法对特征图采样,这种方法不仅可以保持完好的滤波器还能扩大感受野,并且不增加计算量和参数。如下图所示,在一维向量上,卷积核的大小仍然是3×3,Input stride=2就是空洞因子或膨胀因子,在同样的卷积核大小下,通过增加Input stride可以增大卷积核的感受野。
- 网络结构:下图是原始的VGG16的网络结构,论文对预训练模型进行了修改,(1)为了保证分辨率,把最后两个池化层(pool4、pool5)的步长2改成1;(2)把最后三个卷积层(conv5_1、conv5_2、conv5_3)的dilate rate设置为2,且第一个全连接层的dilate rate设置为4(保持感受野);(3)根据分类数,把最后一个全连接层fc8的通道数从1000改为21;(4)把全连接层(fc6、fc7、fc8)改成卷积层。在加速实验中,作者将第一个全连接层fc6,通道数从4096变为1024,卷积核大小从7x7变为3x3,后续实验中发现此处的dilate rate为12时(LargeFOV),效果最好。
- CRF精准定位:在进行测试时,需要将class socre maps还原为原始图像的分辨率。由于class score maps十分平滑,可以通过简单的双线性插值近似的将其提高8倍分辨率,但细节上仍存在较大差距。卷积网络中,分类与定位之间有一个平衡,具有多层池化的更深层的网络在分类任务上取得的效果更好,然而, 增加的不变性和较大的感受野使从最后的层预测出位置会有很大的挑战。常用的方法包括(1)通过利用卷积网络中多层信息,来更好的估计分割边界;(2)采用超像素表示,将定位任务分给低级的分割方法。该文中首先利用DCNN的识别能力,后接全连接的CRF来提高位置的准确性。
CRF的能量函数做为优化目标:其中,这一项保证了分类的准确率,准确率越高P(x)越接近1,此项值越小。,其中当,的值为1,即只考虑标签不相同的两个像素点,右边的核函数主要由两个像素点的位置和颜色决定,位置为主、颜色为辅。
DeepLab v2(2016)
《DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs》收录于TPAMI 2017,与deeplab v1相比主要提出了语义分割的另一个挑战,即图像中存在多尺度的物体。因此,论文的创新点主要是(1)在tensorflow中以模块化方式,实现了‘atrous convolution’;(2)利用不同膨胀因子的空洞卷积融合多尺度信息,实现了ASPP(Atrous Spatial Pyramid Pooling);(3)利用CRF优化 ,推出Dense CRF。
ASPP:通过不同的atrous convolution对图像进行不同程度的缩放,得到不同大小的feature maps,再把子窗口的特征进行池化就生成了固定长度的表示。
LargeFOV是指采用膨胀速率r=12的膨胀卷积策略,作者在VGG16的fc6采用该膨胀卷积,并将fc7和fc8改为1x1的全卷积,命名为DeepLab-LargeFOV。作为对比,同时在VGG16的fc6-fc8层用四路采用不同膨胀速率的膨胀卷积作用于各自的fc6,在fc7和fc8同样采用全卷积策略,命名为DeepLab-ASPP,根据膨胀卷积r的不同组合,r={2,4,8,12}的称为DeepLab-ASPP-S,r={6,12,18,24}的称为DeepLab-ASPP-L,如下图分别为VGG16上的DeepLab-LargeFOV和DeepLab-ASPP示意图。除此之外,deeplabv2还将backbone由VGG-16修改为ResNet-101。
DeepLab v3(2017)
同样的作者,又在CVPR 2017提出了《Rethinking Atrous Convolution for Semantic Image Segmentation》,主要的创新点在于:(1)设计了串行和并行的带孔卷积模块,串行结构使用了Multi-Grid策略,并行结构采用空间金字塔池化获取多尺度的内容信息;(2)提出的ASPP网络模块包含了加入了batch normalization layers,对于网络训练很重要。
目前提出的几种获取尽可能多的目标的总体特征和细节特征,即不同尺度下的特征的方法如下:(1)应用于图像金字塔从而在每个输入的尺度下提取特征;(2)编码器解码器结构,在编码器部分就利用起多尺度的特征,解码器部分恢复图像同时保证空间分辨率;(3)用额外添加的模块级联在原来的网络上,从而捕获长跨度的信息;(4)空间金字塔池化。
- 以串行方式设计atrous convolution模块:把resnet的block4拷贝几份串联起来,如下图所示(a)在没有使用带孔卷积的情况下它的输出步长是256,(b)采用串行的ResNet,级联block为block5、block6、block7,均为block4的复制。这些blocks中有三个3×3的卷积,除去最后一个block之外,所有的卷积最后一步步长为2。多网格设计,对 block4~block7采用不同的atrous rates,rates = (2,4,8)。
- 带孔空间金字塔池化:四个并行的步长不同的带孔卷积被应用在特征映射之上,具有不同atrous rates的ASPP能够有效的捕获多尺度信息。但是随着sampling rate的增加,有效filter特征权重(即有效特征区域,而不是补零区域的权重)的数量会变小,即当采用具有不同atrous rates的3×3 filter应用到65×65的feature map时,在rate值接近于feature map大小的极端情况,该3×3 filter不能捕获整个图像内容,而退化成了一个简单的1×1 filter, 因为只有中心filter权重才是有效的。利用全局平均池化处理模型的特征映射,将得到的图像级特征输入到一个有256个filter的 1×1 卷积(加入BN),然后将特征进行双线性上采样(bilinearly upsample)到特定的空间维度。当output_stride=16时,包括一个1×1 convolution和3×3 convolutions,其中3×3 convolutions的rates=(6,12,18),(所有的filter个数为256,并加入batch normalization)。
两种方法的结构合并并不会带来提升,相比较来说,ASPP的纵式结构要好一点,所以deeplab v3一般也是指ASPP的结构。
DeepLab v3+(2018)
果然,他们还没有满足,又继续改进提出了《Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation》,在ECCV 2018。创新点在于:(1)引入Encoder-Decoder模型,将空间金字塔池化结构的多尺度特征捕捉能力和编码器-解码器结构处理边界细节的能力相结合;(2)将Xception中的深度可分离卷积应用到空洞空间金字塔池化(ASPP)和解码模块中作为backbone,进一步提升速度和精度。
- 网络结构:基于DeepLab v3,将原结构作为编码器,另外加入一个解码器。论文使用DeepLab v3中logits前最后一层的feature map作为encoder的输出。通常得到的out_stride为16,基于双线性插值上采样16倍作为decoder层比较常用,但边界信息仍不准确。因此,作者提出:(1)首先通过双线性插值恢复4倍大小的分辨率;(2)然后与对应的低层次的feature map进行拼接,低层次的feature maps首先用1x1的卷积处理降低通道数;(3)后接一个大小为3×3的卷积来增强feature maps;(4)最后通过一个插值来进一步恢复4倍分辨率至原图大小。
- 对Xception模型的改进:(1)加深了Xception;(2)用深度可分卷积替换所有max pooling 减少了计算量,进而可以使用空洞卷积来提取feature(另一种方式是直接在max pooling 中应用空洞卷积);(3)在每个3×3的深度可分卷积后接BN层和ReLU。
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- -webkit-line-clamp 多行文字溢出...
CSS代码: .box {width: 100px; display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;overflow: hidden; }HTML代码: <div class="box">多行文字溢出 多行文字溢出 多行文字溢出 多行文字溢出 多行文字溢出 多行文字溢出 多行文字溢出 …...
2024/4/11 19:01:04 - 01. XML配置Spring
一、工程目录二、步骤先创建一个Maven工程。 创建好后,在pom.xml中添加 <packaging>war</packaging>,表示最终要将整个工程打包成war包。 将整个WEB-INF放到webapp目录下。 在pom.xml中添加依赖。<!--spring容器是用来扫描除了controller之外的东西,spring容…...
2024/4/11 19:01:02 - Java的时间类
时间概念 在java语言中,时间的本质是整数,现有的系统基本都是利用从1970.1.1 00:00:00 到当前时间的毫秒数进行计时,这个时间称为epoch。 但是光看一个整数,我们无法清晰快速的获得一个日期,所以我们需要引入日期类. 三个时间表示类 在jdk1.1之后将java有关的时间操作分成了三…...
2024/4/23 14:06:13 - linux中进程的状态:
1.使用命令 top -c 来查看进程状态: [redhat@localhost ~]$ top -c R工作中的进程S可中断的睡眠状态I空闲状态(idle)O进程正在处理器运行B进程正在等待更多的内存页D不可中断的睡眠状态T暂停状态或跟踪状态X出状态,进程即将被销毁Z僵尸进程1、TASK_RUNNING:(R) 进程当前…...
2024/4/26 9:12:24 - 复现CVE-2017-17215,解决连接问题
对于该漏洞在FreeBuf上有分析文章,笔者按照该文章进行学习复现,但是一直卡在网络问题,后来发现其实是个配置网络的小问题。这里记录一下。 启动qemu运行刚镜像: sudo qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda debian_squeeze_mips_standard.qcow…...
2024/4/25 1:38:50 - NPM常见使用报错及解决办法
creat-react-app xxx报错 原因:没有权限 解决办法:win+x,选择命令提示符(管理员),在里面运行命令即可Error: EPERM: operation not permitted, mkdir C:\Program Files\Git\my-reduxat Object.mkdirSync (fs.js:940:3)at Object.mkdirsSync (路径)at Object.<anonymou…...
2024/4/26 2:08:54 - Git(Linux环境):差异比较
目录比较工作区和暂存区差异比较暂存区和版本库差异比较工作区和版本库差异比较两个版本之间差异比较工作区和暂存区差异git diff查看尚未暂存文件有哪些新的修改比较暂存区和版本库差异git diff --cached [HEAD] git diff --staged SHA查看已暂存文件和上次提交的快照之间的差…...
2024/4/11 15:31:28 - 链接:https://pan.baidu.com/s/1joRvLQ7nbti0Wp4t2CkX5w 提取码:ZMTD
链接:https://pan.baidu.com/s/1joRvLQ7nbti0Wp4t2CkX5w 提取码:ZMTD...
2024/4/11 15:31:27 - HTML5应知应会
HTML5 什么是HTML5?HTML5 的概念与定义定义:HTML5 定义了 HTML 标准的最新版本,是对 HTML 的第五次重大修改,号称下一代的 HTML 两个概念:是一个新版本的 HTML 语言,定义了新的标签、特性和属性 拥有一个强大的技术集,这些技术集是指: HTML5 、CSS3 、javascript, 这也…...
2024/4/25 15:11:32 - 2020-09-04(Java)
Java 一、标识符的使用 1.标识符:凡是自己可以起名字的地方都叫标识符 比如:类名、变量名、方法名、接口名、包名...2.标识符的命名规则:由26个英文字母大小写,0-9,_或$组成 数字不可以开头 不可以使用关键字和保留字,但能包含关键字和保留字 Java中严格区分大小写,长度…...
2024/4/25 0:11:27 - 备忘录模式(Memento Pattern)- PHP示例
备忘录模式(Memento Pattern) 备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。主要解决:所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内…...
2024/4/26 6:56:47 - nginx url 自动加斜杠 301重定向问题
node2:/etc/nginx#^C node2:/etc/nginx#ps -ef | grep nginx root 4787 1 0 17:18 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /etc/nginx/nginx_http.conf nginx url 自动加斜杠 301重定向问题:node2:/etc/nginx#cat /etc/nginx/ngi…...
2024/4/11 15:31:23 - centos7配置docker阿里云镜像加速
登陆阿里云账号,没有的可以注册一个;一开始我使用的是华为云的服务器,我以为是只能用华为云的镜像加速服务,但是后面没有在华为云里面找到相应的模块,所以试了一下阿里云的发现同样可以使用。 阿里云官网 登陆后进入控制台;选择容器镜像服务; 点击镜像加速,选择centos;…...
2024/4/24 21:35:33 - 内存和磁盘的关系解读
内存和磁盘的关系解读 不读入内存就无法运行在考虑内存和磁盘之间的关系之前,我们首先来看一个前提性的东西。程序保存在存储设备中,通过有序的被读出来实现运行,这一点搭建都很清楚。在一机制被称为存储程序方式(程序内置方式),现在看来是理所当然的,但在当时他的提出可…...
2024/4/11 15:31:21 - ros学习第四章作业
第一题 1、终端输入roslaunch learning_launch homework1_1.launch<launch><node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node"/><node pkg="learning_communication" type="homework1" na…...
2024/4/26 7:14:02 - 报错 415 或 Content type ‘multipart/form-data;boundary=--------------------------9107
同时接受 实体类,文件。。。。把@Requestbody删了就进来了。...
2024/4/22 20:48:40 - pandas作业
练习1读取 catNames2.csv 文件,完成需求如下: 找到所有的使用次数超过800的猫的名字 获取用次数最高的名字找到所有的使用次数超过800的猫的名字 import pandas as pd import numpy as np cat_name = pd.read_csv("catNames2.csv") name_over_800 = cat_name[cat_n…...
2024/4/19 8:13:51 - 贪心科技NLP高端训练营第七期 VX_itpenguin
百度网盘分享 您将获得 1.掌握处理非结构化文本数据,完成知识抽取、NLU、多轮对话决策、逻辑推理等NLP核心技术 2.深入理解分词、语义分析、语义表示、文本匹配、文本分类、主题识别等NLP主流领域 3.掌握词向量如word2vec等以及NLP相关的深度学习(RNN、LSTM、Bert等)相关知识 …...
2024/4/11 19:00:58 - Java线上定时任务不定期挂掉问题分析
问题背景收到频繁的告警邮件,定时任务调度失败,查看xxl-job的执行器列表是空的,但是服务又显示健康,查看历史任务执行记录发现执行器是依次递减,由于是线上服务,只能先重启,然后线程日志也没有,同时尝试访问服务的健康检查接口,发现健康检查接口访问不通,应该是服务已…...
2024/4/11 19:00:57 - python三大器:装饰器,迭代器,生成器
此文与其他文章不同,仅为个人学习笔记使用,编写过程中难免有错误,望各位读者提出,共同进步。装饰器,迭代器,生成器是python开发过程中重要的工具,装饰器相较于其他两个来说较难以理解。 1.装饰器 通俗的来说是用来为其他区函数增加其他功能的,同时遵循一个基本原则:开…...
2024/4/26 3:59:06
最新文章
- java:SpringBoot入门
Spring 提供若干子项目,每个项目用于完成特定功能 Spring Boot 可以简化配置并且快速开发 SpringBootWeb快速入门 创建Springboot模块并使用Springweb依赖 在类上添加注解 RestController可以将字符串自动转成json返回数据给页面 再在方法上添加注解 RequestMapping(&…...
2024/4/26 13:46:59 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 鹅厂实习offer
#转眼已经银四了,你收到offer了吗# 本来都打算四月再投实习了,突然三月初被wxg捞了(一年前找日常实习投的简历就更新了下),直接冲了,流程持续二十多天,结果是运气还不错,应该是部门比…...
2024/4/23 6:25:31 - vue中内置指令v-model的作用和常见使用方法介绍以及在自定义组件上支持
文章目录 一、v-model是什么二、什么是语法糖三、v-model常见的用法1、对于输入框(input):2、对于复选框(checkbox):3、对于选择框(select):4、对于组件(comp…...
2024/4/25 21:37:22 - 416. 分割等和子集问题(动态规划)
题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义:dp[i][j]表示当背包容量为j,用前i个物品是否正好可以将背包填满ÿ…...
2024/4/26 1:36:40 - 【Java】ExcelWriter自适应宽度工具类(支持中文)
工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...
2024/4/25 21:14:51 - Spring cloud负载均衡@LoadBalanced LoadBalancerClient
LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon,直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件,我们讨论Spring负载均衡以Spring Cloud2020之后版本为主,学习Spring Cloud LoadBalance,暂不讨论Ribbon…...
2024/4/26 8:22:40 - TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案
一、背景需求分析 在工业产业园、化工园或生产制造园区中,周界防范意义重大,对园区的安全起到重要的作用。常规的安防方式是采用人员巡查,人力投入成本大而且效率低。周界一旦被破坏或入侵,会影响园区人员和资产安全,…...
2024/4/26 11:10:01 - VB.net WebBrowser网页元素抓取分析方法
在用WebBrowser编程实现网页操作自动化时,常要分析网页Html,例如网页在加载数据时,常会显示“系统处理中,请稍候..”,我们需要在数据加载完成后才能继续下一步操作,如何抓取这个信息的网页html元素变化&…...
2024/4/25 16:50:01 - 【Objective-C】Objective-C汇总
方法定义 参考:https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...
2024/4/25 13:02:58 - 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】
👨💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】🌏题目描述🌏输入格…...
2024/4/26 0:25:04 - 【ES6.0】- 扩展运算符(...)
【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数࿰…...
2024/4/26 6:06:14 - 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?
文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕,各大品牌纷纷晒出优异的成绩单,摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称,在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁,多个平台数据都表现出极度异常…...
2024/4/25 17:43:17 - Go语言常用命令详解(二)
文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令,这些命令可以帮助您在Go开发中进行编译、测试、运行和…...
2024/4/25 17:43:00 - 用欧拉路径判断图同构推出reverse合法性:1116T4
http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b,我们在 a i a_i ai 和 a i 1 a_{i1} ai1 之间连边, b b b 同理,则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然࿰…...
2024/4/25 13:00:31 - 【NGINX--1】基础知识
1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息,并安装一些有助于配置官方 NGINX 软件包仓库的软件包: apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...
2024/4/25 17:42:40 - Hive默认分割符、存储格式与数据压缩
目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限(ROW FORMAT)配置标准HQL为: ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...
2024/4/26 9:43:47 - 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法
文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中,传感器和控制器产生大量周…...
2024/4/26 9:43:47 - --max-old-space-size=8192报错
vue项目运行时,如果经常运行慢,崩溃停止服务,报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中,通过JavaScript使用内存时只能使用部分内存(64位系统&…...
2024/4/25 13:40:45 - 基于深度学习的恶意软件检测
恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞,例如可以被劫持的合法软件(例如浏览器或 Web 应用程序插件)中的错误。 恶意软件渗透可能会造成灾难性的后果,包括数据被盗、勒索或网…...
2024/4/25 13:01:30 - JS原型对象prototype
让我简单的为大家介绍一下原型对象prototype吧! 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象,所以我们也称为原型对象…...
2024/4/25 15:31:26 - C++中只能有一个实例的单例类
C中只能有一个实例的单例类 前面讨论的 President 类很不错,但存在一个缺陷:无法禁止通过实例化多个对象来创建多名总统: President One, Two, Three; 由于复制构造函数是私有的,其中每个对象都是不可复制的,但您的目…...
2024/4/25 17:31:15 - python django 小程序图书借阅源码
开发工具: PyCharm,mysql5.7,微信开发者工具 技术说明: python django html 小程序 功能介绍: 用户端: 登录注册(含授权登录) 首页显示搜索图书,轮播图࿰…...
2024/4/25 13:22:53 - 电子学会C/C++编程等级考试2022年03月(一级)真题解析
C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...
2024/4/26 9:43:45 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57