首页 > 编程知识 正文

Efficientnet网络pytorch实现,Efficientnet

时间:2023-05-04 17:49:57 阅读:287078 作者:2131

论文: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系列网络。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。