# PyTorch_YOLO-Family **Repository Path**: eye4bit/PyTorch_YOLO-Family ## Basic Information - **Project Name**: PyTorch_YOLO-Family - **Description**: YOLO系列算法 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-06-07 - **Last Updated**: 2025-07-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Update: 2022-05-31 Recently, I have released an anchor-free YOLO: https://github.com/yjh0410/FreeYOLO # A new and strong YOLO family Recently, I rebuild my YOLO-Family project !! # Requirements - We recommend you to use Anaconda to create a conda environment: ```Shell conda create -n yolo python=3.6 ``` - Then, activate the environment: ```Shell conda activate yolo ``` - Requirements: ```Shell pip install -r requirements.txt ``` PyTorch >= 1.1.0 and Torchvision >= 0.3.0 # Visualize positive samples You can run following command to visualize positiva sample: ```Shell python train.py \ -d voc \ --root path/to/your/dataset \ -m yolov2 \ --batch_size 2 \ --vis_targets ``` # Come soon My better YOLO family # This project In this project, you can enjoy: - a new and stronger YOLOv1 - a new and stronger YOLOv2 - a stronger YOLOv3 - a stronger YOLOv3 with SPP - a stronger YOLOv3 with DilatedEncoder - YOLOv4 (I'm trying to make it better) - YOLO-Tiny - YOLO-Nano # Future work - Try to make my YOLO-v4 better. - Train my YOLOv1/YOLOv2 with ViT-Base (pretrained by MaskAutoencoder) # Weights You can download all weights including my DarkNet-53, CSPDarkNet-53, MAE-ViT and YOLO weights from the following links. ## Backbone My Backbone: - DarkNet53: https://github.com/yjh0410/PyTorch_YOLO-Family/releases/download/yolo-weight/darknet53.pth - CSPDarkNet-53: https://github.com/yjh0410/PyTorch_YOLO-Family/releases/download/yolo-weight/cspdarknet53.pth - CSPDarkNet-Tiny: https://github.com/yjh0410/PyTorch_YOLO-Family/releases/download/yolo-weight/cspdarknet_tiny.pth YOLOX-Backbone: - CSPDarkNet-S: https://github.com/yjh0410/YOLOX-Backbone/releases/download/YOLOX-Backbone/yolox_cspdarknet_s.pth - CSPDarkNet-M: https://github.com/yjh0410/YOLOX-Backbone/releases/download/YOLOX-Backbone/yolox_cspdarknet_m.pth - CSPDarkNet-L: https://github.com/yjh0410/YOLOX-Backbone/releases/download/YOLOX-Backbone/yolox_cspdarknet_l.pth - CSPDarkNet-X: https://github.com/yjh0410/YOLOX-Backbone/releases/download/YOLOX-Backbone/yolox_cspdarknet_x.pth - CSPDarkNet-Tiny: https://github.com/yjh0410/YOLOX-Backbone/releases/download/YOLOX-Backbone/yolox_cspdarknet_tiny.pth - CSPDarkNet-Nano: https://github.com/yjh0410/YOLOX-Backbone/releases/download/YOLOX-Backbone/yolox_cspdarknet_nano.pth ## YOLO - YOLOv1: https://github.com/yjh0410/PyTorch_YOLO-Family/releases/download/yolo-weight/yolov1_35.22_54.7.pth - YOLOv2: https://github.com/yjh0410/PyTorch_YOLO-Family/releases/download/yolo-weight/yolov2_36.4_56.6.pth - YOLOv3: https://github.com/yjh0410/PyTorch_YOLO-Family/releases/download/yolo-weight/yolov3_36.9_59.0.pth - YOLOv3-SPP: https://github.com/yjh0410/PyTorch_YOLO-Family/releases/download/yolo-weight/yolov3_spp_38.2_60.1.pth - YOLOv3-DE: https://github.com/yjh0410/PyTorch_YOLO-Family/releases/download/yolo-weight/yolov3_de_38.7_60.2.pth - YOLOv4: https://github.com/yjh0410/PyTorch_YOLO-Family/releases/download/yolo-weight/yolov4_exp_43.0_63.4.pth - YOLO-Tiny: https://github.com/yjh0410/PyTorch_YOLO-Family/releases/download/yolo-weight/yolo_tiny_28.8_48.6.pth - YOLO-Nano: https://github.com/yjh0410/PyTorch_YOLO-Family/releases/download/yolo-weight/yolo_nano_22.4_40.7.pth # Experiments ## Tricks Tricks in this project: - [x] Augmentations: Flip + Color jitter + RandomCrop - [x] Model EMA - [x] Mosaic Augmentation - [x] Multi Scale training - [ ] Gradient accumulation - [ ] MixUp Augmentation - [ ] Cosine annealing learning schedule - [ ] AdamW - [ ] Scale loss by number of positive samples # Experiments All experiment results are evaluated on COCO val. All FPS results except YOLO-Nano's are measured on a 2080ti GPU. We will measure the speed of YOLO-Nano on a CPU. ## YOLOv1
FPS AP AP50 AP75 APs APm APl GFLOPs Params
YOLOv1-320 151 25.4 41.5 26.0 4.2 25.0 49.8 10.49 44.54M
YOLOv1-416 128 30.1 47.8 30.9 7.8 31.9 53.3 17.73 44.54M
YOLOv1-512 114 33.1 52.2 34.0 10.8 35.9 54.9 26.85 44.54M
YOLOv1-640 75 35.2 54.7 37.1 14.3 39.5 53.4 41.96 44.54M
YOLOv1-800 65.56 44.54M
## YOLOv2
FPS AP AP50 AP75 APs APm APl GFLOPs Params
YOLOv2-320 147 26.8 44.1 27.1 4.7 27.6 50.8 10.53 44.89M
YOLOv2-416 123 31.6 50.3 32.4 9.1 33.8 54.0 17.79 44.89M
YOLOv2-512 108 34.3 54.0 35.4 12.3 37.8 55.2 26.94 44.89M
YOLOv2-640 73 36.3 56.6 37.7 15.1 41.1 54.0 42.10 44.89M
YOLOv2-800 65.78 44.89M
## YOLOv3
FPS AP AP50 AP75 APs APm APl GFLOPs Params
YOLOv3-320 111 30.8 50.3 31.8 10.0 33.1 50.0 19.57 61.97M
YOLOv3-416 89 34.8 55.8 36.1 14.6 37.5 52.9 33.08 61.97M
YOLOv3-512 77 36.9 58.1 39.3 18.0 40.3 52.2 50.11 61.97M
YOLOv3-608 51 37.0 58.9 39.3 20.5 41.2 49.0 70.66 61.97M
YOLOv3-640 49 36.9 59.0 39.7 21.6 41.6 47.7 78.30 61.97M
## YOLOv3 with SPP
FPS AP AP50 AP75 APs APm APl GFLOPs Params
YOLOv3-SPP-320 110 31.0 50.8 32.0 10.5 33.0 50.4 19.68 63.02M
YOLOv3-SPP-416 88 35.0 56.1 36.4 14.9 37.7 52.8 33.26 63.02M
YOLOv3-SPP-512 75 37.2 58.7 39.1 19.1 40.0 53.0 50.38 63.02M
YOLOv3-SPP-608 50 38.3 60.1 40.7 20.9 41.1 51.2 71.04 63.02M
YOLOv3-SPP-640 48 38.2 60.1 40.4 21.6 41.1 50.5 78.72 63.02M
## YOLOv3 with Dilated Encoder The DilatedEncoder is proposed by YOLOF.
FPS AP AP50 AP75 APs APm APl GFLOPs Params
YOLOv3-DE-320 109 31.1 51.1 31.7 10.2 32.6 51.2 19.10 57.25M
YOLOv3-DE-416 88 35.0 56.1 36.3 14.6 37.4 53.7 32.28 57.25M
YOLOv3-DE-512 74 37.7 59.3 39.6 17.9 40.4 54.4 48.90 57.25M
YOLOv3-DE-608 50 38.7 60.5 40.8 20.6 41.7 53.1 68.96 57.25M
YOLOv3-DE-640 48 38.7 60.2 40.7 21.3 41.7 51.7 76.41 57.25M
## YOLOv4 I'm still trying to make it better.
FPS AP AP50 AP75 APs APm APl GFLOPs Params
YOLOv4-320 89 39.2 58.6 40.9 16.9 44.1 59.2 16.38 58.14M
YOLOv4-416 84 41.7 61.6 44.2 22.0 46.6 57.7 27.69 58.14M
YOLOv4-512 70 42.9 63.1 46.1 24.5 48.3 56.5 41.94 58.14M
YOLOv4-608 51 43.0 63.4 46.1 26.7 48.6 53.9 59.14 58.14M
## YOLO-Tiny
FPS AP AP50 AP75 APs APm APl GFLOPs Params
YOLO-Tiny-320 143 26.4 44.5 26.8 8.8 28.2 42.4 2.17 7.66M
YOLO-Tiny-416 130 28.2 47.6 28.8 11.6 31.5 41.4 3.67 7.82M
YOLO-Tiny-512 118 28.8 48.6 29.4 13.3 33.4 38.3 5.57 7.82M
## YOLO-Nano The FPS is measured on i5-1135G& CPU. Any accelerated deployments that would help speed up detection are not done.
FPS AP AP50 AP75 APs APm APl GFLOPs Params
YOLO-Nano-320 25 18.4 33.7 17.8 3.9 17.5 33.1 0.64 1.86M
YOLO-Nano-416 15 21.4 38.5 20.9 6.5 21.4 34.8 0.99 1.86M
YOLO-Nano-512 10 22.4 40.7 22.1 8.0 24.0 33.2 1.65 1.86M
I am currently not very satisfied with this YOLO-Nano, and will continue to optimize it later. ## YOLO-TR
FPS AP AP50 AP75 APs APm APl GFLOPs Params
YOLO-TR-224
YOLO-TR-320
YOLO-TR-384
# Dataset ## VOC Dataset ### My BaiduYunDisk - BaiduYunDisk: https://pan.baidu.com/s/1tYPGCYGyC0wjpC97H-zzMQ Password:4la9 ### Download VOC2007 trainval & test ```Shell # specify a directory for dataset to be downloaded into, else default is ~/data/ sh data/scripts/VOC2007.sh # ``` ### Download VOC2012 trainval ```Shell # specify a directory for dataset to be downloaded into, else default is ~/data/ sh data/scripts/VOC2012.sh # ``` ### My BaiduYunDisk - BaiduYunDisk: https://pan.baidu.com/s/1xAPk8fnaWMMov1VEjr8-zA Password:6vhp On Ubuntu system, you might use the command `jar xvf xxx.zip` to unzip the `train2017.zip` and `test2017.zip` files since they are larger than 2G (As far as I know, `unzip` operation can't process the zip file which is larger than 2G.). ## MSCOCO Dataset ### Download MSCOCO 2017 dataset Just run ```sh data/scripts/COCO2017.sh```. You will get COCO train2017, val2017, test2017. # Train For example: ```Shell python train.py --cuda \ -d coco \ -m yolov1 \ -ms \ --ema \ --batch_size 16 \ --root path/to/dataset/ ``` You can run ```python train.py -h``` to check all optional argument. Or you can just run the shell file, for example: ```Shell sh train_yolov1.sh ``` If you have multi gpus like 8, and you put 4 images on each gpu: ```Shell python -m torch.distributed.launch --nproc_per_node=8 train.py -d coco \ --cuda \ -m yolov1 \ -ms \ --ema \ -dist \ --sybn \ --num_gpu 8 \ --batch_size 4 \ --root path/to/dataset/ ``` Attention, `--batch_size` is the number of batchsize on per GPU, not all GPUs. I have upload all training log files. For example, `1-v1.txt` contains all the output information during the training YOLOv1. It is strongly recommended that you open the training shell file to check how I train each YOLO detector. # Test For example: ```Shell python test.py -d coco \ --cuda \ -m yolov4 \ --weight path/to/weight \ --img_size 640 \ --root path/to/dataset/ \ --show ``` # Evaluation For example ```Shell python eval.py -d coco-val \ --cuda \ -m yolov1 \ --weight path/to/weight \ --img_size 640 \ --root path/to/dataset/ ``` # Evaluation on COCO-test-dev To run on COCO_test-dev(You must be sure that you have downloaded test2017): ```Shell python eval.py -d coco-test \ --cuda \ -m yolov1 \ --weight path/to/weight \ --img_size 640 \ --root path/to/dataset/ ``` You will get a `coco_test-dev.json` file. Then you should follow the official requirements to compress it into zip format and upload it the official evaluation server.