【LeYOLO】嵌入式和移动端的轻量级YOLO模型

news2024/9/22 13:35:31

代码地址:https://github.com/LilianHollard/LeYOLO

论文地址:https://arxiv.org/pdf/2406.14239

在深度神经网络中,计算效率对于目标检测至关重要,尤其是在新模型更注重速度而非有效计算(FLOP)的情况下。这一演变某种程度上忽视了嵌入式和面向移动端设备的AI目标检测应用。

在本文中,作者重点关注基于FLOP的高效目标检测计算的神经网络架构设计选择,并提出几项优化措施来提高基于YOLO模型的效率。

1、首先,作者引入了一种受倒置瓶颈(inverted bottlenecks)和来自信息瓶颈(the Information Bottleneck)原理的理论所启发的有效 Backbone 网络缩放方法。

2、其次,作者提出了快速金字塔架构网络(FPAN),旨在促进快速多尺度特征共享同时减少计算资源。

3、最后,作者提出了一个解耦的DNiN检测Head,旨在为分类和回归任务提供快速且轻量级的计算。

在这些优化措施的基础上,并利用更有效的 Backbone 网络,本文为目标检测和以YOLO为中心的模型贡献了一个新的范式,称为LeYOLO。作者的贡献在多种资源限制下始终优于现有模型,实现了前所未有的准确性和FLOP比率。

值得注意的是,LeYOLO-Small在仅使用4.5 FLOP(G)的情况下,在COCO val 上达到了38.2%的竞争性mAP分数,与最新的YOLOv9-Tiny模型相比,计算负载减少了42%,同时保持了相似的准确性。

作者新颖的模型系列实现了前所未有的FLOP到准确性的比率,提供了从超低神经网络配置(< 1 GFLOP)到高效且要求严格的目标检测设置(> 4 GFLOPs)的可扩展性,对于 0.66, 1.47, 2.53, 4.51, 5.8和8.4 FLOP(G)分别达到了25.2, 31.3, 35.2, 38.2, 39.3和41 mAP


本文贡献:

1、Lightweight: 在每个FLOP比率的准确率方面,LeYOLO相比于轻量级目标检测的最先进神经网络(0.5到8 FLOP(G)之间)实现了最佳的准确率。

2、Scaling:LeYOLO为工业、边缘和嵌入式设备提供了使用轻量级YOLO模型与最先进的扩展效率的新机会。

3、Bags of specials:尽管作者的研究专注于精度与计算成本的最佳比例,基于该研究作者也提出了不同的替代方案。

4、New architecture:作者提出在LeYOLO中使用计算效率更高的块,并通过实验提供证据。

5、High reproducibility:作者的研究重点是改进深度神经网络的架构。作者使用ultralytics API的可重用训练方法实现结果,不使用ImageNet预训练。


nc: 80  # number of classes
scales:
  # [depth, width, max_channels]
  n: [1.0, 1.33, 576]  

# LeYOLO Small backbone
backbone:
  # [from, repeats, module, args]
  - [-1, 1, mn_conv, [16, 3, 2, "SI"]]  # 0-P1/2
  - [-1, 1, mn_conv, [16, 1, 1, "SI"]]
  - [-1, 1, MobileNetV3_BLOCK, [16, 3, 16, False, "SI", 2, False]]  # 2-P2/4
  - [-1, 1, MobileNetV3_BLOCK, [32, 3, 96, False, "SI", 2]]  # 3-P3/8
  - [-1, 1, MobileNetV3_BLOCK, [32, 3, 96, False, "SI", 1]]
  - [-1, 1, MobileNetV3_BLOCK, [64, 5, 96, True, "SI", 2]]  # 5-P4/16
  - [-1, 1, MobileNetV3_BLOCK, [64, 5, 192, True, "SI", 1]]
  - [-1, 1, MobileNetV3_BLOCK, [64, 5, 192, True, "SI", 1]]
  - [-1, 1, MobileNetV3_BLOCK, [64, 5, 192, True, "SI", 1]]
  - [-1, 1, MobileNetV3_BLOCK, [64, 5, 192, True, "SI", 1]]
  - [-1, 1, MobileNetV3_BLOCK, [96, 5, 576, True, "SI", 2]] # 10-P5/32
  - [-1, 1, MobileNetV3_BLOCK, [96, 5, 576, True, "SI", 1]]
  - [-1, 1, MobileNetV3_BLOCK, [96, 5, 576, True, "SI", 1]]
  - [-1, 1, MobileNetV3_BLOCK, [96, 5, 576, True, "SI", 1]]
  - [-1, 1, SPPF, [96, 5]]  # 14
  
# LeYOLO Small head
head:
  - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
  - [[-1, 9], 1, Concat, [1]]  # 16 cat backbone P4
  - [-1, 1, MobileNetV3_BLOCK, [64, 5, 128, True, "SI", 1]]
  - [-1, 1, MobileNetV3_BLOCK, [64, 5, 128, True, "SI", 1]]
  - [-1, 1, MobileNetV3_BLOCK, [64, 5, 128, True, "SI", 1]]

  - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
  - [[-1, 4], 1, Concat, [1]]  # 21 cat backbone P3
  - [-1, 1, MobileNetV3_BLOCK, [32, 3, None, True, "SI", 1, False]] 
  - [-1, 1, MobileNetV3_BLOCK, [32, 3, 64, True, "SI", 1]] 
  - [-1, 1, MobileNetV3_BLOCK, [32, 3, 64, True, "SI", 1]] 

  - [-1, 1, mn_conv, [64, 3, 2, "SI"]]
  - [[-1, 19], 1, Concat, [1]]  # 26 cat head P4
  - [-1, 1, MobileNetV3_BLOCK, [64, 5, 128, True, "SI", 1]] 
  - [-1, 1, MobileNetV3_BLOCK, [64, 5, 128, True, "SI", 1]] 
  - [-1, 1, MobileNetV3_BLOCK, [64, 5, 128, True, "SI", 1]] 

  - [-1, 1, mn_conv, [96, 3, 2, "SI"]]
  - [[-1, 14], 1, Concat, [1]]  # 31 cat head P5
  - [-1, 1, MobileNetV3_BLOCK, [96, 5, 192, True, "SI", 1]] 
  - [-1, 1, MobileNetV3_BLOCK, [96, 5, 192, True, "SI", 1]] 
  - [-1, 1, MobileNetV3_BLOCK, [96, 5, 192, True, "SI", 1]] 

  - [[24, 29, 34], 1, Detect, [nc]]  # Detect(P3, P4, P5)

Leyolo-small的配置文件


Base building block

class MobileNetV3_BLOCK(nn.Module):
    def __init__(self, c1, c2, k=3, e=None, sa="None", act="RE", stride=1, pw=True):
        #input_channels, output_channels, repetition, stride, expension ratio
        super().__init__()
        #act = nn.ReLU6(inplace=True) if NL=="RE" else nn.Hardswish()
        c_mid = e if e != None else c1
        self.residual = c1 == c2 and stride == 1

        features = [mn_conv(c1, c_mid, act=act)] if pw else [] #if c_mid != c1 else []
        features.extend([mn_conv(c_mid, c_mid, k, stride, g=c_mid, act=act),
                         #attn,
                         nn.Conv2d(c_mid, c2, 1),
                         nn.BatchNorm2d(c2),
                         #nn.SiLU(),
                         ])
        self.layers = nn.Sequential(*features)
    def forward(self, x):
        #print(x.shape)
        if self.residual:
            return x + self.layers(x)
        else:
            return self.layers(x)


class mn_conv(nn.Module):
    def __init__(self, c1, c2, k=1, s=1, act="RE", p=None, g=1, d=1):
        super().__init__()
        padding = 0 if k==s else autopad(k,p,d)
        self.c = nn.Conv2d(c1, c2, k, s, padding, groups=g)
        self.bn = nn.BatchNorm2d(c2)
        self.act = activation_function(act)#nn.ReLU6(inplace=True) if act=="RE" else nn.Hardswish()
    
    def forward(self, x):
        return self.act(self.bn(self.c(x)))

倒置瓶颈(inverted bottleneck)结构,最初由MobileNetV2提出,是许多新的最先进模型的核心,因其轻量级计算和简洁性而受到重视。在FLOP计算方面,要超越深度可分离卷积(depthwise convolutions)达到一定有效性水平是比较困难的。点卷积(pointwise convolutions)解决了通道间相关性的缺失问题。然而,在作者对倒置瓶颈块的实验中,作者观察到优化通道数量可以有效地减少计算需求,特别是在大特征图尺寸上。

实际上,如果块的扩展比率为1,或者由于拼接效果,输入通道C_{in}等于计算出的扩展层数C_{mid},那么在作者的块中就没有必要使用第一个点卷积。只要输入C_{in}和输出C_{out}的张量相等,如图2和公式(1)所示,即使第一个pointwise卷积不存在,作者也总是使用残差连接。

“即使第一个pointwise卷积不存在,作者也总是使用残差连接”,即:

- [-1, 1, mn_conv, [16, 1, 1, "SI"]]

- [-1, 1, MobileNetV3_BLOCK, [16, 3, 16, False, "SI", 2, False]] # 2-P2/4  最后一个False表示第一个pointwise卷积不存在的情况

作者在图2(c)中描述了LeYOLO的基础构建块,突出了经典瓶颈(图2(a))、倒置瓶颈(图2(b))以及作者提出的方法(图2(c))之间的区别。

作者用\otimes表示两个值之间的卷积。对于F_{in} \in \mathbb{R}^{1,1,C_{in},C_{mid}}F_{out} \in \mathbb{R}^{1,1,C_{mid},C_{out}}F_{mid} \in \mathbb{R}^{k,k,1,C_{mid}},这里的卷积具有个C_{in}输入通道,C_{mid}个在倒置瓶颈中扩展的通道,以及C_{out}个输出通道


Stride strategy

一些模型在倒置瓶颈结构中包含了步长。然而,作者采用了一种特定的通道扩展策略

每个语义信息 Level  P_{i}在其所有隐藏层中都具有输入通道数C_{in}P_{i}、输出通道数C_{out}P_{i}和扩展通道数C_{mid}P_{i}。作者的目标是丰富从语义信息 Level P_{i}的隐藏层h_{i}到后续隐藏层h_{i+1}的信息流,通过按比例增加通道C_{in}P_{i},以扩展到预期的C_{mid}P_{i+1}通道。

倒置瓶颈采取以下步骤:

具有步长的倒置瓶颈中的语义信息表示为P如下——图3:

因此,步长大于一的通道扩展策略可能类似于以下形式:

作者本可以简单地为每个块应用丰富的扩展比例,不仅仅是那些步长大于一的块,但这样做会显著增加整个网络的计算成本。虽然这种策略不是整个模型所必需的,但在某些节点上这样做是有意义的,比如在stem,从昂贵的特征图空间大小中最大限度地扩展信息,特别是使用最终的逐点卷积。

            if m in (InvertedBottleneck,MobileNetV3_BLOCK):
              if isinstance(args[3],int): #might use "None"
                args[3] = make_divisible(min(args[3], max_channels) * width, 8)

STEM

作者经常用“STEM”这个术语来描述最初几层,这些层直接处理输入图像和低语义信息,以快速有效地减少空间尺寸,并将初始信息通道数(通常是3,代表红、绿、蓝三个颜色通道)激发到一个更高的通道数。主要的好处是减少了计算成本,因为如果处理的层在空间上过大,对于目标检测的总成本会迅速爆炸。

一些最先进的YOLO模型,只有YOLOv6和YOLOv8是具有低计算资源STEM的好例子,当将通道数和层缩放到1/4时,它们的总成本都是0.32 GFLOP。这两个模型迅速将特征图缩小到160x160p,以补偿在过高空间尺寸上的滑动卷积的成本。

为了在大特征图尺寸上有效地使用卷积,作者在整个STEM中使用了pointwisestandard卷积,从P0(640x640)缩小到P2(160x160)过程中将通道数限制在一个严格的低数值内 - 表1。


Efficient backbone feature extractor

作者认识到深度神经网络(DNNs)并不完全符合马尔可夫链X\rightarrow \widetilde{X}\rightarrow Y,其中X\widetilde{X}Y分别是输入、从X提取的最小充分统计量和输出。因此,为了得到\widetilde{X}作为提取对Y有意义特征的最小充分统计量,DNN需要学习如何使用最小充分统计量提取特征,并采用尽可能紧凑的结构

其次,因为DNN只处理前一层h_{i-1}的输入,一个直接的后果可能是丢失后续层无法恢复的信息。如公式(5)

诸如[5; 21]中提出的列式网络等昂贵的解决方案通过在每个块之间进行密集的特征共享来解决这一问题,通过结合密集的训练块或在信息分割的关键点添加额外的检测Head,正如最近在YOLOv9中看到的那样。由于在上述方程中实现公平是可行的,[66]建议每一层应尽可能最大化自身的信息I(Y;h_{i}),同时最小化层间信息交换I(h_{i-1};h_{i})。因此,作者没有像[71; 73; 21; 5]那样增加模型的计算复杂性,而是选择更高效地扩展它,整合Dangyoon等人的倒瓶颈理论。

作者的实现包括,通过确保输入/输出通道的数量不超过第一隐藏层到最后一层通道的差比,以形式I(h_{0};h_{n})最小化层间信息交换,其中n等于神经网络的最后一个隐藏层。隐藏层通道的数量应保持在由输入通道P1和输出通道P5定义的范围内,比小于6,以形式I(h_{1};h_{n})最小化I(h_{i-1};h_{i})

相反,Dangyonn等人的倒瓶颈通道扩展实验表明,扩展或缩减比例不应超过6。因此,作者通过在整个网络中扩展3倍来最大化I(Y;h_{i})。同时,在采用pointwise通道扩展策略的间隔倒瓶颈中,通过总共扩展6倍进一步激发信息,最大化(P_{i};P_{i+1})之间的I(Y;h_{i})。然而,作者从P4到P5的倒瓶颈进一步激发信息,通过扩展9倍最大化(P_{4};P_{5})I(Y;h_{i})(与扩展6倍相比,增加了+0.5 mAP)。

块之间残差连接的实施有助于通过提供前一层h_{i-1}的信息来最小化I(h_{i-1};h_{i})。密集连接可能增强模型,但它们需要额外的内存。


Neck

在目标检测中,作者将模型中聚合多个语义信息层次的部分称为“neck”,它将更远层的提取层次共享到第一层。

从历史上看,研究者使用PANet或FPN有效地共享特征图,通过将几个语义信息P_{i}链接到PANet及其各自的输出,如图4(a)所示,实现了多个检测层次。

在本文中,作者主要关注两个算法:BiFPN和YOLOF的SiSO。BiFPN与作者模型的中心思想相同:使用低计算成本的层(连接和加法,深度卷积和逐点卷积)。然而,BiFPN需要太多的语义信息和太多的阻塞状态(等待前一层,复杂的图),这使得难以保持快速执行速度。

SiSO中,可以看到YOLOF的作者决定为模型“neck”使用单一的输入和输出。与YOLOF论文中提出的其他解决方案相比,作者观察到多输出“neck”(单入多出-SiMO)与单输出“neck”(单入单出-SiSO)之间存在显著退化。作者特别感兴趣的是他们关于SiMO潜在效率的工作,证明仅通过优化单一丰富输入的语义信息流,就可以改进YOLO模型“neck”的第一层。

受到PAN和FPNnet的启发,作者提出了一个快速PANnet(FPANet),该网络具有更少的卷积层,较低的通道数和更有效的语义信息共享。作者的方法与YOLOv8中的“neck”概念相似。作者减少了post-backbone和 Head 之间的P3和P5的计算流,直接强化了P4的语义信息层次,如图4(b)所示。此外,作者简化了“neck”,最小化了锁和等待时间。而且,如图4(c)所示,作者优化了通道数量以减少P3中的计算,其中初始逐点步骤是不必要的,因为从P4和backbone来的P3信息的自底向上的路径的连接与PAN在P3处的倒置瓶颈中扩展的通道相匹配,即C_{out}P_{4} + C_{in}P_{3} = C_{mid}P_{3}

通过用P3和P4的最小计算加强单一输入(P4)来指导“neck”信息,作者实现了介于SiMO和MiMO之间的方法,并显著减少了MiMO的变化。


Decoupled Network in Network Head

直到YOLOv5时期,分类和目标检测任务使用单一Head 。然而,自YOLOv6起,模型 Head 变成了一个更强大的工具,将块分成了两部分:一个用于分类的分支和一个用于目标回归的分支。尽管这种方法非常高效,但它意味着成本几乎翻倍,需要为分类和检测进行卷积。

作者理论地认为,除了通过轻量级的Depthwise卷积按通道细化 Backbone 和stem提取的特征外,无需添加空间信息。

从历史上看,YOLO模型作为一个网格工作,为每个网格像素通过 Anchor 框进行分类 Proposal 。Anchor 框提供了几种可能的检测大小,不仅仅是像素级的检测。

通过YOLO的点对点网格操作,作者认为可以使用pointwise卷积作为滑动多层感知机解决方案,逐像素地简化检测 Head ,类似于每个像素的分类 Proposal --几个Depthwise卷积用于仅空间方式,改进两个pointwise卷积之间的空间关系,每个像素进行分类和回归。

通过消融研究(见原文第B.4章),作者证明仅在模型 Head 使用pointwise卷积就能在LeYOLO-Nano@640尺度上取得令人印象深刻的33.4 mAP结果。在pointwise卷积之间使用Depthwise卷积细化空间信息,将模型性能提升到34.3 mAP

如图5所示,作者提出了DNiN Head,一种以pointwise卷积为中心的方法,具有两个单独的pointwise操作,用于每个网络 Proposal :分类和回归(边界框)。pointwise操作在目标检测中至关重要,在网络中网络框架内作为逐像素的分类器和回归器。Depthwise卷积被分成两个3x3卷积,以降低与单个5x5卷积相比的整体成本。

作者操作两个独立的pointwise卷积:一个专用于分类,另一个用于回归。这种区别源于分类和边界框提取之间不同的需求。作者提出的DNiN Head 在保持 Level P_{i}的空间尺寸的同时,扩展通道以匹配类数量。每个像素因此代表一个潜在的预测。


Results

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

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

相关文章

【算法入门-栈】逆波兰表达式求值

&#x1f4d6;逆波兰表达式求值 ✅描述✅扩展&#xff1a;什么是逆波兰表达式✅题解方法一&#xff1a;栈✅题解方法二&#xff08;数组模拟栈&#xff09; 今天又刷了一道题&#xff0c;奥利给 刷题地址&#xff1a; 点击跳转 ✅描述 给定一个逆波兰表达式&#xff0c;求表达…

anaconda修改安装的默认环境

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️如遇文章付费&#xff0c;可先看…

简述设计模式-策略模式

概述 在策略模式中一个类的行为或者算法可以在运行时更改&#xff0c;这种类型的设计模式属于行为型模式。 在策略模式中定义了一系列的算法和策略&#xff0c;并将每个算法封装在独立的类中&#xff0c;使得他们能够互相替换&#xff0c;通过使用策略模式可以在运行时选择不…

类与对象-继承-同名成员处理

同名成员处理 #include<iostream> using namespace std;//继承中同名成员处理方式class Base { public:Base(){m_A 100;}void func(){cout << "Base - func()调用" << endl;}void func(int a){cout << "Base - func(int a)调用"…

大语言模型里的微调vs RAG vs 模板提示词

文章目录 介绍微调&#xff08;Fine-tuning&#xff09;定义优点&#xff1a;缺点&#xff1a;应用场景&#xff1a;技术细节 检索增强生成&#xff08;RAG&#xff0c;Retrieval-Augmented Generation&#xff09;定义优点&#xff1a;缺点&#xff1a;应用场景&#xff1a;技…

论文学习 StarGANv2 ——StarGAN v2: Diverse Image Synthesis for Multiple Domains

多领域不同图像合成 We have made dataset available at https://github.com/clovaai/stargan-v2. 摘要&#xff1a; 一个好的图像到图像转换模型应该学习不同视觉域之间的映射&#xff0c;同时满足以下属性: 1)生成图像的多样性 2)在多个域上的可扩展性。 现有的方法解决…

嵌入式应用开发之代码整洁之道

前言&#xff1a;本系列教程旨在如何将自己的代码写的整洁&#xff0c;同时也希望小伙伴们懂如何把代码写脏&#xff0c;以备不时之需&#xff0c;同时本系列参考 正点原子 &#xff0c; C代码整洁之道&#xff0c;编写可读的代码艺术。 #好的代码的特点 好的代码应该都有着几…

微软代码签名证书的申请流程包含哪几个关键步骤?

在软件开发环境中&#xff0c;确保软件的安全性和可信度至关重要。沃通CA提供的代码签名证书作为一种重要的安全措施&#xff0c;可以帮助开发者验证其软件的来源和完整性&#xff0c;有效地避免用户因安全顾虑而避免安装或使用软件。本文将详细介绍如何申请沃通CA代码签名证书…

《算法笔记》总结No.6——贪心

一.简单贪心 贪心法是求解一类最优化问题的方法&#xff0c;它总是考虑在当前状态下局部最优(或较优)之后&#xff0c;来使全局的结果达到最优(或较优)的策略。显然&#xff0c;如果采取较优而非最优的策略(最优策略可能不存在或是不易想到)&#xff0c;得到的全局结果也无法是…

springboot驾校管理系统-计算机毕业设计源码49777

驾校管理系统 摘 要 驾校管理系统是一个基于Spring Boot框架开发的系统&#xff0c;旨在帮助驾校提高管理效率和服务水平。该系统主要实现了用户管理、年月类型管理、区域信息管理、驾校信息管理、车辆信息管理、报名信息管理、缴费信息管理、财务信息管理、教练分配管理、更换…

雨量监测站的重要性有哪些

在全球气候变化和极端天气事件频发的背景下&#xff0c;雨量监测站成为了我们理解降水模式、预测天气变化以及制定应对措施的重要工具。 雨量监测站是一种专门用于测量和记录降水量的设施。它们通过配备高精度的雨量传感器&#xff0c;能够实时监测降雨情况&#xff0c;并提供关…

政安晨【零基础玩转各类开源AI项目】基于Ubuntu系统部署MuseV (踩完了所有的坑):基于视觉条件并行去噪的无限长度和高保真虚拟人视频生成

目录 下载项目 创建虚拟环境 启动虚拟环境&执行项目依赖 基于DOCKER的尝试 A. 安装引擎 B. 下载桌面安装包 C. 安装桌面包 用Docker运行MuseV 1. 拉取镜像 ​编辑 2. 运行Docker镜像 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收…

HDFS 块重构和RedundancyMonitor详解

文章目录 1. 前言2 故障块的重构(Reconstruct)2.1 故障块的状态定义和各个状态的统计信息2.2 故障文件块的查找收集2.5.2.1 misReplica的检测2.5.2.2 延迟队列(postponedMisreplicatedBlocks)的构造和实现postponedMisreplicatedBlocks中Block的添加postponedMisreplicatedBloc…

在Visutal Studio 2022中完成D3D12初始化

在Visutal Studio 2022中完成DirectX设备初始化 1 DirectX121.1 DirectX 简介1.2 DirectX SDK安装2 D3D12初始化2.1 创建Windwos桌面项目2.2 修改符合模式2.3 下载d3dx12.h文件2.4 创建一个异常类D3DException,定义抛出异常实例的宏ThrowIfFailed3 D3D12的初始化步骤3.1 初始化…

智慧园区管理系统建设方案(Word完整原件)

1. 项目概述 1.1. 项目名称 1.2. 项目承担单位及负责人 1.3. 项目实施机构及项目负责人 1.4. 建设目标、内容 1.5.1建设目标 1.5.2建设内容 1.5. 建设方式 2.项目建设的必要性 2.1. 建设背景 2.2. 现状分析 2.3. 项目建设的必要性和意义 2.3.1.项目建设的必要性 2…

突发,众多网站流量被盗刷!事情没那么简单。。

这两天发生了一件震惊 IT 圈的大事&#xff0c;很多程序员博主的网站竟然 同时 被恶意攻击&#xff0c;盗刷了大把流量费&#xff0c;我这个老倒霉蛋自然也中招了&#xff0c;作为受害人&#xff0c;专门做了本次分享&#xff0c;希望其他有网站的朋友们也都小心点。 那为什么…

准大一新生开学千万要带证件照用途大揭秘

1、提前关注好都有哪些考场&#xff0c;以及这些考场大致在网页的哪个位置。比如我选对外经贸大学&#xff0c;我就直接找到第二个点进去。 2、电脑上同时开了谷歌浏览器和IE浏览器&#xff0c;以及手机也登陆了。亲测下来&#xff0c;同一时间刷新&#xff0c;谷歌浏览器能显示…

勇攀新高峰|暴雨信息召开2024年中述职工作会议

7月8日至9日&#xff0c;暴雨信息召开2024年中述职工作会议&#xff0c;总结回顾了上半年的成绩和不足&#xff0c;本次会议采用线上线下的方式举行&#xff0c;公司各部门管理人员、前台市场营销人员参加述职&#xff0c;公司领导班子出席会议。 本次述职采取了现场汇报点评的…

搜维尔科技:【研究】Scalefit是一款可在工作场所自动处理3D姿势分析结果的软件

Scalefit是一款可在工作场所自动处理 3D 姿势分析结果的软件。这甚至可以在衡量员工的同时发生。然后&#xff0c;Scalefit 根据国际标准对姿势、压缩力和关节力矩进行分析和可视化。 3D姿势分析 如今&#xff0c;Xsens 技术可让您快速测量工作场所员工的态度。一套带有 17 个…

反向散射技术(backscatter communication)

智能反射表面辅助的反向散射通信系统研究综述&#xff08;知网&#xff09; 1 反向散射通信技术优势和应用场景 反向散射通信技术通过被动射频技术发送信号,不需要一定配有主动射频单元,被认为是构建绿色节能、低成本、可灵活部署的未来物联网规模化应用关键技术之一,是实现“…