【问题标题】:Extract intermediate representation of MiDaS neural network in pytorch?在pytorch中提取MiDaS神经网络的中间表示?
【发布时间】:2021-07-15 11:23:30
【问题描述】:

Pytorch 文档提供了一个concise way 以应用 MiDaS 单目深度估计网络进行深度提取。但是我应该如何修改他们的代码以在某个中间层提取网络表示?我知道我可以从 github 下载模型并修改 forward 函数以返回我想要的内容,但我对最简单的解决方案感兴趣,保持外部代码不变。

我知道继承模型类并编写自己的转发函数,如here,但我不知道如何在代码中访问该类。使用midas = torch.hub.load("intel-isl/MiDaS", model_type) 立即创建模型实例。也许使用前向钩子的例子会更容易。

【问题讨论】:

    标签: deep-learning neural-network pytorch conv-neural-network torchvision


    【解决方案1】:

    正如你所说,在nn.Module 上使用前向钩子是最简单的方法。考虑文档:https://pytorch.org/docs/stable/generated/torch.nn.Module.html#torch.nn.Module.register_forward_hook

    基本上你只需要定义一个函数,它接受三个输入(module, input, output),然后对这些数据做任何你想做的事情。要找到要在哪个模块上放置该钩子,您显然需要熟悉模型的结构。您只需 print(midas) 即可获得所有可用模块的精美打印表示。我只是随机选择了一个,并使用了print() 函数作为钩子:

    midas.pretrained.model.blocks[3].mlp.fc2.register_forward_hook(print)
    

    这意味着每当我们调用midas(some_input) 时,都会使用相应的参数调用钩子(在本例中为print)。当然,您可以编写一个将这些文件保存到例如的函数,而不是 print。您可以从外部访问的列表,或将它们写入文件等。

    【讨论】:

      猜你喜欢
      • 2018-12-16
      • 1970-01-01
      • 2021-03-11
      • 2019-03-08
      • 2021-12-30
      • 1970-01-01
      • 2020-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多