[语义分割] DeepLab v2(膨胀卷积、空洞卷积、多尺度信息融合、MSc、ASPP、空洞空间金字塔池化、Step学习率策略、Poly学习率策略)

DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs
  • 论文地址:DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs
  • 源码地址:DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs
  • 复现代码:https://github.com/kazuto1011/deeplab-pytorch

这是一篇于 2016 年发布在 CVPR 上的文章。接着上一篇 DeepLab V1 网络简介,本文对 DeepLab V2 网络进行简单介绍。DeepLab V1 相比 DeepLab V2 就是换了个 Backbone(VGG → ResNet,简单换个 Backbone 就能涨大概 3 个点)然后引入了一个新的模块 ASPP(Atros Spatial Pyramid Pooling,空洞空间金字塔池化),其他的没太大区别。

在这里插入图片描述

DeepLab v2 概况

DeepLab v2是一个语义分割模型,旨在对图像进行像素级别的分类,将每个像素分配到其对应的语义类别。它是DeepLab系列的第二个版本,在2016年由Chen等人提出,并取得了令人印象深刻的结果。

DeepLab v2的核心思想是使用深度卷积神经网络(DCNN)来解决语义分割问题,并在此基础上引入了一些关键技术来提高性能。其主要的核心思想包括:

  1. 空洞卷积(Atrous Convolution):传统的卷积操作具有固定的感受野大小,但在语义分割任务中,需要考虑不同尺度的上下文信息。为了实现这一点,DeepLab v2采用了空洞卷积,也称为扩张卷积。通过在卷积操作中引入可调节的空洞率(或称为膨胀率),可以在不增加计算量的情况下扩大感受野,从而捕捉更广泛的上下文信息。

  2. 多尺度信息融合:为了进一步提高语义分割的性能,DeepLab v2采用了多尺度信息融合的策略。它通过在不同空洞率下进行多尺度的空洞卷积操作,并将这些不同尺度的特征图融合在一起,从而使模型能够同时利用局部和全局的上下文信息。

  3. 高分辨率分类器:在语义分割任务中,分辨率较低的特征图可能会导致细小目标的信息丢失。为了解决这个问题,DeepLab v2在空洞卷积后使用了一个全局平均池化层,将特征图的尺寸降低到1x1,然后通过一个额外的高分辨率分类器来对原始尺寸的特征图进行上采样,从而恢复细节信息。

  4. 条件随机场(CRF)后处理:在语义分割中,由于卷积神经网络的输出是逐像素的分类结果,可能存在一些不连续性和噪声。为了优化分割结果并增强空间连续性,DeepLab v2使用了条件随机场(CRF)后处理步骤,以进一步优化像素标签。

总的来说,DeepLab v2通过引入空洞卷积、多尺度信息融合、高分辨率分类器和CRF后处理等技术,显著提高了语义分割任务的性能,成为当时语义分割领域的重要里程碑之一。


Abstract

在这项工作中,我们使用深度学习来解决语义图像分割任务,并做出了三个主要贡献,经实验证明具有实际价值。

  • ①首先,我们强调卷积操作与上采样卷积层的结合,或者称为“空洞卷积”,作为密集预测任务中的强大工具。空洞卷积允许我们明确控制在深度卷积神经网络中计算特征响应的分辨率。它还使我们能够有效地扩大卷积层的感受野,以在不增加参数或计算量的情况下纳入更大的上下文信息。
  • ②其次,我们提出了空洞空间金字塔池化(ASPP)来在多个尺度上鲁棒地分割对象。ASPP使用多种采样率和有效视野对输入的卷积特征层进行探测,从而捕捉多个尺度上的对象以及图像上下文。
  • ③第三,我们通过结合深度卷积神经网络(DCNNs)和概率图模型的方法来改善对象边界的定位。在 DCNNs 中常用的最大池化和降采样组合实现了不变性,但会影响定位的准确性。我们通过将最终 DCNN 层的响应与全连接的条件随机场(CRF)相结合来克服这一问题,定性和定量地证明了它能够改善定位性能。

我们提出的“DeepLab”系统在 PASCAL VOC-2012 语义图像分割任务上取得了新的最高水平,测试集上达到了 79.7% 的 mIOU,并在其他三个数据集(PASCAL-Context,PASCAL-Person-Part 和 Cityscapes)上取得了进展。我们的所有代码都公开在网上可供使用。

概率图模型(Probabilistic Graphical Model,PGM)是一种用于表示和处理不确定性信息的概率模型。它是概率论和图论的结合,旨在描述变量之间的概率关系,并通过图形的方式展示这些关系。在概率图模型中,节点表示随机变量,边表示随机变量之间的条件依赖关系。


1. CNNs 应用在语义分割任务中存在的问题及解决方案

1.1 CNNs 在语义分割中存在的问题

和上篇文章一样,在文章的引言部分作者提出了DCNNs应用在语义分割任务中遇到的问题。

  1. 分辨率被降低(主要由于下采样 stride > 1 的卷积/池化层导致)—— v1 中已提出
  2. 目标的多尺度问题
  3. CNNs 的不变性(Invariance)会降低定位精度 —— v1 中已提出

虽然问题 2 是 v2 中新提出来的问题,但是在 v1 中已经有一个名为 MSc(Multi-Scale) 的trick。

1.2 解决方案

  1. 分辨率被降低:一般就是将最后的几个 Maxpooling 层的 stride 给设置成 1(如果是通过卷积下采样的,比如 ResNet,同样将 stride 设置成 1 即可),然后在配合使用膨胀卷积。

  2. 目标多尺度:最容易想到的就是将图像缩放到多个尺度分别通过网络进行推理,最后将多个结果进行融合即可。这样做虽然有用但是计算量太大了。为了解决这个问题,DeepLab V2 中提出了 ASPP 模块(Atrous Spatial Pyramid Pooling,空洞空间金字塔池化),具体结构后面会讲。

  3. CNNs 不变性导致定位精度降低:和 DeepLab V1 差不多,还是通过 CRFs 解决,不过这里用的是 fully connected pairwise CRF,相比 V1 里的 fully connected CRF 要更高效点。在 DeepLab V2 中 CRF 涨点就没有 DeepLab V1 猛了,在 DeepLab V1 中大概能提升 4 个点,在 DeepLab V2 中通过 Table4 可以看到大概只能提升 1 个多点了。

pairwise
adv. 对偶(地);成对(双)(地);
adj. 两个两个的;成对的;

2. DeepLab V2 的优势

和 DeepLab V1 中写的一样:

  1. 速度更快
  2. 准确率更高(当时的 state-of-the-art)
  3. 模型结构简单,还是 CNNs 和 CRFs 的联级

3. ASPP(Atrous Spatial Pyramid Pooling,空洞空间金字塔池化)

3.1 ASPP 结构

在 DeepLab V2 中最值得讲的就是 ASPP 模块了,其他的都算不上啥亮点😂。这个 ASPP 模块很像是 DeepLab V1 中 LargeFOV 的升级版(但额外加入了多尺度的特性)。下图是原论文中介绍 ASPP的示意图,就是在 Backbone 输出的 Feature Map 上并联四个分支,每个分支的第一层都是使用的膨胀卷积但不同的分支使用的膨胀系数不同(即每个分支的感受野不同,从而具有解决目标多尺度的问题)。

在这里插入图片描述

图4:空洞空间金字塔池化(ASPP)。为了对中心像素(橙色)进行分类,ASPP 利用多尺度特征,采用多个并行的膨胀卷积,这些膨胀卷积具有不同的膨胀率。有效感受野用不同颜色表示。

由于每个分支的膨胀系数不同,因此每个分支的感受野是不一样的(膨胀系数越大,感受野越大),最终将 4 个分支的结果进行融合就使得 DeepLab v2 具有了解决多尺度的能力。

3.2 DeepLab-ASPP(以 VGG-16 为例)

下图是更加详细的 ASPP 结构(以 VGG-16 为例)。

在这里插入图片描述

图7:DeepLab-ASPP 采用多个具有不同膨胀系数的膨胀卷积,以捕捉多个尺度上的对象和上下文信息。

图中虽然写着是 FC,但 DeepLab 中并没有 FC,所以都是普通卷积或膨胀卷积。

将 Pool5 输出的特征层并联 4 个分支,每个分支分别通过一个 3 × 3 3\times 3 3×3 的膨胀卷积层、 1 × 1 1\times 1 1×1 的卷积层、 1 × 1 1\times 1 1×1 的卷积层(卷积核的个数等于 num_classes)。最后将四个分支的结果进行 ⊕ \oplus 融合即可。

如果是以 ResNet-101 做为 Backbone 的话,每个分支只有一个 3 × 3 3\times 3 3×3 的膨胀卷积层,卷积核的个数等于 num_classes(根据源码分析得到)。

3.3 ASPP 不同配置

在论文中有给出两个 ASPP 的配置:

  1. ASPP-S(四个分支膨胀系数分别为 [2,4,8,12]
  2. ASPP-L(四个分支膨胀系数分别为 [6,12,18,24]

下表是对比 LargeFOV、ASPP-S 以及 ASPP-L 的效果。这里只看 CRF 之前的(不使用 CRF)对比。

在这里插入图片描述

Table 3:ASPP 对基于 VGG-16 的 DeepLab 模型在 PASCAL VOC 2012 验证集上性能(mean IOU)的影响。LargeFOV:单一分支,r = 12。ASPP-S:四个分支,r = {2, 4, 8, 12}。ASPP-L:四个分支,r = {6, 12, 18, 24}

从上表可以看到,ASPP-L > ASPP-S >于LargeFOV。因此我们在使用 DeepLab v2 时一般使用 ASPP-L。

4. DeepLab V2 网络结构

这里以 ResNet-101 作为 Backbone 为例,下图是霹雳吧啦WZ根据官方源码绘制的网络结构(不考虑 MSc 多尺度融合)。

在这里插入图片描述

需要注意的点❗️

  • 在 ResNet 的 Layer3 中的 Bottleneck1 中原本是需要下采样的( 3 × 3 3\times 3 3×3 的卷积层 stride=2),但在 DeepLab V2 中将 stride 设置为 1,即不在进行下采样。而且 3 × 3 3\times 3 3×3 卷积层全部采用膨胀卷积膨胀系数为 2。
  • 在 Layer4 中也是一样,取消了下采样,所有的 3 × 3 3\times 3 3×3 卷积层全部采用膨胀卷积膨胀系数为 4。
  • 最后需要注意的是 ASPP 模块,在以 ResNet-101 做为 Backbone 时,每个分支只有一个 3 × 3 3\times 3 3×3 的膨胀卷积层,且卷积核的个数都等于 num_classes

5. Learning Rate Policy(学习率策略)

5.1 普通的 step 学习率变化策略

学习率策略是指在训练过程中调整学习率的方式。Step策略是一种常见的学习率策略之一。在Step策略中,学习率在训练的特定步骤(epoch或者迭代次数)时会进行调整。Step策略的学习率更新公式为:

学习率 = 初始学习率 × γ ( 当前步骤数 / / s t e p _ s i z e ) l r i = l r i n i t × γ s t e p i / / s t e p _ s i z e \begin{aligned} & 学习率 = 初始学习率 \times \gamma ^{ (当前步骤数 // \mathrm{step\_size})}\\ & \mathrm{lr}_i = \mathrm{lr_{init}} \times \gamma^{\mathrm{step}_i // \mathrm{step\_size}} \end{aligned} 学习率=初始学习率×γ(当前步骤数//step_size)lri=lrinit×γstepi//step_size

其中:

  • 初始学习率 l r i n i t \mathrm{lr_{init}} lrinit 是训练开始时设置的学习率
  • γ \gamma γ 是一个介于 0 和 1 之间的超参数,用于控制学习率的下降速度
    • γ \gamma γ 越大,学习率下降越慢
    • γ \gamma γ 越小,学习率下降越快
  • 当前步骤数 s t e p i \mathrm{step}_i stepi 是指训练进行到的当前步骤
  • s t e p s i z e \mathrm{step_size} stepsize 是调整学习率的步长:
    • s t e p s i z e \mathrm{step_size} stepsize 越大,学习率的调整频率越低,学习率下降速度越慢
    • s t e p s i z e \mathrm{step_size} stepsize 越小,学习率的调整频率越高,学习率下降速度越快

注意❗️

  • 当当前步骤数 s t e p i \mathrm{step}_i stepi 是调整学习率的步长 s t e p s i z e \mathrm{step_size} stepsize 的倍数时,会进行学习率的调整
  • / / // // 表示整除

在 DeepLab v2 中,Poly 学习率策略的默认幂指数(power)值为 0.9。

import matplotlib.pyplot as plt

def step_learning_rate(initial_lr, gamma, step_size, total_steps):
    learning_rates = [initial_lr * (gamma ** (step // step_size)) for step in range(total_steps)]
    return learning_rates

# 设置初始学习率、gamma、step_size和总迭代次数
initial_lr = 0.1
gamma_lst = [0.01, 0.1, 0.25, 0.5, 0.8]
# step_size_lst = [5, 10, 20, 50]
step_size = 10
total_steps = 100

# 获取学习率变化曲线数据
for gamma in gamma_lst:
    learning_rates = step_learning_rate(initial_lr, gamma, step_size, total_steps)

    # 绘制学习率变化曲线
    plt.plot(range(total_steps), learning_rates, label=f"$gamma={gamma}$")
plt.xlabel('Step')
plt.ylabel('Learning Rate')
plt.title('Step Learning Rate Schedule')
plt.grid(True)
plt.legend()
plt.savefig("step learning rate strategy", dpi=300)

在这里插入图片描述

在这里插入图片描述

5.2 DeepLab v2 的 poly 学习率变化策略

在 DeepLab V2 中训练时采用的学习率策略叫 poly,相比普通的 step 策略(即每间隔一定步数就降低一次学习率)效果要更好。文中说最高提升了 3.63 个点,真是炼丹大师😂。poly 学习率变化策略公式如下:

l r i = 初始学习率 × ( 1 − 当前迭代次数 总迭代次数 ) 幂指数 = l r i n i t × ( 1 − i t e r i m a x _ i t e r ) p o w e r \begin{aligned} \mathrm{lr}_i & = 初始学习率 × (1 - \frac{当前迭代次数}{总迭代次数}) ^{幂指数}\\ & = \mathrm{lr_{init}} \times (1 - \frac{\mathrm{iter}_i}{\mathrm{max\_iter}})^{\mathrm{power}} \end{aligned} lri=初始学习率×(1总迭代次数当前迭代次数)幂指数=lrinit×(1max_iteriteri)power

其中:

  • l r i \mathrm{lr}_i lri 表示第 i i i 次迭代的学习率(当前学习率)
  • l r i n i t \mathrm{lr_{init}} lrinit 是初始学习率
  • i t e r i \mathrm{iter}_i iteri 是当前迭代次数
  • m a x _ i t e r \mathrm{max\_iter} max_iter 是总迭代次数
  • p o w e r \mathrm{power} power 是幂指数:幂指数是一个超参数,用于控制学习率下降的速度。通常情况下:
    • 它可以设为 1,表示线性减小学习率
    • 或者设为其他小于 1 的值,以实现更激进的学习率下降
      • p o w e r \mathrm{power} power 越小,学习率下降越慢
      • p o w e r \mathrm{power} power 越大,学习率下降越快

import matplotlib.pyplot as plt

def poly_learning_rate(initial_lr, power, total_steps):
    learning_rates = [initial_lr * (1 - step / total_steps) ** power for step in range(total_steps)]
    return learning_rates

# 设置初始学习率、幂指数和总迭代次数
initial_lr = 0.1
power_lst = [1.0, 0.9, 0.5, 0.1]
total_steps = 100

# 获取学习率变化曲线数据
for power in power_lst:
    learning_rates = poly_learning_rate(initial_lr, power, total_steps)

    # 绘制学习率变化曲线
    plt.plot(range(total_steps), learning_rates, label=f"$power={power}$")
plt.xlabel('Step')
plt.ylabel('Learning Rate')
plt.title('Poly Learning Rate Schedule')
plt.legend()
plt.grid(True)
plt.savefig("poly learning rate strategy", dpi=300)

在这里插入图片描述

5.3 Step v.s. Poly 学习率策略效果对比

在这里插入图片描述

Table 2:当不同的学习超参数变化时,PASCAL VOC 2012 验证集的结果(在 CRF 之前)(以百分比表示)。在训练 DeepLab-LargeFOV 模型时,采用 “poly” 学习策略比 “step” 学习策略更为有效。

从上表数据可以看到,Poly 学习率变化策略对 mean IoU 的提升较为明显!

6. 消融实验

下表是原论文中给出的一些消融实验对比:

在这里插入图片描述

Table 4:在 PASCAL VOC 2012 验证集上使用 ResNet-101 进行 DeepLab 实验。MSC:采用多尺度输入并进行最大融合。COCO:使用在 MS-COCO 上预训练的模型。Aug:通过随机缩放输入数据进行数据增强

我们评估了每个因素以及 LargeFOV 和 Atrous Spatial Pyramid Pooling (ASPP) 对验证集性能的影响。将 ResNet-101 用于替代 VGG-16 显著提高了 DeepLab 的性能(例如,我们最简单的基于 ResNet-101 的模型达到了 68.72%,而我们基于 DeepLab-LargeFOV VGG-16 的变体在 CRF 之前为 65.76%)。多尺度融合 [ 17 ] ^{[17]} [17]带来额外的 2.55% 的改进,而在 MS-COCO 上预训练模型又带来了额外的 2.01% 的提升。训练过程中的数据增强是有效的(大约提升了 1.6%)。采用 LargeFOV(在 ResNet 的顶部添加一个具有 3 × 3 3\times 3 3×3 的内核和 r = 12 的空洞卷积层)是有益的(大约提升了 0.6%)。而通过 Atrous Spatial Pyramid Pooling (ASPP) 进一步提高了 0.8%。通过密集条件随机场(dense CRF)后处理我们的最佳模型,性能达到了 77.69%。

  • MSC:表示多尺度输入,先将图像缩放到 0.5、0.7 和 1.0 三个尺度,然后分别送入网络预测得到 score maps,最后融合这三个 score maps(对每个位置取三个 score maps 的最大值,而非我们常见的 ⊕ \oplus ) —— 提升较大
  • COCO:是否使用在 MS-COCO 上预训练的模型 —— 提升较大
  • Aug:代表数据增强,这里就是对输入的图片在 0.5 到 1.5 之间进行随机缩放 —— 一般提升
  • LargeFOV 是在 DeepLab V1 中讲到过的结构 —— 提升不如在 v1 时的表现
  • ASPP 前面讲过了 —— 一般提升
  • CRF 前面也提到过了 —— 一般提升

知识来源

  1. https://blog.csdn.net/qq_37541097/article/details/121752679
  2. https://www.bilibili.com/video/BV1gP4y1G7TC

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

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

相关文章

C# IO 相关功能整合

目录 删除文件和删除文件夹 拷贝文件到另一个目录 保存Json文件和读取Json文件 写入和读取TXT文件 打开一个弹框,选择 文件/文件夹,并获取路径 获取项目的Debug目录路径 获取一个目录下的所有文件集合 获取文件全路径、目录、扩展名、文件名称 …

8款常用系统镜像烧录软件

系统烧录软件是一种用于将操作系统或其他软件程序安装到嵌入式系统、嵌入式设备或存储设备中的工具。它通常用于将预先编译好的二进制文件或源代码烧录到硬件设备的非易失性存储器中,例如闪存芯片、EEPROM、EPROM或其他存储介质。系统烧录软件提供了一个便捷的方式&…

matplotlib

目录 plot bar pie plot plot可以绘制点图和线图 ?plt.plot #使用?查看plot详细信息 x[1,2,3,4,5] y[16,17,18,19,20] plt.plot(x,y) import numpy as np xnp.arange(0,10) yx*x plt.plot(x,y) xnp.arange(5,15,0.1) ynp.sin(x) plt.plot(x,y,ro) #red circle markers p…

vs2013 32位 编译的 dll,重新用vs2022 64位编译,所遇问题记录

目录 一、vs2013 32 DLL 转 VS2022 64 DLL 所遇问题 1、 LNK2038: 检测到“_MSC_VER”的不匹配项: 值“1800”不匹配值“1900” 2、原先VS2013 现在 VS2022 导致的vsnprintf 重定义问题 3、 无法解析的外部符号 __vsnwprintf_s 4、无法解析的外部符号__imp__CertFreeC…

在线平面设计工具盘点,提升效率首选

在移动应用程序或网页UI设计项目中,在线平面图工具是必不可少的。市场上的在线平面图工具绘制软件丰富多样,层出不穷。作为一名UI设计师,有必要了解哪些在线平面图工具既简单又专业。本文将分享6种在线平面图工具,每种在线平面图工…

199. 二叉树的右视图

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,4] 示例 2: 输入: [1,null,3] 输出: [1,3] 示例 3: 输入: [] 输出: [] 提示…

力扣算法数学类—剑指 Offer 62. 圆圈中最后剩下的数字

目录 剑指 Offer 62. 圆圈中最后剩下的数字 题目背景: 题解: 代码: 结果: 剑指 Offer 62. 圆圈中最后剩下的数字 题目背景: 这是著名的约瑟夫环问题 这个问题是以弗拉维奥约瑟夫命名的,他是1世纪的一名…

【2023最新教程】6个步骤从0到1开发自动化测试框架(0基础也能看懂)

一、序言 随着项目版本的快速迭代、APP测试有以下几个特点: 首先,功能点多且细,测试工作量大,容易遗漏;其次,代码模块常改动,回归测试很频繁,测试重复低效;最后&#x…

机器学习——样本不均衡学习

1、样本不均衡定义 一般在分类机器学习中,每种类别的样本是均衡的,也就是不同目标值的样本总量是接近的,但是在很多场景下的样本没有办法做到理想情况,甚至部分情况本身就是不均衡情况: (1)很多…

SSL 证书过期巡检脚本

哈喽大家好,我是咸鱼 我们知道 SSL 证书是会过期的,一旦过期之后需要重新申请。如果没有及时更换证书的话,就有可能导致网站出问题,给公司业务带来一定的影响 所以说我们要每隔一定时间去检查网站上的 SSL 证书是否过期 如果公…

StackOverFlow刚刚宣布推出自己的AI产品!

StackOverFlow刚刚宣布要推出自己的AI产品! OverflowAI是StackOverFlow即将推出自己AI产品的名字,据称也是以VSCode插件的形式,计划在8月发布。我们来看看都有些什么功能,通过目前的信息看,OverflowAI的主要功能就是&…

中断控制器的驱动解析

这里主要分析 linux kernel 中 GIC v3 中断控制器的代码(drivers/irqchip/irq-gic-v3.c)。 设备树 先来看下一个中断控制器的设备树信息&#xff1a; gic: interrupt-controller51a00000 {compatible "arm,gic-v3";reg <0x0 0x51a00000 0 0x10000>, /* GI…

机器学习笔记之优化算法(二)线搜索方法(方向角度)

机器学习笔记之优化算法——线搜索方法[方向角度] 引言回顾&#xff1a;线搜索方法从方向角度观察线搜索方法场景构建假设1&#xff1a;目标函数结果的单调性假设2&#xff1a;屏蔽步长 α k \alpha_k αk​对线搜索方法过程的影响假设3&#xff1a;限定向量 P k \mathcal P_k …

Transformer模型简单介绍

Transformer是一个深度学习模型。主要功能通俗的来说就是翻译。输入&#xff0c;处理&#xff0c;输出。 https://zhuanlan.zhihu.com/p/338817680 大牛写的很完整 目录 总框架Encoder输入部分注意力机制前馈神经网络 Decoder 总框架 Encoders: 编码器Decoders: 解码器 Encoder…

【node.js】01-fs读写文件内容

目录 一、fs.readFile() 读取文件内容 二、fs.writeFile() 向指定的文件中写入内容 案例&#xff1a;整理txt 需求&#xff1a; 代码&#xff1a; 一、fs.readFile() 读取文件内容 代码&#xff1a; //导入fs模块&#xff0c;从来操作文件 const fs require(fs)// 2.调…

Vue+ElementUI操作确认框及提示框的使用

在进行数据增删改查操作中为保证用户的使用体验&#xff0c;通常需要显示相关操作的确认信息以及操作结果的通知信息。文章以数据的下载和删除提示为例进行了简要实现&#xff0c;点击下载以及删除按钮&#xff0c;会出现对相关信息的提示&#xff0c;操作结果如下所示。 点击…

第十章:重新审视扩张卷积:一种用于弱监督和半监督语义分割的简单方法

0.摘要 尽管取得了显著的进展&#xff0c;弱监督分割方法仍然不如完全监督方法。我们观察到性能差距主要来自于它们在从图像级别监督中学习生成高质量的密集目标定位图的能力有限。为了缓解这样的差距&#xff0c;我们重新审视了扩张卷积[1]并揭示了它如何以一种新颖的方式被用…

【云原生】Docker容器资源限制(CPU/内存/磁盘)

目录 ​编辑 1.限制容器对内存的使用 2.限制容器对CPU的使用 3.block IO权重 4.实现容器的底层技术 1.cgroup 1.查看容器的ID 2.在文件中查找 2.namespace 1.Mount 2.UTS 3.IPC 4.PID 5.Network 6.User 1.限制容器对内存的使用 ⼀个 docker host 上会运⾏若⼲容…

【Python入门系列】第十八篇:Python自然语言处理和文本挖掘

文章目录 前言一、Python常用的NLP和文本挖掘库二、Python自然语言处理和文本挖掘1、文本预处理和词频统计2、文本分类3、命名实体识别4、情感分析5、词性标注6、文本相似度计算 总结 前言 Python自然语言处理&#xff08;Natural Language Processing&#xff0c;简称NLP&…

PLC学习的步骤与重点:

熟悉基础元器件的原理和使用方法&#xff1a;了解按钮、断路器、继电器、接触器、24V开关电源等基础元器件的原理和使用方法&#xff0c;并能够应用它们来实现简单的逻辑电路&#xff0c;例如电机的正反转和单按钮的启停控制。 掌握PLC的接线方法&#xff1a;了解PLC的输入输出…