GhostNetV2学习笔记

2023-11-17

GhostNetV2学习笔记

GhostNetV2: Enhance Cheap Operation with Long-Range Attention

Abstract

轻量级卷积神经网络(CNNs)是专为在移动设备上具有较快推理速度的应用而设计的。卷积运算只能捕获窗口区域的局部信息,这阻碍了性能的进一步提高。在卷积中引入自我注意可以很好地捕获全局信息,但会极大地影响卷积的实际速度。在本文中,我们提出了一种硬件友好的注意机制(称为DFC注意),然后提出了一种新的移动应用的GhostNetV2架构。所提出的DFC注意结构基于全连接层,既能在普通硬件上快速执行,又能捕获远距离像素间的依赖关系。我们进一步回顾了之前GhostNet的表达瓶颈,并提出在DFC的关注下,增强由廉价操作产生的扩展特性,使GhostNetV2块可以同时聚合本地和远程信息。大量的实验证明了GhostNetV2相对于现有体系结构的优越性。例如,它在ImageNet上以167M FLOPs达到75.3%的top-1精度,显著抑制了GhostNetV1(74.5%),但计算成本相似。源代码将在https://github.com/huawei-noah/Efficient-AI-Backbones/tree/master/ghostnetv2_pytorch和https://gitee.com/mindspore/models/tree/master/research/cv/ghostnetv2。

1 Introduction

在计算机视觉中,深度神经网络的架构在各种任务中发挥着至关重要的作用,如图像分类[19,10],目标检测[27,26],视频分析[18]。在过去的十年中,网络架构发展迅速,出现了包括AlexNet[19]、GoogleNet[29]、ResNet[10]和EfficientNet[32]在内的一系列里程碑。这些网络已经将一系列视觉任务的表现推向了一个高水平。

在智能手机和可穿戴设备等边缘设备上部署神经网络,不仅需要考虑模型的性能,还需要考虑其效率,特别是实际的推理速度。矩阵乘法占据了计算成本和参数的主要部分。开发轻量级模型是减少推理延迟的一种很有前途的方法。MobileNet[13]将标准卷积分解为深度卷积和点卷积,大大降低了计算成本。MobileNetV2[28]和MobileNetV3[12]进一步引入了反向残留块,改进了网络架构。ShuffleNet[42]利用shuffle操作来鼓励信道组之间的信息交换。GhostNet[8]提出了低成本的操作来减少信道中的特征冗余。WaveMLP[33]取代了复合体自注意模块和一个简单的多层感知器(MLP),以减少计算成本。这些轻量级的神经网络已经在许多移动应用中得到应用。

然而,基于卷积的轻量级模型在建模远程依赖性方面较弱,这限制了进一步的性能改进。近年来,计算机视觉引入了类似变压器的模型,其中的自注意模块可以捕获全局信息。典型的自我注意模块要求二次复杂度w.r.t。特征的形状和大小在计算上不友好。此外,计算注意地图需要大量的特征分割和重塑操作。尽管理论上它们的复杂性可以忽略不计,但实际上这些操作会占用更多的内存和更长的延迟。因此,在轻量级模型中使用香草式自我注意对移动部署并不友好。例如,在ARM设备[23]上,具有大量自注意操作的MobileViT比MobileNetV2慢7倍以上。

本文提出了一种新的注意机制(DFC注意),在保持轻量级卷积神经网络实现效率的前提下,捕获长距离的空间信息。为了简单起见,只有完全连接(FC)层参与生成注意地图。具体来说,将一个FC层分解为水平FC和垂直FC,聚合CNN二维特征图中的像素。两个FC层包括沿各自方向的较长范围内的像素,叠加它们将产生一个全局的接受场。此外,我们从最先进的GhostNet入手,重新审视了它的表示瓶颈,并利用DFC的关注增强了中间特征。然后,我们构建了一个新的轻型视觉中枢GhostNetV2。与现有的体系结构相比,它可以在准确性和推理速度之间实现更好的平衡(如图1和图2所示)。

image-20221121091608042

2 Related Work

如何同时设计一种推理速度快、性能高的轻量级神经体系结构是一个挑战[16,41,13,40,35]。SqueezeNet[16]提出了三种策略来设计一个紧凑的模型,即将3×3过滤器替换为1×1过滤器,将输入通道的数量减少到3x3过滤器,在网络后期下采样以保持大的特征映射。这些原理是有建设性的,特别是1 × 1卷积的使用。MobileNetV1[13]用1 × 1核和深度可分离卷积代替了几乎所有的3 × 3文件,这极大地降低了计算成本。MobileNetV2[28]进一步将残差连接引入到轻量级模型中,构造了一个倒置残差结构,其中块的中间层比它的输入输出通道多。为了保持表达能力,去掉了一部分非线性函数。MobileNeXt[44]重新思考了反向瓶颈的必要性,并声称经典的瓶颈结构也可以实现高性能。考虑到1 × 1卷积占计算成本的很大一部分,ShuffleNet[42]将其替换为群卷积。信道洗牌操作,以帮助信息在不同组之间流动。通过研究影响实际运行速度的因素,ShuffleNet V2[22]提出了一种硬件友好的新块。通过利用特性的冗余,GhostNet[8]用廉价的操作取代了1 × 1卷积中的一半通道。到目前为止,GhostNet一直是SOTA轻量级模型,在准确性和速度之间有很好的权衡。

除了手工设计,还有一系列的方法试图寻找一个轻量级的建筑。例如,FBNet[39]设计了一种硬件感知的搜索策略,它可以直接在特定硬件上找到精度和速度之间的良好平衡。基于反向残差瓶颈,MnasNet[31]、MobileNetV3[12]搜索体系结构参数,如模型宽度、模型深度、卷积滤波器的大小等。虽然基于NAS的方法可以实现高性能,但它们的成功是基于精心设计的搜索空间和架构单元。自动搜索和手动设计可以结合起来找到更好的架构

3 Preliminary

3.1 A Brief Review of GhostNet

GhostNet[8]是SOTA轻量级模型,设计用于移动设备上的高效推理。它的主要组成部分是Ghost模块,它可以通过低成本的操作生成更多的特征映射来取代原来的卷积。给定输入特征 X ∈ R H × W × C X∈R^{H×W ×C} XRH×W×C,高度H,宽度W,通道数C,一个典型的Ghost模块可以用两步替换一个标准卷积。首先,利用1 × 1卷积生成本征特征,即:

image-20221121092413775

其中,*表示卷积操作。 F 1 × 1 F_{1×1} F1×1为按点卷积, Y ′ ∈ R H × W × C o u t ′ Y^{'}∈R^{H×W ×C^{'}_{out}} YRH×W×Cout为固有特征,其大小通常小于原始输出特征,即 C o u t ′ < C o u t C^{'}_{out} < C_{out} Cout<Cout。然后使用廉价的操作(例如深度卷积)来生成基于内在特征的更多特征。特征的两部分沿信道维度连接,即

image-20221121092705033

其中 F d p F_{dp} Fdp为深度卷积滤波器, Y ∈ R H × W × C o u t Y∈R^{H×W ×C_{out}} YRH×W×Cout为输出特征。虽然Ghost模块可以显著降低计算成本,但不可避免地削弱了其表示能力**。空间像素之间的关系是实现精确识别的关键**。而在GhostNet中,对一半的特征只通过廉价的操作(通常通过3 × 3深度卷积实现)捕获空间信息。其余特征仅通过1 × 1点向卷积产生,不与其他像素相互作用。捕获空间信息的能力较弱可能会阻碍性能的进一步提高

通过堆叠两个Ghost模块(如图4(A)所示)来构造一个GhostNet块。与MobileNetV2[28]类似,它也是一个反向瓶颈,即第一个Ghost模块作为扩展层,增加输出通道的数量,第二个Ghost模块减少通道的数量,以匹配快捷路径。

3.2 Revisit Attention for Mobile Architecture

基于注意的模型起源于NLP领域[36],近年来被引入计算机视觉领域[6,9,34,7]。例如,ViT[6]采用自注意模块和MLP模块堆叠的标准变压器模型。Wang等人在卷积神经网络中插入自注意操作来捕获非局域信息[37]。典型的注意模块通常具有二次复杂度w.r.t。该特征的大小,在下游任务如对象检测和语义分割中无法扩展到高分辨率图像。

降低注意复杂度的主流策略是将图像分割成多个窗口,并在窗口内或跨窗口执行注意操作。例如,Swin Transformer[21]将原始特征分割为多个不重叠的窗口,并在本地窗口内计算自注意。MobileViT[23]还将功能展开为不重叠的补丁,并计算这些补丁之间的注意力。对于CNN中的二维特征图,实现特征分割和注意计算涉及大量的张量重塑还有转置运算。其理论复杂性可以忽略不计。在一个高度复杂的大型模型(例如,具有数十亿FLOPs的swing - b[21])中,这些操作只占总推理时间的一小部分。而对于轻量级模型,其部署延迟不容忽视。

为了直观的理解,我们为GhostNet模型配备了MobileViT[23]中使用的self-attention,并使用TFLite工具在华为P30(麒麟980 CPU)上测量延迟。我们使用ImageNet的标准输入分辨率,即224 × 224,结果如表1所示。注意机制只增加约20%的理论FLOPs,但在移动设备上需要2倍的推理时间。理论复杂度和实际复杂度的巨大差异表明,为了在移动设备上快速实现,有必要设计一种硬件友好的注意机制。

4 Approach

4.1 DFC Attention for Mobile Architecture

在本节中,我们将讨论如何为移动cnn设计一个注意模块。期望的注意力应该具有以下特性:

Long-range

为了提高表示能力,捕获远程空间信息进行关注是至关重要的,轻量级CNN(如MobileNet [13], GhostNet[8])通常采用小的卷积滤波器(如1 × 1卷积)来节省计算成本。

Deployment-efficient

注意模块应该非常有效,以避免减慢推断。具有高flop或硬件不友好操作的昂贵转换是不可预期的。

Concept-simple

为了保持模型对不同任务的泛化性,注意模块应概念简单,设计不讲究。

尽管自我注意操作[6,24,21]可以很好地模拟远程依赖,但它们并不像上节所讨论的那样具有部署效率。与之相比,具有固定权重的全连接层(FC)更简单、更容易实现,也可用于生成具有全局接受域的注意映射。具体的计算过程如下所示。

给定一个特征 Z ∈ R H × W × C Z∈R^{H×W ×C} ZRH×W×C,可视为HW令牌 z i ∈ R C z_i∈R^C ziRC,即 Z = z 11 , z 12 , ⋅ ⋅ ⋅ , z H W Z = {z_{11}, z_{12},···,z_{HW}} Z=z11,z12⋅⋅⋅zHW。FC层生成注意地图的直接实现表述如下:

image-20221121102217998

这里 ⊙ \odot 为按元素乘法,F为FC层的可学习权值, A = a 11 , a 12 , ⋅ ⋅ ⋅ , a H W A = {a_{11}, a_{12},···,a_{HW}} A=a11,a12⋅⋅⋅aHW为生成的注意图。Eq 3可以通过将所有标记与可学习的权重聚合在一起来捕获全局信息,这也比典型的自我注意[36]简单得多。然而,它的计算过程仍然需要二次复杂度w.r t。特征的大小(即 O ( H 2 W 2 ) ) O(H^2 W^2)) O(H2W2)),这在实际情况下是不可接受的,特别是当输入图像是高分辨率时。例如,GhostNet的第4层有一个特征映使用3136 (56 × 56)个令牌,这导致计算注意地图非常复杂。实际上,CNN中的特征图通常是低秩的[30,17],没有必要将不同空间位置的所有输入输出令牌都紧密连接起来。特征的2D形状自然提供了一个减少FC层计算的视角,即,将Eq. 3分解为两个FC层,并分别沿水平和垂直方向聚合特征。它可以表述为:

image-20221121102544271

其中 F H F^H FH F W F^W FW是变换权值。以原始特征Z为输入,依次对特征应用Eq. 4和Eq. 5,分别捕获沿两个方向的长程相关性。我们将这种操作称为解耦全连接注意(DFC),其信息流如图3所示。由于水平和垂直变换的解耦,注意模块的计算复杂度可以降低到 O ( H 2 W + H W 2 ) O(H^2 W + H W^2) O(H2W+HW2)。在全注意(式3)中,正方形区域内的所有patch都直接参与到聚焦patch的计算中。在DFC注意中,一个补丁直接由垂直/水平线上的补丁聚合而其他补丁则参与垂直/水平线上这些补丁的生成,与被聚焦的令牌有间接关系。因此,一个patch的计算也涉及到正方形区域内的所有patch。

等式4和5表示DFC注意的一般公式,它分别沿水平方向和垂直方向聚合像素。通过共享部分变换权值,可以方便地用卷积实现,省去了影响实际推理速度的耗时的张量重塑和转置操作。为了处理不同分辨率的输入图像,可以将滤波器的大小与特征图的大小解耦,即在输入特征上依次进行两个核大小为 1 × K H 1 × K_H 1×KH K W × 1 K_W × 1 KW×1的深度卷积。当采用卷积实现时,DFC注意的理论复杂度记为 O ( K H H W + K W H W ) O(K_H HW + K_W HW) O(KHHW+KWHW)。该策略得到了TFLite和ONNX等工具的良好支持,可在移动设备上进行快速推断。

4.2 GhosetNet V2

image-20221121104510856

在本节中,我们使用DFC注意来提高轻量级模型的表示能力,然后提出新的视觉主干GhostNetV2。

Enhancing Ghost module

正如3.1中所讨论的,Ghost模块中只有一半的特征(等式1和2)与其他像素相互作用,这损害了它捕获空间信息的能力。因此,我们使用DFC注意增强Ghost模块的输出特征Y,以捕获不同空间像素之间的远程依赖性。

输入特征 X ∈ R H × W × C X∈R^{H×W ×C} XRH×W×C被发送到两个分支,一个是Ghost模块,产生输出特征Y(等式1和2),另一个是DFC模块,产生注意映射A(等式4和5)。回想一下,在典型的自注意[36]中,使用线性转换层将输入特征转换为查询和键,计算注意映射。同理,我们也实现1 × 1卷积,将模块的输入X转换为DFC的输入z。模块的最终输出 O ∈ R H × W × C O∈R^{H×W ×C} ORH×W×C是两个分支输出的乘积,即

image-20221121103909923

这里的 ⊙ \odot 为元素乘法,Sigmoid为标度函数,将注意映射A归一化到范围(0,1)。

信息聚合过程如图5所示。在相同的输入下,Ghost模块和DFC注意是两个平行的分支,从不同的角度提取信息。输出是它们的元素乘积,其中包含来自Ghost模块的特征和DFC注意模块的注意的信息。每个注意值的计算都涉及到大范围的补丁,因此输出特征可以包含来自这些补丁的信息。

image-20221121104001839

Feature downsampling

由于Ghost模块(等式1和2)是一种非常高效的操作,直接与DFC注意并行将引入额外的计算成本。因此,我们通过在水平和垂直方向上对特征进行下采样来减小特征的大小,这样DFC注意中的所有操作都可以在较小的特征上进行。默认情况下,宽度和高度都是原来长度的一半,这减少了75%的DFC注意FLOPs。然后将生成的特征图上采样到原始大小,以匹配Ghost分支中的特征大小。我们天真地使用平均池和双线性插值分别进行下采样和上采样。注意到直接实现sigmoid(或硬sigmoid)函数将导致较长的延迟,我们还将sigmoid函数部署在下采样的特征上,以加速实际推断。虽然注意地图的价值可能不是严格限制在(0,1)的范围内,但我们的经验发现,它对最终表现的影响是可以忽略不计的。

GhostV2 bottleneck

GhostNet采用了一个包含两个Ghost模块的反向残差瓶颈,其中第一个模块产生的扩展特征具有更多的通道,而第二个模块减少通道的数量得到输出特征。这个反向瓶颈自然地分离了模型[28]的“表达性”和“容量”。前者通过扩展特征度量,后者通过块的输入输出域反映。原始的Ghost模块通过廉价的操作生成了部分特征,这损害了表达能力和容量。通过研究在扩展特征或输出特征上配置DFC注意力的性能差异(第5.4节表8),我们发现增强“表现力”更有效。因此,我们只将扩展的特征与DFC注意相乘。

图4(b)显示了GhostV2瓶颈示意图**。DFC注意分支与第一个Ghost模块并行,以增强扩展功能**。然后将增强的特征发送到第二个Ghost模块产生输出特征。它捕获了不同空间位置像素之间的长程依赖性,增强了模型的表达能力

5 Experiments

image-20221121104607751

image-20221121104618873

image-20221121104711071

image-20221121104720587

image-20221121104856867

image-20221121104904319

image-20221121104924408

image-20221121104932833

image-20221121104948295

image-20221121104957108

6 Conclusion

本文提出了一种硬件友好的DFC注意,并提出了一种新的移动应用的GhostNetV2体系结构。DFC注意可以捕捉到远距离空间位置上像素之间的依赖性,显著增强了轻量级模型的表达能力。它将一个FC层分解为水平FC和垂直FC,在两个方向上分别有较大的接受野。配备了这种计算高效和部署简单的模块,GhostNetV2可以在精度和速度之间实现更好的平衡。在基准数据集(如ImageNet、MS COCO)上的大量实验验证了GhostNetV2的优越性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GhostNetV2学习笔记 的相关文章

  • stm32——Fatfs文件系统读写文件

    因项目需求需要移植fatfs文件系统 参考了正点原子的战舰例程 使用mcu为stm32f103zet6 spi的sd卡模块 8Gsd卡 例程为mini板 mcu stm32f103rct6 的 ALIENTEK MINISTM32 实验29
  • 【详解】指令系统中跳转指令与OF,SF,CF,ZF的关系

    目录 无符号跳转表示法 有符号跳转表示法 无符号跳转表示法详解 有符号跳转表示法详解 无符号跳转表示法 小于 大于等于 小于等于 大于 有符号跳转表示法 小于 大于等于 小于等于 大于 无符号跳转表示法详解 我在学习这部分的最大的困惑点就是
  • TensorboardX和Tensorboard的介绍及使用

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 一 Tensorboard是什么 conda环境安装 二 Tensorboard可供显示的内容 三 Tensorboard使用步骤 1 标量SCALARS 2 图片
  • Dubbo和Spring Cloud微服务架构对比

    Dubbo和Spring Cloud微服务架构对比 微服务架构是互联网很热门的话题 是互联网技术发展的必然结果 它提倡将单一应用程序划分成一组小的服务 服务之间互相协调 互相配合 为用户提供最终价值 虽然微服务架构没有公认的技术标准和规范或
  • 动态代理模式(实例化详解)

    简介 代理模式通常用于达到对原有系统功能进行扩充的目的 比如 你刚接手一个别人没有完成的项目 这是你不想动别人原理的代码 还需要添加新功能 这时代理模式 这时代理模式 这时代理模式会很好的帮助解决问题 代理模式分为两种 静态代理模式 动态代

随机推荐

  • 蓝桥杯2021年第十二届真题第一场-砝码称重

    题目 题目链接 题解 动态规划 状态定义 dp i j 表示前i个砝码是否能称出重量为j的物品 状态转移 对于第i个砝码 选和不选两种情况 对于选又可以分为放在左边和放在右边 看样例 存在加和减的情况 也就是放在左边和右边的情况 我们规定放
  • 爬虫日常-12306自动购票程序

    文章目录 前言 页面分析 代码设计 前言 hello兄弟们 最近在钻研新鲜知识 一不留神没想起来更新 今天我们顺着前面几篇文章完整的写出一篇12306的自动购票软件 首先把我们已经写完的前期步骤代码再顺一遍 from selenium we
  • IDEA常用快捷键集合(详解)

    keymap中定义的快捷键实在是太多了 全部记住几乎不可能 但在项目开发或调试的工程中 快捷键是绝对的效率工具 查询快捷键 CTRL N 查找类 CTRL SHIFT N 查找文件 CTRL SHIFT ALT N 查 找类中的方法或变量
  • msvcp140.dll缺失重新安装的方法【msvcp140.dll修复工具下载安装】

    如果您在使用某些应用程序或游戏时遇到了 msvcp140 dll丢失 的错误提示 那么您需要采取一些措施来解决这个问题 以下是几种解决msvcp140 dll丢失的方法 msvcp140 dll解决方法一 1 在浏览器顶部网页搜索 dll修
  • 【vue】实现首屏加载等待动画 避免首次加载白屏尴尬

    原文链接 在线体验 width 100 height 443 src jsfiddle net kajweb qrno8s0g 9 embedded html css result allowfullscreen allowfullscre
  • a foreign key constraint fails

    可能由两种原因导致 1 设置的外键和对应的另一个表的主键值不匹配 解决方法 找出不匹配的值修改 或者清空两表数据 2 字符集和排序规则的差异引起 如果确认外键和主键一致 使用如下方式解决 代码前段插入 SET OLD CHARACTER S
  • iOS 15 越狱情报

    关注后回复 进群 拉你进程序员交流群 作者丨小集 来源丨小集 ID zsxjtip iOS 15 正式版本已经发布了 而 iOS 15 1 beta 版本也在近期发布 在普通用户和开发者追更各个 beta 版和正式版时 另一个神秘群体也没有
  • 架构 但服务多租户_华为以AI和混合云实现多租户数据中心架构转型

    华为采用全球直播的方式以 你好 智能世界 为主题举办行业数字化转型大会 把原计划在巴塞罗那现场举办的活动时间不变 2月24日 27日 搬到线上 针对互联网服务行业数字化 专门举办的MTDC 多租户数据中心论坛 于北京时间27日开启全球线上直
  • 外包干了2个月,技术退步明显...

    先说一下自己的情况 大专生 18年通过校招进入湖南某软件公司 干了接近4年的功能测试 今年年初 感觉自己不能够在这样下去了 长时间呆在一个舒适的环境会让一个人堕落 而我已经在一个企业干了四年的功能测试 已经让我变得不思进取 谈了2年的女朋友
  • 调用halcon函数时的错误处理

    注 以下材料来自halcon帮助文档 因水平有限 难免有误 欢迎指正 0 概述 在遇到一个运行时错误时 HALCON C 会以默认的方式给出错误信息 并终止程序 然而 在某些情况下 我们并不希望按照这样的规则来处理错误 例如 当一个程序允许
  • centos7.8从卸载python2,安装python3

    因为目前所有环境都是python2 7 5 但是项目上使用的是python3 7 5 迫切需要使用python3 7 5验证 安装遇到困难 记录一下 首先卸载python2 如果不想卸载python2的可以跳过 这里卸载python2和其依
  • 信息图:iOS 7开发者需要知道的事

    如果你想为iOS 设备开发app 你需要知道如何与软件交互 如何设计 你还要知道苹果独特的开发理念和开发工具 真正的能力还需要成功地从其他行业领域借鉴核心概念 最后把所有这些东西糅合进你的信息库中 所以我们画了一张iOS 7开发者应该的知识
  • iOS开发:使用大图+脚本,生成各种size的app icon和图片素材

    美术UI在公司是宝贵的资源 集各种项目宠爱于一身 为了努力完成好老板的进度需求 不给UI添麻烦 程序员开始忙活了 在iOS里面 我们使用image assert来管理素材和app icon 为什么呢 因为方便 按照image assert要
  • 怎样在前端遍历后端服务器传递来的json字符串中的集合?

    怎样在前端遍历后端服务器传递来的json字符串中的集合 后端把一个List类型的集合先转换成json字符串然后返回给通过ajax返回给前端 如下图 后端服务器中的代码如下图 紧着着前端页面遍历 后端传递来的json字符串中的集合数据 先来看
  • 读论文(二) - BERT

    Introduction 预训练的语言模型 在改进自然语言处理任务方面非常有效 包括句子级别的任务 自然语言推理和释义 也包括分词级别的任务 NER和问答 将预训练的语言表示应用于下游任务有两种现有策略 基于特征 feature based
  • 循环神经网络(RNN)的基本原理及LSTM的基本结构

    来源于课上实验 结果清晰 遂上传于此 实验环境TensorFlow1 14 该课件仅用于教学 请勿用于其他用途 详细参考 实验笔记 实验视频 一 实验目的 学习掌握循环神经网络 RNN 的基本原理及LSTM的基本结构 掌握利用LSTM神经元
  • vulfocus靶场安装教程

    背景 漏洞把场是目前每个安全人员以及想学习信息安全的人必备的东西 但目前商业化产品居多 还有一些类似dwwa sqlilabs这类的开源项目 但是漏洞环境比较固定 使用完一次后就失去其作用 搭建的成本过高 每次启动的流程会比较繁锁 甚至很多
  • 【react】对state的理解

    state是类创建的实例对象上的一个状态属性 想要改变类的实例对象的值 就要用到构造器 但由于类组件都是继承的React内置的Component类 继承的类 要写构造器的话 就必须写super 改变state this state xxx
  • TIP Spring-boot健康检查查看详细信息

    Spring boot提供了健康检查的手段 定期检查应用各个组件的状态 并提供了一些通用组件的检查 比如MySQL Redis等 可以使用下面的命令查看应用的健康状态 curl localhost port health 如果应用有异常 会
  • GhostNetV2学习笔记

    GhostNetV2学习笔记 GhostNetV2 Enhance Cheap Operation with Long Range Attention Abstract 轻量级卷积神经网络 CNNs 是专为在移动设备上具有较快推理速度的应用