我有一个来自多目标跟踪试验的数据集,参与者在显示屏上跟踪8个点,其中4个是目标(在试验开始时短暂标记),4个是干扰物。试验结束时,参与者标记出4个目标。我的数据集只包括参与者回答正确的试验。每秒有10帧,每帧包括点的坐标和眼球注视的位置,总共18个数字。每个试验持续8秒。点的轨迹有40种可能。
我试图训练一个神经网络,仅根据注视和点的坐标来标记4个目标。问题是,在数据集中,答案总是向量中的前4个点。如果我使用这些输出进行训练,网络将只学会总是输出[1,1,1,1,0,0,0,0]。有没有办法通过计算不同的特征来改变输入或输出(或两者),这样网络接收点的顺序就不重要了?点在输入向量中的坐标是第一(第二,第三……)个在该任务中没有任何意义。
到目前为止我尝试过以下方法:
- 在训练过程中,随机排列每个输入(以及相应的输出),并遍历输出向量[1,1,1,1,0,0,0,0]的所有70种可能排列,以便在训练中均匀表示这些排列。没有效果(成功率为1/70,等同于随机猜测)
- 按从左到右的顺序(按x坐标排序)排列点 – 结果有所改善,但网络基本上是记住了轨迹,即使我移除了眼球注视位置也同样有效。当然,我希望网络即使对于它未训练过的新轨迹也能正确回答
我有一个关于输入特征的想法,我可以将显示屏划分为离散网格,在有点的区域放置1,在眼球注视位置放置其他数字,其余区域放置0。然而,我不知道输出会是什么样子,有什么想法吗?
我知道我无法从一帧中找到整个试验的答案,所以我希望结合试验中所有80帧的网络输出,并从中找到答案。
我甚至不确定神经网络是否有希望学会这个。是否有任何置换不变的机器学习模型?我已经搜索了很长时间,但一无所获。
回答:
看看PointNet架构。他们在解决一个类似的3D问题。
基本方法如下。将所有点输入到一个嵌入层,将x和y坐标映射到更高维度的空间。这些是点的局部特征。然后,将所有局部特征输入到一个“全局特征提取器”模块,其最后一层是最大池化。这个模块的输出代表整个输入,最大池化在最后保证了置换不变性(或“对称性”)。然后,将所有局部特征与全局特征连接起来,你就得到了每个点的完整特征集。最后,通过一个密集层将每个点的特征映射到点的类别,你就完成了。
如果你查看PointNet源代码,你会发现实现这个架构相当容易。