Координационная регрессия Keras CNN только дает среднее значение - PullRequest
0 голосов
/ 12 мая 2018

Я пытался реализовать CNN, который при (75x75) изображении детектора будет выводить (x, y) координату источника для этого изображения.Каждое изображение имеет функции, которые позволяют определить источник.Проблема, с которой я столкнулся, заключается в том, что регрессор, который выводит координаты x, y, всегда возвращает среднее значение пикселя для всех обучающих данных.Я попытался реализовать регрессор, описанный в этой статье: https://arxiv.org/abs/1803.10698, но он по-прежнему дает среднее значение пикселя как все предсказания.Краткая версия моей модели находится здесь:

model = Sequential()

# Base Conv layer
model.add(Conv2D(32, kernel_size=patch_size, strides=(1, 1),
                    activation='relu', padding='same',
                    input_shape=(75, 75, 1)))
model.add(Conv2D(64, patch_size, strides=(1, 1), activation='relu', padding=optimizer))
model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))
for i in range(num_conv):
    model.add(Conv2D(64, patch_size, strides=(1, 1), activation='relu', padding='same))
    model.add(Conv2D(64, patch_size, strides=(1, 1), activation='relu', padding='same))
    model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))

model.add(Flatten())

for i in range(num_dense):
    model.add(Dense(512, activation='linear'))
    model.add(Dropout(dropout_layer))


# Final Dense layer
# 2 so have one for x and one for y
model.add(Dense(2, activation='linear'))
model.compile(optimizer='adam', loss='mse', metrics=['mae'])

У меня нет представителя для публикации изображений источников, но вот правда и выводы, когда она обучена на 42000 изображений:

https://i.imgur.com/63ufMqp.png https://i.imgur.com/AbX9vlC.png https://i.imgur.com/FLzKtFp.png https://i.imgur.com/XHKiPYz.png

Как вы можете видеть, это ужасно, все оценки находятся в этой одной точке при среднем значении всех координат x, y.в то время как фактические значения создают круг, охватывающий весь детектор.Я не уверен, как заставить это фактически вывести правильные значения.Я понимаю, что среднеквадратическая ошибка как потеря, вероятно, должна сделать оценку центральной величины, поскольку это минимальное квадратичное расстояние от всех источников, но я не уверен, как еще это попробовать, так как я хочу минимизировать расстояние междукаждое предсказание и его ярлык индивидуально.

...