Почему 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,
)