Robust Pose Estimation in Crowded Scenes with Direct Pose-Level Inference 阅读笔记

news2025/1/22 8:29:03

基于直接姿态级推理的拥挤场景鲁棒姿态估计

NeurIPS 2021
论文链接
代码链接

摘要:拥挤场景下的多人姿态估计具有挑战性,因为重叠和遮挡使得难以检测人体边界框并从单个关键点推断姿态线索(关键点位置)。为解决该问题,本文提出一个无需bbox检测和关键点分组的直接姿态级推理策略。姿态级推理网络(Pose-level Inference Network:PINet)不推理单个关键点,而是直接从人的可见身体部分推理出完整的姿态线索。PINet先应用 Part-based Pose Generation (PPG) 从每个人的身体部分推理出多个粗糙姿态,然后 Pose Refinement module 通过合并姿态先验来细化粗糙姿态并最终在 Pose Fusion module 中进行融合。PINet依靠辨别身体部位来区分重叠的人,并应用视觉身体线索来推理全局姿态线索。 在几个拥挤场景姿态估计基准上的实验证明了PINet的优越性。例如,它在OCHuman数据集上获得了59.8% AP,大大超过最近的研究工作。

文章目录

  • 基于直接姿态级推理的拥挤场景鲁棒姿态估计
  • 1 Introduction
  • 2 Related Work
  • 3 Methodology
    • 3.1 Overview
    • 3.2 Part-based Pose Generation
    • 3.3 Pose Refinement
    • 3.4 Pose Fusion
  • 4 Experiments
    • 4.1 Datasets and Evaluation Protocol
    • 4.2 Implementation Details
    • 4.3 Ablation Study
    • 4.4 Comparison with Recent Works
  • 5 Discussion and Conclusion


1 Introduction

拥挤场景下由于人体重叠很难检测精确的人体边界框,且检测中常用的 NMS 往往会抑制密集的边界框,导致人体漏检,这些问题降低了 top-down 方法的准确性。重叠和遮挡导致的不可见关键点也使 bottom-up 法难以从单个关键点推理出准确的姿态线索。
如图1(a) 和 (b) 所示,现有工作通常在拥挤场景中存在人体检测和关键点分组失败的问题。本文致力于一项无需人体检测与关键点分组的pipeline进行多人姿态估计。我们将人体姿态视为一个推断目标,并从一个人的可见身体部位直接推断出完整的姿态线索,即所有身体关键点的位置,换句话说:依靠有区别的可见部位,例如头,来区分重叠人体。 我们应用可见部位线索上下文来推断全局姿态,包括可见和不可见的关键点。由于该pipeline直接推断完整姿态线索,我们将其命名为:Direct Pose-Level Inference (DPLI)。这一想法也受到了根据可见线索推断不可见线索工作:Progressive Refinement Network for occluded pedestrian detection,Peeking into occluded joints: A novel framework for crowd pose estimation,Occlusion-aware r-cnn: detecting pedestrians in a crowd. 的启发,例如,PRNet 根据可见身体部位和人边界框优先比率来检测被遮挡的人体。

在这里插入图片描述

图1: (a) Top-down 法难以检测红色边界框中的重叠人体;(b) bottom-up 法对红圈中被遮挡的关键点敏感,因此无法推断出准确的姿态线索;(c) DPLI从身体部分(例如,图中的三个部分)推断初始姿态线索。初始部位线索被细化并融合,以获得被遮挡者的姿态线索。

使用 PINet 实现DPLI,从粗到细逐步推断被遮挡的姿态。
由于缺少可见部位标注,根据图3中的设置将每个人分成几个部分,以获取并利用可见部位。Part-based Pose Generation (PPG) 从每个部分生成初始姿态线索,随后 Pose Refinement model 采用动态图卷积利用上下文和姿态结构来优化姿态,最后,PINet使用 Pose Fusion model 来识别属于同一个人的姿态线索,并将其融合为最终的姿态估计。
在 OCHuman和CrowdPose 上的实验结果表明 PINet 对于遮挡姿态估计的有效性。例如,PINet 在OCHuman上实现了59.8%AP,分别超出 OPEC-Net和DEKR 30.7%和7.8%。PINet 在CrowdPose 的 Hard test set上实现了62.2%AP,优于 DEKR 4.7%。
OPECNet 也通过在可见关键点和上下文上应用图卷积网络(GCN)来检测被遮挡的关键点,但 OPEC-Net 应用 top-down 策略,需要边界框来区分人体,因此存在人体检测问题。据我们所知,DPLI 是一项针对拥挤场景姿态估计的的独创性贡献,它不同于 top-down 和 bottom-up pipeline。大量实验验证了PINet的有效性,显示出 DPLI pipeline 的潜力。

2 Related Work

Crowded Scenes Pose Estimation. CrowdPose 构建了一个大型拥挤姿态估计基准,并提出应用全局关联来处理拥挤场景。OPEC-Net 引入图卷积网络来改进初始估计姿态,但它需要边界框来区分人体,因此存在人体检测问题。PINet遵循一种新的直接姿态级推理 pipeline,对拥挤场景中的人体检测和关键点分组更加鲁棒。

3 Methodology

3.1 Overview

给定具有多个人的图像 I ,目标是估计每个人的姿态关键点的位置:
在这里插入图片描述
其中 { K ( i ) } 和 { K ˉ ( i ) } \{K^{(i)}\}和\{\bar{K}^{(i)}\} {K(i)}{Kˉ(i)}分别表示第 i 个人的可见和不可见关键点,m表示图像 I 中的人数。使用 n = ∣ { K ( i ) } + { K ˉ ( i ) } ∣ n=|\{K^{(i)}\}+\{\bar{K}^{(i)}\}| n={K(i)}+{Kˉ(i)} 表示每个人的关键点个数(OCHuman的n=17,CrowdPose的n=14)。
PINet 直接为每个人推断出完整的姿态线索: { { K ( i ) } , { K ˉ ( i ) } } \{\{K^{(i)}\}, \{\bar{K}^{(i)}\}\} {{K(i)},{Kˉ(i)}},为实现这一目标,我们采用 Structure Pose Representation (SPR) 将姿态线索表示为一个点 p 和 offset set: o,即:
在这里插入图片描述
(x,y) 表示点 p 的坐标, ( δ x k , δ y k ) (δx_k, δy_k) (δxk,δyk) 表示第k个姿态关键点到 p 的偏移。根据 eq1,姿态估计可以通过检测p和估计偏移o来进行。(center-offset 法)
训练阶段应仔细选择 p,p应该位于有区分的且未被遮挡的部位,以推断出高质量的姿态显示。SPR使用中心点作为 p 可能会产生遮挡,因此我们将每个人分成 s 个部分,每个部分的中心用作p。3.2节和图3 详细讨论了身体分区和p的选择。
为定位每个人的 { p j } j = 1 s \{p_j\}^s_{j=1} {pj}j=1s并获取相应的 { o j } j = 1 s \{o_j\}^s_{j=1} {oj}j=1s,我们提出PPG来推理每个部分的置信图和偏移图,即:
在这里插入图片描述
P j P_j Pj表示第 j 部分位置的置信图, O j O_j Oj 表示偏移图,Φ(·) 代表特征提取backbone。通过在 P j P_j Pj 上应用NMS 获取多个局部最大点 p j ∈ P j p_j∈ P_j pjPj 并采样其对应的偏移量 o j ∈ O j o_j∈O_j ojOj来获取初始姿态线索, { p j , o j } \{p_j, o_j\} {pj,oj} 对,组成初始姿态 P j ′ P'_j Pj
PR 模块根据姿态结构先验G和特征图F中的上下文信息来优化粗糙姿态 P j ′ P'_j Pj,即:
在这里插入图片描述
因为每个部分都预测一个姿态线索,所以同一个人存在重复姿态,因此使用后处理模块PF来识别重复的姿态线索:
在这里插入图片描述
P ( i ) P^{(i)} P(i) 表示第i个人的最终姿态估计,t是由PPG和PR生成的姿态数量。PF可以通过测量姿态线索间的相似性合并相似姿态来实现。
通过以端到端的方式训练 backbone Φ(·)、PPG(·) 和 PR(·) 模块来学习PINet。总体训练目标为:
在这里插入图片描述
图2 为 PINet 的pipeline。通过使用PPG、PR和PF,即使高度遮挡也能推断出高质量的人体姿态。

在这里插入图片描述

图2:PINet的框架。使用CNN提取特征图。Part-based Pose Generation (PPG) 从不同的身体部分(用不同颜色的圆圈表示)中推断出整个人粗糙的姿态。Pose Refinement (PR) 使用动态姿态关键点图来优化粗糙的人体姿态。PF 融合来自不同部分的姿态并输出最终姿态。图只显示了被遮挡者姿态。

3.2 Part-based Pose Generation

根据人体骨架将每个人分成 s 个身体部分,以利用可见信息,通常身体分区越细,越可能存在可见部分,但小的部分缺乏全局上下文信息,难以回归完整的人体姿态 offset,且 s 过大也会加大密集回归优化的难度。
如图3所示,分区策略由粗到细列出,例如,center 表示将人分成一个部分,而 keypoints 表示使用13个部分。为测试不同分区策略对遮挡的鲁棒性,图3列出了OCHuman上的遮挡率,没有任何可见关键点的分区被视作遮挡,从图中可以看出分区越精细,对遮挡越鲁棒,但Sec.4也验证了使用过多部分难以优化模型,part-large 分区策略能实现很好的 trade-off,因此我们将每个人分为 s=3 个部分,即上部、中部和下部(upper,middle,bottom)。

在这里插入图片描述

图3:PPG中不同身体分割策略图解:(a)五种不同的分割策略,矩形表示身体部位,棕色圆圈表示部位中心,(b)对应于OCHuman数据集中的遮挡率统计。

根据上述分析,PPG为每个人检测上中下三部分,并生成相应的offset,遵循 CenterNet,通过用热图 P 估计部分的center来检测每个part。具体而言:backbone生成的特征图 F=Φ(x) 喂给关键点检测头和偏移回归头:
在这里插入图片描述
P j , O j P_j, O_j Pj,Oj 分别表示 j-th part 和相应的offset map,u,m,b 分别代表 upper,middle,bottom 三个parts。采用 trade-off l2 regression loss 来学习Pj,使用smooth l1 loss 来学习 Oj:
在这里插入图片描述
上标 * 表示 gt label, P = [ P u ; P m ; P b ] P=[P_u; P_m; P_b] P=[Pu;Pm;Pb] 代表 points map,M是一个用于降低背景权重的mask,part center 区域的权重为1,其他的为0.1。Ω 表示特征图上 part中心及其相邻点的 index set,Si是第i个人的 area。根据[Single-stage multi-person pose machines] 获得 GT。PPG 损失是上述两个损失的权重和,即:
在这里插入图片描述

3.3 Pose Refinement

尽管PPG可以生成完整的人体姿态,但它仍存在几个问题:① 首先,part-based 生成策略增强了PINet 的遮挡鲁棒性,但消除了每个部分推断整体姿态的人体全局信息,例如,由于感受野有限,upper 特征难以编码脚。② 其次,被遮挡的关键点应该借助关键点连接(即姿态结构)而不仅仅是用视觉信息来推断。
因此我们提出PR 模块来解决上述问题,对于 PPG 中的点特征 f p f_p fp 生成的姿态 P j ′ \mathcal{P}_j' Pj ,为其提供关键点特征 f k f_k fk 来编码人体全局信息,关键点特征通过对特征图 F(F 编码 k-th 关键点位置)双线性插值上采样获取。为充分利用姿态结构姿态先验,我们提出一个动态图卷积网络 DGCN 利用关键点连接信息来细化并聚合关键点特征:
在这里插入图片描述
W是 DGCN 参数,σ表示ReLU, X l X^l Xl X l + 1 X^{l+1} Xl+1 是第l层的原始和更新后的特征,G是根据人体骨架初始化并作为模型参数更新的动态图。我们采用具有残差连接的3层DGCN来细化这些特征,初始特征矩阵X0的每一行表示一个关键点,应用最大池和平均池应来细化的关键点特征,以获得姿态的全局特征与 fp concat,并pass 给两个全连接层来预测初始姿态 P j ′ \mathcal{P}_j' Pj 和 gt 间的 offset: ∆ P j ′ ∆\mathcal{P}_j' Pj。细化后的姿态即为:
在这里插入图片描述
类似于 offsetmap loss,通过下式计算 refinement loss:
在这里插入图片描述
T \mathcal{T} T是PR细化的采样姿态集,Si是第 i 个人的面积。

Discussions. OPEC-Net 也使用GCN,但 PR 在几个方面与之不同:① 首先,OPEC-Net专注于推断被遮挡的关键点,以关键点坐标作为输入,因此需要额外的特征自适应模块来提取上下文信息。而 PR 专注于利用姿态结构先验提取人体全局信息,不需要额外的模块。② 其次,PR采用动态图来细化关键点特征,可以捕获更多的关键点关系,例如,左右身体间没有骨架连接,但当右踝关节被遮挡时,可以参考左踝关节和膝盖进行推断。动态图更灵活,可以通过模型学习捕捉这些属性。图2显示了训练期间动态图的一个示例。

3.4 Pose Fusion

PPG从不可见的身体部位生成重复姿态和低质量姿态,因此需要 pose-processing 操作进行消除,但由于long regression,不同 parts 生成的重复姿态的良好关键点不同,因此可以将其融合来获得更好的结果。upper part 回归的姿态在定位鼻子关键点上表现良好,但 bottom part 推断的姿态不擅于定位该关键点。基于上述分析,我们提出一个 PF 模块来融合重复姿态并移除低质量姿态。
给定 PPG 和 PR 推断的姿态: { P ^ j } j = 1 t \{\hat{P}_j\}^t_{j=1} {P^j}j=1t,PF先基于 OKS的匹配策略(OKS-NMS)找出属于同一人体的 pose set,即,对于两个姿态,通过以下公式计算它们的OKS:
在这里插入图片描述
αk是控制衰减的每个关键点常数,若两个姿态间的OKS大于γ,则二者为重复姿态。根据上述匹配策略和NMS操作,可以将 { P ^ j } j = 1 t \{\hat{P}_j\}^t_{j=1} {P^j}j=1t 分为m个组,其中每个组 { P ^ j } j = 1 t i \{\hat{P}_j\}^{t_i}_{j=1} {P^j}j=1ti 表示第 i 个人的 pose set,然后PF遍历每个pose set: { P ^ j } j = 1 t i \{\hat{P}_j\}^{t_i}_{j=1} {P^j}j=1ti,并选择 top-n 得分的关键点来构建最终人体姿态: P ( i ) P^{(i)} P(i)
第k个关键点得分由 r=rp·rk 计算,rp是 P 中点(每个part的中心点)的置信度得分,rk是通过热图获得的关键点置信度得分。PPG生成的低质量姿态的 rp 较小,因此不会出现在最终结果中,rk有助于选择估计良好的关键点并缓解 long regression 问题。实现中,学习带有 point map P 的 score map,并将等式7更改为:
在这里插入图片描述
Discussions. PF是一种 model-agnostic 操作,也可以应用于其他回归方法。但它更适用于重复预测来自不同 part 而不仅仅是中心点。

4 Experiments

4.1 Datasets and Evaluation Protocol

数据集用了OCHuman、CrowdPose、COCO,评估标准遵循各数据集的评估准则,基于OKS的AP。

4.2 Implementation Details

基于PyTorch,采用 ImageNet 上预训练的HRNetW32 作为 backbone。所有实验的 λ和λo设置为0.03,γ设为0.7。对于PR,为每个 part 从PPG中抽取40个姿态。

训练:输入图像的大小调整为512*512,使用 Adam 优化模型,所有层的学习率都设置为0.001。在OCHuman和COCO上训练 140 epoch,学习率在第90、120 peoch 降为 0.0001。在 CrowdPose 训练 300 个peoch,并在第200、260 epoch 将学习率除以10。OCHuman 的 batchsize=20,CrowdPose和COCO 的 batchsize 设为40。采用了随机旋转(-30,30)、缩放([0.75,1.5])、平移([-40,40])和翻转(0.5)等数据增强策略。

测试:将图像的短边调整为512,保持高宽间的纵横比,采用单尺度和多尺度([0.5,1.0,2.0])测试。

4.3 Ablation Study

Components analysis. 结果如表1所示。
在这里插入图片描述

表1:PINet单个组件的消融研究。

在这里插入图片描述

图4:OCHuman test set 的定性结果。每幅子图依次为: PPG、PPG+PR和PPG+PR+PF的预测结果。从图中可以观察到,PR和PF都可以提高关键点定位的准确性。

4.4 Comparison with Recent Works

在这里插入图片描述

表2:OCHuman test set 上与 sota 的比较。∗ 表示基于作者源码的实现。

在这里插入图片描述

表3:代表性top方法和PINet的GFLOPs和参数。∗ 表示我们的实现。

在这里插入图片描述

表4:CrowdPose test set 上与 sota 方法的比较。∗ 表示我们的实现。†表示多尺度测试。

在这里插入图片描述

图5:不同IoU阈值下与DEKR、SPM和PINet的比较。我们的方法总是优于其他方法,尤其在高度拥挤的场景(高IoU)。

在这里插入图片描述

表5:COCO和OCHuman上与sota方法的比较。模型在COCO train set上训练。

5 Discussion and Conclusion

本文解决了拥挤场景下的多人姿态估计问题。我们提出的PINet 通过一个使用身体部分线索和姿态结构先验的直接姿态级推理 pipeline,能显著提高拥挤场景下的多人姿态估计性能。在几个拥挤场景姿态估计基准上的实验验证了我们方法应对遮挡的有效性,但拥挤场景的性能仍低于非拥挤场景。此外,PINet直接回归姿态,不如热图法准确。需要进一步研究来解决这些问题。

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

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

相关文章

[MySQL]-死锁案例-唯一索引上的并发插入

[MySQL]-死锁案例-唯一索引上的并发插入 森格 | 2022年12月 本文是对实际work中遇到的死锁问题的复现,其目的是学会去分析死锁日志、还原日志上下文、理解死锁产生原因、MySQL处理机制(回滚事务的选择),最后到死锁的解决方案的提…

7张图,剖析Redis缓存,文末附Redis工具类源码,建议收藏

一、缓存是什么? 缓存就是数据交换的缓存区,是存储数据的地方,一般读写性能较高。 二、缓存的作用和成本 1、缓存的作用 降低后端负载 提高读写效率,降低响应时间 2、缓存的成本 数据一致性成本 代码维护成本 运维成本 三、…

IDEA中新建找不到Vue Component | IDEA右键Create New Servlet找不到Setvlet

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 解决:IDEA中新建找不到Vue Component 打开IDEA,依次打开 (文件——设置——编辑器——文件或代码模板) 找到右侧&#…

Spring—Spring AOP1

文章目录AOP概念的引入AOP相关的概念1.AOP的概述2. AOP的优势3. AOP的底层原理如何利用AOP对原有业务进行增强利用注解方式切入点表达式AOP相关的术语————————————————————————————————AOP概念的引入 首先我们来看一下登录的原理 如上图所示这…

【云原生 | Kubernetes 实战】16、K8s 配置管理中心 ConfigMap 实现微服务配置管理

目录 一、ConfigMap 概述 1.1 什么是 ConfigMap? 1.2 ConfigMap 能解决哪些问题? 1.3 ConfigMap 应用场景 1.4 局限性 二、ConfigMap 创建方法 2.1 根据字面值创建 ConfigMap 2.2 基于文件创建 ConfigMap 2.3 基于目录创建 ConfigMap 2.4 编…

【大数据系列之MySQL】(二十二):MySQL中的分组查询group by

对于常见的函数都是单行函数,说白了就是一一映射,输入一个值则输出对应的值,但是MySQL中还存在聚合函数就是输入一组值则返回一个值,常见的例如:sum、max等 很多时候需要对数据中的某些字段进行分组,探究每…

%27 CORS 跨域资源共享

1、CORS (跨域资源共享) 由一系列的 HTTP 响应头组成,这些响应头可以决定浏览器是否阻止前端 js 代码跨域获取资源 2、CORS 的响应头 (1)、Access-Control-Allow-Origin res.setHeader(‘Access-Control-Allow-Origin’…

web:常见安全问题

一、XSS XSS(Cross-Site Scripting),跨站脚本攻击,因为缩写和css重叠,所以只能叫XSS。跨站脚本攻击是指通过存在安全漏洞的web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击。 跨站脚本攻击有可能造成一下影响&#…

记一次赤裸裸的教训:All elements are null

wshanshi:记一次赤裸裸的教训…All elements are null… 一、异常信息 数据库查询统计相关业务,未使用分组group by,仅单独使用聚合函数。如下图所示,使用了SUM()函数。 假如数据库中未匹配到相关数据,结果集用List接…

希尔伯特-包络分析步骤与实例

希尔伯特-包络分析流程 对于齿轮箱振动信号而言,由于存在多对齿轮同时参与啮合,那么,测量得到的信号将可能出现多个以齿轮啮合频率或及谐频为载波频率、轴频为调制频率的幅值调制、频率调制或混合调制的情况,除此之外&#xff…

logback+slf4j日志详解

前言 项目中日志系统是必不可少的,目前比较流行的日志框架有log4j、logback等,可能大家还不知道,这两个框架的作者是同一个人,Logback旨在作为流行的log4j项目的后续版本,从而恢复log4j离开的位置。 另外 slf4j(Simp…

第二证券|昨日涨停,今日1分钟闪崩跌停,超1亿资金排队“出逃”!

养老概念股悦心健康(SZ002162)在接连2个涨停后,12月21日早盘,悦心健康大幅低开,1分钟闪崩跌停。 值得注意的是,20日盘后龙虎榜数据显现,万和证券股份有限公司成都通盈街证券营业部净买入1492.92…

HttpUnit是什么?如何应用?

推荐阅读: [内部资源] 想拿年薪30W的软件测试人员,这份资料必须领取~ Python自动化测试全栈性能测试全栈,挑战年薪40W 什么是HttpUnit? HttpUnit是基于JUnit构建的一个开源的测试框架,专门针对Web应用的测试,用于解…

TM32 DMA1和DMA2通道一览表、STM32F103C8T6定时器通道对应的引脚

TIM1_BRK_IRQn 24, TIM1_UP_IRQn 25, TIM1_TRG_COM_IRQn 26, TIM1_CC_IRQn 27, TIM2_IRQn 28, TIM3_IRQn 29, 这个函数TIM_SetCompare1&#xff0c…

计算机毕设Python+Vue学习互助平台网站(程序+LW+部署)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 Ma…

Redhat rpm常用命令以及如何配置yum软件仓库使用yum install

yum 软件仓库配置教程一、RPM(红帽软件包管理器)二、Yum 软件仓库简介三、注册Red Hat开发者四、配置 Yum 软件仓库一、RPM(红帽软件包管理器) 在 RPM(红帽软件包管理器)公布之前,要想在 Linux…

如何用 Python 在 Excel 中画柱状图

我们手动在 Excel 表格中画柱状图是很简单的事情,但是一旦这种简单的工作需要每天都做,那么最好的办法就是用 Python 来自动完成。 今天分享一招,如何用 Python 在 Excel 中画柱状图。 这里借助于工具 openpyxl,如果有更好的工具…

2. 【gRPC系列学习】 创建一元gRPC的客户端与服务端

学习讲求循序渐进,在分析代码原理之前应该熟练使用,本节我们一起搭建最简单一元gRPC模式,其中也包含安装protoc工具。 1. 创建项目目录结构 pb文件夹用于存放proto文件以及生成的pb文件 client文件夹存放客户端代码 server文件夹存放服务端代码 现在并未创建这几个文件,里面…

更懂城市、更懂人:闪马智能再添双认证

在中国工程院院刊《Engineering》刚刚发布的“2022全球十大工程成就”中,北斗卫星导航系统、嫦娥探月工程以及新冠病毒疫苗研发应用等重大创新,无不显现出人类推动科技发展边界突破的决心和勇气,为人类文明进步提供不竭动力。 眼下&#xff…

Pegasus Serial Port Tool @ Simplicity Version 串口测试工具简化版发布

Pegasus Serial Port Tool Simplicity Version 串口测试工具简化版发布 基于Electron桌面软件开发平台制作的PSPT ( Pegasus Serial Port Tool ) 串口测试工具发布简化版。免费用于任何个人和商业环境使用。 平台:Windows 11 / Windows 10 / Windows 7 介绍&…