使用Python和Keras的Image

什么是ImageNet?

ImageNet实际上是一个项目,旨在根据一组定义的单词和短语对图像进行标记和分类,分为近22,个类别。ImageNet项目中有超过万张图像。

要使用Python运行在ImageNet数据集上预训练的网络,您需要确保安装了最新版本的Keras。

我们现在准备编写一些Python代码,利用在ImageNet数据集上预训练的卷积神经网络(CNN)对图像内容进行分类。

首先导入我们所需的python的包

使用Keras辅助函数从磁盘加载我们的图像。输入到网络种的图像大小需要x像素,这是VGG16、VGG19和ResNet50网络架构所需的空间输入图像尺寸。

进行图像预处理,需要讲图像维度扩展为(1,,,),我们为什么要做这个?

当使用深度学习和卷积神经网络对图像进行分类时,我们经常通过网络“批量”发送图像以提高效率。因此,一次只通过网络传递一张图像的情况实际上非常罕见,当然,除非您只有一张图像需要分类。

最后,我们可以加载Keras网络并对图像进行分类:

下载模型权重

第一次执行脚本时,Keras会自动下载架构权重并将其缓存到磁盘的目录中。

这些权重是相当大的HDF5文件,如果您没有快速的互联网连接,可能需要一段时间才能下载。为了方便起见,我列出了每个网络架构的权重文件的大小:

ResNet50:MB

VGG16:55MB

VGG19:MB

下载权重后,VGG16网络将被初始化,ImageNet权重将被加载,并获得最终的分类。

尝试另一张图像

再来一张

推理时间

模型判断一张图像属于哪一类的过程成为推理,实际应用中这个推理时间是一个关键的因素。

从开始到结束(不包括网络权重文件的下载),在我的TitanXGPU上使用VGG16对图像进行分类大约需要11秒。这包括实际从磁盘加载图像和网络、执行任何初始化、通过网络传递图像以及获得最终预测的过程。

然而,一旦网络实际加载到内存中,分类只需要1.8秒,这表明实际加载初始化大型卷积神经网络涉及多少开销。此外,由于图像可以批量输入到网络,因此相同的分类时间将适用于多个图像。

如果您在CPU上对图像进行分类,那么您应该获得类似的分类时间。这主要是因为将图像从内存复制到GPU会产生大量开销。当您批量传递多个图像时,使用GPU的I/O开销更容易接受。

#AI助手创作季#


转载请注明:http://www.aierlanlan.com/rzdk/6156.html