Jupyter Notebook и Python Script возвращают разные маски сегментации экземпляра YOLOV8.Python

Программы на Python
Anonymous
Jupyter Notebook и Python Script возвращают разные маски сегментации экземпляра YOLOV8.

Сообщение Anonymous »

Для сегментации экземпляра я использовал предварительно обученную модель YOLOV8. Для тестирования и разработки я использовал блокнот Anaconda Jupyter, который перед развертыванием преобразовал в скрипт Python.
Вот код минимально воспроизводимого примера:

Код: Выделить всё

from ultralytics import YOLO
import torch
import matplotlib.pyplot as plt
import numpy as np
import PIL

print(torch.cuda.is_available())

model = YOLO("YOLO/yolov8x-seg.pt")

image = PIL.Image.open("YOLO/test.png")

results = model(image, verbose=False)
plt.imshow(np.logical_or.reduce(results[0].masks.data.cpu().numpy()).astype(np.uint8)*255)
plt.show()
Это тестовое изображение, которое я использовал.
Вот (правильная) маска из Jupyter Notebook:
Изображение

и вот результат Скрипт Python:
Изображение

Вы можете видеть, что результат Python имеет эти странные блоки ближе к краю ограничивающей рамки.
  • Код абсолютно одинаков для обеих версий.
  • Виртуальная среда Python создается непосредственно из экспорта среды Jupyter (и я дважды проверил: идентичная версия Python и идентичные версии для всех библиотек)
  • Одна и та же версия CUDA (12.4).
  • Одно и то же оборудование (оба примера выполнялись на одной машине — графический процессор — ноутбук RTX 3070 Ti)
  • Обе сети используют одни и те же предварительно обученные веса (доступны для скачивания здесь)
Мое первое предположение заключалось в том, что некоторые библиотеки имеют разные версии между Jupyter Notebook и средой Python, но я вручную проверил их, и они были идентичны.
Я также пытался вручную установить точность с плавающей запятой для сценария Python на случай, если это вызвано какой-либо ошибкой точности агрегирования весов сети, но это не помогло тоже не работает.
Я читал, что Anaconda использует IPython, что может привести к другому поведению, но я не знаю, что делать с этой информацией.
Я также не могу просто уменьшить размер ограничивающей рамки, потому что положение и размер этих артефактов в движущемся изображении непредсказуемы. Уменьшение размера ограничительной рамки приводит к тому, что части масок иногда обрезаются.
Кто-нибудь знает, почему это происходит или как это исправить?

Подробнее здесь: https://stackoverflow.com/questions/790 ... gmentation

Вернуться в «Python»