keras使用预训练模型inception_v3识别图片

本文使用keras中inception_v3预训练模型识别图片。结合官方源码,如下内容。

其中,

  • 数据输入借助opencv-python,
  • 程序运行至model=InceptionV3()时按需(如果不存在就)下载模型训练数据,你也可以(分析源码keras\applications\inception_v3.py)在网址离线下载并移动至C:\Users\用户名\.keras\models下。
  • 所用imagenet_class_index.json(分析源码:keras\applicationsimagenet_utils.py)需要到网址下载。
  • 所用测试图片为博客头像
from keras.applications.inception_v3 import InceptionV3
import cv2
import numpy as np
import json

pre_x = []

input = cv2.imread('../data/cat.jpg')
input=cv2.resize(input, (299, 299))
input=cv2.cvtColor(input, cv2.COLOR_BGR2RGB)
pre_x.append(input) #input一张图片

pre_x=np.array(pre_x)

model=InceptionV3()
# model.summary()
preds=model.predict(pre_x/255.0)

with open('../data/imagenet_class_index.json') as f:
    js = json.load(f)

for p in preds: #遍历每个input
    s= [(js[str(i)],p[i]) for i in p.argsort()[-1:-4:-1]] #输出最大3个
    print(s)

输出:

[([‘n02112018’, ‘Pomeranian’], 0.81736), ([‘n02085620’, ‘Chihuahua’], 0.066418365), ([‘n02509815’, ‘lesser_panda’], 0.003906726)]

官网教程(只需要提供测试图片,如上会联网下载)代码:

from keras.applications.inception_v3 import InceptionV3
import numpy as np
from keras.applications.inception_v3 import preprocess_input
from keras.applications.inception_v3 import decode_predictions
from keras.preprocessing import image


model=InceptionV3()
# model.summary()

# 按照 InceptionV3 模型的默认输入尺寸
img = image.load_img('../data/rotman.jpg', target_size=(299, 299))

# 提取特征
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)

preds = model.predict(x)

print('Predicted:', decode_predictions(preds, top=3)[0])

Predicted: [(‘n02112018’, ‘Pomeranian’, 0.7385136), (‘n02085620’, ‘Chihuahua’, 0.13314979), (‘n02086079’, ‘Pekinese’, 0.0047504483)]

两者输出差别原因如图片缩放插值方式(PIL和opencv),归一化方式(preprocess_input)不同等。

你可能感兴趣的:(python与人工睿智,机器学习入门与放弃)