не могу загрузить пользовательский набор данных в cnn, предварительно обученный для извлечения объектов - PullRequest
1 голос
/ 09 апреля 2020

привет, я новичок ie во всем этом, и я пытаюсь передать предварительно обученный CNN VGG16 моим собственным набором данных, а затем добиться извлечения объектов для каждого изображения с помощью numpy. но я принимаю эту ошибку: объект 'numpy .ndarray' не имеет атрибута 'load_img', на самом деле любая помощь это оценит. спасибо

from keras.applications.vgg16 import VGG16
from keras.preprocessing import image
from keras.applications.vgg16 import preprocess_input
import numpy as np
import matplotlib.pyplot as plt
import os

model = VGG16(weights='imagenet', include_top=False)
dir_images = "C:/Users/.../Desktop/db"
imgs = os.listdir(dir_images)
for imgnm in imgs:
    image = plt.imread(os.path.join(dir_images, imgnm))
img = image.load_img(image, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
features = model.predict(x)
#np.save('features.csv', features)

1 Ответ

0 голосов
/ 09 апреля 2020

Вы пересекаете модуль image из keras.preprocessing своими собственными фактическими изображениями, загруженными с помощью matplotlib.

Так что просто измените строку

image = plt.imread(os.path.join(dir_images, imgnm))

на что-то еще, например

arr_image = plt.imread(os.path.join(dir_images, imgnm))

, и тогда эта ошибка исчезнет.

Но обратите внимание, что image.load_img принимает путь в качестве входных данных, а не фактические изображения типа ndarray, поэтому вы должны вместо этого использовать load_img в l oop и удалите загрузку matplotlib.

...