- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565645 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174916
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
b7 f- x. [* r轻量级神经网络算法-SqueezeNet; u0 r, w- M0 {) B! v% x
4. 轻量级神经网络算法目录
3 t$ e S3 r) O* b, V9 e( N轻量级神经网络算法
2 e6 X% S; |% w6 s! u% q% G2 a4.1 各轻量级神经网络算法总结对比
6 O% n8 V- |9 M$ b4.2 SqueezeNet# z0 w/ F* r* v/ c
4.3 DenseNet2 B- R1 n. p) k
4.4 Xception
7 g! t; ~& m( M1 ^4.5 MobileNet v1
( O# `/ A! g. G4.6 IGCV
a& O \5 e [4.7 NASNet
$ j( \' b& X; [( ]( u) s! X4.8 CondenseNet! {: O7 L" p2 ~7 f' ~" |. R9 X Y# I
4.9 PNASNet
1 h0 f [$ p0 }; p4 P4.10 SENet5 C& k) x) D- M$ k' R- ?3 D8 V
4.11 ShuffleNet v1' W' d0 h7 Z$ a: }" l( b: R
4.12 MobileNet v2
$ D/ F* ?$ G8 c1 X4.13 AmoebaNet
. l4 u; G) Y7 a& G, K {! x4.14 IGCV2/ Z' U2 S1 ?5 g' k
4.15 IGCV38 |6 R7 b! e8 A
4.16 ShuffleNet v24 [8 e4 o% {- {8 Y" P& S) o5 \/ j
4.17 MnasNet
2 G/ @- Q' u2 }% r" n) R! B: u+ ~4.18 MobileNet v3
" T# e) A% i, M: [3 q) C. y3 @4 ]深度学习知识点总结* j" Y, ?7 V# P, K$ W6 L Q6 s9 z
3 g8 Z% ~8 F, m9 O专栏链接:# I: o# Q* T" c' T1 X$ M6 |
https://blog.csdn.net/qq_39707285/article/details/1240054052 a* s5 ?* b/ z, N% {2 v6 P) @4 }# Q6 r
本专栏主要总结深度学习中的知识点,从各大数据集比赛开始,介绍历年冠军算法;同时总结深度学习中重要的知识点,包括损失函数、优化器、各种经典算法、各种算法的优化策略Bag of Freebies (BoF)等。% f, S$ l# _5 n% l2 N7 h
/ v! Z( g) z* b2 I* ]7 V1 T3 Z. Y* O3 Q1 J
本章目录3 |& q: d0 q7 Y- Y# F
4. 轻量级神经网络算法目录4 M! y& T0 l1 n2 \
4.2 SqueezeNet0 V; W7 ?6 D" O: V
4.2.1 问题分析
& E6 |/ |3 T# z: @% S4.2.2 SqueezeNet的三大策略" y& g3 J) v* U# E! L; \5 ~0 r8 }# L, ^
4.2.3 Fire模块
3 G: R# V8 ?/ d5 U7 b- F# v4.2.4 SqueezeNet整理结构
7 R2 s1 Q6 S' q5 L4.2.5 代码实现SqueezeNet1 ?1 A7 U/ _% \7 O% W: v$ I
4.2.6 其他实现细节
7 f \" L. z) s0 U3 e+ n4.2.7 总结 D8 [0 L& x8 H% _
4.2 SqueezeNet* [) `1 Y6 b8 E. Q0 F
4.2.1 问题分析$ n; z# Y, y# e7 W
最近在卷积神经网络上的研究主要关注提高准确率。在给定相应的准确率之后,通常有多个CNN结构可以达到该准确率要求。在同等准确率的情况下,较小的CNN结构至少有三个优点:, E# b4 b1 z6 f3 s* Y3 W
9 \" b$ V- t2 R; w! Q. E在分布式训练期间,较小的CNN需要较少的跨服务器通信; Z% x* L2 s2 g/ N' U! C% L
在自动驾驶汽车等应用场景下,较小的CNN需要较少的带宽将新模型从云端导入
s- c1 N9 u0 i, l, _较小的CNN更适合部署在FPGA和其他内存有限的硬件上% Q+ P- Z$ X' N1 n) R6 C
为了达到所有这些优点,本文提出了较小的CNN结构,称之为SqueezeNet。SqueezeNet在ImageNet上实现了AlexNet同级别的准确率,但参数减少了50倍。另外使用模型压缩技术,能够将SqueezeNet压缩到小于0.5MB(比AlexNet小近510倍)。" a& K+ ~* P. _1 ?! M) S3 Q- r8 S
w- }6 _4 R: S4 W% d; I1 \4.2.2 SqueezeNet的三大策略
9 e! ]$ k8 |4 d2 @/ j策略1:用1x1卷积代替3x3卷积" S6 U+ w" M* J7 N
1x1卷积核的参数比3x3少9倍,所以网络中部分卷积核改为使用为1x1卷积。
0 U5 T3 q* Z8 e& Y) C4 G, j
x: R/ l* w+ V& D; u& ~# ?( J! Z策略2:减少输入到3*3卷积核的通道数量
$ ? x7 H( `6 s9 ^对于一个完全由3×3卷积核组成的卷积层来说,总参数量=输入通道数×卷积核数量×(3×3),所以仅仅替换3×3卷积核为1×1,还不能完全达到减少参数的目的,还需要减少输入到3×3卷积核的通道数。本文提出squeeze layer,来减少输入到3×3卷积核的通道数。, c+ c' j, m) A+ u3 g
% R9 N r) g7 l% K' j- S
策略3:在网络后期再进行下采样,使卷积层具有较大的激活图, N; t M3 U: R; z: s: a( m/ E
这里的激活图(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中。
. g; |9 P6 o5 g+ p! T- c) V. T
* L$ M5 U4 c% R) B0 v& f4 G+ M策略1和策略2在试图保持准确性的同时,明智地减少CNN中的参数数量,策略3是在有限的参数预算上最大化准确率。
, L- y, H4 ?$ v& c! K! V* t3 q$ x) S& p$ K( C
4.2.3 Fire模块% e* K$ _% U T" X
为实现这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的想法。
! X$ L3 c( [* v2 Z
8 u ~& c/ ]0 t/ x5 y" i
4 c) _) h; z2 I4 i0 w4.2.4 SqueezeNet整理结构% b1 m2 R7 t4 Z' [& Y
SqueezeNet整体网络结构图如下所示,其中maxpool(stride=2)分别设置在conv1/fire4/fire8/conv10之后,这些相对较晚的pool安排符合策略3的想法。
" Z- u1 E. X1 h1 r& A1 F- e. ?7 k' h F9 X' B! A
9 `$ G) U$ t7 q1 ~
4.2.5 代码实现SqueezeNet
: |0 T: N, ^# XFire模块的代码如下:
, a- r* ?1 @. s! k" L* I0 @
( e3 C4 n% r" B& ]* v% d6 Z+ dclass Fire(nn.Module):
/ N5 @( o& k5 J6 Z+ f( T- s K# k
def __init__(
, N* a3 g/ s! g% n& v& m, g% {7 G self,
+ ?0 ^2 _6 Z; F0 A inplanes: int,% D8 ?9 B$ O4 W+ |; p& l- {
squeeze_planes: int,
. K" t5 h7 I: P& X( N3 k% b* F expand1x1_planes: int,9 e; \2 E$ l7 x& |9 |4 b, }
expand3x3_planes: int
- u$ q: q/ E8 i( r0 E7 b! c$ z i ) -> None: I/ ~( C5 B/ E: O
super(Fire, self).__init__()
! U1 C/ Z0 @; Y5 c) w- d5 b9 t self.inplanes = inplanes
3 m% e, \2 u* J/ P self.squeeze = nn.Conv2d(inplanes, squeeze_planes, kernel_size=1)! V( x7 _# Z! J. j) I9 \$ y1 ?$ m
self.squeeze_activation = nn.ReLU(inplace=True)
# z3 q3 E- ?" V5 `6 W; S self.expand1x1 = nn.Conv2d(squeeze_planes, expand1x1_planes,% b( ^$ ]- X- m
kernel_size=1)
+ S z; w: d/ M9 R0 V0 b self.expand1x1_activation = nn.ReLU(inplace=True)2 p( j7 B; { g& V
self.expand3x3 = nn.Conv2d(squeeze_planes, expand3x3_planes,
$ |% v3 O7 [8 d& q kernel_size=3, padding=1)
8 E) ^7 b6 R2 d4 S self.expand3x3_activation = nn.ReLU(inplace=True)
& U9 C: g% g1 Z1 y# L* O; m2 u- n W/ v0 _ F1 [( n; l7 x' ]: T6 B
def forward(self, x: torch.Tensor) -> torch.Tensor:
( g( F$ v. Y, e) M# ?9 z x = self.squeeze_activation(self.squeeze(x))
% H" O- A+ B' J3 m5 y return torch.cat([
# j: ]. I9 e4 I5 H. n self.expand1x1_activation(self.expand1x1(x)),/ J/ j( m2 a* h8 ^0 E9 e
self.expand3x3_activation(self.expand3x3(x))) |) z4 {1 P+ I; P
], 1)0 O2 b$ ~5 F& g7 _
0 b/ g! B# B, L, s& ?3 Y6 }6 N
1# Z l6 a4 g2 O" n6 K; v
20 u( I+ I* F1 l
3
/ N$ {% l4 a+ V- y( ^. t x4; V% y( f0 x+ L; V: M& F7 Q4 z+ G
53 V7 B; u+ z8 N& J# @9 @5 Z/ C
6: g. J3 Y+ w. n7 ^
7
% k9 E) P) x( Q! }) `* K% b8; Y& H6 p8 @ i3 @8 ]
9" }2 Z7 U0 C# `- g9 _) E
10# Z/ s1 l" S/ P
11
( i- H+ E6 A; `12
; x. z2 y4 }$ k/ O) Q( |8 i13
7 x$ M; J: {5 P' P2 i14
. U: A; ~0 x0 h155 F5 @4 T" f5 o6 l1 Q
16
* ~1 B1 B2 x" V7 x+ T175 {1 H, [! T+ H( ^! {, y( W8 ^
18; I% n) h) ~, V# I8 J f& P* B
19$ t( p) n. x5 T' ?
20
8 K) [! G' A, R$ b$ i6 Y21. ^& E6 ^4 s" v* i
22# v( _8 R# _8 ]! }, _
23
# G3 c- {9 Y" \2 D& V: ~- f24
/ V! T! x/ `" A1 H' b25
7 u! u! d7 I7 ~26
* q0 Y+ ?. e2 a+ H/ D- e9 ~SqueezeNet主要有两个结构,SqueezeNet1_0和SqueezeNet1_1,SqueezeNet1_0即官方版本(图2左侧),SqueezeNet1_1与SqueezeNet1_0相比在没有减少准确率的情况下,节省近2.4倍的参数量和计算量。
% Q; F; e$ h0 [ `8 ?& ^. g: D% M
- Q$ ?8 H+ t4 i" V% V7 d' n6 YSqueezeNet1_0的网络结构如下:
$ S- u6 t0 J4 _8 C6 e& X# U8 @- _& w7 A* `: T2 S- O
self.features = nn.Sequential(
c" J2 {* Y3 p! h" I" B9 ~ nn.Conv2d(3, 96, kernel_size=7, stride=2),. j7 L. d$ \8 ?6 F5 W: a
nn.ReLU(inplace=True),
) [% J& M8 y4 {# x q# d nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),. E* R& { l+ S9 r) b( s/ x
Fire(96, 16, 64, 64),, q+ x( [ ?: K- B. R6 |$ j: \
Fire(128, 16, 64, 64)," P& ]' u8 J- K& K
Fire(128, 32, 128, 128),
7 ^, @. |8 a" h; U: B2 m: ] nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
. J( O$ T) V1 i Fire(256, 32, 128, 128),' A4 |. Y( ^( v! i5 q0 s
Fire(256, 48, 192, 192),
. C* V0 S1 r! s& q: ]2 Q" J6 { Fire(384, 48, 192, 192),
1 [3 P! |, G" w9 w" ^ Fire(384, 64, 256, 256),9 h$ w! t3 X3 f- H* ~
nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),& g( T4 [% t. O, c. L; e% U
Fire(512, 64, 256, 256),7 X8 D7 H6 q5 k7 ~2 o( `
)6 b# P+ F9 f. P" K' w
final_conv = nn.Conv2d(512, self.num_classes, kernel_size=1)
0 n1 x. q! x9 }! t* b$ dself.classifier = nn.Sequential(
# K% p0 e! E2 D. c; e3 b0 u nn.Dropout(p=0.5),
' k1 m8 t; |2 z% F final_conv,
7 w/ P, p/ e( s% ?( P nn.ReLU(inplace=True),/ ~4 }6 T' ]' |
nn.AdaptiveAvgPool2d((1, 1))5 g. X/ O- N+ C
)
, P$ H* P) V/ {. R8 W) B H
: O" d1 S$ N2 p4 W" L& r1 i; P) a
D' \9 O+ \; e8 y+ B1
+ ?, x, e: H5 x8 K2
' g7 N# p: \. x* |( J37 l5 F6 Y# X, [$ n7 B; I
4, U2 |' ^- l4 c }; Y" ?! {# S
58 d9 q' U0 i8 G* w( Q5 b
6* U3 ?: ?, M4 D3 X8 i, m( P
7* k9 v$ ?% A2 u$ m" y6 T
86 k4 p K S, u
9
0 j6 w I( U; I2 q8 O. Z$ l( d10
" n7 C ]1 N2 v3 z- w! U11
- n- H( |1 w1 C- R8 Q6 ]$ v12( A1 S% D6 i) p! E: _4 G V
13% g" z) b: K" r) X% x4 w
14
) U, K0 z' ^0 j15, e+ [- @/ A) n! [) [% w
16
0 F D/ l* c0 x" h7 ?. ~; V17- r2 N. s. i- r1 t4 P4 b) P
18
& [' y7 _0 m% T' q19
- @8 Q) F6 u v20
3 t. r5 M" l2 H7 d/ }5 i21
V {7 A: j% I" K7 U22& h- ~: [, w4 J$ v4 ]8 \! `
23) ^ v9 A) U2 A2 e2 B- A3 Y
SqueezeNet1_1的网络结构如下:* L& ^; t4 B) i+ ~! u' k/ E9 B
/ T( n* |0 c' Vself.features = nn.Sequential(
9 h0 F7 @: v; F; X. e, U nn.Conv2d(3, 64, kernel_size=3, stride=2),
3 n* k1 c1 |$ A nn.ReLU(inplace=True),7 Q$ t5 h: c9 t$ R& J* [
nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),. o) b( z, D5 W# ^: J0 p
Fire(64, 16, 64, 64)," r2 X& b. \8 a: C* R( q
Fire(128, 16, 64, 64),
* C. |+ o: m( F, a nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),* u: b8 V& X% U2 v4 b
Fire(128, 32, 128, 128),+ @, j Z$ z# j2 I7 T& @, [
Fire(256, 32, 128, 128),( h6 m- B' C. \- I* W
nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),0 i- n, w) n% j+ M0 {+ q# v% N
Fire(256, 48, 192, 192),
7 s1 h, O# T E" |4 l Fire(384, 48, 192, 192),4 D- k: k& R) w, K1 s7 V
Fire(384, 64, 256, 256),8 ]" u* k5 j3 j5 i5 s# u- I6 m. y$ F I0 Y
Fire(512, 64, 256, 256),9 L0 M; ^3 ?, }
)
( P( U1 t5 K, T7 {6 Gfinal_conv = nn.Conv2d(512, self.num_classes, kernel_size=1)0 g; T3 g8 Q S6 x$ R$ f: _
self.classifier = nn.Sequential(
! Y! n; z: a5 [. P. T* q nn.Dropout(p=0.5),
& h1 }; |; |( @- K; f7 @! S final_conv,. q& i0 v$ e( U5 }5 x
nn.ReLU(inplace=True),
. }7 O0 }* b: i" z nn.AdaptiveAvgPool2d((1, 1))
R( C' B3 N* U$ I ]; \; r)$ Z: t! S9 Q, A4 ?
$ E8 L9 t! \$ b: ^* R. L9 j" j8 f
1( G; o+ K6 U2 N* |9 Q( J) @
2
9 U: a) Y, X# Q0 B+ M; i9 C3
: D9 A1 Y6 h1 e" V3 ~ Q4
* J4 H# {% e: J& z5
/ A% `2 A" { r0 X64 C4 J9 U2 [8 L6 f
71 ~0 z* h8 X% V5 f0 O1 w
8- n* g& H0 f7 K
9
; q! F, i$ N( j& y10, p; Z, g$ W% |: a
11
( }" V9 j5 u- k2 Z12) C8 i. L1 B% x* o0 W
134 M6 e6 D1 q9 L" d% }! A- W* }3 W
14
. h4 T r5 | B8 K/ r15# [' e* x, ] C
16
/ F' |, \7 U/ Q- d1 K! ?177 f; p+ _ [5 k% B8 D; N
18- J, G0 I& b/ P& ~. T7 L- H& K3 X
198 B5 O% p& H# ^2 [. H3 a
20
% T3 V0 N& _, j o e21
# j5 h4 r1 ]; q1 |22
0 @1 \7 ]3 p8 j1 E/ y2 O4 c3 ~SqueezeNet各层详细参数量及其输入输出如下表所示。, E2 Q" H) z9 i- G; `" d) U
7 j! _& f+ b$ B5 V2 I
9 Y* C9 Y; |1 m3 ?" w: t5 ~: _. s
4.2.6 其他实现细节4 n5 L, h+ g* Y& @5 O, k ^
1×1和3×3卷积的输出宽和高不同,所以3×3卷积设置1个为0的padding) P9 r7 K% o! o- i& b, `
squeeze和expand层中使用ReLU2 K9 Z) T) t1 s
在fire9之后的layer中使用ratio为50%的Dropout# d5 o5 X. W+ {8 i4 |8 h9 R6 r; Z" Z
参考NiN算法想法,SqueezeNet中不含全连接层
& s; f" F2 [9 N) F' r1 T0 t训练时,前期学习率设置为0.04,然后线性减少
& E5 C" m2 l- a5 ^7 g; p; [4.2.7 总结
" S! ~& A7 O9 k* S; ?( b& c& Q: u c: g本文最主要就是三点:6 {5 f$ `- b \" N; @
# u' K* i4 p2 ~4 F6 |用1×1卷积代替部分3×3卷积,输出两种卷积级联的结果
3 ?1 V7 Q% x% A7 s- d" t# L4 i减少输入到3×3卷积的特征图的通道数,减少参数量& D$ w* X5 M6 U
不过早的使用pool,在网络结构后期再使用pool,这样能提高分类准确率9 ^9 l' S+ ` e$ p1 v! {/ g. l
————————————————
: e1 o# L0 ~- r) p; L版权声明:本文为CSDN博主「Mr.小梅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
$ ~) `9 x" R. \8 m6 \1 @6 f* q原文链接:https://blog.csdn.net/qq_39707285/article/details/126498100$ \3 Q4 W9 K& O ?, z0 n
5 L' Q, T- S6 C9 ]6 b7 ?; B
; r# F6 g, _: E
|
zan
|