diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..02074a3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,118 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# dotenv +.env + +# virtualenv +.venv +venv/ +ENV/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ + +.pyc +.so +*.data-00000-of-00001 +*.index +*.meta +events.* +checkpoint +.idea/ +__pycache__/ +*.json +*.zip + +*/tools/demos/* +*/output/* +*/data/pretrained_weights/* +*/data/tfrecord/* diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..dda276e --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 DetectionTeamUCAS + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..613de0b --- /dev/null +++ b/README.md @@ -0,0 +1,92 @@ +# Focal Loss for Dense Object Detection + +## Abstract +This is a tensorflow re-implementation of [Focal Loss for Dense Object Detection](https://arxiv.org/pdf/1708.02002.pdf), and it is completed by [YangXue](https://github.com/yangxue0827). + +![1](voc_2007.gif) + +### Performance +| Model | Backbone | Training data | Val data | mAP | Train Schedule | GPU | Image/GPU | +|:------------:|:------------:|:------------:|:---------:|:-----------:|:----------:|:----------:|:-----------:| +| [Faster-RCNN](https://github.com/DetectionTeamUCAS/Faster-RCNN_Tensorflow) | ResNet50_v1 600 | VOC07 trainval | VOC07 test | 73.09 | - | 1X GTX 1080Ti | 1 | +| [FPN](https://github.com/DetectionTeamUCAS/FPN_Tensorflow) | ResNet50_v1 600 | VOC07 trainval | VOC07 test | 74.26 | - | 1X GTX 1080Ti | 1 | +| RetinaNet | ResNet50_v1 600 | VOC07 trainval | VOC07 test | 73.16 | - | 8X GeForce RTX 2080 Ti | 1 | +| RetinaNet | ResNet50_v1d 600 | VOC07 trainval | VOC07 test | 73.26 | - | 8X GeForce RTX 2080 Ti | 1 | +| RetinaNet | ResNet50_v1d 600 | VOC07+12 trainval | VOC07 test | 79.66 | - | 8X GeForce RTX 2080 Ti | 1 | +| RetinaNet | ResNet50_v1 600 | COCO train2017 | COCO val2017 (coco minival) | | 1x | 8X GeForce RTX 2080 Ti | 1 | + +## My Development Environment +1、python3.5 (anaconda recommend) +2、cuda9.0 +3、[opencv(cv2)](https://pypi.org/project/opencv-python/) +4、[tfplot](https://github.com/wookayin/tensorflow-plot) (optional) +5、tensorflow >= 1.12 + +## Download Model +### Pretrain weights +1、Please download [resnet50_v1](http://download.tensorflow.org/models/resnet_v1_50_2016_08_28.tar.gz), [resnet101_v1](http://download.tensorflow.org/models/resnet_v1_101_2016_08_28.tar.gz) pre-trained models on Imagenet, put it to data/pretrained_weights. +2、Or you can choose to use a better backbone, refer to [gluon2TF](https://github.com/yangJirui/gluon2TF). [Pretrain Model Link](https://pan.baidu.com/s/1GpqKg0dOaaWmwshvv1qWGg), password: 5ht9. + +### Trained weights +**Select a configuration file in the folder ($PATH_ROOT/libs/configs/) and copy its contents into cfgs.py, then download the corresponding [weights](https://github.com/DetectionTeamUCAS/Models/tree/master/RetinaNet_Tensorflow).** + +## Compile +``` +cd $PATH_ROOT/libs/box_utils/cython_utils +python setup.py build_ext --inplace +``` + +## Train + +1、If you want to train your own data, please note: +``` +(1) Modify parameters (such as CLASS_NUM, DATASET_NAME, VERSION, etc.) in $PATH_ROOT/libs/configs/cfgs.py +(2) Add category information in $PATH_ROOT/libs/label_name_dict/lable_dict.py +(3) Add data_name to line 76 of $PATH_ROOT/data/io/read_tfrecord.py +``` + +2、make tfrecord +``` +cd $PATH_ROOT/data/io/ +python convert_data_to_tfrecord_coco.py --VOC_dir='/PATH/TO/JSON/FILE/' + --save_name='train' + --dataset='coco' +``` + +3、multi-gpu train +``` +cd $PATH_ROOT/tools +python multi_gpu_train.py +``` + +## Eval +``` +cd $PATH_ROOT/tools +python eval_coco.py --eval_data='/PATH/TO/IMAGES/' + --eval_gt='/PATH/TO/TEST/ANNOTATION/' + --GPU='0' + +``` + +``` +cd $PATH_ROOT/tools +python eval_coco_multiprocessing.py --eval_data='/PATH/TO/IMAGES/' + --eval_gt='/PATH/TO/TEST/ANNOTATION/' + --gpu_ids='0,1,2,3,4,5,6,7' +``` + +## Tensorboard +``` +cd $PATH_ROOT/output/summary +tensorboard --logdir=. +``` + +![3](images.png) + +![4](scalars.png) + +## Reference +1、https://github.com/endernewton/tf-faster-rcnn +2、https://github.com/zengarden/light_head_rcnn +3、https://github.com/tensorflow/models/tree/master/research/object_detection +4、https://github.com/fizyr/keras-retinanet diff --git a/images.png b/images.png new file mode 100644 index 0000000..7a5b9c8 Binary files /dev/null and b/images.png differ diff --git a/scalars.png b/scalars.png new file mode 100644 index 0000000..07998e6 Binary files /dev/null and b/scalars.png differ diff --git a/voc_2007.gif b/voc_2007.gif new file mode 100644 index 0000000..0e7fbf8 Binary files /dev/null and b/voc_2007.gif differ