Top.Mail.Ru
Ответы

Python. Нейросеть Tensorflow+Keras

Подскажите пожалуйста, решил побаловаться с нейросетями для распознавания объектов на изображениях. Нашел множество примеров реализации классификатора изображений. Немного не понимаю как добиться того, чтобы находился именно необходимый объект. То есть, если я ищу на большом изображении стола кружку, а в обучающем датасете были, например, кружка, ручка и книга, то даже просто кусок стола он обозначит не "-" или "non", а как один из этих объектов.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
 # Считывание изображения
img = Image.open(path)

# Загрузка модели 
model = tf.keras.models.load_model("model.h5")

# Размеры матрицы
widthMatr = 100 
heightMatr = 100

# Шаг смещения матрицы
widthSmeshenie = widthMatr/3 
heightSmeshenie = heightMatr/3 
 
# Количество проходов по ширине 
widthNumMatr = int(img.size[0]/widthSmeshenie)
# По высоте
heightNumMatr = int(img.size[1]/heightSmeshenie)
# Итоговое количество проходов
allPhoto = widthNumMatr*heightNumMatr

array_img = [] 
array_result = [] 
array_search = [] 
# Проходим по большому изображению
for y in range(0, heightNumMatr): 
    for x in range(0, widthNumMatr):
        img_crop = img.crop((widthSmeshenie*x, 
                             heightSmeshenie*y, 
                             widthSmeshenie*x+widthMatr, 
                             heightSmeshenie*y+widthMatr)) 
        array_img.append(img_crop)
        img = img.convert('L')  
        img = (np.expand_dims (img, 0))  
        predictions = model.predict(img)  
        Class_Names = Read_Class_Names()
        Result = Class_Names[np.argmax(predictions[0])] 
        array_result.append(Result)

# Отображение массива изображений с решением нейросети
plt.figure(figsize=(widthNumMatr, heightNumMatr)) 
for i in range(0, allPhoto): 
    plt.subplot(heightNumMatr, widthNumMatr, i+1) 
    plt.xticks([]) 
    plt.yticks([]) 
    plt.grid(False) 
    plt.imshow(array_img[i], cmap=plt.cm.binary) 
    plt.xlabel(array_result[i])      
plt.show()
 
По дате
По рейтингу
Аватар пользователя
Новичок
9мес

Обучаемая выборка обязательно нормируется. В данном случае входные картинки приводится к одинаковому размеру. Что-то накручено много для простого решения resample (Pillow). В качестве гипотезы: мабудь в этом ошибка. Там зачем-то crop задействован.
100х100 пикселов для распознавания таких сложных объектов по мне мало будет