Matplotlib进程不执行脚本就能输出图形

q9rjltbz  于 2023-03-30  发布在  其他
关注(0)|答案(1)|浏览(108)

我面临的问题是,matplotlib图显示来自之前运行的python脚本。我的意思是,脚本不再运行,但我仍然有图显示“随机”。可能每次我运行不同的python脚本时都会保存matplotlib图,但不完全确定。
详细信息:

  • 这些脚本是从vscode集成终端执行的。
  • 我可以看到我的gpu上的进程或使用top命令时,图显示,但我一关闭图窗口的进程消失,并将重新出现后。

代码片段:

from pytorch_grad_cam import GradCAM
from pytorch_grad_cam.utils.model_targets import ClassifierOutputTarget
from pytorch_grad_cam.utils.image import show_cam_on_image
from torchvision.models import resnet50
import torch
import matplotlib.pyplot as plt

model = resnet50(pretrained=True)
target_layers = [model.layer4[-1]]
# load an image an put it in a pytorch tensor
input_tensor = torch.rand(1, 3, 224, 224)
# Create an input tensor image for your model..
# Note: input_tensor can be a batch tensor with several images!

# Construct the CAM object once, and then re-use it on many images:
cam = GradCAM(model=model, target_layers=target_layers, use_cuda=True)

targets = [ClassifierOutputTarget(281)]

# You can also pass aug_smooth=True and eigen_smooth=True, to apply smoothing.
grayscale_cam = cam(input_tensor=input_tensor, targets=targets)

# In this example grayscale_cam has only one image in the batch:
grayscale_cam = grayscale_cam[0, :]
rgb_img = input_tensor[0, :].permute(1, 2, 0).cpu().numpy()
visualisation = show_cam_on_image(rgb_img, grayscale_cam, use_rgb=True)

plt.figure()
plt.imshow(visualisation)
plt.show()
plt.close('all')

操作系统:Ubuntu 20.043.9.16
到目前为止我已经尝试过:

  • 当它出现时就终止进程
  • 重启pc
  • 在我的虚拟环境中卸载并重新安装matplotlib
  • 查看使用pstree的父进程并杀死它。
  • 重新运行脚本并添加plt.clf()

它可能与在有问题的脚本中尝试使用plt.ion()有关。或者与在here的pytorch_grad_cam包的后台使用的opencv库有关。

  • 更新:**-似乎触发数字的是在我的vscode编辑器中保存文件... *
  • 在pstree提示符中,链接到matplotlib图的Python进程有一个code(即vscode)父进程
ddarikpa

ddarikpa1#

我的脚本被触发是因为文件名以test_* 开头,加载的python环境包含pytest包。我不知道当启用vs code python扩展时,pytest是通过保存修改后的文件触发的。

相关问题