PyTorch implementation of the paper "SCALoss: Side and Corner Aligned Loss for Bounding Box Regression" (AAAI 2022).
- IoU-based loss has the gradient vanish problem in the case of low overlapping bounding boxes with slow convergence speed.
- Side Overlap can put more penalty for low overlapping bounding box cases and Corner Distance can speed up the convergence.
- SCALoss, which combines Side Overlap and Corner Distance, can serve as a comprehensive similarity measure, leading to better localization performance and faster convergence speed.
- Python>=3.6.0
- PyTorch>=1.7
- Other dependencies described in requirements.txt
Conda is not necessary for the installation. Nevertheless, the installation process here is described using it.
$ conda create -n sca-yolo python=3.8 -y
$ conda activate sca-yolo
$ git clone https://github.com/Turoad/SCALoss
$ cd SCALoss
$ pip install -r requirements.txt
Train a model:
python train.py --data [dataset config] --cfg [model config] --weights [path of pretrain weights] --batch-size [batch size num]
For example, to train yolov3-tiny on COCO dataset from scratch with batch size=128.
python train.py --data coco.yaml --cfg yolov3-tiny.yaml --weights '' --batch-size 128
For multi-gpu training, it is recommended to use:
python -m torch.distributed.launch --nproc_per_node 4 train.py --img 640 --batch 32 --epochs 300 --data coco.yaml --weights '' --cfg yolov3.yaml --device 0,1,2,3
Test a model:
python val.py --data coco.yaml --weights runs/train/exp15/weights/last.pt --img 640 --iou-thres=0.65
Model | mAP 0.5:0.95 |
AP 0.5 |
AP 0.65 |
AP 0.75 |
AP 0.8 |
AP 0.9 |
---|---|---|---|---|---|---|
IoU | 18.8 | 36.2 | 27.2 | 17.3 | 11.6 | 1.9 |
GIoU relative improv.(%) |
18.8 0% |
36.2 0% |
27.1 -0.37% |
17.6 1.73% |
11.8 1.72% |
2.1 10.53% |
DIoU relative improv.(%) |
18.8 0% |
36.4 0.55% |
26.9 -1.1% |
17.2 -0.58% |
11.8 1.72% |
1.9 0% |
CIoU relative improv.(%) |
18.9 0.53% |
36.6 1.1% |
27.3 0.37% |
17.2 -0.58% |
11.6 0% |
2.1 10.53% |
SCA relative improv.(%) |
19.9 5.85% |
36.6 1.1% |
28.3 4.04% |
19.1 10.4% |
13.3 14.66% |
2.7 42.11% |
The convergence curves of different losses on YOLOV3-tiny:
Model | mAP 0.5:0.95 |
AP 0.5 |
AP 0.65 |
AP 0.75 |
AP 0.8 |
AP 0.9 |
---|---|---|---|---|---|---|
IoU | 44.8 | 64.2 | 57.5 | 48.8 | 41.8 | 20.7 |
GIoU relative improv.(%) |
44.7 -0.22% |
64.4 0.31% |
57.5 0% |
48.5 -0.61% |
42 0.48% |
20.4 -1.45% |
DIoU relative improv.(%) |
44.7 -0.22% |
64.3 0.16% |
57.5 0% |
48.9 0.2% |
42.1 0.72% |
19.8 -4.35% |
CIoU relative improv.(%) |
44.7 -0.22% |
64.3 0.16% |
57.5 0% |
48.9 0.2% |
41.7 -0.24% |
19.8 -4.35% |
SCA relative improv.(%) |
45.3 1.12% |
64.1 -0.16% |
57.9 0.7% |
49.9 2.25% |
43.3 3.59% |
21.4 3.38% |
comming soon
If our paper and code are beneficial to your work, please consider citing:
@inproceedings{zheng2022scaloss,
title={SCALoss: Side and Corner Aligned Loss for Bounding Box Regression},
author={Zheng, Tu and Zhao, Shuai and Liu, Yang and Liu, Zili and Cai, Deng},
booktitle={Proceedings of the AAAI Conference on Artificial Intelligence},
year={2022}
}
The code is modified from ultralytics/yolov3.