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

时间:2022-10-26 16:58:15


本文使用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个

输出:

[([‘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)不同等。