Почему YOLO11 не распознает края слева и справа при предсказании на прямоугольном изображении?

Насколько удается понять - проблема с тем, что при предсказании на прямоугольном изображении YOLO11 не распознает края слева-справа, появилась именно с версии 11, т.е. системный баг. Но так и не удалось понять, как его можно пофиксить иначе, кроме как добавлением паддинга изображению перед предсказанием и, вследствие этого, ухудшением разрешения изображения.

Высота изображений для обучения/предсказания фиксированная = 1216px. Ширина изображений варьируется примерно от 4093px до 5551px (средняя ~5133px)

Так выглядит хот-фикс с паддингом:

    img = cv2.imread(img_path)

    padding=1000 
    h, w = img.shape[:2]   
    padded_image = np.full((h, w + 2*padding, 3), 114, dtype=np.uint8) 
    padded_image[0:0+h, padding:padding+w] = img

    results = model.predict(padded_image, imgsz=2048, iou=0.5, rect=False)

Но это костыль.

А как настройками YOLO при обучении и предсказании добиться того, чтобы распознавалось все изображение, без отступов слева-справа? Подскажите, пожалуйста.

P.S: пробовала самые разные настройки, и с rect=True (рекомендуется для прямоугольных изображений) и без него, самое лучшее сочетание настроек такое (но тоже не всегда работает как надо, и вместо одного полигона находит много):

Обучение:

model = YOLO("yolo11n-seg.pt")

results = model.train(
    data="test.yaml",
    epochs=100,
    imgsz=2048,
    batch=2,
    device=1,
    workers=0,
    rect=True,               # прямоугольное обучение (сохраняет пропорции)
    
    # Умеренные аугментации
    augment=True,
    hsv_h=0.015,
    hsv_s=0.7,
    hsv_v=0.4,
    degrees=5,              # Небольшие повороты
    translate=0.1,
    scale=0.2,
    shear=2,
    perspective=0.001,
    fliplr=0.5,             # Горизонтальное отражение
    mosaic=0.5,             # Умеренное использование mosaic
)

Предсказание:

results = model.predict(
    img,
    device=1,
    imgsz=2784,  # если сделать выше качество, становится хуже
    augment=True,
    # conf=0.5,  # без него так же, как с ним, если сделать выше 0,7 становится хуже
    iou=0.7,   # без него так же,  как с ним, если сделать меньше 0.7 становится хуже
    rect=True,
)

Ответы (0 шт):