Tensorflow nn.conv3d()和max_pool3d

Joh*_*len 5 multidimensional-array tensorflow

最近,Tensorflow增加了对3d卷积的支持.我正在尝试训练一些视频内容.

我有几个问题:

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

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

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

3)(因为我在这里)批量维度与3d数组相同,对吗?图像就像任何其他图像一样,一次处理一个.

需要明确的是:在我的情况下,对于单个图像批量大小,上面的图像变暗,我的尺寸为:

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

编辑:我把原始输入大小与池和内核大小混淆了.也许对这些3D东西的一些一般指导会有所帮助.我基本上坚持卷积和汇集的维度,正如原始问题中所清楚的那样.

Oli*_*rot 13

要回答您的问题,维度应该是(如您所述): 您拥有的时间范围[batch_size, depth, H, W, 3]在哪里depth.

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


我最好的建议是首先从大约深度学习的视频CS231n读幻灯片在这里(如果你能看到的视频,它甚至更好).

基本上,3D卷积与2D卷积相同,但具有一个维度.我们来回顾一下:

1D卷积(例如:文本):

  • 输入是形状的 [batch_size, 10, in_channels]
  • 内核很有形 [3, in_channels, out_channels]
  • 例如:对于文本,这是一个长度为10的句子,其中嵌入了暗淡的单词 in_channels
  • 内核用大小为3的内核遍历句子(dim 10)

2D卷积(例如:图像):

  • 输入是形状的 [batch_size, 10, 10, in_channels]
  • 内核很有形 [3, 3, in_channels, out_channels]
  • 例如:尺寸为10x10的RGB图像,带有 in_channels=3
  • 内核使用大小为3的内核遍历图像(昏暗10x10)
  • 内核是在图像上滑动的正方形

3D卷积(例如:视频)

  • 输入是形状的 [batch_size, T, 10, 10, in_channels]
  • 内核很有形 [T_kernel, 3, 3, in_channels, out_channels]
  • 例如:带T=100框架的视频和尺寸为10x10的图像in_channels=3
  • 内核越过视频(点心100x10x10)与大小的内核T_kernel(例如:T_kernel=10)
  • 内核就像一个立方体,滑过视频的"立方体"(时间*W*H)

卷积的目标是减少由于数据冗余而导致的参数数量.对于图像,您可以在左上角3x3框和右下角3x3框中提取相同的基本功能.

对于视频,这是相同的.您可以从图像的3x3框中提取信息,但是在一个时间范围内(例如:10帧).结果将在图像维度中具有3x3的感知域,并且在时间维度上具有10帧.