我应该对 3D 灰度图像使用 2D 还是 3D 卷积?
Should I use a 2D or 3D convolution for a 3D grayscale image?
我正在处理一个 TFRecord 数据集,该数据集由 3D 对象横截面的多个灰度图像组成,最终形状为 [32、256、256]。 32的维度代表横截面的个数,明显小于其他维度。
因此,我想知道我是否可以将数据视为具有 32 个通道的 2D 数据,而不是将数据视为具有一个通道的 3D 数据,特别是在所需的计算资源方面。我现在在 Google Colab 中将 TensorFlow 与 TPU 一起使用,使用 tf.layers.conv2d
而不是 tf.layers.conv3d
可以通过减少填充来节省大量内存。
这两种方法之间是否有任何显着差异,或者是否有我应该遵循的约定?使用 conv2d
会以任何方式损害我的准确性吗?
卷积层相对于完全连接的 2D 层的主要优势之一是权重在 2D 区域是局部的,并且在所有 2D 位置共享,即过滤器。这意味着即使出现多次或出现在不同位置,图像中的辨别模式也会被学习一次。 IE。它对翻译有些不变。
对于 3D 信号,您需要计算出是否需要滤波器输出对深度不变,也就是说,判别特征可能出现在图像中的任何深度或多个深度,或者深度位置是否特征相对固定。前者需要 3D 卷积,后者则可以使用具有大量通道的 2D 卷积。
例如(编造 - 我没有研究过这个),假设你对某人的肺部进行了 3D 扫描,并且你正在尝试对是否存在肿瘤进行分类。为此,您需要 3D 卷积,因为表示 "tumour" 的过滤器组合需要对该肿瘤的 X、Y 和 Z 位置保持不变。如果在这种情况下使用 2D 卷积,则训练集必须具有所有不同 Z 位置的肿瘤示例,否则网络将对 Z 位置非常敏感。
顺便说一句:使用 LSTM 的 CNN 是处理 3D 数据的另一种方法。
我正在处理一个 TFRecord 数据集,该数据集由 3D 对象横截面的多个灰度图像组成,最终形状为 [32、256、256]。 32的维度代表横截面的个数,明显小于其他维度。
因此,我想知道我是否可以将数据视为具有 32 个通道的 2D 数据,而不是将数据视为具有一个通道的 3D 数据,特别是在所需的计算资源方面。我现在在 Google Colab 中将 TensorFlow 与 TPU 一起使用,使用 tf.layers.conv2d
而不是 tf.layers.conv3d
可以通过减少填充来节省大量内存。
这两种方法之间是否有任何显着差异,或者是否有我应该遵循的约定?使用 conv2d
会以任何方式损害我的准确性吗?
卷积层相对于完全连接的 2D 层的主要优势之一是权重在 2D 区域是局部的,并且在所有 2D 位置共享,即过滤器。这意味着即使出现多次或出现在不同位置,图像中的辨别模式也会被学习一次。 IE。它对翻译有些不变。
对于 3D 信号,您需要计算出是否需要滤波器输出对深度不变,也就是说,判别特征可能出现在图像中的任何深度或多个深度,或者深度位置是否特征相对固定。前者需要 3D 卷积,后者则可以使用具有大量通道的 2D 卷积。
例如(编造 - 我没有研究过这个),假设你对某人的肺部进行了 3D 扫描,并且你正在尝试对是否存在肿瘤进行分类。为此,您需要 3D 卷积,因为表示 "tumour" 的过滤器组合需要对该肿瘤的 X、Y 和 Z 位置保持不变。如果在这种情况下使用 2D 卷积,则训练集必须具有所有不同 Z 位置的肿瘤示例,否则网络将对 Z 位置非常敏感。
顺便说一句:使用 LSTM 的 CNN 是处理 3D 数据的另一种方法。