Улучшение нейронной сети для определения языка жестов - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть набор данных из 1680 изображений примеров языка жестов.Набор данных разделен на 7 пользователей, каждый из которых выполняет по 10 раз каждую из 24 английских букв (без J и Z).Моя цель - определить, какое письмо представлено.

Я выбрал 6 пользователей для поезда и одного пользователя для теста.

Моя нейронная сеть выглядит так:

model = keras.models.Sequential()

model.add(keras.layers.Conv2D(32, (5, 5), input_shape=(128, 128, 3)))
model.add(BatchNormalization())
model.add(keras.layers.Activation('relu'))
model.add(keras.layers.MaxPooling2D())

model.add(keras.layers.Conv2D(64, (5, 5)))
model.add(BatchNormalization())
model.add(keras.layers.Activation('relu'))
model.add(keras.layers.MaxPooling2D())

model.add(keras.layers.Conv2D(128, (5, 5)))
model.add(BatchNormalization())
model.add(keras.layers.Activation('relu'))
model.add(keras.layers.MaxPooling2D())

model.add(BatchNormalization())

model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(512))
model.add(BatchNormalization())
model.add(keras.layers.Activation('relu'))

model.add(keras.layers.Dense(24))
model.add(keras.layers.Activation('softmax'))

x_train, x_test, y_train, y_test = split_train_test(images, users)
opt = keras.optimizers.rmsprop(lr=0.0001, decay=1e-6)

model.compile(loss='categorical_crossentropy',
              optimizer=opt,
              metrics=['accuracy'])

history = model.fit(x_train, y_train, batch_size=30, epochs=10,
    validation_data=(x_test, y_test)
).history

Но лучшая точность, которую я получаю, составляет 80%.Любые идеи, как улучшить?

1 Ответ

0 голосов
/ 13 февраля 2019
  1. Изменение модели

Вы можете попробовать добавить несколько слоев Conv2D, создавая блоки из двух слоев Conv2D перед каждым максимальным объединением одного.Вы также можете попытаться уменьшить размер ядра последних слоев.

Вот пример:

model = keras.models.Sequential()

model.add(keras.layers.Conv2D(32, (5, 5), input_shape=(128, 128, 3)))
model.add(keras.layers.Conv2D(32, (5, 5)))
model.add(BatchNormalization())
model.add(keras.layers.Activation('relu'))
model.add(keras.layers.MaxPooling2D())

model.add(keras.layers.Conv2D(64, (5, 5)))
model.add(keras.layers.Conv2D(64, (5, 5)))
model.add(BatchNormalization())
model.add(keras.layers.Activation('relu'))
model.add(keras.layers.MaxPooling2D())

model.add(keras.layers.Conv2D(128, (3, 3)))
model.add(keras.layers.Conv2D(128, (3, 3)))
model.add(BatchNormalization())
model.add(keras.layers.Activation('relu'))
model.add(keras.layers.MaxPooling2D())

model.add(BatchNormalization())

model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(512))
model.add(BatchNormalization())
model.add(keras.layers.Activation('relu'))

model.add(keras.layers.Dense(24))
model.add(keras.layers.Activation('softmax'))
Больше тренировок

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

Вот ссылка на этот класс керас: https://keras.io/preprocessing/image/#imagedatagenerator-class

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