- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564668 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174623
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
$ O, [3 m$ I" j7 u; A. G6 o轻量级神经网络算法-SqueezeNet
2 y f+ \) l, O4 j- D z% G4. 轻量级神经网络算法目录! [* i5 G$ l7 J$ I) F/ m% y
轻量级神经网络算法# S2 q9 p o( g/ m2 F' a; C
4.1 各轻量级神经网络算法总结对比
8 x/ \# \7 A+ T: b4.2 SqueezeNet
! k3 @$ Y2 E0 l) C* |' h# X, r4.3 DenseNet( j$ a- d9 D1 q3 c
4.4 Xception) J A# Z4 [0 S/ G X4 ?( `
4.5 MobileNet v1
- E2 \: i5 ^ P p- S }4.6 IGCV q4 ~: Q' Z2 m: G
4.7 NASNet5 v- l/ p( H# W* ~. h5 p5 f* Q8 P
4.8 CondenseNet4 ?! t% P7 x$ ~2 m- K, \6 H
4.9 PNASNet
+ @% `$ V+ K* c& g( l4.10 SENet% s" y( ~, `3 |# H. d" }& u/ N
4.11 ShuffleNet v1
, Q6 O2 u* s! h* u# q4.12 MobileNet v2- \1 J' C7 C( I5 U+ O) |' F3 l" y
4.13 AmoebaNet
4 }1 \* t1 R9 P1 ]4.14 IGCV26 Q9 A, f. f& Q0 y: V- F8 W
4.15 IGCV34 _3 a' o6 R3 s7 [: s
4.16 ShuffleNet v2; v5 Q2 ]( ?' i1 h+ b& B
4.17 MnasNet
- F8 E* l' ]& W; `4.18 MobileNet v3; q% g/ R* q* d }3 Y
深度学习知识点总结
5 h8 O' e0 P, i6 E+ g; R4 M: `* i8 ? o% p
专栏链接:
4 n2 L1 k8 D1 K' c7 xhttps://blog.csdn.net/qq_39707285/article/details/124005405
# |8 }& Q5 o( I. C. P% C. Q; j本专栏主要总结深度学习中的知识点,从各大数据集比赛开始,介绍历年冠军算法;同时总结深度学习中重要的知识点,包括损失函数、优化器、各种经典算法、各种算法的优化策略Bag of Freebies (BoF)等。: [& P* x, c" C0 E/ L0 k
( W- K! C1 F! S" d3 ~$ Z6 }0 \本章目录2 N# [ O7 V% L V
4. 轻量级神经网络算法目录
V% P8 d7 o6 e: K# f, Y& @4.2 SqueezeNet& G1 t( R0 r0 t% I' ? n
4.2.1 问题分析1 a0 C; t: A$ [! q
4.2.2 SqueezeNet的三大策略
# `9 i. w0 A* V( v4.2.3 Fire模块! z' u/ U! J% }! G! X; z
4.2.4 SqueezeNet整理结构
) C: n( m& y/ m" x. d5 i4 j2 Y4.2.5 代码实现SqueezeNet
) y0 j) W. A- s' A4.2.6 其他实现细节
) {) @5 i3 @# C O+ R4.2.7 总结
! t3 R1 U, c/ d W2 Y- b4.2 SqueezeNet2 M" ]0 N! b) i1 b
4.2.1 问题分析
9 f' h2 H0 M" t; {最近在卷积神经网络上的研究主要关注提高准确率。在给定相应的准确率之后,通常有多个CNN结构可以达到该准确率要求。在同等准确率的情况下,较小的CNN结构至少有三个优点:: T' P3 {% e/ ~) r
, u! M0 Q, G: X在分布式训练期间,较小的CNN需要较少的跨服务器通信; A8 R2 v; F' b7 o& D, D6 `% C
在自动驾驶汽车等应用场景下,较小的CNN需要较少的带宽将新模型从云端导入- S0 C; X4 P! u0 Y
较小的CNN更适合部署在FPGA和其他内存有限的硬件上
- j( G( _6 G! k9 I) }+ ?为了达到所有这些优点,本文提出了较小的CNN结构,称之为SqueezeNet。SqueezeNet在ImageNet上实现了AlexNet同级别的准确率,但参数减少了50倍。另外使用模型压缩技术,能够将SqueezeNet压缩到小于0.5MB(比AlexNet小近510倍)。
* h3 a$ c/ N& p, M/ @ ~# p5 w
$ z5 u6 [; l; E; d4.2.2 SqueezeNet的三大策略
" Z, ]% [ Z. W9 ^: l2 }5 L策略1:用1x1卷积代替3x3卷积1 |" ]. u, K) O: ~8 j( p" ]5 f, i
1x1卷积核的参数比3x3少9倍,所以网络中部分卷积核改为使用为1x1卷积。+ f; l L7 h/ g( n7 n' t& B9 x
9 M2 t6 L/ Q! T4 }5 S+ [' @
策略2:减少输入到3*3卷积核的通道数量7 W z7 _0 A/ b# P
对于一个完全由3×3卷积核组成的卷积层来说,总参数量=输入通道数×卷积核数量×(3×3),所以仅仅替换3×3卷积核为1×1,还不能完全达到减少参数的目的,还需要减少输入到3×3卷积核的通道数。本文提出squeeze layer,来减少输入到3×3卷积核的通道数。# u( O3 B0 @7 n7 l& S. l0 q
; z: d" W9 I' e
策略3:在网络后期再进行下采样,使卷积层具有较大的激活图+ k9 l- d# P% O& 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中。8 K. i: P! ?: ?- L
) f, V- l- E. t8 t k: B* \# z+ A策略1和策略2在试图保持准确性的同时,明智地减少CNN中的参数数量,策略3是在有限的参数预算上最大化准确率。
5 l; A8 F0 m7 ~# d6 W& _. |! o2 m ?; u! F3 n
4.2.3 Fire模块
" n1 E0 u: K 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的想法。
- o) P; z1 N2 g9 _# \7 P' l8 `6 Y1 A
6 Y0 ?) N: V7 O. L: h4 b3 x
4.2.4 SqueezeNet整理结构3 |1 _5 O+ m+ q k8 X c, O! m# A
SqueezeNet整体网络结构图如下所示,其中maxpool(stride=2)分别设置在conv1/fire4/fire8/conv10之后,这些相对较晚的pool安排符合策略3的想法。+ E, d( d+ @* u
7 Y3 ^# a2 v# g
6 k- W( h3 E) ~5 f2 f! p; W
4.2.5 代码实现SqueezeNet
8 |, c1 \) i3 d$ vFire模块的代码如下:
! d2 w# n! m5 u: @8 `) `2 V o" Z! s- v& A( A5 f+ R {7 d. `
class Fire(nn.Module):
6 ^; z% v% M6 h: Z8 Q
, V8 Z; o- R, |& K def __init__(; e& V9 o6 Y6 ]+ j
self,+ `) \# Q7 a. B6 m$ L
inplanes: int,
% A* P7 ^3 D Y" @ squeeze_planes: int,5 D6 O2 E. E& c j
expand1x1_planes: int,8 B; }% U' \$ r0 R, F" k" ^
expand3x3_planes: int1 z- L0 h/ m' Q# F6 E$ e' V% P/ C4 d
) -> None:8 p0 n& c: [) _ n, p* s
super(Fire, self).__init__()" M y5 B6 Y! i( e: {
self.inplanes = inplanes
8 D0 a$ X1 T4 k/ B7 v self.squeeze = nn.Conv2d(inplanes, squeeze_planes, kernel_size=1)7 d; ^: P- D* Z8 y
self.squeeze_activation = nn.ReLU(inplace=True), e( x& |+ z( b5 G9 i, _5 m
self.expand1x1 = nn.Conv2d(squeeze_planes, expand1x1_planes,
4 \) X8 ]; _& w- V+ Y( d kernel_size=1)
* s1 o/ f) d+ U7 W# ]4 C self.expand1x1_activation = nn.ReLU(inplace=True)
) m0 b5 l% D+ @4 \& |% ? self.expand3x3 = nn.Conv2d(squeeze_planes, expand3x3_planes,
3 [% ^ A/ a5 r1 F( K* V( d2 O7 O4 J" X kernel_size=3, padding=1)
+ n$ G' O3 h6 P& H" U1 L self.expand3x3_activation = nn.ReLU(inplace=True)
* m% s7 q6 C4 v. J6 ^+ N0 c: T. c+ `: ^8 i g+ q* @6 j' |0 O; A
def forward(self, x: torch.Tensor) -> torch.Tensor:
% g2 d7 M7 f+ V x = self.squeeze_activation(self.squeeze(x))2 t: D S" W/ g; A$ }0 ^
return torch.cat([
) U& l; n- h" y t' c o% D* K self.expand1x1_activation(self.expand1x1(x)),
! F6 E+ _+ T, {- C5 r self.expand3x3_activation(self.expand3x3(x))
, w( E- Z8 v4 ^) H ], 1) e" E5 C: g" V. b# z3 x
4 D0 D+ h8 t7 p
11 d5 J4 Y' C- y) M K9 X" E) x% G
2% g; G5 ^! t/ t, v0 W2 q" Y
30 a1 q$ N& ?$ ~& R
4
% f* ^% s( t2 `' L7 y" e59 q4 h1 R5 d; i
6& X5 l' O5 M6 m$ E! a
7$ j0 ]3 q/ B7 `& q
8) @1 u; A# ]. r4 t1 q. o) z9 h
96 ^1 x, C8 o; l. E( d* G% o
10
2 l4 l8 _! R/ U+ q' k( E {. p11
" L4 P5 _8 v# Y% q, s( k! @. B" o+ @12
( [- f/ v0 D( `8 ~2 `7 h3 {9 _13& t$ I9 W# L* N, m& ~8 b
14* B) \8 y9 {# s
15
, ?( r/ R& ^! i, O" {/ A16
1 _% @5 A* B7 y" L17( ~ h# V1 {) P2 Y6 Q
18, N2 r- B" X) L/ `& Y. V
19
. `, F4 U+ _9 X: y2 S200 x5 u- N! {' O4 w( n
217 P7 P, @! Y+ W
22
0 k7 b1 h1 G3 j- l8 T23
1 X" |3 a2 }! `4 ? |24
6 d! ]/ G% m* Q25$ R9 S, ]2 l6 j
26
! q8 X1 _& G& l4 c! ^SqueezeNet主要有两个结构,SqueezeNet1_0和SqueezeNet1_1,SqueezeNet1_0即官方版本(图2左侧),SqueezeNet1_1与SqueezeNet1_0相比在没有减少准确率的情况下,节省近2.4倍的参数量和计算量。! q2 d; B4 c% m
; _8 U' n* B+ m7 j. _SqueezeNet1_0的网络结构如下:
6 V: U# E+ I! o+ v: L* g& G
$ ?! e; n1 e8 I& l' |self.features = nn.Sequential(& Q- Q; i- d6 ]3 i3 h0 j" U( P
nn.Conv2d(3, 96, kernel_size=7, stride=2),! C A2 t2 J- |" Z
nn.ReLU(inplace=True),8 B1 w6 z# E4 w% r0 r/ D) f
nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),1 W1 t6 s; v9 I) p1 ]+ \
Fire(96, 16, 64, 64),
; @7 D& f9 ]: U9 d, F Fire(128, 16, 64, 64),
, v: U1 C! H9 j* Q1 v' f' @8 k. Y Fire(128, 32, 128, 128)," }6 M' R0 U3 ?; }: t9 O6 a$ m
nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),4 J# d) B/ K$ W4 ^# f/ B. c9 s
Fire(256, 32, 128, 128),
0 C L- w, c, E6 e% X8 k* d/ o Fire(256, 48, 192, 192), }0 ] ^- u5 M/ H" a" t
Fire(384, 48, 192, 192),5 s! }! ?6 a s; t
Fire(384, 64, 256, 256),
2 D' C& h/ u2 V& p7 {. }; M nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
. K" @/ O) M7 L$ m& o Fire(512, 64, 256, 256)," ]- W& t3 l: _, m( ?! S" n
)
" i6 a) Z1 W- E* i1 G- f' Wfinal_conv = nn.Conv2d(512, self.num_classes, kernel_size=1)
. l8 a2 d. q. bself.classifier = nn.Sequential(
6 |- ^5 k: s/ i! ?: ]6 R+ x nn.Dropout(p=0.5),
( X3 ?9 l# V6 M/ p6 J9 b) s final_conv,
) O# J+ ^ d7 M V( A/ {# g nn.ReLU(inplace=True),
; J& d/ \" Y8 G/ d8 g nn.AdaptiveAvgPool2d((1, 1))
, @; n2 d' k6 [0 X6 a5 G)+ n7 r! h5 e- q6 @0 d9 m
# ~. k) O# @; ] D. `2 G5 f5 @: I8 p5 t x- m5 O! v# {1 @
1! `9 X6 L, s+ g+ S
29 @# W: e9 {) K" F+ g
3
$ @4 n4 S& B; H2 N; W; B7 V: {4) T# z3 k2 _/ O5 o/ F; `; k8 _, |
5
7 B3 d+ X0 X: R& |6* Q8 Q7 Y* a+ ?
7; {( ]/ @1 j: H8 Z1 q- h2 g9 M
83 {+ _: O& R$ Z$ s
93 |0 r/ }+ W! p( C/ S
10
1 l" V# p2 Y5 c! O; R5 I9 f11
+ g& C; S) P' X9 w5 X( V. b( T& D12
& m3 O. D$ t. u' P$ X8 w3 z- U139 L$ F5 |! Z7 M6 G
14
4 D- `, s' H, G2 p8 M157 r% U1 l: n5 @' v
16% }6 U, V$ w& i f& `0 J8 n$ O! O
17+ E# f. ]# d0 i6 T! h
18
9 k6 P' l) y+ t8 \6 d19' P( V. E% r6 b9 f; s D* h2 e
20% s& ^2 C0 E# k1 V) d$ H. w# u: m* U
21' z9 P Q k) q* ~; T$ l
22
2 `- ~' m _' u6 G235 i) o, `# L$ Z4 n9 ~ W3 O& l
SqueezeNet1_1的网络结构如下:1 \# m; p8 I, r
- _0 M4 ?" ^4 F5 `! c- b- iself.features = nn.Sequential(9 t' d% U4 X; y9 x2 ~- V# d
nn.Conv2d(3, 64, kernel_size=3, stride=2),2 Q- |% S. J* P) a, Y5 E$ u* H/ p
nn.ReLU(inplace=True),9 `5 Y3 |1 s `8 c9 e/ P+ o
nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),& g7 C, ?- N0 R' B7 ^! P8 l; ?
Fire(64, 16, 64, 64),
: G$ e- ~* @& C8 F: t. J3 b6 L, n f4 g Fire(128, 16, 64, 64),
& \ M3 S E0 N w nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
0 F# t9 u, M2 ]# ]1 l' ] Fire(128, 32, 128, 128),
1 H. E6 Z. t; R- g- J! \ Fire(256, 32, 128, 128),
' d2 e% B6 b" p nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
7 C( p# r& f5 ]6 Z4 h$ k* T' Y Fire(256, 48, 192, 192),
8 T6 m( P' G* ~6 Y/ r Fire(384, 48, 192, 192),8 V4 o. N: ^' b" U& R2 w; B# @5 X% ]3 E$ N
Fire(384, 64, 256, 256),
5 Q: q7 p9 _; \* y* F% H# T Fire(512, 64, 256, 256),
& U5 ^! s7 o8 [) h4 O# F. _; m)" G3 J1 r& p: ?6 L3 y& _
final_conv = nn.Conv2d(512, self.num_classes, kernel_size=1)
g# T8 k6 F8 i. C. i2 wself.classifier = nn.Sequential(, C# u+ r( S6 h$ U% @; |8 x
nn.Dropout(p=0.5),
3 a% A. {3 B+ G- e! L! J! ?& G final_conv,) ]% s- d2 v7 K. N& M
nn.ReLU(inplace=True),
c. {; D2 ^8 Q2 d& u; U nn.AdaptiveAvgPool2d((1, 1))/ [) C! ^8 I; L9 d, `! @4 Q+ ~
)
# P, r9 Z& ?& @" d- S5 {- R2 ?* G2 \, p) w1 |& a& d
1
6 z& Y! r* o, m, d, \2
, f- I- l g1 A" n, \6 b, a3% Z: b7 n. h, j; d
4
- V0 ~7 v) j0 p, b7 x5
) ~' h* {0 i( D# `* w6
! L1 M% _, @; h* w7 r75 d+ O5 z; K2 Z5 @$ x: Z5 }
86 p8 H3 g k/ C+ a( s8 I: G
9
2 c8 E8 N ?$ h$ K+ d6 n8 Q10/ G( o, E; G( k, q2 q
11
: I. @: q7 }( Y12
+ e0 T/ J- I" \) ~, H: h13
2 O/ f( C7 U* V( M7 f3 o14
' l9 d! o( U- c& G3 @" Q152 j; Q* J) ]5 T) C; Z \
16
/ B! d2 _/ t& Y9 k17
% Y6 \5 [- b w: j s$ T7 C18
$ B# E$ j: _& I19% j) v) A& B/ Z6 Z6 n, }
203 }1 S" y1 o+ q0 H7 ~
21) u+ w% i$ i0 Y% c& |, B
22) B& L2 _/ F* m3 B, N& b) d
SqueezeNet各层详细参数量及其输入输出如下表所示。
! w4 t4 X# u+ }
6 m- `/ h) `# h# o# _; ^" K; O, @. r6 j$ ]0 ~& U9 ~6 x
4.2.6 其他实现细节
& Q) j! }+ h5 m) W6 \6 o/ U4 e4 z1×1和3×3卷积的输出宽和高不同,所以3×3卷积设置1个为0的padding9 U/ l o' f9 g- K, i2 q
squeeze和expand层中使用ReLU
) v! M8 w8 Z6 i; J在fire9之后的layer中使用ratio为50%的Dropout
6 z+ S7 u" \1 k x' x3 H4 F+ D参考NiN算法想法,SqueezeNet中不含全连接层
. i2 o$ C1 D5 R, J& M4 G& [训练时,前期学习率设置为0.04,然后线性减少: r1 l) [2 F+ [: j
4.2.7 总结- U$ B2 L& r6 h- b1 g0 {% m6 y* X
本文最主要就是三点:& U2 l5 m5 t* y% Z
' D, |3 l5 r- _% F
用1×1卷积代替部分3×3卷积,输出两种卷积级联的结果5 v) ?" T$ _9 m! K0 O; L
减少输入到3×3卷积的特征图的通道数,减少参数量( C. W6 ?& L& x- S" r
不过早的使用pool,在网络结构后期再使用pool,这样能提高分类准确率! A, b; O9 H# W/ m( E& v; P/ e
————————————————
7 p8 c& v B* z, E Q& f+ G版权声明:本文为CSDN博主「Mr.小梅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。2 f' i: v- M4 S: ^% _
原文链接:https://blog.csdn.net/qq_39707285/article/details/1264981007 T @' x7 q5 O9 W8 [/ r
x1 L1 I* u1 D; \/ n, a; }# N: L( J4 |$ p* V6 i- s# c" D" Z% {' A) L
|
zan
|