先是一点题外话,作者的Github维护的很好,经常更新,而且对读者的答疑也很及时,大赞。下面进入正题。
看过代码的同学都知道,作者的核心思想X变换在代码pointcnn.py中,里面主要包含两部分,特征提取和X矩阵训练。下面分开来说。
用于提取邻域特征的只有两个dense层(也叫fc层/MLP),很简单地将尺度为(P,K,C)的邻域结构升维到了(P,K,C’)。
# Prepare features to be transformed
nn_fts_from_pts_0 = pf.dense(nn_pts_local_bn, C_pts_fts, tag + 'nn_fts_from_pts_0', is_training)#fc1, (N, P, K, C_pts_fts)
nn_fts_from_pts = pf.dense(nn_fts_from_pts_0, C_pts_fts, tag + 'nn_fts_from_pt', is_training)#fc2, features, f_delta
if fts is None:
nn_fts_input = nn_fts_from_pts
else:
nn_fts_from_prev = tf.gather_nd(fts, indices, name=tag + 'nn_fts_from_prev')
nn_fts_input = tf.concat([nn_fts_from_pts, nn_fts_from_prev], axis=-1, name=tag + 'nn_fts_input')
接下