Keras预训练的ImageNet模型实现分类操作


Posted in Python onJuly 07, 2020

本文主要介绍通过预训练的ImageNet模型实现图像分类,主要使用到的网络结构有:VGG16、InceptionV3、ResNet50、MobileNet。

代码:

import keras
import numpy as np
from keras.applications import vgg16, inception_v3, resnet50, mobilenet
 
# 加载模型
vgg_model = vgg16.VGG16(weights='imagenet')
inception_model = inception_v3.InceptionV3(weights='imagenet')
resnet_model = resnet50.ResNet50(weights='imagenet')
mobilenet_model = mobilenet.MobileNet(weights='imagenet')
 
# 导入所需的图像预处理模块
from keras.preprocessing.image import load_img
from keras.preprocessing.image import img_to_array
from keras.applications.imagenet_utils import decode_predictions
import matplotlib.pyplot as plt
%matplotlib inline
 
filename= 'images/cat.jpg'
 
# 将图片输入到网络之前执行预处理
'''
1、加载图像,load_img
2、将图像从PIL格式转换为Numpy格式,image_to_array
3、将图像形成批次,Numpy的expand_dims
'''
# 以PIL格式加载图像
original = load_img(filename, target_size=(224, 224))
print('PIL image size', original.size)
plt.imshow(original)
plt.show()
 
# 将输入图像从PIL格式转换为Numpy格式
# In PIL-- 图像为(width, height, channel)
# In Numpy——图像为(height, width, channel)
numpy_image = img_to_array(original)
plt.imshow(np.uint8(numpy_image))
plt.show()
print('numpy array size', numpy_image.size)
 
# 将图像/图像转换为批量格式
# expand_dims将为特定轴上的数据添加额外的维度
# 网络的输入矩阵具有形式(批量大小,高度,宽度,通道)
# 因此,将额外的维度添加到轴0。
image_batch = np.expand_dims(numpy_image, axis=0)
print('image batch size', image_batch.shape)
plt.imshow(np.uint8(image_batch[0]))
 
# 使用各种网络进行预测
# 通过从批处理中的图像的每个通道中减去平均值来预处理输入。 
# 平均值是通过从ImageNet获得的所有图像的R,G,B像素的平均值获得的三个元素的阵列
# 获得每个类的发生概率
# 将概率转换为人类可读的标签
# VGG16 网络模型
# 对输入到VGG模型的图像进行预处理
processed_image = vgg16.preprocess_input(image_batch.copy())
 
# 获取预测得到的属于各个类别的概率
predictions = vgg_model.predict(processed_image)
# 输出预测值
# 将预测概率转换为类别标签
# 缺省情况下将得到最有可能的五种类别
label_vgg = decode_predictions(predictions)
label_vgg
 
# ResNet50网络模型
# 对输入到ResNet50模型的图像进行预处理
processed_image = resnet50.preprocess_input(image_batch.copy())
 
# 获取预测得到的属于各个类别的概率
predictions = resnet_model.predict(processed_image)
 
# 将概率转换为类标签
# 如果要查看前3个预测,可以使用top参数指定它
label_resnet = decode_predictions(predictions, top=3)
label_resnet
 
# MobileNet网络结构
# 对输入到MobileNet模型的图像进行预处理
processed_image = mobilenet.preprocess_input(image_batch.copy())
 
# 获取预测得到属于各个类别的概率
predictions = mobilenet_model.predict(processed_image)
 
# 将概率转换为类标签
label_mobilnet = decode_predictions(predictions)
label_mobilnet
 
# InceptionV3网络结构
# 初始网络的输入大小与其他网络不同。 它接受大小的输入(299,299)。
# 因此,根据它加载具有目标尺寸的图像。
# 加载图像为PIL格式
original = load_img(filename, target_size=(299, 299))
 
# 将PIL格式的图像转换为Numpy数组
numpy_image = img_to_array(original)
 
# 根据批量大小重塑数据
image_batch = np.expand_dims(numpy_image, axis=0)
 
# 将输入图像转换为InceptionV3所能接受的格式
processed_image = inception_v3.preprocess_input(image_batch.copy())
 
# 获取预测得到的属于各个类别的概率
predictions = inception_model.predict(processed_image)
 
# 将概率转换为类标签
label_inception = decode_predictions(predictions)
label_inception
 
import cv2
numpy_image = np.uint8(img_to_array(original)).copy()
numpy_image = cv2.resize(numpy_image,(900,900))
 
cv2.putText(numpy_image, "VGG16: {}, {:.2f}".format(label_vgg[0][0][1], label_vgg[0][0][2]) , (350, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 3)
cv2.putText(numpy_image, "MobileNet: {}, {:.2f}".format(label_mobilenet[0][0][1], label_mobilenet[0][0][2]) , (350, 75), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 3)
cv2.putText(numpy_image, "Inception: {}, {:.2f}".format(label_inception[0][0][1], label_inception[0][0][2]) , (350, 110), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 3)
cv2.putText(numpy_image, "ResNet50: {}, {:.2f}".format(label_resnet[0][0][1], label_resnet[0][0][2]) , (350, 145), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 3)
numpy_image = cv2.resize(numpy_image, (700,700))
cv2.imwrite("images/{}_output.jpg".format(filename.split('/')[-1].split('.')[0]),cv2.cvtColor(numpy_image, cv2.COLOR_RGB2BGR))
 
plt.figure(figsize=[10,10])
plt.imshow(numpy_image)
plt.axis('off')

训练数据:

Keras预训练的ImageNet模型实现分类操作

运行结果:

Keras预训练的ImageNet模型实现分类操作

以上这篇Keras预训练的ImageNet模型实现分类操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
复制粘贴功能的Python程序
Apr 04 Python
Python虚拟环境Virtualenv使用教程
May 18 Python
分析python切片原理和方法
Dec 19 Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
Feb 24 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
Feb 13 Python
Python 使用指定的网卡发送HTTP请求的实例
Aug 21 Python
浅谈keras的深度模型训练过程及结果记录方式
Jan 24 Python
解决Tensorflow 使用时cpu编译不支持警告的问题
Feb 03 Python
虚拟机下载python是否需要联网
Jul 27 Python
python 实现音频叠加的示例
Oct 29 Python
PyQt实现计数器的方法示例
Jan 18 Python
python实现求纯色彩图像的边框
Apr 08 Python
Scrapy模拟登录赶集网的实现代码
Jul 07 #Python
scrapy框架携带cookie访问淘宝购物车功能的实现代码
Jul 07 #Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
Jul 07 #Python
浅谈django框架集成swagger以及自定义参数问题
Jul 07 #Python
Django REST Swagger实现指定api参数
Jul 07 #Python
python中查看.db文件中表格的名字及表格中的字段操作
Jul 07 #Python
python db类用法说明
Jul 07 #Python
You might like
检查php文件中是否含有bom的函数
2012/05/31 PHP
php函数array_merge用法一例(合并同类数组)
2013/02/03 PHP
PHP代码判断设备是手机还是平板电脑(两种方法)
2015/10/19 PHP
PHP环境搭建的详细步骤
2016/06/30 PHP
PHP的RSA加密解密方法以及开发接口使用
2018/02/11 PHP
游戏人文件夹程序 ver 3.0
2006/07/14 Javascript
Div Select挡住的解决办法
2008/08/07 Javascript
JS 控制非法字符的输入代码
2009/12/04 Javascript
基于jquery的checkbox下拉框插件代码
2010/06/25 Javascript
基于jquery的二级联动菜单实现代码
2011/04/25 Javascript
jqPlot 基于jquery的画图插件
2011/04/26 Javascript
jquery查找tr td 示例模拟
2014/05/08 Javascript
重写document.write实现无阻塞加载js广告(补充)
2014/12/12 Javascript
jQuery检测某个元素是否存在代码分享
2015/07/09 Javascript
js+html5操作sqlite数据库的方法
2016/02/02 Javascript
一个超简单的jQuery回调函数例子(分享)
2016/08/08 Javascript
JS获取checkbox的个数简单实例
2016/08/19 Javascript
设置jquery UI 控件的大小方法
2016/12/12 Javascript
javascript 注释代码的几种方法总结
2017/01/04 Javascript
微信小程序 登录的简单实现
2017/04/19 Javascript
jQuery选择器之属性筛选选择器用法详解
2017/09/19 jQuery
通过函数作用域和块级作用域看javascript的作用域链
2018/08/05 Javascript
[00:12]DAC SOLO赛卫冕冠军 VG.Paparazi灬展现SOLO技巧
2018/04/06 DOTA
Python批量转换文件编码格式
2015/05/17 Python
Python多项式回归的实现方法
2019/03/11 Python
Django REST Framework之频率限制的使用
2019/09/29 Python
python异步Web框架sanic的实现
2020/04/27 Python
HTML5头部标签的一些常用信息小结
2016/10/23 HTML / CSS
全球最大的游戏市场:G2A
2018/07/05 全球购物
教师找工作推荐信
2013/11/23 职场文书
合作协议书范文
2014/08/20 职场文书
2014年全国爱牙日宣传活动方案
2014/09/21 职场文书
如何写贫困证明申请书
2014/10/29 职场文书
2015年园林绿化工作总结
2015/05/23 职场文书
2016年企业先进员工事迹材料
2016/02/25 职场文书
创业计划书之寿司
2019/07/19 职场文书