keras 模块里面为我们提供了一个预训练好的模型,也就是开箱即可使用的图像识别模型
趁着国庆假期有时间我们就来看看这个预训练模型如何使用吧

可用的模型有哪些?

根据官方文档目前可用的模型大概有如下几个

  1. VGG16
  2. VGG19
  3. ResNet50
  4. InceptionResNetV2
  5. InceptionV3
    它们都被集成到了keras.applications 中

模型文件从哪来

当我们使用了这几个模型时,keras就会去自动下载这些已经训练好的模型保存到我们本机上面
模型文件会被下载到 ~/.keras/models/并在载入模型时自动载入
各个模型的信息:

如何使用预训练模型

使用大致分为三个步骤

  1. 导入所需模块
  2. 找一张你想预测的图像将图像转为矩阵
  3. 将图像矩阵放到模型中进行预测

关于图像矩阵的大小

VGG16,VGG19,ResNet50 默认输入尺寸是224x224
InceptionV3, InceptionResNetV2 模型的默认输入尺寸是299x299

代码demo

假设我现在有一张图片

我需要使用预训练模型来识别它
那我们就按照上面的步骤

第一步导入模块

from keras.applications import VGG16
from keras.applications import VGG19
from keras.applications import ResNet50
from keras.applications import InceptionV3
from keras.applications import InceptionResNetV2

第二步将图像转为矩阵
这里我们需要使用 keras.preprocessing.image 里面 img_to_array 来帮我们转

 image = cv2.imread(img)image = cv2.resize(image, self.dim)image = img_to_array(image)image = np.expand_dims(image, axis=0)

第三步 将图像矩阵丢到模型中进行预测

predict = model.predict(preprocess)
decode_predict = decode_predictions(predict)

完整代码如下

  1. 配置文件
  2. 获取配置文件的模块
  3. 图像预测模块

配置文件

[image]
image_path=/home/fantasy/Pictures/cat.jpg
[model]
model=vgg16
[weights]
weight=imagenet

获取配置文件的模块

import configparsercf = configparser.ConfigParser()cf.read("configs.cnf")def getOption(section, key):return cf.get(section, key)

图像预测模块以及主要实现

# keras 提供了一些预训练模型,也就是开箱即用的 已经训练好的模型
# 我们可以使用这些预训练模型来进行图像识别,目前的预训练模型大概可以识别2.2w种类型的东西
# 可用的模型:
# VGG16
# VGG19
# ResNet50
# InceptionResNetV2
# InceptionV3
# 这些模型被集成到 keras.applications 中
# 当我们使用了这些内置的预训练模型时,模型文件会被下载到 ~/.keras/models/并在载入模型时自动载入
# VGG16,VGG19,ResNet50 默认输入尺寸是224x224
# InceptionV3, InceptionResNetV2 模型的默认输入尺寸是299x299# 使用内置的预训练模型的步骤
# step1 导入需要的模型
# step2 将需要识别的图像数据转换为矩阵(矩阵的大小需要根据模型的不同而定)
# step3 将图像矩阵丢到模型里面进行预测
# ----------------------------------------------------------------------------------
# step1
import cv2
import numpy as np
from getConfig import getOption
from keras.applications import VGG16
from keras.applications import VGG19
from keras.applications import ResNet50
from keras.applications import InceptionV3
from keras.applications import InceptionResNetV2
from keras.applications import imagenet_utils
from keras.applications.imagenet_utils import decode_predictions
from keras.preprocessing.image import load_img
from keras.preprocessing.image import img_to_array
from keras.applications.inception_v3 import preprocess_inputclass ImageTools(object):"""使用keras预训练模型进行图像识别"""def __init__(self, img, model, w):self.image = imgself.model = modelself.weight = w# step2def image2matrix(self, img):"""将图像转为矩阵"""image = cv2.imread(img)image = cv2.resize(image, self.dim)image = img_to_array(image)image = np.expand_dims(image, axis=0)return image@propertydef dim(self):"""图像矩阵的维度"""if self.model in ["inceptionv3", "inceptionresnetv2"]:shape = (299, 299)else:shape = (224, 224)return shape@propertydef Model(self):"""模型"""models = {"vgg16": VGG16,"vgg19": VGG19,"resnet50": ResNet50,"inceptionv3": InceptionV3,"inceptionresnetv2": InceptionResNetV2}return models[self.model]# step3 def prediction(self):"""预测"""model = self.Model(weights=self.weight)if self.model in ["inceptionv3", "inceptionresnetv2"]:preprocess = preprocess_input(self.image2matrix(self.image))else:preprocess = imagenet_utils.preprocess_input(self.image2matrix(self.image))predict = model.predict(preprocess)decode_predict = decode_predictions(predict)for (item, (imgId, imgLabel, proba)) in enumerate(decode_predict[0]):print("{}, {}, {:.2f}%".format(item + 1, imgLabel, proba * 100))if __name__ == "__main__":image = getOption("image", "image_path")model = getOption("model", "model")weight = getOption("weights", "weight")tools = ImageTools(image, model, weight)tools.prediction()

运行起来时会将模型文件下载到本机,因此第一次运行会比较久(有可能出现的情况就是下载不了,被墙了)

我们来看看使用VGG16的模型预测输出的效果如何

最后如果大家需要使用其他模型时修改 配置文件的model 即可

以上就是keras预训练模型的使用啦,最后祝大家国庆节玩的愉快~

使用keras内置的模型进行图片预测相关推荐

  1. 关于微信内置浏览器,打开图片上传功能,调用的问题

    关于微信内置浏览器,打开图片上传功能,调用的问题 前段时间,项目完结测试的时候,同事打开魅族手机测试,无意中发现一个奇葩的问题! 描述: 显示的是文件系统,列表式的,没有调用相机的功能图标,为什么呢? ...

  2. 微信内置浏览器无法使用input图片上传和lrz.bundle.js图片压缩插件

    标题 微信内置浏览器无法使用input图片上传和lrz.bundle.js图片压缩插件 图片上传功能作为一个比较常见的功能,有时候需要在微信内置浏览器里打开,但是有些型号的手机会出现打不开的现象,点击 ...

  3. cocoscreator实现微信内置浏览器点击图片识别图中二维码

    最近在做一个微信内置浏览器的小游戏,小游戏中有一个二维码,需要用户点击长按二维码弹出系统识别二维码按钮. 下面是解决步骤: 1.cocoscreator是如何实现在浏览器中渲染游戏画面的 看图中箭头处 ...

  4. html微信内置浏览器点击图片放大,双指缩放,附源码(自测可用)

    本人用的是vue框架 引用微信的JS <script type="text/javascript" src="http://res.wx.qq.com/open/j ...

  5. 使用微信内置浏览器预览图片

    在微信H5开发中预览图片,可以使用其他的一些图片预览插件,但是这样却不能把其中的某张图片发送给好友.对于 这种情况可以使用微信内置浏览器图片预览功能,就可以解决这个问题.不说废话直接看代码: 1.首先 ...

  6. matlab中内置D-STATCOM模型

    在matlab命令行中输入上图:power_dstatcom_pwm,回车运行 就会出现下面这个模型,然后运行可以看波形

  7. keras从入门到放弃(十六)内置预训练网络VGG

    什么是预训练网络 一个常用.高效的在小图像数据集上深度学习的方法就是利用预训练网络.一个预训练网络只是简单的储存了之前在大的数据集训练的结果,通常是大的图像分类任务.如果原始的数据集已经足够大,足够一 ...

  8. Paddle内置的网络模型

    简 介: 本文根据文档 模型组网 中给出的信息,总结了在Paddle建立常见到的网络的三种方法. 关键词: paddle,net,内置网络 #mermaid-svg-Wdzr3isBaQEmNZ95 ...

  9. 深度学习系列笔记——贰 (基于Tensorflow2 Keras搭建的猫狗大战模型 三)

    深度学习系列笔记--贰 (基于Tensorflow Keras搭建的猫狗大战模型 一) 深度学习系列笔记--贰 (基于Tensorflow Keras搭建的猫狗大战模型 二) 前面两篇博文已经介绍了如 ...

最新文章

  1. Spark Machine Learning 03 Spark上数据的获取、处理与准备
  2. 802.11概述及帧结构分析
  3. 实现MVC模式的Web应用程序
  4. 查询score中选学多门课程的同学中分数为非最高分成绩的记录。
  5. 几个OpenSource的源代码管理软件
  6. jquery.cookie.js 使用小结
  7. [-1]是也乎,( ̄▽ ̄)
  8. 向指定的服务器端口发送信息,向指定服务器的指定端口发送UDP包
  9. QLV格式的视频怎么在线转化成MP4
  10. 实习成长之路:下层应用调不到上层方法怎么办?GoogleGuava事件上报来打配合
  11. 当下学习Linux该选择哪个产品?
  12. C语言题目——三子棋游戏
  13. 面试题:ES和Solr的区别是什么?
  14. 材料科学需要用计算机吗,计算机在材料科学中的运用分析
  15. Windows2008虚拟机扩容C盘
  16. 洞察·分析·管理 | 解读良品铺子的客户体验管理三部曲
  17. Nginx的rewrite(地址重定向)剖析
  18. java 支付宝 H5支付
  19. pythonista模板_Python——Code Like a Pythonista: Idiomatic Python
  20. Win32串口API

热门文章

  1. Excel2013破解vba工程密码以及工作表保护密码
  2. 荣耀手机动态修改电池数据
  3. oracle修改数据库用户名密码,修改oracle数据库用户名及密码的方法
  4. linux拷贝文件提示没权限,Ubuntu复制文件时提示Permission denied怎么解决?
  5. 如何注册微信公众号?
  6. scipy中abnormal termination in LNSRCH
  7. 前端基础学习——带你全面掌握HTML语言
  8. TWS耳机充电仓方案分享
  9. SAP中批量更改会计凭证文本处理实例
  10. 论某教育机构考试系统设计