论文阅读 FCOS: Fully Convolutional One-Stage Object Detection

news2024/11/30 10:45:56

文章目录

    • FCOS: Fully Convolutional One-Stage Object Detection
      • Abstract
      • 1. Introduction
      • 2. Related Work
      • 3. Our Approach
        • 3.1. Fully Convolutional One-Stage Object Detector
        • 3.2. Multi-level Prediction with FPN for FCOS
        • 3.3. Center-ness for FCOS
      • 4. Experiments
        • 4.1. Ablation Study && 4.2. Comparison with State-of-the-art Detectors
      • 5. Extensions on Region Proposal Networks
      • 6. Conclusion

FCOS: Fully Convolutional One-Stage Object Detection

Abstract

我们提出了一种全卷积单阶段目标检测器(FCOS),以per-pixel 预测的方式解决目标检测问题,类似于语义分割。几乎所有最先进的目标检测器,如RetinaNet、SSD、YOLOv3和Faster R-CNN,都依赖于预定义的锚框(anchor boxes)。相比之下,我们提出的FCOS检测器是无锚框的,也无需提出建议区域(proposals)。通过消除预定义的锚框集,FCOS完全避免了与锚框相关的复杂计算,比如训练过程中的overlapping计算。更重要的是,我们还避免了所有与锚框相关的超参数,这些超参数通常对最终的检测性能非常敏感。只需要后处理的非极大值抑制(NMS),在使用ResNeXt-64x4d-101进行 single-model 和 single-scale 测试时,FCOS取得了44.7%的平均精度(AP),超越了之前的单阶段检测器,并具有更简单的优势。我们希望所提出的FCOS框架可以作为许多其他实例级任务的简单而强大的替代方案。

1. Introduction

目标检测是计算机视觉中一项基础且具有挑战性的任务,它要求算法为图像中 instance of interest 预测一个带有类别标签的边界框。所有当前主流的检测器,如Faster R-CNN、SSD和YOLOv2、v3 ,都依赖于一组预定义的锚框,长期以来人们一直认为锚框的使用是检测器成功的关键。尽管它们取得了巨大的成功,但值得注意的是,基于锚框的检测器存在一些缺点:1)检测性能对于锚框的大小、长宽比和数量非常敏感。例如,在RetinaNet 中,改变这些超参数会在COCO基准测试集上将性能影响多达4%的平均精度(AP)。因此,这些超参数需要在基于锚框的检测器中进行精心调整。2)即使经过精心设计,由于锚框的尺度和长宽比被固定,检测器在处理具有大尺寸变化的物体候选时也会遇到困难,尤其是对于小物体而言。预定义的锚框还削弱了检测器的泛化能力,因为在需要在具有不同物体尺寸或长宽比的新检测任务上重新设计这些锚框。3)为了实现高召回率,基于锚框的检测器需要在输入图像上密集地放置锚框(例如,在图像的较短一侧为800的情况下,特征金字塔网络(FPN)中需要超过180,000个锚框)。在训练过程中,这些锚框中的大部分都被标记为负样本。过多的负样本数量加剧了训练中正负样本之间的不平衡。4)锚框还涉及复杂的计算,例如计算与ground-truth 边界框之间的交并比(IoU)分数。

最近,全卷积网络(FCN)在dense prediction 任务中取得了巨大的成功,如语义分割、深度估计、关键点检测和计数。作为高级视觉任务之一,目标检测可能是唯一一个不太适用于全卷积像素级预测框架的任务,主要是由于使用了锚框。一个自然的问题是:我们能否以像素级预测方式解决目标检测问题,类似于用于语义分割的FCN呢?这样,这些基本的视觉任务就可以在(几乎)一个单一的框架中统一起来。我们展示了答案是肯定的。此外,我们首次证明,更简单的基于FCN的检测器甚至比基于锚框的同类检测器表现更好。

在文献中,一些工作尝试利用基于FCN的框架进行目标检测,例如DenseBox 。具体而言,这些基于FCN的框架在特征图的每个空间位置上直接预测一个4D向量和一个类别标签。如图1(左)所示,4D向量描述了边界框四个边与该位置之间的相对偏移。这些框架类似于用于语义分割的FCN,不同之处在于每个位置需要回归一个4D连续向量。然而,为了处理具有不同大小的边界框,DenseBox会将训练图像裁剪并调整为固定比例。因此,DenseBox必须在图像金字塔上执行检测,这与FCN只执行一次所有卷积的理念相悖。此外,更重要的是,这些方法主要用于特殊领域的目标检测,如场景文本检测或人脸检测,因为人们认为这些方法在应用于具有高度重叠边界框的通用目标检测时效果不佳。如图1(右)所示,高度重叠的边界框导致了难以解决的歧义问题:在重叠区域的像素上,不清楚应该回归到哪个边界框。
在这里插入图片描述
在接下来的内容中,我们将更详细地探讨这个问题,并展示通过使用特征金字塔网络(FPN),这种ambiguity 可以在很大程度上被消除。因此,我们的方法已经可以获得与传统基于锚框的检测器相当的检测准确性。此外,我们观察到我们的方法可能会在远离目标对象中心的位置产生许多低质量的预测边界框。为了抑制这些低质量的检测结果,我们引入了一个新的“center-ness”分支(仅有一层)来预测像素到其对应边界框中心的偏移,如公式(3)中所定义。然后,该分数用于降低低质量的检测边界框权重,并在非极大值抑制(NMS)中合并检测结果。这个简单但有效的center-ness 分支使得基于FCN的检测器在完全相同的训练和测试设置下优于基于锚框的同类检测器。

这种新的检测框架具有以下优势:

  • 现在,Detection 与许多其他FCN可解决的任务(如语义分割)统一在一起,使得可以更轻松地从这些任务中重新利用思想。

  • Detection 变得无需提出建议区域和锚框,从而大大减少了设计参数的数量。design parameters 通常需要启发式调整,并且需要许多技巧才能实现良好的性能。因此,我们的新检测框架使得检测器,尤其是其训练过程,变得更加简单。

  • 通过消除锚框,我们的新检测器完全避免了与锚框相关的复杂计算,如训练过程中的IOU计算和锚框与ground-truth 边界框之间的匹配,从而导致训练和测试速度更快,训练内存占用也比基于锚框的检测器更少。

  • 在不添加复杂的元素的情况下,我们在单阶段检测器中实现了最先进的结果。我们还展示了所提出的FCOS可以用作两阶段检测器中的Region Proposal Networks(RPNs),并且可以显著优于基于锚框的RPN同类检测器。

  • 所提出的检测器可以立即进行 minimal modification 以解决其他视觉任务,包括实例分割和关键点检测。我们相信,这种新方法可以成为许多实例级预测问题的新基准。

2. Related Work

略过

3. Our Approach

在本节中,我们首先以per-pixel 预测的方式重新阐述目标检测。接下来,我们展示了如何利用multi-level prediction 来提高召回率,并解决由于重叠边界框而产生的ambiguity 问题。最后,我们介绍了我们提出的“centerness”分支,该分支有助于抑制低质量的检测边界框,并显著提高整体性能。

3.1. Fully Convolutional One-Stage Object Detector

对于一个主干CNN的第i层,其特征图为Fi ∈ RH×W×C,s表示从初始层到第i层的总步长。输入图像的ground-truth 边界框定义为{Bi},其中Bi = (x(i)0, y(i)0, x(i)1,y(i)1, c(i)) ∈R4 × {1, 2 … C}。这里的(x(i)0, y(i)0) 和 ( x(i)1,y(i)1) 分别表示边界框左上角和右下角的坐标,c(i) 是边界框内物体所属的类别。C是类别数量,对于MS-COCO数据集,C为80。

对于特征图Fi上的每个位置(x, y),我们可以将其映射回输入图像,即
在这里插入图片描述
它位于位置(x, y)的感受野中心附近。与基于锚框的检测器不同,后者将输入图像上的location视为(多个)锚框的中心,并借助这些锚框作为参考来回归目标边界框,我们直接在该位置回归目标边界框。换句话说,我们的检测器将位置直接视为训练样本,而不是锚框,这与用于语义分割的FCN相同。

具体而言,如果位置(x, y)位于任何ground-truth边界框内,我们将其视为正样本,并且该位置的类别标签c为ground-truth 边界框的类别标签。否则,它是负样本,且c = 0(表示背景类)。除了分类标签外,我们还有一个4D实值向量 t = (l, t, r, b),作为该位置的 regression targets 。这里的 l, t, r, b 分别表示位置到边界框四个边的距离,如图1(左)所示。如果一个location 位于多个边界框内,我们将其视为ambiguous sample。我们简单地选择面积最小的边界框作为其回归目标。在接下来的部分中,我们将展示通过多级预测,ambiguous sample的数量可以显著减少,从而几乎不会影响检测性能。正式地说,如果位置(x, y)与边界框Bi相关联,该位置的训练回归目标可以表示为:
在这里插入图片描述
值得注意的是,FCOS可以利用尽可能多的前景样本来训练回归器。这与基于锚框的检测器不同,后者只考虑与 ground-truth 边界框具有足够高IOU的锚框作为正样本。我们认为这可能是FCOS优于基于锚框的同类检测器的原因之一。

Network Outputs 对应于训练目标,我们网络的最终层预测一个80维的分类标签向量p和一个4维的边界框坐标向量t = (l, t, r, b)。我们不是训练一个multi-class 分类器,而是训练了C个二元分类器。在主干网络的特征图之后,我们分别为分类和回归分支添加了四个卷积层。此外,由于回归目标始终是正数,我们在回归分支顶部使用exp(x)将任意实数映射到(0,∞)区间内。值得注意的是,FCOS的网络输出变量比流行的基于锚点的检测器少了9倍。

Loss Function 我们定义训练损失函数如下:

在这里插入图片描述
其中,Lcls是的(Focal Loss),而Lreg是类似于UnitBox 中的IOU损失(Intersection over Union)。Npos表示正样本的数量,而本文中λ的值为1,是用于平衡Lreg的权重。求和是在所有特征图Fi的位置上计算的。1{ci > 0}是一个指示函数,如果ci > 0,则为1,否则为0。

Inference FCOS的推断过程很简单。给定输入图像,我们通过网络进行前向传播,对于特征图Fi上的每个位置,得到分类分数 px,y和回归预测 tx,y。我们选择具有px,y > 0.05的位置作为正样本,并通过方程(1)来获取预测的边界框。

3.2. Multi-level Prediction with FPN for FCOS

这里我们展示了如何通过使用多级FPN 的多级预测来解决所提出的FCOS的两个可能问题。1) 在卷积神经网络中,最终特征图的大stride(例如,16倍)可能会导致相对较低的最佳可能召回率(BPR)。对于基于锚点的检测器,由于大步长而导致的低召回率可以在一定程度上通过降低正锚点框所需的IOU分数来补偿。对于FCOS,乍一看可能会认为BPR可能远低于基于锚点的检测器,因为由于大步长,最终特征图上的某些位置根本无法编码对象,从而无法召回对象。在这里,我们经验证明,即使具有大步长,基于FCN的FCOS仍然能够产生很好的BPR,甚至可以比锚点基准检测器RetinaNet 在官方实现Detectron中表现得更好(参见表格1)。因此,BPR实际上不是FCOS的问题。此外,通过多级FPN预测,BPR可以进一步提高,以达到基于锚点的RetinaNet可以实现的最佳BPR。2) ground-truth 框之间的重叠可能导致难以处理的歧义,即重叠位置应该回归到哪个边界框?这种歧义会导致基于FCN的检测器性能下降。在这项工作中,我们展示了通过多级预测可以很大程度上解决这种歧义,基于FCN的检测器可以获得与基于锚点的检测器相当甚至更好的性能。

我们在不同级别的特征图上检测不同尺寸的物体。具体来说,我们使用了五个级别的特征图,分别定义为{P3,P4,P5,P6,P7}。P3、P4和P5是由主干CNN的特征图C3、C4和C5产生的,后面跟着一个带有自顶向下连接的1×1卷积层,如图2所示。P6和P7分别通过在P5和P6上应用步长为2的卷积层来生成。因此,特征级别P3、P4、P5、P6和P7的步长分别为8、16、32、64和128。
在这里插入图片描述

与基于锚点的检测器不同,其将不同尺寸的锚框分配给不同的特征级别,我们直接限制了每个级别的边界框回归范围。具体来说,我们首先为所有特征级别上的每个位置计算回归目标l、t、r和b。然后,如果一个位置满足max(l, t, r, b) > mi 或max(l, t, r, b) < mi−1,它将被设置为负样本,因此不需要再回归边界框。这里mi是特征级别i需要回归的最大距离。在这项工作中,m2、m3、m4、m5、m6和 m7分别设置为0、64、128、256、512和∞。

由于不同尺寸的物体被分配到不同的特征级别,大多数重叠发生在具有相当不同尺寸的物体之间。如果一个位置,即使使用了多级预测,仍然分配给多个ground-truth框,我们只需选择面积最小的ground-truth框作为其目标。正如我们的实验证明的那样,多级预测可以在很大程度上减轻上述的歧义问题,并将基于FCN的检测器提升到与基于锚点的检测器相同的水平。

最后,我们在不同的特征级别之间共享检测头部,这不仅使得检测器参数更高效,还提高了检测性能。然而,我们观察到不同的特征级别需要回归不同尺寸范围的目标(例如,P3的尺寸范围为,而P4的尺寸范围为),因此在不同的特征级别上使用相同的检测头部是不合理的。因此,我们不再使用标准的exp(x),而是使用带有可训练标量si的exp(six),以自动调整指数函数的基数,适用于特征级别Pi,这略微改善了检测性能。

3.3. Center-ness for FCOS

在使用多级预测之后,FCOS与基于锚点的检测器之间仍然存在性能差距。我们观察到,这是由于许多预测的边界框质量较低,这些边界框是由远离物体中心的位置产生的。

在这里插入图片描述

为了在不引入任何超参数的情况下抑制这些低质量的检测边界框,我们提出了一个简单而有效的策略。具体来说,我们在与分类分支并行的情况下添加了一个单层分支(如图2所示),用于预测位置的“center-ness”。中心性描述了location 到该位置负责的物体中心的标准化距离,如图3所示。给定位置的回归目标l、t、r和b,中心性目标定义如下:
在这里插入图片描述

我们在这里使用 sqrt 来减缓centerness的衰减。中心性的取值范围从0到1,因此使用二元交叉熵(BCE)损失进行训练。损失添加到损失函数Eq.(2)中。在测试时,最终的得分(用于对检测到的边界框进行排名)是通过将预测的中心性与相应的分类分数相乘来计算的。因此,中心性可以降低远离物体中心的边界框的分数权重。结果是,通过最终的非最大抑制(NMS)过程,很有可能这些低质量的边界框会被滤除,从而显著提高检测性能。

中心性的另一种替代方法是仅使用 ground-truth 边界框的中心部分作为正样本,但代价是引入一个额外的超参数。在我们提交后,已经证明了这两种方法的组合可以实现更好的性能。实验结果可以在表格3中找到。

4. Experiments

我们的实验是在大规模检测基准数据集COCO上进行的。我们使用COCO的trainval35k划分(115K张图像)进行训练,使用minival划分(5K张图像)作为验证集进行我们的消融研究。我们将主要结果报告在测试开发集(20K张图像)上,通过将我们的检测结果上传到评估服务器进行评估。

Training Details:除非特别说明,我们使用ResNet-50 作为我们的主干网络,并使用与RetinaNet 相同的超参数。具体而言,我们的网络使用随机梯度下降(SGD)进行训练,进行90K次迭代,初始学习率为0.01,每批处理16张图像。学习率在第60K和80K次迭代时分别降低10倍。权重衰减和动量分别设置为0.0001和0.9。我们的主干网络使用在ImageNet 上预训练的权重进行初始化。除非特别说明,输入图像被调整大小,使其较短的一边为800,较长的一边小于或等于1333。

Inference Details:我们首先将输入图像传递给网络,获取预测的带有预测类别的边界框。除非特别说明,以下后处理与RetinaNet 完全相同,我们直接使用RetinaNet的后处理超参数。我们使用与训练中相同尺寸的输入图像。我们假设如果仔细调整超参数,我们的检测器的性能可能会进一步提高。

4.1. Ablation Study && 4.2. Comparison with State-of-the-art Detectors

略过

5. Extensions on Region Proposal Networks

到目前为止,我们已经展示了在单级检测器中,我们的FCOS甚至可以比基于锚点的对应方法获得更好的性能。直观地说,FCOS应该也能够在两级检测器Faster R-CNN中用FPN 替代区域建议网络(RPNs)中的锚点框。在这里,我们通过实验来证实这一点。

与使用FPN 的RPN相比,我们使用FCOS中的方法替换了锚点框。此外,我们将GN添加到FPN头部的层中,这可以使训练更加稳定。除此之外,其他设置与官方代码中使用FPN的RPN完全相同。如表6所示,即使不使用提出的中心性分支,我们的FCOS已经显著提高了AR100和AR1k。在使用了提出的中心性分支后,FCOS将AR100和AR1k进一步分别提升至52.8%和60.3%,相对于使用FPN的RPN,AR100的相对改进为18%,AR1k的绝对改进为3.4%。
在这里插入图片描述

6. Conclusion

We have proposed an anchor-free and proposal-free onestage detector FCOS. As shown in experiments, FCOS
compares favourably against the popular anchor-based onestage detectors, including RetinaNet, YOLO and SSD,
but with much less design complexity. FCOS completely avoids all computation and hyper-parameters related to anchor boxes and solves the object detection in a per-pixel prediction fashion, similar to other dense prediction tasks such as semantic segmentation. FCOS also achieves state-of-theart performance among one-stage detectors. We also show that FCOS can be used as RPNs in the two-stage detector Faster R-CNN and outperforms the its RPNs by a large margin. Given its effectiveness and efficiency, we hope that FCOS can serve as a strong and simple alternative of current mainstream anchor-based detectors. We also believe that FCOS can be extended to solve many other instancelevel recognition tasks.

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

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

相关文章

重磅!TikTok将于8月底关闭半闭环 切断外链意在电商业务发展?

自2019年开始&#xff0c;TikTok电商业务逐渐走进人们的视线&#xff0c;并引起了市场的广泛关注。作为一家短视频平台&#xff0c;TikTok能够依靠其强大的用户基数与精准的推广策略&#xff0c;将流量成功转化为商业价值。截至目前&#xff0c;TikTok电商业务已经初步形成完整…

【Java】多线程(进阶)

多线程进阶 常见的所策略乐观锁和悲观锁重量级锁和轻量级锁自旋锁和挂起等待锁自旋锁挂起等待锁 读写锁和互斥锁读写锁互斥锁 公平锁和非公平锁公平锁非公平锁 可重入锁和不可重入锁可重入锁不可重入锁 CASCAS应用实现原子类实现自旋锁 CAS的ABA问题 synchronized原理基本特点加…

ATKck靶场系列二

信息收集 nmap -sP 192.168.111.0/24 nmap -sS -T4 -A -v -p- 192.168.111.80─# nmap -sS -T4 -A -v -p- 192.168.111.80 Starting Nmap 7.93 ( https://nmap.org ) at 2023-08-29 01:46 EDT NSE: Loaded 155 scripts for scanning. NSE: Script Pre-scanning. Initiating NS…

Linux之Shell(一)

Linux之Shell Shell概述Linux提供的Shell解析器bash和sh的关系Centos默认的解析器是bash Shell脚本入门脚本格式第一个脚本脚本常用的执行方式 变量系统预定义变量自定义变量特殊变量$n$#\$*、\$$? 运算符条件判断流程控制(▲)if判断case语句for循环while循环 read读取控制台输…

几种Go版本管理工具

缘起: 编译下面这段代码时,在Mac上没有什么问题,正常运行, 点击查看代码: package mainimport ( "bytes" "encoding/binary" "encoding/json" "fmt" "log" "math/rand" "net/http" "time")fu…

740212LD、740214、740214D、740214L比例插装线圈放大器

740212、740212D、740212L、740212LD、740214、740214D、740214L、740214LD、740228、740228D、740228L、740228LD、740612、740612D、740612L、740612LD、740614、740614D、740614L、740614LD线圈绕组采用N级(392 F [200 C]等级) 电磁线。 需要配对的电源线缆&#xff0c;该线…

ETC reset

ETC重新激活 换前挡风玻璃膜会把ETC设备拿下来&#xff0c;需要到【ETC服务中心】重新【粘上去】&#xff0c;另外需要工作人员用手持终端【重新激活】 ETC 背面有个 【白色】开关小柱子&#xff0c;一旦拆下来就失效&#xff0c;因为这个开关弹出来了 截面图看就是这样的&…

day 30 动态GDP柱状图绘制

列表.sort(key选择排序依据的函数&#xff0c;reverseTrue|False) 参数key:要求传入一个函数&#xff0c;表示将列表的每一个元素传入函数当中&#xff0c;返回排序的依据&#xff0c; 参数reverse,是否反转排序结果&#xff0c;True降序&#xff0c;False升序 my_list [[&…

linux下启动mysql不成功

最近在linux安装mysql数据库时&#xff0c;启动mysql&#xff0c;总是不成功&#xff0c;报如上所述问题&#xff0c;经过一番排查&#xff0c;最终是权限问题&#xff0c;将mysql目录下&#xff0c;统一修改为root权限。

C语言面向对象的编程思想

面向对象编程 面向对象编程Object-Oriented Programming&#xff0c;OOP&#xff09; 作为一种新方法&#xff0c;其本质是以建立模型体现出来的抽象思维过程和面向对象的方法。模型是用来反映现实世界中事物特征的。任何一个模型都不可能反映客观事物的一切具体特征&#xff0…

算法通过村第四关-栈黄金笔记|表达式问题

文章目录 前言1. 计算器问题2. 逆波兰表达式问题 总结 前言 提示&#xff1a;快乐的人没有过去&#xff0c;不快乐的人除了过去一无所有。 --理查德弗兰纳根《深入北方的小路》 栈的进阶来了&#xff0c;还记得栈的使用场景吗&#xff1f;表达式和符号&#xff0c;这不就来了 1…

杂记 23.8.30

目录 tesol专业介绍 EMBA项目 适合学习时候听的轻音乐 安全感和孤独感 puffy fix sb up with sth For all the world Size up 博雅、博雅教育 人是需要被仰视的 tesol专业介绍 tesol专业的全称是“Teaching English to Speakers of Other Language”&#xff0c;可译…

自动化管理管理工具----Ansible

目录 ​编辑 一、Ansible概念 1.1特点 二、工作机制&#xff08;日常模块&#xff09; 2.1 核心程序 三、Ansible 环境安装部署 四、ansible 命令行模块 4.1command 模块 4.2shell 模块 4.3cron 模块 4.4user 模块 4.5group 模块 4.6copy模块 4.7file模块 4.8ho…

支持AI视频处理的高容量流媒体加速卡方案

// 编者按&#xff1a; 实况直播业务随着流媒体市场的发展增长迅速。与传统流媒体“一对多”的模式不同&#xff0c;直播流媒体高交互的特性和 “多对多”的架构对时延的要求越来越高&#xff0c;传统基础设施部署和硬件已经不能高效处理这类需求。在此背景下&#xff0c;AMD…

ELK日志收集系统(四十九)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、概述 二、组件 1. elasticsearch 2. logstash 2.1 工作过程 2.2 INPUT 2.3 FILETER 2.4 OUTPUTS 3. kibana 三、架构类型 3.1 ELK 3.2 ELKK 3.3 ELFK 3.5 EF…

科技政策 | 浙江省科学技术厅关于组织申报2024年度“尖兵”“领雁”研发攻关计划第一批项目的通知

原创 | 文 BFT机器人 近日浙江省科技厅发布了2024年第一批“尖兵”“领雁”研发攻关计划&#xff1b;2024年度攻关计划将围绕三大科创高地战略领域&#xff0c;聚焦研发具有先发优势的关键共性技术和引领未来发展的基础前沿技术&#xff0c;根据战略需求、规划需求、市场需求等…

MySQL之从单机到集群

写在前面 本文一起看下MySQL是单机存在的问题&#xff0c;以及为了解决这些问题所提出的各种解决方案。 1&#xff1a;从单机到集群 并非业务发展初期我们就直接使用集群来支撑业务&#xff0c;而是简单的使用单机版本&#xff0c;但是随着业务的发展&#xff0c;单机的各种…

22 Linux高级篇-定制自己的Linux系统

22 Linux高级篇-定制自己的Linux系统 文章目录 22 Linux高级篇-定制自己的Linux系统22.1 Linux7启动流程介绍22.1.1 Linux7启动流程22.1.3 systemd概述 22.2 *制作min-linux思路分析22.3 操作步骤步骤1&#xff1a;创建新磁盘步骤2&#xff1a;制作启动盘步骤3&#xff1a;创建…

一个简单的vim例子

一.欢迎来到我的酒馆 在本章节介绍vim工具。 目录 一.欢迎来到我的酒馆二.什么是vim 二.什么是vim 2.1什么是vim vim是一种Linux命令行类型 的文本编辑器。vim指的是"vi improved"&#xff0c;意思是vi工具的升级版。vim是基于vi实现的&#xff0c;它提供了…

设计模式--模板方法模式(Template Method Pattern)

一、什么是模板方法模式&#xff08;Template Method Pattern&#xff09; 模板方法模式&#xff08;Template Method Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一个算法的骨架&#xff0c;将一些步骤的实现延迟到子类中。模板方法模式允许在不改变算法的…