1. 程式人生 > >keras調用預訓練模型分類

keras調用預訓練模型分類

dict 拓展 span 類別 就是 num pan 維度 上下

在網上看到一篇博客,地址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)

裏面究竟發生了什麽,以後我會研究一下。

keras調用預訓練模型分類