EfficientNetV2: Smaller Models and Faster Training

EfficientNetV2: Smaller Models and Faster Training

1.Abstract

本文提出了一种训练速度快、参数量少、模型小的卷积神经网络EfficientNetV2。
训练采用了NAS感知技术与缩放技术对训练速度与参数数量进行联合优化。

NAS感知技术: 全名是神经架构搜索,比如自动构建网络框架,选择最优参数。
缩放技术: 训练过程中,逐步提升图像大小,提出了一种渐进学习方式,根据图像大小,自适应的调整正则化因子(比如:dropout、数据增强)

2.网络的通病

训练图像的尺寸很大时,训练速度非常慢,但是又想要大尺寸。比如:
imageSize:224x224 batch:32
imageSize:512x512 batch:32
imageSize:764x764 batch:32 (显存不够)
但所本文batch不变,训练过中不断增大图像尺寸

3.网络设计

EfficientNetV2: Smaller Models and Faster Training_第1张图片MBConv和Fused-MBConv的区别主要是卷积大小不同,depthwise conv3x3
网络浅层中使用Depthwise convolutions速度会很慢,无法充分利用现有的一些加速器,所以浅层网路的模块会少用depthwise conv3x3,但是放在最后,速度会加快

3.1 depthwise conv3x3

EfficientNetV2: Smaller Models and Faster Training_第2张图片
深网络,能够提取复杂特征,但是网络容易退化
宽网络,训练速度快,参数少,但复杂特征不容易提取

3.2 SE

SE本质就是全连接

3.3 MBConv代码实现

self.convs = torch.nn.Sequential(
			torch.nn.Conv2d(inc, midc, 1, bias = False),
			torch.nn.BatchNorm2d(midc),
			torch.nn.SiLU(),
			torch.nn.Conv2d(midc, midc, 3, padding=1, stride=stride, groups=midc, bias=False),
			torch.nn.BatchNorm2d(midc),
			torch.nn.SiLU(),
			SELayer(inc, midc),
			torch.nn.Conv2d(midc, outc, 1, bias=False),
			torch.nn.BatchNorm2d(outc)
		)

SELayer:

self.fc = torch.nn.Sequential(
			torch.nn.Linear(outc, midc),
			torch.nn.SiLU(),
			torch.nn.Linear(midc, outc),
			torch.nn.Sigmoid()
		)

3.4 Fused-MBConv

self.convs = torch.nn.Sequential(
			torch.nn.Conv2d(inc, midc, 3, stride = stride, padding = 1, bias = False),
			torch.nn.BatchNorm2d(midc),
			torch.nn.SiLU(),
			torch.nn.Conv2d(midc, outc, 1, bias = False),
			torch.nn.BatchNorm2d(outc)
		)

4.整体网络

EfficientNetV2: Smaller Models and Faster Training_第3张图片

def efficientnetv2_s(num_classes=2, width_mult=1, dropout=0, p=0.2):
	config = [
		[FusedMBConv, 2,  1, 1, 24, p],
		[FusedMBConv, 4,  2, 4, 48, p],
		[FusedMBConv, 4,  2, 4, 64, p],
		[MBConv,      6,  2, 4, 128, p],
		[MBConv,      9,  1, 6, 160, p],
		[MBConv,      15, 2, 6, 256, p]
	]

第二列堆叠层数
第三列步长
第四列扩张率 比如:100*4做进一步操作,让通道变成8的倍数
第五列输入通道数
第六列倍率因子

网络模型还有efficientnetv2_M,efficientnetv2_L,只是参数量更大,堆叠的层数更多

5.亮点

渐进学习策略

训练图像的尺寸对训练模型的效率有很大的影响,如果使用动态的图像尺寸(比如一开始用很小的图像尺寸,后面再增大)来加速网络的训练,但通常会导致Accuracy降低。
原因:Accuracy的降低是不平衡的正则化导致的。在训练不同尺寸的图像时,应该使用动态的正则方法(之前都是使用固定的正则方法)。
操作:当训练的图片尺寸较小时,使用较弱的数据增强能够达到更好的结果;
当训练的图像尺寸较大时,使用更强的数据增强能够达到更好的接果。
当Size=128,RandAugmagnitude=5时效果最好;当Size=300,RandAugmagnitude=15时效果最好
EfficientNetV2: Smaller Models and Faster Training_第4张图片
训练早期使用较小的训练尺寸以及较弱的正则方法(weak regularization),网络快速学习到简单的表达能力。
接着逐渐提升图像尺寸,增大学习难度,同时增强正则方法(adding stronger regularization)。
regularization包括dropout rate,RandAugment magnitude以及mixup ratio
dropout rate:主要是影响通道数量
RandAugment magnitude:主要是数据增强
mixup ratio:数据增强是一种数据扩充方法,可分为同类增强(如:翻转、旋转、缩放、移位、模糊等)和混类增强(如mixup)两种方式
EfficientNetV2: Smaller Models and Faster Training_第5张图片EfficientNetV2: Smaller Models and Faster Training_第6张图片

6.渐进学习策略可以用于我们的网络吗?

EfficientNetV2: Smaller Models and Faster Training_第7张图片可以

6.值得学习的点

1.动态改变尺寸
2.动态正则化策略

实践:直接使用EfficientNetV2-S进行模糊和清晰分类:
1-100 epoch的准确率80%
101-200 epoch的准确率89%
200-350 epoch的准确率94%

你可能感兴趣的:(深度学习,opencv)