精华内容
下载资源
问答
  • 轻量级Visual Transformer模型——LeViT(ICCV2021)
    千次阅读
    2022-02-28 03:20:49

    LeViT是FAIR团队发表在ICCV2021上的成果,是轻量级ViT模型中的标杆,文章对ViT中多个部件进行的改进,如加速策略等,对很多工程化铺设ViT系列模型都是很有借鉴意义的。
    按说,近期出现的优质模型非常多,各种冲击SOTA的,详情可戳我整理的小综述《盘点2021-2022年出现的CV神经网络模型》。但我为何会单独对LeViT拿出来进行详细剖析呢?原因很简单:LeViT非常工程实用,是一款足够优秀的轻量级视觉transformer模型。市面上很多轻量级模型都进入了一个误区:大家都在比拼FLOPs数和参数数量。却忽略了工程上最直观的评价标准Inference Speed
    首先要知道一个前提就是,无论是FLOPs还是parameters数量,都与inference speed并不成线性关系
    先看一组数据:
    在这里插入图片描述
    即使EfficientNet B0跟LeViT-128有着接近的FLOPs和params,甚至前者这两项数据更优秀,但推理速度后者可以在GPU上快2倍,CPU上快3倍,ARM CPU上快乐近10。看过这个数据,你是否对LeViT有了兴趣呢?


    按照惯例:
    论文标题(链接):LeViT: A Vision Transformer in ConvNet’s Clothing for Faster Inference
    Github:https://github.com/facebookresearch/LeViT


    LeViT

    在这里插入图片描述
    LeViT的结构如上图所示,很像一个火箭形状。这也是LeViT的特点之一:快速缩小特征图。这里的关键点在“特征图”,对,LeViT的思想里淡化了transformer中“token”的概念,引入了CNN中activation map(特征图)的概念。所以,大致按对待CNN的思路来对待LeViT会更有助于理解这个模型,比如最后加的那个average pooling。


    图1咱们从下看到上,

    1. 用CNN代替“划片”
    这里用到了4层卷积层,每层的步长都是2,这样不需要使用pooling也能完成特征图下缩。在这一步,下缩幅度非常sharp,用4层就缩小了16倍的边长。而ResNet-18缩小到这个尺寸用了10层。如此sharp的尺寸下缩,使得送到self-attention模块的size就非常小了,有助于加速模型。
    3x224x224 -> 256x14x14
    输出为256x14x14的特征图,咱们用attention的角度理解:256个通道,每个通道14x14个token。咱们要知道self-attention的计算次数跟token数呈二次线性相关(知识点),所以token数太大对自注意力计算非常unfriendly。所以,轻量级ViT的思路肯定是尽量减小输入到self-attention模块之前的token数的。
    用Conv layers代替无交集划片有几个优势:1. 可以进行初步的特征提取;2. 保留相对位置信息,可以不用在这个部分进行位置编码。

    2. 用BN代替LN
    transformer里最流行的norm方法就是LN,在很多论文的实验中都表明用LN比BN可以带来更多的准确率提升。而LeViT作者认为,LN比BN在准确率提升的作用上很有限,但LN比BN在计算上慢一些。
    文章里对BN为何更快的解释如下:在inference的时候,BN计算可以融合到卷积里,几乎不会额外带来计算负担。(这点我附议,在TensorRT实验的时候可以看到BN的参数都固化下来了,而且前段时间的RepVGG也有融合BN到CNN中的操作。)
    原文描述如下:

    The batch normalization can be merged with the preceding convolution for inference, which is a runtime advantage over layer normalization (for example, on EfficientNet B0, this fusion speeds up inference on GPU by a factor 2).

    3. 多分辨率金字塔
    这个trick就描述了LeViT整个火箭型的结构,每过一个block,activation maps的尺寸都会减小,从开始的14x14到后面的4x4。

    4. 具有收缩特征图尺寸作用的self-attention模块
    在这里插入图片描述
    如Figure 5所示,咱们只需要关注输入输出的size,左边是正常的自注意力模块,右边是带特征图下缩的自注意力模块。通过在Q的计算里引入下采样来实现。

    5. 采用维度更小的key
    在原始ViT里面,K、Q、V都有一样的维度。实际上V可以保持大一点的维度,我们可以认为V承载了token的主要信息。而key可以看做是更高层的抽象,所以采用更小的key维度也并不影响模型效果。另外,我们看self-attention计算公式,会发现 K × Q K \times Q K×Q才是self-attention计算的大头,如果shrink一下key的维度,那自注意力模块的计算效率将会大大提升。

    6. 采用注入attention的可学习位置编码
    这就是LeViT一个很优秀的创新了。传统的ViT位置编码只在划片时候,以人工定义的位置矩阵来进行位置编码。但是LeViT作者认为,token的相对位置不仅在最开始很重要,在每一层attention模块都很重要。所以,采用一种注入self-attention计算的位置编码,咱们看图:
    在这里插入图片描述

    就是这个位置,用Attention Bias来代替Position Embedding(划重点)。
    在看一眼公式:
    在这里插入图片描述
    就是在QK乘法之后加上一个bias常数,这个bias是对称的、可学习的

    7. 蒸馏学习
    蒸馏学习是指采用一个teacher模型来训练student模型。最开始将distillation思想用到ViT的模型是DeiT,而LeViT就是DeiT的改进版。

    transformer引入CV领域之后有个很大的缺点迟迟没有被解决,那就是transformer不够Data Efficient。相比CNN,ViT对训练数据更加依赖,要达到CNN的SOTA,ViT需要用更多的数据以及需要更多的训练周期。
    在这里插入图片描述
    咱们看上图,DeiT的收敛比ResNet要慢很多,而且CNN比例越高,模型收敛越快
    这个原因很好解释:(下面是本人画的图)
    在这里插入图片描述
    卷积的优势是自带对neighbors的归纳偏执,所以收敛更快,但缺乏global性;
    self-attention的优势是global性,但本身处理单元时,在初始状态下会对所有token“一视同仁”。如上图所示,self-attention比Conv天生有更大的解空间

    于是,引入蒸馏训练就很有必要了。
    蒸馏训练是找个well-trained的CNN当做teacher model,然后用LeViT一方面跟Ground Truth做CE loss,一方面跟CNN的输出distribution做一个CE loss。这样可以用CNN来引导LeViT来加快收敛,这样就可以做到data-efficient了
    LeViT用到的teacher model是RegNetY-16G。
    咱们看一下loss function就一目了然了:
    在这里插入图片描述
    上面截图来自DeiT的论文,蒸馏loss分为软蒸馏和硬蒸馏两种。通常用的都是硬蒸馏。

    更多相关内容
  • Snort轻量级入侵检测系统全攻略

    热门讨论 2014-06-01 20:22:31
    《Snort轻量级入侵检测系统全攻略》共11章,主要内容包括四个方面,较为全面地介绍了Snort入侵检测系统的安装部署、配置、调整及使用,基本涵盖了Snort有关的方方面面。《Snort轻量级入侵检测系统全攻略》的特点是...
  • 轻量级Java EE企业应用实战.z01,轻量级Java EE企业应用实战.z0,轻量级Java EE企业应用实战.z03 ,轻量级Java EE企业应用实战.z04 ,量级Java EE企业应用实战.z05, 轻量级Java EE企业应用实战.zip 共6个分卷,仅3积分,...
  • 轻量级C++实现的httpserver和httpclient,给予mongoose,代码量很小,可以方便嵌入到自己的项目中,为C++项目添加http的功能,抛弃libcurl这种重型库
  • Logger是轻量级日志类,提供写日志功能,支持多线程,支持可变形参数操作,支持写日志级别的设置。 博客地址: http://blog.csdn.net/sunflover454/article/details/49758801
  • 本书介绍了Java EE轻量级的三个开源框架:Struts2、Hibernate和Spring。其中在Struts2部分主要讲解MVC设计思想,Struts2的处理流程及配置,Struts2常用控制器组件,以及Struts2常用标签库的使用。在Hibernate部分...
  • 轻量级java ee企业应用实战(第3版)—struts 2+spring 3+hibernate整合开发原名
  • Java EE互联网轻量级框架整合开发 SSM框架(Spring MVC+Spring+MyBatis)和Redis实现-688-2017.7-有书签.part1
  • 轻量级JavaEE企业应用实战(第四版)从光盘里考出来的。因为JAR包太大。所以把项目里的JAR包都删了,大家自己导JAR包吧。
  • 轻量级神经网络——shuffleNet

    千次阅读 多人点赞 2022-02-28 19:45:30
    文章目录轻量级神经网络——shuffleNetshuffleNet1逐点分组卷积(Pointwise group convolution)✨✨✨通道重排(channel shuffle)✨✨✨shuffleNet Unit✨✨✨shuffleNet1的网络结果和效果 轻量级神经网络——...

    轻量级神经网络——shuffleNet

    shuffleNet1

      在之前,已经讨论过一种轻量级神经网络——MobileNet,文中对MobileNet的三个版本都做了详细的介绍,读此篇之前,建议先了解MobileNet,特别是要对其中的深度可分离卷积有较清晰的认识,因为shuffleNet中的分组卷积和MobileNet的逐深度卷积(Depthwise Convolution)非常相似,故在此篇的描述过程中,我认为大家已经有了MobileNet的基础🆗🆗🆗

      shuffleNet1的论文只有9页,是不是还是很轻量的🎈🎈🎈我认为shuffleNet1中最主要的思想有两点,一是逐点分组卷积(Pointwise Group Convolution),二是通道重排(channel shuffle)。 下面就来具体的谈谈这两点🧨🧨🧨
     
     

    逐点分组卷积(Pointwise group convolution)✨✨✨

      在说明逐点分组卷积之前先来了解一下什么是分组卷积和逐点卷积。所谓分组卷积,就是将原始的特征图分成几组后再分别对每一组进行卷积。用下图来进行解释,左图表示普通卷积,右图表示分组卷积。左图普通卷积输入特征图个数为12,采用了6个卷积核对输入图像进行卷积,得到了6个输出的特征图;右图分组卷积输入特征图的个数也是12,但其将12个特征图分成了3组(红、绿、黄),每组有4个特征图,这时同样需要6个卷积核,但需要注意的是这6个卷积核也被分成3组,即两两一组。然后将每组的输入特征图和对应的两个卷积核进行卷积,这时每组都会产生2个特征图,一共也会有6个输出特征图。注意:虽然普通卷积核分组卷积都需要6个卷积核,但他们卷积核的通道数是不一样的,对本列来说,普通卷积的卷积核通道数为12,而分组卷积的卷积核通道数为4。

    image-20220228161354149

      上面谈到了普通卷积和分组卷积的区别,其实看过MobileNet的同学,应该感觉很熟悉,这和MobileNet里面的逐深度卷积(DW卷积)是非常像的,相当于DW卷积把组分得足够多,每个通道的特征图都为一组,因此不理解分组卷积的可以结合DW卷积思考思考🔮🔮🔮

      读到这里,很多读者可能要问了,为什么要采用分组卷积呢?分组卷积相对于普通卷积有什么优势呢?其实分组卷积可以有效的减少网络的容量,使网络更加轻量。下面还是结合上图来算算普通卷积核分组算计各自所消耗的参数量和计算量(不会计算参数量和计算量的请移步:神经网络参数量、计算量(FLOPS)、内存访问量(AMC)计算详解)【注意:这里假设卷积核大小为K*k,输出特征图大小为H*W】

    image-20220228170351967

      通过上图,可以很明显的看出,分组卷积的参数量和计算量都比普通卷积要小。定量观察会发现,普通卷积的计算量和参数量都是分组卷积的3倍,刚好是所分的组数,这是一个一般性的结论。

      至此,分组卷积应该是叙述清楚了。这回再来谈谈逐点卷积,这个似乎真没啥好谈的了,再我的MobileNet博客中也提到过,逐点卷积其实就是卷积核为1*1的卷积。

      讨论完分组卷积和逐点卷积,就可以来定义逐点分组卷积了。顾名思义,逐点分组卷积就是将分组卷积核逐点卷积相结合,即表示卷积核大小为1*1的分组卷积。

     
     

    通道重排(channel shuffle)✨✨✨

      上面介绍了逐点分组卷积,这里可以看一下逐点分组卷积后的效果,如下图所示:

    image-20220228172700011

      可以看到,不同组之间是没有任何联系的,即得到的特征图只和对应组别的输入有关系。论文中也有这样的描述,这种分组因不同组之间没有任何联系,学习到的特征会非常有限,也很容易导致信息丢失,因此论文提出了channel shuffle。

    image-20220228181740259

      channel shuffle具体是怎么实现的呢?下图标绿框部分即为channel shuffle的操作,即从得到的特征图中提取出不同组别下的通道,并将他们组合在一起,最终channel shaffle完成后的结果如(c)中黄色虚线框所示。

      上图中从绿框传变成黄色虚线框的过程即为channel shaffle通道重排过程,现将其分解出来,看看channel shaffle通道重排具体过程,如下图:

    image-20220228183536486

    图片来源于B站UP主:同济子豪兄

    ​  
     

    shuffleNet Unit✨✨✨

      (a)是最原始的残差结构,(b)、©都是shuffleNet的单元结构。先来看看(a)是如何变成(b)的,首先是用逐点分组卷积代替了逐点卷积,同时在其后跟了一个channel shuffle操作,然后中间的3x3DWConv没有变化,最后的逐点卷积依旧换成了逐点分组卷积。©是用来降采样的,和(b)主要区别在shortcut分支中采用了3x3d的步长为2的AVG Pool、主分支中DWConv中的步长变成了2以及最后使用的是Concat而不是add,这样的结构会使输入图像尺寸减半,通道数翻倍。

    image-20220228184042618

      还有一些细节需要在这里提一下,一是在第二个逐点分组卷积后并没有使用channel shuffle,这是因为此时得到的结果已经相当不错了,所以不需要进行通道重排了;二是在DWConv后并没有进行Relu激活,这个原因我在MobileNetV2中有说到,不知道的可以去看一看。

    image-20220228190312831

    image-20220228190556317

     
     

    shuffleNet1的网络结果和效果

      下图网络结构的每一步变化也较好分析,不会的可以参考我之前的博客。需要注意的是黄框框住的g表示不同的分组数,如g=3表示将特征图分成3组进行分组卷积。

      下面为shuffleNet和其他一些经典网络的性能比较,可以看出shuffleNet在FLOPs一定时优势还是很明显的🍭🍭🍭

    image-20220228192650743

    shuffleNet和主流模块堆叠而成的网络新能比较
       

    image-20220228192934740

    shuffleNet和主流网络性能比较
       

    image-20220228193114237

    shuffleNet和MobileNet图像分类性能比较
     

     
     
    如若文章对你有所帮助,那就🛴🛴🛴

    咻咻咻咻~~duang~~点个赞呗

    展开全文
  • 一种轻量级嵌入式GUI设计与源代码

    热门讨论 2016-05-03 12:14:34
    一种轻量级嵌入式GUI设计文档和源代码: 1. word文档描述该GUI设计原理; 2. ANSI C代码实现该GUI
  • 14种轻量级网络综述 — 主干网络篇

    千次阅读 2021-07-30 00:44:43
    点击上方“3D视觉工坊”,选择“星标”干货第一时间送达作者丨VincentLee来源丨晓飞的算法工程笔记编辑丨极市平台导读早期的卷积神经很少考虑参数量和计算量的问题,由此轻量级网络诞生,...

    点击上方“3D视觉工坊”,选择“星标”

    干货第一时间送达

    作者丨VincentLee

    来源丨晓飞的算法工程笔记

    编辑丨极市平台

    导读

     

    早期的卷积神经很少考虑参数量和计算量的问题,由此轻量级网络诞生,其旨在保持模型精度基础上近一步减少模型参数量和复杂度。本文对主要的轻量级网络进行了简述,让大家对轻量级网络的发展历程以及种类有更加清晰的了解。

    轻量级网络的核心是在尽量保持精度的前提下,从体积和速度两方面对网络进行轻量化改造,本文对轻量级网络进行简述,主要涉及以下网络:

    • SqueezeNet系列

    • ShuffleNet系列

    • MnasNet

    • MobileNet系列

    • CondenseNet

    • ESPNet系列

    • ChannelNets

    • PeleeNet

    • IGC系列

    • FBNet系列

    • EfficientNet

    • GhostNet

    • WeightNet

    • MicroNet

    SqueezeNet系列

    SqueezeNet系列是比较早期且经典的轻量级网络,SqueezeNet使用Fire模块进行参数压缩,而SqueezeNext则在此基础上加入分离卷积进行改进。虽然SqueezeNet系列不如MobieNet使用广泛,但其架构思想和实验结论还是可以值得借鉴的。

    SqueezeNet

    SqueezeNet是早期开始关注轻量化网络的研究之一,使用Fire模块进行参数压缩。

    SqueezeNet的核心模块为Fire模块, 结构如图 1 所示, 输入层先通过squeeze卷积层   卷 积)进行维度压缩,然后通过expand卷积层   卷积和   卷积混合)进行维度扩展。Fire模 块包含 3 个参数, 分别为squeeze层的   卷积核数  , expand层的   卷积核数   和   层的   卷积核数  , 一般

    SqueezeNext

    SqueezeNext是SqueezeNet实战升级版,直接和MobileNet对比性能。SqueezeNext全部使用标准卷积,分析实际推理速度,优化的手段集中在网络整体结构的优化。

    SqueezeNext的设计沿用残差结构,没有使用当时流行的深度分离卷积,而是直接使用了分离卷积,设计主要基于以下策略:

    • Low Rank Filters   低秩分解的核心思想就是将大矩阵分解成多个小矩阵,这里使用CP分解(Canonical Polyadic Decomposition), 将   卷积分解成   和   的分离卷积, 参数量能从   降为   。

    • Bottleneck Module   参数量与输入输出维度有关,虽然可以使用深度分离卷积来减少计算量,但是深度分离卷积在终端系统的计算并不高效。因此采用SqueezeNet的squeeze层进行输入维度的压缩,每个block的开头使用连续两个squeeze层,每层降低1/2维度。

    • Fully Connected Layers   在AlexNet中,全连接层的参数占总模型的96%,SqueezeNext使用bottleneck层来降低全连接层的输入维度,从而降低网络参数量。

    ShuffleNet系列

    ShuffleNet系列是轻量级网络中很重要的一个系列,ShuffleNetV1提出了channel shuffle操作,使得网络可以尽情地使用分组卷积来加速,而ShuffleNetV2则推倒V1的大部分设计,从实际出发,提出channel split操作,在加速网络的同时进行了特征重用,达到了很好的效果。

    ShuffleNet V1

    ShuffleNet的核心在于使用channel shuffle操作弥补分组间的信息交流,使得网络可以尽情使用pointwise分组卷积,不仅可以减少主要的网络计算量,也可以增加卷积的维度。

    在目前的一些主流网络中,通常使用pointwise卷积进行维度的降低,从而降低网络的复杂度,但由于输入维度较高,pointwise卷积的开销也是十分巨大的。对于小网络而言,昂贵的pointwise卷积会带来明显的性能下降,比如在ResNext unit中,pointwise卷积占据了93.4%的计算量。为此,论文引入了分组卷积,首先探讨了两种ShuffleNet的实现:

    • 图1a是最直接的方法,将所有的操作进行了绝对的维度隔离,但这会导致特定的输出仅关联了很小一部分的输入,阻隔了组间的信息流,降低了表达能力。

    • 图1b对输出的维度进行重新分配,首先将每个组的输出分成多个子组,然后将每个子组输入到不同的组中,能够很好地保留组间的信息流。

    图1b的思想可以简单地用channel shuffle操作进行实现,如图1c所示, 假设包含   组的卷积 层输出为   维,首先将输出reshape()为  , 然后进行transpose 0 , 最后再flatten()回   维。

    ShuffleNet V2

    ShuffleNetV1的pointwise分组卷积以及bottleneck结果均会提高MAC,导致不可忽视的计算损耗。为了达到高性能以及高准确率,关键是在不通过稠密卷积以及过多分组的情况下,获得输入输出一样的大维度卷积。ShuffleNet V2从实践出发,以实际的推理速度为指导,总结出了5条轻量级网络的设计要领,并根据要领提出了ShuffleNetV2,很好地兼顾了准确率和速度,其中channel split操作十分亮眼,将输入特征分成两部分,达到了类似DenseNet的特征重用效果。

    ShuffeNetV1的unit结构如图3ab所示, 在V1的基础上加入channel split操作, 如图3c所示。在每个unit的开头, 将特征图分为   以及   两部分,一个分支直接往后传递,另一个分支包 含3个输入输出维度一样的卷积。V2不再使用分组卷积, 因为unit的开头已经相当于进行了分 组卷积。在完成卷积操作后,将特征concate, 恢复到unit的输入大小, 然后进行channel shuffle操作。这里没有了element-wise adddition操作,也节省了一些计算量,在实现的时候将concat/channel shuffle/channel split合在一起做了,能够进一步提升性能。  空间下采样时对unit进行了少量的修改,如图3d所示,去掉了channel split操作,因此输出大小降低一倍,而维度则会增加一倍。

    MnasNet

    论文提出了移动端的神经网络架构搜索方法,该方法主要有两个思路,首先使用多目标优化方法将模型在实际设备上的耗时融入搜索中,然后使用分解的层次搜索空间让网络保持层多样性的同时,搜索空间依然很简洁,MnasNet能够在准确率和耗时中有更好的trade off

    MobileNet系列

    MobileNet系列是很重要的轻量级网络家族,出自谷歌,MobileNetV1使用深度可分离卷积构建轻量级网络,MobileNetV2提出创新的inverted residual with linear bottleneck单元,虽然层数变多了,但是整体网络准确率和速度都有提升,MobileNetV3则结合AutoML技术与人工微调进行更轻量级的网络构建。

    MobileNetV1

    MobileNetV1基于深度可分离卷积构建了非常轻量且延迟小的模型,并且可以通过两个超参数进一步控制模型的大小,该模型能够应用到终端设备中,具有很重要的实践意义。

    MobileNet通过深度可分离卷积优进行计算量优化,将标准卷积转化为深度卷积和pointwise卷积,每层后面都会接BN和ReLU。

    MobileNetV2

    MobileNetV2首先表明高维特征实际可以用紧凑的低维特征表达,然后提出了新的层单元inverted residual with linear bottleneck,该结构与残差网络单元类似,都包含shorcut,区别在于该结构是输入输出维度少,中间通过线性卷积先扩展升维,然后通过深度卷积进行特征提取,最后再映射降维,可以很好地保持网络性能且网络更加轻量。

    MobileNetV3

    MobileNetV3先基于AutoML构建网络,然后进行人工微调优化,搜索方法使用了platform-aware NAS以及NetAdapt,分别用于全局搜索以及局部搜索,而人工微调则调整了网络前后几层的结构、bottleneck加入SE模块以及提出计算高效的h-swish非线性激活。

    CondenseNet

    DenseNet基于特征复用,能够达到很好的性能,但是论文认为其内在连接存在很多冗余,早期的特征不需要复用到较后的层。为此,论文基于可学习分组卷积提出CondenseNet,能够在训练阶段自动稀疏网络结构,选择最优的输入输出连接模式,并在最后将其转换成常规的分组卷积分组卷积结构。

    分组卷积的学习包含多个阶段,前半段训练过程包含多个condensing阶段,结合引导稀疏化的正则化方法来反复训练网络,然后将不重要的filter剪枝。后半部分为optimization阶段,这个阶段对剪枝固定后的网络进行学习。

    ESPNet系列

    ESPNet系列的核心在于空洞卷积金字塔,每层具有不同的dilation rate,在参数量不增加的情况下,能够融合多尺度特征,相对于深度可分离卷积,深度可分离空洞卷积金字塔性价比更高。另外,HFF的多尺度特征融合方法也很值得借鉴 。

    ESPNet

    ESPNet是用于语义分割的轻量级网络,核心在于ESP模块。如图a所示,该模块包含point-wise卷积和空洞卷积金字塔,分别用于降低计算复杂度以及重采样有效感受域不同的特征。ESP模块比其它卷积分解方法(mobilenet/shufflenet)更高效,ESPNet能在GPU/笔记本/终端设备上达到112FPS/21FPS/9FPS。

    另外,论文发现,尽管空洞卷积金字塔带来更大的感受域,但直接concate输出却会带来奇怪网格纹路。为了解决这个问题,论文提出图b的HFF操作,在concate之前先将输出进行层级相加。相对于添加额外的卷积来进行后处理,HFF能够有效地解决网格纹路而不带来过多的计算量。另外,为了保证网络的梯度传递,在ESP模块添加了一条从输入到输出的shortcut连接。

    ESPNetV2

    ESPNetv2在ESPNet的基础上结合深度分离卷积的设计方法,进行了进一步的模型轻量化。首先将point-wise卷积替换为分组point-wise卷积,然后将计算量较大的空洞卷积替换为深度可分离空洞卷积,最后依然使用HFF来消除网格纹路,输出特征增加一次特征提取,得到图b的结构。考虑到单独计算K个point-wise卷积等同于单个分组数为K的point-wise分组卷积,而分组卷积的在实现上更高效,于是改进为图c的最终结构。

    ChannelNets

    论文提出channel-wise卷积的概念,将输入输出维度的连接进行稀疏化而非全连接,区别于分组卷积的严格分组,以类似卷积滑动的形式将输入channel与输出channel进行关联,能够更好地保留channel间的信息交流。基于channel-wise卷积的思想,论文进一步提出了channel-wise深度可分离卷积,并基于该结构替换网络最后的全连接层+全局池化的操作,搭建了ChannelNets。

    PeleeNet

    基于DenseNet的稠密连接思想,论文通过一系列的结构优化,提出了用于移动设备上的网络结构PeleeNet,并且融合SSD提出目标检测网络Pelee。从实验来看,PeleeNet和Pelee在速度和精度上都是不错的选择。

    IGC系列

    IGC系列网络的核心在分组卷积的极致运用,将常规卷积分解成多个分组卷积,能够减少大量参数,另外互补性原则和排序操作能够在最少的参数量情况下保证分组间的信息流通。但整体而言,虽然使用IGC模块后参数量和计算量降低了,但网络结构变得更为繁琐,可能导致在真实使用时速度变慢。

    IGCV1

    Interleaved group convolution(IGC)模块包含主分组卷积和次分组卷积,分别对主分区和次 分区进行特征提取, 主分区通过输入特征分组获得, 比如将输入特征分为   个分区, 每个分区 包含   维特征,而对应的次分区则分为   个分区, 每个分区包含   维特征。主分组卷积负责对输入特征图进行分组特征提取, 而次组卷积负责对主分组卷积的输出进行融合, 为   卷 积。IGC模块形式上与深度可分离卷积类似,但分组的概念贯穿整个模块, 也是节省参数的关键,另外模块内补充了两个排序模块来保证channel间的信息交流。

    IGCV2

    IGCV1通过两个分组卷积来对原卷积进行分解,减少参数且保持完整的信息提取。但作者发现,因为主分组卷积和次分组卷积在分组数上是互补的,导致次卷积的分组数一般较小,每个分组的维度较大,次卷积核较为稠密。为此,IGCV2提出Interleaved Structured Sparse Convolution,使用多个连续的稀疏分组卷积来替换原来的次分组卷积,每个分组卷积的分组数都足够多,保证卷积核的稀疏性。

    IGCV3

    基于IGCV和bootleneck的思想,IGCV3结合低秩卷积核和稀疏卷积核来构成稠密卷积核,如图1所示,IGCV3使用低秩稀疏卷积核(bottleneck模块)来扩展和输入分组特征的维度以及降低输出的维度,中间使用深度卷积提取特征,另外引入松弛互补性原则,类似于IGCV2的严格互补性原则,用来应对分组卷积输入输出维度不一样的情况。

    FBNet系列

    FBNet系列是完全基于NAS搜索的轻量级网络系列,分析当前搜索方法的缺点,逐步增加创新性改进,FBNet结合了DNAS和资源约束,FBNetV2加入了channel和输入分辨率的搜索,FBNetV3则是使用准确率预测来进行快速的网络结构搜索。

    FBNet

    论文提出FBNet,使用可微神经网络搜索(DNAS)来发现硬件相关的轻量级卷积网络,流程如图1所示。DNAS方法将整体的搜索空间表示为超网,将寻找最优网络结构问题转换为寻找最优的候选block分布,通过梯度下降来训练block的分布,而且可以为网络每层选择不同的block。为了更好地估计网络的时延,预先测量并记录了每个候选block的实际时延,在估算时直接根据网络结构和对应的时延累计即可。

    FBNetV2

    DNAS通过训练包含所有候选网络的超网来采样最优的子网,虽然搜索速度快,但需要耗费大量的内存,所以搜索空间一般比其它方法要小,且内存消耗和计算量消耗随搜索维度线性增加。为了解决这个问题,论文提出DMaskingNAS,将channel数和输入分辨率分别以mask和采样的方式加入到超网中,在带来少量内存和计算量的情况下,大幅增加 倍搜索空间。

    FBNetV3

    论文认为目前的NAS方法大都只满足网络结构的搜索,而没有在意网络性能验证时的训练参数的设置是否合适,这可能导致模型性能下降。为此,论文提出JointNAS,在资源约束的情况下,同时搜索最准确的训练参数以及网络结构。FBNetV3完全脱离了FBNetV2和FBNet的设计,使用的准确率预测器以及基因算法都已经在NAS领域有很多应用,主要亮点在于将训练参数加入到了搜索过程中,这对性能的提升十分重要。

    EfficientNet

    论文对模型缩放进行深入研究,提出混合缩放方法,该方法可以更优地选择宽度、深度和分辨率的维度缩放比例,从而使得模型能够达到更高的精度。另外,论文通过NAS神经架构搜索提出EfficientNet,配合混合缩放方法,能够使用很少量的参数达到较高的准确率。

    GhostNet

    训练好的网络一般都有丰富甚至冗余的特征图信息来保证对输入的理解,相似的特征图类似于对方的ghost。但冗余的特征是网络的关键特性,论文认为与其避免冗余特征,不如以一种cost-efficient的方式接受,于是提出能用更少参数提取更多特征的Ghost模块,首先使用输出很少的原始卷积操作(非卷积层操作)进行输出,再对输出使用一系列简单的线性操作来生成更多的特征。这样,不用改变其输出的特征图数量,Ghost模块的整体的参数量和计算量就已经降低了。

    WeightNet

    论文提出了一种简单且高效的动态生成网络WeightNet,该结构在权值空间上集成了SENet和CondConv的特点,在激活向量后面添加一层分组全连接,直接产生卷积核的权值,在计算上十分高效,并且可通过超参数的设置来进行准确率和速度上的trade-off。

    MicroNet

    论文提出应对极低计算量场景的轻量级网络MicroNet,包含两个核心思路Micro-Factorized convolution和Dynamic Shift-Max,Micro-Factorized convolution通过低秩近似将原卷积分解成多个小卷积,保持输入输出的连接性并降低连接数,Dynamic Shift-Max通过动态的组间特征融合增加节点的连接以及提升非线性,弥补网络深度减少带来的性能降低。

    本文亮点总结

    1.ShuffleNet系列是轻量级网络中很重要的一个系列,ShuffleNetV1提出了channel shuffle操作,使得网络可以尽情地使用分组卷积来加速,而ShuffleNetV2则推倒V1的大部分设计,从实际出发,提出channel split操作,在加速网络的同时进行了特征重用,达到了很好的效果。

    2.FBNet系列是完全基于NAS搜索的轻量级网络系列,分析当前搜索方法的缺点,逐步增加创新性改进,FBNet结合了DNAS和资源约束,FBNetV2加入了channel和输入分辨率的搜索,FBNetV3则是使用准确率预测来进行快速的网络结构搜索。

    本文仅做学术分享,如有侵权,请联系删文。

    下载1

    在「3D视觉工坊」公众号后台回复:3D视觉即可下载 3D视觉相关资料干货,涉及相机标定、三维重建、立体视觉、SLAM、深度学习、点云后处理、多视图几何等方向。

    下载2

    在「3D视觉工坊」公众号后台回复:3D视觉github资源汇总即可下载包括结构光、标定源码、缺陷检测源码、深度估计与深度补全源码、点云处理相关源码、立体匹配源码、单目、双目3D检测、基于点云的3D检测、6D姿态估计源码汇总等。

    下载3

    在「3D视觉工坊」公众号后台回复:相机标定即可下载独家相机标定学习课件与视频网址;后台回复:立体匹配即可下载独家立体匹配学习课件与视频网址。

    重磅!3DCVer-学术论文写作投稿 交流群已成立

    扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

    同时也可申请加入我们的细分方向交流群,目前主要有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等微信群。

    一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

    ▲长按加微信群或投稿

    ▲长按关注公众号

    3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列三维点云系列结构光系列手眼标定相机标定orb-slam3等视频课程)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:

    学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

     圈里有高质量教程资料、可答疑解惑、助你高效解决问题

    觉得有用,麻烦给个赞和在看~  

    展开全文
  • 基于thundernet框架+dlanet网络+shufflenetv2卷积模块的小目标检测--轻量级骨干网络前言1 骨干网络框架DSNet(dlanet网络+shufflenetv2)1.1 主体框架1.2 密集融合层1.3 阶梯状多尺度融合结构1.3.1 多尺度融合的必要性...

    前言

    之前一篇博客介绍的是轻量级小目标检测的检测框架部分,本篇博客介绍该项目的轻量级骨干网络设计部分。

    1 骨干网络框架DSNet(dlanet网络+shufflenetv2)

    现有的骨干网络几乎都会包含Resnet的残差结构和densenet的密集连接结构,dlanet的结构结合了残差结构和密集连接结构,既能通过残差结构有效避免梯度消失,同时又能通过拼接操作减少计算量和保存特征。
    另外一方面,对于小目标检测问题,由于候选框的识别分类需要深层大感受野的语义特征,而小目标检测又非常依赖浅层的细节特征,所以多尺度特征融合显得非常有必要,dlanet使用了阶梯状(树状)融合的结构,比FPN具有更好的融合效果。

    1.1 主体框架

    在这里插入图片描述
    由于地面目标相对较小,所以为了尽量保存地面小目标的原始特征,本文使用相对较大的 作为图片的输入尺寸。网络结构类似DenseNet多个密集块级联的结构,使用了包含残差结构和通道拼接结构的多个密集融合层级联,并在最后使用多尺度融合层融合不同密集融合层产生的不同尺寸特征图。同时为了增大感受野,减少计算量,图片在卷积网络传递过程中持续下采样,特征图的尺寸逐渐减小,所以为了减少特征在这过程中的流失,保持特征的丰富性和多样性,每次下采样时,特征图尺寸缩小一半,通道数翻倍。网络的主体框架如上表所示。

    1.2 密集融合层

    密集融合层主要融合同层级相同尺寸的特征图,不仅能够通过残差结构和通道拼接高效完成特征学习、特征复用、特征选择等任务,而且能在缩小特征图尺寸的同时增加通道数,保持特征丰富性和多样性。本文设计了两种密集融合层结构,一种比较复杂,用于生成更丰富更复杂的特征,放在中间,即密集融合层2和密集融合层3;一种比较简单,能够用较少的计算量处理信息生成特征,放在首尾,即密集融合层1和密集融合层4。如下图所示

    密集融合层2、3示意图
    在这里插入图片描述
    密集融合层1、4示意图
    在这里插入图片描述
    残差模块示意图
    密集融合层的结构和DenseNet的密集块十分相似,第一个步长为2的残差结构主要充当DenseNet中转换层的角色,用于将大特征图下采样成小特征图,连接不同的密集融合层,同时,通道拼接后也都有瓶颈层减少通道数降低计算量。不同于DenseNet的每个特征图都直接复用,这里每两个特征图通道拼接即复用一次。这是因为,一方面,每两个特征图之间已经使用了残差结构,其支路一定程度上能够代替通道拼接的旁路完成特征保存和损失传播的作用,另一方面,减少复用次数也可以减少瓶颈层,降低参数量和计算量。
    本文的密集融合层结构结合了DenseNet的密集连接和ResNet的残差结构。一方面,能够通过密集连接将较浅和较深层的特征组合在一起,以更高的计算效率学习跨越更多层次结构的更丰富的特征组合,另一方面也能通过残差结构更好地连接网络不同层,改善反向传播,促进网络优化,避免出现梯度消失。除此之外,使用残差结构也可以减少通道拼接的密度,从而减少瓶颈层,降低参数量和计算量,进一步提高计算效率和融合效率。

    1.3 阶梯状多尺度融合结构

    1.3.1 多尺度融合的必要性

    浅层大尺寸特征图包含丰富的细节信息,对小目标的分类以及定位都有重要意义,而深层小尺寸特征图具有丰富的语义信息,为大目标的识别提供更有力的支撑,多尺度特征融合能够融合浅层特征的细节信息和深层特征的语义信息,在保证获得足够复杂分类特征的同时,增强细节特征提取能力和小目标感知能力,有效提升目标特别是小目标的定位精度,减少小目标的漏检。
    除此之外,多尺度特征融合还能增大特征图的尺寸,从而增加特征图上分布的先验框的密度,有效减少小目标的漏检。
    在这里插入图片描述

    如上图所示,图(a)是下采样16倍特征图上的先验框示意图,图(b)是下采样8倍特征图上的先验框示意图,黄色“+”是先验框的中心,橙色虚线是设置的不同尺寸不同宽高比的先验框。图(a)中由于先验框密度太小,先验框中心点距离目标中心点都比较远,所以没有与目标匹配的先验框,图(b)由于下采样倍数更小,特征图尺寸更大,所以先验框的密度也更大,可以有效减少图(a)中红色矩形框出现的漏检情况,对小目标的识别精度有很大提升。

    1.3.2 阶梯状融合结构

    在这里插入图片描述
    如上图所示,8s表示密集融合层2输出的,原始 512 × 512 512×512 512×512图片下采样8倍后得到的 64 × 64 × 128 64×64×128 64×64×128的特征图;16s表示密集融合层3输出的,输入图片下采样16倍后得到的 32 × 32 × 256 32×32×256 32×32×256的特征图;32s表示密集融合层4输出的 16 × 16 × 512 16×16×512 16×16×512的特征图;512s表示密集融合层4输出的特征图经过全局均值池化得到的 1 × 1 × 512 1×1×512 1×1×512的特征图。蓝色的箭头表示将该特征图与所指特征图通道拼接;红色箭头表示先用 1 × 1 1×1 1×1卷积统一特征图通道数,然后反卷积对特征图上采样;黄色箭头表示全局均值池化;箭头交汇处均将特征图通道拼接,然后 1 × 1 1×1 1×1卷积压缩通道数。
    多尺度融合的过程如下:
    (1)32s特征图沿红色箭头1先用 1 × 1 1×1 1×1卷积将通道数减为256,然后上采样2倍得到 32 × 32 × 256 32×32×256 32×32×256特征图,沿箭头2与16s特征图通道拼接,得到 32 × 32 × 512 32×32×512 32×32×512特征图,再 1 × 1 1×1 1×1卷积得到 32 × 32 × 256 32×32×256 32×32×256的新的16s特征图。
    (2)原16s特征图和8s特征图沿箭头3、4融合得到新的8s特征图,新的16s特征图和新的8s特征图沿箭头5、6又得到新的8s特征图。
    (3)32s特征图沿黄色箭头7全局平均池化得到 1 × 1 × 512 1×1×512 1×1×512的特征图,红色箭头8表示512s特征图broadcast操作得到 64 × 64 × 128 64×64×128 64×64×128的特征图,它与(2)中得到的新的8s特征图融合得到最终的 64 × 64 × 128 64×64×128 64×64×128特征图。
    不同于FPN在多个尺寸特征图上预测,本文只在融合后的 这一个特征图上进行预测。原因如下:
    (1)地面目标数据集相对通用数据集,其目标尺寸分布范围较小,一般都是中小尺寸,不存在大尺寸目标,因此多尺度预测对于提升识别精度的作用不大。
    (2)本文使用的递进的阶梯式融合方式可以使得不同尺寸特征图之间的信息补充更加充分,大尺寸的特征图也能够从小尺寸的特征图中得到足够的语义信息,所以只需要在融合后得到的单一特征图上进行预测。
    (3)在单一特征图上进行预测可以减少参数量和运算量。

    1.3.3 与U型结构对比

    在这里插入图片描述
    关于多尺度融合,之前的网络大多是如图3 9所示的U型结构,深层特征的语义信息很丰富但是空间上比较粗糙,所以将浅层特征跳跃连接到深层特征来融合尺寸和分辨率。但这种跳跃连接是线性的,并且最浅层的聚合最少,梯度反向传播经过一个聚合点便能传回到浅层,这种融合太简单,而且浅层特征的语义信息太少,很难直接和深层特征融合。
    而本文的融合结构聚合从最小的尺度开始,然后迭代地合并更大的尺度。通过这种方式,浅层特征不再直接融合,而是先和相邻层特征融合,获得了更多的语义特征,再和深层特征融合,此时融合效率更高、效果更好,信息的相互补充、相互流动更加充分,而且也具有更强的非线性,能够融合获得更复杂、更全面的特征。
    同时,本文还增加了全局信息的融合,将32s的特征图全局均值池化,再通过broadcast的方式融合进最终的特征图中,以极少的计算量获得了更大的感受野和更多的全局信息,能够有效提高目标识别的性能。
    另外,本文的融合结构在上采样时,使用的是反卷积,而非其他融合结构使用的双线性插值,这是因为包含学习参数的反卷积相比无参数的插值具有更灵活的学习空间,能够取得更好的上采样效果。

    1.4 轻量级卷积模块shufflenetv2

    本节主要介绍3种轻量化网络结构:MobileNetV1、ShuffleNetV1和ShuffleNetV2,并通过分析比较说明了选择ShuffleNetV2的基础模块作为骨干网络基础卷积模块的原因。

    1.4.1 MobileNetV1

    MobileNetV1主要使用深度分离卷积把普通卷积拆分成深度卷积和逐点卷积,同时配合宽度因子(width multiplier)和分辨率因子(resolution multiplier)来减少参数量和计算量,提高计算效率。如图所示,第1张是普通卷积示意图,第2张和第3张分别是深度卷积和逐点卷积示意图。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    如果采用 3 × 3 3×3 3×3卷积核的话,深度分离卷积相较标准卷积可以降低大约9倍的计算量和参数量。关于两者的详细介绍和计算量、参数量对比分析,可以参见具体介绍文档:link(提取码:d8pt)。

    1.4.2 ShuffleNetV1

    ShuffleNetV1主要通过分组卷积和通道重排(channel shuffle)来设计卷积神经网络模型, 以减少模型的参数量和计算量,这两个操作分别对应MobileNetV1深度分离卷积中的深度卷积和逐点卷积。
    在这里插入图片描述
    如上图所示,分组卷积和深度卷积类似,深度卷积是对每个通道独立卷积,每个卷积核处理一个通道的特征,而分组卷积是每个卷积核处理一组若干通道的特征,因此深度卷积实际上是分组卷积的一种特殊情况,当分组卷积的分组数等于输入特征图的通道数时,分组卷积就成了深度卷积。
    在这里插入图片描述
    对于分组卷积或深度卷积造成的通道信息流通不畅的情况,MobileNetV1的深度可分离卷积使用逐点卷积解决,ShuffleNetV1则使用了通道重排解决。如上图所示,是ShuffleNetV1的基础模块结构示意图。因此ShuffleNetV1相比MobileNetV1相当于用 分组卷积替换了原来的 卷积,效率更高,速度更快。

    1.4.3 ShuffleNetV2

    ShuffleNetV2对模型在计算访存比与模型并行度两个方面做了优化,提出了4个高性能网络设计的指导原则:
    (1)卷积的输入、输出通道数应尽可能接近
    (2)谨慎使用分组卷积
    (3)减少网络分支
    (4)逐元素运算的开销不可忽视
    在这里插入图片描述
    因此ShuffleNetV2在ShuffleNetV1的基础上根据上述发现做出了如下改动,ShuffleNetV2的基础模块结构如上图所示:
    (1)在开始处增加了一个通道分离(channel split)操作,这个操作将输入特征的通道分成两个分支,两个分支的通道数均为原先的一半,即c/2。
    (2)取消了 卷积层中的分组卷积操作,因为前面的通道分离其实已经算是变相的分组操作了。
    (3)element-wise add操作替换成通道拼接。
    (4)将通道重排(channel shuffle)的操作移到了通道拼接后面,和通道分离合并在一起。
    在这里插入图片描述
    如表所示,ShuffleNetV2相比MobileNetV1 、MobileNetV2和ShuffleNetV1,能够以相似的计算量获得更好的网络性能和更快的运行速度。不仅计算效率更高,而且参考了 DenseNet的思想,通过通道拼接实现特征重用,相比其他轻量化模型速度快、精度高。因此,本文选择了ShuffleNetV2的基础模块作为骨干网络的基础卷积模块。

    1.5 轻量级骨干网络DSNet

    根据之前介绍的DlaNet的主体框架、密集融合层、阶梯状多尺度融合结构,以及ShuffleNetV2的轻量级卷积模块t,确定了骨干网络DSNet,结构图如下所示。
    在这里插入图片描述
    其中的密集融合层1、4具体结构如下图所示。
    在这里插入图片描述
    密集融合层2、3具体结构如下图所示。
    在这里插入图片描述

    1.6 DSNet与其他骨干网络对比实验

    下表给出了在上一篇博客介绍的ThunderNet算法框架的基础上,分别使用ResNet101、ResNet101+FPN以及DSNet作为骨干网络,在VISDRONE数据集上的精度指标实验数据。可以看到在ResNet101添加了FPN多尺度融合的结构后,AP有明显提升,说明了多尺度融合结构对于提升小目标识别性能的显著作用,也验证了之前介绍的多尺度融合的必要性。而在采用本文提出的DSNet后,AP指标进一步上升,说明了本文的阶梯状多尺度融合结构相对FPN结构特征融合效果更好,对小目标的识别产生了更明显的提升作用。
    在这里插入图片描述
    下表给出了使用不同骨干网络的运行速度、计算量和参数量。可以看到DSNet相比ResNet101和ResNet101+FPN的骨干网络,运行速度更快,而且计算量和参数量都要小一个数量级,计算复杂度大大降低。说明使用DenseNet的密集连接结构和ShuffleNetV2的轻量化基础卷积模块能够显著提高网络的计算效率,减少计算复杂度和运行时间。
    在这里插入图片描述
    如下图,图(a)是ResNet101作为骨干网络的检测识别图,小目标的漏检情况相对严重;图(b)是ResNet101+FPN作为骨干网络的检测识别图,添加了FPN结构后,漏检情况有显著改善(右侧图1),说明多尺度融合结构对小目标检测识别的必要性;图©是DSNet作为骨干网络的检测识别图,漏检情况基本消除,且小目标的定位有明显优化,能够识别出之前两种骨干网络无法识别的行人和摩托车等目标(右侧图2、3),说明了DSNet的阶梯状多尺度融合结构相比FPN特征融合效果更好,对小目标的识别有更好的精度表现。
    在这里插入图片描述在这里插入图片描述
    综上所述,在使用改进过的Lighthead-RCNN算法框架的基础上,使用DSNet作为骨干网络相对其他骨干网络ResNet101和ResNet101+FPN,在速度、计算复杂度和精度上都有明显优势。

    2 算法结果

    2.1 不同算法不同数据集对比实验

    本文还将本文的算法(改进的Lighthead-RCNN算法框架+DSNet骨干网络)与其他算法在VISDRONE、NWPU、VEDAI三个地面目标数据集上进行对比实验。下面两个表分别给出了不同算法在不同数据集上的精度对比,以及本文算法和其他3种算法的运行速度、计算量和参数量对比。
    在这里插入图片描述在这里插入图片描述
    对比算法从一阶段检测识别算法中选择了SSD和RetinaNet,二阶段算法中选择了Faster-RCNN。RetinaNet使用了ResNet101作为骨干网络,算法本身包含FPN结构;Faster-RCNN使用了ResNet50作为骨干网络,并且添加了FPN结构;SSD使用VGG16作为骨干网络。为了增强对比,所有算法图像输入尺寸都为 512 × 512 512×512 512×512
    下面这个柱状图更加直观地给出了本文算法和其他三种算法在运行速度、计算量、参数量和不同数据集精度表现上的对比。本文算法在三个不同数据集上的精度表现都要优于另外三种算法,不但说明了本文算法相对其他算法在精度上的优势,也证明了本文算法对不同数据集的鲁棒性。同时本文算法运行速度明显快于其他算法,运行时间只有SSD512的1/5,计算量和参数量也比其他三种算法有明显减少,计算量只有SSD512的1/10,参数量只有RetinaNet的1/20。
    在这里插入图片描述
    综上所述,本文算法相对SSD、RetinaNet 和Faster-RCNN+FPN,能够以更小的计算复杂度和更快的运行速度获得更好的精度表现,同时对不同数据集也有不错的鲁棒性,更适合在无人机的移动计算平台部署。

    后记

    最后还是给出本项目的github源码,以及详细的介绍文档。希望能给大家带来帮助。
    github源码:link
    具体介绍文档:link。(提取码:d8pt)

    展开全文
  • 李刚老师的《轻量级Java EE企业应用实战(第三版)的源代码。由于本书的源代码共有374M,所以我只能分为几部分来上传。请大家支持我一下,多下载多的资源,再增加350积分,我就可以一次上传80M,这样就可以更好为大家...
  • 轻量级网络综述 — 主干网络篇

    千次阅读 2021-02-22 10:00:00
    轻量级网络的核心是在尽量保持精度的前提下,从体积和速度两方面对网络进行轻量化改造,本文对轻量级网络进行简述,主要涉及以下网络:SqueezeNet系列ShuffleNet系列MnasN...
  • 轻量级偏好数据库主要提供轻量级 Key-Value 操作,支持本地应用存储少量数据,数据存储在本地文件中,同时也加载在内存中的,所以访问速度更快,效率更高。轻量级偏好数据库属于非关系型数据库,不宜存储大量数据,...
  • Jvm开启/关闭偏向锁 开启偏向锁:-XX:+UseBiasedLocking -XX:BiasedLockingStartupDelay=0 关闭偏向锁:-XX:-UseBiasedLocking 轻量级轻量级锁是由偏向锁升级来的,偏向锁运行在一个线程进入同步块的情况下,当...
  • 轻量级神经网络架构综述

    千次阅读 2020-10-07 10:09:55
    轻量级神经网络架构综述 深度神经网络已经被证明可以有效的解决图像、自然语言等不同领域的问题.同时伴随着移动互联网技术的不断发展,便携式设备得到了迅速的普及,用户提出了越来越多的需求.因此,如何设计高效、高...
  • 上篇文章已经分析了Java对象头构成、源码及其对象头的调试,本篇将分析偏向锁、轻量级锁、重量级锁的实现及其演变过程。由于涉及到c++源码,估计不少同学没兴趣看,因此重点多以图+源码辅助分析。 通过本篇文章,你...
  • (欢迎各位轻量级网络科研学者将自己工作的核心代码整理到本项目中,推动科研社区的发展,我们会在readme中注明代码的作者~) 后续将持续更新模型轻量化处理的一系列方法,包括:剪枝,量化,知识蒸馏等等 Github...
  • 文章目录前言基本概念感受野分辨率深度宽度下采样上采样参数计算卷积计算类型标准卷积深度卷积分组卷积空洞卷积转置卷积可变性卷积其他算子池化全连接计算Addition / ConcatenateChannel shuffle 前言 卷积神经...
  • 超牛逼的几款轻量级笔记软件!

    千次阅读 2021-11-04 00:17:54
    CherryTree非常快,使其成为最好的轻量级笔记应用程序之一。 Sublime Text 适用OS: Windows, Mac, Linux 作为程序员,你可能早就知道Sublime Text。是的,这是一个文本编辑器,而不是一个笔记应用程序,但它当然也...
  • Linux最大的卖点之一一直是它能够减少和使用尽可能少的资源。...Lubuntu /Xubuntu首先,与几乎所有产品一样,Ubuntu选项可用于轻量级安装。实际上,有两个。每个人都有不同的目的,但两者都很棒。Xubun...
  • java中每个对象都可作为锁,锁有四种级别,按照量级从轻到重分为:无锁、偏向锁、轻量级锁、重量级锁。并且锁只能升级不能降级。 在讲这三个锁之前,我先给大家讲清楚自旋和对象头的概念。 自旋 现在假设有这么一...
  • Java Web轻量级开发全体验光盘源码
  • 轻量级cnn网络cv方向总结

    千次阅读 多人点赞 2021-05-29 11:28:16
    目录 轻量级人脸检测 轻量级人脸检测2 轻量级目标检测1 轻量级目标检测大合集 轻量级行人检测: 轻量级人脸识别: 轻量级ocr文字检测识别: 轻量级高精度人脸检测推荐: 轻量级高精度人脸关键点推荐: 轻量级高精度...
  • 一款你不得不了解的轻量级分布式任务调度系统! github地址:CronMan 简介 CronMan是一款轻量级的分布式任务调度系统。随着微服务化架构的逐步演进,单体架构逐渐演变为分布式、微服务架构,相应的也需要一个分布式...
  • 10 个用于 Linux 的开源轻量级 Web 浏览器
  • 轻量级和重量级框架的区别

    千次阅读 2019-11-21 11:58:30
    判定一个第三方框架是轻量级还是重量级是从多个方面去衡量的: 主要区别之一是以启动程序需要的资源来决定。比如,EJB启动的时候,需要消耗大量的资源,内存,CPU等,所以是重量级。而Spring则不,所以是轻量级...
  • 轻量级锁、偏向锁、重量级锁详情

    千次阅读 热门讨论 2018-11-17 13:48:47
    这篇文章是上篇文章是否真的理解了偏向锁、轻量级锁、重量级锁(锁膨胀)、自旋锁、锁消除、锁粗化,知道重偏向吗?的补充,对于偏向锁,网上有些对于它的原理解读过于简单,简单得似乎是错误的,最显眼的是对于Mark...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 682,725
精华内容 273,090
关键字:

轻量级

友情链接: Vehicle_Registration.rar