论文:EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
Github:https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet
论文基于深度(depth),宽度(width),输入图片分辨率(resolution)的共同调节,提出了EfficientNets。其中,EfficientNet-B7取得了Imagenet 84.4%的top1准确性,97.1%的top5准确性。并且比现有最好的方法GPipe小了8.4倍,快了6.1倍。
模型的尺度化方法:
(a)原始1.0版本的基础模型
(b)通道数扩大
(c)深度扩大
(d)输入图像分辨率扩大
(e)基于通道数,深度,输入图像的组合式扩大
卷积网络可以定义为N
H表示输入图像高度,
W表示输入图像宽度
C表示输入图像通道数
X表示输入的张量
FiLi表示第i个stage的第F层重复L次
优化问题可以定义为
组合式尺度化方法(compound scaling method):
α; β; γ为常量。
Φ是用户指定的尺度化参数
将网络的深度加倍,将会使得计算量变为原来的2倍,将网络的通道宽度和分辨率加倍将会使得计算量变为原来的4倍。因此,设置α · β2 · γ2 ≈ 2,最终的计算量FLOAPS数目为2φ。
EfficientNet-B0网络结构:
其中,MBConv为取反的bootlenet单元,即mobilev2的瓶颈单元。然后将shortcut部分改为se模块。
其中drop_connect个人理解类似于dropout
def drop_connect(inputs, is_training, drop_connect_rate): """Apply drop connect.""" if not is_training: return inputs # Compute keep_prob # TODO(tanmingxing): add support for training progress. keep_prob = 1.0 - drop_connect_rate # Compute drop_connect tensor batch_size = tf.shape(inputs)[0] random_tensor = keep_prob random_tensor += tf.random_uniform([batch_size, 1, 1, 1], dtype=inputs.dtype) binary_tensor = tf.floor(random_tensor) output = tf.div(inputs, keep_prob) * binary_tensor return output实验结果:
实验感受野:
本文的组合式尺度优化方法具体更好的感受野。
总结:
EfficientNet的B0到B7系列,是一系列快速高精度的模型。组合式的优化方法,可以应用于MobileNets和Resnet系列网络。免责声明:文章源自网络,版权归原作者所有,如有侵犯联系删除。