У меня есть model = torchvision.models.detection.retinanet_resnet50_fpn_v2(progress=True), и я хочу обучить его на пользовательских данных. Чтобы получить проигрыш, я должен выполнить
classification_loss, regression_loss = model(images, targets)
Я создал пакетный тензор для images, но, черт возьми, не могу найти, как я должен форматировать targets для обнаружения объектов... Каждая цель имеет ограничивающую рамку и метку класса.






проверьте этот официальный учебник: https://pytorch.org/tutorials/intermediate/torchvision_tutorial.html
В общем, targets является list из dict, например,
targets = [
{
"boxes": torch.as_tensor([[xmin, ymin, xmax, ymax]], dtype=torch.float32),
"labels": torch.as_tensor([1,], dtype=torch.int64)
}
]
@HarryStuart Вам не нужно использовать однократное кодирование самостоятельно. labels должен быть списком целых чисел, а все остальное за вас сделает torchvision. Вы можете проверить исходный код того, как torchvision вычисляет потерю классификации: github.com/pytorch/vision/blob/main/torchvision/models/…
Спасибо, я принял ваш ответ. Вы случайно не знаете, как ввести изображение без целей? В моем наборе данных мало объектов, поэтому будет много изображений без целей.
@HarryStuart Посмотрите на этот PR: github.com/pytorch/vision/pull/1911, там сказано, как отформатировать цель для отрицательного образца
Что, если я хочу закодировать метки сразу? Или я передаю целое число (например, индекс в списке меток), а затем PyTorch преобразует его в горячее кодирование под капотом?