Dataset and Date Augmentation

计算机视觉的标注和计算过程中,关键点坐标经常是浮点数,主要有以下几个原因:
1. 亚像素精度
整数坐标的限制:整数坐标意味着关键点必须精确地落在某个像素格子的正中心。但现实世界中的特征点(比如眼角尖端)可能落在两个像素之间。
标注来源:如果标注是通过算法预先生成并由人工微调的,算法很可能计算出亚像素级别的位置(例如 100.5, 200.3),表示即使把图片放大很多倍看,这个点也依然精确。WFLW 数据集就提供了这种高精度标注。
2. 图像缩放与归一化
在数据预处理过程中(比如你的脚本里),坐标会经过大量的数学变换:
缩放 (Resize): 假设原图是 1000x1000,关键点在 (500, 500)。如果你把图片缩小到 224x224,坐标变成了 500 * (224/1000) = 112.0。如果缩放比例不是整数倍,计算结果必然是小数。
旋转 (Rotate): 旋转矩阵运算涉及三角函数(sin, cos),计算结果几乎总是浮点数。
如果强制四舍五入取整:每次变换都取整会引入量化误差 (Quantization Error)。 经过多次变换后,误差累积可能会让关键点偏移好几个像素,严重影响模型训练的高精度需求。
3. 模型的回归结果
神经网络的输出层通常是连续的浮点数值(回归任务)。
训练时:使用浮点数 Label 能提供更平滑的梯度
推理时:模型输出 100.4 比输出 100 包含更多的位置信息。

为了保持最高的几何精度,避免在预处理和标注阶段引入人为的舍入误差,标注文件中的坐标通常保留为浮点数。只有在最后需要画图显示(比如 cv2.circle)时,才会临时转为整数。




Enjoy Reading This Article?

Here are some more articles you might like to read next: