还在为找不到卷积神经网络而发愁?

今天向大家介绍下tensorflow2.X中那些已经在imagenet上预训练好的卷积神经网络。

MobileNet
MobileNetV1
论文地址:
https://arxiv.org/abs/1704.04861

初代MobileNet,是一种体积较小、计算量较少、适用于移动设备的卷积神经网络。

tf.keras.applications.mobilenet.MobileNet(
input_shape=None, alpha=1.0, depth_multiplier=1, dropout=0.001,
include_top=True, weights=’imagenet’, input_tensor=None, pooling=None,
classes=1000, classifier_activation=’softmax’, **kwargs
)
具体参数含义如下所示。

input_shape:形状元组,忽略则自动匹配input-tensor
alpha:控制网络的宽度。这在 MobileNet论文中被称为宽度乘数。如果alpha< 1.0,则按比例减少每层中的filter数量。如果alpha> 1.0,则按比例增加每层中的filter数量。如果alpha= 1,则在每一层使用默认filter数量。
depth_multiplier:深度卷积的深度乘数。这在 MobileNet 论文中称为分辨率乘数。默认为 1.0。
dropout:默认为0.001
include_top:是否包含网络顶部的全连接层。默认为True
weights:可以选None`(随机初始化)、“imagenet”(在 ImageNet 上进行预训练)或要加载的权重文件
input_tensor:可选,选择一个张量作为模型的输入
classes:图像分类数量
classifier_activation:是否在输出层使用激活函数,加载预训练参数时,只能为None或者Softmax
MobileNetV2
论文地址:
https://arxiv.org/abs/1801.04381

v1的改进,创新点是Inverted residuals和Linear bottlenecks。

tf.keras.applications.mobilenet_v2.MobileNetV2(
input_shape=None, alpha=1.0, include_top=True, weights=’imagenet’,
input_tensor=None, pooling=None, classes=1000,
classifier_activation=’softmax’, **kwargs
)
参数参造V1。

MobileNetV3Large & MobileNetV3Small
论文地址:
https://arxiv.org/pdf/1905.02244.pdf

MobileNetV3-Small 与 MobileNetV3-Large 分别对应对计算和存储要求低和高的版本。

tf.keras.applications.MobileNetV3Large(
input_shape=None, alpha=1.0, minimalistic=False, include_top=True,
weights=’imagenet’, input_tensor=None, classes=1000, pooling=None,
dropout_rate=0.2, classifier_activation=’softmax’,
include_preprocessing=True
)
tf.keras.applications.MobileNetV3Small(
input_shape=None, alpha=1.0, minimalistic=False, include_top=True,
weights=’imagenet’, input_tensor=None, classes=1000, pooling=None,
dropout_rate=0.2, classifier_activation=’softmax’,
include_preprocessing=True
)
两个网络参数是一样的,具体参数含义如下所示。

alpha:控制网络的宽度。这在 MobileNetV3 论文中被称为深度乘数,但保留该名称是为了与 Keras 中的 MobileNetV1 保持一致。如果alpha< 1.0,则按比例减少每层中的filter数量。如果alpha> 1.0,则按比例增加每层中的filter数量。如果alpha= 1,则在每一层使用默认filter数量。
minimalistic:除了Large模型和Small模型,该模块还包含所谓的简约模型,这些模型具有与 MobilenetV3 相同的每层维度特征,但是,它们不使用任何高级模块(squeeze-and-excite units, hard-swish, and 5×5 convolutions)
dropout_rate:dropout比例
include_preprocessing:是否包含网络的预处理层
DenseNet
DenseNet121 & DenseNet169 & DenseNet201
论文地址:
https://arxiv.org/abs/1608.06993

tensorflow中共提供了三种不同深度的DenseNet。

tf.keras.applications.densenet.DenseNet121(
include_top=True, weights=’imagenet’, input_tensor=None,
input_shape=None, pooling=None, classes=1000
)
tf.keras.applications.densenet.DenseNet169(
include_top=True, weights=’imagenet’, input_tensor=None,
input_shape=None, pooling=None, classes=1000
)
tf.keras.applications.densenet.DenseNet201(
include_top=True, weights=’imagenet’, input_tensor=None,
input_shape=None, pooling=None, classes=1000
)
具体参数介绍可参造MobileNetV3

EfficientNet
EfficientNet
论文地址:
https://arxiv.org/abs/1905.11946

EfficientNet首先得到初代的EfficientNetB0,然后在B0的基础上,调整网络宽度,网络深度,图像分辨率三个维度的放缩倍率,由此得到了B1-B7。

tf.keras.applications.efficientnet.EfficientNetB0(
include_top=True, weights=’imagenet’, input_tensor=None,
input_shape=None, pooling=None, classes=1000,
classifier_activation=’softmax’, **kwargs
)
tf.keras.applications.efficientnet.EfficientNetB1()
tf.keras.applications.efficientnet.EfficientNetB2()
tf.keras.applications.efficientnet.EfficientNetB3()
tf.keras.applications.efficientnet.EfficientNetB4()
tf.keras.applications.efficientnet.EfficientNetB5()
tf.keras.applications.efficientnet.EfficientNetB6()
tf.keras.applications.efficientnet.EfficientNetB7()
EfficientNetV2
论文地址:
https://arxiv.org/abs/2104.00298

谷歌在EfficientNet的基础上,引入了Fused-MBConv到搜索空间中;同时为渐进式学习引入了自适应正则强度调整机制,组合得到了EfficientNetV2。

tf.keras.applications.efficientnet_v2.EfficientNetV2B0(
include_top=True, weights=’imagenet’, input_tensor=None,
input_shape=None, pooling=None, classes=1000,
classifier_activation=’softmax’, include_preprocessing=True
)
tf.keras.applications.efficientnet_v2.EfficientNetV2B1()
tf.keras.applications.efficientnet_v2.EfficientNetV2B2()
tf.keras.applications.efficientnet_v2.EfficientNetV2B3()
tf.keras.applications.efficientnet_v2.EfficientNetV2BL()
tf.keras.applications.efficientnet_v2.EfficientNetV2BL()
tf.keras.applications.efficientnet_v2.EfficientNetV2BS()
InceptionV3
论文地址:
https://arxiv.org/abs/1512.00567

tf.keras.applications.inception_v3.InceptionV3(
include_top=True, weights=’imagenet’, input_tensor=None,
input_shape=None, pooling=None, classes=1000,
classifier_activation=’softmax’
)
NasNet
NasNetLarge & NasNetMobile
论文地址:
https://arxiv.org/abs/1707.07012

NasNet可以说是谷歌很早之前推出的AutoML自动训练出来的。

tf.keras.applications.nasnet.NASNetLarge(
input_shape=None, include_top=True, weights=’imagenet’,
input_tensor=None, pooling=None, classes=1000
)
tf.keras.applications.nasnet.NASNetMobile(
input_shape=None, include_top=True, weights=’imagenet’,
input_tensor=None, pooling=None, classes=1000
)
ResNet
ResNet50 & ResNet101 & ResNet152
论文地址:
https://arxiv.org/abs/1512.03385

tf.keras.applications.resnet50.ResNet50(
include_top=True, weights=’imagenet’, input_tensor=None,
input_shape=None, pooling=None, classes=1000, **kwargs
)
tf.keras.applications.resnet.ResNet101()
tf.keras.applications.resnet.ResNet152()
ResNetV2
ResNet50 & ResNet101 & ResNet152
论文地址:
https://arxiv.org/abs/1603.05027

简单来说,在Resnet v2中将BN/ReLu这些activation操作挪到了Conv(真正的weights filter操作)之前。

tf.keras.applications.resnet_v2.ResNet50V2(
include_top=True, weights=’imagenet’, input_tensor=None,
input_shape=None, pooling=None, classes=1000,
classifier_activation=’softmax’
)
tf.keras.applications.resnet_v2.ResNet101V2()
tf.keras.applications.resnet_v2.ResNet152V2()
VGG
VGG16 & VGG19
论文地址:
https://arxiv.org/abs/1409.1556

tf.keras.applications.vgg16.VGG16(
include_top=True, weights=’imagenet’, input_tensor=None,
input_shape=None, pooling=None, classes=1000,
classifier_activation=’softmax’
)
tf.keras.applications.vgg19.VGG19()
Xception
论文地址:
https://arxiv.org/abs/1610.02357

tf.keras.applications.xception.Xception(
include_top=True, weights=’imagenet’, input_tensor=None,
input_shape=None, pooling=None, classes=1000,
classifier_activation=’softmax’
)
InceptionResNetV2
论文地址:
https://arxiv.org/abs/1602.07261

tf.keras.applications.inception_resnet_v2.InceptionResNetV2(
include_top=True, weights=’imagenet’, input_tensor=None,
input_shape=None, pooling=None, classes=1000,
classifier_activation=’softmax’, **kwargs
)
ImageNet
当然,你也可以直接用imagenet来进行预测。只需要传入需要预测的数据即可。

tf.keras.applications.imagenet_utils.decode_predictions(
preds, top=5
)
预处理
因为输入的图片需要满足预训练网络的要求,所以我们要先对输入的图片进行预处理,其实就是对图片进行归一化处理。

tf.keras.applications.网络名.preprocess_input(x, data_format=None)。
这里以mobilenet为例。

i = tf.keras.layers.Input([None, None, 3], dtype = tf.uint8)
x = tf.cast(i, tf.float32)
x = tf.keras.applications.mobilenet.preprocess_input(x)
core = tf.keras.applications.MobileNet()
x = core(x)
model = tf.keras.Model(inputs=[i], outputs=[x])

image = tf.image.decode_png(tf.io.read_file(‘file.png’))
result = model(image)
预测
我们也可以直接利用在imagenet上预训练好的上述网络进行预测。

tf.keras.applications.网络名.decode_predictions(
preds, top=5
)
总结
今天我们列举了tensorflow中一些已经预训练好的网络结构,需要的同学可以直接在上述网络的基础上进行迁移训练。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至22018681@qq.com 举报,一经查实,本站将立刻删除。

Like (0)
Donate 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
森林服务号的头像森林服务号
Previous 2021年11月23日
Next 2021年11月24日

相关推荐

发表回复

Please Login to Comment