龙空技术网

教程:使用Mobilenet和Keras进行迁移学习

AI中国 172

前言:

当前各位老铁们对“mobilenet 训练”大体比较关怀,朋友们都需要了解一些“mobilenet 训练”的相关资讯。那么小编也在网摘上网罗了一些关于“mobilenet 训练””的相关知识,希望各位老铁们能喜欢,大家一起来学习一下吧!

点击上方关注,All in AI中国

在这个笔记本中,我将向您展示使用Mobilenet对狗的图像进行分类的示例。然后,我将向您展示一个例子,它会把蓝山雀的图像错误分类。然后,我将重新训练Mobilenet并使用迁移学习,以便它可以正确地对相同的输入图像进行分类。在这个过程中,仅使用了两个分类器,但是这可以扩展到您想要的数量,仅限于您可用的硬件数量和时间。

Mobilenet的源文件位于:https://arxiv.org/pdf/1704.04861.pdf

MobileNets:用于移动视觉应用的高效卷积神经网络。

我们使用Mobilenet,是因为它的架构很轻巧。它使用深度可分离的卷积,这基本上意味着它在每个颜色通道上都执行单个卷积,而不是将所有三个卷积相合并展平它。这具有过滤输入通道的效果。或者正如本文作者清楚地解释的那样:“对于MobileNets,深度卷积对每个输入通道应用单个滤波器。然后,逐点卷积应用1×1卷积来组合输出深度卷积。标准卷积既可以在一个步骤中过滤并将输入组合成一组新的输出。深度可分离卷积将其分成两层,一个用于过滤的单独层一个用于组合的单独层。这种因式分解具有显著减少计算和模型大小的效果。”

逐点和深度卷积之间的差异

所以Mobilenet的整体架构如下,有30层

步长为2的卷积层depthwise layerpointwise layer,使通道数加倍步长为2的depthwise layerpointwise layer,使通道数加倍

等等

Mobilenet完整架构

它的维护成本非常低,在高速下表现也非常好。还有许多类型的预训练模型,其存储器中的网络大小和磁盘上使用的参数数量成比例。网络的速度和功耗与MACs (Multiply-Accumulates)的数量成正比,后者是融合乘法和加法运算数量的度量。

现在让我们来看看代码!

我的全部代码:https://github.com/ferhat00/Deep-Learning/tree/master/Transfer%20Learning%20CNN

让我们加载必要的包和库。

我们从Keras输入预先训练的模型。

让我们尝试下对不同品种的狗的图像进行一些测试。

输出:

输出:

输出:

到现在为止还挺好。它很好地分类了每一种狗,那么接下来让我们试一种鸟类蓝色的山雀来看看。

蓝雀

输出:

你可以看到它无法识别蓝山雀。它错误地将图像归类为小鸡。这是一种原产于北美的本土鸟类,并且有微妙的不同:

山雀

现在让我们操纵Mobilenet架构,重新训练前几个层并使用迁移学习。要做到这一点,我们需要用一些图像训练它。在这里,我将用蓝山雀和乌鸦的图像进行训练。但是,不是手动下载它们的图像,而是使用谷歌图像搜索并拉动图像。要做到这一点,我们可以导入一个很好的包。

查看

让我们现在重新使用MobileNet,因为它非常轻巧(17Mb),让我们添加和训练前几个层。注意我只会训练两个分类器,蓝山雀和乌鸦。

让我们检查一下模型架构

我们将使用预先训练的权重,因为已经在Imagenet数据集上训练了模型。我们确保所有权重都是不可训练的,只训练最后几层密集层。

现在让我们将训练数据加载到ImageDataGenerator中。指定路径,它会自动发送批量训练数据,简化代码。

编译模型。现在让我们训练吧。在GTX1070 GPU上花费不到两分钟。

该模型现已接受训练。 现在让我们测试一些独立的输入图像来检查预测。

输出:

正如你所看到的,它正确地预测了乌鸦的图像,因为蓝山雀的图像被注释掉了。

乌鸦

这可以进一步扩展到更多的图像,更多数量的分类器可以更好地推广,但它是实现CNN迁移学习的最轻量级的方法和最快捷的方式。这当然取决于您想要实现模型的速度、准确程度和硬件,以及您有多少时间可用。

标签: #mobilenet 训练