QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2990|回复: 0
打印 上一主题 下一主题

[其他资源] 轻量级神经网络算法-SqueezeNet

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组: 2018美赛大象算法课程

    群组: 2018美赛护航培训课程

    群组: 2019年 数学中国站长建

    群组: 2019年数据分析师课程

    群组: 2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2022-9-5 16:42 |只看该作者 |正序浏览
    |招呼Ta 关注Ta
    / W5 ]1 x. U) c. J  Q& a
    轻量级神经网络算法-SqueezeNet4 C' k" Z- Q, |2 |8 Q, F$ m
    4. 轻量级神经网络算法目录* \0 B* X6 m6 b: D$ z/ c
    轻量级神经网络算法& e5 m# q5 S, K: B/ h4 H
    4.1 各轻量级神经网络算法总结对比! x: c3 @: W9 k; G5 P
    4.2 SqueezeNet" [  |0 u; v8 S; D. c; x
    4.3 DenseNet
    " z( _5 J3 {/ v1 l7 r5 J$ J7 y# s9 L4.4 Xception
    ( M+ }- p% m. I1 I5 ~/ q4.5 MobileNet v14 m7 J! F6 |/ n$ c' [
    4.6 IGCV
    6 f& @9 k; Y$ Y# x( \4.7 NASNet
    ! g$ x: ?$ W: }2 ?5 X( k3 ?+ \4.8 CondenseNet9 R; n- y  w  f6 [  [) c
    4.9 PNASNet# [$ B( P- |! Y6 L) U8 j
    4.10 SENet
    ( R1 n# e# E7 G( E/ D/ T& t4.11 ShuffleNet v1) ?# e0 x  ]7 i( j: ]1 N, l
    4.12 MobileNet v2
    ! D2 k' F! x6 H+ N, p# J; Q4.13 AmoebaNet
    4 W- x4 [  v* M6 ^+ I% @  P4.14 IGCV2
    " J' Z3 A" I! R3 `' q& |4.15 IGCV3. Z2 J# q" f$ m5 f- a
    4.16 ShuffleNet v2
    % G9 t$ D$ @0 {8 v  M0 {( {$ C; S4.17 MnasNet
    2 A0 @3 _" \4 I4.18 MobileNet v3
    9 c- k6 |+ D2 Q( ^8 {# g深度学习知识点总结- b, ?3 y6 |, \
    ( v) T% `$ B" b6 |/ Q1 Z
    专栏链接:
    ' A  _3 ^5 N( c. Qhttps://blog.csdn.net/qq_39707285/article/details/124005405
    : H  z  Y7 q/ X8 y本专栏主要总结深度学习中的知识点,从各大数据集比赛开始,介绍历年冠军算法;同时总结深度学习中重要的知识点,包括损失函数、优化器、各种经典算法、各种算法的优化策略Bag of Freebies (BoF)等。
    % z2 F5 D" x: t( s4 `, |/ M  O: Y0 M6 D! f& F8 ~' G, M# a
    本章目录
    9 x' P" J% M  T, m  R4. 轻量级神经网络算法目录
    , [5 @6 @* b+ \0 v$ _( u4.2 SqueezeNet% L2 [, r+ ]1 {) E. J
    4.2.1 问题分析
    % i1 x$ a7 M- X4.2.2 SqueezeNet的三大策略
    % w8 i3 k. V! h4.2.3 Fire模块  r; W. d! ~. r/ x( g
    4.2.4 SqueezeNet整理结构
    4 w( A, z! O4 N- w: k4.2.5 代码实现SqueezeNet0 N3 W8 @0 r+ o. v3 B
    4.2.6 其他实现细节
    3 l/ X4 I, O8 b/ e$ E3 m4.2.7 总结4 _% w1 E" d, s$ X! L: z* M& z
    4.2 SqueezeNet4 [6 l) s/ t; e2 z! t
    4.2.1 问题分析( ^5 N, P& I' p8 E. e) v
    最近在卷积神经网络上的研究主要关注提高准确率。在给定相应的准确率之后,通常有多个CNN结构可以达到该准确率要求。在同等准确率的情况下,较小的CNN结构至少有三个优点:
    & q, a- P# Z- H4 \3 S9 X+ M
    1 n( }" j8 a8 O在分布式训练期间,较小的CNN需要较少的跨服务器通信5 b* p0 N4 S5 j4 n: p/ S
    在自动驾驶汽车等应用场景下,较小的CNN需要较少的带宽将新模型从云端导入$ S; E$ |( m/ }/ D/ Y! v6 z
    较小的CNN更适合部署在FPGA和其他内存有限的硬件上) O' N# G3 }: ~, P
    为了达到所有这些优点,本文提出了较小的CNN结构,称之为SqueezeNet。SqueezeNet在ImageNet上实现了AlexNet同级别的准确率,但参数减少了50倍。另外使用模型压缩技术,能够将SqueezeNet压缩到小于0.5MB(比AlexNet小近510倍)。9 U) Z; Q3 q0 \. K, d3 j
    # A4 P0 [* Q3 r9 H
    4.2.2 SqueezeNet的三大策略6 O) S3 p5 s, _1 M, g' U9 j
    策略1:用1x1卷积代替3x3卷积
    : R* I1 y4 a7 }7 `; Q6 O1x1卷积核的参数比3x3少9倍,所以网络中部分卷积核改为使用为1x1卷积。
    , b# t6 \; a2 @9 o6 [% W
    ; l, H1 v# R: _- M- y- s策略2:减少输入到3*3卷积核的通道数量! P1 o0 h5 i/ m, \) ^
    对于一个完全由3×3卷积核组成的卷积层来说,总参数量=输入通道数×卷积核数量×(3×3),所以仅仅替换3×3卷积核为1×1,还不能完全达到减少参数的目的,还需要减少输入到3×3卷积核的通道数。本文提出squeeze layer,来减少输入到3×3卷积核的通道数。
    9 {  m" V2 ~- X) a- f  T' }  J- u- C' j+ x9 f5 N. f
    策略3:在网络后期再进行下采样,使卷积层具有较大的激活图& u, B. F" t0 ?) a( r9 d) |/ O
    这里的激活图(activate maps)指的是输出的特征图。在卷积网络中,每个卷积层产生空间分辨率至少为1×1(经常大于1×1)的输出激活图,激活图的宽和高主要是由1)输入的数据(例如256×256的图片) 2)CNN结构中下采样层方法 决定的。下采样通常是stride>1的卷积层或者池化层,如果在早期layer中有较大的stride,则后面大部分的layers中将是小的激活图,如果在早期layer中stride为1,在网络后期layer中stride>1,则大部分的layer将有一个大的激活图。本文的观点是,大的激活图能够产生更高的分类准确率,所以在网络设计中,stride>1往往设置在后期的layer中。
    0 P- Q& H, K% Z' u  _
    7 p3 j. ?4 f- }/ w. B8 }策略1和策略2在试图保持准确性的同时,明智地减少CNN中的参数数量,策略3是在有限的参数预算上最大化准确率。
    2 n7 y8 ]% [3 y8 [  a0 n5 @  l" x& U& }& K
    4.2.3 Fire模块/ ?1 G8 y, r1 g' }# p: R2 q
    为实现这3大策略,提出了Fire模块,Fire模块中主要包含squeeze层和expand层。squeeze卷积如图橙色椭圆内所示,只使用1×1卷积(策略1优化点),然后进入到expand卷积,expand卷积包括1×1(策略1优化点)和3×3卷积,squeeze和expand整体构成Fire模块,该模块有三个超参数s1x1,e1x1,e3x3,其中s1x1是squeeze层卷积核的数量,e1x1是expand层中1×1卷积核的数量,e3x3是expand层中3×3卷积核的数量,另外设置s1x1<(e1x1+e3x3)(策略2优化点),这样就能限制输入到3×3卷积核通道数,实现策略2的想法。
    . L/ R7 P) ^$ t, k! Y) }
    4 \( N$ v! L1 s3 F$ y$ ~/ _; T
    7 g' B- y" x2 p3 g- z6 t4.2.4 SqueezeNet整理结构
    * W, h: }: B" C' Z: ESqueezeNet整体网络结构图如下所示,其中maxpool(stride=2)分别设置在conv1/fire4/fire8/conv10之后,这些相对较晚的pool安排符合策略3的想法。  b2 C$ F  n/ S2 Z. g6 v. T/ D

    , i- J! U% P* l8 n5 }+ a5 T! Y, G) P+ \
    4.2.5 代码实现SqueezeNet$ J2 _+ f5 A& o& B, u
    Fire模块的代码如下:
    , c" e* k" [: Q6 _; k8 A* f. F
    ; r( c5 q" v2 f  Xclass Fire(nn.Module):& J& ?# z3 ^9 l
    2 L+ \) O* B* b6 l" h! E
        def __init__(
    ! W" t4 r" P; v6 I* K        self,7 v0 n' [. K3 s4 n' k! D/ Y
            inplanes: int,
    * i0 V9 {, M( }* ]        squeeze_planes: int,& s* W, |. t! v- q# s2 O3 h
            expand1x1_planes: int,- @, }# z  z' [+ |  m, E" G$ V2 x/ J
            expand3x3_planes: int8 Y5 A" i- t, i0 v% |
        ) -> None:
      s  B6 i. C: C8 M2 c) P& j4 U        super(Fire, self).__init__()  y+ N1 Q9 Y$ z  B% ?$ ~
            self.inplanes = inplanes
    ' A7 h0 I4 y9 `: J        self.squeeze = nn.Conv2d(inplanes, squeeze_planes, kernel_size=1)# }/ o; v+ ~% H7 w6 z; W
            self.squeeze_activation = nn.ReLU(inplace=True)" F+ G: ?+ g0 u8 V: Z
            self.expand1x1 = nn.Conv2d(squeeze_planes, expand1x1_planes," ]4 H6 O( v: F
                                       kernel_size=1). u* u/ Y8 P3 Q* Y7 m3 o" g
            self.expand1x1_activation = nn.ReLU(inplace=True)
    9 ^# A3 L3 E9 \# t$ t+ V' ~7 {        self.expand3x3 = nn.Conv2d(squeeze_planes, expand3x3_planes,
    , h# r8 r  j0 N                                   kernel_size=3, padding=1)- c1 e% P, d) V! R
            self.expand3x3_activation = nn.ReLU(inplace=True)
    ' x& n# G, C9 a! V8 L3 u& K$ X
    ) P6 D* M( ?" }/ B+ C! n    def forward(self, x: torch.Tensor) -> torch.Tensor:
    5 I. e  }5 A3 T" B        x = self.squeeze_activation(self.squeeze(x))* b3 N$ c' c, J1 P! v! ^
            return torch.cat([: c* n( R5 x4 w2 ^; ~2 k/ R8 _7 A
                self.expand1x1_activation(self.expand1x1(x)),, @1 \  H4 U6 o& [
                self.expand3x3_activation(self.expand3x3(x))4 y  c/ k( A( M9 S/ q
            ], 1)2 n' b5 ?+ `, ~1 W8 e( F2 ^0 Y/ B: ]

    ) s2 l( C4 V; v1
    ) L4 G7 i+ P6 L; K+ S& A2
    ; S* I7 q; }% I3* z  }5 v! a3 `% U- D
    4
    - a. M( m+ ]7 i- R, k5 A: Z- _( l5& o7 r6 c5 t! q$ l" l' C1 u
    6
    # z5 o, g, D' V; E7! i( ~" I. I+ G) P) b
    8
    / A; V/ ~3 d( n0 c7 ~- p! p9 o9
    5 G: ^+ i. U% z# I10
    6 I6 B: x( r0 S, s1 E0 `/ }5 N( f117 i* q; p; @$ \- L
    127 I0 C  _/ t+ ^2 I1 k8 k! M& S* n
    13
    # r( |" J% o0 z. p8 `: _% n140 }; \5 ?- f1 ?$ M$ D
    15
    3 Q, j2 T/ s7 d2 f1 r9 }" t169 p) |- d- W7 H5 c0 d0 |( x
    17' k2 E2 ]+ m6 n) ]3 I0 F5 P' m9 l
    18
    ! `1 x! P0 X3 z+ w* z19
    9 c/ Q9 f0 a; R6 a20
    ! x  b! t' |1 b2 R: h* ~. d  A21
    3 R2 g( [" v8 J- n1 F; {22# S) p6 w' [6 D; U: S7 C, _9 l
    23
    1 a+ |5 X7 H0 V' j( a- \6 m: u24! r& L9 Z4 `5 o
    25
    3 w1 S1 P+ n. s5 f% Y0 o26, o$ G8 W& U, R1 R
    SqueezeNet主要有两个结构,SqueezeNet1_0和SqueezeNet1_1,SqueezeNet1_0即官方版本(图2左侧),SqueezeNet1_1与SqueezeNet1_0相比在没有减少准确率的情况下,节省近2.4倍的参数量和计算量。( [/ `; n/ E6 @: w% J1 H8 E, G
      l  h/ ?% j6 @9 C. ?
    SqueezeNet1_0的网络结构如下:; {) g+ L! i# P' I: B

    $ b- G! ]) x7 D* Z& T  t8 B  w' yself.features = nn.Sequential(: L5 H0 Y! x0 b9 V
        nn.Conv2d(3, 96, kernel_size=7, stride=2),
    , _) Q& l  l0 q    nn.ReLU(inplace=True),
    % X2 V! {( A' y* ~+ E    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    : Y* w! w% D- A0 K6 u7 V" f# ^    Fire(96, 16, 64, 64),7 ~9 A9 H( m$ a& Y* J' q3 ^8 W
        Fire(128, 16, 64, 64),3 j4 F4 t% S1 m
        Fire(128, 32, 128, 128),
    * s; w$ O- |. c! E  }    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    & v$ T1 s% ~; v    Fire(256, 32, 128, 128),3 e  w  x2 x% w- ]4 G1 ~
        Fire(256, 48, 192, 192),* W$ q, E4 ^3 t) V: I
        Fire(384, 48, 192, 192),5 {5 U! s: @- r8 F( r" z* [
        Fire(384, 64, 256, 256),8 m% L- Q, \# i7 S) a: h
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),) f4 q  F0 m; e" \% O
        Fire(512, 64, 256, 256),
      f- Q/ R: a9 Y( }, o$ j5 G)
    2 Z# t  V/ O5 T4 W) s8 K1 z; J  A8 [final_conv = nn.Conv2d(512, self.num_classes, kernel_size=1)+ D' G6 i% n3 X% p$ u3 b. P
    self.classifier = nn.Sequential(
    0 s) F' p. U( m$ i    nn.Dropout(p=0.5),
    9 F5 ]- W- E+ q& ^0 l$ _& G  U/ p    final_conv,& e& X+ i6 x; n. T
        nn.ReLU(inplace=True)," |( @% S1 }  E
        nn.AdaptiveAvgPool2d((1, 1))
    6 a: o' h  K  H8 x+ U/ @)
    7 i6 ~" T/ M$ O6 q7 X3 F) @+ P! U$ i5 p- t3 F& ^3 L0 e- E
    % v9 B9 D3 i4 y
    1
      y, I+ p- g5 l4 Q7 I% g* f2/ h& a  d3 Q0 W; ?' H& q# X: z+ U
    3
    5 J8 s; _9 Y3 a" ]9 n) K4# e$ M% S$ m9 o7 e
    5( ~$ I* W. p' C; s2 K  ]; z
    6
    3 y9 R: ]: ~. w9 e7
    $ S3 D/ A6 a  z  p3 k( O9 }0 V* T8; _2 X  y) S, R
    9' W6 @2 l8 e  Y4 ^: q' z
    10/ j/ w3 A6 K) b( n% t/ j
    118 I2 {- r3 z' j  V
    12
    $ g) ?. }% e  h. @13
    7 @' L6 [6 @( a14
    ( M, d$ Q+ R& H& {15
      ?+ y. ^4 {) ^5 l; r' B: y16
    ! X. X, ^; B" B$ A9 I2 G% [17
    ' [) J! C2 n5 q8 o. u186 I! r7 l" A# k8 o
    19
    9 l  ]' n9 @$ Q5 k  D20- x: k. M2 F/ d0 L. o+ e9 D
    21+ q7 f$ L& y0 |- R6 D$ ~
    22/ k5 J* ?: |+ w2 m( H$ m( |
    23
    ; n* o0 d2 H' u9 _SqueezeNet1_1的网络结构如下:
    & S: i$ w$ |( ^1 G$ }9 o( t4 j: z" `8 n4 o# [7 ~  R
    self.features = nn.Sequential(
      N# O7 \0 p- N0 o+ _+ f1 [8 a# c    nn.Conv2d(3, 64, kernel_size=3, stride=2),
    ! v; @+ {3 S, Q- K4 a6 B" Z    nn.ReLU(inplace=True),
    4 F0 E% v/ j. ^7 l: }, E    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),/ B7 B6 f* g2 G/ p( J
        Fire(64, 16, 64, 64),
    % K$ b& Y* q/ b: P- {2 B  _# e9 N    Fire(128, 16, 64, 64),+ U$ x/ _1 K9 C$ T8 m
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),, c5 ]9 t# ~$ I0 Q- l: w' G
        Fire(128, 32, 128, 128),
    0 u# @' @; ?, N  U    Fire(256, 32, 128, 128),. H0 Q3 |. @3 E; n1 A8 i) E" s" D
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),+ k$ j# ?) o( m# {" [7 u
        Fire(256, 48, 192, 192),0 k, V4 t7 D/ ~( o/ B) u
        Fire(384, 48, 192, 192),
    6 W) k& R. i- x2 I6 O& A8 V    Fire(384, 64, 256, 256),8 S# F$ ^: v1 D1 d, `# `! \/ h3 Y
        Fire(512, 64, 256, 256),
    & O% b. ~( H5 |5 |): `. E3 W3 Z' K
    final_conv = nn.Conv2d(512, self.num_classes, kernel_size=1)& ~7 G8 D9 P6 P% c8 V
    self.classifier = nn.Sequential(  ]" L1 u. ~# ]( Y( T
        nn.Dropout(p=0.5),
    ; u  W9 f  r8 P! z# U0 _1 t' t; X    final_conv,# S% S1 `" K7 {  G
        nn.ReLU(inplace=True),: w  W$ J$ u* v1 `7 Q
        nn.AdaptiveAvgPool2d((1, 1))
    8 q  _8 {7 P1 J2 J# v/ m)
    1 c: O: v7 b- H" t+ p! D7 V- y. l  c- c
    1
    6 f: ^4 J" U1 X2 \8 d% @2
    & y8 i: C: Q4 z( o6 \+ K. X9 M- j3. |$ x8 |& |: K; P# u2 s$ v2 R
    45 O' i; P: r5 H7 M2 |6 Z
    56 M& _& A: V! X: Y, I# [: C$ g0 B
    67 J) i% }  F0 c, e9 L
    71 i! T) S5 t. a0 J( q) C( d
    8
    2 @! z0 O* o! I; V1 T7 c9
    - f1 E, I1 ~$ ^- b; o103 y2 }# |$ t8 F# h5 A; O1 p
    11
    ! L: s- s: q3 s$ X+ u# o+ M124 e( i7 b0 b! T4 \  V, N
    131 G6 d4 _6 z6 E. U& @  w1 m
    14
    + e- t" V' |0 n2 W; G' L* U15
    4 Y# ]5 N: |' ]7 F1 K16
    # W+ g$ z& ~+ q4 I# H17
      ^4 s( j; w4 d+ q185 m# E. @' U3 Q: d2 I+ J
    19; C- ~  R/ G& Z+ V4 t3 y; \8 D
    20
    5 J; [: i$ N3 G( A, p4 q9 C, n21' ?* V6 o" m) U  V
    22
    ! Y' C5 K4 `9 ]8 x2 g) y, |SqueezeNet各层详细参数量及其输入输出如下表所示。2 i# D6 M/ y: a- _# _

    # d; J- \2 K$ W7 }5 C( D' G- |" S- O( @9 R9 x+ }
    4.2.6 其他实现细节# y' I" u4 G7 h* H4 R( [6 f
    1×1和3×3卷积的输出宽和高不同,所以3×3卷积设置1个为0的padding
    . ]6 l0 W2 A" Z/ Y/ Osqueeze和expand层中使用ReLU
    , v" l) s9 Q" w+ \* z在fire9之后的layer中使用ratio为50%的Dropout
    ( l2 {% \" |8 s- D* S) {. I' i. G% ]参考NiN算法想法,SqueezeNet中不含全连接层5 k* u# O+ H$ \. h4 W7 k; e
    训练时,前期学习率设置为0.04,然后线性减少
    0 f! w! [4 n' x) h- w% q% j4.2.7 总结
    % c! L5 E8 c$ i8 m! _/ h+ U9 @本文最主要就是三点:
    : P! o! N, n% i4 f  z( X6 X* ?0 Q& H6 X* p6 e+ h  v4 F0 y4 n5 N
    用1×1卷积代替部分3×3卷积,输出两种卷积级联的结果
    . w8 A, g: q, Q# a减少输入到3×3卷积的特征图的通道数,减少参数量/ O# ]( y' Y. d1 _/ B! C
    不过早的使用pool,在网络结构后期再使用pool,这样能提高分类准确率' u* A9 [' Z4 U0 d# }
    ————————————————
    & I# f9 G; H6 l  V版权声明:本文为CSDN博主「Mr.小梅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    ' V+ L3 @+ G4 e: s  e" w. }原文链接:https://blog.csdn.net/qq_39707285/article/details/126498100! v. w2 B% t; A
    . ]2 f. f2 q) b6 m" S
    + f+ l$ q5 v, _7 _" W  e7 @
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-10-9 04:11 , Processed in 0.443080 second(s), 52 queries .

    回顶部