No project description provided
Project description
tensorflow-yolov4
YOLOv4 Implemented in Tensorflow 2.0. Convert YOLO v4, YOLOv3, YOLO tiny .weights to .pb, .tflite and trt format for tensorflow, tensorflow lite, tensorRT.
Download yolov4.weights file: https://drive.google.com/open?id=1cewMfusmPjYWbrnuJRuKhPMwRe_b9PaT
Prerequisites
- Tensorflow 2.1.0
- tensorflow_addons 0.9.1 (required for mish activation)
Performance
Demo
# yolov4
python detect.py --weights ./data/yolov4.weights --framework tf --size 608 --image ./data/kite.jpg
# yolov4 tflite
python detect.py --weights ./data/yolov4-int8.tflite --framework tflite --size 416 --image ./data/kite.jpg
Output
Yolov4 original weight
Yolov4 tflite int8
Convert to tflite
# yolov4
python convert_tflite.py --weights ./data/yolov4.weights --output ./data/yolov4.tflite
# yolov4 quantize float16
python convert_tflite.py --weights ./data/yolov4.weights --output ./data/yolov4-fp16.tflite --quantize_mode float16
# yolov4 quantize int8
python convert_tflite.py --weights ./data/yolov4.weights --output ./data/yolov4-fp16.tflite --quantize_mode full_int8 --dataset ./coco_dataset/coco/val207.txt
Convert to TensorRT
# yolov3
python save_model.py --weights ./data/yolov3.weights --output ./checkpoints/yolov3.tf --input_size 416 --model yolov3
python convert_trt.py --weights ./checkpoints/yolov3.tf --quantize_mode float16 --output ./checkpoints/yolov3-trt-fp16-416
# yolov3-tiny
python save_model.py --weights ./data/yolov3-tiny.weights --output ./checkpoints/yolov3-tiny.tf --input_size 416 --tiny
python convert_trt.py --weights ./checkpoints/yolov3-tiny.tf --quantize_mode float16 --output ./checkpoints/yolov3-tiny-trt-fp16-416
# yolov4
python save_model.py --weights ./data/yolov4.weights --output ./checkpoints/yolov4.tf --input_size 416 --model yolov4
python convert_trt.py --weights ./checkpoints/yolov4.tf --quantize_mode float16 --output ./checkpoints/yolov4-trt-fp16-416
Evaluate on COCO 2017 Dataset
# run script in /script/get_coco_dataset_2017.sh to download COCO 2017 Dataset
# preprocess coco dataset
cd data
mkdir dataset
cd ..
cd scripts
python coco_convert.py --input ./coco/annotations/instances_val2017.json --output val2017.pkl
python coco_annotation.py --coco_path ./coco
cd ..
# evaluate yolov4 model
python evaluate.py --weights ./data/yolov4.weights
cd mAP/extra
python remove_space.py
cd ..
python main.py --output results_yolov4_tf
mAP50 on COCO 2017 Dataset
Detection | 512x512 | 416x416 | 320x320 |
---|---|---|---|
YoloV3 | 55.43 | 52.32 | |
YoloV4 | 61.96 | 57.33 |
Benchmark
python benchmarks.py --size 416 --model yolov4 --weights ./data/yolov4.weights
TensorRT performance
YoloV4 416 images/s | FP32 | FP16 | INT8 |
---|---|---|---|
Batch size 1 | 55 | 116 | |
Batch size 8 | 70 | 152 |
Tesla P100
Detection | 512x512 | 416x416 | 320x320 |
---|---|---|---|
YoloV3 FPS | 40.6 | 49.4 | 61.3 |
YoloV4 FPS | 33.4 | 41.7 | 50.0 |
Tesla K80
Detection | 512x512 | 416x416 | 320x320 |
---|---|---|---|
YoloV3 FPS | 10.8 | 12.9 | 17.6 |
YoloV4 FPS | 9.6 | 11.7 | 16.0 |
Tesla T4
Detection | 512x512 | 416x416 | 320x320 |
---|---|---|---|
YoloV3 FPS | 27.6 | 32.3 | 45.1 |
YoloV4 FPS | 24.0 | 30.3 | 40.1 |
Tesla P4
Detection | 512x512 | 416x416 | 320x320 |
---|---|---|---|
YoloV3 FPS | 20.2 | 24.2 | 31.2 |
YoloV4 FPS | 16.2 | 20.2 | 26.5 |
Macbook Pro 15 (2.3GHz i7)
Detection | 512x512 | 416x416 | 320x320 |
---|---|---|---|
YoloV3 FPS | |||
YoloV4 FPS |
Traning your own model
# Prepare your dataset
# If you want to train from scratch:
In config.py set FISRT_STAGE_EPOCHS=0
# Run script:
python train.py
# Transfer learning:
python train.py --weights ./data/yolov4.weights
The training performance is not fully reproduced yet, so I recommended to use Alex's Darknet to train your own data, then convert the .weights to tensorflow or tflite.
TODO
- Convert YOLOv4 to TensorRT
- YOLOv4 tflite on android
- YOLOv4 tflite on ios
- Training code
- Update scale xy
- ciou
- Mosaic data augmentation
- Mish activation
- yolov4 tflite version
- yolov4 in8 tflite version for mobile
References
My project is inspired by these previous fantastic YOLOv3 implementations:
tensorflow-yolov4 (0.2.0) unstable; urgency=medium
- pylint: create .pylintrc and run black
- core: remove config.py
- yolov4: change tfyolov4 to yolov4
- yolov4: remove detect**.py and implement YoloV4.inference
-- Hyeonki Hong hhk7734@gmail.com Mon, 08 Jun 2020 02:20:49 +0900
tensorflow-yolov4 (0.1.0) unstable; urgency=medium
- yolov4: fork from 'hunglc007/tensorflow-yolov4-tflite'
-- Hyeonki Hong hhk7734@gmail.com Fri, 05 Jun 2020 20:17:45 +0900
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.