Я столкнулся со странной ошибкой с 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()
Кажется, я что-то упускаю, но я этого не вижу. Любая помощь приветствуется :)
Это связано с изменением бэкэнда 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()
Вам были рады. Мужчина Обязательно включите шапку с информацией. Вы находитесь в Jupyter Notbekook, специально для вопросов, связанных с дисплеем.
Благодаря @FlyingTeller я смог понять, что проблема на самом деле исходит не от Pytorch, а от Yolov5.
Сброс бэкэнда на самом деле не сработал (вместо построения графика он напечатал <Размер рисунка ширинаxвысота с 1 осью>)
Поэтому вместо сброса настроек бэкэнда на module://matplotlib_inline.backend_inline
я поместил в свой блокнот следующую строку %matplotlib inline
после загрузки модели yolov5, и это решило проблему.
Поскольку ваш ответ не является реальным ответом, я не буду отмечать его как принятый, но я хотел бы поблагодарить вас, поскольку он действительно помог мне быстро найти правильное решение.