QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2938|回复: 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
    / {  P' M$ g* f
    轻量级神经网络算法-SqueezeNet; a6 K( ?, F8 R+ V5 [* ~' k2 L
    4. 轻量级神经网络算法目录" G( m, h) m: G, v3 \
    轻量级神经网络算法
    % s1 c1 y% p  s: _( g4.1 各轻量级神经网络算法总结对比
    0 @. S; R8 L* R8 U  o: Z8 |4.2 SqueezeNet
    . U, e9 b; g! `& E3 u- [4.3 DenseNet* J( S0 V/ U1 [# M
    4.4 Xception
    % ~* v# @( o2 r# a; e  j4.5 MobileNet v1% I- a5 W1 e7 K  R; v1 v
    4.6 IGCV8 C: y: n4 j6 u; j" B, [: j8 `
    4.7 NASNet* q' ^9 g7 X0 M3 I$ m* A
    4.8 CondenseNet' G1 ~2 O& S3 \  j8 b, I
    4.9 PNASNet5 {. i( A& Q9 W& ?
    4.10 SENet0 u3 A  ]. f0 I. S9 k6 g- X! Z5 V5 e
    4.11 ShuffleNet v1% g  y/ ~2 r$ E+ _9 _
    4.12 MobileNet v2; \4 l' ?1 c/ g; ^
    4.13 AmoebaNet/ r% ?' R) F% n5 o" r2 Y  b: k' \
    4.14 IGCV2, `$ w  ?; O3 B# P6 z: O5 j
    4.15 IGCV3, x; Y6 q% d) b8 g
    4.16 ShuffleNet v2
    # W: C7 `; D* j7 f4.17 MnasNet
    7 d4 R5 N7 L1 m" Y5 ~4.18 MobileNet v3
    + {/ n3 n* |8 q2 A& t" a深度学习知识点总结- h5 n4 m% w$ P) x3 w8 R
    0 D! w# s( k; b! e4 Y$ I
    专栏链接:  W. Y) N: F0 b' u* S, A1 @
    https://blog.csdn.net/qq_39707285/article/details/124005405
    5 a& c* t; N( q, }/ P4 C# {) G+ D本专栏主要总结深度学习中的知识点,从各大数据集比赛开始,介绍历年冠军算法;同时总结深度学习中重要的知识点,包括损失函数、优化器、各种经典算法、各种算法的优化策略Bag of Freebies (BoF)等。* }, [0 m9 I. u5 S
    * v3 ^" _7 z6 j$ t1 w: q6 c
    本章目录
    ( q9 V; \/ E: @+ f$ b4. 轻量级神经网络算法目录
    2 V" m, `$ w! R' r4.2 SqueezeNet
    ' N2 ]8 k/ G5 |3 P$ A/ W, |  P& k4.2.1 问题分析" C3 V. R" q) V* }) z: _5 e! S
    4.2.2 SqueezeNet的三大策略1 h7 ~0 ?; ~( H. B' D* a
    4.2.3 Fire模块
    * p* y1 C( U( z2 [2 Z4.2.4 SqueezeNet整理结构7 V: y) m+ y2 D5 `6 b
    4.2.5 代码实现SqueezeNet: Q: @% ~, M& V
    4.2.6 其他实现细节. I* \. B4 m* q4 q- z
    4.2.7 总结) _  A8 H+ R* D8 p$ ?' t' O
    4.2 SqueezeNet( `. ~% w3 s  O+ Z% c# s
    4.2.1 问题分析
    ( i" e1 D. j1 B7 L! {( f+ x最近在卷积神经网络上的研究主要关注提高准确率。在给定相应的准确率之后,通常有多个CNN结构可以达到该准确率要求。在同等准确率的情况下,较小的CNN结构至少有三个优点:
    3 l: R; _) H0 `% k% p! M: u1 Z/ b  K; e9 N1 E0 O! ?1 h5 ~6 E
    在分布式训练期间,较小的CNN需要较少的跨服务器通信
    0 o4 `4 L4 P% }/ `. R在自动驾驶汽车等应用场景下,较小的CNN需要较少的带宽将新模型从云端导入
    0 K" m9 ]9 ~! |4 }较小的CNN更适合部署在FPGA和其他内存有限的硬件上
    2 z+ c8 b. j7 B; J' `, U3 n为了达到所有这些优点,本文提出了较小的CNN结构,称之为SqueezeNet。SqueezeNet在ImageNet上实现了AlexNet同级别的准确率,但参数减少了50倍。另外使用模型压缩技术,能够将SqueezeNet压缩到小于0.5MB(比AlexNet小近510倍)。; `0 D  c' G' f7 U
    % k* ^/ O+ }1 O# T6 g
    4.2.2 SqueezeNet的三大策略6 V3 _5 P! i$ I5 B0 j% x0 P. I
    策略1:用1x1卷积代替3x3卷积9 X1 A7 b6 C# E
    1x1卷积核的参数比3x3少9倍,所以网络中部分卷积核改为使用为1x1卷积。
    : w$ L5 z0 W5 V7 ]
    / c' x+ o& V7 K9 P" t4 @6 \策略2:减少输入到3*3卷积核的通道数量% i3 r) X4 @0 T, W8 B
    对于一个完全由3×3卷积核组成的卷积层来说,总参数量=输入通道数×卷积核数量×(3×3),所以仅仅替换3×3卷积核为1×1,还不能完全达到减少参数的目的,还需要减少输入到3×3卷积核的通道数。本文提出squeeze layer,来减少输入到3×3卷积核的通道数。
    * D! e3 l: W& F7 T% A8 F
    1 H/ A- P/ |" G5 Z9 n3 Q6 {/ p' P& _8 L策略3:在网络后期再进行下采样,使卷积层具有较大的激活图- R5 L$ C# F4 H+ g# b: N
    这里的激活图(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中。9 Z4 F) n! n  e1 x8 J6 }

    ; t) \, ~1 N  Y3 p. V4 H" S/ f策略1和策略2在试图保持准确性的同时,明智地减少CNN中的参数数量,策略3是在有限的参数预算上最大化准确率。- t& ^* }+ z: d/ c" \1 d
    7 P% @- J" y1 C2 Q* L5 D: C0 g
    4.2.3 Fire模块) q8 W1 @0 I1 b' ?/ t1 a
    为实现这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的想法。* ~% {/ G8 a9 h% h, u+ M& ~
    ' M; }! X. z6 p) s. E& E4 l% l. J& _

    # K1 d3 ?$ F, O+ K$ l9 F8 y% M& L4.2.4 SqueezeNet整理结构
    3 F% E( o- U5 F  M# q/ [SqueezeNet整体网络结构图如下所示,其中maxpool(stride=2)分别设置在conv1/fire4/fire8/conv10之后,这些相对较晚的pool安排符合策略3的想法。
    " B# o* L; V+ F& n) K
    , O* I% }. F  D; N4 j; _2 e- J, R- e6 u- d4 }
    4.2.5 代码实现SqueezeNet
    : D" V) \" T2 ?+ ]  N+ dFire模块的代码如下:8 S& a2 A* }$ U

    8 e0 M% d$ k1 X; S6 W9 bclass Fire(nn.Module):5 x( h* p, B: r8 B
    / O* H7 I( q$ Z0 ?; o* e
        def __init__(
    ! d, m" K8 C& w4 B' ~; k) V        self,
    6 x# T$ a1 t( l0 p# @        inplanes: int,& m! p9 P) r" R" b+ a
            squeeze_planes: int,
    1 b0 Q1 H9 `" \$ x        expand1x1_planes: int,) {' a4 Z( p6 Q1 z# c; c" o' w
            expand3x3_planes: int
    + b2 `# Y" F) U7 v$ ^    ) -> None:1 r5 u. @) w: C3 |
            super(Fire, self).__init__()
    " d; |% ^- ]* F  n' Y4 u        self.inplanes = inplanes& a9 A* H" P# ]
            self.squeeze = nn.Conv2d(inplanes, squeeze_planes, kernel_size=1)
    + ]/ Z. J8 d* z7 V        self.squeeze_activation = nn.ReLU(inplace=True)# l# @, y+ a3 ]' V# D  }
            self.expand1x1 = nn.Conv2d(squeeze_planes, expand1x1_planes,7 o( n4 ~( b3 k; R5 s$ z& W
                                       kernel_size=1)+ v' e0 u& @6 B: c3 F  ]; @
            self.expand1x1_activation = nn.ReLU(inplace=True)) {1 f: D" X* f8 w! S
            self.expand3x3 = nn.Conv2d(squeeze_planes, expand3x3_planes,
      f! |* ]) I7 k; d. J/ y. W                                   kernel_size=3, padding=1). D6 d) q' K$ Q% `+ D
            self.expand3x3_activation = nn.ReLU(inplace=True)4 R7 s- y! ~5 R2 {% Y
    / v  m! Y, v4 F% U' \0 U
        def forward(self, x: torch.Tensor) -> torch.Tensor:1 f; O" p7 [$ W8 A8 a) H
            x = self.squeeze_activation(self.squeeze(x))
    ; K# N) t: t; d' X' ?        return torch.cat([
    + ]0 J  B. G! X7 N# o* {4 {8 T            self.expand1x1_activation(self.expand1x1(x)),
    ) N$ _! a$ P* @$ u, @7 i7 _& W            self.expand3x3_activation(self.expand3x3(x))' \0 t: I/ p: C2 @) C( x- t  i
            ], 1)
    # N4 R, D) J, Y+ \7 l' g; B8 ?/ l9 D7 y8 m  |8 r  q
    1
    % C# V! \( P; T/ P( B9 Q2
    1 X9 ?" O% j  v7 E$ W: d. J3
    3 ]9 D, e0 }/ m% d: M1 Q* c- \4' x5 w8 j( P9 t# k$ N4 Z
    59 `( d. i9 E- s0 T5 T
    6
    ! q% l$ N1 L5 j$ z) I7) ]/ A0 i# n- f5 [
    89 B$ P- I( w2 q& ?8 Z/ v
    9
    + z+ \4 y) |: Y) ^109 n- [+ U' |! q  D' [. [# e
    113 B* d9 i2 C9 a+ W! m
    12
    ! k1 l6 i8 @" Q13
    " [) G% w1 @( l" F0 M- k140 G/ V$ `7 h* l. H( f& s
    158 Q0 m8 ?$ j8 X9 c7 w
    16
    4 Z+ C1 y) P5 F17
    1 X; E- v3 f  h  C' R18
    0 Z4 S5 j4 c3 z- C& N19. _( H  h+ N4 r) m% r
    20
    " F' p+ {. V8 U21
    8 T% q. Z/ f/ L# S0 \22# C) D/ ~( ]8 M. M0 v
    23' p; \8 ^2 Q( u' @( f
    24
    : \/ k4 D9 f% }" l7 F! c: S256 W4 p" X  j  s
    26
    $ k+ @$ R; [# TSqueezeNet主要有两个结构,SqueezeNet1_0和SqueezeNet1_1,SqueezeNet1_0即官方版本(图2左侧),SqueezeNet1_1与SqueezeNet1_0相比在没有减少准确率的情况下,节省近2.4倍的参数量和计算量。# a  j/ c2 i4 g% f) `
    . |  \2 `+ S: ^' |, ~) A: h0 f
    SqueezeNet1_0的网络结构如下:
    & \: [# ~0 R& n8 S
    1 q/ G1 y; K0 ^- n: Tself.features = nn.Sequential(! |" r  g* N5 d# C& @, d" \7 v
        nn.Conv2d(3, 96, kernel_size=7, stride=2),
    " c& ~' s" T" n    nn.ReLU(inplace=True),
    ( ]( E4 L/ \' U2 R    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),, B  l$ N$ ?/ e4 ^
        Fire(96, 16, 64, 64),
    * F1 o2 F* C" B. t2 p7 g# p    Fire(128, 16, 64, 64),
    : r8 q: \0 c1 w1 s    Fire(128, 32, 128, 128),9 M$ ^( \+ B. S
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),5 `7 D( l4 u, K7 ]2 l" X: }$ ]
        Fire(256, 32, 128, 128),
    ! k( B% E) v  c1 l$ P    Fire(256, 48, 192, 192),2 w0 I1 I- j6 F. p8 G. v7 g' i% n
        Fire(384, 48, 192, 192),
    . N' a- U6 d8 J6 Z! m    Fire(384, 64, 256, 256),
    - `5 r. a$ e( {    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    # y4 ]* P- f+ [2 t( R3 x, \" [9 H    Fire(512, 64, 256, 256),$ `/ p$ f/ c7 @( O7 J  J7 E5 p
    )
    : `  G0 g- x- e- V  Mfinal_conv = nn.Conv2d(512, self.num_classes, kernel_size=1)
    $ }- Y" h, M; I! w1 ~self.classifier = nn.Sequential(+ t5 _& ]: k$ V1 x
        nn.Dropout(p=0.5),* O1 _4 L+ k4 O  I/ m( ]* r
        final_conv,
    7 v6 M# K7 s) g    nn.ReLU(inplace=True),6 M( T$ M) ~, r/ y; B; a# ^$ @
        nn.AdaptiveAvgPool2d((1, 1))
    ! A& j. ~- Q" M7 ]( M4 L)
    3 m1 g# Q, Z7 }9 Q  o+ ^4 {
    2 h9 w3 R% z1 h7 }. W" P8 v" N2 Z* [: c( I4 h- T$ G
    1
    2 R  E( i2 A) a1 B' b2+ v+ K! w8 f+ i$ k: W4 k/ y
    33 ]# w: g# c- h* @0 V9 }
    4
    2 A1 U7 a/ A  P* A8 V52 D0 ~) E9 o& t7 X: ~& d
    6
    : {9 u. g1 K% t# d. ^7
    3 [0 I; j: y9 f) m80 ^, P& y. Z. h. N
    9
    5 M% D0 X, v$ g, m: ~8 X10
    / G' K& V- O7 l# d11
    ' p: h. [! u5 P  K12' l3 ^! s( t$ M2 m/ S
    13. ^9 v  ], {3 X6 z( X$ `
    14
    7 h2 n/ X6 t0 n0 n) q8 ]7 x15
    ) N$ F1 }* ^1 _8 p6 D+ H) Y- o' p16
    + j  L7 V9 {( ?  I' l4 ^0 r+ m$ U5 A17
    ! w5 z* `. }2 z! g' ^/ v184 Y+ F& ]' X' ?  |  o& P
    19, Y" L6 x9 {. n7 G+ `& A1 y
    205 H+ W. L6 l3 n: T
    21
    3 ]2 e7 ^& c0 L( ^3 v- ^+ A* i: A- |+ J22
    8 C' n0 x7 a) v, Y. X23! B6 F, B" l: v3 n6 f7 t
    SqueezeNet1_1的网络结构如下:
    0 Y% {! A9 Q& {& j% P$ ~3 ]5 |+ A0 g" \  j) q0 T1 Q
    self.features = nn.Sequential() X7 v. Y$ P+ Q* ?& k- K- J
        nn.Conv2d(3, 64, kernel_size=3, stride=2),4 @3 b3 I+ K( T4 I! R
        nn.ReLU(inplace=True),
    8 U3 q- N- B6 B8 r) U    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    8 {# m! m) g. \' i. b2 |* b    Fire(64, 16, 64, 64),5 F) G) E: t* }# X( H; t
        Fire(128, 16, 64, 64),
    0 c1 e) d8 m3 ?! T0 C" E    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    * T- ~( k0 X8 S+ a; F+ x) W    Fire(128, 32, 128, 128),
    1 j( d, e) l4 a& y- [    Fire(256, 32, 128, 128),% V0 i+ y) S- ~) h. Y' A) |; P
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    5 _+ s9 k( ^& }; ^( W) l- z1 g    Fire(256, 48, 192, 192),1 p5 x  @% ^, X0 j, f5 X
        Fire(384, 48, 192, 192),
    ( u  I; j- j9 u+ d    Fire(384, 64, 256, 256),1 l8 J( X3 l& _/ p9 C5 v1 v; L- `& P1 P
        Fire(512, 64, 256, 256)," q) y9 l9 Q9 b9 o: B" j6 H8 |
    ), X3 y0 m$ N+ D7 P$ b+ k7 {
    final_conv = nn.Conv2d(512, self.num_classes, kernel_size=1)( ?6 R/ ^& Q2 D. ]9 V
    self.classifier = nn.Sequential(
    6 K' F' h1 T/ ]( W    nn.Dropout(p=0.5),' H9 m6 u% [; k9 G8 H8 f
        final_conv,, R* r$ p+ Q4 r' L
        nn.ReLU(inplace=True),
    ( |0 d* z) x9 U5 n$ t' L    nn.AdaptiveAvgPool2d((1, 1))) H7 t8 I1 X  Y  B2 K1 \3 A# V) W
    )
    ( p6 {, V8 `- D% m2 b# Y, K; X7 G4 ~9 X. x1 m) m' o/ n
    1
    . K- N4 U7 H3 P8 F$ U5 B% ]# e29 y$ p2 V  ~4 x
    3
    4 Q8 y0 _4 X# p" p0 o( o7 [) d4% ?, e  U8 Q7 Z; f& \0 V/ u6 N
    5/ |! S; k6 F) i+ `$ c
    6
      u+ T) s. ~% `7
    4 ?9 c1 q! P/ W3 m8
    . p6 t3 p1 _# w' S9! |/ h7 H$ U1 ]3 V
    10
    % V. z8 R0 c  u2 e, R% x8 z11
    0 E& r( U) K& _: t% u12' e4 h, I* d0 H8 j. @* O) F
    13% N/ P$ F$ ~! H; v
    14- o7 ?, v0 F; x0 I* d
    15
    # {3 X0 d& |- K8 Q9 b! o; j16
    + D  @, l8 f, w! ~+ {171 P$ j0 U; ~6 m- H7 F1 z( d
    18
    ' ]! u- J( E0 ^( }$ v2 ]19
    8 s, R& s4 t) @- ?20: o+ P7 i+ `& B- O8 t& H
    216 s% }" E4 f3 m. ^; f
    22
    / S. N: I( A1 c7 ]5 j+ cSqueezeNet各层详细参数量及其输入输出如下表所示。5 [% c6 Z  k7 m/ G: q1 a

    1 ^3 b4 H5 u" q* j- S/ X+ g$ \* s  @- G; @( j2 P& L. u8 ~
    4.2.6 其他实现细节
    " l* E0 b* B. u% a  L1×1和3×3卷积的输出宽和高不同,所以3×3卷积设置1个为0的padding
    * {. e) s! a0 G& O  rsqueeze和expand层中使用ReLU0 d. i# ]* r, A6 ?
    在fire9之后的layer中使用ratio为50%的Dropout5 E% }+ f# O4 e5 D
    参考NiN算法想法,SqueezeNet中不含全连接层& `, B9 p/ V: s" T# P6 G
    训练时,前期学习率设置为0.04,然后线性减少4 H2 n! `% ]0 x
    4.2.7 总结
    ) u9 O$ @1 n5 z本文最主要就是三点:
    % s% h. T* C$ Q" l
    2 y; m8 J8 P" b0 P2 W. z. ?用1×1卷积代替部分3×3卷积,输出两种卷积级联的结果8 |, h8 J2 M. Z/ N
    减少输入到3×3卷积的特征图的通道数,减少参数量
    / p7 T" `, I8 c' E) B/ ^1 g不过早的使用pool,在网络结构后期再使用pool,这样能提高分类准确率* N: q9 b0 Y& H& [( ?+ ?
    ————————————————8 ~3 v# e0 ^5 y+ ~
    版权声明:本文为CSDN博主「Mr.小梅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。; e& S; R# U6 N: W3 _, c. O4 L
    原文链接:https://blog.csdn.net/qq_39707285/article/details/126498100% L; Q  A! A" h  z7 E
      e9 {1 Y( h- H& p. T
    8 h  Z5 G5 x, a& ?1 M: S
    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-7-29 09:41 , Processed in 0.298095 second(s), 51 queries .

    回顶部