Low mAP50

Hi, I am a beginner in YOLO. I ran the official yolo11-obb.yaml file on the DOTA v1.5 dataset (available in the Ultralytics datasets) using the official Ultralytics code (shown below) in Colab. After 200 epochs, the mAP50 result was 44.2. Why is this happening? In the official Ultralytics documentation, the mAP50 for the YOLOv11 Nano version is reported as 78.2. Thank you for your help!
from ultralytics import YOLO
model = YOLO(“yolo11n-obb.yaml”)
results = model.train(data=“DOTAv1-5.yaml”, epochs=100, imgsz=1024)

The mAP50 could be lower for multiple reasons. One is that there are various other arguments used for the hyperparameters of the pretrained model. Additionally I believe that the OBB models trained for much longer, likely over 500 epochs.

1 Like

Hi thanks for your answer.i have another question.
Should I use split_trainval and split_test before training my model? Does this affect the mAP? I didn’t do this before training the model; is it necessary?

Your dataset should be divided beforehand into train and val (at least, using a hold out test dataset is up to you and usually will depend on having enough data). You will specify where the images and annotations are found for each split using the data YAML file as shown in the dataset documentation Object Detection Datasets Overview - Ultralytics YOLO Docs

I’m sorry, my question wasn’t clear.my purpose from split_trainval and split_test is below code:

from ultralytics.data.split_dota import split_test, split_trainval

# split train and val set, with labels.
split_trainval(
    data_root="/content/drive/MyDrive/datasets/DOTAv1.5/",
    save_dir="/content/drive/MyDrive/datasets/DOTAv1.5-split/",
    rates=[0.5,1.0,1.5],  # multiscale
    gap=200,
)
# split test set, without labels.
split_test(
    data_root="/content/drive/MyDrive/datasets/DOTAv1.5/",
    save_dir="/content/drive/MyDrive/datasets/DOTAv1.5-split/",
    rates=[0.5,1.0,1.5],  # multiscale

In the spirit of Advice on asking for Support why are you trying to train using the DOTA dataset instead of using the pretrained model? What’s your aim?

If you need an OBB model trained on the data, you can load them using YOLO("yolo11n-obb.pt") without having to retrain anything. If your aim is to train a model from scratch, then yes you’d want to run these commands prior to training and then make sure to update the data YAML file for training to reflect the new directories created.

Yes, I want to learn from scratch, perform some tests on the yolo11-obb.yaml file, modify the layers, and observe the effects.

thank you for your help.

1 Like