基于 VGG16 深度学习预训练权重的图像分类预测实验
2017-02-19 12:25
281 查看
徐海蛟教学
一直以来,计算科学家在为建立世界上最精确的计算机视觉系统孜孜不倦地努力着,但取得进展的过程却一直如马拉松竞赛般漫长而艰辛。斯坦福大学每年都会举行一个比赛 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【徐海蛟博士】 ...
一直以来,计算科学家在为建立世界上最精确的计算机视觉系统孜孜不倦地努力着,但取得进展的过程却一直如马拉松竞赛般漫长而艰辛。斯坦福大学每年都会举行一个比赛 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【徐海蛟博士】 ...
相关文章推荐
- 深度学习Alexnet网络对图像进行分类/预测(迁移学习)
- 机器学习实验(十二):深度学习之图像分类模型AlexNet结构分析和tensorflow实现
- 【机器学习PAI实践十】深度学习Caffe框架实现图像分类的模型训练
- 【深度学习】笔记6:基于CIFAR10网络,训练自己的分类网络的记录
- 深度学习-CAFFE利用CIFAR10网络模型训练自己的图像数据获得模型-4应用生成模型进行预测
- Matlab图像识别/检索系列(6)-10行代码完成深度学习网络之基于CNN的图像分类
- Matlab图像识别/检索系列(6)-10行代码完成深度学习网络之基于CNN的图像分类
- 基于迁移深度学习的遥感图像场景分类
- 深度学习与计算机视觉系列(2)_图像分类与KNN
- [caffe]深度学习之图像分类模型AlexNet解读
- [caffe]深度学习之图像分类模型AlexNet解读
- 深度学习(二十八)基于多尺度深度网络的单幅图像深度估计-NIPS 2014
- 深度学习之图像分类模型inception v2、inception v3解读
- 深度学习(二十八)基于多尺度深度网络的单幅图像深度估计-NIPS 2014
- [caffe]深度学习之MSRA图像分类模型Deep Residual Network(深度残差网络)解读
- [caffe]深度学习之图像分类模型googlenet[inception v1]解读
- [caffe]深度学习之图像分类模型Batch Normalization[BN-inception]解读
- 深度学习用于基于内容的图像检索 Deep Learning for Content-Based Image Retrieval
- 深度学习与计算机视觉(11)_基于deep learning的快速图像检索系统