在全球范围内,众多研究者和团队都在竞争开发最精确有效的图像识别系统。因此,通常建议以现有的神经网络设计作为起点,而不是从头开始设计自己的神经网络。更进一步,研究人员在训练了这些网络结构后,会分享训练好的神经网络版本。这样,可以直接使用这些预训练的神经网络,或者将其作为训练的起点。
数据集方面,ImageNet项目使用Wordhierarchy(现在只包含名词)来组织图像,每个层级节点代表数千张照片。该项目极大地推动了深度学习和计算机视觉领域的发展。研究人员可以免费获取数据,用于学术目的。
ImageNet大规模视觉识别挑战赛(ILSVRC)是一个年度图像识别竞赛,由ImageNet举办。来自全球的大学和企业团队竞争创建最精确的图像识别模型。Keras中包含的预训练模型就是使用这个竞赛的较小数据集开发的。数据集中包含了1000种不同类型的对象图像,包括食物和动物品种。例如,Granny Smith苹果就是数据集中的一种对象类型,仅这种苹果就有超过1200张图像包含在数据集中。
以下是一些用于图像分类的预训练模型:
VGG:VGG是一个深层神经网络,有16层或19层。在2014年,它代表了最前沿的技术。它的卷积神经网络设计相当传统。由于其简单易用和理解,至今仍常被用作其他模型的基础。但更现代的设计通常具有更好的效率。
ResNet-50:ResNet-50是一个50层的神经网络,代表了2015年的最新技术,它比VGG架构使用更少的内存就能实现更高的准确性。ResNet采用了更复杂的设计,其中神经网络的上层不仅与直接下面的层相连,还与多个下面的层相连。
Inception v3:2015年另一个表现出色的设计是Inception v3。它有一个更复杂的布局,围绕分成多个不同路径的层构建,然后再合并。这些网络展示了2014年和2015年研究中神经网络复杂性和规模的增长,以提高准确性。现代神经网络架构通常更加专业化。
预训练模型是什么,以及它们的用途是什么?这些是具有许多变量的复杂网络。训练这样的网络通常需要大量的时间和资源。即使有所不同,可以取下顶层,只训练该层的权重(迁移学习)。
现在,让实现一个预训练模型来识别对象和图像。将使用Keras库,因为所有预训练模型都包含在Keras中。将只覆盖VGG模型。
首先,让导入所有必需的包。可以从Keras应用中导入VGG16。
from keras.applications import VGG16
接下来,让加载要处理的图像文件。使用了一张狗的图片,但可以自由选择任何喜欢的图片。加载的图像对于使用神经网络处理来说太大了。图像大小必须与神经网络输入节点的数量相匹配,当给它喂照片时。放入网络的VGG图像必须是224乘以224像素的大小。因此,将目标大小参数设置为该值。此外,将使用image.img_to_array方法将图片数据转换为可以然后输入神经网络的数字数组。
from keras.preprocessing import image
img = image.load_img('dog.jpg', target_size=(224, 224))
x = image.img_to_array(img)
现在,给图像添加第四维。这是为了让Keras能够一次性接收多张图片的数组。因此,单张图像变成了一个包含多个图片的数组,每个图片都有一个元素。在将图像输入神经网络之前,必须始终对图像进行归一化,以便每个像素的值在零和一之间。预处理输入和VGG模型中的内置归一化函数将实现这一点。只需要调用它并发送信息。为了传递数据,即x,将说vgg16.preprocess_input。现在,也将使用matplotlib库可视化图像。
import matplotlib.pyplot as plt
plt.imshow(img)
plt.show()
x = np.expand_dims(x, axis=0)
x = vgg16.preprocess_input(x)
现在,将创建一个新的模型实例,通过创建一个新的vgg16对象。
model = VGG16(weights='imagenet')
现在准备使用归一化数据和神经网络进行图像预测。通过使用model.predict并提供数据,可以实现这一点。收到的预测将是一个有1000个元素的浮点数数组。数组的每个元素都将表示模型训练识别的1000种事物中每一种在图像中存在的可能性。VGG模型的decode_predictions函数提供了最有可能的匹配项的名称,这使得事情变得更简单。在这里,可以调用vgg16.decode_predictions。之后,只需发送已经构建的图像预测对象。它将自动为提供最有可能的前五个匹配项。
predictions = model.predict(x)
results = decode_predictions(predictions, top=5)
图像预测与图像非常吻合,认为。标准贵宾犬、库瓦兹犬和拉布拉多寻回犬是其他一些匹配项。所有这些都是图像的合理假设。请随意再次尝试使用照片。观察它将做出的预测以及它将困惑的图像类型是有趣的。
结论:已经成功实现了VGG预训练模型,并使用它预测了图像。只是提供了VGG预训练图像分类算法的一般概述以及如何使用它们。但由于这是一个不断发展的领域,总有新的模型值得期待和探索的新领域。敦促在不同的数据集上测试上述模型,并在评论中报告发现!
关键要点: