Инкрементальный классификатор и обучение представлению в моделях Yolo

У меня возникла проблема с моей моделью YOLO.

Изначально я тренировал его с 7 занятий. Теперь я хочу добавить в модель 4 новых класса. Однако когда я объединяю данные исходных семи классов с новыми четырьмя классами, время обучения и связанные с этим затраты на облако значительно увеличиваются. Как можно эффективно включить эти дополнительные классы в модель без увеличения времени и затрат на обучение?

Я ожидаю сокращения затрат и времени обучения при поэтапном обучении.

Оптимизация производительности модели: Руководство по настройке гиперпараметров в Python с Keras
Оптимизация производительности модели: Руководство по настройке гиперпараметров в Python с Keras
Настройка гиперпараметров - это процесс выбора наилучшего набора гиперпараметров для модели машинного обучения с целью оптимизации ее...
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Udacity Nanodegree Capstone Project: Классификатор пород собак
Udacity Nanodegree Capstone Project: Классификатор пород собак
Вы можете ознакомиться со скриптами проекта и данными на github .
Определение пород собак с помощью конволюционных нейронных сетей (CNN)
Определение пород собак с помощью конволюционных нейронных сетей (CNN)
В рамках финального проекта Udacity Data Scietist Nanodegree я разработал алгоритм с использованием конволюционных нейронных сетей (CNN) для...
Почему Python - идеальный выбор для проекта AI и ML
Почему Python - идеальный выбор для проекта AI и ML
Блог, которым поделился Harikrishna Kundariya в нашем сообществе Developer Nation Community.
0
0
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для добавления новых классов к уже обученной модели вы можете рассмотреть концепцию трансферного обучения. Вместо переобучения всей модели с нуля, объединяя старые и новые классы, вы можете:

  1. Заморозьте слои до последнего или нескольких (которые изучили репрезентации функций из вашего первоначального обучения).
  2. Затем тренируйте только последние слои (или добавляйте новые), чтобы изучить дополнительные занятия.

Вот упрощенный фрагмент кода, чтобы дать вам представление:

from ultralytics import YOLO

model = YOLO('runs/detect/train/weights/best.pt') # load a pretrained model (recommended for training)
 
# unfreeze the last 4 layers of model,
named_parameters = list(model.named_parameters())
for i, (name, param) in enumerate(named_parameters):
    if i >= len(named_parameters) - 4:  # Unfreeze the last 4 layers
        param.requires_grad = True
    else:
        param.requires_grad = False


# # Proceed with training on the new dataset (with 11 classes now)
model.train(data = "dataset/data.yaml", epochs=200, batch=16, workers=1)  # train the model

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

Не забудьте обновить файл конфигурации набора данных (new_data_with_11_classes.yaml в примере), чтобы отразить все 11 классов.

Такой подход позволяет существенно сократить время и затраты на обучение.

@glenn-jocher

Другие вопросы по теме