QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2914|回复: 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
    & L/ E* a1 b: f; S; z& n$ r
    轻量级神经网络算法-SqueezeNet
    ' }# V! c, l: @/ _# t: A4. 轻量级神经网络算法目录' B8 W6 {' T. Y0 t) O
    轻量级神经网络算法
    & t/ U! n; t% Q  ?6 X/ {0 p4.1 各轻量级神经网络算法总结对比* K/ f3 C2 j& i% Y0 j
    4.2 SqueezeNet( }4 R* Z; Z8 \, D( [4 B& m
    4.3 DenseNet- @/ r8 T9 x$ c1 m1 ]* x
    4.4 Xception
    " J$ f$ U0 D, g/ j% H4.5 MobileNet v1, R- c! M9 b- M. M- {$ I$ h+ @' x
    4.6 IGCV
    " Z7 h7 t/ r9 k+ T) @9 \& Q/ s5 h1 M4.7 NASNet7 Y3 m6 _: M$ w
    4.8 CondenseNet( o7 r+ h4 y3 s
    4.9 PNASNet
    ) u' u) a. q& P& F7 F0 g4.10 SENet
    ( O8 B) X) n- ]% h: c+ v- c4.11 ShuffleNet v1; J& M5 E7 z. }0 g: e5 d+ U
    4.12 MobileNet v2
    ' g+ U! f! H7 B# O$ M4.13 AmoebaNet- N& Z; a! P* u8 A/ D( C
    4.14 IGCV24 W2 U0 Q5 l# ?5 I/ Z% X1 B
    4.15 IGCV3# y( E- o: M, b9 Q: A
    4.16 ShuffleNet v2
    1 l; Z$ Q4 i8 t( m4.17 MnasNet
    3 }4 a5 G; b- o+ n- ?$ E! _4.18 MobileNet v3% |' U* f) K+ e9 Z) k/ s
    深度学习知识点总结
    6 H- O  k: l' z2 a" B- c( q5 c  B+ T5 R+ e; _* ?' h
    专栏链接:9 I' [! s& T- n- f) U( w
    https://blog.csdn.net/qq_39707285/article/details/1240054055 X& |' y8 }/ Y. ^
    本专栏主要总结深度学习中的知识点,从各大数据集比赛开始,介绍历年冠军算法;同时总结深度学习中重要的知识点,包括损失函数、优化器、各种经典算法、各种算法的优化策略Bag of Freebies (BoF)等。
    8 \0 Y4 v6 O$ N4 O: `- [  W
    ' @( b+ U- b. O9 R& s( e9 k5 p本章目录0 u& x! g0 K8 X
    4. 轻量级神经网络算法目录
    # Q5 r( r/ M8 y& ]3 t) n  a) V4.2 SqueezeNet, O) o& S9 V( z1 o0 z
    4.2.1 问题分析- H) Q( `" I/ K  B8 P# h" d2 y
    4.2.2 SqueezeNet的三大策略
    7 X) L- Z9 ^" T, `3 Y4.2.3 Fire模块
    + H5 ~$ H0 ?7 {8 m% H0 J4.2.4 SqueezeNet整理结构
    " G) V) D9 a  G( w/ V" q$ W% v4.2.5 代码实现SqueezeNet
    $ }: {  n$ y6 t3 k6 \( E4.2.6 其他实现细节
    0 c& ~1 F; F1 D0 \" y  p* m4.2.7 总结5 l# P. Q: }, z( E
    4.2 SqueezeNet9 P8 d! t' }+ c4 C
    4.2.1 问题分析
    ( q+ t7 H- k( a3 g. I( f$ e- Z最近在卷积神经网络上的研究主要关注提高准确率。在给定相应的准确率之后,通常有多个CNN结构可以达到该准确率要求。在同等准确率的情况下,较小的CNN结构至少有三个优点:  L7 C" f7 ]2 |5 L. e! W
    ( j% @  z4 D( y- @# J4 h$ I9 ?
    在分布式训练期间,较小的CNN需要较少的跨服务器通信1 v9 K) h7 m, p7 X+ }8 I* D+ J
    在自动驾驶汽车等应用场景下,较小的CNN需要较少的带宽将新模型从云端导入' e+ p3 R6 N; d' A0 x8 I0 O6 S
    较小的CNN更适合部署在FPGA和其他内存有限的硬件上2 R1 `. j7 D( x+ ~7 P
    为了达到所有这些优点,本文提出了较小的CNN结构,称之为SqueezeNet。SqueezeNet在ImageNet上实现了AlexNet同级别的准确率,但参数减少了50倍。另外使用模型压缩技术,能够将SqueezeNet压缩到小于0.5MB(比AlexNet小近510倍)。
    4 U8 _& x! z) g! N" J% a" t7 u9 `. ]& i: ?, m7 M: }) r6 K+ E3 g
    4.2.2 SqueezeNet的三大策略
    . F, v6 F. P8 N/ w策略1:用1x1卷积代替3x3卷积
    ; Y! e) \, G" X2 `, ]% \( [7 v1x1卷积核的参数比3x3少9倍,所以网络中部分卷积核改为使用为1x1卷积。% H: U4 L9 s5 a: ^
    8 D2 @; E' X* ]; l+ c% {
    策略2:减少输入到3*3卷积核的通道数量) S8 i  S* {7 d) \' U0 b6 X
    对于一个完全由3×3卷积核组成的卷积层来说,总参数量=输入通道数×卷积核数量×(3×3),所以仅仅替换3×3卷积核为1×1,还不能完全达到减少参数的目的,还需要减少输入到3×3卷积核的通道数。本文提出squeeze layer,来减少输入到3×3卷积核的通道数。4 {2 I5 f. j" Q- g7 q9 X% Q
    / t) @" S( a! w* F- M5 s  C0 v  b
    策略3:在网络后期再进行下采样,使卷积层具有较大的激活图
    ) S1 z+ ~6 Q$ P; s) H这里的激活图(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中。
    / X: K! D& X# h* u0 ^2 h+ F' \) u1 d+ [) U, b) s" P
    策略1和策略2在试图保持准确性的同时,明智地减少CNN中的参数数量,策略3是在有限的参数预算上最大化准确率。, q& |2 x) ]! O* `4 ]

    6 N: ~, h6 d& M, V/ z# R" h4.2.3 Fire模块
    + ~+ G( d( R% h为实现这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的想法。( y0 Q9 R" u4 B& _& x6 Y
    0 Q4 c. A8 d) b/ `8 B& E4 f

    ; t, k/ n" l. \# ]3 k4.2.4 SqueezeNet整理结构
    ' z5 t$ I+ j2 k& Z8 |) `% tSqueezeNet整体网络结构图如下所示,其中maxpool(stride=2)分别设置在conv1/fire4/fire8/conv10之后,这些相对较晚的pool安排符合策略3的想法。
      V$ a/ B3 B& z- u/ \8 v/ ]# ^) f

    ; d7 w3 v; y. N. ~5 D- [4.2.5 代码实现SqueezeNet5 T5 K4 ?+ c  F, L
    Fire模块的代码如下:
    * @8 B( C# f$ u. p% h, c& k# \
    & w' U7 }: p. b. w  v! p2 Qclass Fire(nn.Module):
    - l9 V8 d* u+ ]5 I% W
    0 M3 M' a% ?1 |! E' V! x% H' V. y    def __init__(
    0 h" G* w0 w. p/ z        self,
      }  Z$ A# {  h  y0 Q/ \        inplanes: int,
    ; O7 L6 [- H$ K' f        squeeze_planes: int,
    1 x  H! Y3 S) O+ ?! a9 w        expand1x1_planes: int,; v) i6 o+ B" m5 L$ T5 @
            expand3x3_planes: int! b7 R/ u4 O& i. w  b$ h/ j
        ) -> None:
    . j; i" W% ^9 S        super(Fire, self).__init__(); Q2 G4 z7 l" j8 a; p
            self.inplanes = inplanes
    : Q: ^9 d5 @7 i+ Y        self.squeeze = nn.Conv2d(inplanes, squeeze_planes, kernel_size=1)0 r8 Y6 ?, a9 N3 {
            self.squeeze_activation = nn.ReLU(inplace=True)$ P1 f, g4 v6 M1 y6 W$ v2 I0 L1 ^# z
            self.expand1x1 = nn.Conv2d(squeeze_planes, expand1x1_planes,
    - I7 ?! g, [% |7 f) L* F                                   kernel_size=1)2 M2 `% E* p- A) K, M7 g# i
            self.expand1x1_activation = nn.ReLU(inplace=True). W  ]! N$ b3 ?3 Y  G
            self.expand3x3 = nn.Conv2d(squeeze_planes, expand3x3_planes,
    & c4 Q) M" H" v                                   kernel_size=3, padding=1)% e! h6 a. ^" `; D9 ^
            self.expand3x3_activation = nn.ReLU(inplace=True)
    , f- ]. E, E! n/ T% X* r
    / ^0 Q0 x# e2 G  c" y    def forward(self, x: torch.Tensor) -> torch.Tensor:  E" q0 z, }, ?! B( t2 l
            x = self.squeeze_activation(self.squeeze(x)); b' i- Z* v' d6 ?1 z5 d
            return torch.cat([  F0 N' |3 {, f
                self.expand1x1_activation(self.expand1x1(x)),* }) _: O; C, g3 V
                self.expand3x3_activation(self.expand3x3(x))) @3 s" v; X9 G6 p1 S. l2 M0 ?) r
            ], 1)0 l7 `! R6 S; {) A$ \

    ! W5 O) I% L( r& Z6 m5 i* y! u1
    # |& v. C' n6 ~. M; a" S21 J! n! M2 O4 ^8 x% P. T/ O
    3
    9 T8 U, I3 R* V, z* a! U4
    + {9 M& u3 S& n6 m& ]- t& @, f5
    ! F9 y7 }! @9 k- s6
    ' O) l/ t  f( p( [7
    + }+ K# i9 Y) K" m1 `% Q83 L0 s* V4 Y' ^3 X
    9+ n& Q: ^6 S6 B  B8 T# m. W$ l4 ?
    10# S5 U# N0 M  L
    113 ~7 i2 z: M2 {0 X, V2 q- O
    12
    5 X, f* X- f3 |8 e# z$ d  N" I* L! i13
    5 J) l0 B* u! N: H) m; t14/ u8 F, H# r. w: V2 z5 A* @0 ]
    15
    / P4 Y! P1 d. f: _16
    , A, D' e! `  F  a. u17# s7 j. S* k/ g$ o0 l' ~
    186 j! s# d' E& w" p, m4 S# X
    196 ^! l$ v5 R3 y. t+ j' S0 X$ N
    20
    9 A* ^6 I; T" q  p8 |217 L% x9 s1 ^1 e9 t1 d, ~
    22  T5 p2 I" D; J2 Z* T3 Q1 M
    23  ~9 _5 f: `, {) y6 P. t2 R
    24
    ) g. v& ^6 h8 ~8 G/ X/ t25
    9 Q9 ?% \$ {( h26& p/ n/ L" U# z$ j
    SqueezeNet主要有两个结构,SqueezeNet1_0和SqueezeNet1_1,SqueezeNet1_0即官方版本(图2左侧),SqueezeNet1_1与SqueezeNet1_0相比在没有减少准确率的情况下,节省近2.4倍的参数量和计算量。
    9 Q$ f: F; d( z3 x) T, J2 o, e$ }# D, m$ m& a& S
    SqueezeNet1_0的网络结构如下:5 ~" c$ W5 g3 z, Y/ ~
    3 j2 W- j  ~, w' z( r5 k' X' J
    self.features = nn.Sequential($ o  Q- _8 T+ }. u8 g. P1 |' [
        nn.Conv2d(3, 96, kernel_size=7, stride=2),9 l+ [& V7 ]5 i5 S2 c6 _
        nn.ReLU(inplace=True),
    $ h' G3 p( v0 C8 s* r* l) U5 T    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    " L8 l2 K' g5 }    Fire(96, 16, 64, 64),
    1 E! T( w+ ?! G& X    Fire(128, 16, 64, 64),
      ?, b0 m( M$ a    Fire(128, 32, 128, 128),
    1 L" t4 C: C# Y7 `* `    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),9 ~; o5 F8 @: Q+ s
        Fire(256, 32, 128, 128),2 b/ F. h3 M, x* ]& q
        Fire(256, 48, 192, 192),
    2 u8 ~8 ]& |  g% L: G    Fire(384, 48, 192, 192),
    $ A/ b! W6 y/ t5 _1 C    Fire(384, 64, 256, 256),7 f1 @% w# W9 H/ I
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    3 z/ w; R' f8 t: f8 M! b    Fire(512, 64, 256, 256),
    % x7 n6 o3 [% C2 C) D: W/ J)6 m3 n0 ^: C' P+ I' q; q/ z
    final_conv = nn.Conv2d(512, self.num_classes, kernel_size=1)0 x* i# X) `1 A; \
    self.classifier = nn.Sequential(
    0 M" x. d; m( y) Q, V1 b6 n$ n    nn.Dropout(p=0.5),
    ' P1 L; Z8 [7 s2 J7 v% t* g    final_conv,, J5 Y+ i; x4 z5 H1 S. O, ~
        nn.ReLU(inplace=True),
    8 o( x6 J3 R2 A4 C4 h( M- B/ V    nn.AdaptiveAvgPool2d((1, 1))
    / h' O( S& i9 ?( \5 S)! M2 I8 v9 L% {# Q& _; Q; E
    * D7 [3 O( W# P" r
    9 A9 J, j5 ]; W2 Q) n
    14 n9 N% i' ~. U. o
    2
    8 @! ~) J9 }. T1 @3- w( q/ L; j5 Z: @4 t
    4! `7 Y: M  c% M+ a, b
    58 E5 g: f  u5 q! y) o& [$ j- n" J
    6
    9 ~/ ]! Z) R& T7* p& {) {7 i  l
    8
    # S  \* F4 X! @95 T& S# \# _# W/ X8 |: W
    10
      G$ u: n" S) r: F- B: N8 p11
    ; v$ k0 a1 U8 ?12
    / K& S, i3 u' s+ f13
    % R# o8 i' D2 @/ T6 X0 g147 L/ B! J  T4 O
    15
    ( ?, d0 b9 w1 U) M2 V16
    : ^! J; Z( |7 t6 {5 l17
    - q$ O5 }& F4 m! y8 U181 D1 e% I' R! ]; @
    194 N  l  ~; B8 @6 J! J
    20
    ; V0 Z9 L2 L2 _+ T2 a" R4 }218 E9 L+ U/ _" [/ [) }
    22& |& p: v6 t; T
    23- }2 o& }3 [4 |2 |% w4 D
    SqueezeNet1_1的网络结构如下:
    4 d0 @5 e% A8 `4 j, Q2 [- _4 _& O, J, M; O9 O0 }6 O8 b
    self.features = nn.Sequential(; M0 @/ H' |8 y/ e% k- F# f
        nn.Conv2d(3, 64, kernel_size=3, stride=2),+ ^1 h& \# }! @" Z
        nn.ReLU(inplace=True),
    ; d* x7 Z$ b- Y, h$ B, w, }8 ]    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),% d( k' ^9 P3 B! {
        Fire(64, 16, 64, 64),
    : K* L0 n. K# I8 J6 X5 Z7 a% K    Fire(128, 16, 64, 64),3 a# E' H) x4 ]4 M0 U
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),/ a: R! f8 i! l& e
        Fire(128, 32, 128, 128),, m" W3 g3 e% Z, P
        Fire(256, 32, 128, 128),
    # L5 |0 q" H  y$ q, D    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),: M/ O+ g5 p% I/ y0 f3 f
        Fire(256, 48, 192, 192),
    1 Z( X4 Z* F' Q1 B! x+ M    Fire(384, 48, 192, 192),8 U" M1 p2 r% o
        Fire(384, 64, 256, 256),& \, z3 N* X4 L6 a& {0 K5 M
        Fire(512, 64, 256, 256),+ s7 |" b' P) r- k6 {7 k
    )
    8 F9 _4 m( i( t/ x+ ffinal_conv = nn.Conv2d(512, self.num_classes, kernel_size=1)$ L7 H, }$ J8 T( s
    self.classifier = nn.Sequential(
      o$ d8 Z% r7 ~    nn.Dropout(p=0.5),
    ; z# h: R7 Q! t' |9 b3 ]    final_conv,
    . ]4 j. Y( m' F8 u. Z8 S    nn.ReLU(inplace=True),. d% z) \7 a# q& ^
        nn.AdaptiveAvgPool2d((1, 1))
    & M  o0 n% x2 m- ^7 u). z) Z2 e' g: Q5 \% N- f3 b- H5 T

    ( u: c9 L- H4 M  {1 _: i1
    & h$ C% k: G. y0 ?' L2
      s% k9 s$ r4 d7 V" `) A+ h( S3
    - m1 `# g5 q# p# {$ x, C1 m4
    " \* ?; Y: I3 n3 Q5# B* k  {7 x- H+ o- j" h+ ]
    6- B" Z( Z3 s9 `. y- x
    7, O$ J' ]! t  P3 p0 o$ U5 k4 c
    8' r9 l" |2 i6 @# o( ]1 e
    9
    9 N, Y  `& ^0 ]4 M' T102 W* E( P5 q  o, I2 j$ i5 J
    11$ L, v- [  ~! r- z- d; `
    12! ?; ~* f+ v5 i! }; h# B5 j
    134 d/ A' B$ @  P
    14
    " l: H1 W' y6 }( X9 U( V7 x1 y6 ]15
    - j9 h% c5 r  o  F4 C16: c6 l2 M' c" g5 }0 U" I1 [
    17
    0 v+ ?7 r; t" l8 Q! D) d186 ^5 O$ |0 ?  F5 L
    19( ]1 f; m0 M8 v0 z' [9 P# g$ O
    20
    : l" Y: C6 \8 u7 K21) }: n# O: D6 r( N
    22
    / O7 \, k, y6 f/ FSqueezeNet各层详细参数量及其输入输出如下表所示。6 W5 A5 Q* V4 f: d& ^. Q: q
    / n; U) t( P) v. m! c) ]
    ! G; b7 b6 [9 ]- c' P' |3 S
    4.2.6 其他实现细节* M% i4 }% {! s( b3 @0 m* R5 p
    1×1和3×3卷积的输出宽和高不同,所以3×3卷积设置1个为0的padding. \+ m9 x# H- U: Z: f" Q) A3 t
    squeeze和expand层中使用ReLU
    + A5 z) ~  ]# Q0 z7 a! I在fire9之后的layer中使用ratio为50%的Dropout3 N' ?) _1 o: R8 }, i* y9 |8 [6 F
    参考NiN算法想法,SqueezeNet中不含全连接层
    " b' h# V& Z4 R+ W1 m1 R训练时,前期学习率设置为0.04,然后线性减少! X3 a! V) u2 ^3 M; ~
    4.2.7 总结! n2 v1 P& J. _4 L- x
    本文最主要就是三点:/ ?; _% m0 m3 j. ~, W) p  ~8 a

    ; K9 g0 p8 Q0 @用1×1卷积代替部分3×3卷积,输出两种卷积级联的结果. S- L9 w0 @2 O0 Z: o+ v0 r
    减少输入到3×3卷积的特征图的通道数,减少参数量
    $ ^: @! W& q1 b+ I9 t6 h不过早的使用pool,在网络结构后期再使用pool,这样能提高分类准确率" T3 o) A$ l' P) w1 v3 C6 c, X
    ————————————————8 _0 \, `0 c. M. i; [" S
    版权声明:本文为CSDN博主「Mr.小梅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。+ V0 `% R: |' C  \
    原文链接:https://blog.csdn.net/qq_39707285/article/details/126498100
    % `- w5 {+ x% c- U8 B9 q( ~- t/ d% p5 y. ]' n" m

    9 l# a* q0 F. [  S. h
    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-11 10:07 , Processed in 0.256643 second(s), 50 queries .

    回顶部