- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 567232 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175392
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
" A& i0 G; U2 h+ H; j轻量级神经网络算法-SqueezeNet4 N: c+ G) ^4 N' K# c+ m0 W, }! y
4. 轻量级神经网络算法目录+ k# |, x& o$ D. Q
轻量级神经网络算法2 H, v: O9 j* q7 n% R! Y' {
4.1 各轻量级神经网络算法总结对比) w" L! ]9 ^' l$ {/ `% k
4.2 SqueezeNet
4 X! h( E) W9 B, d% \( Y4.3 DenseNet" C' g& w, M' f0 A, Q' t
4.4 Xception
& ~ s( V, K5 J0 v! h0 e+ s. T a& e4.5 MobileNet v1! Q+ Z2 T2 x, j3 K3 O( d
4.6 IGCV
* V' p) q6 [' k, `; @* P& n& i4.7 NASNet
* X$ n2 O# W( ^& o! I- X4.8 CondenseNet
9 l3 R' D; o* n9 h8 M4.9 PNASNet
& ]1 k. \7 h& P: |" _ ~$ R4.10 SENet
3 o* K3 s0 ^& e) {. B2 k4.11 ShuffleNet v1
9 [* U' S3 q) N1 r* V. p4.12 MobileNet v2: K' J- C( A, N
4.13 AmoebaNet
+ q9 g5 E- ^; \. [2 g2 @4.14 IGCV2/ W8 P; s2 j- p9 U, c6 d
4.15 IGCV3 u4 U- ?0 Z. o& w* T5 N* ~
4.16 ShuffleNet v2% }. @9 V* k, y) n% R" a
4.17 MnasNet
! R6 u/ ` ~/ P! A: p! G3 s( B& c4.18 MobileNet v3. O, Z2 A- W/ A) \7 F4 t
深度学习知识点总结: k: t6 d& u2 h5 `6 k- O
% Z, X- |; j ^8 I专栏链接:7 z l. j3 h! E7 o5 G- Z5 c5 m9 S
https://blog.csdn.net/qq_39707285/article/details/1240054054 O, l2 e8 ~8 I* R3 P' t
本专栏主要总结深度学习中的知识点,从各大数据集比赛开始,介绍历年冠军算法;同时总结深度学习中重要的知识点,包括损失函数、优化器、各种经典算法、各种算法的优化策略Bag of Freebies (BoF)等。) w3 w0 ^; R" q
0 s. {/ z$ C l( v# U4 J! V8 Y
本章目录* ~6 ?& V1 g8 y% w0 @
4. 轻量级神经网络算法目录
1 w# @* q$ ^$ x8 u' Z3 J. P6 p% H4.2 SqueezeNet. d0 h6 g5 @* A) t$ _1 E! Z7 e6 V
4.2.1 问题分析) E. d4 _) @3 T0 A( Z9 j
4.2.2 SqueezeNet的三大策略' W/ W# T$ W- W/ q2 U
4.2.3 Fire模块
6 p5 O4 M4 R; t9 Q+ ?2 @- d4.2.4 SqueezeNet整理结构/ _; |8 }6 l5 c) a# C% T! x
4.2.5 代码实现SqueezeNet
& i: A& z: U2 |; _( `6 o4.2.6 其他实现细节
3 h9 N% n, Y# V/ a- D! j4.2.7 总结
1 r( C- k& D6 E; d3 D4.2 SqueezeNet2 _$ s* j F7 |- g3 p% }0 a" k. g
4.2.1 问题分析
5 C: u; U% r4 j2 @6 c# x最近在卷积神经网络上的研究主要关注提高准确率。在给定相应的准确率之后,通常有多个CNN结构可以达到该准确率要求。在同等准确率的情况下,较小的CNN结构至少有三个优点:
0 d2 P4 {! M$ E ]4 `; x; i$ E, o- z9 p: ?, j
在分布式训练期间,较小的CNN需要较少的跨服务器通信
4 U3 {0 z, S, \1 o& w% O7 ]" Y7 I在自动驾驶汽车等应用场景下,较小的CNN需要较少的带宽将新模型从云端导入% U- }2 ?/ h& ?% w
较小的CNN更适合部署在FPGA和其他内存有限的硬件上
! d4 S; H. i1 f' z为了达到所有这些优点,本文提出了较小的CNN结构,称之为SqueezeNet。SqueezeNet在ImageNet上实现了AlexNet同级别的准确率,但参数减少了50倍。另外使用模型压缩技术,能够将SqueezeNet压缩到小于0.5MB(比AlexNet小近510倍)。
* X3 D y( c+ F4 r; o
5 k l" K4 U- |4 l- B/ M, s0 J# U4.2.2 SqueezeNet的三大策略. r' L6 [8 d: ]
策略1:用1x1卷积代替3x3卷积
6 W q/ \/ O( b4 Y% v7 P( y: @7 j1x1卷积核的参数比3x3少9倍,所以网络中部分卷积核改为使用为1x1卷积。
$ Q+ h0 r) Q: K
& r, n1 |( @" e8 S策略2:减少输入到3*3卷积核的通道数量1 m5 x) [, }2 Z8 C Y% ?( I
对于一个完全由3×3卷积核组成的卷积层来说,总参数量=输入通道数×卷积核数量×(3×3),所以仅仅替换3×3卷积核为1×1,还不能完全达到减少参数的目的,还需要减少输入到3×3卷积核的通道数。本文提出squeeze layer,来减少输入到3×3卷积核的通道数。 X5 ^8 R/ h3 W- J
% J' y* i! c8 H6 h
策略3:在网络后期再进行下采样,使卷积层具有较大的激活图
+ a' {+ [" l! D) T+ j. a3 e) l这里的激活图(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中。
, ?( t# J- Z% `& k+ G# Z
" o( y0 ]! V# p& t* n) z策略1和策略2在试图保持准确性的同时,明智地减少CNN中的参数数量,策略3是在有限的参数预算上最大化准确率。3 ?6 X5 S7 ^5 c' B& \% s8 l
* [" I/ j0 [5 W5 u5 f$ v4.2.3 Fire模块
# [* i% L/ Q' S( d: N为实现这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的想法。$ G9 d( S+ R7 K0 C8 ^
/ V" A% W) r: c; I+ J. x1 o
h4 {; K2 J; o# |# T9 i
4.2.4 SqueezeNet整理结构
# u' D9 b8 K8 b" {" C3 l A1 I3 K( sSqueezeNet整体网络结构图如下所示,其中maxpool(stride=2)分别设置在conv1/fire4/fire8/conv10之后,这些相对较晚的pool安排符合策略3的想法。0 M3 Y: T0 z# e( e" \% y2 Y# f. v
% K$ L9 R8 B* d2 \4 Q& @
, G+ ]' s, d. l. m4.2.5 代码实现SqueezeNet) Y6 T6 P4 |: [4 V1 H; u
Fire模块的代码如下:
. J4 u! `+ ^# a8 U9 d
0 I. q3 r/ w/ ^2 g x" L' W( }, {class Fire(nn.Module):, _% h3 }7 _: Y+ y
2 Z4 {- }& N- W def __init__(
5 d6 w6 h$ b; n self,
# E( p7 J" g. @9 ?3 n inplanes: int,$ e' H* F7 i) l0 g) y1 L9 D9 y" P
squeeze_planes: int,, y3 {7 M7 ^8 @ H6 t( S5 ^, v4 X
expand1x1_planes: int,
( `. s* _3 q8 m; t( [: {3 l! { U expand3x3_planes: int' A2 h6 ~2 P3 f9 d- v
) -> None:
% v" j9 ^/ _: f0 y; [' W4 y3 g super(Fire, self).__init__()' A5 J9 {$ x) y+ L0 d- y+ F, A
self.inplanes = inplanes" [$ e, I* ~& F* j8 K
self.squeeze = nn.Conv2d(inplanes, squeeze_planes, kernel_size=1)7 y# }$ X; U, W: |2 O0 e- ]
self.squeeze_activation = nn.ReLU(inplace=True)
9 ?# T* h. J6 m+ V2 g self.expand1x1 = nn.Conv2d(squeeze_planes, expand1x1_planes,! V/ @* n! d1 t$ n2 U8 j
kernel_size=1)
- i% u# z. p: s; i" z! u self.expand1x1_activation = nn.ReLU(inplace=True): c' @3 |9 n: \4 ^9 K0 |
self.expand3x3 = nn.Conv2d(squeeze_planes, expand3x3_planes,% l2 d5 t/ G8 J" T% L$ }) y
kernel_size=3, padding=1)
, C8 B, P4 x1 J9 [, _0 u* E self.expand3x3_activation = nn.ReLU(inplace=True)% r4 I2 {$ w) Q7 e$ X
' W6 d/ v+ e, p4 T- }3 U def forward(self, x: torch.Tensor) -> torch.Tensor:6 A/ o1 W/ b& R9 \& g" a
x = self.squeeze_activation(self.squeeze(x))
- K/ l- f/ r" d4 [# b! `6 Z return torch.cat([3 }; K. p: g' J5 d E
self.expand1x1_activation(self.expand1x1(x)),
* k9 N( I9 g: O self.expand3x3_activation(self.expand3x3(x))6 \! K2 A3 P" P& w7 p7 G5 Z& z
], 1)
9 D5 }' k1 M6 |$ T2 X/ q, M1 v- ?
- z" O- o; L" V* w0 c, Z; Y13 `& o" }$ Y7 H7 v4 ]0 } P
2' q3 }2 I0 { ?* x8 |7 q
3" R1 X2 L6 L+ [" P- [
4+ Y& o' |2 ~6 U7 h3 U2 e* ?' W
5) Q U( V; v7 |# g' \
67 O1 c0 O' {1 T5 w3 V( P
7
: O/ d/ N, E# ]3 Z# ]/ n8, Y8 m( c) w( f+ s
9/ ]; y% N6 I' R6 k, V
10
/ S4 w' d3 x& i+ @* R2 Y11
! D8 f& c( s5 u12- j) p, U5 y& P( o" K; ?% k$ `
13
7 F5 }# o5 i+ s" w C$ `0 [14( U$ ^0 ^3 W- S( h' m
15
8 d# S: y( x5 A \/ G163 T3 I7 S0 I1 f% W ?% o5 V
17
* \' n. T, R0 U18
) h9 p, z2 ?! { O6 S! l" W A19
. M4 G! P) a+ ~! m: z0 B20
8 }, ~: |9 J% z2 p5 W: `6 C21
" J( w1 S7 H: t: r, p8 p' @22
% B! z0 Y6 A2 r4 K23+ `5 G% u+ m2 \$ s
24+ v8 z! i1 `" V2 b. g5 U) c# j( @
25( m8 S6 \# S' N7 B
26
" u, w6 Z# P( K9 h; B# eSqueezeNet主要有两个结构,SqueezeNet1_0和SqueezeNet1_1,SqueezeNet1_0即官方版本(图2左侧),SqueezeNet1_1与SqueezeNet1_0相比在没有减少准确率的情况下,节省近2.4倍的参数量和计算量。) F3 ^# o2 U+ g1 F" N
( e, j3 b6 _( Y. [, n9 _' tSqueezeNet1_0的网络结构如下:: O0 H5 }% x: x
( q- s. W7 `3 a( I: u8 y8 [! \0 m6 t/ G
self.features = nn.Sequential(7 f7 n5 c- p, t4 e5 O
nn.Conv2d(3, 96, kernel_size=7, stride=2),
6 N4 k- ?6 p% f: x nn.ReLU(inplace=True),
3 [4 J' H( V) ?( @( a( M8 u, C nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),, ` F* @8 P' K9 t
Fire(96, 16, 64, 64),0 t1 g7 K# d% K" C4 @. b
Fire(128, 16, 64, 64),( M* A7 D* B' ]3 ~2 \, j, v
Fire(128, 32, 128, 128),' Y" T: q+ K# |5 x9 W
nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
, }% f" W% @6 U# ]5 O& o/ K Fire(256, 32, 128, 128),
2 O+ e+ x& X$ W* {) s2 @& n$ d3 G Fire(256, 48, 192, 192),$ \ }1 ~2 ?7 v4 Z/ M
Fire(384, 48, 192, 192),. X4 i7 n) J: F4 U4 n
Fire(384, 64, 256, 256),3 X2 H$ C7 F8 D! N$ d
nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
4 `) l5 ]3 e- c7 j9 u7 N o Fire(512, 64, 256, 256),
- P# f/ l4 U# V9 j7 G+ y)6 f* C5 V8 o' z9 r( G5 M
final_conv = nn.Conv2d(512, self.num_classes, kernel_size=1); ]( d- S! R8 k; P+ G) U
self.classifier = nn.Sequential(
) t, m$ n* F. D* j" P" P8 c nn.Dropout(p=0.5),
8 U; @3 t ?2 r. k5 Z$ D' [- w5 c final_conv,
* Q( s0 E$ `3 B( X nn.ReLU(inplace=True),7 }1 c* J+ S8 S3 @7 [3 h9 h4 [! n& n
nn.AdaptiveAvgPool2d((1, 1))+ Q% ?- H/ }$ o0 c7 q0 X
)
7 ]. i; y5 U8 A6 x% W" y$ W) K1 M
/ X: G4 p+ p7 \- G! ?! W( \% Z
1+ @2 w9 |% y# i4 j3 x+ D
2
9 e! ]# w3 U) h( b$ E3
2 @( @9 Q9 \5 B o4
5 Q6 X7 g/ q" `# W" J( {5" N- [! Q7 Z, \3 s' d
6# ~: a8 H' z- {7 H; b
70 X$ p# X2 V& o1 C& Z9 h( S
88 ?# {/ _8 X# t9 _' O0 D
9
8 _2 K" M, t' I* G0 ], o7 f10
3 T: U7 n7 Z. y2 r11
) U, ]/ e0 f# W% p$ a" x12
) I2 r9 H; v9 @7 L& w13
3 @4 v# O# i: q! l8 B# u1 @14
4 p" e0 L2 I+ t; W/ B15. c* _/ [: Y. B* ~! l, ]3 }
16
9 Z4 l7 X, O3 A' y7 l3 L17* u/ @6 u" P) ^5 } Z; Y
18
0 [/ q: l* ^* V- ?) j8 [: c19
! M: `+ D9 D4 l20+ \ x) M5 y7 q$ Q- h
21
/ [5 l, ^/ _, t: t7 p. m; K22( [- t( @; a0 y9 Z
237 H* U& D* Q6 s; g2 d
SqueezeNet1_1的网络结构如下:: e1 }7 G! z9 B/ t7 D
2 U, A1 }# {% {; h/ Y& t( ?
self.features = nn.Sequential(: h2 q8 k. S9 G' q5 @+ E
nn.Conv2d(3, 64, kernel_size=3, stride=2),3 F& x. _6 |7 t0 Z( e& O: L% E- c
nn.ReLU(inplace=True),6 R& S; _; B6 a
nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
; `$ \- V7 n+ z Fire(64, 16, 64, 64),5 r3 m# I$ M) H4 i) C! q
Fire(128, 16, 64, 64),
! @: @9 p# ?3 R1 v @ nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
4 @( S0 B! v$ X4 w9 L# c Fire(128, 32, 128, 128),
' F& G3 ]4 Q0 I" n Fire(256, 32, 128, 128),; Q0 ^, H& |$ H! |9 W
nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
5 Z7 L* j( U' a+ M Fire(256, 48, 192, 192),! E1 h- ?# d) U9 b" ?
Fire(384, 48, 192, 192),
' N. L0 b, ~$ O c0 y" ? Fire(384, 64, 256, 256),
& K; L0 I) x; s6 H Fire(512, 64, 256, 256),' v& j8 y3 _. V4 o' N: Z8 a
)8 W2 O! J" m% Y0 W6 W, B
final_conv = nn.Conv2d(512, self.num_classes, kernel_size=1)0 z7 r* ]( |. d$ E4 V9 g3 J
self.classifier = nn.Sequential(4 C8 }; }0 Z i$ n: ?
nn.Dropout(p=0.5),
+ `3 x; f |7 _1 r1 E, N final_conv,; ]- _! u! C6 @5 X- Z
nn.ReLU(inplace=True),% j' v* I( F g1 h% q: I; S# X0 E
nn.AdaptiveAvgPool2d((1, 1))
7 T" e f; m2 V), m4 w; I- P* U8 \/ D; H; F1 `
2 g9 p% X3 }' e$ `% L( v18 }. P# b1 m3 ]6 x2 q9 I' m$ Q
2& c# ?$ I& U' B; }: j7 j$ `
3
. w3 B/ b$ t# W( Y+ X4
! N6 j K0 {; n7 T5 d' ]8 d5& D; m& M( [! ?; |
6# u; k( T U5 q$ z# G
71 a7 d4 Y) n6 E/ n; e8 V
8" Z- O, s, R" d/ b' x
9
; j, a {4 C4 q! r0 r10
. A7 k7 J. J2 X! s2 L113 u1 P0 t, o$ o) Z3 v
12
+ ?# p+ G/ @7 ]9 l+ Y3 }135 I8 h, g! o3 L1 _2 b! B6 W
14
8 N: {% L/ j+ q. ^/ F+ P15 j) p$ C' u8 [
160 P% y5 R4 n% a8 Q s$ K
17; P' h* w; Y2 x8 \& H: J
18
4 g; ]/ j$ H. ~190 j, t0 Y$ j) [: x: y4 h! \5 N# U
204 a$ y: ?$ c) J) J8 y
21
$ S* g7 b. H- ~- G22
^( K4 H0 {* dSqueezeNet各层详细参数量及其输入输出如下表所示。
4 F N6 n4 s" a; E. m
E- u" M. r7 k8 Q( H8 p/ w: f: p4 s/ |; j2 ] Y& e
4.2.6 其他实现细节# o1 e, l; E& I' w7 e
1×1和3×3卷积的输出宽和高不同,所以3×3卷积设置1个为0的padding* g, ] g+ q3 v3 w t4 ^; K/ D
squeeze和expand层中使用ReLU
( z" m- B- l" ^2 J) E) c+ o在fire9之后的layer中使用ratio为50%的Dropout& r- A+ \: n3 h; R: O
参考NiN算法想法,SqueezeNet中不含全连接层0 L/ a, u5 ~1 m) G: e6 R) y3 U2 Z
训练时,前期学习率设置为0.04,然后线性减少
8 {- p G* V6 ?4.2.7 总结 o Q* n+ H, M! e$ j
本文最主要就是三点:
0 m7 Y3 ]* F# F; w9 W& }4 I: H! o4 \' D- a7 x5 V4 [! P
用1×1卷积代替部分3×3卷积,输出两种卷积级联的结果
- s7 c# n. s; v& V7 c减少输入到3×3卷积的特征图的通道数,减少参数量
* |' v3 N0 U3 }+ X& G; z不过早的使用pool,在网络结构后期再使用pool,这样能提高分类准确率
! G# Q* v- R! {! T- m- s( q————————————————
$ J& ` x1 b# ?$ E' N# k* v版权声明:本文为CSDN博主「Mr.小梅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
/ N# `% H* Q5 V1 {0 [3 v% w, E原文链接:https://blog.csdn.net/qq_39707285/article/details/126498100
, \% t" a" Z3 C4 B* e9 t- q, `+ O$ ~* d* k8 m% F! A7 V: U
+ s* }, I* y/ _5 D9 b) V8 Y
|
zan
|