Локализация ориентира с использованием CNN - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь выполнить локализацию ориентиров на изображениях, используя CNN в Keras.

У меня есть 800 изображений, и я изменяю их размер в 320x240 и нормализую их между 0 и 1. Мои аннотации находятся в XML файл, и я помещаю их в файл CSV, а затем создаю файл .npy для изображений и аннотаций.

Я использую оптимизатор Адама с learning rate = 0.001. Потеря - custom rmse, а метрика - mae.

# RMSE
from keras import backend
def rmse(y_true, y_pred):
    return backend.sqrt(backend.mean(backend.square(y_pred - y_true)))

Я пробовал batch size = 32, 50, 60, 70. Функция активации relu, за исключением последнего слоя Dense, за исключением того, что это проблема регрессии.

Это моя архитектура CNN:

Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_1 (Conv2D)            (None, 240, 320, 32)      320       
_________________________________________________________________
batch_normalization_1 (Batch (None, 240, 320, 32)      128       
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 120, 160, 32)      9248      
_________________________________________________________________
batch_normalization_2 (Batch (None, 120, 160, 32)      128       
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 60, 80, 64)        18496     
_________________________________________________________________
batch_normalization_3 (Batch (None, 60, 80, 64)        256       
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 30, 40, 64)        36928     
_________________________________________________________________
batch_normalization_4 (Batch (None, 30, 40, 64)        256       
_________________________________________________________________
conv2d_5 (Conv2D)            (None, 15, 20, 64)        36928     
_________________________________________________________________
batch_normalization_5 (Batch (None, 15, 20, 64)        256       
_________________________________________________________________
conv2d_6 (Conv2D)            (None, 8, 10, 64)         36928     
_________________________________________________________________
batch_normalization_6 (Batch (None, 8, 10, 64)         256       
_________________________________________________________________
flatten_1 (Flatten)          (None, 5120)              0         
_________________________________________________________________
dense_1 (Dense)              (None, 512)               2621952
_________________________________________________________________
dense_2 (Dense)              (None, 256)               131328
_________________________________________________________________
dense_3 (Dense)              (None, 136)               34952

Слоя пула нет, потому что изображение размер уменьшен на strides = 2 в слое конв.

136 - мои выходные координаты x, y.

Результат всегда похож на этот, и я прекращаю изучать после 25-30 эпох, потому что val_loss остается стабильным около 44:

Train on 661 samples, validate on 166 samples

Epoch 1/500
 - 71s - loss: 139.1782 - mae: 135.1071 - val_loss: 157.1107 - val_mae: 154.2357
Epoch 2/500
 - 72s - loss: 52.8662 - mae: 43.3649 - val_loss: 157.6703 - val_mae: 154.7970
Epoch 3/500
 - 68s - loss: 31.2599 - mae: 24.8241 - val_loss: 157.5264 - val_mae: 154.6493
Epoch 4/500
 - 68s - loss: 26.4959 - mae: 20.9077 - val_loss: 157.2360 - val_mae: 154.3627
Epoch 5/500
 - 69s - loss: 23.6135 - mae: 18.6571 - val_loss: 157.1423 - val_mae: 154.2634
Epoch 6/500
 - 69s - loss: 22.0984 - mae: 17.4924 - val_loss: 157.0344 - val_mae: 154.1478
Epoch 7/500
 - 68s - loss: 20.1804 - mae: 16.0166 - val_loss: 156.7843 - val_mae: 153.9042
Epoch 8/500

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

Как я могу улучшить свою модель?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...