Вопрос или проблема
У меня есть
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
в контексте вашей задачи требуется следующее:
-
Координаты рамок предсказаний (
pred_boxes
): они обычно представляются в формате[x_center, y_center, width, height]
, гдеx_center
иy_center
— это центр рамки, аwidth
иheight
— её ширина и высота. Векторpred_boxes
может быть получен из модели, и это первые 4 элемента каждой строкиpred_container.data
. Эти значения должны быть в относительных координатах, нормализованных на размер изображения. -
Оценки уверенности (
pred_scores
): это оценки от модели, которые показывают уверенность в присутствии объекта. Ваша модель уже возвращает это значение. -
Метки классов (
pred_labels
): класс каждого предсказания, который представлен в виде индекса класса. -
Составление
pred
:pred
формируется как кортеж из трех компонентов:(pred_boxes, pred_scores, pred_labels)
.
Формирование gt
(истинные значения)
gt
(Ground Truth) представляет собой данные о истинных метках и рамках объектов:
-
Координаты истинных рамок (
boxes
): они должны быть преобразованы в тот же формат[x_center, y_center, width, height]
, что и дляpred_boxes
, и также быть нормализованными относительно размеров изображения. -
Метки классов (
classes
): это класс (или идентификатор) объекта, представленный в виде индекса. -
Составление
gt
:gt
также представляет собой кортеж из двух компонентов:(boxes, classes)
.
Дополнительные соображения
-
Ограничение модели на два класса: необходимо изменить количество выходных классов в архитектуре модели, а также настроить выходной слой и функцию потерь соответственно, чтобы учитывать только два класса.
-
Рекомендуемое представление данных: YOLO обычно предпочитает относительные координаты для всех рамок, так как они упрощают адаптацию модели к различным размерам изображений во время инференса.
Заключение
Правильное формирование данных для функции потерь в модели YOLO — это залог успешной адаптации модели к вашей задаче. Необходимо обеспечить, чтобы предсказанные и истинные значения рамок и классов были в корректном формате. Это минимизирует ошибки и улучшает эффективность обучения модели.
Используя данные рекомендации, вы сможете лучше настроить процесс обучения для вашей модели YOLO и добиться оптимальных результатов.