QQ登录

只需要一步,快速开始

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

    ) o1 K' \& V6 @# o5 ?轻量级神经网络算法-SqueezeNet
    ( K, A0 A: I8 `1 n3 G4. 轻量级神经网络算法目录
    ) w) S, S% e& ?2 F4 z7 R轻量级神经网络算法. q) g6 W! d; a5 B0 |2 l
    4.1 各轻量级神经网络算法总结对比+ B* K* n) u$ A3 d# n
    4.2 SqueezeNet9 c; ]1 ?4 P. A3 m% a
    4.3 DenseNet7 j/ u, @) s1 ]- l. \; B5 @" Z
    4.4 Xception, m) O0 U4 [) B% }$ f0 d
    4.5 MobileNet v1' U+ ]$ z2 U7 ^" w0 L; R  U
    4.6 IGCV0 e) \$ V, [- T# n0 q" Z/ M4 x
    4.7 NASNet7 c5 @# |8 e9 r6 E' h" }
    4.8 CondenseNet0 q2 y- X4 b" c1 n
    4.9 PNASNet
    * q) i0 M) }3 x9 H$ Q4 ]4.10 SENet
    6 G) [* n: i* K4.11 ShuffleNet v1
    0 N1 y2 f& W2 P' |: H6 r4.12 MobileNet v22 x; }, e! g6 Y9 U1 M: t
    4.13 AmoebaNet, H2 a& s4 Q& P& U
    4.14 IGCV2
    , W! i4 W+ w; P, ]( R4.15 IGCV3
    . Y4 @6 ?) `' l3 \4.16 ShuffleNet v2
    , e. n: {# ?4 ^. c5 V0 S) S4.17 MnasNet) ~3 I0 B& A; v+ O$ r
    4.18 MobileNet v30 q( N' z; y4 A8 V; {3 O5 R8 Y
    深度学习知识点总结
    ' ], V. W( e6 g# h: P: S! X( n' a" O5 `# Q, ~6 J& B
    专栏链接:
    3 C6 `; T; h8 [8 _; J! uhttps://blog.csdn.net/qq_39707285/article/details/124005405
    9 l% _7 s/ n* @本专栏主要总结深度学习中的知识点,从各大数据集比赛开始,介绍历年冠军算法;同时总结深度学习中重要的知识点,包括损失函数、优化器、各种经典算法、各种算法的优化策略Bag of Freebies (BoF)等。
    6 P4 w$ C& K: g
    . K6 E; @0 n- B& d% |/ z本章目录
    0 F- B% Y7 l: o+ `5 x; R2 s4. 轻量级神经网络算法目录, R* z5 p( V/ [) y
    4.2 SqueezeNet& i' {3 d( q( `1 ]; t6 L
    4.2.1 问题分析
    / Q3 s' u+ {7 g- h. A4.2.2 SqueezeNet的三大策略4 x. U6 N5 U2 I: O) M  b
    4.2.3 Fire模块
    ; `, R/ N9 `) v# z0 m! Y4.2.4 SqueezeNet整理结构
    7 d$ U: ?) E7 f6 r) g4 e4.2.5 代码实现SqueezeNet' `) \. b) ~) L
    4.2.6 其他实现细节
    ' O$ d$ O' M% q9 b5 Z- M4.2.7 总结
    + _: l! G0 d. h% e4 d4.2 SqueezeNet
    3 P6 J" |5 w" O% x- u8 U$ |4.2.1 问题分析! y6 l, j; _( B4 g/ `' _0 ?9 r6 Q
    最近在卷积神经网络上的研究主要关注提高准确率。在给定相应的准确率之后,通常有多个CNN结构可以达到该准确率要求。在同等准确率的情况下,较小的CNN结构至少有三个优点:
    , }3 V4 D) x: [4 h4 j
    " p  i' z3 z7 X( I1 @) I( S# c8 v在分布式训练期间,较小的CNN需要较少的跨服务器通信0 D* _1 n  s5 ~( \
    在自动驾驶汽车等应用场景下,较小的CNN需要较少的带宽将新模型从云端导入0 a8 F; p) i$ d- F! ]) r) z
    较小的CNN更适合部署在FPGA和其他内存有限的硬件上
    ! d$ Z% h. h3 ^3 d9 t! c; k( o7 `为了达到所有这些优点,本文提出了较小的CNN结构,称之为SqueezeNet。SqueezeNet在ImageNet上实现了AlexNet同级别的准确率,但参数减少了50倍。另外使用模型压缩技术,能够将SqueezeNet压缩到小于0.5MB(比AlexNet小近510倍)。
    3 s  A4 k' z/ q# y0 u3 m, L! h6 E7 Q2 _
    4.2.2 SqueezeNet的三大策略
    - o/ C0 o* W1 `3 C: Q6 z0 ?2 A$ s+ u策略1:用1x1卷积代替3x3卷积# F5 S2 D/ h, \1 e
    1x1卷积核的参数比3x3少9倍,所以网络中部分卷积核改为使用为1x1卷积。
    : T, R  y0 C  f' M6 m) t. h; e/ O6 G. C
    策略2:减少输入到3*3卷积核的通道数量
    4 E( T2 s" u3 @. D+ v4 a$ l# [- D对于一个完全由3×3卷积核组成的卷积层来说,总参数量=输入通道数×卷积核数量×(3×3),所以仅仅替换3×3卷积核为1×1,还不能完全达到减少参数的目的,还需要减少输入到3×3卷积核的通道数。本文提出squeeze layer,来减少输入到3×3卷积核的通道数。" u9 ?0 G5 C2 {
    . G$ G) [9 l, X! n
    策略3:在网络后期再进行下采样,使卷积层具有较大的激活图0 P% p" l2 Z* }$ b- I! \: j. L
    这里的激活图(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中。
    : }, c, L5 N* U2 E; b
    6 K1 q% i9 Y+ u6 K: K3 Q6 b策略1和策略2在试图保持准确性的同时,明智地减少CNN中的参数数量,策略3是在有限的参数预算上最大化准确率。
    / Y* {( n, h4 q0 g4 ?5 ^
    - C: L: c  I. w0 m9 U/ @4.2.3 Fire模块+ R# _. x8 T  r8 J% q# d8 S8 E
    为实现这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的想法。
    / V$ K) ?) V* j9 i& x+ b8 M/ V. P& F# U7 A) o) b
    ; @4 K* h$ {3 {( s. V' W
    4.2.4 SqueezeNet整理结构4 A. n7 |" M6 N/ Z; I1 O' y$ O! W
    SqueezeNet整体网络结构图如下所示,其中maxpool(stride=2)分别设置在conv1/fire4/fire8/conv10之后,这些相对较晚的pool安排符合策略3的想法。
    3 Y1 Z) `9 t- ]* |' j
    1 |' a# Q+ o) p  b
    0 `6 `' e7 I  S2 u1 U" O5 @4.2.5 代码实现SqueezeNet6 [4 g% V7 i5 W2 S2 F' e
    Fire模块的代码如下:
    ; q$ C, P$ `+ K# \3 G
    - D' R0 |7 O% M' m/ |class Fire(nn.Module):
    % _" |; d4 @$ C9 y7 @
    / i9 E( C8 p  |' s; ~5 N    def __init__(
    * M+ a, M' W! T  c: r/ W; q; A        self,
    " ]* _  G: O1 h! q# A        inplanes: int,5 q) W8 {% r: @6 i3 l" B# \& Y* w0 D
            squeeze_planes: int,
    ! z( ]: w; p9 `  e, d+ z! [/ ]        expand1x1_planes: int,# Q6 g; T( \, _
            expand3x3_planes: int
    , p$ l) D- M, M: ]    ) -> None:# @& t; i3 z% E0 j7 f; W. |* \! w0 w' r
            super(Fire, self).__init__()7 X& p% S3 k$ r7 e) i
            self.inplanes = inplanes
    ( B0 t1 [/ d( z  T        self.squeeze = nn.Conv2d(inplanes, squeeze_planes, kernel_size=1)
    - C3 F2 Z9 M. ?, h& p$ [$ r        self.squeeze_activation = nn.ReLU(inplace=True)
    $ `- @! Q5 @% y- k& m8 \        self.expand1x1 = nn.Conv2d(squeeze_planes, expand1x1_planes,! m7 x$ `) c2 d% Z8 R6 [, w2 _
                                       kernel_size=1)
    ; D4 ?+ ~8 r9 T0 Q6 {, v        self.expand1x1_activation = nn.ReLU(inplace=True)
    ' S$ P) d; H6 U4 `& r        self.expand3x3 = nn.Conv2d(squeeze_planes, expand3x3_planes,9 _6 {2 P( Y2 v1 J4 v7 U0 m
                                       kernel_size=3, padding=1)0 l- N. K  G- f1 }* D  m% @
            self.expand3x3_activation = nn.ReLU(inplace=True)% }5 ^( f% ?' l; Y/ R

    . }( x  e3 U; _0 W" u    def forward(self, x: torch.Tensor) -> torch.Tensor:6 c5 t  P! y  v, N$ ?2 Q
            x = self.squeeze_activation(self.squeeze(x))
      o: i' V' }# Y& \! \! K        return torch.cat([
    & i6 _! ?( x$ l& H1 ~3 D& k- l            self.expand1x1_activation(self.expand1x1(x)),7 Z; r6 K6 v' M7 l+ l& \4 K
                self.expand3x3_activation(self.expand3x3(x))8 I- }) f; {- ~8 F
            ], 1)
      F; d& Z( t; E' ?* W5 u. N5 S" ]' ^6 H2 P" y
    17 B! K+ k6 n) F* l# {& J
    2( n8 P; v% n3 m% u2 @1 r
    39 ?+ e5 w  z/ b! t; i! r
    4% e( j. M+ h: x* Y- E
    5
    4 p! V' G! u& N$ u: K3 T, j6 Q5 c62 r. H- S- |5 N$ Y; f: c  f) V& h
    7! l  x3 W+ |4 w) g0 Q& q
    86 e5 m$ O' B* U; k9 w7 f. Y
    9
    8 \# S7 H3 q* W6 z/ b- Q+ w10# c; r0 ]3 j! B1 Z" f
    11' r) [: C  C2 H
    12
    6 |; S6 ^1 e! a8 a# \' Q) f- `13: b+ ~. h, K  r4 s, \
    14
    % s3 c9 V9 A( D! w15
    ( [: }4 M' K6 v) ]9 W" g+ ^16
    " I# i0 j1 u0 [; e/ a17
    7 ]9 ^* q# s5 I5 M0 I  C18
    , S; [) S! J' Q4 z* w, z19! a  V+ L! K. p' c2 K+ a9 J
    20/ p# o4 S4 x3 h  m; E1 G& G1 ]* T
    21
    4 Y; U* _2 y, G" J- b22
    % z9 S+ @' k+ ~% W1 X9 H4 |' P23' i0 R3 A8 B, E9 P) Y4 B' t
    24
    , L# a( D5 L& J3 D% L9 O9 Z25
    - H4 b: H9 e" o5 X' M2 v; y. ~266 U: s: l) U$ g1 q
    SqueezeNet主要有两个结构,SqueezeNet1_0和SqueezeNet1_1,SqueezeNet1_0即官方版本(图2左侧),SqueezeNet1_1与SqueezeNet1_0相比在没有减少准确率的情况下,节省近2.4倍的参数量和计算量。% ~. s: l! e4 [3 T
    7 d/ @. T* {4 C0 S" r
    SqueezeNet1_0的网络结构如下:
      w  R' w- \2 `2 c4 L4 V! e/ q4 r5 B! o) k+ S
    self.features = nn.Sequential(
    8 m6 C, k5 }# d+ A5 Y    nn.Conv2d(3, 96, kernel_size=7, stride=2),' p! q9 k/ {7 L& ?8 Q# Y9 J
        nn.ReLU(inplace=True),
    6 p4 x/ T* l8 o    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),# F5 m& _9 @% k7 R5 s0 j
        Fire(96, 16, 64, 64),6 |  W( v) ?2 E8 h# Z' w* |6 s
        Fire(128, 16, 64, 64),
    ! y2 E7 |: f4 U, J  s    Fire(128, 32, 128, 128),, O* u# Y! c# O* n
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    & Y5 c& R: A2 ]" P* [) C    Fire(256, 32, 128, 128),
    ; f- Z2 V7 Y- L    Fire(256, 48, 192, 192),
    " N# q: r* M5 L! o    Fire(384, 48, 192, 192),
    $ b- f+ I# \0 Y& S6 _    Fire(384, 64, 256, 256),
    " N( @# n2 ~4 @4 `    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),: R) k5 S- ~4 {. p$ T
        Fire(512, 64, 256, 256),
    1 C& u- K* |! V8 u)- P9 I" N5 `: ~6 H  {% I/ H( w, Z
    final_conv = nn.Conv2d(512, self.num_classes, kernel_size=1)
    4 C! W3 h9 u, g8 w( C- Gself.classifier = nn.Sequential(6 b2 _4 T3 _9 A8 v% {
        nn.Dropout(p=0.5),+ _3 W# F3 @$ p. H/ x- g
        final_conv,6 i0 t. p3 K8 a3 t
        nn.ReLU(inplace=True),+ N& J& z, R7 W" q- M
        nn.AdaptiveAvgPool2d((1, 1))5 [" m6 ]5 s- ^
    )
    % p9 a0 m: f2 o. s' Y3 k# f! c* Y9 p8 E. W( S* [
    7 A: E6 u' W7 p  o3 ^
    1
    5 M1 g  v- N1 e, Z& Q( @2
    $ m* f! D; @6 }( r+ ~) D3- {, v/ B  P8 }- A4 B
    4) s. }$ D6 {* J) t  V% D
    5
    $ R/ e) l0 A" y: ?3 `1 j; w1 D, R6
    & s) C" Y9 a: }1 s9 L+ M6 m7( V7 I  a7 \, `3 N( W  B
    8$ I# X. L& z- ]/ u2 `3 D) g
    9" q: O7 V' A  h3 N0 R* b
    10
    - W7 {6 y2 n8 a+ ?7 c11
    4 l1 P* U+ F8 f2 i# T12: l( j6 R6 W  N5 L8 S
    13
    7 r" t" D/ [) V" V6 M: C# u14
    9 |: G8 _1 U# K15. I& y0 s, ?1 [7 `8 J
    16
    3 g3 C/ V3 |* t$ }  {17
    ( i/ [6 o& T+ i; o18
    3 ^# x5 C- d9 C; a5 T3 H193 c& ?+ H  M# }4 [
    20
    3 j- n" W4 h: |. f7 W! d21
    0 f, i9 v" P) ?! C22' f( @0 ^7 P" Z1 U" b
    23
    / A' E: H% u0 U& ^( QSqueezeNet1_1的网络结构如下:
    4 Q" Y% D* F% m2 c, |" m  t# J: S8 v. E9 O
    self.features = nn.Sequential(9 I2 `! {3 w) @! d; C0 y0 P
        nn.Conv2d(3, 64, kernel_size=3, stride=2),
    0 a% G' U' R3 b' K    nn.ReLU(inplace=True),
    - u' p9 f- Z& }0 b; F2 V3 p    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    3 n  Q: C8 V( L' @- i8 a    Fire(64, 16, 64, 64),
    ) e6 o; f0 m8 e5 M, d4 O2 R    Fire(128, 16, 64, 64),' `  L+ I7 l& G2 z' C  d0 v& v. P
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    9 ~5 [3 w! U1 t) f. K    Fire(128, 32, 128, 128),* k' V6 D$ ~; v' b. E
        Fire(256, 32, 128, 128),# Z" X' t* T! I: `5 I; T" f
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    / x+ ^. l0 O: F! f9 V, M' k/ `8 y    Fire(256, 48, 192, 192),
    9 U; S8 P0 J" v4 n: w9 r+ S' J    Fire(384, 48, 192, 192),
    0 C. x4 Y* D) h6 C: D1 B, b9 Z    Fire(384, 64, 256, 256),
    ( Z/ n' ]! g4 _    Fire(512, 64, 256, 256),
    ' o! o6 M, W/ Y# N- w  ^1 y)
    3 e! G& S% t9 V/ w( {0 H4 ^final_conv = nn.Conv2d(512, self.num_classes, kernel_size=1)
    , d) I( d/ P8 ~3 t* Dself.classifier = nn.Sequential(
    " I9 w+ J( m( ?  b* L# Y& f    nn.Dropout(p=0.5),
    , z2 {+ v* w% g  ?+ A    final_conv," v/ K+ M% ^1 a, v2 T2 Q
        nn.ReLU(inplace=True),- a3 A6 ^% l8 |! @0 i
        nn.AdaptiveAvgPool2d((1, 1))
    ( t5 L3 s8 N( J/ N& v)4 d: ^. ^8 _' L' q7 j% _
    ; r$ D6 V0 s+ y! l2 P1 T6 E
    1
    . d* Y0 o" m- X: K8 d6 ]23 o7 d9 H' q4 `. O5 V+ H  |; q* k" f
    3
    + `2 e) O* n- h5 z% d6 K& ~4% F/ K& U- w  k  H# B* \% Q/ ~
    5
    - _: v" M; Q/ z! u0 e( Z! ?6' a$ c( p$ `: t( x
    76 x2 Q' k) D$ T, l* p$ |' s
    8
    9 ^6 H/ f. X- s# R! U  j9! Z% j  Y# g9 z
    10* G' b" J; Z8 J8 j) j# T0 D
    11
    5 G( `% R; L9 e/ H, A12
    * C* Q$ P( ~" K+ Z( g$ }8 G: S131 f2 ?) T/ f: f. U: t1 P
    14- U" k3 @" W% \' _3 U) n0 N
    15
    0 A- r) u5 q0 {, s168 \, k% |8 v' E. v% Z4 w7 P8 q
    17+ S/ c* s  }- u4 s
    18; I4 e4 u. P0 n4 q' E
    19
    ' P/ d, H3 k3 W209 C7 U. X7 U/ B5 S" Z: W) g) |( g
    214 [9 N! N( E6 T% |8 Q
    22& g$ a; E/ m* K
    SqueezeNet各层详细参数量及其输入输出如下表所示。
    ' z/ I, O- t' I2 Z8 K2 T3 j4 g
    * h4 p$ \: u9 ?9 ^% G. v7 r7 m. ?1 x( {- d) l0 h3 {( c4 Y2 w' l  `
    4.2.6 其他实现细节
    ; B2 w6 d# q) C4 f/ b: V1×1和3×3卷积的输出宽和高不同,所以3×3卷积设置1个为0的padding$ K' e! v1 V- l( E
    squeeze和expand层中使用ReLU6 i1 E6 K( u) _* f5 K# `& p
    在fire9之后的layer中使用ratio为50%的Dropout# ^3 x! l+ h* B% D  L3 G; L
    参考NiN算法想法,SqueezeNet中不含全连接层
    - Y7 [0 G1 F# ~3 o9 m( L# A" v" q训练时,前期学习率设置为0.04,然后线性减少! V' o( {/ x# J0 s1 b, B
    4.2.7 总结
      f( d! S9 G2 W: E. D1 |本文最主要就是三点:9 g5 k9 I( |) d

    5 F2 j( [' I6 p# E$ U- p0 Z/ d用1×1卷积代替部分3×3卷积,输出两种卷积级联的结果
    ! o" m# G2 c4 R& l$ e4 v3 H7 u减少输入到3×3卷积的特征图的通道数,减少参数量
    & l9 ]0 X- S, p+ i. o  `不过早的使用pool,在网络结构后期再使用pool,这样能提高分类准确率
    & j) Y3 x/ R: ?- b) ]————————————————
    + h9 s) Y) ~! [+ L版权声明:本文为CSDN博主「Mr.小梅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
      V" B" F" f. R原文链接:https://blog.csdn.net/qq_39707285/article/details/1264981001 A3 c4 h: p' k9 Q) U$ Q  u7 ^& G

    . l6 _6 F0 A* L. O1 f5 y  S3 Z& O: x
    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, 2025-8-18 20:04 , Processed in 1.255871 second(s), 50 queries .

    回顶部