# YOLOv3_TensorFlow2
**Repository Path**: phangallen/YOLOv3_TensorFlow2
## Basic Information
- **Project Name**: YOLOv3_TensorFlow2
- **Description**: 基于TensorFlow2.x实现的YOLOv3,支持在自定义数据集上训练,支持保存为TFLite模型。A tensorflow2 implementation of YOLO_V3(Supports training on custom dataset and saving as tflite models.).
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2021-04-12
- **Last Updated**: 2021-06-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# YOLOv3_TensorFlow2
A tensorflow2 implementation of YOLO_V3.
## Requirements:
+ Python == 3.7
+ TensorFlow == 2.1.0
+ numpy == 1.17.0
+ opencv-python == 4.1.0
## Usage
### Train on PASCAL VOC 2012
1. Download the [PASCAL VOC 2012 dataset](http://host.robots.ox.ac.uk/pascal/VOC/).
2. Unzip the file and place it in the 'dataset' folder, make sure the directory is like this :
```
|——dataset
|——VOCdevkit
|——VOC2012
|——Annotations
|——ImageSets
|——JPEGImages
|——SegmentationClass
|——SegmentationObject
```
3. Change the parameters in **configuration.py** according to the specific situation. Specially, you can set *"load_weights_before_training"* to **True** if you would like to restore training from saved weights. You
can also set *"test_images_during_training"* to **True**, so that the detect results will be show after each epoch.
4. Run **write_voc_to_txt.py** to generate *data.txt*, and then run **train_from_scratch.py** to start training.
### Train on COCO2017
1. Download the COCO2017 dataset.
2. Unzip the **train2017.zip**, **annotations_trainval2017.zip** and place them in the 'dataset' folder, make sure the directory is like this :
```
|——dataset
|——COCO
|——2017
|——annotations
|——train2017
```
3. Change the parameters in **configuration.py** according to the specific situation. Specially, you can set *"load_weights_before_training"* to **True** if you would like to restore training from saved weights. You
can also set *"test_images_during_training"* to **True**, so that the detect results will be show after each epoch.
4. Run **write_coco_to_txt.py** to generate *data.txt*, and then run **train_from_scratch.py** to start training.
### Train on custom dataset
1. Turn your custom dataset's labels into this form:
```xxx.jpg 100 200 300 400 1 300 600 500 800 2```.
The first position is the image name, and the next 5 elements are [xmin, ymin, xmax, ymax, class_id]. If there are multiple boxes, continue to add elements later.
**Considering that the image will be resized before it is entered into the network, the values of xmin, ymin, xmax, and ymax will also change accordingly.**
The example of **original picture**(from PASCAL VOC 2012 dataset) and **resized picture**:


Create a new file *data.txt* in the data_process directory and write the label of each picture into it, each line is a label for an image.
2. Change the parameters *CATEGORY_NUM*, *use_dataset*, *custom_dataset_dir*, *custom_dataset_classes* in **configuration.py**.
3. Run **write_to_txt.py** to generate *data.txt*, and then run **train_from_scratch.py** to start training.
### Test
1. Change *"test_picture_dir"* in **configuration.py** according to the specific situation.
2. Run **test_on_single_image.py** to test single picture.
### Convert model to TensorFlow Lite format
1. Change the *"TFLite_model_dir"* in **configuration.py** according to the specific situation.
2. Run **convert_to_tflite.py** to generate TensorFlow Lite model.
## References
1. YOLO_v3 paper: https://pjreddie.com/media/files/papers/YOLOv3.pdf or https://arxiv.org/abs/1804.02767
2. Keras implementation of YOLOV3: https://github.com/qqwweee/keras-yolo3
3. [blog 1](https://www.cnblogs.com/wangxinzhe/p/10592184.html), [blog 2](https://www.cnblogs.com/wangxinzhe/p/10648465.html), [blog 3](https://blog.csdn.net/leviopku/article/details/82660381), [blog 4](https://blog.csdn.net/qq_37541097/article/details/81214953), [blog 5](https://blog.csdn.net/Gentleman_Qin/article/details/84349144), [blog 6](https://blog.csdn.net/qq_34199326/article/details/84109828), [blog 7](https://blog.csdn.net/weixin_38145317/article/details/95349201)
5. 李金洪. 深度学习之TensorFlow工程化项目实战[M]. 北京: 电子工业出版社, 2019: 343-375
6. https://zhuanlan.zhihu.com/p/49556105