QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2991|回复: 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

    ! }1 X4 `4 [/ M* P+ C轻量级神经网络算法-SqueezeNet
    . s# D6 R* W3 n: a$ x4. 轻量级神经网络算法目录! @$ i# L0 Q5 v$ {# a2 v6 i
    轻量级神经网络算法
    8 F1 M* k' v1 n6 \4.1 各轻量级神经网络算法总结对比
    $ E% d# i7 R# J9 V4.2 SqueezeNet/ E3 B! `* d3 D: _
    4.3 DenseNet
    7 }! w( U7 [* ?- E3 f* j5 L4.4 Xception
    1 x& |4 p% N7 k, i7 g# Y0 ~4.5 MobileNet v1* W; @9 L+ T0 P
    4.6 IGCV3 a7 X$ c! P- l- g+ v/ L# v
    4.7 NASNet7 w2 f( I6 I+ {' P5 v, \% z
    4.8 CondenseNet
    + w# D9 t; ]/ ^0 \7 f4.9 PNASNet
    * `! f4 f8 V7 g8 D9 U, N# J4.10 SENet4 q+ d, [+ {* q  M
    4.11 ShuffleNet v1" Q: A# ]( w+ H2 Q* D) q) L
    4.12 MobileNet v2  H) y! x# e& Q. [
    4.13 AmoebaNet% k3 R- I  v2 l" y2 ]2 g2 _
    4.14 IGCV2, i( ?* i, Y& E  Q- ~/ Y; k
    4.15 IGCV3: s2 _# t" I$ [) n7 z4 K
    4.16 ShuffleNet v2
    9 H0 o' g4 w- }  c! q$ J4.17 MnasNet
    . E& v* p$ \" b0 H+ b4.18 MobileNet v3
      y  c( n/ H9 g2 e深度学习知识点总结( Q- {; N, ~5 D! j- g# U% ]

    5 x2 x# x$ U4 i# g9 o4 n1 I专栏链接:
    4 k  Y. Y' A+ A' J% r1 ?  ]9 v! ihttps://blog.csdn.net/qq_39707285/article/details/124005405: I  Y! A. j; }) T" d/ ^( z& s
    本专栏主要总结深度学习中的知识点,从各大数据集比赛开始,介绍历年冠军算法;同时总结深度学习中重要的知识点,包括损失函数、优化器、各种经典算法、各种算法的优化策略Bag of Freebies (BoF)等。( Z; s2 B! Y4 s; O; n6 r% Q
    6 |# u' v2 ?6 p, i4 m5 Q, ?
    本章目录' i/ f2 K0 {7 B4 b; d
    4. 轻量级神经网络算法目录  _* u' N, d, D, Y1 q
    4.2 SqueezeNet
    0 q' |! L( W% C- P2 o4.2.1 问题分析
    / ?% p- C* f* I/ r2 ?( e1 C7 M4.2.2 SqueezeNet的三大策略1 g5 Z, k# Q3 u+ b( Z& s
    4.2.3 Fire模块7 G5 u% C( D2 ~: F8 b& X$ e$ {1 h
    4.2.4 SqueezeNet整理结构
    + r% W9 f0 V6 Q! q' O4.2.5 代码实现SqueezeNet8 O$ ^) j1 p6 w+ x/ H
    4.2.6 其他实现细节
    % u, v, g7 M* g" S+ I4.2.7 总结2 N. z" ~0 \* c# ^
    4.2 SqueezeNet# b$ [" g  M  j/ b- h3 }
    4.2.1 问题分析% C0 A8 ]% B3 x' y
    最近在卷积神经网络上的研究主要关注提高准确率。在给定相应的准确率之后,通常有多个CNN结构可以达到该准确率要求。在同等准确率的情况下,较小的CNN结构至少有三个优点:: \( Z, A! u8 ^6 }, b: {
    5 V2 P4 J/ z6 q& h- z! H; p
    在分布式训练期间,较小的CNN需要较少的跨服务器通信
    ( `4 V; F7 F2 \* _: z0 X2 d在自动驾驶汽车等应用场景下,较小的CNN需要较少的带宽将新模型从云端导入
    ) p) L1 n" P6 s3 ^3 T; l/ w5 j较小的CNN更适合部署在FPGA和其他内存有限的硬件上/ i* d: B- M: q/ [+ h
    为了达到所有这些优点,本文提出了较小的CNN结构,称之为SqueezeNet。SqueezeNet在ImageNet上实现了AlexNet同级别的准确率,但参数减少了50倍。另外使用模型压缩技术,能够将SqueezeNet压缩到小于0.5MB(比AlexNet小近510倍)。
    1 g) \# X- |: ~  P9 z) G3 L
    ! l+ D. ?7 X( u+ I4 _4.2.2 SqueezeNet的三大策略
    " n1 w& |% ^* K6 w& I5 ~策略1:用1x1卷积代替3x3卷积
    7 g  s$ z5 x7 u6 B/ B  g1x1卷积核的参数比3x3少9倍,所以网络中部分卷积核改为使用为1x1卷积。
    ' g7 m$ |8 o- N
    ( a' Z" W! y/ r" }4 @策略2:减少输入到3*3卷积核的通道数量
    % \! ^) I( q$ n: l( \& P7 K& c对于一个完全由3×3卷积核组成的卷积层来说,总参数量=输入通道数×卷积核数量×(3×3),所以仅仅替换3×3卷积核为1×1,还不能完全达到减少参数的目的,还需要减少输入到3×3卷积核的通道数。本文提出squeeze layer,来减少输入到3×3卷积核的通道数。
    " [- g7 |/ S0 c+ f# q% Q9 A9 i: F
    * M4 b; k* X! Q1 U策略3:在网络后期再进行下采样,使卷积层具有较大的激活图
    ' A$ |4 O. O. ^4 ~: W# m* ~这里的激活图(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中。7 @* A& q0 R& s

    " ]- a% b' _8 }7 v2 {& t策略1和策略2在试图保持准确性的同时,明智地减少CNN中的参数数量,策略3是在有限的参数预算上最大化准确率。
    8 {; f5 c1 M% A7 B  ?
    ; ]! x2 X1 {1 W: e6 F+ T! G4.2.3 Fire模块
    # t. Q# g& ^' T0 S8 S; j+ [为实现这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的想法。
    4 }& L. ?4 W) p( v0 j
    % U7 v6 B2 l( b% ~8 f
    0 s, I0 Q( z2 L4 ~2 p4.2.4 SqueezeNet整理结构
    3 f& G- x1 ]0 a, y; o8 NSqueezeNet整体网络结构图如下所示,其中maxpool(stride=2)分别设置在conv1/fire4/fire8/conv10之后,这些相对较晚的pool安排符合策略3的想法。: y+ Q+ ~+ M0 R5 n& L! r+ X
    " Y3 `8 O* s( {- ]
    ) R3 L. g* g7 Y8 o1 X
    4.2.5 代码实现SqueezeNet
    2 E5 R  `8 Y6 ?2 `3 [5 ?- L2 M  MFire模块的代码如下:# q* t9 n4 P+ W0 X* Y

    0 @: `) T. j; q/ n# J7 Xclass Fire(nn.Module):
    ; |( o( ^! ^9 ~3 [: c, P0 V
    8 \% H( [8 i/ h9 P1 @* H    def __init__(/ r, a4 a* G; R* V9 R; Z0 H
            self,# R9 h3 r1 `2 O2 k% G4 K
            inplanes: int,9 t+ i. S" x9 v- n3 ]1 z
            squeeze_planes: int,
    ( p/ {# |* [5 q1 [& p: p        expand1x1_planes: int,; ?) {7 `: C6 v
            expand3x3_planes: int3 X# t1 O( Q) T' _1 Y" B2 V3 w
        ) -> None:! r8 y' {, H: g. C
            super(Fire, self).__init__()
    - N" l: G" w0 X$ o* j; }( j        self.inplanes = inplanes
    ( q+ ?' [# R  z' @6 r        self.squeeze = nn.Conv2d(inplanes, squeeze_planes, kernel_size=1)3 I3 p8 @' ]+ [" f, f% n
            self.squeeze_activation = nn.ReLU(inplace=True)5 a8 k$ h$ B8 q$ w3 v6 s
            self.expand1x1 = nn.Conv2d(squeeze_planes, expand1x1_planes,
    5 {. y8 Q. v2 h" E% O3 f$ ~                                   kernel_size=1)
    $ I. m9 K- [7 k( W% p" Z1 i% G        self.expand1x1_activation = nn.ReLU(inplace=True)
    # e6 D( u& H, M1 U        self.expand3x3 = nn.Conv2d(squeeze_planes, expand3x3_planes,3 d+ Y  u  d1 w
                                       kernel_size=3, padding=1)0 Z- Y8 Z" E. O1 p) u/ M
            self.expand3x3_activation = nn.ReLU(inplace=True)% U. J4 \8 F- W

    2 e8 g1 O6 _: N    def forward(self, x: torch.Tensor) -> torch.Tensor:/ w' Z- u# ~. U4 d- Q
            x = self.squeeze_activation(self.squeeze(x))
    - w8 y$ E: J8 \( ~5 y        return torch.cat([
    # ]0 |: O8 |5 E. N" ]3 y1 p( F            self.expand1x1_activation(self.expand1x1(x)),5 y1 l9 f& [/ e
                self.expand3x3_activation(self.expand3x3(x))4 u& F: J- X) H# Z" i& ]7 x
            ], 1)* t+ z  O, D# w6 P* {1 d3 O$ ]

    9 U& `- p2 R5 E9 t3 b" k9 u% E, P1
    ' x; k- k1 T6 Q/ k/ X- B) K' `2) |. }% ?! p# u$ T$ o" n
    3
    ' \$ {: q2 {' }( ^4
    4 D- E3 J2 B" N3 A. x; y& K1 R3 S5/ U5 }$ i' }- [5 x( l9 u; P
    6
    ' m: n4 U( f/ ~3 }9 l7( V: o, }' p7 j  m4 p
    81 d9 m" e' p* @! N: ?* _7 Y* K2 Y
    9
    ( o# }) b/ y( x- l10/ k1 A# j2 l8 l5 c: _) l
    110 n1 y( A6 I+ N4 O" V
    12
    8 P- A% J5 Z( P4 L1 w% t3 s- q1 N13/ a, S9 Y6 c. |- I* P; k  z7 F
    140 X# I% k5 O! n( g8 ]5 M
    15; x7 S: G1 C  O( h
    16
    : d3 a- m" p8 V2 k17
    5 ~- r, I1 s# Y) i18
    ' e4 l. p! p! n" c* k$ d191 o5 m( ?( a* I8 t- k! ~
    20
    " `) s2 h1 W# H5 s  i& E21
    ; y% K0 Q8 U8 X. P- a" h; I2 I22
    0 q! ~( w! {% n23
    & G  O0 f, }% d4 @' `% v24
    7 F: _/ i' x" N  _( c255 d9 T, L, ?, V" F9 G& E' _
    263 k7 q# X" |7 A5 U4 U
    SqueezeNet主要有两个结构,SqueezeNet1_0和SqueezeNet1_1,SqueezeNet1_0即官方版本(图2左侧),SqueezeNet1_1与SqueezeNet1_0相比在没有减少准确率的情况下,节省近2.4倍的参数量和计算量。
    ( D5 T' I+ y- [. K, ~  H4 C
    / W- J' ^  ~4 q. h9 v; l, V" qSqueezeNet1_0的网络结构如下:
      k( y! ^+ C4 F% D; f' g' C
    / C( R; u. g7 v  v$ Nself.features = nn.Sequential(4 {$ G( f/ M, s- H+ C' K$ j+ E6 T
        nn.Conv2d(3, 96, kernel_size=7, stride=2),# f" [- B& D' C' a6 I
        nn.ReLU(inplace=True),
    9 v5 k8 l, V: `. }    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    ' D2 ~2 J# X* p9 R/ }    Fire(96, 16, 64, 64),9 c4 r0 N* W6 f. W0 r
        Fire(128, 16, 64, 64),- N( c$ F6 o* g
        Fire(128, 32, 128, 128),
    . r& D5 }  [* S1 G) H: V    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    + @4 m1 T' C3 O! ^4 H! ^% _; N    Fire(256, 32, 128, 128),
    9 U0 u9 _* K. P/ w8 ~7 r+ n    Fire(256, 48, 192, 192),; ]/ A. W' Q' `: D. [. _, P8 ~
        Fire(384, 48, 192, 192),4 Y2 H$ @4 D, o  ?
        Fire(384, 64, 256, 256),4 h4 X' R8 R: e! e
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    ) w* r: n7 h# ~* U* p3 M+ b    Fire(512, 64, 256, 256),3 R% H4 P  a0 S' H
    )
    % p3 ?7 ?( G% m, o. `final_conv = nn.Conv2d(512, self.num_classes, kernel_size=1)% p3 w! ]4 D# }) x* c: F9 J
    self.classifier = nn.Sequential(
    & Z! _# P! Z5 p" f7 S# u    nn.Dropout(p=0.5),6 r- @) m7 V8 t3 l' L
        final_conv,* S, T- v- {: B
        nn.ReLU(inplace=True),& ~" g( I; m* `  B7 K0 }2 N
        nn.AdaptiveAvgPool2d((1, 1))7 }/ Z0 m. V: ^) I
    )
    - k  I5 _7 H* b7 J3 m7 P# R/ ]; q' Q4 h& E0 Y- A2 j

    & g  o  U" J5 K+ X0 T+ s3 @17 p% s, ?& d. i2 P6 a# X
    2
    ) F! `8 u% O  R2 p3
    - `( t+ I+ e, x1 N, O46 W7 Y, ]( c. c' P4 j7 u
    5
    ) \7 O% l9 S. ?( p+ t- s6- F, }+ b3 j+ N
    79 h& k; o  A0 a- F+ G
    8# V/ X4 W% }6 i  y6 w# H5 t
    9% l' y, u- C3 c0 G+ p- I* T
    103 X% j$ p' ], _
    11$ r5 K; T' t, u0 F2 L( ]
    12
    3 r! e7 F: b5 W4 Z  F13( p5 _+ K" K1 [7 x9 k' x
    141 ?9 y/ k) L, a- u% H- s" ?
    15( c# j' l- t3 |  v) v" @
    16, L; T( M( a1 ^% @
    17
    9 a, a- a) h( L5 i18/ x- u* I& L. M% I7 k) H7 Y
    19
    + b7 `0 ^0 a4 R20
    # t6 k9 L2 a2 G0 e1 l2 S7 F: h8 j) n21
    8 A2 [0 |9 `6 ~% z: T4 j3 E22. c7 m- j2 W, `) W
    23$ T  \6 _1 L* D9 L# r. d
    SqueezeNet1_1的网络结构如下:
    0 i+ C" n" W8 n
      s3 q0 }* l, C1 T6 ]0 cself.features = nn.Sequential(0 R  N! ^+ o4 x0 b* o1 Q
        nn.Conv2d(3, 64, kernel_size=3, stride=2),
    0 Z! ~$ i8 n7 o7 z" S! v    nn.ReLU(inplace=True),8 t/ Z/ U% {5 [' _
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),& Z# ]4 m( o. y
        Fire(64, 16, 64, 64),
    5 C' V8 M8 m$ p) z* @" w  M    Fire(128, 16, 64, 64),8 g8 t& d& i& [+ H
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),5 K- q0 {, |3 P
        Fire(128, 32, 128, 128),) t6 j" E1 s) E" {& N4 y* b2 D$ i0 Z
        Fire(256, 32, 128, 128),( {: p% Z( L  k. l0 a
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),9 @6 a. m. }# K' A& B: E8 F
        Fire(256, 48, 192, 192),
    # D0 e0 i2 R; K' o, E5 q9 k    Fire(384, 48, 192, 192),' N% S2 y9 ~4 x) q# a& l! W5 X; @
        Fire(384, 64, 256, 256),
    2 ~  _! @: t5 ]9 g    Fire(512, 64, 256, 256),
    7 v" U4 P7 B3 S7 o0 g)# f8 D, p' W- y' m" }' Y) I
    final_conv = nn.Conv2d(512, self.num_classes, kernel_size=1)1 d4 s# H, k7 b% q9 ^( M/ v) F5 z
    self.classifier = nn.Sequential(
      n  U6 H- I! R# m8 i$ r    nn.Dropout(p=0.5),
    * P, ~8 ^7 z8 `6 }    final_conv,9 n; n) ]  B) f% p4 `5 o% q: |0 f  ^( _
        nn.ReLU(inplace=True),- G, z+ l( z1 i; ]* Y6 Q4 Y
        nn.AdaptiveAvgPool2d((1, 1))
    3 \' V' c# P7 B, G0 `. f)
    " G1 q! Z: m: }2 p! C
    ( b3 X" @/ G: R: Q- [* S9 m2 ^5 f$ }1
    0 ^4 P. T  o: h8 w& p8 I8 N21 w% ~+ C. a6 \* x6 D
    31 P1 X# v0 l% K* ]: z. Y# \: U
    4: w- A5 U1 z' }
    5. t6 q: v* h6 T$ ~
    67 w: Q4 X4 O& ~6 h
    7$ a: s( |( }# T' C% b! Y
    8
    / H" E  Y1 q0 B; \2 \: l! S* p9
    8 N: ~3 A) V7 k103 d) M- q8 \& }3 B# u% Y' ]. |
    111 ?2 x$ g+ |* ~3 A& m& L, n7 A
    12
    ; V# F1 r0 }" q+ ?8 E# U3 b13( M3 S2 K5 r# C  P. R) f
    14# ^. t* ?! i2 o- ]. s' j, Z( z
    150 F8 m- ?/ U( T5 p. t7 D
    16
    & a2 C0 z5 B. J17
    # n+ Z7 N2 j) I0 B18. i5 q- o' \7 G, Z$ U+ u9 |
    191 m5 f' I# `  d$ ^" I8 W4 V8 c9 E# i( E
    204 d2 n5 |. F7 N
    21
    8 d9 D, }# n; q22
    2 N4 ?/ C( f3 m+ c' j' F( sSqueezeNet各层详细参数量及其输入输出如下表所示。3 R8 k* m7 T2 B1 M* r

    $ A- Q0 S; n2 G( i
    9 r7 z- z; X0 \+ _4.2.6 其他实现细节2 W* I( ~  V* ~
    1×1和3×3卷积的输出宽和高不同,所以3×3卷积设置1个为0的padding4 c  m! v& d$ J
    squeeze和expand层中使用ReLU
      l& O. E. }# a在fire9之后的layer中使用ratio为50%的Dropout
    ' U% F6 }7 u  \: F1 M/ U6 {参考NiN算法想法,SqueezeNet中不含全连接层
    1 M( l! P9 h; P! [/ D, o& N2 }训练时,前期学习率设置为0.04,然后线性减少3 H( ~8 ?, ^: t2 s! K% A
    4.2.7 总结
    / _9 g6 I, K1 A3 f0 B9 h7 T本文最主要就是三点:
    + I% c2 K; i0 [7 M  E0 `' ]
    6 y" N+ `. G' z8 B用1×1卷积代替部分3×3卷积,输出两种卷积级联的结果" z# |, j& y, Q7 Z, d5 z
    减少输入到3×3卷积的特征图的通道数,减少参数量- ?" V% \, M$ t. H
    不过早的使用pool,在网络结构后期再使用pool,这样能提高分类准确率
    3 B& G% n7 @* t" s+ K3 q/ b7 m————————————————
    8 k2 }( ^$ @. b* \; J& w版权声明:本文为CSDN博主「Mr.小梅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    * {( ]# \  Q0 L+ y4 L/ L$ v原文链接:https://blog.csdn.net/qq_39707285/article/details/126498100
    + ]' k/ G( J5 |% M- U! a9 S) G: v: R7 \
    ( U( _! U, W4 D7 I5 q9 l) e0 J0 S8 X- [& _) K, K/ g; [
    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:20 , Processed in 0.461041 second(s), 51 queries .

    回顶部