QQ登录

只需要一步,快速开始

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

    ; E2 D' |/ {- ~9 y轻量级神经网络算法-SqueezeNet1 T4 G& ~0 K' H
    4. 轻量级神经网络算法目录  d, X, H& z- |" y- K* e0 c. t
    轻量级神经网络算法
    / i! ~4 S; z  G6 e7 B4.1 各轻量级神经网络算法总结对比3 ^% l" g: [/ ]
    4.2 SqueezeNet
    * P- L: u1 r  ]( G4.3 DenseNet! I5 Q! b  G. A. S# B4 y/ ?2 h0 O
    4.4 Xception
    ) K. m5 `) c5 j* W9 Q4.5 MobileNet v12 o+ |" m9 k2 k" y' l: W# F
    4.6 IGCV
    3 K- J( K* r& K; ^( x" |) L4 F4.7 NASNet+ w0 I2 C: G! Y  m' w$ T8 K
    4.8 CondenseNet
    3 x6 \- Q. S( R7 s& [: D4.9 PNASNet7 m! L4 Y: `/ o7 J8 C3 G
    4.10 SENet
    " \# \1 M  f( q4.11 ShuffleNet v1
    ! {+ M% [: l8 y7 c4.12 MobileNet v2
    ; j6 s0 ]+ u" o% m- }4.13 AmoebaNet
    - S9 Z. G+ E) L1 |) o4.14 IGCV2
    2 U) Q' R9 z+ M' |. I4.15 IGCV3
    0 {' L, m& f6 U) V4.16 ShuffleNet v2) V, G& j  [. n- N( _" D- C
    4.17 MnasNet6 N$ o6 a' @# d7 y8 @
    4.18 MobileNet v37 T# y  p2 I, c/ G1 q
    深度学习知识点总结; R( @: o7 g, {5 l# ~  ^5 W

    1 o% C4 @' L1 c专栏链接:
    4 v) P0 S- w; A$ M3 J! i2 ~' nhttps://blog.csdn.net/qq_39707285/article/details/124005405
    " P) X# v  h8 t0 m* g8 V2 \9 f本专栏主要总结深度学习中的知识点,从各大数据集比赛开始,介绍历年冠军算法;同时总结深度学习中重要的知识点,包括损失函数、优化器、各种经典算法、各种算法的优化策略Bag of Freebies (BoF)等。
    ' n* i$ c; Z, [2 }9 b- l3 d- t! d
    # y+ v" K3 ?" P4 a7 D8 Z% P本章目录; D# Z1 Z, i7 t2 |8 J1 o
    4. 轻量级神经网络算法目录8 L$ p5 V- k/ K0 F! m  X, _
    4.2 SqueezeNet* D' m; u; a2 U
    4.2.1 问题分析9 _5 M" J# v8 v4 V: v
    4.2.2 SqueezeNet的三大策略
    & G: N5 o0 }/ D: V+ x* m6 \1 P# Y4.2.3 Fire模块% X7 ^2 n5 a4 A0 [- K
    4.2.4 SqueezeNet整理结构  W' u7 k# Y; b  I7 h2 E) u
    4.2.5 代码实现SqueezeNet; k! Z6 p3 B! d% r0 P
    4.2.6 其他实现细节9 Q9 O9 c! E* i
    4.2.7 总结! ~! t3 C% Q3 s% ^8 x  `$ e
    4.2 SqueezeNet
    , ?+ ?4 n3 l6 i. p4.2.1 问题分析: s* Y2 `; b, _: [- l" F- i  I, o/ g
    最近在卷积神经网络上的研究主要关注提高准确率。在给定相应的准确率之后,通常有多个CNN结构可以达到该准确率要求。在同等准确率的情况下,较小的CNN结构至少有三个优点:
    + J5 ?/ L$ O5 t' f& u! h4 D
    2 N2 E& U3 q+ D2 t8 l, O  [* ]在分布式训练期间,较小的CNN需要较少的跨服务器通信
    6 ^$ H+ U6 Y2 I6 N9 {0 n在自动驾驶汽车等应用场景下,较小的CNN需要较少的带宽将新模型从云端导入
    # g' I3 k2 J, s9 Y5 _2 Q8 S较小的CNN更适合部署在FPGA和其他内存有限的硬件上# F: B* Q% @$ A9 h" c" ]  f
    为了达到所有这些优点,本文提出了较小的CNN结构,称之为SqueezeNet。SqueezeNet在ImageNet上实现了AlexNet同级别的准确率,但参数减少了50倍。另外使用模型压缩技术,能够将SqueezeNet压缩到小于0.5MB(比AlexNet小近510倍)。
    " R) S# o" `% r9 Q! Z  A3 m& R
    . D7 I) m, ]% n  y* f4 _, o4.2.2 SqueezeNet的三大策略
    3 B  t3 I- w. R( e, m策略1:用1x1卷积代替3x3卷积
    . q  L; Y2 k  a/ l) |1x1卷积核的参数比3x3少9倍,所以网络中部分卷积核改为使用为1x1卷积。# v" I9 {0 A, V+ J

    ' S$ x- u$ }, Y策略2:减少输入到3*3卷积核的通道数量5 g9 _. q+ j8 v& m
    对于一个完全由3×3卷积核组成的卷积层来说,总参数量=输入通道数×卷积核数量×(3×3),所以仅仅替换3×3卷积核为1×1,还不能完全达到减少参数的目的,还需要减少输入到3×3卷积核的通道数。本文提出squeeze layer,来减少输入到3×3卷积核的通道数。3 u* U  ^) `) w5 ?7 M

    7 `, n5 M6 V6 d! Z+ r策略3:在网络后期再进行下采样,使卷积层具有较大的激活图3 U6 E2 u& a1 N/ B, L, Y6 b
    这里的激活图(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中。8 y* T. t7 w. N+ n

    : ~& E& F% F+ G& w/ H, }策略1和策略2在试图保持准确性的同时,明智地减少CNN中的参数数量,策略3是在有限的参数预算上最大化准确率。, U" p+ m" @! H; C) i

    . r" Y. c& T9 A/ G2 P6 ~4.2.3 Fire模块* E- i" D) w7 H% ]" g
    为实现这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的想法。% ~6 P4 O! E6 Q% u8 |8 ~: B

    , b+ h  ~$ B  k; q' P$ p6 {2 `1 g3 A( q1 o  X
    4.2.4 SqueezeNet整理结构8 `7 L3 a; \- k: F' y( e
    SqueezeNet整体网络结构图如下所示,其中maxpool(stride=2)分别设置在conv1/fire4/fire8/conv10之后,这些相对较晚的pool安排符合策略3的想法。; j- @0 g8 m# ]  B6 c: B( O
    0 R( l- x9 x% x
    ' W' K  h) v0 _3 F+ @
    4.2.5 代码实现SqueezeNet1 L! a- V' l  x0 K" g$ }: t2 u; l
    Fire模块的代码如下:1 a) {; {9 Z( Q( q. l4 r

    . l* m- [5 i6 [: r& Pclass Fire(nn.Module):
    / q# Q7 A, C: \( ~3 r: n
    : `0 d% _) e- R/ @& c( i0 @: E    def __init__($ u" b' U8 @, k" S
            self,
    ( Z  c4 h. R7 S! w5 t/ y& u( K        inplanes: int,
    / p8 d8 r) y# C$ u: A        squeeze_planes: int,9 G- g+ h/ v  B" _7 L7 {& Q
            expand1x1_planes: int,
    2 W( G( \1 L5 M! p5 |; G' H/ F/ v        expand3x3_planes: int6 a, A& r  E) e" F* D" h. n
        ) -> None:' ]. J/ ~0 U; \) S+ W
            super(Fire, self).__init__()
    3 E! q9 r& B; h; j, c) ~1 \* O        self.inplanes = inplanes
    - a* ?8 _- v. M4 @; R: b        self.squeeze = nn.Conv2d(inplanes, squeeze_planes, kernel_size=1)0 y, L3 l. l0 D1 K
            self.squeeze_activation = nn.ReLU(inplace=True)! U0 q* ^4 c3 `8 x
            self.expand1x1 = nn.Conv2d(squeeze_planes, expand1x1_planes,# c9 ?7 h4 e! j& J: l$ X
                                       kernel_size=1)( F% W8 ]8 W7 J/ j5 z
            self.expand1x1_activation = nn.ReLU(inplace=True)
    ' U8 A6 f8 E' @  O, z        self.expand3x3 = nn.Conv2d(squeeze_planes, expand3x3_planes,
    4 t9 }: [5 [8 v7 S9 |) x6 N                                   kernel_size=3, padding=1)
    ' B! s# i; B+ }& `        self.expand3x3_activation = nn.ReLU(inplace=True)
    8 J6 Z+ U: P! J. S$ a# M! s$ t: p6 n  e% X
        def forward(self, x: torch.Tensor) -> torch.Tensor:" X& c* I5 {1 P  C
            x = self.squeeze_activation(self.squeeze(x))
    7 a$ n% F4 j: \: @7 q/ t9 j6 H        return torch.cat([9 Z0 Q, |) s. u# v: d
                self.expand1x1_activation(self.expand1x1(x)),, }  h8 L" G7 {/ G6 B) j2 K- @
                self.expand3x3_activation(self.expand3x3(x)): h5 c7 s) `& o' k
            ], 1)
    " }! H' m0 i& O/ R
    & w' ?5 x- U! w% b, H% ^1
    7 Y$ ~; w3 F8 e, j! L24 P- Y) G' b  S7 H3 V9 f
    3
    ' x/ a) P: J3 d# [; G5 a3 ?% S( T4
    ; M1 [& t, ?3 C$ N- S# p5! c- h  j+ t" c- I0 {) F7 W2 B
    6
    7 ^0 d7 F. |" P9 M7
      O! T/ w/ f  g. q84 a8 N+ e: }0 i* M! U+ [
    9
    : W& U4 c( Y$ p& {1 T- t4 f# `10) E/ M" A) ~( f' H/ E/ J2 ^5 Z
    11+ d9 ~: n/ [( o2 c
    12
    $ ]  M$ Y( V3 t& e13
    & }- v, O/ ^. s  r14
    ; N# M, ]' t2 g% p$ e; t15
    8 m) k* p# {% y7 _+ b) y; A16
    & V9 W9 l: s7 c6 h3 @179 t* U1 g$ ?0 E" I& n' v
    18
    7 {& @, N7 e3 Q4 M0 F19& d1 u1 i3 u1 t  i7 H4 S( @$ n* A
    207 g7 O/ Z" y% C+ t
    21/ ~6 }' _0 k* b5 v
    22( {  C- k  m" v" F+ H2 y% ^
    23
    * W' j/ o- g  f# d24( [% p3 X9 ]: ~% O4 I
    250 Y6 @2 S9 r3 _' x% Y0 n* _" h
    26+ S3 u+ u& J6 @0 _# X: \4 ]
    SqueezeNet主要有两个结构,SqueezeNet1_0和SqueezeNet1_1,SqueezeNet1_0即官方版本(图2左侧),SqueezeNet1_1与SqueezeNet1_0相比在没有减少准确率的情况下,节省近2.4倍的参数量和计算量。  n- P0 i1 n0 P

    ) t" e8 K1 ?/ A$ A! a" S( f) KSqueezeNet1_0的网络结构如下:
    % s2 ?* `( e" u# x6 C7 `2 r# h' z6 s
    $ X5 ~/ |8 j% k/ Vself.features = nn.Sequential(6 ?' C- J1 i) B$ C& L
        nn.Conv2d(3, 96, kernel_size=7, stride=2),
    & l4 z# }3 D( [' `" ~( ]1 [    nn.ReLU(inplace=True)," Y5 H5 e) w+ \9 J7 ]/ l
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    " s+ P) C# w- z/ C1 V- M6 x/ ?    Fire(96, 16, 64, 64),( z! o/ u, _5 z0 t9 Z
        Fire(128, 16, 64, 64),9 \! v) y; [: p6 R8 j
        Fire(128, 32, 128, 128),& x# I2 R9 l7 }2 {8 ^; ?
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),8 n- r6 G4 A- f
        Fire(256, 32, 128, 128),4 r2 s1 y- Q8 _0 M1 b# _
        Fire(256, 48, 192, 192),
    6 L' E  Y6 R  Q) z4 R% W    Fire(384, 48, 192, 192),
    9 `. y6 y/ e% ^4 `( a: v    Fire(384, 64, 256, 256),
    : f! P$ Y" M$ [- Y: |    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    # `# T+ T& j5 }5 _    Fire(512, 64, 256, 256),3 _8 S6 A4 v7 m* K! N& q% f7 V
    )  G& ^' ]$ C& Q3 c8 q- j
    final_conv = nn.Conv2d(512, self.num_classes, kernel_size=1)  A/ J0 H8 v0 }  j' @
    self.classifier = nn.Sequential(6 R4 f4 f7 M2 v
        nn.Dropout(p=0.5),
    7 y, I; D7 Y( M5 Q+ I0 \" P    final_conv,
    2 [4 i6 E  w% d& {8 n' v    nn.ReLU(inplace=True),
    % g0 t# X) P' \6 W    nn.AdaptiveAvgPool2d((1, 1))
    % l4 z: ^! A$ A2 ?)
    $ T2 m; H+ q# k; d1 o% O. y* |/ R/ a/ t$ R

    5 o, T; D! O2 `; a/ v1
    ) r* V$ K5 N/ b5 Y2
      b0 w1 m0 S, R6 f8 d32 `( `0 J. {. ~  q. a
    4/ g7 u4 O4 d% S$ E3 r. J5 s
    5
    ; W; h( u0 G6 m! v5 E67 T7 V; Q7 y7 c/ B4 d% `/ _
    7
    % l9 T5 t' Z" Y1 ?8
    ! r& Y$ T6 g3 T" W9
    " R: D1 ~; f5 l' p10
    " O# J$ m" f# A! x: a. [11- d' n4 F. k9 ~& v+ L. t6 x2 j
    12
    6 T! {4 Y7 u8 p$ W4 b$ W- x4 y13
    ' S' p8 J  a$ x14
    4 `8 a7 U# S! S' P( G# f15  m  `# S1 @0 Y. F3 H( w1 u
    166 i; W  n4 x4 t; I" }$ t
    17' d; Z7 y7 w' _4 o* p8 G( R2 \, V
    18
    2 ^; u/ o3 f9 E( [1 w. ^19! N* l* V0 J% p  q
    20# y2 z) m, Y& x3 p1 ]' _
    21
    * \8 b- n, j( i, A22
      E$ K, ^9 j; e. g5 D" C239 x/ Q* o* Q3 d
    SqueezeNet1_1的网络结构如下:
    " s; D8 Y/ M7 C5 U
    ; a0 ?4 z& W; B2 Rself.features = nn.Sequential(
    1 o# e9 f, t. L2 e/ N( u" o    nn.Conv2d(3, 64, kernel_size=3, stride=2),
    6 X- J: }, M( s' Y: X# @    nn.ReLU(inplace=True),! u! A1 ~- r. |
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True)," ^# P0 n! N; c1 v- ]9 z. ]: v
        Fire(64, 16, 64, 64),
    6 m- r+ W% v7 ?  x* V! D& I' g% g  y6 o    Fire(128, 16, 64, 64),
    2 q% a) J* O- t    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    " W% v7 f) K# L+ `9 k/ N; q7 P    Fire(128, 32, 128, 128),( }4 Q( t- ~! f- o) m  M) U% }
        Fire(256, 32, 128, 128),
    % s8 a0 I  T/ ?* g; m+ v- I! p/ y    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),1 a( z0 n' s( r4 t
        Fire(256, 48, 192, 192),
    0 v& `# {! ^% B2 n/ V# p. S    Fire(384, 48, 192, 192),+ b$ Y1 M8 V- j2 a( G: u1 [
        Fire(384, 64, 256, 256),0 i9 h4 l% E) ]# B. z8 f; B
        Fire(512, 64, 256, 256),
    $ M) f2 Q: ?; E$ [: L/ E)4 H6 w8 B; D% X( w
    final_conv = nn.Conv2d(512, self.num_classes, kernel_size=1)- N7 h. H. |5 a( t. M( L7 {% b
    self.classifier = nn.Sequential(
    % s; N/ j7 G9 h0 `+ A8 j    nn.Dropout(p=0.5),6 }7 e1 Y8 c2 b' i5 _6 r' i
        final_conv,' ]$ w/ n: c; x  L: M: h8 S# Q
        nn.ReLU(inplace=True),2 r, ^) |# h6 {3 m6 ]
        nn.AdaptiveAvgPool2d((1, 1))$ F; c1 n4 |0 l, D+ ?" j+ t: X
    )
    ' {# j, u( }4 {0 I& q; H3 w8 a9 Q" a: ~
    10 b0 w4 Q) Q; y6 ^5 B$ o$ I$ w7 p
    2# e; Z( f; W1 _* G* n: S0 ~
    3
    * s% d/ X: [5 D1 w9 v! _& b  }4
    ' x4 P% f8 |( P+ U3 u7 X: t% ]: f5 f58 g" d. |( v/ y7 k1 S' {; G
    6
    2 O3 M2 u8 y9 G4 k7
    & C& H* ^8 x5 h8
    ; y  E/ |, P, U( }- l) y. m9" N8 L5 m/ J* y& O1 k" y" p% q+ e
    10
    7 R5 ~' q$ d1 D1 s" P$ `, s" G11; k3 v9 `7 Y4 d" F# b
    12
    & f) m0 d+ b: d0 r/ l+ J13
    : G  ]* {- d' F  A- r( K$ ?, K14
    7 O3 q2 Q/ t$ ]; R- U; L8 A15
    ; o3 P8 s/ E. }, V16
    # g1 q6 g; z, ^: ^' ~/ C17( L. a+ g: X  t' P$ f0 D
    186 N, F, [- o9 N- d* G6 A9 ~
    19
    ! Q2 ~" F/ E3 r7 M  Z8 J20
    , K3 u' c4 y7 M6 e0 v214 v! v2 u/ f5 v! H
    22+ W  W* F4 Z8 Z3 x/ M3 D
    SqueezeNet各层详细参数量及其输入输出如下表所示。
    * r9 Z0 c4 w, k5 }3 f
    - D. g5 K& \7 I7 s! {' d+ b2 \( n6 {( U8 V7 ~! M
    4.2.6 其他实现细节
    3 o* {" _. A2 ]+ E1×1和3×3卷积的输出宽和高不同,所以3×3卷积设置1个为0的padding
    + m/ N! e: ^; u" jsqueeze和expand层中使用ReLU9 ?+ W+ i3 D! A% W& C  l2 j/ f1 E
    在fire9之后的layer中使用ratio为50%的Dropout* h, l+ |# N* Z
    参考NiN算法想法,SqueezeNet中不含全连接层
      P, t( j- K% r- o, C! x训练时,前期学习率设置为0.04,然后线性减少* V5 ]4 {1 W/ ]
    4.2.7 总结
    : W5 p) ]5 z5 k+ |# B( h# G本文最主要就是三点:
    & ~5 M% A- H) L# E5 [  n( h2 b) K/ |6 l
    用1×1卷积代替部分3×3卷积,输出两种卷积级联的结果" b! Y' s% |3 n6 G+ e, ]
    减少输入到3×3卷积的特征图的通道数,减少参数量7 i; P: `! g8 V( W! n; ]+ ~
    不过早的使用pool,在网络结构后期再使用pool,这样能提高分类准确率3 d5 O- S( i$ l- Q" ~% m
    ————————————————
    : b7 J* `1 }8 H版权声明:本文为CSDN博主「Mr.小梅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    ; n1 f* o, g& i" z, ~. E原文链接:https://blog.csdn.net/qq_39707285/article/details/126498100
    : z# A! ?/ m5 r$ t; x* T3 W; h: `; H# h% y/ z! h3 R/ [

    & c5 T7 a3 Z* w% L* v2 A+ Z+ x0 a
    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-7-29 19:44 , Processed in 0.434692 second(s), 51 queries .

    回顶部