以 3d 网格作为输入的张量流神经网络

tensorflow neural network with 3d mesh as input

我正在尝试构建一个将 3d 网格的顶点位置作为输入的神经网络, 并输出内部两点的坐标。

出于测试目的,我有一个包含 20 个点的几何体的数据集,每个点在内部有两个点。

数据集的每个文件都包含等级 2 中顶点的坐标,对象的形状为 [3,20] 数组,结果点的形状为 [3,3]。

我建立了一个线性模型,但结果总是很低 (0,16) ,不管我用 1000、100.000 还是 500.000 训练它

import tensorflow as tf
import numpy as np

objList    = np.load('../testFullTensors/objsArray_00.npy')
guideList  = np.load('..testFullTensors/drvsArray_00.npy')


x  = tf.placeholder(tf.float32, shape=[None, 60])
y_ = tf.placeholder(tf.float32, shape=[None, 6])

W = tf.Variable(tf.zeros([60,6],tf.float32))
b = tf.Variable(tf.zeros([6],tf.float32))

y = tf.matmul(x,W) + b

cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y))

train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    train_step.run(feed_dict={x: objList, y_: guideList})
    correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
    sess.run(tf.global_variables_initializer())
    print accuracy.eval(session=sess , feed_dict={x: objs, y_: guides})`

我应该建立一个不同类型的网络吗?

谢谢 E

首先感谢评论中对问题的澄清,确实有助于理解问题。

我理解的问题是(至少类似于):给定手臂外侧的一组 3D 点,识别

  • A 肱骨上最接近 body
  • 的 3D 点
  • B 肱骨上距离 body
  • 最远的 3D 点

我们需要的是一个具有足够表现力的模型来做到这一点。让我们首先考虑这个问题对人类来说是最简单的。如果给一个人一个他们可以查看和旋转的 3D 模型,那么这将是一个视觉问题,他们可能会 立即理解

如果它是一个包含 60 个数字的列表,并且他们没有被告知这些数字的含义并且他们必须得出 6 个数字作为答案,那么这可能是不可能的。

We know that TensorFlow is good at image recognition,那我们就把问题转化为图像识别问题吧

让我们从 MNIST 网络开始 并讨论如何将其更改为我们的问题!

将您的输入转换为 voxels,这样每个训练示例将是一个大小为 [m,m,m] 的 3D 图像,其中 m 是您需要的分辨率(从 30 左右开始进行初始测试,然后可能高达 128)。用 0 初始化 3D 矩阵。然后对于20个数据点中的每一个,将相应的体素更改为1(或概率)。

那是你的输入,因为你有很多训练样本,你将有一个 [batch,m,m,m] 的张量。

对您的预期输出执行相同的操作。

通过 layers of convolution 发送(从 2 或 3 开始进行测试),这样您的输出大小为 [batch,m,m,m]。

使用反向传播来训练您的输出层以预测您的预期输出。

最后,您将拥有一个网络,它没有 return 肱骨的 3D 坐标,而是 return 它在 3D 中位置的概率图 space。您可以扫描最高概率的输出并读取坐标。

这与 AlphaGo 击败围棋的方式非常相似

建议的改进 - 训练 1 个网络来预测 A 和一个单独的网络来预测 B