多维数组- Tensorflow nn.conv3d()和max_pool3d



最近Tensorflow增加了对3d卷积的支持。我在试着训练一些视频技能。

我有几个问题:

我的输入是16帧,每帧3通道的.npy文件,所以它们的形状是:(128, 171, 48)

1) tf.nn.max_pool3d()的文档说明输入的形状应该是:Shape [batch, depth, rows, cols, channels]是我的通道维度仍然3,即使我的npy imgs是48通道深,可以这么说?

2)下一个问题与上一个问题相吻合:我的深度是48还是16?

3)(因为我在这里)批处理尺寸与3d数组相同,正确吗?这些图像就像任何其他图像一样,一次处理一个。

只是为了清楚:在我的情况下,对于单个图像批处理大小,上面的图像亮度,我的尺寸是:

[1(batch),16(depth), 171(rows), 128(cols), 3(channels)]

编辑:我在这里混淆了原始输入大小与池和内核大小。也许一些关于3D的一般指导会有所帮助。我基本上被卷积和池化的维度卡住了,正如最初的问题所清楚的那样。

回答你的问题,尺寸应该是(如你所说):[batch_size, depth, H, W, 3],其中depth是您拥有的时间框架的数量。

例如,20帧/秒的5s视频将具有depth=100


我最好的建议是先阅读CS231n关于深度学习的幻灯片视频(如果你能看到视频,那就更好了)。

基本上,3D卷积与2D卷积相同,只是多了一个维度。让我们回顾一下:

1D卷积(ex: text):

  • 输入形状为[batch_size, 10, in_channels]
  • 内核形状为[3, in_channels, out_channels]
  • 示例:对于文本,这是一个长度为10的句子,单词嵌入为dim in_channels
  • 内核用大小为3的内核检查句子(dim 10)

二维卷积(ex: image):

  • 输入形状为[batch_size, 10, 10, in_channels]
  • 内核形状为[3, 3, in_channels, out_channels]
  • ex: RGB图像,大小为10x10, in_channels=3
  • 内核用大小为3的内核检查图像(dim 10x10)
  • 内核是一个在图像上滑动的正方形

3D卷积(例如:video)

  • 输入形状为[batch_size, T, 10, 10, in_channels]
  • 内核形状为[T_kernel, 3, 3, in_channels, out_channels]
  • 示例:T=100帧的视频,以及尺寸为10x10的图像,in_channels=3
  • 内核通过大小为T_kernel(例如:T_kernel=10)的内核来查看视频(dim 100x10x10)
  • 内核就像一个立方体,在"立方体"上滑动。视频(时间* W * H)

卷积的目标是减少参数的数量,因为数据中存在冗余。对于图像,您可以在左上角的3x3框和右下角的3x3框中提取相同的基本特征。

对于视频,这是相同的。您可以从图像的3x3框中提取信息,但要在一个时间框架内(例如:10帧)。结果将具有3x3的图像维度和10帧的时间维度的接受域。

相关内容

  • 没有找到相关文章

最新更新