QQ登录

只需要一步,快速开始

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

    " M8 I) l+ H% k( G4 {/ s轻量级神经网络算法-SqueezeNet
    ! Q8 s" H5 q6 P/ e; K4. 轻量级神经网络算法目录
    * m! l9 C' X: N0 H. C0 x. Y轻量级神经网络算法
    - d3 H5 |9 [; p6 D* e- Z' e4.1 各轻量级神经网络算法总结对比
    - c& V4 J' w' A2 J3 C. F( l4.2 SqueezeNet
    - T7 K0 ^8 B) V0 p9 c4.3 DenseNet
    9 |) `3 C4 }6 T/ v' T6 j. _4.4 Xception1 k/ O% c( Y# {) l
    4.5 MobileNet v1
    # P0 Y# J/ q0 D/ h: b4.6 IGCV1 F' l% n* L9 ~: J6 j6 W$ c! s( g
    4.7 NASNet, V6 D2 t+ _1 d% w8 {; z
    4.8 CondenseNet
    " S7 k; d, l$ C3 ^, U3 [# P9 q9 @4.9 PNASNet2 n8 ]: O; F) c2 N; o) O" Q" L) B
    4.10 SENet0 ~3 V3 d( y$ G4 W+ `
    4.11 ShuffleNet v1
    7 m( W; L3 K9 x* h. c9 v5 E4.12 MobileNet v2" l+ ]" k/ O% |. @
    4.13 AmoebaNet$ K3 ^+ V! z6 n9 ]
    4.14 IGCV2
    ' T4 g" J, Y$ P7 j8 g- O' f: y1 E4.15 IGCV3. c/ G# e3 b! a
    4.16 ShuffleNet v2
    - o4 z& N$ P5 B" v, O! B7 A# }( `4.17 MnasNet& d, v# P$ w" I, v( a& C
    4.18 MobileNet v3  Q: M# _: {- @' P/ q- A
    深度学习知识点总结
    - k) z9 G; m0 i" E! \$ C# V/ v1 ?4 V, [9 H% u
    专栏链接:; s# W* \6 h7 M- L- ^$ [
    https://blog.csdn.net/qq_39707285/article/details/124005405
    6 L8 ~3 L' ]8 x本专栏主要总结深度学习中的知识点,从各大数据集比赛开始,介绍历年冠军算法;同时总结深度学习中重要的知识点,包括损失函数、优化器、各种经典算法、各种算法的优化策略Bag of Freebies (BoF)等。
    7 f; x. b$ e6 s& P3 A% y# t# ^7 ?- f+ L
    本章目录
    . q" N' f- W" i4. 轻量级神经网络算法目录  _7 G: m% ]  o( l
    4.2 SqueezeNet
    7 [% G; e5 a2 k% W& h4.2.1 问题分析
    7 {9 J( y* s  {! J4.2.2 SqueezeNet的三大策略
    , {& @& |- G# o4 M* l5 Z4.2.3 Fire模块' t# e9 ?% H* @. k& d  k
    4.2.4 SqueezeNet整理结构
    ! C  ~! }: g( A3 I( |* h4 M- q4.2.5 代码实现SqueezeNet
    4 ^7 X3 c, _- L' g4 [% T) k- u4.2.6 其他实现细节" V5 b! g$ i) z7 e. m
    4.2.7 总结8 O; ~, Z" P& D2 _" y2 J
    4.2 SqueezeNet
    7 T$ W' T- }: |7 C. N4.2.1 问题分析
    . g: F' V  V9 Y, I' \最近在卷积神经网络上的研究主要关注提高准确率。在给定相应的准确率之后,通常有多个CNN结构可以达到该准确率要求。在同等准确率的情况下,较小的CNN结构至少有三个优点:; E( `8 P) P0 i; r* t

    4 f5 ]6 i2 k9 U8 I0 C" N* A+ T在分布式训练期间,较小的CNN需要较少的跨服务器通信6 ?3 D: [+ @8 p! ?: k$ u4 f& r$ D+ t
    在自动驾驶汽车等应用场景下,较小的CNN需要较少的带宽将新模型从云端导入
    * b! h- M) V( u9 p! n较小的CNN更适合部署在FPGA和其他内存有限的硬件上7 t7 z! m& Y5 ]( J& s7 U; j" e- J
    为了达到所有这些优点,本文提出了较小的CNN结构,称之为SqueezeNet。SqueezeNet在ImageNet上实现了AlexNet同级别的准确率,但参数减少了50倍。另外使用模型压缩技术,能够将SqueezeNet压缩到小于0.5MB(比AlexNet小近510倍)。4 Z+ C' j& M1 g) L& M. O

    " M& d0 S! _# q& f4.2.2 SqueezeNet的三大策略
    8 N* C6 l- N5 \: R策略1:用1x1卷积代替3x3卷积
    : N9 k/ m2 ]: S* Z1x1卷积核的参数比3x3少9倍,所以网络中部分卷积核改为使用为1x1卷积。4 L% W* T# c. ?6 w1 m. ^, \6 s

    / Z, I+ B- _5 B' t' c策略2:减少输入到3*3卷积核的通道数量
    - P/ p$ O) _/ Y+ z5 \' ~) j$ y2 ^对于一个完全由3×3卷积核组成的卷积层来说,总参数量=输入通道数×卷积核数量×(3×3),所以仅仅替换3×3卷积核为1×1,还不能完全达到减少参数的目的,还需要减少输入到3×3卷积核的通道数。本文提出squeeze layer,来减少输入到3×3卷积核的通道数。8 ^; \4 ?! r; l& r* k

    2 W: }/ L$ C0 w4 r1 o7 v策略3:在网络后期再进行下采样,使卷积层具有较大的激活图
    % ~0 x& n$ V- }/ g" [这里的激活图(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中。
    ( m0 ]' C$ \3 Y' t! u- i
    4 m3 a& d. y! T  f策略1和策略2在试图保持准确性的同时,明智地减少CNN中的参数数量,策略3是在有限的参数预算上最大化准确率。
    ) |# Y3 ~; t3 {8 [2 V
    : ~: a. w1 t3 ^/ Z9 j4 |0 l6 t4.2.3 Fire模块2 s7 @% T  a$ r. 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的想法。' B5 j/ ?% @/ F9 o' J1 L

    ) O/ [) O. ?1 i
    " |! W0 V/ Z1 F+ U# \2 |/ V4.2.4 SqueezeNet整理结构2 C* l) j. U# ~3 \0 m: _/ V
    SqueezeNet整体网络结构图如下所示,其中maxpool(stride=2)分别设置在conv1/fire4/fire8/conv10之后,这些相对较晚的pool安排符合策略3的想法。
    . z) y5 ~$ {/ U+ Q- R' L* X4 w# D0 I  ~- e1 Z/ A& n0 g

    ) q( y2 ^3 F9 S% }5 a8 Q4.2.5 代码实现SqueezeNet
    , t! P& ~/ e' N6 G% l) NFire模块的代码如下:) E! I" I/ k" c$ v0 F  L4 |

    3 h6 l# s$ I5 [# @6 \class Fire(nn.Module):
    # d5 ~9 C' |: D+ S
    ; ~8 Y4 q2 N0 c    def __init__(
      |& C5 M  \" J4 w8 t! a        self,
    ) o" n  g7 _; M/ j6 i5 w        inplanes: int,
    - X) }' F4 h7 p; t; X* K. ?        squeeze_planes: int,( Y; t3 m) s" c4 f: v( k* P
            expand1x1_planes: int,
    * j+ H6 h; y9 Z, H! s+ \        expand3x3_planes: int
    / N  k$ C) p$ }" g7 V    ) -> None:
    ; l7 F# B: k: w/ u        super(Fire, self).__init__()
    ; x2 A8 |  X& H) k: A3 Z- n        self.inplanes = inplanes
    & M; B- V, t8 s6 l/ j0 K        self.squeeze = nn.Conv2d(inplanes, squeeze_planes, kernel_size=1)$ F4 n) R% x- [( s! V6 M
            self.squeeze_activation = nn.ReLU(inplace=True)' @' ^& U( f% y. P' Z$ Z0 y6 @
            self.expand1x1 = nn.Conv2d(squeeze_planes, expand1x1_planes,7 H% o" ?' {: c* f5 h8 Q
                                       kernel_size=1)
    : X% v! _. u4 e  @* g9 X1 {        self.expand1x1_activation = nn.ReLU(inplace=True)
    & Q1 V4 y  m, R3 G, j: z$ l        self.expand3x3 = nn.Conv2d(squeeze_planes, expand3x3_planes,
    6 C/ ^5 @/ y9 f                                   kernel_size=3, padding=1)
    / b9 i' Y/ w9 j" t/ S; C3 \! i" D0 n        self.expand3x3_activation = nn.ReLU(inplace=True)
    ) l; `$ a4 i+ H' K
    ; [( W! l* G2 ?1 _    def forward(self, x: torch.Tensor) -> torch.Tensor:  `: c6 e8 E  d- I/ k: r
            x = self.squeeze_activation(self.squeeze(x))
    ) o$ c8 B3 ?5 q' [! i& l        return torch.cat([
    # d6 ^- o+ c, q: h2 G3 ?/ K  x/ p            self.expand1x1_activation(self.expand1x1(x)),5 e$ j* K7 ^0 V4 s% N  A
                self.expand3x3_activation(self.expand3x3(x))* z5 |0 R* S0 z
            ], 1)
    * d# D* Q+ N- t+ ]! A7 R
    - V' ~3 H0 A& P18 o6 |$ G4 l0 A  G
    2
    9 V: ?6 \1 D$ Y+ r" M' j: f; L$ C3
    2 W- w4 |/ S/ T  r& u4) T; r+ t1 w7 \. S
    5
    0 B  ?; T$ j& Q: t+ Z' |6
    " ~0 b0 D" X0 `6 q7
    9 p9 g# D6 K: Z" b; q8
    6 f  c3 }9 ]# _4 s3 T5 @! y# h# [91 H8 n2 v: K4 v! s6 R" w& {8 z% m0 V
    10
    ; d; o- }+ g$ q% `1 ?11
    * Y- N  w; j3 A2 K1 t12+ v; W# l/ F3 w) E
    13- t( A; k% |% X: S: h
    14* R6 Q9 s, s7 n1 w  n
    15$ A5 M" L* v& N- \) b
    160 ], ^" S$ l0 t8 p
    17, y) t+ l$ r+ |/ c# h' h$ _. Y
    18
    ' o7 u7 L7 V' }% A$ J6 o$ p19: p: X0 V) L: w- {: N
    20
    + }# k, A( U( P; i6 x215 A, {' Y( X7 z4 u. a5 L( M
    22
    3 ]; V, t% y: T# J4 y23. j$ i, R1 I+ [3 V+ f2 F
    24$ s  |& ~  A' f- s
    25) n# W# V4 s# v5 W( a
    26
    4 r6 @' R0 y  KSqueezeNet主要有两个结构,SqueezeNet1_0和SqueezeNet1_1,SqueezeNet1_0即官方版本(图2左侧),SqueezeNet1_1与SqueezeNet1_0相比在没有减少准确率的情况下,节省近2.4倍的参数量和计算量。
    4 W; ^5 G- C- i: N9 J/ b8 J0 X' ?) I
    SqueezeNet1_0的网络结构如下:
    : g; k3 k6 H: _0 u' T* _) a; o
    2 F" w6 d& D7 ~! D; Eself.features = nn.Sequential(; L& V, h; v0 ?' a0 X/ k
        nn.Conv2d(3, 96, kernel_size=7, stride=2),
    # z7 V) O0 c& G2 T+ X    nn.ReLU(inplace=True),
    9 y0 R  b4 j8 [4 F    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    , R* r* F1 ?. ^    Fire(96, 16, 64, 64),1 u3 w7 Z( v4 W1 x
        Fire(128, 16, 64, 64),
    + f9 U0 P" V7 }9 P    Fire(128, 32, 128, 128),5 Q: E& c1 C! B1 O3 [
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    ! Z  U7 u! u' C: x4 X8 h    Fire(256, 32, 128, 128),% n, F: c! n3 z8 ]4 F, \4 ?
        Fire(256, 48, 192, 192),
    3 L  ?0 [& d' y$ E. y/ P    Fire(384, 48, 192, 192),8 G; c& S, |- U! J- ]& }
        Fire(384, 64, 256, 256),1 C( a+ O$ o4 H
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),' i  ?7 N, K& O2 G% t5 [
        Fire(512, 64, 256, 256)," u/ v4 H0 I+ u' f& i7 a) Z5 h& e- e9 `7 G
    )
    1 Z* r9 G. \. A5 t0 Ifinal_conv = nn.Conv2d(512, self.num_classes, kernel_size=1)
    . d  ]* j/ z' E) Eself.classifier = nn.Sequential(
      Z9 x( ?2 @4 j. V' q5 O# }2 [    nn.Dropout(p=0.5),
    ! j, _! g- o6 ?: f    final_conv,( x% Y: q2 \8 z& f- C
        nn.ReLU(inplace=True),
    4 ~; B$ N- _" N9 [+ ^    nn.AdaptiveAvgPool2d((1, 1))
    7 S1 P) s" ]; T' d3 z5 z. y3 K)* S( o0 i; C, M  o( }: U
    9 V7 _' @( K* o. K& x' R3 I. v

    ( J0 Z$ {" @9 j  W3 b1( R$ J7 L# f- U
    2
    9 e) H" a: o; H+ ~: [' |3: k# o1 d& w8 O4 q4 T2 U$ X! `
    41 |% V- I) O4 o% \8 n8 U
    5
    - y9 d% E0 a! E% O" g6( P; F2 d. R% A% u" e1 f  |" _2 x
    70 N- A( y; ]$ u1 f& Q$ B7 s
    8- u( h5 l$ R4 O( J8 x- p: E( ^
    9
    % V* x7 s  T2 J6 w( e; g10% M& q/ D6 j' m, g2 F$ y  q: i
    11. f/ a9 t% q, N9 \9 L
    12, i" Z1 C0 U1 V. Q' r
    13$ C) E: F/ v0 W5 z2 x
    14+ O( m$ h6 z- z4 W" n
    15
    ; p9 S" A# h0 f+ r, j7 |162 P8 l  m6 ?+ M( h- l* [$ r
    172 ?# G* p1 p: e( k- |
    18( S3 W, y' x1 o5 k
    19
    ; ?0 _# g/ q0 y; c& N8 G+ \$ [20- ^9 n' i( |/ _1 `! M6 O/ ?0 Y1 m
    21
    6 `& s* M: N4 W! h22
    % x+ S. O( F5 x. O( M% \  J9 y23
    8 r: _) q# k8 U0 k4 R# S1 ?SqueezeNet1_1的网络结构如下:
    / s- A) i: O& d4 P5 g# L( v2 i9 N% K$ S' X
    self.features = nn.Sequential(
    ) G& j3 d2 |; \* S/ r    nn.Conv2d(3, 64, kernel_size=3, stride=2),
    0 M& @/ z& R" m7 P) u5 ~; Z    nn.ReLU(inplace=True),
    9 S0 x& E# o' d% [3 p% ^    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
      I5 O1 a" l$ r( M    Fire(64, 16, 64, 64),5 F" U3 |1 E; L
        Fire(128, 16, 64, 64),
    " m- }0 G2 ?4 z- {    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),7 T. o$ w+ I4 s2 P0 K9 V& u$ s% `
        Fire(128, 32, 128, 128),
    / B, t1 Y- E9 f; w9 t' Y2 |    Fire(256, 32, 128, 128),
    2 ~$ z7 Z+ D+ ~( a7 ~: G    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    2 ^; N+ b- `- x: ]) P' Y    Fire(256, 48, 192, 192),8 Y# O% O  B& F" M8 H
        Fire(384, 48, 192, 192),
    $ z6 F+ e# F- w. A& l9 ]    Fire(384, 64, 256, 256),% `6 P# G3 _& J, d
        Fire(512, 64, 256, 256),6 R3 F3 }  o4 g; j0 B  |# A8 E
    )2 S& d4 T$ y% k
    final_conv = nn.Conv2d(512, self.num_classes, kernel_size=1)& M5 M! {  Z" z( D; i& C5 |, L, B
    self.classifier = nn.Sequential(" N9 b  v" \: @2 c. g
        nn.Dropout(p=0.5),8 X( W* z" p1 D$ n' {( V8 ~
        final_conv,4 h) @7 [8 V2 s0 }
        nn.ReLU(inplace=True),
    / ?7 @3 W' y% s6 C) k& C- S3 n9 u    nn.AdaptiveAvgPool2d((1, 1))
    ( |. z6 G" G) U% G, U8 G4 E)8 l2 m4 d  t3 J! T9 Z5 E( R5 A9 O) a

    $ D* H+ [4 e' T3 e/ j9 \) P1
    6 s: f: O3 q) c* A/ H, O+ s% Q: ?+ F2" s8 ]7 w' ?+ X1 ], c
    3
    4 |7 l3 p3 M% M$ t; g* k8 C8 M4# q/ C9 R8 N; U- D, O! `
    5
      X& U0 m8 e& ~* i1 R6
    ) C* ?  ^: R+ H2 w+ s% `+ J: G7
    4 w- y" o! y4 h% O8
      m  }1 o' o; n+ e9
    + J8 s5 [  z) ~& o9 y) z( q) z" P109 t: p% `/ z0 A8 g* H1 g' @9 q
    11
    0 T% B+ n3 M3 p4 i0 s" c! Z12% P* g3 h( G- d5 t" W! z) |& F
    13
    : }% W1 C3 H4 f5 C+ q2 |14. s# k9 b5 K; Y: Z, p$ O
    15
    2 D# F* W4 a5 i$ C2 V16: w+ j$ x- c' S6 V
    178 v6 g9 F8 j: Z  L: K: X0 ]7 J
    185 a( D+ Z5 L8 {: J" _6 q
    197 J2 {! w  P0 w' H% ?& Z  Y! Q: C
    20
    * I$ }% ~6 X# _; h% h21
    # `+ P4 y4 N9 o' z22) N5 ~) K! t0 J/ |
    SqueezeNet各层详细参数量及其输入输出如下表所示。/ p; A) W( @) P" ?; F
    & ?7 B6 G2 D8 g% w3 {& o4 P

    % `! Q- r8 q) s" j& T$ \6 Z4.2.6 其他实现细节/ M. s% A  g0 M9 o
    1×1和3×3卷积的输出宽和高不同,所以3×3卷积设置1个为0的padding
    ' S1 F( r! K7 K& z5 d9 h  ksqueeze和expand层中使用ReLU! |6 z  J! V7 S$ f- a- Y
    在fire9之后的layer中使用ratio为50%的Dropout
    ! C* j" A/ U4 \7 M4 R参考NiN算法想法,SqueezeNet中不含全连接层0 _( ^0 v- p# E- X& G- a) M6 f
    训练时,前期学习率设置为0.04,然后线性减少( `7 H2 n2 v, V/ _
    4.2.7 总结/ L/ _/ l2 v) s5 P* r( ?
    本文最主要就是三点:
    # I/ E) `) {/ r, a
    ( B0 S% @6 g9 \' J1 B用1×1卷积代替部分3×3卷积,输出两种卷积级联的结果: ?" M: i; a8 j# R: D# O( k5 e
    减少输入到3×3卷积的特征图的通道数,减少参数量
    + A* }) s$ M" j' k  }% f不过早的使用pool,在网络结构后期再使用pool,这样能提高分类准确率
    6 e0 U5 M) ~( ^& `————————————————
    % K. ?, n5 y7 I版权声明:本文为CSDN博主「Mr.小梅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    ) \7 y8 |2 M& c4 B% G原文链接:https://blog.csdn.net/qq_39707285/article/details/126498100
    - L2 t! [5 i% s4 I) L- A% W: O, p$ R) R* ^

    $ p) k& V9 V9 y# e6 r
    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-4-12 11:05 , Processed in 0.415304 second(s), 52 queries .

    回顶部