Я пытаюсь написать модель для «перевода» языка жестов в реальном времени. Я пытаюсь сделать это следующим образом: https://github.com/dgovor/Sign-Language-Translator, но с набором данных. Я использую ASL Citizen в качестве набора данных, из которого извлекаю ключевые точки с помощью медиапайпа, которые затем использую в качестве набора данных. Набор данных изначально разделен на Тестовые — 30 тысяч видео, Обучающие — 40 тысяч, Валидационные — 12 тысяч и содержит 2300 классов. К сожалению, каждая модель, которую я написал до сих пор, и методы изменения данных не позволяют изучить модель более чем на 70%, что довольно странно, потому что я делал такие вещи, как:
первоначально данные были разделены максимум на 200 кадров (форма данных — (200, 126))
заполнение и маскирование до значения -999
ограничение количества данных максимум 100 кадров и взятие каждого второго кадра, если более 200 кадров (форма данных - (100, 126))
без маскировки и значения заполнения 0,0
взвешивание классов
различные размеры пакетов
использование SMOTE с изменением данных в 2D-массивы
изменение суммы данных в тестировании, обучении и проверке папки на: 10k, 59k, 13k и повторяя описанные выше шаги
используя и проверяя другие разные модели каждым из вышеперечисленных способов
И независимо от того, имеют ли данные другую форму или более данных обучения, результат остается прежним и обучается максимум около 70%, что более странно, так это обучение, имеющее, например, такие значения:
Как вы можете видеть, точность Val в начале выше, чем точность обучения, и я думаю, что этого не должно происходить, потому что мой отсев составляет всего 0,1, позже в обучении все по-другому, и точность обучения выше:
Я действительно не знаю, что я могу сделать еще, чтобы достичь точности хотя бы 80 %, действительно ли максимальная точность составляет 70 %, данные неверны, модель слишком проста или, возможно, существует неправильная техника, которую я использую? А если эта штука с большей точностью в начале - это нормально? Я действительно хочу узнать, как я могу создавать такие модели, и знаю, что я как бы застрял в этом и больше не знаю, смогу ли я что-то с этим поделать. Может ли кто-нибудь взглянуть на эту проблему и дать мне совет? Большое спасибо за любые идеи, которые я могу попробовать или проверить
Я пытаюсь написать модель для «перевода» языка жестов в реальном времени. Я пытаюсь сделать это следующим образом: https://github.com/dgovor/Sign-Language-Translator, но с набором данных. Я использую ASL Citizen в качестве набора данных, из которого извлекаю ключевые точки с помощью медиапайпа, которые затем использую в качестве набора данных. Набор данных изначально разделен на Тестовые — 30 тысяч видео, Обучающие — 40 тысяч, Валидационные — 12 тысяч и содержит 2300 классов. К сожалению, каждая модель, которую я написал до сих пор, и методы изменения данных не позволяют изучить модель более чем на 70%, что довольно странно, потому что я делал такие вещи, как: [list] [*]первоначально данные были разделены максимум на 200 кадров (форма данных — (200, 126)) [*]заполнение и маскирование до значения -999 [*]ограничение количества данных максимум 100 кадров и взятие каждого второго кадра, если более 200 кадров (форма данных - (100, 126)) [*]без маскировки и значения заполнения 0,0 [*]взвешивание классов [*]различные размеры пакетов [*]использование SMOTE с изменением данных в 2D-массивы [*]изменение суммы данных в тестировании, обучении и проверке папки на: 10k, 59k, 13k и повторяя описанные выше шаги [*]используя и проверяя другие разные модели каждым из вышеперечисленных способов И независимо от того, имеют ли данные другую форму или более данных обучения, результат остается прежним и обучается максимум около 70%, что более странно, так это обучение, имеющее, например, такие значения: [/list] [code]Epoch 1/5000 1850/1850 ━━━━━━━━━━━━━━━━━━━━ 0s 49ms/step - categorical_accuracy: 3.4063e-04 - loss: 7.9569 Epoch 1: val_categorical_accuracy improved from -inf to 0.00300, saving model to Model/model.keras 1850/1850 ━━━━━━━━━━━━━━━━━━━━ 102s 53ms/step - categorical_accuracy: 3.4087e-04 - loss: 7.9568 - val_categorical_accuracy: 0.0030 - val_loss: 7.1603 - learning_rate: 5.0000e-04 Epoch 2/5000 1849/1850 ━━━━━━━━━━━━━━━━━━━━ 0s 48ms/step - categorical_accuracy: 0.0056 - loss: 6.8887 Epoch 2: val_categorical_accuracy improved from 0.00300 to 0.03792, saving model to Model/model.keras 1850/1850 ━━━━━━━━━━━━━━━━━━━━ 95s 51ms/step - categorical_accuracy: 0.0056 - loss: 6.8883 - val_categorical_accuracy: 0.0379 - val_loss: 5.6242 - learning_rate: 5.0000e-04 Epoch 3/5000 1850/1850 ━━━━━━━━━━━━━━━━━━━━ 0s 48ms/step - categorical_accuracy: 0.0525 - loss: 5.3936 Epoch 3: val_categorical_accuracy improved from 0.03792 to 0.11668, saving model to Model/model.keras 1850/1850 ━━━━━━━━━━━━━━━━━━━━ 96s 52ms/step - categorical_accuracy: 0.0526 - loss: 5.3934 - val_categorical_accuracy: 0.1167 - val_loss: 4.4322 - learning_rate: 5.0000e-04 Epoch 4/5000 1850/1850 ━━━━━━━━━━━━━━━━━━━━ 0s 49ms/step - categorical_accuracy: 0.1578 - loss: 4.1421 Epoch 4: val_categorical_accuracy improved from 0.11668 to 0.19252, saving model to Model/model.keras 1850/1850 ━━━━━━━━━━━━━━━━━━━━ 97s 52ms/step - categorical_accuracy: 0.1578 - loss: 4.1420 - val_categorical_accuracy: 0.1925 - val_loss: 3.7442 - learning_rate: 5.0000e-04 Epoch 5/5000 1849/1850 ━━━━━━━━━━━━━━━━━━━━ 0s 50ms/step - categorical_accuracy: 0.2696 - loss: 3.3104 Epoch 5: val_categorical_accuracy improved from 0.19252 to 0.37574, saving model to Model/model.keras 1850/1850 ━━━━━━━━━━━━━━━━━━━━ 100s 54ms/step - categorical_accuracy: 0.2696 - loss: 3.3104 - val_categorical_accuracy: 0.3757 - val_loss: 2.6425 - learning_rate: 5.0000e-04 [/code] Как вы можете видеть, точность Val в начале выше, чем точность обучения, и я думаю, что этого не должно происходить, потому что мой отсев составляет всего 0,1, позже в обучении все по-другому, и точность обучения выше: [code]Epoch 81/5000 1850/1850 ━━━━━━━━━━━━━━━━━━━━ 0s 79ms/step - categorical_accuracy: 0.8465 - loss: 0.4662 Epoch 81: val_categorical_accuracy did not improve from 0.67887 1850/1850 ━━━━━━━━━━━━━━━━━━━━ 155s 84ms/step - categorical_accuracy: 0.8465 - loss: 0.4663 - val_categorical_accuracy: 0.6658 - val_loss: 1.7038 - learning_rate: 5.0000e-04 Epoch 82/5000 1850/1850 ━━━━━━━━━━━━━━━━━━━━ 0s 78ms/step - categorical_accuracy: 0.8478 - loss: 0.4656 Epoch 82: val_categorical_accuracy did not improve from 0.67887 1850/1850 ━━━━━━━━━━━━━━━━━━━━ 154s 83ms/step - categorical_accuracy: 0.8478 - loss: 0.4656 - val_categorical_accuracy: 0.6645 - val_loss: 1.6863 - learning_rate: 5.0000e-04 Epoch 83/5000 [/code] На данный момент лучшая модель: [code]def __init__(self, input_shape, word_labels, mask_value): self.input_shape = input_shape self.word_labels = word_labels self.mask_value = mask_value
self.model = self.build_model()
def build_model(self, activation="leaky_relu"): data = Input(name='input', shape=self.input_shape)
def compile_model(self): optimizer = keras.optimizers.Adam(learning_rate=0.0005) loss = 'categorical_crossentropy' metrics = ['categorical_accuracy'] self.model.compile(loss=loss, optimizer=optimizer, metrics=metrics) [/code] И то, как я тренируюсь, похоже на tkis: [code]print("Loading Data...")
if is_Trained is False: if new_model is True: SLR_Model.train(self.train_keypoints, self.train_num_labels, epochs=self.epochs, callbacks=[backup, earlystopper, checkpoint, trainLogger, reduceLROnPlat, tb_callback], x_val=self.val_keypoints, y_val=self.val_num_labels, batch_size=self.batch_size, class_weight=class_weight) else: SLR_Model.train(self.train_keypoints, self.train_num_labels, epochs=self.epochs, callbacks=[backup, earlystopper, checkpoint, trainLogger, reduceLROnPlat, tb_callback], x_val=self.val_keypoints, y_val=self.val_num_labels, batch_size=self.batch_size, class_weight=class_weight) [/code] Я действительно не знаю, что я могу сделать еще, чтобы достичь точности хотя бы 80 %, действительно ли максимальная точность составляет 70 %, данные неверны, модель слишком проста или, возможно, существует неправильная техника, которую я использую? А если эта штука с большей точностью в начале - это нормально? Я действительно хочу узнать, как я могу создавать такие модели, и знаю, что я как бы застрял в этом и больше не знаю, смогу ли я что-то с этим поделать. Может ли кто-нибудь взглянуть на эту проблему и дать мне совет? Большое спасибо за любые идеи, которые я могу попробовать или проверить