AlexeyAB / darknet

YOLOv4 / Scaled-YOLOv4 / YOLO - Neural Networks for Object Detection (Windows and Linux version of Darknet )
http://pjreddie.com/darknet/
Other
21.73k stars 7.96k forks source link

The gradient of ciou in the function dx_box_iou is calculating wrong. #7165

Open wxq-888 opened 3 years ago

wxq-888 commented 3 years ago

the code in box.c :

            p_dx += (2 * (truth.x - pred.x)*C - (2 * Cw*dCw_dx + 2 * Ch*dCh_dx)*S) / (C * C);
            p_dy += (2 * (truth.y - pred.y)*C - (2 * Cw*dCw_dy + 2 * Ch*dCh_dy)*S) / (C * C);

Should it be modified:

            p_dx += (2 * (truth.x - pred.x)*C + (2 * Cw*dCw_dx + 2 * Ch*dCh_dx)*S) / (C * C);
            p_dy += (2 * (truth.y - pred.y)*C + (2 * Cw*dCw_dy + 2 * Ch*dCh_dy)*S) / (C * C);

????

wxq-888 commented 3 years ago

请问作者,在计算Diou梯度的时候(box.c文件中) if (iou_loss == DIOU) { if (C > 0) { p_dx += (2 (truth.x - pred.x)C - (2 CwdCw_dx + 2 ChdCh_dx)S) / (C C); p_dy += (2 (truth.y - pred.y)C - (2 CwdCw_dy + 2 ChdCh_dy)S) / (C C); p_dw += (2 CwdCw_dw + 2 ChdCh_dw)S / (C C); p_dh += (2 CwdCw_dh + 2 ChdCh_dh)S / (C C); } p_dx与p_dy部分- (2 CwdCw_dx + 2 ChdCh_dx)S和 - (2 CwdCw_dy + 2 ChdCh_dy)S 这里的负号为什么不是正号呢?

对Diou的附加项:-S / C求偏导时,p_dx的后半部分 -(2 CwdCw_dx + 2 ChdCh_dx)S与p_dw 的后半部分(2 CwdCw_dw + 2 ChdCh_dw)S,符号不应该本是一样嘛/(ㄒoㄒ)/ ~~