Pytorch и Matplotlib мешают

Я столкнулся со странной ошибкой с Matplotlib и факелом в моем блокноте Jupyter. Если я запущу эту строку torch.hub.load, plt.imshow просто ничего не отобразит (даже если кадр является правильным изображением). Если я прокомментирую эту строку, plt.imshow сработает.

Независимо от того, закомментирована ли эта строка torch.hub.load или нет, cv2.imshow будет работать.

onnx_path = "my_weights.onnx"
yolo_path = "lib/yolov5/"


torch.hub.load(yolo_path, 'custom', path=onnx_path, source='local') 

video_reader = VideoReader(str(src_file))

# wait for thread to read
while not video_reader.is_ready():
    waiting += 1
    time.sleep(1)

while(video_reader.is_ready()):
   frame = video_reader.frame

   #cv2.imshow('image',frame)
   #cv2.waitKey(0)


   plt.imshow(frame)
   plt.axis('off')
   plt.show()

Кажется, я что-то упускаю, но я этого не вижу. Любая помощь приветствуется :)

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
67
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это связано с изменением бэкэнда matplotlib yolo, см. эту проблему на github. Решением должно быть сброс бэкэнда matpltolib после загрузки:

onnx_path = "my_weights.onnx"
yolo_path = "lib/yolov5/"


# Save backend
b = plt.get_backend()
    
torch.hub.load(yolo_path, 'custom', path=onnx_path, source='local') 

#Reset backend
matplotlib.use(b)

video_reader = VideoReader(str(src_file))

# wait for thread to read
while not video_reader.is_ready():
    waiting += 1
    time.sleep(1)

while(video_reader.is_ready()):
   frame = video_reader.frame

   #cv2.imshow('image',frame)
   #cv2.waitKey(0)


   plt.imshow(frame)
   plt.axis('off')
   plt.show()

Поскольку ваш ответ не является реальным ответом, я не буду отмечать его как принятый, но я хотел бы поблагодарить вас, поскольку он действительно помог мне быстро найти правильное решение.

Timothee W 26.04.2024 17:23

Вам были рады. Мужчина Обязательно включите шапку с информацией. Вы находитесь в Jupyter Notbekook, специально для вопросов, связанных с дисплеем.

FlyingTeller 28.04.2024 07:25
Ответ принят как подходящий

Благодаря @FlyingTeller я смог понять, что проблема на самом деле исходит не от Pytorch, а от Yolov5.

Сброс бэкэнда на самом деле не сработал (вместо построения графика он напечатал <Размер рисунка ширинаxвысота с 1 осью>)

Поэтому вместо сброса настроек бэкэнда на module://matplotlib_inline.backend_inline я поместил в свой блокнот следующую строку %matplotlib inline после загрузки модели yolov5, и это решило проблему.

Другие вопросы по теме