Hi everyone,
I’m training a model with YOLO11-OBB using 4-point polygon OBBs (not cx/cy/w/h/angle), and I’m running into a consistent issue: some objects are disappearing during training. The polygons are being silently discarded, and I can’t figure out why.
What I’m observing
-
In
train_batch.jpg, some objects that definitely have a valid 4-point polygon in the label file appear without any box. -
Other polygons are shown correctly.
-
No warnings or errors are printed — the polygon is just ignored.
-
The dataset is 100% verified, and I already validated the polygons manually and programmatically before training:
-
no self-intersections
-
points inside image
-
normalized to [0,1]
-
clockwise ordering
-
minimum area > threshold
-
no degenerate edges
-
My polygon format
Each line is:
<class> x1 y1 x2 y2 x3 y3 x4 y4 (normalized)
This is the Ultralytics OBB polygon format for YOLO11.
Training configuration (relevant parts)
-
augment=False -
mosaic=0 -
mixup=0 -
cutmix=0 -
copy_paste=0 -
nms=False(default override) -
overlap_mask=True -
amp=True -
CPU training
No geometric/crop augmentations should be affecting polygons.
What I already ruled out
-
Polygons fully outside the image → none -
Polygons clipped to zero area → none -
Polygons too small → none -
Wrong class count → correct -
Wrong normalization → correct -
Wrong point order → all clockwise -
Self-intersections → none detected -
Degenerate OBBs (collinear points) → none
So the polygons should be valid.
My question
What are the internal reasons why YOLO11-OBB may discard a 4-point polygon during training, even if the annotation looks valid?
Possible causes I’m trying to confirm:
-
Does YOLO drop polygons whose minimum bounding rectangle becomes too small after resizing?
-
Does Ultralytics clip polygons again internally and reject them if area < threshold?
-
Does OBB augmentation internally convert polygons to RBOX or MASK and fail?
-
Could
overlap_mask=Truehide polygons in the visualization even if they exist? -
Is there a debugging flag to print WHY a polygon was removed?
-
Is there any difference in handling polygons during caching?
What I need
I’m looking for advice on how to:
-
Enable verbose debugging for polygon filtering
-
Understand internal Ultralytics filters (min size, invalid clipping, etc.)
-
Check if the polygon is being dropped during preprocessing, augmentation, caching, or visualization
-
Confirm if the training has a hidden filter (like min_size_ratio) for OBBs
If anyone has experience with polygons being discarded in YOLO11-OBB — especially 4-point OBB polygons — I’d appreciate any insights.
Thanks!