QQ登录

只需要一步,快速开始

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

    : q$ m9 ~3 X6 B  F4 c/ ]轻量级神经网络算法-SqueezeNet
    + x% w" n- K$ |5 b. X. L8 U" [4. 轻量级神经网络算法目录
    + n* x* I  n7 V+ B7 U/ ]& z6 ]轻量级神经网络算法. {) o" c% A1 V# L  b& ]
    4.1 各轻量级神经网络算法总结对比
    # Q7 C  v) N7 e0 f4.2 SqueezeNet
    . i4 Y7 `" I3 D3 R8 r& ?- ^4.3 DenseNet
    7 |" z- y) K. n4.4 Xception
    0 Y8 W* U! J7 c5 q1 g! F; |4.5 MobileNet v1& J6 p3 l5 i, D& {" I5 d7 l) p
    4.6 IGCV
    1 H: w/ n( r3 K: R4.7 NASNet8 j. y4 P1 z# G! s2 z
    4.8 CondenseNet
    0 U* @) S0 Y5 T* x0 ~( b4 c0 X# \4.9 PNASNet8 V( H. W) f8 u4 w5 w7 F1 ^+ A
    4.10 SENet$ d% S! a5 p+ F8 b. m# K" h5 `
    4.11 ShuffleNet v1
    ( |, x" }" b) W" V0 X' }9 [% T) ]4.12 MobileNet v2
    4 S% W9 ?- g8 a) Q: \3 r4.13 AmoebaNet/ l! x5 i- @) R
    4.14 IGCV2
    4 n. p6 D% [: {- K; O! B+ i4.15 IGCV3
    . |! ^/ o+ _0 o  R4.16 ShuffleNet v2/ k7 A1 L+ E  }. @7 H/ A
    4.17 MnasNet
    2 s, P6 D5 v+ Z' z4 y4.18 MobileNet v36 l& v5 _/ P* [& ]- \4 c
    深度学习知识点总结
    ! o% w6 P' A( f" \. p' v3 P. K
    7 D" |: l( H2 z$ C( g& y专栏链接:
    , s  J( a/ D! D" Bhttps://blog.csdn.net/qq_39707285/article/details/1240054051 f/ K% ?" k3 q
    本专栏主要总结深度学习中的知识点,从各大数据集比赛开始,介绍历年冠军算法;同时总结深度学习中重要的知识点,包括损失函数、优化器、各种经典算法、各种算法的优化策略Bag of Freebies (BoF)等。) d- _4 i: P3 e8 N: T8 t

    , S4 ^. a  ~  K本章目录4 _- ]7 Y) c/ \
    4. 轻量级神经网络算法目录
    # c* A9 m8 Z! v8 z4.2 SqueezeNet
    # Y2 o# J: D6 i4 w# [( a4.2.1 问题分析
    + @2 m" L# \6 ~5 W4.2.2 SqueezeNet的三大策略
    ; o; f3 t- {0 F9 {' c( [& \" G) S4.2.3 Fire模块
    2 j3 c  @5 E2 C6 |; x( n5 p4.2.4 SqueezeNet整理结构
    0 O" W. ~) N# t7 T- z# a4.2.5 代码实现SqueezeNet& U/ U# P2 \* _0 S' X$ q. k
    4.2.6 其他实现细节. G% X2 T, M* M4 O; S$ w8 a% e; E# T
    4.2.7 总结
    * e. |9 i  s( C" O5 [- o4.2 SqueezeNet
    + M& c" `+ P! @7 T( w  u4.2.1 问题分析6 x- L" B4 W8 \* d9 f  p) W
    最近在卷积神经网络上的研究主要关注提高准确率。在给定相应的准确率之后,通常有多个CNN结构可以达到该准确率要求。在同等准确率的情况下,较小的CNN结构至少有三个优点:* _( p' Z; e1 K5 }
      \' q' n- U' Z) k5 x5 M1 ^
    在分布式训练期间,较小的CNN需要较少的跨服务器通信
    5 ~0 E& A* y) q: _在自动驾驶汽车等应用场景下,较小的CNN需要较少的带宽将新模型从云端导入+ g/ e( l) k! e- |
    较小的CNN更适合部署在FPGA和其他内存有限的硬件上" `" s$ ~6 H; [. K! V6 s
    为了达到所有这些优点,本文提出了较小的CNN结构,称之为SqueezeNet。SqueezeNet在ImageNet上实现了AlexNet同级别的准确率,但参数减少了50倍。另外使用模型压缩技术,能够将SqueezeNet压缩到小于0.5MB(比AlexNet小近510倍)。/ c6 G6 z) Z1 D  u7 L
    , B# j6 i1 l( t6 {- {& P
    4.2.2 SqueezeNet的三大策略
    9 Y# z! c) e& _; i5 l0 X% J7 Y9 X& I* q策略1:用1x1卷积代替3x3卷积
    6 r. F8 [% l: P# R( C1x1卷积核的参数比3x3少9倍,所以网络中部分卷积核改为使用为1x1卷积。
    4 S- [1 C( \: W" X& P* \! V8 r* _. m* U! [( k; h- u
    策略2:减少输入到3*3卷积核的通道数量
    5 Y2 R( L- N8 [* O5 p: x/ }+ K3 O  w对于一个完全由3×3卷积核组成的卷积层来说,总参数量=输入通道数×卷积核数量×(3×3),所以仅仅替换3×3卷积核为1×1,还不能完全达到减少参数的目的,还需要减少输入到3×3卷积核的通道数。本文提出squeeze layer,来减少输入到3×3卷积核的通道数。
    : x+ }, V* u. ^. p; `' V2 P
    ; P; D  V) R% \4 o8 h# E策略3:在网络后期再进行下采样,使卷积层具有较大的激活图
    7 x. s: j+ @4 `1 L+ R. O6 q这里的激活图(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中。& d. `% }5 u; q2 u2 \5 ]

    % d* R0 ]' |  n& Q策略1和策略2在试图保持准确性的同时,明智地减少CNN中的参数数量,策略3是在有限的参数预算上最大化准确率。
    + N8 H* f  u6 Q  W; K1 X+ l2 d1 I/ g, J( _) i; ?: R/ }
    4.2.3 Fire模块) l7 _1 R: v/ y9 P" g8 \- P
    为实现这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的想法。
    - o+ ]1 h' \3 w1 G0 V: m, M9 j
    ! J; l5 X' l# n; e- a& }. z. s- L* {8 ?* ^* H' p4 b
    4.2.4 SqueezeNet整理结构+ K2 `# S; S# B( o- A/ q
    SqueezeNet整体网络结构图如下所示,其中maxpool(stride=2)分别设置在conv1/fire4/fire8/conv10之后,这些相对较晚的pool安排符合策略3的想法。6 G) M: s- U* [$ o9 F

    ' B; j1 t  H( i/ m1 p
    : y' P  Z6 C3 y8 _0 ^4.2.5 代码实现SqueezeNet
    ; l$ [5 a# m+ n9 q: X( @Fire模块的代码如下:9 H7 c) i( V2 w4 @+ j! ^

    ' B! }, W' u" T4 }( ^8 `6 Yclass Fire(nn.Module):
      x* W' x8 L% K! Y* W- L: L4 e/ [, `: Z$ g9 I+ Y3 ?" j
        def __init__(- g1 F6 ]$ R5 S, ~* P" }: V5 V
            self,
    : v- V( ^) V9 s        inplanes: int,
    % e0 p, K0 x* I/ ^' o: x        squeeze_planes: int,
    5 g2 x0 {2 t" v3 Z% t: T+ t! ~% L        expand1x1_planes: int,
    ( D+ D0 |; c8 r. l: A+ p. j        expand3x3_planes: int
    7 ]! f1 l& a/ f3 A    ) -> None:7 A( W, k6 l5 |  `- j2 h
            super(Fire, self).__init__()4 F" O8 u* _/ e- B3 ]8 r# x
            self.inplanes = inplanes4 C6 C2 l( E0 @
            self.squeeze = nn.Conv2d(inplanes, squeeze_planes, kernel_size=1): q  a" W4 y- i( O
            self.squeeze_activation = nn.ReLU(inplace=True)+ g6 r4 B0 j1 G8 ^& Q4 i/ F
            self.expand1x1 = nn.Conv2d(squeeze_planes, expand1x1_planes,5 f3 |  ]3 C  i; Y" a( U+ i
                                       kernel_size=1)4 U. A2 \  ^+ U- {& n, f- g
            self.expand1x1_activation = nn.ReLU(inplace=True)
    ' i5 i* X- e, Y" Q/ V$ N6 x        self.expand3x3 = nn.Conv2d(squeeze_planes, expand3x3_planes,
    / W) r; c9 m) ^# W5 A                                   kernel_size=3, padding=1)
    ' I* V& _7 i! ^        self.expand3x3_activation = nn.ReLU(inplace=True)
    2 s! L6 |: `, S0 b& l- q, m$ ]1 p3 }
    ) Z- M5 W) o& s" h) S, ]    def forward(self, x: torch.Tensor) -> torch.Tensor:3 L7 Q5 k) m+ S: F
            x = self.squeeze_activation(self.squeeze(x))
    1 U/ x( |9 I" q- ]  C8 b        return torch.cat([
    - u: X% A  K2 c$ S* P            self.expand1x1_activation(self.expand1x1(x)),# c1 B' J  {# W6 g! [1 N9 e9 z
                self.expand3x3_activation(self.expand3x3(x))
    , m/ K1 I( M9 d. r- \& ]1 m        ], 1)
    ( L& J+ H* s% }% {$ H  f) v' h+ Q+ m- J( j
    1! I0 h* h, u* U# F5 S
    2
    / Q. Z. a/ w- ~/ S# ]' v: ?3
    8 j. z/ R7 q  x4+ B  W% @& `) {' }6 X
    5
    & O  a/ R% l9 h- p1 N' D( M3 B6/ q- j- i* i$ A6 G0 l+ A
    7
    % X& I. v! \  w' d: f9 P- H8
    * r% D7 R$ J6 W" ~. P9
    & c, m' f- j. y/ c" g4 K/ A/ L- M3 K10
    ' |2 _$ B/ M4 q11; t; O1 N6 f+ `% [* p1 E8 x9 {
    12* s. i  B% M8 E7 q
    13* N4 Y# [& P4 D0 C
    14, I' S0 M6 M9 f- _5 H
    15- r' X9 {1 i1 n0 T2 F3 p
    16
    : r* u0 \) G, V" R% M0 s0 C+ i17
    . S. M4 A+ j2 z  c4 q0 |- Y180 {  q" y) R) e. i* c/ F2 p
    193 d3 W2 b) w8 E6 [: R* C5 f
    20
    ( J" d5 J8 l2 t. H  g' n21" z% n9 W+ Q* E
    22" R  Y- `) q& O1 n
    23
    6 a+ `0 R# y, E  e+ j* N24
    . B* w% t. ^* H3 j! j" k7 m. t/ m9 l25
    0 F- u9 ^5 a, p# f6 r4 j# A26
    , g+ W5 v0 j! S8 {0 i" I9 rSqueezeNet主要有两个结构,SqueezeNet1_0和SqueezeNet1_1,SqueezeNet1_0即官方版本(图2左侧),SqueezeNet1_1与SqueezeNet1_0相比在没有减少准确率的情况下,节省近2.4倍的参数量和计算量。$ G6 @5 ^# W# c4 q

    ' @2 m& g6 K' R8 q. {' c6 u$ PSqueezeNet1_0的网络结构如下:( v7 l6 L3 a* i3 k2 |" N  \
    5 M( h' l/ e; ?$ j/ t
    self.features = nn.Sequential(# u# @4 l7 [% c" g$ M7 Y$ J
        nn.Conv2d(3, 96, kernel_size=7, stride=2),% L9 k. K3 c$ x. S" f; A
        nn.ReLU(inplace=True),# c+ i* O& w. k3 V4 @
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),4 e& O% m0 x& X  w' C
        Fire(96, 16, 64, 64),2 Z+ Y% F; z' ~/ Z7 B
        Fire(128, 16, 64, 64),
    / B; T/ R+ @7 D  Z    Fire(128, 32, 128, 128),, r- |5 [, p8 N- c8 w
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    3 ^, B- b  R! q! F) t% J; g# f    Fire(256, 32, 128, 128),
    ' p4 e: d/ _1 U9 U. G+ W+ O8 P; v. s    Fire(256, 48, 192, 192),2 z9 I$ T# H  u) l" P" T
        Fire(384, 48, 192, 192),
    & r. g1 r% G, i' b- H    Fire(384, 64, 256, 256),4 ^0 J; ]7 }/ I
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),, X; Q) Z8 n8 _6 C4 C
        Fire(512, 64, 256, 256),9 A) I: }% w1 \/ K$ M9 b
    )5 b$ l0 F7 g, q; h8 o' G7 L
    final_conv = nn.Conv2d(512, self.num_classes, kernel_size=1)
    " `9 @3 f$ n. ]! [self.classifier = nn.Sequential(- ?. o* x  \1 W8 V: A; ^
        nn.Dropout(p=0.5),% v. C9 U2 e# V6 @
        final_conv,- z3 G4 U3 W: z
        nn.ReLU(inplace=True),6 ?8 V5 `# p( x4 I! v
        nn.AdaptiveAvgPool2d((1, 1))
    / J1 Q0 ^7 q* x- j)3 A. [+ ^2 P( I

    , c3 U- x: Z  ^5 B: m' a% t
    - {8 ~6 q4 G: l+ L" Z1 s1* w  Y" G4 I# Y0 ^0 o) v; Z4 s
    2/ ]7 _2 n: P9 u7 r
    3
    ; I" T4 j4 V- p2 G' K7 D' C46 O" G4 z$ ?8 c- O
    55 j0 S/ h% e" i+ K
    6+ c* `/ A) ?% S  L. Q  l2 F
    7
    2 T. L# m+ N% H  V$ }8
    ! i4 m1 x7 ^; z( f9
    4 n. K: w8 d* V0 O10  Z( B3 L: i/ x$ @: G
    111 J6 O) j" L0 P# y
    12
    7 s/ M- ?. w0 _13
    & R! N  N- R3 q7 f146 H. r% I) b3 Y. \
    15
    5 d* X# C& O+ g1 R( u16
    ' S/ l; J2 _* J17
    " }# Y$ `  u# P/ D9 F+ k186 ]+ ^. G9 c9 B, y% P
    19
    6 C1 F- z' v* J( l' S3 o! p; n6 x, ?20% L- `3 T- w8 q  y
    21+ L4 Y: S: I6 Q# v7 P
    220 d" t: _/ O/ W; T5 S. e* K) @
    23
    1 ?  |/ g  z! @: G2 ~SqueezeNet1_1的网络结构如下:4 j2 d; B+ t+ n, t2 Z" m

    % @; H/ }3 t/ r; B4 rself.features = nn.Sequential(% n: `* t4 j5 \0 @
        nn.Conv2d(3, 64, kernel_size=3, stride=2),
    / z. L3 \% K1 Q2 R/ Z% o8 E    nn.ReLU(inplace=True),
    * S  U* \6 D! Y! R9 }! o    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    , C: n5 X* f+ E1 x% x  Z* {; I: o" _    Fire(64, 16, 64, 64),8 I  C6 D2 J* B! I1 n' g! g: C' v' X
        Fire(128, 16, 64, 64),* T; S5 r; c+ j/ ^% o+ g
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    - L- l( a4 |( l8 q    Fire(128, 32, 128, 128),( a5 b/ [; Z$ L$ Q, b- _
        Fire(256, 32, 128, 128),
    + E0 \$ ^+ o$ i3 @    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),$ v% w/ X, ~8 Q# ^3 n
        Fire(256, 48, 192, 192),/ z1 i/ K6 F! S' r- G9 Y
        Fire(384, 48, 192, 192),; ]6 L* h. F2 w2 k0 Z! B$ t
        Fire(384, 64, 256, 256),
    # Z* Z2 j+ o: K# m2 o    Fire(512, 64, 256, 256),  p4 n, y( @* x( s
    )
    ( n" }3 P+ z- _final_conv = nn.Conv2d(512, self.num_classes, kernel_size=1)
    ' ^4 K2 d8 M/ \self.classifier = nn.Sequential(" Q: N+ R3 d" j. \& l& U
        nn.Dropout(p=0.5),7 [- |: S/ S6 _+ w
        final_conv,/ w. t4 g$ W* e% N
        nn.ReLU(inplace=True),! O0 P: k# U7 N+ Q2 H* f# I
        nn.AdaptiveAvgPool2d((1, 1))
    ' z$ u. n) h2 b' q1 ?/ P# q" m)
      o" z. ]% r( N% V# s- S/ t3 K- c9 D- J. [$ @
    1
    + Z0 _% g* v- j- x$ ~9 r8 q2
    $ l9 ?4 ^3 d) M% w) w" D3
    4 o3 y6 b8 t5 d3 ?5 w3 c3 u4
    + K! w$ |* E" _0 M) Q/ R4 o- s5
    - Y6 x: D$ |6 n3 \; i6
    2 s* |& ?- i1 ~7 d! j' C( m7
    1 }. |: i6 _! C' V5 [4 g8; Q/ s9 ~' l8 s# V5 I; @
    9
      Q* |+ }% p7 g: r& s7 q! j0 S10' N/ \- B4 K) G- ~5 o
    11
    1 B/ v" }4 j% \12* U2 `4 I3 `' h9 V8 ]# x0 b3 n
    134 H. E7 o: N: E" d9 Z% l; h
    14
    5 f7 G+ A0 g1 J* Z2 b15# @0 h4 [* R2 @: _4 Z! V
    16) l9 O* u: I) w1 {5 S6 p8 @) U
    17; p+ H8 Y6 H/ M( P! V
    18
    8 w9 D; `4 B( o9 W19( Z) ?; |7 [+ R
    20
    + M% |! A% }# i  F$ S218 T3 e" C4 X( c+ c8 z
    22
    9 i, w/ D" _) K; s$ z. Y5 NSqueezeNet各层详细参数量及其输入输出如下表所示。6 k9 B# R" T/ b, z( n6 E, k

    ( Q9 J% C" A/ G% P$ n3 f! I, `
    * f/ e8 Y# n+ E6 S! {# M4.2.6 其他实现细节
    * m+ O- t$ ]/ D( O2 o2 i- Y1×1和3×3卷积的输出宽和高不同,所以3×3卷积设置1个为0的padding
    , K, Q' u0 Z0 J  q3 q$ ]squeeze和expand层中使用ReLU
    5 R& S0 y) z$ l+ H在fire9之后的layer中使用ratio为50%的Dropout/ D3 n9 e# w( s! C. I; L3 E
    参考NiN算法想法,SqueezeNet中不含全连接层; ?7 G6 c% O: I2 [- W
    训练时,前期学习率设置为0.04,然后线性减少; m! \/ H0 T8 j3 H, K) @
    4.2.7 总结
    & `% R8 e7 x" H* o, E$ Z7 v- S: o本文最主要就是三点:
    2 r7 z6 T7 n1 n8 M
    3 l, h% L* U6 M/ ^用1×1卷积代替部分3×3卷积,输出两种卷积级联的结果2 r4 ?4 Y  w# @$ q) T
    减少输入到3×3卷积的特征图的通道数,减少参数量1 ]* U; r# q( g3 B3 V2 Y, K( f
    不过早的使用pool,在网络结构后期再使用pool,这样能提高分类准确率
    ' l* L# B9 e5 W. r0 L————————————————
    : A- c9 m- j3 |版权声明:本文为CSDN博主「Mr.小梅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    4 E) F( l! [8 k5 T原文链接:https://blog.csdn.net/qq_39707285/article/details/126498100
    % i5 z; D; w6 x; Q+ ~
    / F5 {; g! b. E: L) i. w7 @# y" E6 a% Y, o7 N( t
    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-10-10 07:16 , Processed in 0.554262 second(s), 50 queries .

    回顶部