← Вернуться к списку

Распознавание жестов с использованием глубокого обучения сверточными нейронными сетями

Краткое содержание

Я разрабатываю модель CNN для распознавания 24 жестов американского жестового языка. У меня есть 2500 изображений/жестов. Разделение данных следующее: Обучение = 1250 изображений/жестов, Валидация = 625 изображений/жестов, Тестирование = 625 изображений/жестов. Как мне следует продолжить обучение модели?: 1. Должен ли я разработать модель, начиная с меньшего количества жестов (например, 5), и затем постепенно увеличивать их? 2. Начинать модели с нуля или использовать transfer learning (VGG16 или другое)? Применяя data augmentation, я провел несколько тестов с VGG16 и добавил dense классификатор в конце и получил следующие точности: Обучение: 0.87610877, Валидация: 0.8867307, Тест: 0.96533334. График точности и потерь. Параметры теста: NUM_CLASSES = 5, EPOCHS = 50, STEPS_PER_EPOCH = 125, VALIDATION_STEPS = 75, TEST_STEPS = 75. Фреймворк = Keras, Tensorflow ОПТИМИЗАТОР = adam Модель: model = Sequential([ Conv2D(32, (3, 3), activation='relu', input_shape=(IMG_HEIGHT, IMG_WIDTH ,3)), MaxPooling2D(pool_size=(2,2)), Conv2D(64, (3, 3), activation='relu'), MaxPoolin

Полный текст

Распознавание жестов рук с использованием глубоких сверточных нейронных сетей Задать вопрос

Задан 6 лет назад Изменен сегодня Просмотрен 161 раз

1 $\begingroup$ Я разрабатываю CNN-модель для распознавания 24 жестов американского языка жестов. У меня есть 2500 изображений на каждый жест. Разделение данных следующее: Обучение = 1250 изображений на жест Валидация = 625 изображений на жест Тестирование = 625 изображений на жест Как мне следует продолжить обучение модели?: 1. Стоит ли разрабатывать модель, начиная с меньшего количества жестов (например, 5), а затем постепенно увеличивать их количество? 2. Стоит ли начинать модели с нуля или использовать перенос обучения (VGG16 или другой)? Применяя аугментацию данных, я провел несколько тестов с VGG16 и добавил плотный классификатор в конце, получив следующие показатели точности: Обучение: 0.87610877 Валидация: 0.8867307 Тест: 0.96533334 График точности и потерь Параметры теста: NUM_CLASSES = 5 EPOCHS = 50 STEPS_PER_EPOCH = 125 VALIDATION_STEPS = 75 TEST_STEPS = 75 Фреймворк = Keras, Tensorflow Оптимизатор = adam Модель: model = Sequential([ Conv2D(32, (3, 3), activation='relu', input_shape=(IMG_HEIGHT, IMG_WIDTH ,3)), MaxPooling2D(pool_size=(2,2)), Conv2D(64, (3, 3), activation='relu'), MaxPooling2D(pool_size=(2,2)), Conv2D(128, (3, 3), activation='relu'), MaxPooling2D(pool_size=(2,2)), Conv2D(256, (3, 3), activation='relu'), MaxPooling2D(pool_size=(2,2)), Conv2D(512, (3, 3), activation='relu'), MaxPooling2D(pool_size=(2,2)), Flatten(), Dense(512, activation='relu'), Dense(NUM_CLASSES, activation='softmax') ]) Если я попробую изображения с немного другим фоном и предскажу классы (predict_classes()), я не получу точных результатов. Какие-нибудь предложения, как сделать модель более устойчивой? нейронные-сети глубокое-обучение сверточные-нейронные-сети классификация keras Поделиться Улучшить этот вопрос Следить за вопросом задан 11 февраля 2020 г. в 20:44 mayuresh_sa 51 4 4 бронзовые значки $\endgroup$ 1 $\begingroup$ Пожалуйста, в следующий раз сосредоточьтесь на одной проблеме и одном вопросе. Для каждого из ваших вопросов открывайте отдельную ветку/пост. $\endgroup$ nbro – nbro 2020-03-13 14:22:44 +00:00 Прокомментировано 13 марта 2020 г. в 14:22 Добавить комментарий | 1 Ответ 1 Сортировка: По умолчанию: Наивысший балл Дата изменения (сначала новые) Дата создания (сначала старые) 0 $\begingroup$ Мне кажется, что ваша проблема не в самой модели, а в наборе данных. Если у вас всего $2500$ изображений для $24$ меток (жестов), то получается примерно $104$ изображения на метку. Это очень мало для моделей, которые я обучаю (~ $80K$ изображений в наименьшем случае). На мой взгляд, вы получили довольно хорошую точность на валидации и тестировании для размера вашего набора данных. Но отвечая на ваши вопросы: Начать с небольшого количества меток и расширять обычно полезно, когда ваша модель слишком глубокая и страдает от проблем сходимости. Ваша модель достаточно проста, чтобы не страдать от этих проблем, поэтому я бы рекомендовал обучать $24$ метки сразу. Перенос обучения может значительно сократить время обучения. Например, если вы начнете с классификатора VGG, который обнаруживает руки, есть большая вероятность, что веса ваших сверточных слоев уже почти настроены для вашего варианта использования. В общем, самый простой способ повысить точность вашей модели - использовать один из этих 2 методов: Увеличьте набор данных: Я не уверен, возможно ли это в вашем случае, возможно, вы можете использовать аугментацию изображений (поворот, масштабирование, изменения в цветовом пространстве...). Увеличьте глубину вашей модели (при условии, что у вас большой набор данных). Если вы уже выполнили эти пункты, то можете внести изменения в архитектуру модели или функцию потерь. Глядя на вашу модель и, на мой взгляд, я бы попробовал добавить Batch-Normalization для сверточных слоев. Надеюсь, это поможет немного :) Поделиться Улучшить этот ответ Следить за ответом отредактировано 12 февраля 2020 г. в 13:51 отвечено 12 февраля 2020 г. в 13:45 JVGD 1,218 1 1 золотой значок 9 9 серебряных значков 15 15 бронзовых значков $\endgroup$ 2 $\begingroup$ Спасибо. На самом деле у меня 2500 изображений для каждого жеста (каждой метки). Таким образом, общее количество изображений составляет около 60000. Я использовал