[英]Tensorflow nn.conv3d() and max_pool3d
最近,Tensorflow增加了对3d卷积的支持。 我正在尝试训练一些视频内容。
我有几个问题:
我的输入是每帧16帧,3通道.npy
文件,所以它们的形状是: (128, 171, 48)
.npy
(128, 171, 48)
。
1) tf.nn.max_pool3d()
)的文档 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东西的一些一般指导会有所帮助。 我基本上坚持卷积和汇集的维度,正如原始问题中所清楚的那样。
要回答您的问题,维度应该是(如您所述): [batch_size, depth, H, W, 3]
其中depth
是您拥有的时间帧数。
例如,具有20帧/秒的5s视频将具有depth=100
。
我最好的建议是首先从大约深度学习的视频CS231n读幻灯片在这里 (如果你能看到的视频 ,它甚至更好)。
基本上,3D卷积与2D卷积相同,但具有一个维度。 我们来回顾一下:
[batch_size, 10, in_channels]
[3, in_channels, out_channels]
in_channels
[batch_size, 10, 10, in_channels]
[3, 3, in_channels, out_channels]
in_channels=3
[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
) 卷积的目标是减少由于数据冗余而导致的参数数量。 对于图像,您可以在左上角3x3框和右下角3x3框中提取相同的基本功能。
对于视频,这是相同的。 您可以从图像的3x3框中提取信息,但是在一个时间范围内(例如:10帧)。 结果将在图像维度中具有3x3的感知域,并且在时间维度上具有10帧。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.