首页 > 解决方案 > Image_classification 使用 resnet50 模型和带有我的自定义标签的 imagenet db

问题描述

我正在研究图像分类问题(多类)。我正在使用 resnet50 模型(https://keras.io/applications/#classify-imagenet-classes-with-resnet50)以及使用 keras 的预训练数据库“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 预训练数据库的 resnet50 模型时,我收到的输出是“African-Elephant”(imagenet-label)。

因此,我不想将 imagenet 标签作为输出,而是将其调整为“大象”作为我数据集中的标签。

所以,不知道如何微调最后一层,将输出作为我的标签而不是 imagenet 标签。

请帮我解决这个问题。

谢谢,

Srknt73

标签: python-3.ximagedeep-learningimagenet

解决方案


weights参数应该是None(随机初始化)、 (ImageNet 上的imagenet预训练)或要加载的权重文件的路径。因此,您提供包含数据集标签的文件的路径


推荐阅读