Jammy@Jetson Orin - Tensorflow & Keras Get Started: 004 Keras Pre-Trained ImageNet Models

1. 源由

我们已经看到了如何训练一个简单的神经网络来对来自CIFAR-10数据集的图像进行分类,但这是一个相对简单的任务,因为只有十个类别。

对大量对象类型进行分类将需要包含许多百万参数的更大型的网络。由于计算量巨大,训练集众多,导致了大量的训练时间。同时由于自建模型算法的不完善,通常需要大量的循环往复时间,才能达到一个相对理想的值。

在应用方面,为了更好,更快的应用业界顶尖技术,可以采用经过预训练的模型。在《Jammy@Jetson Orin - Tensorflow & Keras Get Started: 003 Implementing a CNN in TensorFlow & Keras》中,已经提及了相关模型的保存&加载操作。对于已经做过预训练的大型网络,可以直接采用load进行加载,然后直接进行预测。

ImageNet 项目是一个大型的视觉数据库,旨在用于视觉对象识别软件研究。

该项目的构想是由人工智能研究者李飞飞在15年前提出的。ImageNet团队于2009年首次展示了他们的数据集。截止目前,已手工注释了超过 1400 万张图像,以指示图像中所描绘的对象,并且在至少一百万张图像中还提供了边界框。ImageNet 包含超过 20,000 个类别,其中典型的类别(如“气球”或“草莓”)包含数百张图像。第三方图像 URL 注释的数据库可直接从 ImageNet 免费获取,尽管实际的图像不属于 ImageNet。

自 2010 年以来,ImageNet 项目每年举办一次软件竞赛,即 ImageNet 大规模视觉识别挑战(ILSVRC)。研究团队将在这些竞赛基础上不断评估他们的计算机视觉算法在各种视觉识别任务中的表现,如对象分类和对象定位。使用的训练数据是ImageNet的一个子集,包含120万张图像,属于1,000个类别。

2. Keras预训练模型

ILSVRC的获胜者非常慷慨地将他们的模型发布到开源社区。因此,在Keras中可以获得几种模型,例如AlexNet、VGGNet、Inception、ResNet、Xception等等。除了ILSVRC的获胜者外,许多研究团队也分享了他们为类似任务训练的模型,例如MobileNet、SqueezeNet等等。所有在ImageNet上训练的模型都用于将图像分类为1,000个类别之一。

Keras附带了许多预训练的分类模型。截至Keras版本2.11,共有19种不同的预训练模型可用,其中一些版本还包含许多变体。模型列表可以在这里找到。

要在Keras中使用任何预训练模型,需要四个基本步骤:

  1. 加载预训练模型。

model_resnet50 = tf.keras.applications.resnet50.ResNet50(include_top=True,
weights=‘imagenet’,
input_tensor=None,
input_shape=None,
pooling=None,
classes=1000,
classifier_activation=‘softmax’,
)

  1. 使用模型中的专用预处理函数 preprocess_input() 对输入图像进行预处理。

tf.keras.applications.resnet50.preprocess_input(x, data_format=None)

  1. 调用模型的 predict() 方法生成预测结果。

preds = model_resnet50.predict(image_batch)

  1. 使用模型中的专用后处理函数 decode_predictions() 对预测结果进行解码。

decoded_preds = tf.keras.applications.resnet50.decode_predictions(preds, top=5)

注:以上简单的说明四个步骤,至于具体参数以及API含义可以查阅Keras手册。

3. 举例 - 预训练模型

在这里,我们将使用以下预训练模型对几个示例测试图像进行预测。

3.1 获取样本图像

images/
├── baseball-player.png
├── clown-fish.png
├── elephant.png
├── forklift.png
├── ice-cream.png
├── lemons.png
├── magnetic-compass.png
└── polar-bear.png

在这里插入图片描述

3.2 显示样本图像

在这里插入图片描述

3.3 加载三个预训练模型

在这里插入图片描述

3.4 模型处理通用函数

  1. 读取图像
  2. 按照模型要求进行必要的图像预处理
  3. 为图像张量添加批处理维度
  4. 调用模型的 predict() 方法进行预测
  5. 解码预测结果,找到前 k 个预测的类别名称和置信度分数
  6. 显示结果

在这里插入图片描述

3.5 预测结果

3.5.1 VGG16

  • ball playerd的识别率只有50.61%
  • African elephant的识别率只有 52.34%
  • compass的识别率只有35.00%

在这里插入图片描述

3.5.2 Resnet-50

  • ball playerd的识别率从VGG16 50.61%提升到80.50%
  • African elephant的识别率依然只有 58.49%
  • compass的识别率从VGG16 35.00% 提升到91.90%

在这里插入图片描述

3.5.3 Inception-V3

  • ball playerd的识别率69.22%
  • African elephant的识别率从50+%提升到了89.94%
  • compass的识别率97.08%
    在这里插入图片描述

4. 总结

在本篇文章中,学习了如何使用Keras中的三种不同预训练模型进行图像分类。

在随后的文章中,将学习如何利用预训练模型来为特定应用程序进行定制。有两种非常常见的技术,称为迁移学习和微调。

是不是越来越有感觉了??? :)

测试代码:004_Keras-Pre-Trained-ImageNet-Models

5. 参考资料

【1】Jammy@Jetson Orin - Tensorflow & Keras Get Started

  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值