Метрики валидации стабилизируются на первых нескольких эпохах на относительно хороших значениях и не улучшаются.

Вопрос или проблема

Я работаю над отслеживанием позиции в 6D, где цель состоит в том, чтобы оценить, как изменяется 3D положение и ориентация объекта с кадра t-1 до t. Обучающие/валидационные наборы данных являются синтетическими и поступают из одного конвейера генерации данных. Базовый обучающий набор данных состоит из 200 видео с одним объектом в подобных сценах, каждое видео представляет собой случайное плавное движение в течение 100 кадров.

Обучив множество моделей различной архитектуры и сложности, я получил очень похожие кривые обучения:

enter image description here

enter image description here

Или для модели с регуляризацией дропаут:

enter image description here

По какой-то причине показатели валидации стабилизируются на относительно хороших значениях с первых нескольких эпох обучения. Они не ухудшаются со временем, и увеличение набора данных, добавление регуляризаций или уменьшение мощности модели не помогают улучшить показатели валидации, хотя, как и ожидалось, эти изменения делают показатели обучения хуже. Увеличение мощности при сильной регуляризации также не улучшает валидационные показатели. Все модели застревают на почти одних и тех же магических числах для валидационного набора начиная с нескольких эпох обучения.

Вот пример модели, которую я обучал — CNN-LSTM, состоящая из замороженного извлекателя признаков DinoV2, ячейки GRU и двух MLP, которые принимают конкатенированное состояние LSTM из временного шага t и RGB латентность из t-1, чтобы предсказать изменения положения и ориентации:

RecurrentCNN(
  (state_cell): GRUCell(384, 512)
  (t_mlp): 
  ------------------------------
  self: <class 'pose_tracking.models.cnnlstm.MLP'>
  act_out: None
  dropout: 0.4
  droputs: [Dropout(p=0.4, inplace=False), Dropout(p=0.4, inplace=False), Dropout(p=0.4, inplace=False), Dropout(p=0.4, inplace=False)]
  hidden_dim: 512
  in_dim: 896
  num_layers: 5
  out_dim: 3
  training: True
  
  MLP(
    (layers): ModuleList(
      (0): Linear(in_features=896, out_features=512, bias=True)
      (1-3): 3 x Linear(in_features=512, out_features=512, bias=True)
      (4): Linear(in_features=512, out_features=3, bias=True)
    )
    (act): LeakyReLU(negative_slope=0.01)
  )
  ------------------------------
  (rot_mlp): 
  ------------------------------
  self: <class 'pose_tracking.models.cnnlstm.MLP'>
  act_out: None
  dropout: 0.4
  droputs: [Dropout(p=0.4, inplace=False), Dropout(p=0.4, inplace=False), Dropout(p=0.4, inplace=False), Dropout(p=0.4, inplace=False)]
  hidden_dim: 512
  in_dim: 896
  num_layers: 5
  out_dim: 6
  training: True
  
  MLP(
    (layers): ModuleList(
      (0): Linear(in_features=896, out_features=512, bias=True)
      (1-3): 3 x Linear(in_features=512, out_features=512, bias=True)
      (4): Linear(in_features=512, out_features=6, bias=True)
    )
    (act): LeakyReLU(negative_slope=0.01)
  )
  ------------------------------
  (encoder_img): VisionTransformer(
    (patch_embed): PatchEmbed(
      (proj): Conv2d(3, 384, kernel_size=(8, 8), stride=(8, 8))
    )
    (pos_drop): Dropout(p=0.0, inplace=False)
    (blocks): ModuleList(
      (0-11): 12 x Block(
        (norm1): LayerNorm((384,), eps=1e-06, elementwise_affine=True)
        (attn): Attention(
          (qkv): Linear(in_features=384, out_features=1152, bias=True)
          (attn_drop): Dropout(p=0.0, inplace=False)
          (proj): Linear(in_features=384, out_features=384, bias=True)
          (proj_drop): Dropout(p=0.0, inplace=False)
        )
        (drop_path): Identity()
        (norm2): LayerNorm((384,), eps=1e-06, elementwise_affine=True)
        (mlp): Mlp(
          (fc1): Linear(in_features=384, out_features=1536, bias=True)
          (act): GELU(approximate="none")
          (fc2): Linear(in_features=1536, out_features=384, bias=True)
          (drop): Dropout(p=0.0, inplace=False)
        )
      )
    )
    (norm): LayerNorm((384,), eps=1e-06, elementwise_affine=True)
    (head): Identity()
  )
  (encoder_depth): None
)
------------------------------

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

Я не понимаю, почему валидационные показатели ведут себя таким образом, а вышеупомянутые усилия по регуляризации не помогают.

.

Ответ или решение

Теория

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

  1. Переобучение или недообучение. Обычно раннее плато метрик может свидетельствовать о том, что модель либо слишком сложна и быстро подстраивается под обучающие данные, не обобщая их, либо, наоборот, слишком проста для задачи и не способна извлечь из данных необходимые зависимости.

  2. Синтетические данные. Поскольку вы используете синтетические данные, они могут не обладать той вариативностью, сложностью и объёмом, которые нужны модели для хорошего обучения. Поскольку и обучающие, и валидационные данные имеют одинаковое происхождение и распределение, это может ограничивать способность модели обобщать и улучшать результаты.

  3. Архитектура модели. Использование CNN-LSTM и GRU в сочетании с другими слоями может быть подвержено проблемам бесполезного обучения, где модель извлекает только базовые аспекты из данных. Возможно, сложность модели вредит способности извлечь более сложные паттерны или, наоборот, архитектура не подходит под специальные аспекты вашей задачи.

Пример

Рассмотрим возможные параметры архитектуры и гиперпараметры модели:

  • Использование замороженных слоев модели DinoV2 может лишать вашу модель возможности обучаться более специфичным для вашей задачи признакам.
  • Использование высокой регуляризации, например, с помощью Dropout (p=0.4) может быть слишком агрессивным, снижая возможности обучения модели.
  • Синтетический генератор может создавать данные, которые, хотя и имеют приемлемую вариативность, не соответствуют реальным сценариям.
  • Возможности модели ограничены отсутствием дополнительного обучения на реальных данных.

Применение

Чтобы улучшить результирующие метрики и добиться большего прогресса в валидационных данных, попробуйте следующее:

  1. Обучение на частично размороженных слоях. Попробуйте разморозить часть слоев модели DinoV2 для более адаптивного обучения на вашем датасете.

  2. Смешание данных. Используйте технику смешивания данных (augmentation), чтобы увеличить разнообразие сцен и движений в синтетических данных. Это может улучшить способность модели обобщать и извлекать более сложные зависимости.

  3. Снижение регуляризации. Попробуйте уменьшить значение параметра Dropout. Меньшее значение может помочь сохранить больше информации в процессе обучения.

  4. Добавление новых данных. Постарайтесь добавить к вашим датасетам дополнительные реальные данные, если это возможно. Это позволило бы модели адаптироваться к более разнообразным и сложным ситуациям.

  5. Анализ потерь. Подробно проанализируйте функцию потерь. Возможно, требуется использование другой метрики или функции потерь, более адаптированной к задаче прогнозирования позы.

  6. Гиперпараметры. Проведите тщательную гиперпараметрическую оптимизацию, пробуя такие параметры, как размер скрытного слоя в GRU, архитектура MLP и количество эпох.

  7. Переход к другим моделям. Рассмотрите возможность использования альтернативных архитектур, таких как трансформеры или другие новые подходы к обработке 3D-поз, которые могут предложить улучшенные методы для вашей конфигурации данных.

Заключение:

Эти советы помогут вам улучшить показатели валидации. Ключевым моментом является эксперименты и тестирование различных подходов для определения наилучшего способа увеличения обобщающей способности модели. Регулярный анализ промежуточных результатов и их адаптивное использование в дальнейшем обучении станет вашей основой для успешного развития проекта в области 6D предсказания поз.

Оцените материал
Добавить комментарий

Капча загружается...