目标检测论文阅读:GaFPN算法笔记
标题:Construct Effective Geometry Aware Feature Pyramid Network for Multi-Scale Object Detection
会议:AAAI2022
论文地址:https://ojs.aaai.org/index.php/AAAI/article/view/19932
文章目录
- Abstract
- 1. Introduction
- 2. Related Work
- 2.1. Object Detectors
- 2.2. Mapping Strategy
- 2.3. Predictor Heads
- 3. Method
- 3.1. Geometry-aware Mapping Module
- 3.2. Geometry-aware Predictor Head
- 4. Experiments
- 4.1. Dataset and Evaluation Metrics
- 4.2. Implementation Details
- 4.3. Main Results
- 4.4. Ablation Study
- 4.5. Runtime Analysis
- 5. Conclusion
Abstract
特征金字塔网络(FPN)被广泛用于发挥多尺度特征来解决目标检测中的尺度变化。然而,目前大多数FPN方法的固有缺陷导致其难以适应不同几何目标的特征。为了解决这个问题,我们在FPN中引入几何先验,以获得更具识别力的特征。本文提出了几何感知特征金字塔网络(Geometry-aware Feature Pyramid Network,GaFPN),该网络主要由新颖的几何感知映射模块(Geometry-aware Mapping Module)和几何感知预测头(Geometryaware Predictor Head)组成。几何感知映射模块是为了充分利用所有的金字塔特征,通过权重生成子网络获得更好的建议特征。权重生成子网络利用建议的几何信息为每一层的建议特征生成融合权重。几何感知预测头通过嵌入的生成网络将几何先验引入预测头,从而加强特征表示,用于分类和回归。我们的GaFPN可以很容易地扩展到其它具有特征金字塔的两阶段目标检测器和用于实例分割任务。在MS COCO数据集上,GaFPN相比于各种基线检测器显著提高了检测性能。
1. Introduction
特征金字塔网络(FPN)是一种经典且有效的多尺度目标检测方法。它首先构建一个特征金字塔,然后通过启发式引导的映射机制为每个proposal选择一个单层特征。最后,每个proposal的特征通过RoI Align层输入到预测头中。
尽管FPN大幅提升了多尺度目标检测的性能,但其潜力尚未得到充分挖掘,如图1所示。我们总结了两个潜在的改进如下:
①几何引导的建议映射机制。 目标proposal通过启发式规则分配到某个层的特征图中,如proposal的面积。虽然目标proposal的面积相似,但它们的纵横比可能存在显著差异。例如,一个1000×10的目标和一个10×1000的目标被分配到同一个特征图。该问题导致了一个严重缺陷,即基于启发式引导的最优特征可能难以获得。同时,最近的研究表明,只选择单层特征可能会产生次优结果,因为这种方式忽略了其它层未选择特征的有效信息。通过使用来自特征金字塔的多层特征的几何引导建议映射机制可以缓解这些问题。
②几何特征嵌入。 proposal的几何信息是分类和定位细化的关键先验知识。一方面,额外的几何先验特征可以促进两个语义相似的proposal的分类学习,从而容易区分它们。另一方面,回归值可能根据额外的几何先验特征动态变化。然而,经过特征映射后,每个目标proposal通过RoI Align层提取7×7个特征。然后将提取到的特征输入由全连接层组成的检测器头部进行分类和回归。经过上述过程,proposal的几何信息在很大程度上被忽略和破坏。因此,如何将几何特征嵌入到proposal的特征中以生成更准确的结果是一个亟待解决的问题。
这些改进启发我们提出几何感知特征金字塔网络(GaFPN),这是一种简单有效的特征金字塔网络,用于改进多尺度目标检测的特征表示。首先,几何感知映射模块充分利用所有金字塔特征,以获得更好的proposal特征,并通过权重生成子网络减少启发式引导映射的影响。权重生成子网络利用proposal的几何信息为不同层的每个proposal生成融合权重。其次,利用几何感知预测头,通过嵌入生成网络将几何特征引入分类和回归分支。它处理几何先验缺失问题,生成更具识别力的特征。嵌入生成网络利用proposal的几何信息为每个proposal生成几何嵌入值,然后通过乘法操作将几何嵌入值嵌入到proposal的特征中。在MS COCO数据集上,GaFPN相比于各种基线检测器都提高了检测性能。
我们的贡献有三方面:①我们系统地研究了FPN检测器。我们的研究揭示了限制检测性能的两个缺陷。②为了解决这些问题,我们提出了一个新的特征金字塔网络GaFPN,它结合了新的组件:几何感知映射模块和几何感知预测头。③我们在MS COCO上验证了所提出的配备有各种探测器、主干和任务的GaFPN,并且与基于FPN的探测器相比,它始终获得了显著的改进。
2. Related Work
2.1. Object Detectors
介绍了一些两阶段和单阶段的目标检测器。
2.2. Mapping Strategy
为每个proposal选择FPN中合适的特征是一个关键问题。FASF在训练时根据最小的实例损失层动态选择金字塔特征进行分配。PANet制定映射策略,为每个proposal选择所有金字塔级别的特征独立地输入全连接层,并通过元素级最大化操作将其融合。为了更好地挖掘不同层的特征,AugFPN根据学习到的权重为两阶段检测器融合所有层的特征。这些方法与我们的工作有一个明显的区别,即我们提出了一种几何感知策略,根据proposal的外部抽象几何信息而不是proposal本身的卷积特征来获取权重。
2.3. Predictor Heads
近年来提出了许多提高分类和定位精度的预测头。Cascade R-CNN采用不同交并比(IoU)阈值的多阶段R-CNN头,逐阶段获得更精确的结果。Fitness NMS设计子网络来预测定位概率。IoU-Net提出了一个IoU预测模块来预测每个proposal的IoU。后两种方法都想根据定位质量(IoU)来优化分类置信度,但IoU的预测比较困难,需要引入复杂的结构。另一个努力的方向是将分类和定位解耦。Double-Head R-CNN采用全连接头进行分类,卷积头进行回归。TSD将分类和定位与proposal和特征提取器解耦。与它们不同的是,我们的方法将几何特征嵌入到预测头中,以弥补RoI Align层造成的几何信息缺失。
3. Method
在这一部分,我们介绍几何感知特征金字塔网络(GaFPN)。我们的框架如图2所示。GaFPN由3个部分组成:几何感知映射模块(GMM)、几何感知预测头(GPH)和特征增强金字塔(FAP)。
首先,将backbone中的内在特征层次结构记为{C2,C3,C4,C5}\{C_2,C_3,C_4,C_5\}{C2,C3,C4,C5}。然后将这些特征通过一个1×1的卷积减少到同一通道,记为{M2,M3,M4,M5}\{M_2,M_3,M_4,M_5\}{M2,M3,M4,M5}。同一通道特征采用ASPP启发的特征增强和注意力机制来增强特征,构建特征增强金字塔。将新生成的特征记为{P2,P3,P4,P5}\{P_2,P_3,P_4,P_5\}{P2,P3,P4,P5}。最后,将新特征输入GMM和GPH中进行分类和回归。GMM根据几何信息自适应地融合proposal的多层特征。GPH将几何信息嵌入到proposal的特征中。
3.1. Geometry-aware Mapping Module
传统的FPN中,每个proposal的特征层都是基于proposal的面积来映射的。这可能会产生次优结果。同时,其他层的特征可能有利于目标的分类或回归。这些发现启发我们探索几何引导的proposal映射机制,并利用多层特征来获得更好的proposal特征。
我们提出几何感知映射模块(GMM),它自适应地利用每个金字塔层的特征来丰富特征表示,而不是仅使用启发式指导的一个层的特征。自适应机制通过使用权重生成子网络为每一层生成权重来实现。该子网络直接将proposal的几何信息作为输入。
几何特征生成: 我们首先对每个proposal的坐标(x1,y1,x2,y2)(x1,y1,x2,y2)(x1,y1,x2,y2)进行归一化,其计算公式如下:
x1′=x1W,y1′=y1H,x2′=x2W,y2′=y2Hx_1^{\prime}=\frac{x_1}{W},~y_1^{\prime}=\frac{y_1}{H},~x_2^{\prime}=\frac{x_2}{W},~y_2^{\prime}=\frac{y_2}{H} x1′=Wx1, y1′=Hy1, x2′=Wx2, y2′=Hy2其中,WWW和HHH表示训练图像的尺寸,作为归一化项。
然后利用归一化后的坐标生成宽度、高度、长宽比(rrr)和面积(aaa)等额外的几何特征,计算公式如下:
w=x2′−x1′,h=y2′−y1′,r=wh,a=w×hw=x_2^{\prime}-x_1^{\prime},~h=y_2^{\prime}-y_1^{\prime},~r=\frac{w}{h},~a=w×h w=x2′−x1′, h=y2′−y1′, r=hw, a=w×h最后,将这些特征concatenate在一起作为权重生成子网络的输入X∈R8\mathbf{X}\in\mathbb{R}^8X∈R8,其可以表示为:
X=CAT(w,h,r,a,x1′,y1′,x2′,y2′)\mathbf{X}=\mathrm{CAT}(w,h,r,a,x_1^{\prime},y_1^{\prime},x_2^{\prime},y_2^{\prime}) X=CAT(w,h,r,a,x1′,y1′,x2′,y2′)权重计算: 在几何特征生成阶段之后,我们为每层特征金字塔中的每个proposal计算权重。我们首先使用仅由全连接层和ReLU组成的权重生成子网络对几何特征进行变换。几何特征表示经过该变化而得到增强。然后利用变换后的特征通过sigmoid运算为不同层生成不同的权重,其定义如下:
w=σ(MLPWG(X))=σ(δW4(δW3(δW2(δW1(X)))))\begin{align*} \mathbf{w}&=\sigma(\mathrm{MLP_{WG}}(\mathbf{X}))\\ &=\sigma(\delta\mathbf{W_4}(\delta\mathbf{W_3}(\delta\mathbf{W_2}(\delta\mathbf{W_1}(\mathbf{X}))))) \end{align*} w=σ(MLPWG(X))=σ(δW4(δW3(δW2(δW1(X)))))其中,δ\deltaδ表示线性整流函数(ReLU),σ\sigmaσ是Sigmoid函数。 MLPWG(⋅)\mathrm{MLP_{WG}}(·)MLPWG(⋅)是权重生成子网络。W1\mathbf{W_1}W1是维度增加层,W2\mathbf{W_2}W2、W3\mathbf{W_3}W3和W4\mathbf{W_4}W4是维度减少层。输出权重w=[w1,w2,w3,w4]∈R4\mathbf{w}=[w_1,w_2,w_3,w_4]\in\mathbb{R}^4w=[w1,w2,w3,w4]∈R4。权重生成子网络的详细结构如图3a所示。
特征聚合: 最后,我们通过对每个proposal进行自适应多层加权聚合得到一个合并特征V\mathbf{V}V。将RoI Align层提取的多层proposal特征记为{P2′,P3′,P4′,P5′}\{P_2^{\prime},P_3^{\prime},P_4^{\prime},P_5^{\prime}\}{P2′,P3′,P4′,P5′},合并特征计算如下:
V=∑i=25wi−1⋅Pi′\mathbf{V}=\sum_{i=2}^5w_{i-1}·P_i^{\prime} V=i=2∑5wi−1⋅Pi′其中,V∈R7×7×256\mathbf{V}\in\mathbb{R}^{7×7×256}V∈R7×7×256,Pi′∈R7×7×256P_i^{\prime}\in\mathbb{R}^{7×7×256}Pi′∈R7×7×256。
这样,我们充分利用金字塔特征来丰富特征表示,而不是仅使用启发式引导的单层特征。GMM将刚性的启发式映射策略软化为可以通过反向传播来与检测器进行联合训练的自适应策略。
3.2. Geometry-aware Predictor Head
在FPN中,每个proposal被RoI Align层提取为固定大小7×7×256的特征,并输入到预测头。经过上述过程,几何信息在很大程度上被忽略和破坏。
为了解决这个问题,我们提出几何感知预测头(GPH),它通过嵌入生成子网络学习生成几何感知特征。几何感知特征弥补了RoI Align层导致的几何信息缺失。此外,为了缓解分类和回归共享特征的副作用,针对不同的任务生成不同的嵌入特征。
具体来说,嵌入生成子网络类似于GMM的映射权重生成子网络。上式中的几何特征V\mathbf{V}V在这里作为输入X\mathbf{X}X来得到嵌入特征。
嵌入值生成: 在获得几何特征后,我们首先使用嵌入生成子网络为每个proposal生成嵌入值。该子网络仅由全连接层和ReLU组成。嵌入值的定义如下:
E=MLPEG(X)=W3(δW2(δW1(X)))\mathbf{E}=\mathrm{MLP_{EG}}(\mathbf{X})=\mathbf{W_3}(\delta\mathbf{W_2}(\delta\mathbf{W_1}(\mathbf{X}))) E=MLPEG(X)=W3(δW2(δW1(X)))其中,δ\deltaδ表示线性整流函数(ReLU), MLPEG(⋅)\mathrm{MLP_{EG}}(·)MLPEG(⋅)是嵌入生成子网络。W1\mathbf{W_1}W1是维度增加层,W2\mathbf{W_2}W2和W3\mathbf{W_3}W3是维度减少层。输出嵌入值E=[E1,E2]∈R2\mathbf{E}=[E_1,E_2]\in\mathbb{R}^2E=[E1,E2]∈R2
特征嵌入: 最后,结合嵌入值和来自分和回归分支的特征(Ucls\mathbf{U_{cls}}Ucls,Ureg\mathbf{U_{reg}}Ureg)来生成嵌入特征(Ucls′\mathbf{U_{cls}^{\prime}}Ucls′,Ureg′\mathbf{U_{reg}^{\prime}}Ureg′),计算公式如下:
Ucls′=E1⋅Ucls,Ureg′=E2⋅Ureg\mathbf{U_{cls}^{\prime}}=E_1·\mathbf{U_{cls}},~\mathbf{U_{reg}^{\prime}}=E_2·\mathbf{U_{reg}} Ucls′=E1⋅Ucls, Ureg′=E2⋅Ureg其中,Ucls,Ureg,Ucls′,Ureg′∈R1024\mathbf{U_{cls}},\mathbf{U_{reg}},\mathbf{U_{cls}^{\prime}},\mathbf{U_{reg}^{\prime}}\in\mathbb{R}^{1024}Ucls,Ureg,Ucls′,Ureg′∈R1024。
嵌入生成子网络的详细结构如图3b所示。值得注意的是,嵌入生成子网络没有在最后经过sigmoid激活,这与权重生成子网络不同。GPH通过反向传播来与检测器联合训练。这样一来,几何特征被嵌入到proposal特征中,丰富了特征表示,提高了分类和回归性能。
4. Experiments
4.1. Dataset and Evaluation Metrics
介绍了数据集和评价指标。
4.2. Implementation Details
介绍了实现细节。
4.3. Main Results
如表1所示,在不同主干、检测器甚至不同任务上的实验表明,GaFPN可以获得一致的性能提升。这些结果充分说明了GaFPN的鲁棒性和泛化能力。我们相信本文提出的方法也可以应用到其它计算机视觉任务中。具体的实验结论可以参照原文。
4.4. Ablation Study
各个组件的有效性,这三个部分是相辅相成的,处理不同的问题。具体的实验结论可以参照原文。
GMM模块的消融实验,具体的实验结论可以参照原文。
为了分析GMM产生的不同层的融合权重,我们基于启发式引导映射策略将COCO val2017上的proposal映射到4层。对于每个proposal,我们首先获得4个特征层对应的4个权重。然后,我们计算每层proposal的平均权重。4个金字塔层对应的结果如图4所示。我们可以观察到,原始映射到金字塔层P2P_2P2的proposal需要更多来自更高层的特征,并且需求的重要性随着金字塔层的增加而减弱。与此同时,原始映射到P3−P5P_3-P_5P3−P5的proposal需要更多来自较低和较高金字塔层的特征。总而言之,来自多层的特征共同促进了每个proposal更强大的特征生成。这些结果表明来自其它层的特征也有利于分类和回归。
GPH的消融实验。通过以上分析,我们对GPH中的两个分支采用非共享特征嵌入和乘积嵌入类型。这些结果表明GPH有利于分类和回归分支产生更有识别力的特征。具体的实验结论可以参照原文。
对FPN其它变体的通用性。我们相信本文提出的方法可以用于其它类似的检测器。最后,我们在图5中展示了一些检测结果的例子,与基于FPN的基线相比,GaFPN产生了更准确的结果。具体的实验结论可以参照原文。
4.5. Runtime Analysis
GaFPN及其各个组件并没有带来太多的FLOPs、Params,推理速度也相当。具体的实验结论可以参照原文。
5. Conclusion
在本文中,我们重新审视了基于FPN的检测器的训练过程,并在模型结构方面提出了一些改进。基于这些观察,本文提出了一种新的特征金字塔网络GaFPN,用于进一步增强多尺度目标检测的特征表示。GaFPN由3个部分组成:几何感知映射模块、几何感知预测头和特征增强金字塔。通过配备这些简单但有效的组件,GaFPN在具有挑战性的MS COCO数据集上与各种检测器和任务相比带来了巨大的提升。
相关文章:

目标检测论文阅读:GaFPN算法笔记
标题:Construct Effective Geometry Aware Feature Pyramid Network for Multi-Scale Object Detection 会议:AAAI2022 论文地址:https://ojs.aaai.org/index.php/AAAI/article/view/19932 文章目录Abstract1. Introduction2. Related Work2.…...

【转】Generative Pretrained Transformer
原文链接:https://www.cnblogs.com/yifanrensheng/p/13167796.html一、GPT简介1.1 背景目前大多数深度学习方法依靠大量的人工标注信息,这限制了在很多领域的应用。此外,即使在可获得相当大的监督语料情况下,以无监督学习的方式学…...

day34|343. 整数拆分、96.不同的二叉搜索树
343. 整数拆分 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1, 1 1 1。 示例 2: 输入: n 10 输出: 36 解…...

WeNet - 初识
文章目录关于 WeNet快速上手识别训练环境准备训练关于 WeNet Production First and Production Ready End-to-End Speech Recognition Toolkit github: https://github.com/wenet-e2e/wenet官方中文说明:https://github.com/wenet-e2e/wenet/blob/main/README_CN.md…...

为什么各个企业都在创建FAQ、常见问题页面?
常见问题解答页面是您可能已经为您的公司考虑过的东西,作为帮助客户回答有关您的产品和服务的常见问题的一种方式。但是您不知道最好的方法;肯定这只是一个问题清单吗?常见问题解答在整个购买过程中为客户提供支持,并减少客户需要与贵公司的联…...
【React-Router】路由传参,路由嵌套,手动导航,路由文件配置
文章目录React-RouterURL的hashHTML5的HistoryRouter的基本使用路由映射配置路由的嵌套路由配置和跳转Link和NavLink:手动路由的跳转路由参数传递Navigate导航Not Found页面配置路由的配置文件React-Router 前端路由是如何做到URL和内容进行映射呢?怎么…...
面向对象分析与设计(OOAD)
面向对象分析与设计(OOAD)概述人是怎么认识事物的分类与分层的两种思维问题域到解空间的映射软件生命周期要解决的问题三个一致性面向对象分析与设计过程对象从哪里来发现对象的方法组织对象结构职责是怎么来的分配职责的逻辑验证职责分配的合理性GRASP设…...
数据库调优
目录 硬件层面 操作系统层面 数据库层面 硬件层面 1.CPU(运算):48核CPU。 2.内存:96G-256G,跑3-4个实例。 3.disk(磁盘IO):机械盘:选SAS,数量越多越好。性能:SSD(高并发)>SAS(普通业务线上)>SATA(线下) 选SSD:使用SSD或者PCIe SSD设备,可提升上千倍的IOPS…...
OpenStack云平台搭建(3) | 部署Glance
目录 1、登录数据库授权 2、安装glance 3、测试一下 安装部署Glance镜像服务 Image Service 镜像服务:代号:Glance:为云平台虚拟机提供镜像服务,例如:上传镜像、删除镜像等。说明:镜像:磁盘…...
软件评测师考试总结
软件评测师是软考中级考试项,每年一次考试机会,2022年的是在11月份举行,具体事项需查看软考官网。 分享一下个人的备考经验,以及总结一下这个学习的过程,有需要的可以酌情参考。 一、方法策略 获取信息 官网&#x…...

小白系列Vite-Vue3-TypeScript:009-屏幕适配
上一篇我们介绍了ViteVue3TypeScript项目中mockjs的安装和配置。本篇我们来介绍屏幕适配方案,简单说来就是要最大程度上保证我们的界面在各种各样的终端设备上显示正常。通用的屏幕适配方案有两种:① 基于rem 适配(推荐,也是本篇要…...
查找企业微信聊天记录,会话存档有多重要
会话存档是基于企业微信API插口而开发设计的聊天记录查询专用工具。运用会话存档能不能找到误删除、到期的聊天记录呢?实际上能否通过会话存档找到企业微信中的聊天记录分两种状况,大家一起来看看吧:开启会话存档前的聊天记录没法找到和开启会…...

C语言经典编程题100例(1-20)
1、练习2-1 Programming in C is fun!本题要求编写程序,输出一个短句“Programming in C is fun!”。输入格式:本题目没有输入。输出格式:在一行中输出短句“Programming in C is fun!”。代码:#include<stdio.h> int main() {printf("Progra…...

小白系列Vite-Vue3-TypeScript:008-安装配置mock
上一篇我们介绍了ViteVue3TypeScript项目中axios的安装和配置,并手动封装了api。本篇我们来在上篇基础上介绍如何引入mock,并在本地模拟后台接口请求来达到本地测试的目的。在现在前后端分离的开发模式中,前端页面很多渲染的数据都需要通过ht…...

OnGUI Box 控件||Unity 3D OnGUI 常用控件
OnGUI Box 控件Unity 3D Box 控件用于在屏幕上绘制一个图形化的盒子。Box 控件中既可以显示文本内容,也可以绘制图片,或两者同时存在。GUIContent 和 GUIStyle 对于 Box 控件同样适用,既可以用来修饰 Box 控件的文本颜色,也可以用…...

shiro721——CVE-2019-12422
这两个漏洞主要区别在于Shiro550使⽤已知密钥碰撞,后者Shiro721是使⽤ 登录后rememberMe {value}去爆破正确的key值 进⽽反序列化,对⽐Shiro550条件只要有 ⾜够密钥库 (条件⽐较低)、Shiro721需要登录(要求⽐较⾼鸡肋 …...

爬虫JS逆向思路 - - 扣JS(data解密)
网络上几千块都学不到的JS逆向思路这里全都有👏🏻👏🏻👏🏻 本系列持续更新中,三连关注不迷路👌🏻 干货满满不看后悔👍👍👍 ❌注意…...

Android 进阶——Framework 核心之Binder 相关预备理论(一)
文章大纲引言一、进程的内存空间和进程隔离二、Linux 系统内存的用户空间和内核空间1、用户空间(User Space)2、内核空间(Kernel Space)三、Linux IPC 原理1、内核态和用户态2、IPC 步骤四、内核模块和驱动五、Binder1、Binder IP…...

【23种设计模式】结构型模式详细介绍
前言 本文为 【23种设计模式】结构型模式 相关内容介绍,下边将对适配器模式,桥接模式,组合模式,装饰模式,外观模式,亨元模式,代理模式,具体包括它们的特点与实现等进行详尽介绍~ &a…...

接口自动化实战-postman
1.测试模型 单元测试并非测试工程师的本职工作,它属于开发工程师的工作,开发进行单元测试的情况我们不知道,为了确保系统尽可能没有Bug,于是接口测试在测试工程师这里就变得由为重要了。实际工作中为菱形模型。 接口测试能更早的…...

龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案
引言 在分布式系统的事务处理中,如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议(2PC)通过准备阶段与提交阶段的协调机制,以同步决策模式确保事务原子性。其改进版本三阶段提交协议(3PC…...

GAN模式奔溃的探讨论文综述(一)
简介 简介:今天带来一篇关于GAN的,对于模式奔溃的一个探讨的一个问题,帮助大家更好的解决训练中遇到的一个难题。 论文题目:An in-depth review and analysis of mode collapse in GAN 期刊:Machine Learning 链接:...