图像识别技术与预训练模型的应用

在全球范围内,众多研究者和团队都在竞争开发最精确有效的图像识别系统。因此,通常建议以现有的神经网络设计作为起点,而不是从头开始设计自己的神经网络。更进一步,研究人员在训练了这些网络结构后,会分享训练好的神经网络版本。这样,可以直接使用这些预训练的神经网络,或者将其作为训练的起点。

数据集方面,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预训练图像分类算法的一般概述以及如何使用它们。但由于这是一个不断发展的领域,总有新的模型值得期待和探索的新领域。敦促在不同的数据集上测试上述模型,并在评论中报告发现!

关键要点:

  • 预训练模型就像魔法;可以通过简单地下载它们而无需训练或数据立即使用它们。
  • 如果源任务和目标任务有所不同,但领域有些相似,可能需要训练一些层,但这不会像从头开始那样耗时,并且需要的数据要少得多。
  • 在原型制作的早期阶段或仅尝试模型时,导入现有模型并立即运行图像预测是一个好案例。然而,微调网络仍然是首选的行动方案。
  • 神经网络通常不需要从头开始训练。相反,可以利用现有的神经网络,并通过迁移学习修改它来解决新问题。
  • 个人:
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485