Какова ожидаемая структура данных для pred и gt в model.loss(gt, pred) в модели YOLO?

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

У меня есть

pred_targets = self.model(images)
pred_boxes = pred_container.data
pred_scores = pred_container.conf
pred_labels = pred_container.cls
gt = (boxes.to(self.device), classes.to(self.device))
pred = (pred_boxes[:, :4], pred_scores, pred_labels)
total_loss = self.model.loss(pred, gt) # Ошибка

Здесь
pred_boxes: tensor([[8.6334e+01, 6.5131e-01, 6.4000e+02, 6.3755e+02, 3.3555e-01, 4.9000e+01]], device=”cuda:0″)
pred_scores: tensor([0.3355], device=”cuda:0″)
pred_labels: tensor([49.], device=”cuda:0″)
images: Tensor (1, 3, 640, 640) также известен как (batch_size, channels, h, w) dtype: float32
boxes: (1, 57, 4) также известен как (batch_size, количество боксов, координаты)
classes: (1, 57, 1) также известен как (batch_size, количество боксов, класс)

что я должен отправить в yolo.loss?
Какой правильный порядок? model.loss(pred, gt)?
Как правильно построить pred?
Что должно быть в gt? Должно ли это быть (x_center, y_center, width, height, label(?))?
Должен ли я использовать абсолютные или относительные координаты для боксов?
Также, как я могу ограничить модель только двумя метками?

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

В модели YOLO задаётся специфическая структура данных для переменных pred и gt, которые передаются в функцию потерь model.loss(gt, pred). Рассмотрим подробно, как правильно сформировать эти структуры.

Формирование pred (предсказания модели)

Для переменной pred в контексте вашей задачи требуется следующее:

  1. Координаты рамок предсказаний (pred_boxes): они обычно представляются в формате [x_center, y_center, width, height], где x_center и y_center — это центр рамки, а width и height — её ширина и высота. Вектор pred_boxes может быть получен из модели, и это первые 4 элемента каждой строки pred_container.data. Эти значения должны быть в относительных координатах, нормализованных на размер изображения.

  2. Оценки уверенности (pred_scores): это оценки от модели, которые показывают уверенность в присутствии объекта. Ваша модель уже возвращает это значение.

  3. Метки классов (pred_labels): класс каждого предсказания, который представлен в виде индекса класса.

  4. Составление pred: pred формируется как кортеж из трех компонентов: (pred_boxes, pred_scores, pred_labels).

Формирование gt (истинные значения)

gt (Ground Truth) представляет собой данные о истинных метках и рамках объектов:

  1. Координаты истинных рамок (boxes): они должны быть преобразованы в тот же формат [x_center, y_center, width, height], что и для pred_boxes, и также быть нормализованными относительно размеров изображения.

  2. Метки классов (classes): это класс (или идентификатор) объекта, представленный в виде индекса.

  3. Составление gt: gt также представляет собой кортеж из двух компонентов: (boxes, classes).

Дополнительные соображения

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

  • Рекомендуемое представление данных: YOLO обычно предпочитает относительные координаты для всех рамок, так как они упрощают адаптацию модели к различным размерам изображений во время инференса.

Заключение

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

Используя данные рекомендации, вы сможете лучше настроить процесс обучения для вашей модели YOLO и добиться оптимальных результатов.

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

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