Closed tylertroy closed 2 years ago
eval_script.py
for coco is specifically set default behavior for matching efficientdet results. I need some tests for yolox / yolor evaluation method and fix it. May be related with the default nms_method
/ nms_mode
/ nms_topk
listed in coco#evaluation.
CUDA_VISIBLE_DEVICES='1' ./eval_script.py -m yolox.YOLOXTiny -d coco --use_anchor_free_mode
# Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.261
# Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.398
# Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.279
# Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.112
# Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.284
# Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.405
# Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.241
# Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.388
# Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.413
# Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.196
# Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.456
# Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.604
h5
directly is that, the pretrained weights for YOLOX
models actually using [0, 255]
input value range, need to specific --rescale_mode raw
, or it will use rescale_mode "torch"
.
# Same result with above
CUDA_VISIBLE_DEVICES='1' ./eval_script.py -m ~/.keras/models/yolox_tiny_coco.h5 -d coco --use_anchor_free_mode --rescale_mode raw
This is a result testing YOLOR_CSP
, which is also lower than official reported:
CUDA_VISIBLE_DEVICES='1' ./eval_script.py -m yolor.YOLOR_CSP -d coco --batch_size 2
# Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.444
# Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.610
# Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.483
# Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.301
# Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.490
# Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.566
# Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.327
# Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.543
# Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.586
# Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.422
# Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.628
# Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.711
np.allclose
: yolor verification-with-pytorch-version and yolox verification-with-pytorch-version.With above 2 commits, yolox evaluation is working correctly now. That it's using BGR input format... YOLOXS results also updated in coco#evaluation
CUDA_VISIBLE_DEVICES='1' ./coco_eval_script.py -m yolox.YOLOXTiny --nms_method hard --nms_iou_or_sigma 0.65 --use_bgr_input --use_anchor_free_mode
# Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.329
# Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.504
# Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.349
# Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.138
# Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.360
# Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.499
# Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.287
# Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.458
# Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.486
# Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.230
# Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.549
# Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.692
But yolor
still not right, I think maybe realted with its letterbox function, still trying.
CUDA_VISIBLE_DEVICES='1' ./coco_eval_script.py -m yolor.YOLOR_CSP --nms_method hard --nms_iou_or_sigma 0.65 --use_yolor_anchors_mode
# Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.488
# Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.674
# Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.530
# Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.324
# Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.539
# Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.627
# Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.365
# Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.592
# Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.634
# Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.447
# Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.684
# Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.779
YOLOR evaluation finaly fixed:
CUDA_VISIBLE_DEVICES='1' ./coco_eval_script.py -m yolor.YOLOR_CSP --use_yolor_anchors_mode --nms_method hard --nms_iou_or_sigma 0.65 \
--nms_max_output_size 300 --nms_topk -1 --letterbox_pad 64 --input_shape 704
# Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.500
# Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.686
# Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.544
# Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.340
# Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.551
# Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.643
# Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.380
# Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.627
# Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.683
# Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.529
# Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.735
# Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.817
More compare results can be found coco#evaluation
This issue has two parts. For the first I propose a solution but include it here incase my proposed solution effects part 2.
Part 1 When running the
eval_func.py
with the--use_anchor_free_mode
flag the following error is raised.The issue lies in
DecodePredictions
(keras_cv_attention_models/blob/main/keras_cv_attention_models/coco/eval_func.py#L27) whereby anchor-free keyword arguments are not specified.Can be fixed with
Part 2
When attempting to evaluate
yolox_s_coco.h5
I get poor results which don't line up with inference results. E.g.