使用Tensorflow,如何将稀疏体积张量减少到目标体素以改进网络训练

时间:2018-06-09 06:19:12

标签: tensorflow machine-learning convolutional-neural-network

我正在创建一个自动编码器神经网络来执行3D体积数据的语义分割。数据稀疏(只有约1%的体素代表实际结构被分类,而剩余的99%是无效/无/空)。虽然每个3D体积图像都是64x64x64体素,但每个体素图像都具有独特的结构化大小和形状,因此我无法将所有输入均匀地展平为特定指数。

目标是让神经网络对代表实际结构的每个体素进行分类(即1%)。目前,通过将全体积数据输出与完全标记输出进行比较,反向传播减少了损失。由于预测没有任何东西/虚空很容易学习,因此产生99%的人为高精度。我的目标是让损失函数不使用完整的体积数据,而只使用包含结构数据的1%体积数据。

我的问题是关于设计的一点,但是如果每个图像都是唯一的,那么如何减少神经网络的输出和标签只包括结构体素?

更多详情:

  1. 网络的输入/输出/标签全部(3D体积数据):64x64x64体素
  2. 输入数据在空体素(99%)中始终为零,在结构体素中为非零(1%)。
  3. 空体素中的标签数据始终为零,结构体素中的标签数据为1/2/3/4。
  4. 这是我目前的不完整代码以及我想要完成的伪代码:

    prediction = convolutional_neural_network(x) # Dimentions: (? x 64 x 64 x 64)
    zero_tensor = tf.constant(0, dtype=tf.float32)
    y_structured_data = tf.not_equal(y, zero_tensor)
    # Use y_structured_data on prediction-Tensor to find structure voxels
    # reduce both Tensors to eliminate empty space. (Possibly using y_structured_data)
    # Feed those reduced Tensors to the loss function.
    loss = tf.nn.sigmoid_cross_entropy_with_logits(logits=reduced_prediction, labels=reduced_y)
    

    我尝试过使用tf.boolean_mask()和tf.where()来获得所需的缩减但还没有使用它。有什么想法吗?

0 个答案:

没有答案