HPRNet: Whole-Body 2D 姿态估计

news2024/11/26 17:00:01

HPRNet: Hierarchical Point Regression for Whole-Body Human Pose Estimation解析

  • 摘要
  • 1. 简介
  • 2. Related Work
    • 2.1 Human Body Pose Estimation
    • 2.2 Whole-body Pose Estimation
  • 3. Model
    • 3.1 全身关键点的层次回归
    • 3.2 足部关键点回归
    • 3.3 网络架构
    • 3.4 目标函数
      • PCH and BKH > Focal Loss (热图检测)
      • PCC > L1 Loss(误差补偿)
      • BKO/HKO/FKO > L1 Loss (关键点回归)
      • PB/FB > L1 Loss (Box的长和宽回归)
      • 总Loss
  • 4. 实验
    • 4.1 数据集
    • 4.2 实验结果

论文链接:HPRNet: Hierarchical Point Regression for Whole-Body Human Pose Estimation
论文代码:https://github.com/nerminsamet/HPRNet
论文出处:Image and Vision Computing,2021
论文单位:Middle East Technical University, Ankara, Turkey

摘要

  • 在本文中,我们提出了一种新的自下而上的单阶段全身姿态估计方法,我们称之为“层次点回归(hierarchical point regression)”,简称HPRNet。
  • 在标准身体姿势估计中,估计人体上约17个主要关节的位置。
  • 不同的是,在全身姿势估计中,也会估计细粒度关键点的位置(面部68个,每只手21个,每只脚3个),这就产生了一个需要解决的尺度方差问题
  • 为了处理不同身体部位之间的尺度差异,我们建立了身体部位的分层点表示(hierarchical point representation),并对它们进行联合回归
  • 每个部分(例如面部)的细粒度关键点的相对位置参考该部分的中心进行回归,其位置本身相对于人的中心进行估计。
  • 此外,与现有的两阶段方法不同,我们的方法在恒定的时间内预测全身姿势,而不依赖于图像中的人数。
  • COCO WholeBody dataset上,HPRNet在所有全身部位(即身体、脚、脸和手)的关键点检测上显著优于之前所有自下而上的方法。它在面部(75.4 AP)和手部(50.4 AP)关键点检测方面也取得了最先进的结果。

1. 简介

  • 人体姿态估计是一项具有挑战性的计算机视觉任务,其目的是在图像和视频中定位人体关键点。
  • 人体姿态估计在动作识别、人体网格恢复、增强/虚拟现实、动画和游戏等视觉任务和应用中发挥着重要作用。
  • 与标准人体姿态估计任务不同,全身姿态估计的目标是检测除标准人体关键点外的面部、手和脚关键点
  • 这个问题的挑战是全身不同部位之间的极端尺度差异或不平衡。 例如,相对于肘部、膝盖和臀部等标准身体关键点,面部和手部关键点的相对较小的尺度使得面部和手部关键点的精确定位更加困难。由于这种尺度方差问题,直接应用现有的人体姿态估计方法不能得到令人满意的结果。
  • 尽管在过去的几十年里,人体姿态估计已经得到了很好的研究,但由于缺乏大规模的完整注释的全身关键点数据集,对全身姿态估计任务的探索还不够充分。
  • 之前的几种方法分别在不同的人脸、手和身体数据集上训练多个深度网络,并在推理时将它们集成在一起。 这些方法受到数据集偏差、光照、姿态和尺度变化以及复杂的训练和推理管道等问题的影响。
  • 最近,为了解决缺少基准的问题,引入了一种新的全身姿势估计数据集,称为COCO WholeBody。COCO WholeBody扩展了COCO关键点数据集,进一步标注了脸、手和脚关键点。
  • 除标准外,还从COCO关键点数据集中提取了17个人体关键点,68个面部标志,42个手部关键点
    6个脚部的关键点
    ,如图1。
    在这里插入图片描述
  • 除了这些133个全身关键点标注,数据集也有脸部和手部的边界框标注,从对应部位的极端关键点自动计算。
  • 他们还提出了一个强有力的基线,叫做ZoomNet,开创了技术的先河。ZoomNet是一种基于人体姿态估计模型HRNet的自顶向下的两阶段方法。
  • 给定一张图像,ZoomNet首先使用FasterRCNN人检测器检测人实例,然后使用CNN模型预测17个身体和6个脚关键点。随后,为了克服全身部位之间的尺度差异,ZoomNet将检测到的手和脸区域进行裁剪,并使用seperate CNNs将其转换为更高的分辨率,进一步进行人脸和手部关键点估计。
  • 人体姿态估计和全身姿态估计主要有两种方法:自下而上自上而下
  • 自下而上的方法直接检测人体关键点,然后对它们进行分组,得到给定图像中每个人的最终姿势。
  • 自上而下的方法(如ZoomNet)首先检测和提取人物实例,然后分别对每个实例应用姿态估计。
  • 分组阶段的自下而上方法比对每个人实例重复姿态估计更有效。
  • 因此,自顶向下的方法会随着人数的增加而减慢。
  • 然而,与自下而上的方法相比,自上而下的方法获得了更好的精度
  • 在本文中,我们提出了一种新的自下而上的方法,HPRNet,它通过分层回归关键点来显式处理全身姿态估计的层次性。
  • 为此,除了估计标准的身体关键点外,我们还定义了相对较小的身体部位(如脸和手)的边界框中心,并与人实例中心偏移(图3)。
    在这里插入图片描述
  • 同时,我们构建另一个层次的回归,其中我们定义每个手和脸关键点与其对应的手脸边界框中心的偏移量
  • 我们共同训练每个层次的回归层次,并根据它们定义的中心点回归所有的全身关键点。
  • 这种分层自下向上的方法有两个好处
    (1)首先,自然处理不同身体部位之间的尺度差异,因为每个部位内的相对距离在一个相似的范围内,每个部位类型由一个单独的子网络处理。
    (2)第二,作为自下而上的方法,HPRNet的推理速度受输入图像中人数的影响最小。这与自上而下的方法(如ZoomNet)形成对比,后者在人员实例较多的情况下显著减慢速度(包含1人的图像65.7毫秒,而包含10人的图像668.2毫秒)。
  • 我们的方法是基于中心点的自下而上的目标检测方法。 这些方法可以很容易地扩展到关键点估计任务。
  • 我们在COCO WholeBody数据集上通过消融实验和与SOTA)比较验证了我们方法的有效性。我们的方法明显优于所有自下而上的方法。它在人脸和手部关键点的检测上也优于SOTA自上而下的方法ZoomNet,同时明显快于ZoomNet。
  • 我们在本文中的主要贡献是提出了一种单阶段、自下而上的方法,以缩小自下而上和自上而下方法之间的性能差距。与自上而下的方法相比,我们的方法几乎是恒定时间运行的,独立于输入图像中的人数。

2. Related Work

2.1 Human Body Pose Estimation

  • 我们可以将目前的多人姿态估计方法分为两种: 自下而上和自上而下
  • 自下而上的方法中,给定图像,首先检测body关键点,不知道人物实例的数量或位置,也不知道这些关键点属于哪个人物实例。随后,将检测到的关键点分组并分配给人员实例。
  • 最近,基于中心的目标检测方法已经扩展到人体姿态估计。这些方法表示与人框中心的偏移值的关键点,并在训练期间直接回归它们。为了提高关键点的定位,他们还像其他自下而上的方法一样估计每个关键点的热图。在推理中,使用中心偏移量,他们将关键点分组并分配给人物实例。 由于自下而上的方法可以同时检测所有人的关键点,因此速度很快
  • 自上而下的方法首先检测输入图像中的人物实例。通常,他们使用现成的对象检测器(例如FasterRCNN)来获取人bounding box。接下来,自顶向下方法估计每个裁剪的人物框的单个人物姿势。通过裁剪和调整每个人员框的大小,自上而下方法的优点是可以放大每个人员的详细信息。因此,自上而下的方法更能处理规模差异问题。因此,最先进的结果是通过自上而下的方法获得的,自上而下和自下而上的方法之间存在精度差距。
  • 然而,由于姿态估计模型是为每个人实例运行的,因此自上而下方法的平均速度往往较慢,即随着图像中人物数量的增加,它们的速度会明显变慢。
  • 有人可能会认为,在全身姿势估计数据集(即:COCO WholeBody)可能是一种全身姿势估计的解决方案。然而,正如在COCO WholeBody数据集论文中所述,由于全身部位之间的大尺度差异,应用这些方法直接导致精度不理想。

2.2 Whole-body Pose Estimation

  • 全身姿态估计需要准确定位身体、面部、手和脚上的关键点。
  • 在面部对齐、面部landmark检测、手部姿态估计、手部跟踪和足部关键点检测等主题下,对每个身体部位的关键点检测都进行了很好的独立研究。
  • 然而,由于缺乏大规模的标注数据集,关于全身姿态估计的研究并不多。
  • 在COCO WholeBody数据集发布之前,OpenPose尝试检测全身关键点。为此,OpenPose集成了5个单独训练的模型,分别是human body pose estimation, hand detection, face detection, hand pose estimation 和 face pose estimation 。
  • 由于这些多模型,OpenPose的训练和推理是复杂和昂贵的。我们的端到端可训练的单一网络消除了这些缺点。
  • 建立全身姿势估计基准的第一步是发布COCO WholeBody数据集。
  • 他们还提出了一个强大的、两阶段的、自上而下的模型来对COCO WholeBody数据集进行全身姿势估计。首先使用FasterRCNN[45]在图像中获得候选人物框。接下来,使用一个称为ZoomNet的单一网络,对人体框进行全身关键点检测。
  • ZoomNet由4个子CNN网络组成
    (1)首先,FeatureNet对输入的人物框进行处理,并在两个尺度上提取共享特征。
    (2)接下来,使用来自FeatureNet的功能,BodyNet检测身体和脚的关键点。BodyNet还负责面部和手部边界框角点的预测,粗略提取面部和手部区域。
    (3)然后,将裁剪好的脸部和手部边界框输入FaceHeadHandHead网络,检测脸部和手部的关键点。
  • 他们使用HRNet-W32网络用于BodyNet, HRNetV2pW18网络用于FaceHead和HandHead网络.
  • 尽管自下而上的方法很快,但它们不够健壮,无法处理整个身体部位的尺度差异。
  • 我们假设用到精心选择的位置的偏移值来表示每个关键点可以处理尺度方差。在此基础上,我们扩展了基于中心的人体姿态估计方法,通过引入关键点的层次回归进行全身姿态估计。
  • 我们还表明,对小尺度全身部位(即脸和手)的关键点进行分层回归比裁剪和放大更有效。

3. Model

  • HPRNet是一种学习回归全身关键点的单阶段端到端可训练网络。
  • 在HPRNet中,输入图像首先通过骨干网络,骨干网络的输出被馈送到8个独立的分支,即:Person Center Heatmap, Person Center Correction, Person W & H, Body Keypoint Offsets, Body Keypoint Heatmaps, Hand Keypoint Offsets, Face Keypoint Offsets
    Face Box W & H.
  • HPRNet的网络构架如图2所示。
    在这里插入图片描述

3.1 全身关键点的层次回归

  • 在HPRNet中,我们构建了一种分层回归机制,其中我们定义了每个全身关键点与人物框上特定点的相对位置(即偏移量)。
  • 我们表示身体上的(标准)17个关键点中的每一个都与人物边界框的中心偏移。
  • 不像身体,脸和手和脚都是小部位。在此基础上,我们用相对于人体部位中心的位置定义每个部位,如下所示:
    (1)68个面关键点中的每一个都用面边界框中心的偏移量来定义;
    (2)21个左手关键点中的每一个都用左手边界框中心的偏移量来定义;
    (3)21个右手关键点中的每一个都用与右手边界框中心的偏移量来定义;
    (4)3个左脚关键点中的每一个都用左脚边界框中心的偏移量来定义;
    (5)3个右脚关键点中的每一个都用右脚边界框中心的偏移量来定义;
    人脸、手和脚的边界框自动从groundtruth关键点注释中提取。
  • 我们将脸部、左手、右手、左脚和右脚的边界框中心视为身体部分的关键点,并使用与人框中心的偏移值定义每个关键点(图3)。
  • 在推理中,在检测到输入图像中的所有关键点后,我们将它们分组并分配给人物实例。为了实现这一点,我们从CenterNetPerson Center Heatmap分支的输出中获得预测的人员中心。
  • 接下来,我们获得Body Keypoint Offsets分支输出的预测人中心位置的偏移值。之后,我们将这些偏移量添加到人物中心,以获得 regressed 身体关键点位置。
  • 同时,我们从Body Keypoint Heatmaps分支的输出热图中提取 detected body关键点。
  • 最后一步,我们根据L2距离对detectedregressed 关键点进行匹配,只取预测人物边界框内的关键点。
  • 接下来,我们对脸和手的关键点(以及脚的关键点,如果我们使用 Hierarchical Model-1)(如图4 b)进行分组。
    在这里插入图片描述
  • 我们从Body Keypoint Heatmaps分支的输出中得到预测的人体部位中心。
  • 然后,我们在Hand Keypoint offset和Face Keypoint offset分支输出对应的预测部位中心位置上收集偏移值。
  • 最后,我们将这些偏移量添加到部位中心,以获得脸和手的关键点。

3.2 足部关键点回归

  • 理想情况下,COCO WholeBody数据集中每个标记的脚部分应该有3个关键点注释。然而,超过20%的注释脚缺少注释 (例如,它们有一个或两个关键点注释,而不是三个)。
  • 这些缺失的注释对HPRNet提出了挑战,因为我们自动从标注的极值点提取足中心。
  • 在缺少足部关键点的情况下,得到的足部中心点不可靠。
  • 为了处理这个问题,我们将脚关键点视为身体关键点,如图4c所示,并通过它们与人物边界框中心的偏移量来表示它们。

3.3 网络架构

  • 给定大小为4H × 4W × 3的输入图像,骨干网络输出大小为H × W × D的特征图。
  • 主干的输出被馈送到以下后续分支。
  • 每个分支有一个带有1 × 1滤波器的卷积层,之后是一个ReLU层和另一个带有1 × 1滤波器的卷积层。
  • (1)Person Center Heatmap 分支输出H × W大小的张量,用于人中心点预测。
  • (2)Person Center Correction分支为中心位置在空间轴上的局部偏移预测H × W × 2大小的张量。这些偏移量有助于恢复由于网络下采样操作而丢失的中心点精度。
  • (3)Person Box W & H分支为每个Person实例中心输出H × W × 2大小的宽度和高度张量。
  • (4)Body Keypoint Offsets 分支预测26个关键点(17个身体关键点+ 6个脚关键点+脸框中心+左手框中心+右手框中心)到person Box中心横跨x和y轴的偏移量。
  • (5)Body Keypoint Heatmaps 分支为26个关键点输出H × W × 26大小的热图张量。
  • (6)Hand Keypoint offset 分支输出H × W × 84大小的张量,其偏移值在21个左手关键点和左手框中心之间; 以及21个右手关键点与右手框在空间轴上的中心之间的偏移值。
  • (7)Face Keypoint Offsets 分支输出H × W × 136大小的张量,其偏移值在68个面部关键点和面框中心之间跨越空间轴。
  • (8)Face Box W & H 分支为每个面输出宽度和高度为 H × W × 2 大小的张量。这是一个可选的分支。

3.4 目标函数

PCH and BKH > Focal Loss (热图检测)

  • 为优化 Person Center Heatmap(PCH)和 Body Keypoint Heatmap(BKH)分支,我们使用先前工作中改进的 focal loss。focal loss (FL)如式1所示。
    在这里插入图片描述
  • I∈R4W×4H×3是我们的输入图像。
  • 在HPRNet中,由于降采样操作,每个分支的空间输出大小减小了4倍,从而得到 W ×H。
  • 因此,Y∈[0,1]W×H×C是人中心和关键点的ground truth热图。
  • C 对应类别数量和关键点类型。例如,在Person Center Heatmap分支,我们只有人类,因此C = 1。
  • Y^ ∈[0,1]W×H×C是分支输出的预测热图,其中 Y^x,y,c = 1 表示人中心或关键点出现在位置(x,y)为c类。
  • 在以下所有方程中,N 为图像 I 中ground truth人中心或关键点的总数。
  • α和β为 focal loss 参数,设为α = 2, β = 4(参照CenterNet)。

PCC > L1 Loss(误差补偿)

  • 为了补偿由于网络下采样操作导致的人中心点的离散化误差,我们根据类似于自下而上的目标检测器的 L1 loss 来优化 Person Center Correction。
    在这里插入图片描述
  • T^ ∈ RW×H×2是网络预测的局部偏移量,用于恢复人中心点的丢失精度。
  • p ∈ R2是 ground truth 的关键点;p~ = [p/4] 为低分辨率下对应的 ground truth 关键点位置。

BKO/HKO/FKO > L1 Loss (关键点回归)

  • 我们优化Body Keypoint Offset,Hand Keypoint Offset和Face Keypoint Offset偏移分支使用 L1 loss
  • 关键点回归的一般公式如式3所示。
    在这里插入图片描述
  • 式中,O^ ∈ RH×W×k×2为特定全身部位(即身体、面部、手) 关键点 k 的回归输出。
  • Bpart 是该部分边界框的真实中心。

PB/FB > L1 Loss (Box的长和宽回归)

  • 最后,对于Person Box H & W和Face Box H & W分支,我们使用 L1 loss 并将其缩放0.1(参照CenterNet)。
    在这里插入图片描述
  • Sn = (w,h)是每个对象(或面部) n 的宽度和高度值,S^ ∈ RW×H×2是预测的宽度和高度值。

总Loss

  • 我们将所有分支机构的损失加起来,得出总体损失如下:
    在这里插入图片描述

4. 实验

4.1 数据集

COCO WholeBody dataset

4.2 实验结果

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

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

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

相关文章

【MFC】05.MFC第一大机制:程序启动机制-笔记

MFC程序开发所谓是非常简单,但是对于我们逆向人员来说,如果想要逆向MFC程序,那么我们就必须了解它背后的机制,这样我们才能够清晰地逆向出MFC程序,今天这篇文章就来带领大家了解MFC的第一大机制:程序启动机…

《向量数据库指南》——Rockset 为实时数据库添加向量嵌入支持(一)

2023年4月18日,数据库供应商 Rockset 公布了对向量嵌入的支持,此举旨在使用户能够实时搜索和操作任何类型的数据。 位于加利福尼亚州圣马特奥的 Rockset 以前支持结构化和半结构化数据,让用户可以使用 SQL 和 NoSQL 实时搜索和分析数据。 现在,通过增加对向量嵌入的支持…

海康威视摄像头二次开发_云台控制_视频画面实时预览(基于Qt实现)

一、项目背景 需求:需要在公司的产品里集成海康威视摄像头的SDK,用于控制海康威视的摄像头。 拍照抓图、视频录制、云台控制、视频实时预览等等功能。 开发环境: windows-X64(系统) + Qt5.12.6(Qt版本) + MSVC2017_X64(使用的编译器) 海康威视提供了设备网络SDK,设备网…

2023暑假牛客多校6- E.Sequence

题目描述 You have an array of elements . For each task, you have three integers . Ask whether you can find an array of integers satisfy: are the multiplies of 2 Specially, if , it should satisfy is the multiply of 2 We define . If possible, print…

Java虚拟机怎样设置CLASSPATH的环境变量?

CLASSPATH环境变量用于保存一系列类包的路径,它和PATH环境变量的查看与配置方式完全相同。当Java虚拟机需要运行一个类时,会在CLASSPATH环境变量定义的路径下寻找所需的.class文件和类包。 为了让Java虚拟机能找到所需的class文件,就需要对C…

模拟实现消息队列项目(系列3) -- 服务器模块(硬盘管理)

目录 前言 1. 创建项目 2. 创建核心类 2.1 Exchange 2.2 MSQueue 2.3 Binding 2.4 Message 3. 数据库设计 3.1 SQLite 配置 3.2 Mapper层代码实现 3.2.1 创建表操作 3.2.2 交换机 队列 绑定的增加和删除 3.3 实现DataBaseManager 3.4 DataBaseManager单元测试 4.…

【JS】实现系统取色器

效果 使用环境说明 根据当前的信息,截至到 2023 年 8 月,以下是一些支持使用 new EyeDropper() 的主要浏览器(可能还有其他浏览器也提供了类似的功能): Google Chrome:从 Chrome 94 版本开始引入了 new Ey…

Linux下共享windows 一键搞定

编写脚本 [rootlocalhost ~]# vim dd.sh#!/bin/bash yum -y install samba mkdir -p /home/shar sss dddecho " [share]comment Shared Folderpath /homebrowseable yeswritable yesguest ok yes " > /etc/samba/smb.confchmod x /home/* useradd qqqq s…

Qgis核密度分析

不建议使用Qgis进行核密度分析,建议使用arcgis,arcgis更简单。 arcgis核密度分析 Qgis核密度分析有两种: 法一:符号化,热图。 缺点:使用不方便,只适合看一下效果。 法二:工具栏搜索&#xff…

linux和C++中的 线程同步与线程安全 对比

线程同步与线程安全 线程进程与线程的区别并发和并行的区别linux线程常用接口函数函数定义函数使用 多线程理解 线程同步五个线程同时启动&#xff0c;每一个循环打印3次五个线程&#xff0c;每一个循环1000 结果是<5000代码和测试结果测试结果分析可以用信号量和互斥锁解决…

C语言标准定义的32个关键字

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。 …

PyTorch搭建神经网络

PyTorch版本&#xff1a;1.12.1PyTorch官方文档PyTorch中文文档 PyTorch中搭建并训练一个神经网络分为以下几步&#xff1a; 定义神经网络定义损失函数以及优化器训练&#xff1a;反向传播、梯度下降 下面以LeNet-5为例&#xff0c;搭建一个卷积神经网络用于手写数字识别。 …

日志分析和流量分析

目录 [陇剑杯 2021]日志分析&#xff08;问1&#xff09; [陇剑杯 2021]日志分析&#xff08;问2&#xff09; [陇剑杯 2021]日志分析&#xff08;问3&#xff09; [陇剑杯 2021]简单日志分析&#xff08;问1&#xff09; [陇剑杯 2021]简单日志分析&#xff08;问3&#…

智慧水利整体解决方案[43页PPT]

导读&#xff1a;原文《智慧水利整体解决方案[43页PPT]》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 完整版领取方式 完整版领取方式&#xff1a; 如需获取完整的…

docker小白第一天

docker小白第一天 docker是什么docker理念容器与虚拟机比较docker能干什么docker官网介绍docker的基本组成docker平台架构 docker是什么 系统平滑移植&#xff0c;容器虚拟化技术。即源代码配置环境版本&#xff0c;打个包形成一个镜像文件&#xff0c;即软件带环境一起安装&a…

企业接口测试流程总结,你都走了哪些弯路?背锅不存在的...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 首先我们要明确&a…

LeetCode 周赛上分之旅 # 37 多源 BFS 与连通性问题

⭐️ 本文已收录到 AndroidFamily&#xff0c;技术和职场问题&#xff0c;请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问。 学习数据结构与算法的关键在于掌握问题背后的算法思维框架&#xff0c;你的思考越抽象&#xff0c;它能覆盖的问题域就越广&#xff0c;理解难度…

ArcGIS制作带蒙版的遥感影像地图

这次文章我们来介绍一下&#xff0c;如何通过一个系统的步骤完成ArcGIS制作带蒙版的遥感影像地图。 主要的步骤包括&#xff1a; 1 添加行政区划数据 2 导出兴趣去乡镇矢量范围 3 添加遥感影像底图 4 制作蒙版 5 利用自动完成面制作蒙版 6 标注乡镇带晕渲文字 7 …

Golang 包详解以及go mod

Golang 中包的介绍和定义 包(package)是多个 Go 源码的集合,是一种高级的代码复用方案,Go 语言为我们提供了 很多内置包,如 fmt、strconv、strings、sort、errors、time、encoding/json、os、io 等。 Golang 中的包可以分为三种:1、系统内置包 2、自定义包 3、第三方包…

云服务器SVN仓库搭建(以阿里云为例)

远程连接阿里云服务器 安装svn(注意需要root权限使用命令sudo su) yum install subversion 安装成功后查看svn版本 svnserve --version 创建版本库的根目录 mkdir /var/svn 创建代码仓库 svnadmin create /var/svn/test 当前生成的目录结构 此处为svn的配置文件 创建用户名…