使用keras內(nèi)置的模型進行圖片預測實例
keras 模塊里面為我們提供了一個預訓練好的模型,也就是開箱即可使用的圖像識別模型
趁著國慶假期有時間我們就來看看這個預訓練模型如何使用吧
可用的模型有哪些?
根據(jù)官方文檔目前可用的模型大概有如下幾個
1、VGG16
2、VGG19
3、ResNet50
4、InceptionResNetV2
5、InceptionV3
它們都被集成到了keras.applications 中
模型文件從哪來
當我們使用了這幾個模型時,keras就會去自動下載這些已經(jīng)訓練好的模型保存到我們本機上面
模型文件會被下載到 ~/.keras/models/并在載入模型時自動載入
各個模型的信息:
如何使用預訓練模型
使用大致分為三個步驟
1、導入所需模塊
2、找一張你想預測的圖像將圖像轉為矩陣
3、將圖像矩陣放到模型中進行預測
關于圖像矩陣的大小
VGG16,VGG19,ResNet50 默認輸入尺寸是224x224
InceptionV3, InceptionResNetV2 模型的默認輸入尺寸是299x299
代碼demo
假設我現(xiàn)在有一張圖片
我需要使用預訓練模型來識別它
那我們就按照上面的步驟
第一步導入模塊
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 configparser cf = configparser.ConfigParser() cf.read("configs.cnf") def getOption(section, key): return cf.get(section, key)
圖像預測模塊以及主要實現(xiàn)
# keras 提供了一些預訓練模型,也就是開箱即用的 已經(jīng)訓練好的模型 # 我們可以使用這些預訓練模型來進行圖像識別,目前的預訓練模型大概可以識別2.2w種類型的東西 # 可用的模型: # VGG16 # VGG19 # ResNet50 # InceptionResNetV2 # InceptionV3 # 這些模型被集成到 keras.applications 中 # 當我們使用了這些內(nèi)置的預訓練模型時,模型文件會被下載到 ~/.keras/models/并在載入模型時自動載入 # VGG16,VGG19,ResNet50 默認輸入尺寸是224x224 # InceptionV3, InceptionResNetV2 模型的默認輸入尺寸是299x299 # 使用內(nèi)置的預訓練模型的步驟 # step1 導入需要的模型 # step2 將需要識別的圖像數(shù)據(jù)轉換為矩陣(矩陣的大小需要根據(jù)模型的不同而定) # 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_input class ImageTools(object): """ 使用keras預訓練模型進行圖像識別 """ def __init__(self, img, model, w): self.image = img self.model = model self.weight = w # step2 def 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 @property def dim(self): """ 圖像矩陣的維度 """ if self.model in ["inceptionv3", "inceptionresnetv2"]: shape = (299, 299) else: shape = (224, 224) return shape @property def 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()
運行起來時會將模型文件下載到本機,因此第一次運行會比較久(有可能出現(xiàn)的情況就是下載不了,被墻了)
我們來看看使用VGG16的模型預測輸出的效果如何
最后如果大家需要使用其他模型時修改 配置文件的model 即可
以上這篇使用keras內(nèi)置的模型進行圖片預測實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Python實現(xiàn)PPT幻燈片的添加、刪除或隱藏操作
PowerPoint文檔是商務、教育、創(chuàng)意等各領域常見的用于展示、教育和傳達信息的格式,在制作PPT演示文稿時,靈活地操作幻燈片是提高演示效果、優(yōu)化內(nèi)容組織的關鍵步驟,本文給大家介紹了Python 操作PPT幻燈片- 添加、刪除、或隱藏幻燈片,需要的朋友可以參考下2024-08-08分享Pytest fixture參數(shù)傳遞的幾種方式
這篇文章主要分享的是Pytest fixture參數(shù)傳遞的幾種方式,文章基于python的相關資料展開對主題的詳細介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-04-04Python對文件和目錄進行操作的方法(file對象/os/os.path/shutil 模塊)
下面小編就為大家?guī)硪黄狿ython對文件和目錄進行操作的方法(file對象/os/os.path/shutil 模塊)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05