用户您好!请先登录!

使用Python和Keras制作图像分类器

使用Python和Keras制作图像分类器

使用Python和Keras制作图像分类器

在机器学习高歌猛进的今天,使用基于Imagenet图片库训练的模型(例如VGG16, VGG19, 或ResNet50)进行图像分类已经不是什么新鲜事。今天就向您展示一下,如何使用Python和Keras快速制作一个图像分类器。进入正题之前,先看看这神器的表现。

例1: 我们在网上找了一张柯基的照片,使用我们的分类器进行处理。左上角绿色字样是得分最高的分类结果。可以看出模型以86.53%的确信度推断这是柯基犬的图片。

使用Python和Keras制作图像分类器

第二张图是笔者的笔记本。模型以55.63%的确信度推断这是notebook,如果加上第二名laptop (32.09%)的话,模型以87.72%的确信度推断这是笔记本电脑。

使用Python和Keras制作图像分类器

可以说效果相当好了!

那么制作这个神器,究竟要做什么?就像那个“把大象装进冰箱需要几步”的经典问题,制作这个图像分类器只需要3步:

第1步:加载预训练模型

model = VGG16(weights=”imagenet”)

第2步:使用预训练模型进行图像分类

preds = model.predict(preprocess_input(image))

第3步:显示分类结果

print(decode_predictions(preds))

先别着急,动手之前先来了解一下什么是Imagenet。在计算机视觉和深度学习领域,有个非常著名的愚公移山类型的项目– Imagenet。她的目标就是把海量图片(目前是1千多万)进行整理归类(2万多类)。不仅如此,歪果仁还搞了个竞赛ImageNet Large Scale Recognition Challenge (ILSVRC),看谁能训练个厉害的模型把10万张图片准确地分到1000类中。VGG16, VGG19, and ResNet50是近年来涌现的大神级模型。

好,开工。请先确保您的计算机上安装了python和Keras(深度学习框架),您可以使用下面的命令确认相关信息。

使用Python和Keras制作图像分类器

接下来是代码时间。创建一个新文件”ImagenetClassifier.py”,写入下列内容。

# coding=utf-8
# 加载软件包
from keras.preprocessing import image as image_utils
from keras.applications.imagenet_utils import decode_predictions
from keras.applications.imagenet_utils import preprocess_input
from keras.applications import VGG16
import numpy as np
import cv2
# 使用Keras工具箱加载图片,并缩放图片到224x224像素
# 然后把PIL图片转为NumPy数组
print("[信息] 加载并预处理图片...")
image = image_utils.load_img("laptop.jpg", target_size=(224, 224))
image = image_utils.img_to_array(image)
# 将NumPy数组扩展为(1, 3, 224, 224)格式,然后对图片进行预处理
image = np.expand_dims(image, axis=0)
image = preprocess_input(image)
# 加载基于imagenet图片集训练好的VGG16模型及其权重weights
print("[信息] 加载模型...")
model = VGG16(include_top=True,weights="imagenet")
# 应用模型对图片进行分类
print("[信息] 图片分类...")
preds = model.predict(image)
P = decode_predictions(preds)
# 显示前5个预测结果
for (i, (imagenetID, label, prob)) in enumerate(P[0]):
	print("{}. {}: {:.2f}%".format(i + 1, label, prob * 100))
# 使用OpenCV加载图片,显示第一个预测结果
orig = cv2.imread("laptop.jpg")
(imagenetID, label, prob) = P[0][0]
cv2.putText(orig, "Label: {}, {:.2f}%".format(label, prob * 100),(10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 255, 0), 2)
cv2.imshow("Classification", orig)
cv2.waitKey(12000)

保存该文件后,在命令行窗口中,使用python命令运行该文件。首次运行时,keras会自动下载并缓存模型的权重文件vgg16_weights_tf_dim_ordering_tf_kernels.h5到您的~/.keras/models文件夹。文件大小553M,根据您的网速不同,这个过程可能需要几分钟到几小时。权重文件下载完成后,以后再次运行就会很快。

使用Python和Keras制作图像分类器

接下来就是见证奇迹的时刻了。

为了简化代码,我们把要分类的图像文件名写在代码里(原谅我的懒惰) laptop.jpg。所以运行文件之前,请确保使用正确的图像文件名替换紫色部分。

使用Python和Keras制作图像分类器

第14行

使用Python和Keras制作图像分类器

第35行

在命令行窗口使用python运行ImagenetClassifier.py文件。 分类器会显示排名前5的预测结果。

使用Python和Keras制作图像分类器

 

X-Eyes Admin
X-Eyes Admin

要发表评论,您必须先登录