Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[INTERESTING DISCOVERY]Changing the save order of detection results for the same image can affect mAP #287

Open
zjykzj opened this issue Jun 29, 2024 · 0 comments

Comments

@zjykzj
Copy link

zjykzj commented Jun 29, 2024

Hi @derronqi ,Thank you very much for opening up this project. During the reproduction process, I discovered a very interesting phenomenon, modify the return result format of the function def detect(model, img0) in the file test_widerface.py, The evaluation results will send significant changes

    return boxes # 115

For example, I retrained yolov5s-face according to the readme tutorial

python3 train.py --data data/widerface.yaml --cfg models/yolov5s.yaml --weights weights/yolov5s.pt --device 0
...
...
     Epoch   gpu_mem       box       obj       cls  landmark     total   targets  img_size
   249/249     5.35G   0.03918   0.02193         0  0.007254   0.06837        18       800: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 801/801 [02:30<00:00,  5.33it/s]
             Class      Images     Targets           P           R      [email protected]  [email protected]:.95: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 202/202 [00:20<00:00,  9.67it/s]
               all    3.22e+03    3.96e+04       0.585       0.722       0.715       0.341
Optimizer stripped from runs/train/exp/weights/last.pt, 14.4MB

At this point, the detection result format for a single image is as follows:

# cat 0_Parade_marchingband_1_1004.txt
0_Parade_marchingband_1_1004
8
648 191 41 47 0.854352
811 222 35 40 0.83551
119 216 38 43 0.814521
431 236 31 36 0.7911
691 204 35 42 0.788116
772 203 35 50 0.77299
328 408 46 44 0.676769
158 409 44 52 0.623878

Then evaluated the performance of the WIDER_val dataset according to the tutorial

$ python3 evaluation.py -p widerface_txt -g ./ground_truth
evaluation.py:14: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.
Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
  from bbox import bbox_overlaps
Reading Predictions : 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 61/61 [00:00<00:00, 277.39it/s]
Processing easy: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 61/61 [00:17<00:00,  3.44it/s]
Processing medium: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 61/61 [00:17<00:00,  3.51it/s]
Processing hard: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 61/61 [00:17<00:00,  3.43it/s]
==================== Results ====================
Easy   Val AP: 0.9436869650197075
Medium Val AP: 0.9235817488778479
Hard   Val AP: 0.8247729821066756
=================================================

The training results are consistent with the paper, but when I reversed the detection results based on confidence, the accuracy became very low.

    # return boxes
    sorted_boxes = sorted(boxes, key=lambda x: x[-1], reverse=False)
    return sorted_boxes

The current test results are as follows:

# cat 0_Parade_marchingband_1_1004.txt
0_Parade_marchingband_1_1004
8
158 409 44 52 0.623878
328 408 46 44 0.676769
772 203 35 50 0.77299
691 204 35 42 0.788116
431 236 31 36 0.7911
119 216 38 43 0.814521
811 222 35 40 0.83551
648 191 41 47 0.854352
$ python3 evaluation.py -p widerface_txt -g ./ground_truth
evaluation.py:14: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.
Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
  from bbox import bbox_overlaps
Reading Predictions : 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 61/61 [00:00<00:00, 292.96it/s]
Processing easy: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 61/61 [00:16<00:00,  3.77it/s]
Processing medium: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 61/61 [00:16<00:00,  3.79it/s]
Processing hard: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 61/61 [00:16<00:00,  3.79it/s]
==================== Results ====================
Easy   Val AP: 0.3488423571451206
Medium Val AP: 0.4057972188864014
Hard   Val AP: 0.40385116704238416
=================================================

I have tested many methods, including directly using pretrained models provided in the warehouse, or using the official YOLOv5 project for training and testing, and obtained the same results.

I believe this must be due to formatting issues in the subsequent calculation process. I just want to have a better understanding of WIDERFACE's evaluation calculation method, and I look forward to your reply.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant