Регрессия изображения: ширина квадратов - PullRequest
1 голос
/ 03 августа 2020

У меня есть набор данных с большим количеством изображений, и каждое из этих изображений показывает мне прямоугольник определенной ширины. Моя задача теперь состоит в том, чтобы автоматически определять ширину этих прямоугольников путем распознавания изображений, и я обучил CNN для регрессии изображения, как в приведенном ниже коде.

Однако этот CNN дает мне очень плохие значения, то есть mses в диапазоне 4 000 000, а также очень неточная оценка фактической ширины. Во время своих экспериментов я даже использовал набор обучающих данных в качестве набора тестовых данных, но даже здесь CNN, похоже, не узнал ничего полезного.

У вас есть идея, что я могу делать не так ? Возможно ли, что я каким-то образом искажаю сами изображения, читая их?

Я новичок в машинном обучении, поэтому меня радует каждый ваш ввод! : -)

Это модель:

def create_model():
  model = Sequential()
  model.add(Convolution2D(32, (3, 3), input_shape=(64, 64, 3), activation='relu'))
  model.add(Flatten())
  model.add(Dense(64, activation="relu"))
  model.add(Dense(1))
  model.compile(loss="mse", optimizer="adam")
  return model

А это обучающий код:

classifier = create_model()

// Getting image id and its corresponding square width
data = pd.read_csv('../data/data.csv')
id_width = data[['id', 'width']]

// Training the model
train_datagen = ImageDataGenerator() 
training_set = train_datagen.flow_from_dataframe(dataframe=id_width,     directory='../data/images', 
                                          x_col="id", y_col="width", has_ext=True, 
                                          class_mode="raw", target_size=(64, 64), 
                                          batch_size=32)


 classifier.fit_generator(
    training_set,
    epochs=50,
    validation_data=training_set)
...