将 CNN 编码器的输出传递给 convLSTM 层。 (火炬)

Posted

技术标签:

【中文标题】将 CNN 编码器的输出传递给 convLSTM 层。 (火炬)【英文标题】:Passing the output of a CNN encoder to convLSTM layers. (PyTorch) 【发布时间】:2021-02-10 14:43:05 【问题描述】:

我有兴趣在自定义数据集上实现基于 LinkNet 的编码器-解码器结构,用于语义分割。我正在尝试在编码器和解码器之间引入 convLSTM 层。通常,正如预期的那样,编码器的输出是 4-dim 输出(batch_size、channels、height、width)。 convLSTM 层需要 5 维输入(batch_size、sequence_length、channels、height、width)。如何在不丢失任何信息的情况下将此 4 维张量转换为 5 维张量?我最初也想过拆分 batch_size 以适应 sequence_length,但这可能是个问题,因为我正在处理视频帧。

也许我正在考虑使用四/五帧序列进行训练,即帧 t 的语义分割图是通过最后三到四帧的信息确定的,因此,sequence_length 为 4 或 5 就可以了。

如何引入序列长度?是在预处理期间还是在编码器结构之后?

最重要的是,怎么做?

【问题讨论】:

【参考方案1】:

你不能。 ConvLSTM 期望一个序列,这是您缺少的维度。 LinkNet 只接受一张图片作为输入,所以你不能真正在 Linknet 中使用 ConvLSTM。

【讨论】:

他们使用帧序列。 arxiv.org/pdf/1905.01058.pdf 如果我理解正确,你必须使用convlstm作为编码器和解码器

以上是关于将 CNN 编码器的输出传递给 convLSTM 层。 (火炬)的主要内容,如果未能解决你的问题,请参考以下文章

rnn,lstm,convlstm的输入输出有啥不同

基于 BERT 的 CNN - 卷积和 Maxpooling

解码器的输出表面如何传递到编码器的输入表面?

convLSTM 大小不匹配

CNN计算原理

在 Keras 中将变压器输出连接到 CNN 输入的问题