QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2937|回复: 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
    ! g, ^. G6 S. s) n3 |  D! N: t
    轻量级神经网络算法-SqueezeNet
    9 U+ k! h2 F) {5 \4. 轻量级神经网络算法目录
    7 ?) \$ k3 O) Y轻量级神经网络算法3 d: S0 N( ?/ ^& ^, h; ?) U& Q* K) c# e
    4.1 各轻量级神经网络算法总结对比2 `- |  V# f3 f* a5 s# f
    4.2 SqueezeNet+ i# P2 B1 J8 }+ c( g! U
    4.3 DenseNet
    ! N# @: G# q8 \) |" {4.4 Xception
    * m; z0 }0 p5 O8 S0 r4.5 MobileNet v1" U8 w8 b( z4 q4 |
    4.6 IGCV, a' L/ J' {- P
    4.7 NASNet
    0 B* J$ N% i( g% s* F/ s! V4.8 CondenseNet) N: g: V3 ]4 _0 s9 l
    4.9 PNASNet% `: N1 N0 `% v3 q( s; x+ i8 h
    4.10 SENet
    9 l" G! Y+ N, C$ E4.11 ShuffleNet v1
    " K: r. G  Z; L5 O9 G% N4.12 MobileNet v28 d! P, }5 y9 q- \1 I0 x
    4.13 AmoebaNet
    3 b& S1 G( V8 M4.14 IGCV2
    / l1 m& Z8 f6 K4 e1 Q4.15 IGCV3
    / S8 M, I9 a7 Y5 C6 R4.16 ShuffleNet v2
    + p' j' e. U0 [4.17 MnasNet# N/ K, g& a3 E; O9 Q
    4.18 MobileNet v3" }" z" B* s# C# y" i
    深度学习知识点总结
    " o3 J$ I' v& U3 F4 x9 T4 B
    7 N/ K- l- {3 R. J! x5 ?; P$ c专栏链接:( U3 ?. C3 F) Z$ x3 t
    https://blog.csdn.net/qq_39707285/article/details/124005405( O. p; A4 Y; `9 e
    本专栏主要总结深度学习中的知识点,从各大数据集比赛开始,介绍历年冠军算法;同时总结深度学习中重要的知识点,包括损失函数、优化器、各种经典算法、各种算法的优化策略Bag of Freebies (BoF)等。# s3 r/ \$ }( L$ [7 o

    3 `0 b# c/ g  D2 v本章目录
    : J8 q; q2 L3 z0 p2 w5 Y4. 轻量级神经网络算法目录
    , i9 e$ I8 I7 T* G4.2 SqueezeNet$ X0 L: |# [) l6 S! f, g
    4.2.1 问题分析
    , Z. o2 e8 P$ T! J' o- _4.2.2 SqueezeNet的三大策略: z+ Z) |) D- E
    4.2.3 Fire模块
    ! |5 U+ ]) ^+ |3 C. H6 C4.2.4 SqueezeNet整理结构
    : R; {1 T) {0 {7 z+ p4.2.5 代码实现SqueezeNet6 ^( D# P& H2 a+ E/ b4 y) s
    4.2.6 其他实现细节* E- G  q' }7 u4 U2 e+ v' Q) K' T
    4.2.7 总结  ^- h! g9 \7 x/ O
    4.2 SqueezeNet" D/ ~8 P  C8 ~& R( _
    4.2.1 问题分析8 Q: ]$ a- y' U# f$ W1 F5 X
    最近在卷积神经网络上的研究主要关注提高准确率。在给定相应的准确率之后,通常有多个CNN结构可以达到该准确率要求。在同等准确率的情况下,较小的CNN结构至少有三个优点:" A! Y) L' o8 Z  |3 v& N  C

    0 Q* p" }* g3 `+ j3 X$ u7 a! W在分布式训练期间,较小的CNN需要较少的跨服务器通信. U( I& z- r/ g- n' _8 J3 i
    在自动驾驶汽车等应用场景下,较小的CNN需要较少的带宽将新模型从云端导入- D( ?7 I$ N: T
    较小的CNN更适合部署在FPGA和其他内存有限的硬件上& L1 T# `/ ?: E) E
    为了达到所有这些优点,本文提出了较小的CNN结构,称之为SqueezeNet。SqueezeNet在ImageNet上实现了AlexNet同级别的准确率,但参数减少了50倍。另外使用模型压缩技术,能够将SqueezeNet压缩到小于0.5MB(比AlexNet小近510倍)。
    / P/ H2 g, F* f+ A( F4 `' ~
    7 w" N$ |8 N% `: E: n; m# K0 y4.2.2 SqueezeNet的三大策略
    ( i9 o4 k9 c& y! R策略1:用1x1卷积代替3x3卷积
    * N6 }( Y! h5 w' c1x1卷积核的参数比3x3少9倍,所以网络中部分卷积核改为使用为1x1卷积。- a0 d$ k  {; i1 k4 m3 Z
    8 [$ V9 v& z5 }5 j6 d: f
    策略2:减少输入到3*3卷积核的通道数量% |& ~# i$ Y8 A* t0 S
    对于一个完全由3×3卷积核组成的卷积层来说,总参数量=输入通道数×卷积核数量×(3×3),所以仅仅替换3×3卷积核为1×1,还不能完全达到减少参数的目的,还需要减少输入到3×3卷积核的通道数。本文提出squeeze layer,来减少输入到3×3卷积核的通道数。7 W# @4 @0 Y/ o

    % r1 ^5 b! ~- G/ o5 ^7 V* R7 U& }策略3:在网络后期再进行下采样,使卷积层具有较大的激活图; X' t6 X& S* k8 R& S
    这里的激活图(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中。" q9 e/ o) T, K7 G  g; G
    2 c  k3 d8 I3 R/ ~% Y
    策略1和策略2在试图保持准确性的同时,明智地减少CNN中的参数数量,策略3是在有限的参数预算上最大化准确率。" S/ E1 N: N! B1 y" |3 u* ^/ w

    , _4 w( p% B( |" [. U4.2.3 Fire模块
    4 s' l$ O2 i0 y" C; C为实现这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 U2 s4 Q) s2 W/ F9 t7 L! ^2 P+ x2 K! C2 x4 o9 T
    5 B+ `' k. W3 }1 Y: i
    4.2.4 SqueezeNet整理结构
    # |" L  L  M1 X' K8 x% w) }; w5 \SqueezeNet整体网络结构图如下所示,其中maxpool(stride=2)分别设置在conv1/fire4/fire8/conv10之后,这些相对较晚的pool安排符合策略3的想法。$ {* m- q: P( d2 R* g" S4 \/ p" b

    ) G# ^  [! m( ]( k2 ?5 [9 Z# x
    " ^$ u* j, o0 r+ d' l* p4.2.5 代码实现SqueezeNet
    5 r$ S0 F3 F1 [Fire模块的代码如下:! H' Z2 r) l) Q' `
    5 M, u  v+ w! R5 |
    class Fire(nn.Module):$ s: E  A/ i' {& K6 Y

    ' a& _7 C# u0 O9 x% @) p( B! d    def __init__(
    * Y7 P9 ^! A7 q        self,
    - }& e; d/ R9 P        inplanes: int,. z( X' C; t# u* o2 ^0 t! B7 B
            squeeze_planes: int,
    % c% E6 ?# A6 K! p  s9 s$ O6 d        expand1x1_planes: int,( S" u% F: t) n" j
            expand3x3_planes: int
    0 v: Y2 v2 ]5 T. g    ) -> None:$ K' A1 K0 t# n3 w  C
            super(Fire, self).__init__()
    ! }0 O& H! o6 P4 ]2 p        self.inplanes = inplanes& w8 s! M2 t. b- u: U- i+ ~3 D; c% r
            self.squeeze = nn.Conv2d(inplanes, squeeze_planes, kernel_size=1)4 p7 D2 K1 C6 u8 b5 ]  ?: n
            self.squeeze_activation = nn.ReLU(inplace=True)
    0 n- K: ^1 ]' A% w0 T        self.expand1x1 = nn.Conv2d(squeeze_planes, expand1x1_planes,
    4 s, z- s4 C( v% L4 W( c5 l                                   kernel_size=1)  H% U( ]1 z. u& f& `+ n2 W' ?
            self.expand1x1_activation = nn.ReLU(inplace=True)
    9 i+ d$ }& y. Y+ b6 Q6 h6 g! {        self.expand3x3 = nn.Conv2d(squeeze_planes, expand3x3_planes,
    " u5 F+ ]2 m' Y6 l  Z$ N                                   kernel_size=3, padding=1)
    ! D  m9 {5 B  d# ]: K* v9 D" `        self.expand3x3_activation = nn.ReLU(inplace=True)0 r; g4 Q0 l) Z
    + i+ J1 Y; T/ R+ J
        def forward(self, x: torch.Tensor) -> torch.Tensor:# ]4 P) _! O" r2 h: Z; r
            x = self.squeeze_activation(self.squeeze(x))
    6 I- Y+ L) U$ Z  q" C. a( q        return torch.cat([! |2 B& K1 Q: y' p2 l+ @1 a# n6 ^* m
                self.expand1x1_activation(self.expand1x1(x)),
    / G1 }6 z# [9 t* R, Z* h            self.expand3x3_activation(self.expand3x3(x))
    2 m4 y- l7 I9 }1 u) K8 x. j5 v        ], 1)
    ' E+ x1 `" X5 ]1 a) B
    2 z* @, J: a, S3 B% P) U- A1) a$ t$ @/ O9 o; b! D+ k% B
    2
    ! H8 _$ ^, F& h1 a7 t3 ~7 h" K3
    . X# ~; w2 s; V- z7 k; a4
    . {  _$ s; v/ h9 l5
    3 m4 ]0 h% p2 s  l) L  B6
    - `9 P" c/ `' f3 w: i7
    " u+ _0 F" G8 {4 }2 n, [84 E, H: S3 |0 x) F/ ^9 N
    9
    $ q+ Q( x9 j$ a. ^% |5 F10
    5 z$ Y1 N# \& @; Q11
    1 i$ C7 \# f3 e$ w9 d! s! ~12
    % @+ j& j$ B2 _1 ?9 \13
    0 w0 w* Z& ?- r" w& a14
    & U5 V8 K1 ]7 O* w5 E15
      M& W' {9 w" F16
    & w: I3 `# U( }! s9 e9 |+ z; K17- _/ C- q% m2 c) h" v
    18, Z5 L7 ~( i- R$ E- z# p
    19/ ]4 \1 `, ?& J9 x: n- z
    20
    / ]6 A- u" _7 N21
    - K- _; n' D: ?! e" ?: h; X7 b/ S6 B22/ V5 i- |/ |  E: Y' Z
    23( P9 M4 E& L: K  K$ |& P
    24
    + Z/ E# R7 n. K; @) Z% Z250 V) s& W+ j% Z- B6 j: ]/ b
    26
    $ R/ P; E: p3 ESqueezeNet主要有两个结构,SqueezeNet1_0和SqueezeNet1_1,SqueezeNet1_0即官方版本(图2左侧),SqueezeNet1_1与SqueezeNet1_0相比在没有减少准确率的情况下,节省近2.4倍的参数量和计算量。' q% U3 F6 N5 w) f3 T7 T

    ) A- p5 `- w+ {SqueezeNet1_0的网络结构如下:+ D7 \, x6 _6 C

    2 G1 L" E% Z7 E% }& Y) L4 Uself.features = nn.Sequential(1 d: y( x& k' }4 k( Z* o
        nn.Conv2d(3, 96, kernel_size=7, stride=2),
    ; u' g& I9 Z. w# S    nn.ReLU(inplace=True),6 a# f; h/ {" e& Y
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),# R  n0 s1 b! w( c, O/ t9 Y
        Fire(96, 16, 64, 64),
    , w; I0 L' e/ m3 W9 S5 {; G6 g) k    Fire(128, 16, 64, 64),9 e7 Y1 k: U. |, V/ O
        Fire(128, 32, 128, 128),
    / @% y- _  g9 N$ d. n/ D3 x    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    * `# e7 F8 h7 p; G- M    Fire(256, 32, 128, 128),
    6 l7 @5 e3 k% {' t, p+ W# h; [    Fire(256, 48, 192, 192),
    - v5 C7 j+ x% h    Fire(384, 48, 192, 192),) J) k2 {1 `4 o1 S/ g9 E" e6 q( A
        Fire(384, 64, 256, 256),. H( I+ Q- }0 I4 B1 c. U+ I, g
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    ' A* i6 \% f; I& n- C    Fire(512, 64, 256, 256),' R( T1 G) o/ ^" \- T& ]
    ): R) A% _3 x; V0 d* ?0 N+ Z
    final_conv = nn.Conv2d(512, self.num_classes, kernel_size=1), h8 s$ ^; f" I4 [; `
    self.classifier = nn.Sequential(, I' @6 B- g5 x9 v* e4 [9 Z
        nn.Dropout(p=0.5),
    0 f7 a7 U+ p" x    final_conv,
    0 S0 @- P) v" D# y' T( z- K2 D    nn.ReLU(inplace=True),+ e& W0 o1 \1 O/ `- D$ t
        nn.AdaptiveAvgPool2d((1, 1))
    + l+ @5 a/ m& k# S5 z/ t, y* f- l)
    $ l5 L/ o9 i" U' x
    % g+ _* Q( w8 [; `
    2 ]4 m& N" ^/ r% T# h6 D+ N$ L1
    + G# D' s8 J# m26 V5 W7 [, s; W
    3
    8 Y  j& ]& `, v3 n* D% R7 r4
    6 F, m0 {2 ^  w- v50 c: {, O8 n1 |  j
    6, B2 W& _% _2 a+ E. D7 @( r  N# G$ g
    7
    " D7 n1 t6 Z" b3 [6 G  f! L0 i1 h8, S9 b$ k( v! h3 D/ o
    9
    6 E/ {# L' B* E0 C0 L+ I10. x$ b+ V* A+ P8 x9 a
    11
    * s1 S; o. R0 D$ Q9 w12) Q' |: [; F; p3 P
    13: P5 f) ?; g! X" s1 |
    14
    - Y1 d1 q% i; ^2 K! J15
    4 F, @% _3 @  I16
    2 _6 V) T0 p. V0 v3 w9 H3 o  T17# H/ s# d: D% X# L$ |: _( P, N2 W
    18
    / j7 S0 c4 Y, T0 {" K5 I19( ~9 A& d0 }# }; m& Y
    200 o1 \2 s. Z5 p- |( t
    211 ?% o8 R! d' h6 z8 g1 d, H8 r: h
    222 ^5 N6 F& l7 K
    23
    7 M1 o0 @% o* iSqueezeNet1_1的网络结构如下:
    & z- G! I6 O0 n5 I% E/ D3 Y
    0 ^! J) V  n: E3 H5 [4 R! ~self.features = nn.Sequential(- `% H0 s. n! O& {  i* C+ z0 K$ ]6 h
        nn.Conv2d(3, 64, kernel_size=3, stride=2),
      E( `% X& k  D+ n' ^. D0 ?    nn.ReLU(inplace=True),1 B& K  W% O- j6 s
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
      s/ j" R) e& R8 m# [    Fire(64, 16, 64, 64),* T: g/ Y# `* ?
        Fire(128, 16, 64, 64),+ I0 j  f- W& e4 l
        nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),- W8 v7 N. a5 f4 F, l$ l
        Fire(128, 32, 128, 128),
    9 z7 C' l2 k9 X5 z6 i0 i    Fire(256, 32, 128, 128),
    9 [7 ]4 K1 n% R6 A    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),2 U4 L+ ^. ~* @; J& I* S* j: X
        Fire(256, 48, 192, 192),5 s0 k: ?4 z0 }' d: i8 U, Q
        Fire(384, 48, 192, 192),: ~+ p) Y$ M( U' u$ |# N& Z* t  u8 v; U* }
        Fire(384, 64, 256, 256),* L8 k) B; S) w4 l5 J) C9 j
        Fire(512, 64, 256, 256),
      h% f& H( V, \. f& I) h% i! T)# @# w  i7 A* K
    final_conv = nn.Conv2d(512, self.num_classes, kernel_size=1); `2 g4 V4 R5 z8 A) d  m4 f
    self.classifier = nn.Sequential(
    3 F! z& p% V2 N' k9 j    nn.Dropout(p=0.5),
      K0 w/ ?3 C& W0 m7 K/ S; R    final_conv,) N1 z8 X2 R% q1 p! H
        nn.ReLU(inplace=True),
    & j. b3 K% H7 Z" B/ v3 K    nn.AdaptiveAvgPool2d((1, 1))
    3 H* D) k- }" g! _& W& b)) L" A9 j3 j( U/ W2 _  ~( ]
    " m5 a: S, ^4 r) b
    1, A# }/ E& A( p: A- C% @/ o
    2
    + z: U" a8 X9 t* o& [1 l3
    ( S( k/ m6 F4 A+ j. ^, [4: e5 y' Y0 ^! ^) Z
    59 F8 e+ d3 d( M( Q  V& X* f( K& @. m
    61 e  ]6 Z' A& {9 u+ j& @
    7
    % d/ i. H% ~2 A& |8 X& w4 G8% B( R; \4 l8 j1 [& S% a% G3 b
    9' J% O+ }, C* ?
    10( B% s: @; C7 G1 A1 B: D
    11
    6 T3 s; x) l; Q9 T! y6 N; S/ {7 P, k) {129 M+ K6 r( I) W! [/ O6 Z
    138 @9 u& G+ S& D) l8 Q7 G' N4 M# u
    14
    ) y3 a3 T& e4 n& T- _15
    & I& f  ^. U/ i16# R" _. o4 i; g
    17
    8 {, O8 C0 f+ A183 O5 B1 @2 V, }$ B
    19. M$ O6 l, U, A5 c6 {1 b
    20% I- `, }- X  ?" F
    21) S7 ^8 q8 g1 M+ g# W
    22- x' u9 a/ e1 p. {
    SqueezeNet各层详细参数量及其输入输出如下表所示。
    2 k5 V) ?7 v( d1 j+ S- u, S2 x* D+ q/ b

    ' D1 J4 w5 R) u) x7 [" Q9 o4.2.6 其他实现细节& o4 j8 E9 `' C) c
    1×1和3×3卷积的输出宽和高不同,所以3×3卷积设置1个为0的padding: H7 k; M" K+ p$ F# O3 s  j+ t
    squeeze和expand层中使用ReLU2 g1 t  E1 t0 T3 g; B" s
    在fire9之后的layer中使用ratio为50%的Dropout) R2 B2 x* @  w2 ^6 J$ t* l
    参考NiN算法想法,SqueezeNet中不含全连接层- x# E3 g7 X: z4 u. L/ `9 ?2 C
    训练时,前期学习率设置为0.04,然后线性减少8 i, U, Y. T. ?
    4.2.7 总结
    7 d* n4 y6 p: R0 Y3 e本文最主要就是三点:3 |' a1 X, R% W, X$ l
    ( y& y" Q; O6 D- t9 V' e* a1 f/ M
    用1×1卷积代替部分3×3卷积,输出两种卷积级联的结果8 z% }7 q: ^2 C2 M4 ^" x! ~
    减少输入到3×3卷积的特征图的通道数,减少参数量6 R$ z; P7 e: y
    不过早的使用pool,在网络结构后期再使用pool,这样能提高分类准确率+ p8 v6 W, l# Z
    ————————————————/ v; ~! i( k  }+ I0 j6 v; t- D5 X
    版权声明:本文为CSDN博主「Mr.小梅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。% S2 E; b/ T# e+ p5 j) B0 x
    原文链接:https://blog.csdn.net/qq_39707285/article/details/126498100. [- `1 N/ ?  g2 W3 ~2 W! K8 l

    9 F" {  I0 |' {
    0 D1 Q" Z( ]( z. I
    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-28 22:22 , Processed in 0.622288 second(s), 51 queries .

    回顶部