keras调用预训练模型分类

在网上看到一篇博客,地址https://www.pyimagesearch.com/2017/03/20/imagenet-vggnet-resnet-inception-xception-keras/,是关于利用keras上预训练的模型进行图像分类的示例,于是我也自己动手运行了一下,效果,一般。

上代码

from keras.applications import ResNet50
from keras.applications import InceptionV3
from keras.applications import Xception # TensorFlow ONLY
from keras.applications import VGG16
from keras.applications import VGG19
from keras.applications import imagenet_utils
from keras.applications.inception_v3 import preprocess_input
from keras.preprocessing.image import img_to_array
from keras.preprocessing.image import load_img
import numpy as np

model_xception = Xception(weights="imagenet")
model_vgg16 = VGG16(weights="imagenet")
model_vgg19 = VGG19(weights="imagenet")
model_resnet50 = ResNet50(weights = "imagenet")
model_inceptionv3 = InceptionV3(weights="imagenet")

image = load_img("./images/cat.jpeg",target_size=(224,224))
image = img_to_array(image)
image = np.expand_dims(image, axis=0)

preds = model_xception.predict(image)
P = imagenet_utils.decode_predictions(preds)
print(P)

代码与博客相比有轻微改动,所做的事很简单,就是加载模型及权重,第一次加载权重的时候会从网上下载,速度还是挺快的,vgg16和vgg19稍慢,因为两个的权重都有五百多兆,其它模型在90兆左右。然后加载图像,注意拓展一下维度(也就是代表样本数的维度),之后就可以调用predic方法预测,输出十个(1,1000)的张量,最后调用imagenet_utils模块将输出与类别建立映射。

看下结果,加载一张猫的图片,vgg与resnet都可以判断出猫类,inception和xception分别预测pitcher和mixing_bowl,有点离谱。

再加载一个足球的图片,vgg与resnet都正确预测足球,inception与xception预测abacus和pitcher,无语。

再加载一张哈士奇,vgg预测爱斯基摩犬,resnet预测哈士奇,另外两个依然很迷。

此时,我无比怀疑inception系列到底是怎么在imagenet上取得好成绩的,这预测根本不靠谱。

后来,我注意到对于inception或xception,原博客有一步预处理,是inception自带的,经过预处理后,一下子就很准确了。具体来说就是下面这条语句。

image = preprocess(image)

里面究竟发生了什么,以后我会研究一下。

原文地址:https://www.cnblogs.com/wzyuan/p/9702979.html

时间: 2024-07-30 14:15:48

keras调用预训练模型分类的相关文章

迁移学习调用预训练模型出现Given input size: (512x3x3). Calculated output size: (512x-3x-3)错误

调用预训练模型ResNet18时报错:RuntimeError: Given input size: (512x3x3). Calculated output size: (512x-3x-3). Output size is too small at /opt/conda/conda-bld/pytorch_1535491974311/work/aten/src/THCUNN/generic/SpatialAveragePooling.cu:63 其解决方法是将倒数第二层的self.avgpo

keras中使用预训练模型进行图片分类

keras中含有多个网络的预训练模型,可以很方便的拿来进行使用. 安装及使用主要参考官方教程:https://keras.io/zh/applications/   https://keras-cn.readthedocs.io/en/latest/other/application/ 官网上给出了使用 ResNet50 进行 ImageNet 分类的样例 from keras.applications.resnet50 import ResNet50 from keras.preprocess

BERT 预训练模型及文本分类

BERT 预训练模型及文本分类 介绍 如果你关注自然语言处理技术的发展,那你一定听说过 BERT,它的诞生对自然语言处理领域具有着里程碑式的意义.本次试验将介绍 BERT 的模型结构,以及将其应用于文本分类实践. 知识点 语言模型和词向量 BERT 结构详解 BERT 文本分类 BERT 全称为 Bidirectional Encoder Representations from Transformer,是谷歌在 2018 年 10 月发布的语言表示模型.BERT 通过维基百科和书籍语料组成的庞

预训练模型与Keras.applications.models权重资源地址

什么是预训练模型 简单来说,预训练模型(pre-trained model)是前人为了解决类似问题所创造出来的模型.你在解决问题的时候,不用从零开始训练一个新模型,可以从在类似问题中训练过的模型入手. 比如说,你如果想做一辆自动驾驶汽车,可以花数年时间从零开始构建一个性能优良的图像识别算法,也可以从Google在ImageNet数据集上训练得到的Inception model(一个预训练模型)起步,来识别图像. 一个预训练模型可能对于你的应用中并不是100%的准确对口,但是它可以为你节省大量功夫

tensorflow利用预训练模型进行目标检测(一):预训练模型的使用

一.运行样例 官网链接:https://github.com/tensorflow/models/blob/master/research/object_detection/object_detection_tutorial.ipynb  但是一直有问题,没有运行起来,所以先使用一个别人写好的代码 上一个在ubuntu下可用的代码链接:https://gitee.com/bubbleit/JianDanWuTiShiBie  使用python2运行,python3可能会有问题 该代码由https

预训练模型:XLNet 和他的先辈们

预训练模型 在CV中,预训练模型如ImagNet取得很大的成功,而在NLP中之前一直没有一个可以承担此角色的模型,目前,预训练模型如雨后春笋,是当今NLP领域最热的研究领域之一. 预训练模型属于迁移学习,即在某一任务上训练的模型,经过微调(finetune)可以应用到其它任务上. 在NLP领域,最早的预训练模型可以说是word2vec, Mikolov应用语言模型进行训练,产生的词向量(word embeddings)可以用于其他任务上,这样的词向量在目标任务上,可以固定不变,也可以随着模型训练

开源一个安全帽佩戴检测数据集及预训练模型

本文开源了一个安全帽佩戴检测数据集及预训练模型,该项目已上传至github,点此链接,感觉有帮助的话请点star .同时简要介绍下实践上如何完成一个端到端的目标检测任务.可以看下效果图: 同时该模型也可以做人头检测,效果如下: 一.背景介绍 最近几年深度学习的发展让很多计算机视觉任务落地成为可能,这些任务渗透到了各行各业,比如工业安全,包含的任务如安全帽佩戴检测.高空坠物检测.异常事故检测(行人跌倒不起等)等等,这里以安全帽检测为例,简单介绍下如何完成一个端到端的任务,包括: 1. 业务场景分析

BERT预训练模型的演进过程!(附代码)

1. 什么是BERT BERT的全称是Bidirectional Encoder Representation from Transformers,是Google2018年提出的预训练模型,即双向Transformer的Encoder,因为decoder是不能获要预测的信息的.模型的主要创新点都在pre-train方法上,即用了Masked LM和Next Sentence Prediction两种方法分别捕捉词语和句子级别的representation. Bert最近很火,应该是最近最火爆的A

destoon实现调用当前栏目分类及子分类和三级分类的方法

调用当前栏目分类及子分类和三级分类是程序设计里常用的方法,本文就来详细讲述destoon实现调用当前栏目分类及子分类和三级分类的方法.具体操作如下: 在destoon中提供了如下的调用语句: 一级分类名: ? 1 {$m[catname]} 二级分类名: ? 1 {$c[catname]} 三级分类名: ? 1 {$b[catname]} 具体调用示例如下: 一.直接调用分类名称和链接: ? 1 2 3 4 5 6 {loop $maincat $i $m}<dl>    {php $chil