Локализация объектов Керас | Предсказывает все изображение

1

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

  • Набор данных Stanford Cars Dataset содержит около 8144 изображений автомобилей.

  • Я не пытаюсь предсказать, какой это тип автомобиля, только его положение

  • Объекты представляют собой изображения в оттенках серого 200x200, масштаб которых изменяется между [0,1]

  • Ярлыки есть LeftX, TopY, Ширина, Высота. Также масштабируется между [0,1]

Вот модель:

model = Sequential()

model.add(Conv2D(64,(3,3),input_shape = (200,200,1)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=2))

model.add(Conv2D(64,(3,3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=2))

model.add(Flatten())
model.add(Dense(4))
model.add(Activation("sigmoid"))

model.compile(loss="mean_squared_error",optimizer="Adam",metrics=[])
model.fit(X,y,batch_size=32, validation_split=0,epochs=30,verbose=2)

Модель прогнозов в основном всегда такова: [0,0,1,1].

  • 0
    Почему вы кормите изображения, масштабированные до области 1? Почему вы его масштабируете?
  • 0
    На самом деле вам не нужен последний слой model.add (Activation ("sigmoid")), потому что это регрессионная модель
Показать ещё 1 комментарий
Теги:
machine-learning
keras
conv-neural-network

1 ответ

1
Лучший ответ

Вы можете попробовать это, я использовал предварительно обученную сеть Xception, чтобы функционировать в качестве экстрактора функций. Вы можете поэкспериментировать с другими моделями Imagenet, такими как inception, resnet50 и т.д. Tf.keras.applications предоставляет большое количество предварительно обученных клиентов. Использование предварительно обученной сети может помочь вам получить хорошие результаты даже при небольшом количестве данных. больше о трансферном обучении

from tensorflow.python.keras.layers import GlobalAveragePooling2D, Dense, Input
from tensorflow.python.keras.applications.xception import Xception  

inp = Input(shape=(299, 299, 3))
base_model = Xception(include_top=False, input_tensor=inp, weights='imagenet')
y = base_model.layers[-1].output
y = GlobalAveragePooling2D()(y)
y = Dense(4, activation='sigmoid')(y)
model = Model(inputs=inp, outputs=y)

выходная форма [Нет, 4], что означает, что каждая метка состоит из 4 чисел

  • х - х координата центра ограничительной рамки
  • y - y координата центра ограничительной рамки
  • w - ширина ограничительной рамки
  • h - высота ограничительной рамки

Метки масштабируются от 0 до 1. (масштабируется по размерам изображения)

образец ограничительной рамки для изображения Изображение 174551

[0.48, 0.4 , 0.58, 0.37]
  • 0
    Здравствуйте и спасибо за ваш ответ! Я не могу проверить это сегодня вечером, но обязательно попробую завтра. В общем, если я хорошо понимаю, я должен предварительно загрузить модель так же, как вы, и обучить модель с моими объектами (пиксели изображения) и надписями (координаты, ширина и высота), это правильно?
  • 1
    да, это верно, но если вы используете мой код, вы должны убедиться, что ваши метки имеют правильный формат и масштабируются до [0,1]
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню