【问题标题】:How to delete tensors from pytorch graph?如何从pytorch图中删除张量?
【发布时间】:2021-11-29 15:31:54
【问题描述】:

我正在对图像进行预测,以便在 for 循环中进行对象检测。 我实际上遇到了与 tensorflow 相同的问题,并希望我可以用 pytorch 解决它。 至少现在看来我已经发现了问题所在(天真地假设它与 tensorflow 相同)

我是这样预测的

 model = detection.fasterrcnn_resnet50_fpn(pretrained=True, 
    progress=True,pretrained_backbone=True).to(DEVICE)
    for i in tqdm(range(train.shape[0])):
        image = cv2.imread(train_img_paths[i])
        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
        image = image.transpose((2, 0, 1))
        image = image / 255.0
        image = np.expand_dims(image, axis=0)
        image = torch.FloatTensor(image)
        image = image.to(DEVICE)
        predictions = model(image)[0]

现在通过垃圾收集器,我发现每个图像都保留在图表中。 有办法避免吗?

我无法将数据加载器或数据集与检测模型一起使用(与 tensorflow hub 相同)

【问题讨论】:

  • predictions 被定义后你在做什么?
  • 使用torch.from_numpy() 而不是torch.FloatTensor()
  • @Ivan predicions 是一本字典
  • 它针对 numpy 数组进行了优化。我也不确定您是否需要设置 model.eval() 以及是否需要使用 with torch.no_grad(): 包装代码
  • 那是因为torch.from_numpy。使用 image = torch.from_numpy(image).float() 将图像投射到浮点数

标签: pytorch torchvision


【解决方案1】:

在进行测试时不要忘记关闭梯度累积。您可以通过包装您的代码来做到这一点:

with torch.no_grad():
     model.eval()
     out = model(x)

或者如果你的代码是一个函数,使用装饰器来做同样的事情:

@torch.no_grad()
def model_proc(model,x):
    model.eval()
    return model(x)

【讨论】:

    猜你喜欢
    • 2019-01-10
    • 1970-01-01
    • 2020-10-21
    • 2020-09-28
    • 1970-01-01
    • 2021-09-25
    • 2020-01-27
    • 1970-01-01
    • 2021-12-25
    相关资源
    最近更新 更多