QQ登录

只需要一步,快速开始

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

    % i. N8 o8 I/ m1 h& S轻量级神经网络算法-SqueezeNet' q. \+ k; U5 I8 q, [" y3 \: f
    4. 轻量级神经网络算法目录
    % g2 A* y5 B% W" R" p轻量级神经网络算法: f; E% w1 Q  O7 p' I
    4.1 各轻量级神经网络算法总结对比$ c+ `6 `% Q: E! t. i% t( w. M3 J$ T. I
    4.2 SqueezeNet) Q1 V) B8 Q. K0 m
    4.3 DenseNet* N2 J% x9 L* Q
    4.4 Xception
    9 r" P/ [4 t' R9 F! {4.5 MobileNet v1
    7 ?6 c- B9 B( {' ?8 o4 Z; O4.6 IGCV! \3 N* p- D3 t! b2 x$ \! z
    4.7 NASNet! U  i1 e! Y' P9 c
    4.8 CondenseNet" _& e& K* f8 b  K! I8 _8 G+ i
    4.9 PNASNet
    . @2 {  K5 u  Z( G. K4 S, [/ n. I1 I4.10 SENet
    3 N& ]& ^  u& ^  Y4.11 ShuffleNet v1
    ( B3 K9 L7 a  j  a. j( H4.12 MobileNet v27 Y' s, K& w3 L5 r- L% R, J9 v! V# d
    4.13 AmoebaNet
    0 i0 E: e8 E$ i, S9 q4 a4.14 IGCV2
      P4 D% ]; j1 ^5 V& t& @/ `4.15 IGCV3' T+ {/ M; g4 F5 X3 A- K
    4.16 ShuffleNet v2
    . d" J8 b0 c0 U% u7 \; `& U4.17 MnasNet
    7 n: t: M4 r1 \4.18 MobileNet v3) a1 P( Z" ^4 v1 t. u: b* K" i
    深度学习知识点总结
    + r6 G" K9 b- v/ P! A8 c  c$ k6 F+ ~  I! U7 u
    专栏链接:/ k' g2 n& X% h+ \
    https://blog.csdn.net/qq_39707285/article/details/124005405
    & \( r- v3 q* w$ W) _本专栏主要总结深度学习中的知识点,从各大数据集比赛开始,介绍历年冠军算法;同时总结深度学习中重要的知识点,包括损失函数、优化器、各种经典算法、各种算法的优化策略Bag of Freebies (BoF)等。- N6 ?! @2 }: U
    1 f4 G4 N+ b, @9 z2 u. V' o
    本章目录
    4 @$ J) G# B2 k4. 轻量级神经网络算法目录1 {% ]3 M+ N/ m; t# j
    4.2 SqueezeNet
    ( ~  `& \/ M0 g5 Z5 R4 e4.2.1 问题分析
    % [# I( L/ W; D7 K; n0 c4.2.2 SqueezeNet的三大策略
    # o1 a4 N' v. C. e0 ~4.2.3 Fire模块, S9 s' \. ]: Z+ [& ^0 |4 C
    4.2.4 SqueezeNet整理结构
    % x7 G: T2 g* y3 `3 Y; v4 [+ e4.2.5 代码实现SqueezeNet
    : S# }1 |) ~: L& x4.2.6 其他实现细节
    ( }% h* y( n0 J& X7 n4.2.7 总结& L- V6 ]# @0 h% N6 ^7 N/ V
    4.2 SqueezeNet
    - Y6 }* _; t+ C( T1 E3 J+ g4 J+ Z4.2.1 问题分析
    1 G% M+ ]5 a9 S9 w% Y最近在卷积神经网络上的研究主要关注提高准确率。在给定相应的准确率之后,通常有多个CNN结构可以达到该准确率要求。在同等准确率的情况下,较小的CNN结构至少有三个优点:
    & |7 u" }! h* T* c+ T! z  y
    # M% g# f2 W# O/ g3 |% p) z: _在分布式训练期间,较小的CNN需要较少的跨服务器通信5 U" d8 h$ }7 U  B# \8 U
    在自动驾驶汽车等应用场景下,较小的CNN需要较少的带宽将新模型从云端导入
    8 \: e$ T, s" m; X较小的CNN更适合部署在FPGA和其他内存有限的硬件上6 a7 d$ _( ?) q
    为了达到所有这些优点,本文提出了较小的CNN结构,称之为SqueezeNet。SqueezeNet在ImageNet上实现了AlexNet同级别的准确率,但参数减少了50倍。另外使用模型压缩技术,能够将SqueezeNet压缩到小于0.5MB(比AlexNet小近510倍)。
    7 Z$ d* R9 k- @; h0 Y$ t5 Q# S
    $ T5 h# n3 B5 O2 Q' n" Q4.2.2 SqueezeNet的三大策略% q" {3 @' W% d1 Q
    策略1:用1x1卷积代替3x3卷积* P  ?2 \' k( A9 H
    1x1卷积核的参数比3x3少9倍,所以网络中部分卷积核改为使用为1x1卷积。
    , s0 v9 h6 l! J$ X" c0 o
    1 J+ }) h. u+ ^: q8 f$ o策略2:减少输入到3*3卷积核的通道数量. F/ ]/ _( d/ S! ^& ?
    对于一个完全由3×3卷积核组成的卷积层来说,总参数量=输入通道数×卷积核数量×(3×3),所以仅仅替换3×3卷积核为1×1,还不能完全达到减少参数的目的,还需要减少输入到3×3卷积核的通道数。本文提出squeeze layer,来减少输入到3×3卷积核的通道数。" U) O( n- @' g/ b4 M$ q/ g

    6 w8 G% {2 N, K% H+ j0 q策略3:在网络后期再进行下采样,使卷积层具有较大的激活图$ Y; h) s, ^: j! |
    这里的激活图(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中。
    2 |4 t9 P7 Z: F* U9 X7 e- {5 j) L
    策略1和策略2在试图保持准确性的同时,明智地减少CNN中的参数数量,策略3是在有限的参数预算上最大化准确率。
    6 s7 q9 `* J" X& ~; X
    ( u6 R0 B0 g& ^! }* I' l- ^4.2.3 Fire模块0 l3 S/ r% t$ S- u% T0 V  Y
    为实现这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的想法。1 b/ o1 w4 u/ T# e; P; R  R, P

    8 b0 R  T" e/ \/ V
    ) V0 D5 c+ p$ ^( ]9 e4.2.4 SqueezeNet整理结构
    , |8 R" ?, V6 wSqueezeNet整体网络结构图如下所示,其中maxpool(stride=2)分别设置在conv1/fire4/fire8/conv10之后,这些相对较晚的pool安排符合策略3的想法。4 [# g: Z1 _/ p( K5 ^! l

    0 A: P4 t9 ?& d5 j5 L; M1 z* {! ~6 A: S) z0 ?' L. q
    4.2.5 代码实现SqueezeNet' K! I3 c8 U* @1 y4 |
    Fire模块的代码如下:
    0 a3 }) y4 g  p6 a( |  K8 d" [
    4 G1 }; p& c3 c; X* {class Fire(nn.Module):; h1 r4 z. N( W- L& }: p
    2 |! ~: B# T6 w9 n. V* U
        def __init__(
    ! V5 S, C- |  d7 c! y; z7 B( b9 |        self,
    8 V5 p2 H7 i" N( K; w9 i& w        inplanes: int,
    ( c7 n# n3 ?" V5 |; k& b        squeeze_planes: int,4 B+ N4 S6 _# s# @( V# C+ ]1 A
            expand1x1_planes: int,
    ' [+ P% H& E) M: v        expand3x3_planes: int
    ' L% s, ], Y2 A: _+ ~    ) -> None:
    3 M8 b+ Z* I: G5 c9 O. B        super(Fire, self).__init__()* l& |# @# B' j" P1 t( c6 @3 e
            self.inplanes = inplanes
      w& ^) G8 J! M" d        self.squeeze = nn.Conv2d(inplanes, squeeze_planes, kernel_size=1)% ~- s( X! D$ H- p1 t" I# `
            self.squeeze_activation = nn.ReLU(inplace=True)6 L- l) d, S' @" t$ I
            self.expand1x1 = nn.Conv2d(squeeze_planes, expand1x1_planes,
    % K# R0 f( E7 L5 q. c$ O. i" s6 z                                   kernel_size=1)
    - M; N1 P+ @2 y1 h# g/ `        self.expand1x1_activation = nn.ReLU(inplace=True)
    $ S" a2 _: l& v+ U! N, s        self.expand3x3 = nn.Conv2d(squeeze_planes, expand3x3_planes,4 r, r2 K4 Y& R4 L* S
                                       kernel_size=3, padding=1)8 J" V; g0 }- M4 E
            self.expand3x3_activation = nn.ReLU(inplace=True)
    / t+ @+ ]# S0 i- @3 u0 n
    ' W* D5 x6 X4 m8 z( l$ r    def forward(self, x: torch.Tensor) -> torch.Tensor:
    6 S1 ]5 J6 i% W4 z+ c7 \7 [        x = self.squeeze_activation(self.squeeze(x))
    ) U: P! O. j# n1 }. o& b) k        return torch.cat([
    # H, @8 [/ `6 d0 W            self.expand1x1_activation(self.expand1x1(x)),
    6 Q' ?  A( s' E- j+ g            self.expand3x3_activation(self.expand3x3(x))
    0 |5 x! K/ s4 X        ], 1)0 P: m$ S+ T2 }5 m' [. k2 t

    ( u( s2 Z. N+ E1# M* S1 F/ T. z4 _9 h2 w
    2, m$ P8 H# p. f% ^1 S
    31 a$ e2 D  T  N5 X0 s
    48 k+ f# W# d4 U# V- j3 N  R
    5
    $ q5 o6 a$ b6 M6
    # Q# O5 f" n- m& H: f" Q76 N9 B$ j1 d7 h& L9 ^/ A
    8% }+ Z: k5 }2 n- a+ k3 j: E' t' j# k
    9( J2 O7 Y- l+ q6 q  ^4 U% s
    10/ R& @5 [& k) S1 l/ {
    11/ t5 m& u: l. l# `2 f, D
    12# t& D5 h' ~$ q% L' U1 S! j
    13$ J4 N5 @6 \4 U, Y3 k6 E
    14  Y0 u6 I  h* [4 f9 k* \
    15
    8 E* k8 V8 g1 n2 M6 q) }) l16
    * u$ j& r  Z% L; {! l  G17$ c4 @: j4 v6 ], ^. T3 ~
    18' R6 E: h: U1 R" c
    19
    7 t; W5 |% ~, k: Y& p1 f8 F20
    , H) d" L7 \/ i: U: p) Q5 C* t219 f3 L8 L* Q0 ]; ]7 Y/ F
    22
    / X" A0 R1 R: N& c3 J* \236 p: A( [- h' v9 h5 i
    24
    ) G: Z1 t. n' N! n. l/ q$ ]251 r: R: h. F  `1 D$ X$ U' E1 E
    26; b& s" Z/ U0 W5 _0 B
    SqueezeNet主要有两个结构,SqueezeNet1_0和SqueezeNet1_1,SqueezeNet1_0即官方版本(图2左侧),SqueezeNet1_1与SqueezeNet1_0相比在没有减少准确率的情况下,节省近2.4倍的参数量和计算量。
    5 z# W5 `, E- g# U8 w2 F' O+ S7 Z% y9 ]4 L, c2 p' J6 a; V
    SqueezeNet1_0的网络结构如下:
    * }1 z# {) ^' s9 h
    / g; |. z! U) i* yself.features = nn.Sequential(
    / w" d* t$ r& V    nn.Conv2d(3, 96, kernel_size=7, stride=2)," e' z" Z' C5 W
        nn.ReLU(inplace=True),* b6 W% S# N% Z4 {+ l# X; E
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),; w8 @* G' a! T; L/ L8 x" ~
        Fire(96, 16, 64, 64),
    ( Y# V/ O- w* i3 e3 N- L    Fire(128, 16, 64, 64),
    ! l) ]/ l: k/ U: D5 b; H3 t% E% G! B    Fire(128, 32, 128, 128),
    ) w3 G$ K$ h4 J' V1 O    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    $ [0 I, p& v" o* X' e9 b2 H) u    Fire(256, 32, 128, 128),: U) L( o  q( M% S/ L" Z* X8 v" G0 Q* n
        Fire(256, 48, 192, 192),
    7 l# l% ~* W* E; l    Fire(384, 48, 192, 192),
    ! v$ C* u0 e4 R3 }4 `    Fire(384, 64, 256, 256),0 ?9 ?! y6 x: g% @
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    / K0 w" W) R* R# i' c8 ?: L    Fire(512, 64, 256, 256),
    , L) }# X5 b% m' T! {! g)
      S/ @+ P' g% T5 X9 v2 q0 Cfinal_conv = nn.Conv2d(512, self.num_classes, kernel_size=1)4 A! b$ ]2 t2 r; ~1 Z" u( v: o
    self.classifier = nn.Sequential(
    # h: K' X9 d: i: F5 k: S# R2 D    nn.Dropout(p=0.5),
    $ S+ w5 M0 j& ~6 x+ g1 l. f    final_conv,: x- p$ M1 [0 C: t( P
        nn.ReLU(inplace=True),' H- Q+ F4 N; i' k( G
        nn.AdaptiveAvgPool2d((1, 1))
    % d  l% p/ @0 z. C4 |5 L5 u  x). e8 Y- m! |& M- I0 V! H3 F
    6 f0 Y8 o$ [7 q8 |" P: L

    / l: {7 ~3 Q5 R) @10 L7 L( r  n, a# D, `+ ]
    2) k6 x! V& p0 C: V, [% A  D
    3. j$ T2 a" n& Z' e" S6 z- R
    4
    * a2 L& Q2 y& z, r5. C; B* G, z5 M. l+ s& O) l
    6- C7 d; x8 [  h. ~! \( U
    7/ v. [4 k7 y: z
    8  W4 ?3 h: |9 W- f
    9, N5 G' V! R* F* m2 S7 O- O
    10
    ' p% ?, ]9 {- l) X114 ]9 g$ Z; Z+ f9 r/ i
    12! L, C: U& B6 E2 o
    13. }/ E, W) S% ^8 t& l( f
    14
    % W7 m* V3 i4 F15
    ; @' y' O" v  l3 g& n; S16! f+ _! i. o% _3 g+ ]% L: g
    17
    $ y3 @  l% J- F& R: i18
    6 K. a; c, s5 X$ H" c" Y% t6 M! f19
    : a8 o( j6 ~" |7 x! c20/ w: n4 p7 ^5 c; u$ f4 J; y
    219 x+ N8 z; g5 E, @. P" M* r
    22
    1 q, L9 E/ v: c+ P1 F23
    5 K% a7 f- W# b2 aSqueezeNet1_1的网络结构如下:4 J# M  x1 F1 u8 h# N
    ) D0 a/ C( h* K3 y
    self.features = nn.Sequential(. G! z% p6 s/ q4 B+ k8 r" W
        nn.Conv2d(3, 64, kernel_size=3, stride=2),4 {' ]$ d! w: Y6 P2 D
        nn.ReLU(inplace=True),
    9 n3 O& R/ w: j; Y    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),! |  ?1 n' q: n' L  C& A& y8 i
        Fire(64, 16, 64, 64),& E  X8 F& a! |: _
        Fire(128, 16, 64, 64),' N4 ?2 D1 U; u2 J1 }
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),2 _. M- g: f; |) X/ a
        Fire(128, 32, 128, 128),4 W2 Y. b' ]1 Q3 E7 K
        Fire(256, 32, 128, 128),4 t6 L5 [5 Q8 [: V; H1 P: l0 M
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    4 |7 ]( Q+ b/ P& G% F1 [    Fire(256, 48, 192, 192),
    6 N! n& p/ E% W$ b/ x5 i    Fire(384, 48, 192, 192),1 o" r- Y* x4 N0 t+ Y4 F" C
        Fire(384, 64, 256, 256),6 v4 H* E; J6 s6 i/ H! ^
        Fire(512, 64, 256, 256),' U& y; v- e4 Z1 l1 O! [
    )1 x8 e* e" g* U$ v; B* G$ u
    final_conv = nn.Conv2d(512, self.num_classes, kernel_size=1)
    6 U. _9 R: I, @8 L* i/ Dself.classifier = nn.Sequential(
    # V  V+ [8 q( d% f    nn.Dropout(p=0.5),( ~! W0 n/ _8 h$ t# W+ Z0 C" `
        final_conv,
    * q' w( M# u2 f. z) F# L3 R- T8 @( U    nn.ReLU(inplace=True),
    6 P. K, P& P4 r# A    nn.AdaptiveAvgPool2d((1, 1))
    . [! f) X9 d$ S' U" U# X)
    ) M, {/ _$ O+ P% L2 U) q$ Q% c/ Y: o& U% m0 D6 J
    1
    7 u' g, j7 p! a' ]2% N5 l6 F9 y% [  A0 e- K
    38 w- P7 o) Z+ x* s! ^4 ~
    4
    3 i) F9 Q2 n! v& s' i4 v56 g. ^8 h/ K$ }: y3 B5 A* _/ s& s
    64 p7 s; m1 i' f8 I8 Q( K2 E5 }) p. ^7 R
    7
    ' h! e% U& z/ t" K6 J' x8: f! M- A& T/ r$ r6 B% ]
    94 ^; u; c5 k' ^. t# N# a
    10, A$ ]& k# T  [5 d) y- K
    11
    4 S$ a( S5 B: E5 O8 ~% {1 A12
    & W2 T# r/ l4 d& m# I. O13
    ; t6 [' F" a+ q% p; I144 u  f& t, H' w9 a! a
    15$ y1 }' u# b+ G, ?1 t
    16
    # V2 I/ Q9 i1 p# c+ h  t+ S6 y17
    , k7 n' l' b) Q18
    . G6 N7 M% B* {* c8 A* M  |19# ?' J4 S7 ~! T. _0 |
    208 @0 V0 f4 o' o1 _
    21
    - q1 |( A* v: _7 W9 {4 m22
    * x" s" Y7 I0 |: \" YSqueezeNet各层详细参数量及其输入输出如下表所示。
    9 Q- t& ]) e% A- F* t! q
    ; J: d; D0 a9 s4 I0 s* @1 h# L5 b/ c: _- E. B& m$ J" y3 r+ N
    4.2.6 其他实现细节# i3 E/ D$ t) W1 z! t+ Z) ?
    1×1和3×3卷积的输出宽和高不同,所以3×3卷积设置1个为0的padding* J2 f( d# K# q# e# U& \( l
    squeeze和expand层中使用ReLU2 g6 e' v  _& K9 T9 S+ y
    在fire9之后的layer中使用ratio为50%的Dropout$ z9 s6 r9 m* F  |6 A% W' V1 j( j
    参考NiN算法想法,SqueezeNet中不含全连接层! p4 v7 k+ ~) A- Z' i0 \7 F
    训练时,前期学习率设置为0.04,然后线性减少
    : w. R7 V) n$ p* F( _& M8 @9 z4.2.7 总结
    4 E9 U, C; i" l6 d8 p+ L& L本文最主要就是三点:
    ) }( z6 A9 t2 a: R4 u# x# V
    7 I8 c% t1 F- T用1×1卷积代替部分3×3卷积,输出两种卷积级联的结果
    ( n1 V+ ?( Z9 h% Q; k, O减少输入到3×3卷积的特征图的通道数,减少参数量5 x  s1 j. Z( v% o9 d  @
    不过早的使用pool,在网络结构后期再使用pool,这样能提高分类准确率
    8 P( |$ E% p3 Q5 s0 N3 p————————————————
    ! \/ T7 ~9 v: b5 a版权声明:本文为CSDN博主「Mr.小梅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    * g1 j9 Y. S1 t8 w# @  ~* A  j8 L# _4 a原文链接:https://blog.csdn.net/qq_39707285/article/details/126498100
    . M6 y2 t$ Y0 m& `
    2 e/ a; ]9 g6 o! g- x' w+ g/ I% l( ^3 }
    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-10 10:46 , Processed in 0.426833 second(s), 51 queries .

    回顶部