使用带有我的自定义标签的imagenet db和resnet50模型的image_classification

时间:2019-09-04 06:42:01

标签: python-3.x image deep-learning imagenet

我正在研究图像分类问题(多类)。 我使用的是使用keras的resnet50模型(https://keras.io/applications/#classify-imagenet-classes-with-resnet50)以及经过预训练的数据库“ imagenet”

我正在获取传递给模型的图像的输出标签。

但是现在, 我拥有自己的数据集的图像数据和标签数据。

当我将图像传递给resnet50模型时,它会返回已经受过训练的imagenet标签。现在,在这里,我希望将输出作为我自己的标签(已存在于数据集中)而不是获取imagenet标签。

如何在keras中使用imagenet db对resnet50模型中的标签进行微调

我已经尝试过单独使用resnet50模型,并且效果很好。但是,如何将输出更改为我自己的标签,而不是imagenet预先训练的标签。


from keras.applications.resnet50 import ResNet50
from keras.preprocessing import image
from keras.applications.resnet50 import preprocess_input, decode_predictions
import numpy as np
import os

model = ResNet50(weights='imagenet')

path='/Users/resnet-sample/'

img_path=os.listdir(path)
count=0
for i in img_path:
    img = image.load_img(path+i, target_size=(224, 224))
    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=1)[0], i)
    count=count+1
print(preds)

示例:

我有一个jpg格式的大象图像,并在我的数据集中将其标记为“大象”。

当我将此图像传递给使用imagenet预训练的db的resnet50模型时,收到的输出是“非洲大象”(imagenet标签)。

因此,我不想将imagenet标签作为输出,而是希望将其调整为数据集中的'elephant'作为标签。

因此,不确定如何微调将输出作为我的标签而不是imagenet标签的最后一层。

请帮助我。

谢谢

Srknt73

1 个答案:

答案 0 :(得分:0)

weights参数应为None(随机初始化),imagenet(在ImageNet上进行预训练)或要加载的权重文件的路径。因此,您将给出包含数据集标签的文件的路径