From e840b7c781fd37e465bf95635ca9551862af59ea Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Sun, 16 Feb 2020 23:12:07 -0800 Subject: [PATCH] add yolov3-spp-ultralytics.pt --- README.md | 42 +++++++++++++++++++++--------------------- detect.py | 2 +- models.py | 3 ++- test.py | 2 +- train.py | 2 +- utils/utils.py | 2 +- 6 files changed, 27 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 6dba20e4..9c083dd9 100755 --- a/README.md +++ b/README.md @@ -139,39 +139,39 @@ Success: converted 'weights/yolov3-spp.pt' to 'converted.weights' # mAP ```bash -python3 test.py --weights ... --cfg ... +$ python3 test.py --cfg yolov3-spp.cfg --weights yolov3-spp-ultralytics.pt ``` - mAP@0.5 run at `--iou-thr 0.5`, mAP@0.5...0.95 run at `--iou-thr 0.7` -- YOLOv3-SPP ultralytics is `ultralytics68.pt` with `yolov3-spp.cfg` - Darknet results: https://arxiv.org/abs/1804.02767 |Size |COCO mAP
@0.5...0.95 |COCO mAP
@0.5 --- | --- | --- | --- -YOLOv3-tiny
YOLOv3
YOLOv3-SPP
**YOLOv3-SPP ultralytics** |320 |14.0
28.7
30.5
**35.6** |29.1
51.8
52.3
**55.4** -YOLOv3-tiny
YOLOv3
YOLOv3-SPP
**YOLOv3-SPP ultralytics** |416 |16.0
31.2
33.9
**39.1** |33.0
55.4
56.9
**59.6** -YOLOv3-tiny
YOLOv3
YOLOv3-SPP
**YOLOv3-SPP ultralytics** |512 |16.6
32.7
35.6
**40.6** |34.9
57.7
59.5
**61.4** -YOLOv3-tiny
YOLOv3
YOLOv3-SPP
**YOLOv3-SPP ultralytics** |608 |16.6
33.1
37.0
**41.1** |35.4
58.2
60.7
**61.7** +YOLOv3-tiny
YOLOv3
YOLOv3-SPP
**[YOLOv3-SPP-ultralytics](https://drive.google.com/open?id=1UcR-zVoMs7DH5dj3N1bswkiQTA4dmKF4)** |320 |14.0
28.7
30.5
**36.3** |29.1
51.8
52.3
**55.5** +YOLOv3-tiny
YOLOv3
YOLOv3-SPP
**[YOLOv3-SPP-ultralytics](https://drive.google.com/open?id=1UcR-zVoMs7DH5dj3N1bswkiQTA4dmKF4)** |416 |16.0
31.2
33.9
**39.8** |33.0
55.4
56.9
**59.6** +YOLOv3-tiny
YOLOv3
YOLOv3-SPP
**[YOLOv3-SPP-ultralytics](https://drive.google.com/open?id=1UcR-zVoMs7DH5dj3N1bswkiQTA4dmKF4)** |512 |16.6
32.7
35.6
**41.3** |34.9
57.7
59.5
**61.3** +YOLOv3-tiny
YOLOv3
YOLOv3-SPP
**[YOLOv3-SPP-ultralytics](https://drive.google.com/open?id=1UcR-zVoMs7DH5dj3N1bswkiQTA4dmKF4)** |608 |16.6
33.1
37.0
**41.7** |35.4
58.2
60.7
**61.5** ```bash -$ python3 test.py --img-size 608 --iou-thr 0.6 --weights ultralytics68.pt --cfg yolov3-spp.cfg +$ python3 test.py --cfg yolov3-spp.cfg --weights yolov3-spp-ultralytics.pt --img 608 -Namespace(batch_size=32, cfg='yolov3-spp.cfg', conf_thres=0.001, data='data/coco2014.data', device='', img_size=608, iou_thres=0.6, save_json=True, task='test', weights='ultralytics68.pt') -Using CUDA device0 _CudaDeviceProperties(name='Tesla V100-SXM2-16GB', total_memory=16130MB) - Class Images Targets P R mAP@0.5 F1: 100% 157/157 [03:30<00:00, 1.16it/s] - all 5e+03 3.51e+04 0.0353 0.891 0.606 0.0673 - Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.409 +Namespace(batch_size=32, cfg='yolov3-spp.cfg', conf_thres=0.001, data='data/coco2014.data', device='', img_size=608, iou_thres=0.6, save_json=True, single_cls=False, task='test', weights='last54.pt') +Using CUDA device0 _CudaDeviceProperties(name='Tesla P100-PCIE-16GB', total_memory=16280MB) + + Class Images Targets P R mAP@0.5 F1: 100% 157/157 [04:25<00:00, 1.04it/s] + all 5e+03 3.51e+04 0.0467 0.886 0.607 0.0875 + Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.415 Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.615 - Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.437 - Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.242 - Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.448 - Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.519 - Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.337 - Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.557 - Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.612 - Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.438 + Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.443 + Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.245 + Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.458 + Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.531 + Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.341 + Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.559 + Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.611 + Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.441 Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.658 - Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.746 + Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.748 ``` # Reproduce Our Results diff --git a/detect.py b/detect.py index d3eff739..ca6a3873 100644 --- a/detect.py +++ b/detect.py @@ -159,7 +159,7 @@ if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--cfg', type=str, default='cfg/yolov3-spp.cfg', help='*.cfg path') parser.add_argument('--names', type=str, default='data/coco.names', help='*.names path') - parser.add_argument('--weights', type=str, default='weights/ultralytics68.pt', help='path to weights file') + parser.add_argument('--weights', type=str, default='weights/yolov3-spp-ultralytics.pt', help='weights path') parser.add_argument('--source', type=str, default='data/samples', help='source') # input file/folder, 0 for webcam parser.add_argument('--output', type=str, default='output', help='output folder') # output folder parser.add_argument('--img-size', type=int, default=416, help='inference size (pixels)') diff --git a/models.py b/models.py index edc3bf15..65f95450 100755 --- a/models.py +++ b/models.py @@ -434,7 +434,8 @@ def attempt_download(weights): 'darknet53.conv.74': '1WUVBid-XuoUBmvzBVUCBl_ELrzqwA8dJ', 'yolov3-tiny.conv.15': '1Bw0kCpplxUqyRYAJr9RY9SGnOJbo9nEj', 'ultralytics49.pt': '158g62Vs14E3aj7oPVPuEnNZMKFNgGyNq', - 'ultralytics68.pt': '1Jm8kqnMdMGUUxGo8zMFZMJ0eaPwLkxSG'} + 'ultralytics68.pt': '1Jm8kqnMdMGUUxGo8zMFZMJ0eaPwLkxSG', + 'yolov3-spp-ultralytics.pt': '1UcR-zVoMs7DH5dj3N1bswkiQTA4dmKF4'} file = Path(weights).name if file in d: diff --git a/test.py b/test.py index a5cec3b4..e1a80967 100644 --- a/test.py +++ b/test.py @@ -210,7 +210,7 @@ if __name__ == '__main__': parser = argparse.ArgumentParser(prog='test.py') parser.add_argument('--cfg', type=str, default='cfg/yolov3-spp.cfg', help='*.cfg path') parser.add_argument('--data', type=str, default='data/coco2014.data', help='*.data path') - parser.add_argument('--weights', type=str, default='weights/yolov3-spp.weights', help='path to weights file') + parser.add_argument('--weights', type=str, default='weights/yolov3-spp-ultralytics.pt', help='weights path') parser.add_argument('--batch-size', type=int, default=32, help='size of each image batch') parser.add_argument('--img-size', type=int, default=416, help='inference size (pixels)') parser.add_argument('--conf-thres', type=float, default=0.001, help='object confidence threshold') diff --git a/train.py b/train.py index abf547b5..cb17b946 100644 --- a/train.py +++ b/train.py @@ -406,7 +406,7 @@ if __name__ == '__main__': parser.add_argument('--evolve', action='store_true', help='evolve hyperparameters') parser.add_argument('--bucket', type=str, default='', help='gsutil bucket') parser.add_argument('--cache-images', action='store_true', help='cache images for faster training') - parser.add_argument('--weights', type=str, default='weights/ultralytics68.pt', help='initial weights') + parser.add_argument('--weights', type=str, default='weights/yolov3-spp-ultralytics.pt', help='initial weights path') parser.add_argument('--arc', type=str, default='default', help='yolo architecture') # default, uCE, uBCE parser.add_argument('--name', default='', help='renames results.txt to results_name.txt if supplied') parser.add_argument('--device', default='', help='device id (i.e. 0 or 0,1 or cpu)') diff --git a/utils/utils.py b/utils/utils.py index 85dd3658..f877a7ce 100755 --- a/utils/utils.py +++ b/utils/utils.py @@ -369,7 +369,7 @@ def compute_loss(p, targets, model, giou_flag=True): # predictions, targets, mo tcls, tbox, indices, anchor_vec = build_targets(model, targets) h = model.hyp # hyperparameters arc = model.arc # # (default, uCE, uBCE) detection architectures - red = 'sum' # Loss reduction (sum or mean) + red = 'mean' # Loss reduction (sum or mean) # Define criteria BCEcls = nn.BCEWithLogitsLoss(pos_weight=ft([h['cls_pw']]), reduction=red)