论文阅读笔记:UniFace: Unified Cross-Entropy Loss for Deep Face Recognition

news2025/3/5 21:21:06

论文阅读笔记:UniFace: Unified Cross-Entropy Loss for Deep Face Recognition

  • 1 背景
  • 2 创新点
  • 3 方法
    • 3.1 回顾softmax损失
    • 3.2 统一交叉熵损失
    • 3.3 人脸验证中的UCE损失
    • 3.4 进一步的优化
      • 3.4.1 边际UCE损失
      • 3.4.2 平衡BCE损失
  • 4 实验
    • 4.1 消融实验
    • 4.2 和SOTA方法对比

论文:UniFace_ICCV_2023_paper.pdf

代码:https://github.com/cvi-szu/uniface

1 背景

一个通用的人脸识别系统包含3个核心步骤:人脸检测、人脸特征提取和识别(包括一对一验证和一对其余识别)。因此,判别性的人脸特征学习对于人脸识别系统至关重要。具体来说,一个主体的面部特征应该接近属于同一身份的特征,而远离其他身份的特征,即来自正对的最小特征相似度理想情况下应该大于一个阈值 t t t ,来自负对的最大特征相似度应该小于这个阈值t。

基于深度学习的人脸识别方法根据其学习目标可以分为两类:

  • 样本到样本的距离

  • 样本到类的相似性

基于样本间距离的方法将人脸图像映射到一个高度紧凑的欧式特征空间,其中距离被用来度量人脸特征的相似性。然而,这类方法的训练是困难的,因为需要复杂的采样策略来构建有效的负对和正对/元组。

基于样本间相似度的方法通常采用softmax损失作为学习目标,将人脸识别作为多类别分类问题来处理。一些工作提出将softmax损失与额外精心设计的损失相结合,以增加类内相似性或降低类间相似性。这些方法引入了额外的超参数,需要对超参数进行精细的调整。其他工作(如L-softmax损失,SphereFace,AMsoftmax,CosFace 和 ArcFace等)通过引入类间边距对原始的softmax损失进行扩展,以减少类内距离,增大类间距离。然而,Softmax损失只是鼓励单个训练样本与其对应的正类代理之间的最大角度相似度,并没有考虑该正类代理与其他样本之间的相似性。换句话说,在softmax和边际softmax损失下,很难选择一个统一的阈值 t t t 来分离负样本对和正样本对,如图1所示。
在这里插入图片描述

为了解决这个问题,本文提出了一个统一交叉熵损失UCE,他明确的鼓励所有正样本到类的相似度都大于一个阈值 t = c o s θ t t=cos\theta t t=cosθt,而所有负样本到类的距离都小于这个阈值。作者进一步改进了UCE损失:

  • 引入了强制边际

  • 提出了两种可供选择的方式来平衡大量人脸身份的训练

作者将使用UCE损失训练的人脸检测模型命名为UniFace。

2 创新点

  • 在研究了softmax损失之后,作者发现它学习到的最小正样本到类的相似度实际上并不能保证大于它的最大负样本到类的相似度。为了解决这个问题,我们通过假设一个固定的阈值t来约束正负样本对的相似性,从而设计了UCE损失。

  • 本文是第一个将统一的 t t t 作为一个自动可学习的参数纳入深度人脸识别框架的工作。UCE损失鼓励所有正样本到类的相似度都大于负样本到类的相似度,这与实际人脸识别应用的期望非常匹配。

  • UCE损失单独使用效果很好,可以直接替代现有深度人脸识别模型(表1和表2)中的softmax损失。此外,作者还提出了UCE的两个扩展,即边际UCE和平衡UCE损失,以结合边际和平衡策略来提高UCE损失的性能。值得注意的是,边际UCE损失比softmax损失对超参数更加稳健(图3 ( a ) )。

3 方法

3.1 回顾softmax损失

假设 M M M 是在由 N N N 个主体组成的面部样本集 D D D 上训练的深度人脸模型,
在这里插入图片描述

其中, D i D_i Di 表示包含同一主体 i i i 的面部图像子集。对于任意样本 X ∈ D X∈D XD,令:
在这里插入图片描述

表示 X X X 的特征,其中 M M M 为特征向量的长度。然后,我们可以得到一个特征集合 F F F,
在这里插入图片描述

在使用softmax损失训练的人脸模型中,采用全连接(FC)分类器,权重矩阵 W W W 和偏置 b b b,根据 X X X 的特征 x x x 进行分类,其中:
在这里插入图片描述

在式(4)中, W i ∈ R M × 1 W_i∈R^{M×1} WiRM×1 是主体 i i i 的类别代理。

为了方便,分别归一化 W W W 并省略 B B B
在这里插入图片描述

对于所有的 x ∈ F x∈F xF,将特征归一化为 ∣ ∣ x ∣ ∣ = s ||x||=s ∣∣x∣∣=s

随机抽取 N N N 个样本 { X ( i ) } i = 1 N ⊂ D \{X^{(i)}\}_{i=1}^N⊂D {X(i)}i=1ND,其中 ∀ i , X ( i ) ∈ D i ∀i,X^{(i)}∈D_i i,X(i)Di。那么,对于给定的样本 X ( i ) X^{(i)} X(i),典型的多类softmax损失为:
在这里插入图片描述

其中,
在这里插入图片描述

< x ( i ) , W j > <x^{(i)},W_j> <x(i),Wj> 为两个向量的内积。

我们称 c o s θ x , w ( i i ) = 1 s W i T x ( i ) cos \theta_{x,w}^{(ii)} = \frac{1}{s}W_i^Tx^{(i)} cosθx,w(ii)=s1WiTx(i) 为正样本类间相似度, c o s θ x , w ( i j ) = 1 s W j T x ( i ) cos \theta_{x,w}^{(ij)} = \frac{1}{s}W_j^Tx^{(i)} cosθx,w(ij)=s1WjTx(i) 为负样本类间相似度,从而得到样本类间相似度矩阵 S s a m − c l a S_{sam-cla} Ssamcla
在这里插入图片描述

为了正确分类 X ( i ) X(i) X(i),softmax损失鼓励比负样本到类的相似性 ( c o s θ x , w ( i j ) ) (cos \theta_{x,w}^{(ij)}) (cosθx,w(ij)) 更大的正样本到类的相似性 ( c o s θ x , w ( i i ) ) (cos \theta_{x,w}^{(ii)}) (cosθx,w(ii)) ,即
在这里插入图片描述

那么,存在 t i t_i ti 使得:
在这里插入图片描述

然而,softmax损失没有考虑 c o s θ x , w ( j i ) cos \theta_{x,w}^{(ji)} cosθx,w(ji) c o s θ x , w ( i i ) cos \theta_{x,w}^{(ii)} cosθx,w(ii) 之间的关系。也就是说,可能存在一个负样本对 ( x ( j ) , W i ) (x^{(j)},W_i) (x(j),Wi) ,其相似度甚至大于正样本对 ( x ( i ) , W i ) (x^{(i)},W_i) (x(i),Wi),即可能存在一个样本 X ( j ) ∈ D j , j ≠ i X^{(j)}∈D_j,j≠i X(j)Dj,j=i,,其特征 x ( j ) x^{(j)} x(j) 满足:
在这里插入图片描述

我们预期来自正对的相似度大于某个阈值 t t t,来自负对的相似度小于 t t t。虽然在式(13)和(14)中,人脸图像 X ( i ) X^{(i)} X(i) X ( j ) X^{(j)} X(j) 都被正确地归类到正确地主体中。我们注意到,与我们的预期相反,正样本对 ( x ( i ) , W i ) (x^{(i)},W_i) (x(i),Wi) 比负样本对 ( x ( j ) , W i ) (x^{(j)},W_i) (x(j),Wi) 具有更小的相似度。由于 t i < t j t_i < t_j ti<tj,可以很容易地得出结论,没有统一的相似度阈值 t = t i = t j t = t_i = t_j t=ti=tj 可以同时正确地将正样本对 ( x ( i ) , W i ) (x^{(i)},W_i) (x(i),Wi) ( x ( j ) , W i ) (x^{(j)},W_i) (x(j),Wi) 与负样本对 ( x ( j ) , W i ) (x^{(j)},W_i) (x(j),Wi) 分开。

因此用式(11)中的样本到类的相似度矩阵 S s a m − c l a S_{sam-cla} Ssamcla 来选择阈值是困难的,即softmax是鼓励对角元素 c o s θ x , w ( i i ) cos \theta_{x,w}^{(ii)} cosθx,w(ii) 在第 i i i 行占优,以实现样本 X ( i ) X^{(i)} X(i) 的良好分类,而忽略了鼓励 c o s θ x , w ( i i ) cos \theta_{x,w}^{(ii)} cosθx,w(ii) 在第 i i i 列占优,然而这在人脸识别中也很重要。

3.2 统一交叉熵损失

为了避免式(14)中的问题,并鼓励一个相似矩阵 S s a m − c l a S_{sam-cla} Ssamcla 的行和列都是对角占优的。作者期望一个统一的阈值 t t t,使得:
在这里插入图片描述
如果我们将特征与其正类代理之间的最大夹角定义为 θ p o s \theta_{pos} θpos,将特征与其负类代理之间的最小夹角定义为 θ n e g \theta_{neg} θneg,即:
在这里插入图片描述
在这里插入图片描述
那么,当且仅当 θ p o s ≤ θ n e g \theta_{pos}≤\theta_{neg} θposθneg,且统一阈值 t = c o s θ t t=cos\theta_t t=cosθt,存在一个阈值 t t t 使得任意样本都满足式(15),对任意 θ t \theta_t θt 有效,其中:
在这里插入图片描述

即图1中所有行中所有的“×”都要在所有的“o”左边。

如3.1中所述,softmax损失没有考虑统一阈值 t t t 的约束。作者首次将统一阈值 t t t 作为一个可自动学习的参数加入到损失函数中。提出的统一交叉熵UCE损失前提是存在一个统一阈值 t = c o s θ t t=cos\theta_t t=cosθt(即 θ p o s ≤ θ n e g \theta_{pos}≤\theta_{neg} θposθneg)。从式(8)中的softmax开始推导:
在这里插入图片描述

根据式(16)-(18),可得:
在这里插入图片描述

不等式的详细推导见附录。

附录证明过程:
在这里插入图片描述
在这里插入图片描述

定义UCE损失 L u c e ( X ( i ) ) L_{uce}(X^{(i)}) Luce(X(i)) 为:
在这里插入图片描述
其中 b ˜ = s c o s θ t + l o g ( N − 1 ) \~b=scos\theta_t+log(N-1) b˜=scosθt+log(N1) 是一个待学习的常数。

式(23)中第一项中的 e − s c o s θ x , w ( i i ) + b ˜ = e − s ( c o s θ x , w ( i i ) − c o s θ t − l o g ( N − 1 ) s ) e^{-scos\theta _{x,w}^{(ii)}+\~b}=e^{-s(cos\theta_{x,w}^{(ii)}-cos\theta_t-\frac{log(N-1)}{s})} escosθx,w(ii)+b˜=es(cosθx,w(ii)cosθtslog(N1)) ,第二项中的 e s c o s θ x , w ( i j ) + b ˜ = e s ( c o s θ x , w ( i j ) − c o s θ t − l o g ( N − 1 ) s ) e^{scos\theta _{x,w}^{(ij)}+\~b}=e^{s(cos\theta_{x,w}^{(ij)}-cos\theta_t-\frac{log(N-1)}{s})} escosθx,w(ij)+b˜=es(cosθx,w(ij)cosθtslog(N1)),缩放因子 s > 0 s>0 s>0,当模型训练收敛时,则会出现 c o s θ x , w ( i i ) − c o s θ t − l o g ( N − 1 ) s > 0 cos\theta_{x,w}^{(ii)}-cos\theta_t-\frac{log(N-1)}{s}>0 cosθx,w(ii)cosθtslog(N1)>0 , c o s θ x , w ( i j ) − c o s θ t − l o g ( N − 1 ) s < 0 cos\theta_{x,w}^{(ij)}-cos\theta_t-\frac{log(N-1)}{s}<0 cosθx,w(ij)cosθtslog(N1)<0,即 c o s θ x , w ( i j ) < c o s θ t + l o g ( N − 1 ) s < c o s θ x , w ( i i ) cos\theta_{x,w}^{(ij)}<cos\theta_t+\frac{log(N-1)}{s}<cos\theta_{x,w}^{(ii)} cosθx,w(ij)<cosθt+slog(N1)<cosθx,w(ii) ,其中 l o g ( N − 1 ) s \frac{log(N-1)}{s} slog(N1) 为常数可以忽略不计,所以训练目标满足式(15)。

UCE损失比softmax损失对正负样本到类特征之间的举例更有约束。当使用UCE损失代替softmax损失训练模型时,期望最终的样本特征更具有判别性。如图2所示,在提出的UCE损失划分的特征空间中, x ( 1 ) x^{(1)} x(1) W 1 W_1 W1 之间的相似性比原始的softmax损失训练增加,而 x ( 2 ) x^{(2)} x(2) W 1 W_1 W1 之间的相似性降低。
在这里插入图片描述

虽然UCE损失的最终公式(式(23))类似于二元交叉熵损失,但他们之间有几个关键区别。首先,UCE损失是从显式统一阈值 t t t 的目标设计的,用于约束正负样本对的相似性,而BCE损失及其变体没有这种显式约束。其次,从softmax损失中推导出UCE损失,并通过清晰的数学推导给出了统一阈值 t t t 与偏差 b ˜ = s c o s θ t + l o g ( N − 1 ) \~b=scos\theta_t+log(N-1) b˜=scosθt+log(N1) 的关系,然后通过图4(c)的定性说明来评估 t t t 是否符合人脸验证的预期。最后,作者在一个大型的benchmark上系统的比较了UCE损失和BCE损失,其中作者比较了:

  1. 一个为不同类别分配各自偏置的标准BCE损失

  2. 一个直接删除了任何偏置的修改BCE损失,这意味着偏置 b = 0 b=0 b=0

实验结论表明,UCE损失比BCE损失的两个朴素变体表现更佳,见表1。

3.3 人脸验证中的UCE损失

在真实人脸验证系统中,对于任意两个人脸图像样本, X ( i ) ∈ D i , X ( j ) ∈ D j X^{(i)}∈D_i,X^{(j)}∈D_j X(i)Di,X(j)Dj,通过比较它们的特征相似度 g ( X ( i ) , X ( j ) ) g(X^{(i)},X^{(j)}) g(X(i),X(j)) 与置信度阈值 t ∗ t^* t,选择一个统一的阈值来验证他们是否来自同一主体,这个过程隐含了一个损失 L v L_v Lv
在这里插入图片描述

其中 α \alpha α 是重加权参数。

那么在训练中,对于给定的 X ( i ) X^{(i)} X(i),它的损失为:
在这里插入图片描述

对于每一个样本,都会耗费大量的计算量,利用类代理 W i W_i Wi 代替了 F i F_i Fi 中的所有特征 x ( i ) x^{(i)} x(i),设计了一个合理的损失函数。对于所有的 i i i
在这里插入图片描述

式(27)中,损失采用函数 R e L U ( x ) = m a x ( 0 , x ) ReLU(x)=max(0,x) ReLU(x)=max(0,x) x = 0 x=0 x=0 处不可微,一个合理的替代可以是 softplus 函数:
在这里插入图片描述

β \beta β 趋于+∞时,softplus(x)趋于ReLU(x) 。

利用softplus函数,则 L v 3 ( X ( i ) ) L_{v3}(X^{(i)}) Lv3(X(i)) 可代换为:
在这里插入图片描述

当我们令 α = β = s \alpha=\beta=s α=β=s 时,
在这里插入图片描述

损失 L v 4 ( X ( i ) ) L_{v4}(X^{(i)}) Lv4(X(i)) 就是提出的UCE损失 L u c e ( X ( i ) ) L_{uce}(X^{(i)}) Luce(X(i)),满足 b ˜ ∗ = s t ∗ \~b^*=st^* b˜=st。因此,作者将UCE损失和人脸验证联系起来。

3.4 进一步的优化

3.4.1 边际UCE损失

先前的工作表明边际softmax损失比原始的性能更好。在这里通过增加一个余弦余量 m m m,将所提出的UCE损失扩展到边际UCE损失:
在这里插入图片描述

3.4.2 平衡BCE损失

L u c e L_{uce} Luce L u c e − m L_{uce-m} Lucem 只计算一个正样本对 ( x ( i ) , W i ) (x^{(i)},W_i) (x(i),Wi) 的相似度,但却有 N-1 个负样本对 ( x ( i ) , W j ) (x^{(i)},W_j) (x(i),Wj) ,这种不平衡会导致不理想的性能。本文引入两个参数来平衡正负样本对的数量:
在这里插入图片描述

其中 p j p_j pj 是负样本对 ( x ( i ) , W j ) (x^{(i)},W_j) (x(i),Wj) 从均匀分布中抽样得到的随机数, λ \lambda λ r r r 分别是所有负样本对的重加权和抽样参数。不同的 λ \lambda λ r r r 的影响如图3所示。
在这里插入图片描述

4 实验

4.1 消融实验

UCE损失中超参数的消融实验。
在这里插入图片描述

不同框架中使用UCE损失的提升。
在这里插入图片描述

normalized softmax损失,BCE损失和UCE损失的效果对比。
在这里插入图片描述

4.2 和SOTA方法对比

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

从零开始用react + tailwindcss + express + mongodb实现一个聊天程序(十) 收发消息

1.聊天框 首先我们完善前端的消息输入框 components下面新建MessageInput组件 import { useState,useRef } from "react" import {X,Image,Send} from "lucide-react"import { useChatStore } from "../store/useChatStore" import toast from…

5分钟看懂Deepseek开源周之六:Deepseek-V3/R1推理系统设计----揭开深度求索模型系统设计和运营成本之谜

前言 众所周知&#xff0c;四大天王一般有五个人。所以开源周五连发有第六天也很正常。贴上了开源周活动的github主贴&#xff0c;大家可以不上推特就能了解详情。 deepseek-ai/open-infra-index: Production-tested AI infrastructure tools for efficient AGI development a…

C++发展

目录 ​编辑C 的发展总结&#xff1a;​编辑 1. C 的早期发展&#xff08;1979-1985&#xff09; 2. C 标准化过程&#xff08;1985-1998&#xff09; 3. C 标准演化&#xff08;2003-2011&#xff09; 4. C11&#xff08;2011年&#xff09; 5. C14&#xff08;2014年&a…

动态规划/贪心算法

一、动态规划 动态规划 是一种用于解决优化问题的算法设计技术&#xff0c;尤其适用于具有重叠子问题和最优子结构性质的问题。它通过将复杂问题分解为更简单的子问题&#xff0c;并保存这些子问题的解以避免重复计算&#xff0c;从而提高效率。 动态规划的核心思想 最优子结…

python全栈-Linux基础

python全栈-Linux基础 文章目录 Linux安装/配置网络配置配置Linux远程登录配置虚拟机内部ip配置真机的ip安装XShell和Xftp目录结构用户和用户组用户管理添加用户useradd查看用户id修改用户usermod (选项)(参数)用户密码设置passed (选项)(参数)删除用户userdel [选项] 用户名 用…

基于https虚拟主机配置

一、https介绍 http 明文&#xff0c;80/tcp https 密文&#xff0c;443/tcp 二、安全性保障 1、数据安全性 数据加密 2、数据完整性 3、验证身份的真实性、有效性 三、数据安全性 手段&#xff1a;加密 发送方加密数据&#xff0c;接收方解密数据 对称加密算法 加密、解密数据…

Kmeans算法来实现RFM指标计算步骤

K-Means&#xff08;K均值&#xff09;是一种经典的无监督聚类算法&#xff0c;主要用于将数据集划分为 KKK 个不同的簇&#xff08;Cluster&#xff09;。 它基于最小化簇内样本的平方误差&#xff0c;即最小化数据点与簇中心的距离之和。 1. K-Means 算法原理 (1) 主要步骤 …

Vue2-3 优雅的在子组件修改父组件传递过来的v-model

在子组件修改父组件传递过来的v-model&#xff0c;这样会破坏单向数据流&#xff0c;造成屎山代码&#xff0c;为了避免这个问题&#xff0c;需要给一个中间层来相对舒服的使用v-model。方法就是用computed去拦截v-model,然后在computed 里面去触发 emit 事件来修改父组件传来的…

threejs:用着色器给模型添加光带扫描效果

第一步&#xff1a;给模型添加光带 首先创建一个立方体&#xff0c;不进行任何缩放平移操作&#xff0c;也不要set position。 基础代码如下&#xff1a; 在顶点着色器代码里varying vec3 vPosition;vPosition position;获得threejs自动计算的顶点坐标插值&#xff08;也就…

1.从0搭建前端Vue项目工程

我们通过vue官方提供的脚手架Vue-cli来快速生成一个Vue的项目模板。 **注意&#xff1a;**需要先安装NodeJS&#xff0c;然后才能安装Vue-cli。 环境准备好了&#xff0c;接下来我们需要通过Vue-cli创建一个vue项目&#xff0c;然后再学习一下vue项目的目录结构。Vue-cli提供了…

开放鸿蒙OpenHarmony 5.0.0 Release 兼容性测试实战经验分享

OpenHarmony 5.0版本的发布时间是2024年12月20日至21日。这个版本带来了许多新特性和改进。现在5.0出了两个release 版本&#xff0c;分别是5.0.0和5.0.1。 就在5.0版本发布不到2周的时间内&#xff0c;2025年01月01日起&#xff0c;不支持新产品基于老分支&#xff08;OpenHar…

Chromium_src源码

Chromium_src源码 码云上有一个OpenHarmony-TPC/chromium_src项目&#xff0c;目前已经停止维护了&#xff0c;迁移到GitCode上了&#xff0c;源代码项目地址为&#xff1a;openharmony-tpc/chromium_chrome 特此记录一下老的项目的相关软件架构 Chromium 简介 软件架构 软…

深度学习的正则化深入探讨

文章目录 一、说明二、学习目标三、什么是机器学习中的正则化四、了解过拟合和欠拟合五、代价函数的意义六、什么是偏差和方差&#xff1f;七、机器学习中的正则化&#xff1f; 一、说明 在训练机器学习模型时&#xff0c;模型很容易过拟合或欠拟合。为了避免这种情况&#xf…

《OpenCV》——dlib(人脸应用实例)

文章目录 dlib库dlib库——人脸应用实例——表情识别dlib库——人脸应用实例——疲劳检测 dlib库 dlib库的基础用法介绍可以参考这篇文章&#xff1a;https://blog.csdn.net/lou0720/article/details/145968062?spm1011.2415.3001.5331&#xff0c;故此这篇文章只介绍dlib的人…

tauri2+typescript+vue+vite+leaflet等的简单联合使用(一)

项目目标 主要的目的是学习tauri。 流程 1、搭建项目 2、简单的在项目使用leaflet 3、打包 准备项目 环境准备 废话不多说&#xff0c;直接开始 需要有准备能运行Rust的环境和Node&#xff0c;对于Rust可以参考下面这位大佬的文章&#xff0c;Node不必细说。 Rust 和…

本地部署阿里万象2.1文生视频模型(Wan2.1-T2V)完全指南

在生成式AI技术爆发式发展的今天,阿里云开源的万象2.1(Wan2.1)视频生成模型,为创作者提供了从文字/图像到高清视频的一站式解决方案。本文针对消费级显卡用户,以RTX 4060 Ti 16G为例,详解本地部署全流程与性能调优方案,涵盖环境配置、多模型选择策略、显存优化技巧及实战…

【Vue CLI脚手架开发】——3.组件交互props配置

文章目录 前言一、props数据接收方式二、代码实现1. 父组件2.子组件 三、分析 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0c;很多人都开启了学习机器学习…

FPGA之USB通信实战:基于FX2芯片的Slave FIFO回环测试详解

FPGA之Usb数据传输 Usb 通信 你也许会有疑问&#xff0c;明明有这么多通信方式和数据传输&#xff08;SPI、I2C、UART、以太网&#xff09;为什么偏偏使用USB呢? 原因有很多&#xff0c;如下&#xff1a; 1. 高速数据传输能力 高带宽&#xff1a;USB接口提供了较高的数据传…

【Office-Word】如何自动生成中英文目录

1.目录介绍 Word这个自动生成目录非常强大&#xff0c;涉及的功能很琐碎&#xff0c;想要完美的生成目录不仅仅是只会目录这么简单&#xff0c;前后涉及到的大纲级别、目标样式和域代码等操作是比较头疼的。 下面就一步一步开始介绍 2.多级标题级别编号设置 目录想要设置好…

CentOS 7 安装Nginx-1.26.3

无论安装啥工具、首先认准了就是官网。Nginx Nginx官网下载安装包 Windows下载&#xff1a; http://nginx.org/download/nginx-1.26.3.zipLinxu下载 wget http://nginx.org/download/nginx-1.26.3.tar.gzLinux安装Nginx-1.26.3 安装之前先安装Nginx依赖包、自行选择 yum -y i…