tensorflow - 我应该对 3D 灰度图像使用 2D 还是 3D 卷积?
问题描述
我正在使用一个 TFRecord 数据集,该数据集由 3D 对象横截面的多个灰度图像组成,最终形状为 [32、256、256]。32的维度代表横截面的数量,它明显小于其他维度。
因此,我想知道是否可以将数据视为具有 32 个通道的 2D 数据,而不是将数据视为具有一个通道的 3D 数据,尤其是在所需的计算资源方面有帮助。我现在在 Google Colab 中将 TensorFlow 与 TPU 一起使用,使用tf.layers.conv2d
而不是tf.layers.conv3d
会从更少的填充中节省大量内存。
这两种方法之间是否有任何显着差异,或者我应该遵循什么约定?使用会conv2d
以任何方式损害我的准确性吗?
解决方案
卷积层相对于完全连接的 2D 层的主要好处之一是权重是 2D 区域的局部权重,并且在所有 2D 位置上共享,即过滤器。这意味着即使图像中的判别模式出现多次或出现在不同的位置,它也会被学习一次。即它对翻译有些不变。
对于 3D 信号,您需要确定是否需要滤波器输出对深度保持不变,即判别特征可能出现在图像中的任何一个或多个深度,或者特征的深度位置是否相对固定. 前者需要 3D 卷积,后者则可以使用具有大量通道的 2D 卷积。
例如(编造这个——我还没有研究过),假设你对某人的肺部进行了 3D 扫描,并且你正在尝试分类是否存在肿瘤。为此,您需要 3D 卷积,因为表示“肿瘤”的过滤器组合需要对该肿瘤的 X、Y 和 Z 位置保持不变。如果在这种情况下使用 2D 卷积,则训练集必须具有所有不同 Z 位置的肿瘤样本,否则网络将对 Z 位置非常敏感。
顺便说一句:带有 LSTM 的 CNN 是另一种处理 3D 数据的方法。
推荐阅读
- algorithm - 硬币找零问题的贪心算法什么时候总是失败/总是最优的?
- git - 无法连接到存储库:执行 git 命令时出错:ls-remote -h https://github.com/hichemmehdi/EmployeeManager.git HEAD
- c++ - 有没有办法设置条件
- javascript - 如何使用 componentDidMount 在我的播放器中设置默认视频?
- angular - Key Cloak API - Remove Role for specific id/name 删除所选用户的所有角色
- python - Python pip firebase-admin 问题
- php - Yii2 邮件配置文件路径
- masm32 - 如何在记事本++中运行MASM32
- networking - 认识这个 UDP 协议或数据结构:x48 x65 “He”?
- python - python在编码为utf-8时随机将字节添加到字符串中