Keras Same Feature Extraction from Different Images

青春壹個敷衍的年華 提交于 2020-07-10 06:59:12

问题


I'm using Keras' pre-trained model for feature extraction in two images, however they gave the same outcome (array_equal = True). I've tried other model like VGG16 and Resnet50 but the results are the same. Am I writing the code wrong or is it the limitation of pre-trained model? Is there anything I can do to extract different features? Thanks!

import cv2
from keras.applications.inception_v3 import InceptionV3
from keras.applications.inception_v3 import preprocess_input

model = InceptionV3(weights='imagenet', include_top=False)

def get_img_vector(path):

    im = cv2.imread(path)
    im = cv2.resize(im,(224,224))
    img = preprocess_input(np.expand_dims(im.copy(), axis=0))
    resnet_feature = model.predict(img)

    return np.array(resnet_feature)

arr1 = get_img_vector('image1.png')
arr2 = get_img_vector('image2.png')

np.array_equal(arr1,arr2)

Below are my two images:


回答1:


I think that the file format png create the image loading problem. Currently cv2.imread a png file and cv2.imshow it result in a black screen, which make two images identical. Saving the file from png to jpg and trying it again.




回答2:


If you run the code, you should see some warning like this,

 WARNING: TensorFlow:Model was constructed with shape (None, 299, 299, 3)
 for input Tensor("input_3:0", shape=(None, 299, 299, 3), dtype=float32),
 but it was called on an input with incompatible shape (None, 224, 224, 3).

Change your code to

im = cv2.resize(im,(299,299))

Now about the similar features, pre-trained imagenet can classify 1000 classes and the given picture. If you decode then you'll see that both of them will give you the same output. And you'll see even for the top 5 predictions, confidence is very low, and most similar is to the image of a nematode.

[[('n01930112', 'nematode', 0.11086103), ('n03729826', 'matchstick', 0.08173305), ('n03196217', 'digital_clock', 0.034744), ('n03590841', "jack-o'-lantern", 0.017616412), ('n04286575', 'spotlight', 0.016781498)]]

However, if you want to train a model that can differentiate these two images then you can use the pre-trained models for transfer learning with your own dataset.



来源:https://stackoverflow.com/questions/62632757/keras-same-feature-extraction-from-different-images

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!