【发布时间】:2020-12-13 11:11:43
【问题描述】:
我正在尝试使用 pytorch 复制 in this paper 提出的 ConvNet + LSTM 方法。但我正在努力寻找在我的模型中结合 CNN 和 LSTM 的正确方法。这是我的尝试:
class VideoRNN(nn.Module):
def __init__(self, hidden_size, n_classes):
super(VideoRNN, self).__init__()
self.hidden_size = hidden_size
vgg = models.vgg16(pretrained=True)
embed = nn.Sequential(*list(vgg.classifier.children())[:-1])
vgg.classifier = embed
for param in vgg.parameters():
param.requires_grad = False
self.embedding = vgg
self.GRU = nn.GRU(4096, hidden_size)
def forward(self, input, hidden=None):
embedded = self.embedding(input)
output, hidden = self.gru(output, hidden)
output = self.classifier(output.view(-1, 4096))
return output, hidden
由于我的视频长度可变,我提供 PackedSequence 作为输入。它由形状为 (M,B,C,H,W) 的张量创建,其中 M 是最大序列长度,B 是批量大小。 C,H,W是每帧的通道、高度和宽度。
我希望预先训练的 CNN 成为模型的一部分,因为我稍后可能会解冻某些层以针对我的任务微调 CNN。这就是为什么我没有单独计算图像的嵌入。
我的问题如下:
-
为了在我的上下文中处理批量视频,我的输入数据的形状是否正确,或者我应该使用 PackedSequence 以外的其他东西?
-
在我的转发功能中,我如何使用我的 VGG 和我的 GRU 单元处理一批图像序列?我无法直接将 PackedSequence 作为 VGG 的输入,我该如何继续?
-
这种方法似乎尊重“pytorch 做事方式”还是我的方法有缺陷?
【问题讨论】:
标签: deep-learning computer-vision pytorch lstm conv-neural-network