基于 VGG16 深度学习预训练权重的图像分类预测实验

徐海蛟教学


一直以来,计算科学家在为建立世界上最精确的计算机视觉系统孜孜不倦地努力着,但取得进展的过程却一直如马拉松竞赛般漫长而艰辛。斯坦福大学每年都会举行一个比赛 ILSVR ,邀请谷歌、微软、百度等IT企业使用ImageNet —— 全球最大的图像识别数据库,测试他们的系统运行情况。每年一度的比赛也牵动着各大巨头公司的心弦,过去几年中,系统的图像识别功能大大提高,ImageNet 2012分类数据集中的错误率已降低至4.94%。而此前同样的实验中,人眼辨识的错误率大概为5.1%。在比赛 ILSVR中,比赛数据集包含约120万张训练图像、5万张验证图像和10万张测试图像,分为1000个不同的类别。


VGG-16 是视觉几何组(Visual Geometry Group)开发的卷积神经网络结构,该深度学习神经网络赢得了ILSVR(ImageNet)2014的冠军,时至今日,VGG仍然被认为是一个杰出的视觉模型。今天,我们来做基于 VGG16 深度学习预训练权重的图像分类预测实验,我们无需自己训练神经网络权重参数,使用VGG-16已经训练好的模型与权重参数来预测图片的类别。


我们考虑基于Keras深度学习框架来完成该实验,仅需要寥寥数行代码即可。非常简洁。

我们的环境如下。

Python 3.6.0 |Anaconda 4.3.0 (64-bit)| (default, Dec 23 2016, 12:22:00)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>


Theano (0.8.2)

Keras (1.2.0)


事先把 vgg16_weights_th_dim_ordering_th_kernels.h5 权重文件和imagenet_class_index.json类信息文件下载在~/.keras/models/下,否则在线下载很慢。代码所在目录放置一副测试图片,例如:elephant.jpg 大象图片

python 代码如下。


import time
from keras.applications.imagenet_utils import preprocess_input, decode_predictions
from keras.applications.vgg16 import VGG16
from keras.preprocessing import image
import numpy as np

t0 = time.time()
model = VGG16(weights='imagenet')  # 224×224
img_path = 'elephant.jpg'
img = image.load_img(img_path, target_size=(224, 224))  # 224×224
x = image.img_to_array(img)     # 三维(3, 224, 224)
x = np.expand_dims(x, axis=0)  # 四维(1, 3, 224, 224)
x = preprocess_input(x)  # 预处理
y_pred = model.predict(x) # 预测概率
print('测试图:', decode_predictions(y_pred))  # 输出5个最高概率:(类名, 语义概念, 预测概率)
print("耗时: %.2f seconds【徐海蛟博士】 ..." % (time.time() - t0))



结果如下。

Using Theano backend.
Using gpu device 3: TITAN X (Pascal) (CNMeM is enabled with initial size: 95.0% of memory, cuDNN 5005)
测试图: [[('n03743016', 'megalith', 0.68713152), ('n01871265', 'tusker', 0.063741349), ('n02504458', 'African_elephant', 0.050206956), ('n02437312', 'Arabian_camel', 0.026673665), ('n02130308', 'cheetah', 0.021096079)]]
耗时: 7.98 seconds【徐海蛟博士】 ...


你可能感兴趣的:(徐海蛟教学,徐海蛟,徐海蛟博士)