QQ登录

只需要一步,快速开始

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

    8 Z4 o8 k5 l4 l轻量级神经网络算法-SqueezeNet- ~6 g; x) k2 [. e* D8 b0 j( K
    4. 轻量级神经网络算法目录0 ?% O9 _# N6 y* r4 e9 J) [
    轻量级神经网络算法( H7 Y! w* \+ M8 G5 |" ^& c
    4.1 各轻量级神经网络算法总结对比$ G4 m. u: h5 z
    4.2 SqueezeNet1 J- f8 p0 @5 E' [
    4.3 DenseNet7 O3 C/ N( q+ u0 A7 d! P
    4.4 Xception& \2 d! q( G3 a% F$ B
    4.5 MobileNet v1
    7 @5 ]: g6 _( F- Z$ t- @4.6 IGCV5 c) r8 p3 a* g- Y
    4.7 NASNet4 }3 g% x! K  `1 U8 q' t3 H
    4.8 CondenseNet2 c" m% O* M' v6 C+ D. D
    4.9 PNASNet3 U: D  i* i1 j# k$ k/ E  c4 F
    4.10 SENet) r" e4 m3 Y  |2 w2 E6 K
    4.11 ShuffleNet v17 z! Z0 e) Y% s6 ]5 d/ |2 d8 @
    4.12 MobileNet v21 C& d' Z% k1 L. }' I
    4.13 AmoebaNet" `" B' x. S0 C/ n! r
    4.14 IGCV2  t) [! h, O# @( x
    4.15 IGCV3* x# u3 j+ A- G5 u2 q
    4.16 ShuffleNet v2
    9 ?9 t0 N4 u! L4 B, m! i4.17 MnasNet
    # s4 M: |% s6 G- F4.18 MobileNet v3
    ; F- c' U$ l+ a# r# P深度学习知识点总结
    ) m5 K! U6 f; a: a$ M
    . @5 a4 I6 V+ J) u, C专栏链接:3 f  x9 X- R3 x. j
    https://blog.csdn.net/qq_39707285/article/details/124005405
    . e) y# P1 c- q本专栏主要总结深度学习中的知识点,从各大数据集比赛开始,介绍历年冠军算法;同时总结深度学习中重要的知识点,包括损失函数、优化器、各种经典算法、各种算法的优化策略Bag of Freebies (BoF)等。
    + u8 q5 S+ a0 A( m# Y% I, _5 [; w# o* p- {9 ^. D
    本章目录
    ( K- R, \$ l5 U& F+ m+ z' H. ^4. 轻量级神经网络算法目录: b- }2 w9 ?5 Q% n; e1 c! L, @
    4.2 SqueezeNet3 H4 e; K+ o: t% Q0 d
    4.2.1 问题分析+ V( b. }- n' }2 m( I
    4.2.2 SqueezeNet的三大策略: x; H" d2 u* n# u) ~. G$ _7 e
    4.2.3 Fire模块
    . n+ u' ~; w: k0 b4.2.4 SqueezeNet整理结构
    8 k: H+ j; @/ s; L  v4.2.5 代码实现SqueezeNet$ K  _$ i- X8 |6 r4 I. `
    4.2.6 其他实现细节4 [( o# ^) s/ w) A* i5 y
    4.2.7 总结
    % l; }2 G2 f% e& k4 k4 z, y/ e4.2 SqueezeNet0 j$ @3 a( {, x9 x, s, }6 \7 \
    4.2.1 问题分析) L  \* m9 |. d; D* _
    最近在卷积神经网络上的研究主要关注提高准确率。在给定相应的准确率之后,通常有多个CNN结构可以达到该准确率要求。在同等准确率的情况下,较小的CNN结构至少有三个优点:; f2 y) p+ f; _7 K

      L- ~8 @0 |0 @+ r' c* H0 e! R在分布式训练期间,较小的CNN需要较少的跨服务器通信8 j! b# M5 b* L% r: n% }/ _) f
    在自动驾驶汽车等应用场景下,较小的CNN需要较少的带宽将新模型从云端导入
    0 W, e) J/ F0 W7 ~- S' w较小的CNN更适合部署在FPGA和其他内存有限的硬件上( Z1 o5 W) K5 p0 @/ J; x& d
    为了达到所有这些优点,本文提出了较小的CNN结构,称之为SqueezeNet。SqueezeNet在ImageNet上实现了AlexNet同级别的准确率,但参数减少了50倍。另外使用模型压缩技术,能够将SqueezeNet压缩到小于0.5MB(比AlexNet小近510倍)。
    # {  ^6 @( r" {1 t, E6 Z3 Z. I4 j6 A
    4.2.2 SqueezeNet的三大策略
    " M* q  y! `% D$ q) z" q; l! Y- m策略1:用1x1卷积代替3x3卷积
    3 C  \$ T" [  v5 g2 |8 i0 O1x1卷积核的参数比3x3少9倍,所以网络中部分卷积核改为使用为1x1卷积。+ v& W* S' h. k

    5 d1 D% B  R, v. ]% V5 R' {7 _- P  m策略2:减少输入到3*3卷积核的通道数量
    3 s7 ]) f- S6 Y) w1 m- Y对于一个完全由3×3卷积核组成的卷积层来说,总参数量=输入通道数×卷积核数量×(3×3),所以仅仅替换3×3卷积核为1×1,还不能完全达到减少参数的目的,还需要减少输入到3×3卷积核的通道数。本文提出squeeze layer,来减少输入到3×3卷积核的通道数。* c% e) W$ T) d  \( g/ M

    6 F9 O* _& G6 E: X* i# D* @策略3:在网络后期再进行下采样,使卷积层具有较大的激活图# K  o9 P3 }) a  X$ \
    这里的激活图(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中。
    ( O1 @" S7 d  x/ q2 X- x+ Q/ ^; G1 {) A/ e
    策略1和策略2在试图保持准确性的同时,明智地减少CNN中的参数数量,策略3是在有限的参数预算上最大化准确率。
    0 W6 r0 m; F) P3 l* U* M( T6 ]! @- b  ]" U( O) m1 F
    4.2.3 Fire模块
    ( Q/ V/ _6 t& }  U. g: x. u为实现这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的想法。
    " ~, |9 U+ Z  Y: ~1 x& d+ t
    " o8 {$ b+ I7 r9 r0 _1 T( A6 R( e/ [1 N/ ]2 B0 r8 r
    4.2.4 SqueezeNet整理结构
    7 k. M- F; }% Z+ g7 I; TSqueezeNet整体网络结构图如下所示,其中maxpool(stride=2)分别设置在conv1/fire4/fire8/conv10之后,这些相对较晚的pool安排符合策略3的想法。
    6 e8 p) A7 m9 o4 V( e2 M; L' m# f* S1 S' n3 h

    6 ^7 J# v) e7 m% Q/ d7 Z4.2.5 代码实现SqueezeNet6 X) r  `3 }0 @9 b! m( N
    Fire模块的代码如下:
    ; x9 W: m, w5 R  t% e
    6 r0 M# s3 v9 f* eclass Fire(nn.Module):: H, ~/ |  G% u) l$ b( L/ M
    ( W( s' E) V; s" g( h
        def __init__(* n: B' {, `: @# n! W
            self," y$ d* w' L5 |* Q
            inplanes: int,  q% g+ s8 a9 k0 r
            squeeze_planes: int,
    + c  m$ u$ \( i        expand1x1_planes: int,
    1 D1 e- n4 h8 r. n* n2 C        expand3x3_planes: int
    8 Z+ j+ a* ?0 \, |* L/ V1 N, Y9 C    ) -> None:
    % [4 M( G% C" k3 h, h2 ^        super(Fire, self).__init__(). ^. {$ D0 D4 ^+ g4 w+ ]1 u; E! c
            self.inplanes = inplanes
    - u! E/ G, m% R+ K+ w" _7 z        self.squeeze = nn.Conv2d(inplanes, squeeze_planes, kernel_size=1)
    - O: b" U$ `* z8 D        self.squeeze_activation = nn.ReLU(inplace=True)
      A7 o0 B  X5 Y# K, U, b7 a/ ]        self.expand1x1 = nn.Conv2d(squeeze_planes, expand1x1_planes,
    1 h+ W, k1 f3 C4 L                                   kernel_size=1)( Z+ k% T, Z5 T% }- n7 @. `" _
            self.expand1x1_activation = nn.ReLU(inplace=True)
    / G' h# c4 S# {/ K0 D+ _# e        self.expand3x3 = nn.Conv2d(squeeze_planes, expand3x3_planes,
    4 e0 e0 Q5 ^7 M( F7 k                                   kernel_size=3, padding=1)
    , C: |0 I  y1 ~9 H  F        self.expand3x3_activation = nn.ReLU(inplace=True)
    % f/ y; O( ~( ^# z; ?+ n: Y+ L/ ^( ~5 X9 c* V
        def forward(self, x: torch.Tensor) -> torch.Tensor:# e& s( {; K; b- k. R/ u) S
            x = self.squeeze_activation(self.squeeze(x))
    ( j% j8 i- X* b6 u% \        return torch.cat([7 G+ h- {$ O. f  O7 _
                self.expand1x1_activation(self.expand1x1(x)),
    - e# Y3 C% U" z; ~7 J2 Q# |* H            self.expand3x3_activation(self.expand3x3(x))) }2 p2 y9 f! \
            ], 1)
    2 h6 f9 r5 V( P5 j* M7 Q; w3 T# \0 [( W3 ?* y; m0 g
    1
    / E. v2 Z, {. i' q( B1 B2
    - a* {* G6 }- U9 @3& i7 G/ a" w8 w2 j) _
    4
    ! \* B! n0 p( V1 _5
    7 S- [  w5 L- w' _3 D* I6
    * O4 R5 ]- H: M7: x  F0 o5 N3 B& U; @: p
    8
    9 R" B2 r3 T& k- e8 K. e; d/ o9: y- d6 {, G$ A
    10
    % X" n& c5 u$ a11
    ; l/ @/ @7 B  n12# s( ]' i- M; D0 n1 t/ n
    13  t5 ~$ O/ c, ]' u
    14$ g/ z+ K4 L8 }4 k* i1 M' E
    15
    ; o8 q9 [. T# W16. A) O! Y0 k; h2 Y
    17
    ) ]: `7 j: s" K7 G, S; \18
    : }8 x% e6 z( g5 t; o* `9 d, z19
    4 h' T9 I. l! ]0 u7 g, O' q" b1 Q20
    7 t* S/ \& m5 t* W. a- B7 T214 Y3 H) l8 ^% P% N
    22
    " b$ D: a1 Z$ s4 [5 E6 z23
    5 U8 a$ D& B- q240 O9 Z1 q. H9 D, Z6 p( V
    25, q0 S( q, r7 |1 b4 d$ N8 C
    26* [! t+ R# L4 y
    SqueezeNet主要有两个结构,SqueezeNet1_0和SqueezeNet1_1,SqueezeNet1_0即官方版本(图2左侧),SqueezeNet1_1与SqueezeNet1_0相比在没有减少准确率的情况下,节省近2.4倍的参数量和计算量。
    9 B5 a5 }8 k2 l3 @3 X' F/ I( [) Y, f; ?' N- |: M( y
    SqueezeNet1_0的网络结构如下:
    ( N' _) ]2 H3 a1 _! [. B
    & ], [/ w( C& a" f. A4 @0 s/ {( y* a$ Vself.features = nn.Sequential(+ v( C  E  _1 F6 U9 N: h; R
        nn.Conv2d(3, 96, kernel_size=7, stride=2),7 k8 j+ h9 x5 z, k9 f2 a. g
        nn.ReLU(inplace=True),
    + V6 S4 y) M% v8 g/ q    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),2 C3 f3 _9 y" W
        Fire(96, 16, 64, 64),6 W% y7 v% c. Y0 C  V, h
        Fire(128, 16, 64, 64),
    ( u- C  e  N, o9 O: H, g5 S    Fire(128, 32, 128, 128),: a& M+ S9 \- \
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    4 K) K% t' _, F- I: @. N7 R2 v    Fire(256, 32, 128, 128),5 E- c% r* o) a5 e: g! S/ O
        Fire(256, 48, 192, 192),
    * C0 H) @% ]3 r# s7 n( _- D    Fire(384, 48, 192, 192),
    3 j2 S/ X" [; ]+ }! j    Fire(384, 64, 256, 256),* p1 j' P& H! |! j# p
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),, B  H$ g- d: R+ r2 X% [3 o
        Fire(512, 64, 256, 256),7 a' c4 a4 C& W2 M! x' P
    )
    % K3 V7 V% n- W0 o3 @final_conv = nn.Conv2d(512, self.num_classes, kernel_size=1)
    " b- `$ M! N) |9 _% ], N  M$ I# lself.classifier = nn.Sequential(
    2 v8 b, m5 s& t9 i    nn.Dropout(p=0.5),
    & L& N1 v2 S$ k1 m" c) {    final_conv,7 a- c: l& v/ N+ K; o
        nn.ReLU(inplace=True),1 r5 x8 H" p: {7 j- O0 d* s
        nn.AdaptiveAvgPool2d((1, 1)). Q* k) e, d0 t) }
    )
    # a- z( y  V" `1 N! R
    $ B$ {) R+ Z. d1 ~0 D" o
    5 H' Y- {- I# Q4 y2 p10 R7 @. P% U  R/ e. ~5 F. L
    2: e7 z+ F( i; L
    3' q; O- T" }1 e/ T
    41 R8 F; [9 t$ C3 `, g3 r
    5
    ; r1 u# E# q" Z9 x4 n2 {; n& P6
    " G8 h* }" H2 o/ u' v7
    0 g8 J, E! \/ W* ]% m! J% A- b8; ?" R/ Z# b, j( i" q2 b
    91 m4 l1 K: i& c: ?
    10$ x% U0 _9 R: `! d
    119 C, o: E* \6 w- n( S' i
    12
    ! P8 G& j( X6 J$ |. ]+ R: b5 {13' a" Z4 s4 D: ]/ D  Z/ x( ~9 N+ }
    14
    4 [6 l5 A% v$ [5 R, n1 K+ Q" @7 E15
    ; S& [" \) k- Z; c9 P' F5 U" P16
    ; L0 q" e7 [& W1 e% f8 Z17
    ! |* E+ B$ z" z1 i8 K* k18
    ' @2 M& y9 ~: C19
    6 n. u; j+ p4 D20
    6 Q3 ]* Y2 ]& R21
    * e/ S% R5 x4 ^5 P! X22& q1 R* @1 I: n9 [$ w' x! I
    23
    7 H3 N2 R9 u! g( B4 `SqueezeNet1_1的网络结构如下:
    6 O0 r) U6 r+ ^; M
    9 }* C+ ^, U" U1 K* ?7 P  [self.features = nn.Sequential(. q; j4 D7 b4 F. o$ x8 Y0 Y; X% N. ?
        nn.Conv2d(3, 64, kernel_size=3, stride=2),, e6 ^# _7 m, ?: Z) X8 O: l
        nn.ReLU(inplace=True),# D* X7 J0 i: T& n6 _
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),3 W  D8 z& T* a. s  j
        Fire(64, 16, 64, 64),* F, l8 l- j/ a, U) W( N2 T
        Fire(128, 16, 64, 64),6 S0 }- A" ]. |* X  K. D
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    + n4 P/ d8 ~' p4 \    Fire(128, 32, 128, 128),
    2 T* N, o3 t$ `' v/ J7 H; C' T/ @    Fire(256, 32, 128, 128),  J6 i$ h- ~* |% y* ~- ?2 w
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    $ y* L5 Y% E: ?- E    Fire(256, 48, 192, 192),; l. e4 e3 @; T. U- m, K8 G
        Fire(384, 48, 192, 192),* i; `8 r) ^0 \2 D. D  A0 `
        Fire(384, 64, 256, 256),
    7 a- ~5 _9 ~5 \6 j4 i    Fire(512, 64, 256, 256),
    $ W7 J! d# Q: J. f)# ?% x! Z- r  I0 j. V; p
    final_conv = nn.Conv2d(512, self.num_classes, kernel_size=1)
    / v% y- u  c6 k+ Tself.classifier = nn.Sequential(% C* X+ ^" O1 _6 O
        nn.Dropout(p=0.5),
    # A( F5 f" z" B4 n  ^9 A    final_conv,: b7 \, z" d) \9 @
        nn.ReLU(inplace=True),9 X; j0 J/ v+ t' i
        nn.AdaptiveAvgPool2d((1, 1))
    ! B0 y2 c5 H7 K2 D3 t1 t0 ~4 o)
    ; o+ S% Q7 m* n
    0 ^' Y+ S# M5 n/ m4 g8 ?1
    7 w+ `2 ]; x6 c. }8 ?2
    0 w- o) G% S' K# s) n37 f% S- K0 u' x8 E" g
    40 }) _& q* n4 j+ a
    5! _9 U4 ^# u7 X- o: p; Q
    62 A$ f& D! P! _' t# L" ^6 W$ H
    7
    ' j8 ?  N& T% u' P# p8
    $ q6 R$ ?- J- c; O# h* G9
    * {7 m" A7 }8 p! M- _10
    7 e6 q+ k: c9 K; p% b# u0 ?11
    4 ~7 \  }9 F0 ^% z! w% G' w12
    ' p# B/ b8 b) b/ z2 O13
    1 _" S6 I! p. j0 ], c14
    # B: g" b, q7 W2 R: j( P15& e' _' H& S" K* M& ]
    16
    / J8 p$ I) ]: G$ V/ G; x17
    ( h+ f8 ^# J  k. `$ W+ E18
    + V) f5 c1 ~) ]. V3 O* U19/ K5 d1 y: D9 g% ]+ }2 ~9 e( Q
    20
    4 f! q1 [% w1 ?+ P4 m1 I; U' r- U215 w( |5 K( t1 Y* y
    22
    " W! l! w0 V+ |  `SqueezeNet各层详细参数量及其输入输出如下表所示。
    3 D# G" G/ [) M" N
    ! n# {( Q. c$ }4 s
    ) o$ V3 t' ]) y4 E3 |2 D9 F& U4.2.6 其他实现细节
    / y- F  v5 {( P1×1和3×3卷积的输出宽和高不同,所以3×3卷积设置1个为0的padding) T$ c7 O/ j3 {0 T
    squeeze和expand层中使用ReLU; O4 c! q9 t3 j
    在fire9之后的layer中使用ratio为50%的Dropout
    ! ?- s8 e! t$ I. e3 l7 `0 s参考NiN算法想法,SqueezeNet中不含全连接层( h  g$ W* T( ~7 a1 i
    训练时,前期学习率设置为0.04,然后线性减少  A* O8 [% \* ?# |& e
    4.2.7 总结! l  U5 L5 ?" Y3 i1 a* {, |% j% W
    本文最主要就是三点:
    ; ^! u4 U* U( ?/ Y1 c. j! c  g5 v# y# E; k
    用1×1卷积代替部分3×3卷积,输出两种卷积级联的结果% c- u! V9 x1 e8 M
    减少输入到3×3卷积的特征图的通道数,减少参数量: Z1 @/ ]' k3 t
    不过早的使用pool,在网络结构后期再使用pool,这样能提高分类准确率3 N& h; H# J* q6 c0 r% E' f
    ————————————————5 o9 g; A! P: i9 `1 W. ~
    版权声明:本文为CSDN博主「Mr.小梅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。2 V  Q  h% F& {, q
    原文链接:https://blog.csdn.net/qq_39707285/article/details/126498100, x: `7 f) f% a6 w( W

    , p9 @3 K7 \0 N5 q  T2 s
    0 |' P  f5 j: `
    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-6-12 15:04 , Processed in 0.608747 second(s), 51 queries .

    回顶部