ultralytics\yolo\v8\pose\train.py中计算损失函数的function是“compute_loss”,进入PoseLoss类中

sigmas指定每个关键点分配的权重,sigmas值越小会使loss越大,也就是越希望哪个点准,越应该把该点的sigmas值调小。进行人体关键点观测时默认用OKS_SIGMA,定义在yolo\utils\metrics.py中,OKS_SIGMA = np.array([.26, .25, .25, .35, .35, .79, .79, .72, .72, .62, .62, 1.07, 1.07, .87, .87, .89, .89]) / 10.0,否则所有点赋予同样的权重。

KeypointLoss计算1-OKS:


PoseLoss类中__call__定义了cls、box、kpts、kpts_conf的计算。其中kpts_conf采用BCE。关键点置信度是基于该关键点的可见性标志进行训练的。如果一个关键点是可见的或被遮挡的,那么ground truth置信度被设置为1否则如果它在视野之外,置信度被设置为0。在推理过程中,我们保留置信度大于0.5的关键点。所有其他预测的关键点都被拒绝。预测关键点置信度不用于评估。然而,由于网络预测了每个检测的所有17个关键点,我们需要过滤掉视野之外的关键点。否则,就会出现悬空的关键点,导致骨骼变形。

DFL损失函数的主要作用是用于图像风格迁移中,通过计算两张图片的特征差异来实现风格的转移,默认是不使用的。

四种损失通过超参数进行平衡。ultralytics\ultralytics\yolo\cfg\default.yaml中对该参数进行了设置:

本文详细解释了ultralytics/yolo/v8/pose/train.py中的loss函数,特别是PoseLoss类中的compute_loss和关键点权重。重点介绍了OKS置信度计算、KeypointLoss和DFL损失在模型中的应用。同时提到了超参数平衡在默认配置中的作用。

3501

被折叠的 条评论
为什么被折叠?



