处理数据集中的 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)
当地标在图像中不可见时,您希望模型预测什么?
在这种情况下,您的下游任务期望什么?
一个可能的选择是为每个地标输出 三个 数字:它的 x
和 y
坐标(就像你现在做的那样)和一个附加二进制变量 v
如果地标可见则为 1,否则为零。
在这种情况下,在训练期间,您应该为每个地标提供 3 个目标:gt_x
、gt_y
和 gt_v
。对于可见点(那些在你的集合中没有 NaN
s 的点)gt_v
应该是 1,而对于不可见点(那些有 NaN
s 的点)gt_v
应该是 0 而你对于这些点,可以将任何数字插入 gt_x
和 gt_y
。
您应该有两个损失函数:第一个是每个点的预测可见性和真实可见性 gt_v
之间的 binary cross-entropy loss。
第二个损失是预测的 x, y
坐标和目标之间的回归损失。 但是(这很重要)你只计算他们 gt_v == 1
!
点的第二个损失
在测试时,您应该检查地标的预测可见性 pred_v
,并仅考虑模型预测它们可见的地标。
我正在 Python 中创建关键点检测深度学习算法(使用 pandas 数据,keras/tensorflow)来检测图像中的解剖标志。例如,输入将是图像(比如面部),输出将是图像中每只眼睛中心的像素坐标 (x,y)。我面临的问题是我有多个正在寻找的解剖标志(眼睛、鼻子、嘴巴等),但这些标志并不总是在输入图像中,这导致某些 (x,y) 坐标的 NaN 值。我想保留 NaN 值,以便算法知道这些特征何时在图像中,何时不在图像中。我也不想将 NaN 值更改为 0,因为这会影响我正在使用关键点算法的另一个进程。有没有办法保留 NaN 值但仍然训练算法?附件是我正在使用的数据的基本布局。(Pixel coordinate data)
当地标在图像中不可见时,您希望模型预测什么?
在这种情况下,您的下游任务期望什么?
一个可能的选择是为每个地标输出 三个 数字:它的 x
和 y
坐标(就像你现在做的那样)和一个附加二进制变量 v
如果地标可见则为 1,否则为零。
在这种情况下,在训练期间,您应该为每个地标提供 3 个目标:gt_x
、gt_y
和 gt_v
。对于可见点(那些在你的集合中没有 NaN
s 的点)gt_v
应该是 1,而对于不可见点(那些有 NaN
s 的点)gt_v
应该是 0 而你对于这些点,可以将任何数字插入 gt_x
和 gt_y
。
您应该有两个损失函数:第一个是每个点的预测可见性和真实可见性 gt_v
之间的 binary cross-entropy loss。
第二个损失是预测的 x, y
坐标和目标之间的回归损失。 但是(这很重要)你只计算他们 gt_v == 1
!
在测试时,您应该检查地标的预测可见性 pred_v
,并仅考虑模型预测它们可见的地标。