处理数据集中的 NaN 值以进行关键点坐标检测

Deal With NaN values in dataset for key-point coordinate detection

我正在 Python 中创建关键点检测深度学习算法(使用 pandas 数据,keras/tensorflow)来检测图像中的解剖标志。例如,输入将是图像(比如面部),输出将是图像中每只眼睛中心的像素坐标 (x,y)。我面临的问题是我有多个正在寻找的解剖标志(眼睛、鼻子、嘴巴等),但这些标志并不总是在输入图像中,这导致某些 (x,y) 坐标的 NaN 值。我想保留 NaN 值,以便算法知道这些特征何时在图像中,何时不在图像中。我也不想将 NaN 值更改为 0,因为这会影响我正在使用关键点算法的另一个进程。有没有办法保留 NaN 值但仍然训练算法?附件是我正在使用的数据的基本布局。(Pixel coordinate data)

当地标在图像中不可见时,您希望模型预测什么?
在这种情况下,您的下游任务期望什么?

一个可能的选择是为每个地标输出 三个 数字:它的 xy 坐标(就像你现在做的那样)和一个附加二进制变量 v 如果地标可见则为 1,否则为零。

在这种情况下,在训练期间,您应该为每个地标提供 3 个目标:gt_xgt_ygt_v。对于可见点(那些在你的集合中没有 NaNs 的点)gt_v 应该是 1,而对于不可见点(那些有 NaNs 的点)gt_v 应该是 0 而你对于这些点,可以将任何数字插入 gt_xgt_y

您应该有两个损失函数:第一个是每个点的预测可见性和真实可见性 gt_v 之间的 binary cross-entropy loss
第二个损失是预测的 x, y 坐标和目标之间的回归损失。 但是(这很重要)你只计算他们 gt_v == 1!

点的第二个损失

在测试时,您应该检查地标的预测可见性 pred_v,并仅考虑模型预测它们可见的地标。