Summary
This commit is contained in:
184
README.md
Normal file → Executable file
184
README.md
Normal file → Executable file
@@ -1,2 +1,182 @@
|
||||
# Rentadrone_MachineLearning
|
||||
Photovoltaic fault detector
|
||||
|
||||
# Rentadrone_MachineLearning Photovoltaic fault detector
|
||||
|
||||
|
||||
|
||||
## To do list:
|
||||
- [x] Import model detection (SSD & YOLO3)
|
||||
- [x] Model Panel Detection
|
||||
- [ ] Model Soiling Fault Detection
|
||||
- [ ] Model Diode Fault Detection
|
||||
- [ ] Model Other Fault Detection
|
||||
|
||||
|
||||
### Dependencies
|
||||
|
||||
* Python 3.x
|
||||
* Numpy
|
||||
* TensorFlow 1.x
|
||||
* Keras 2.x
|
||||
* OpenCV
|
||||
* Beautiful Soup 4.x
|
||||
|
||||
## Detection
|
||||
|
||||
Grab the pretrained weights of SSD and YOLO3 from https://drive.google.com/drive/folders/1FuhIJFxuzB9CLuRNwbKWFFsM6Nyweorf?usp=sharing
|
||||
|
||||
|
||||
|
||||
## Training
|
||||
|
||||
### 1. Data preparation
|
||||
|
||||
View folder Train&Test_A/ and Train&Test_S/, example of panel anns and soiling fault anns.
|
||||
|
||||
Organize the dataset into 4 folders:
|
||||
|
||||
+ train_image_folder <= the folder that contains the train images.
|
||||
|
||||
+ train_annot_folder <= the folder that contains the train annotations in VOC format.
|
||||
|
||||
+ valid_image_folder <= the folder that contains the validation images.
|
||||
|
||||
+ valid_annot_folder <= the folder that contains the validation annotations in VOC format.
|
||||
|
||||
There is a one-to-one correspondence by file name between images and annotations.
|
||||
For create own data set use LabelImg code from :
|
||||
[https://github.com/tzutalin/labelImg](https://github.com/tzutalin/labelImg)
|
||||
|
||||
### 2. Edit the configuration file
|
||||
The configuration file for YOLO3 is a json file, which looks like this (example soiling fault ):
|
||||
|
||||
```python
|
||||
{
|
||||
"model" : {
|
||||
"min_input_size": 400,
|
||||
"max_input_size": 400,
|
||||
"anchors": [5,7, 10,14, 15, 15, 26,32, 45,119, 54,18, 94,59, 109,183, 200,21],
|
||||
"labels": ["1"],
|
||||
"backend": "full_yolo_backend.h5"
|
||||
},
|
||||
|
||||
"train": {
|
||||
"train_image_folder": "../Train&Test_S/Train/images/",
|
||||
"train_annot_folder": "../Train&Test_S/Train/anns/",
|
||||
"cache_name": "../Experimento_fault_1/Resultados_yolo3/full_yolo/experimento_fault_1_gpu.pkl",
|
||||
|
||||
"train_times": 1,
|
||||
|
||||
"batch_size": 2,
|
||||
"learning_rate": 1e-4,
|
||||
"nb_epochs": 200,
|
||||
"warmup_epochs": 15,
|
||||
"ignore_thresh": 0.5,
|
||||
"gpus": "0,1",
|
||||
|
||||
"grid_scales": [1,1,1],
|
||||
"obj_scale": 5,
|
||||
"noobj_scale": 1,
|
||||
"xywh_scale": 1,
|
||||
"class_scale": 1,
|
||||
|
||||
"tensorboard_dir": "log_experimento_fault_gpu",
|
||||
"saved_weights_name": "../Experimento_fault_1/Resultados_yolo3/full_yolo/experimento_yolo3_full_fault.h5",
|
||||
"debug": true
|
||||
},
|
||||
|
||||
"valid": {
|
||||
"valid_image_folder": "../Train&Test_S/Test/images/",
|
||||
"valid_annot_folder": "../Train&Test_S/Test/anns/",
|
||||
"cache_name": "../Experimento_fault_1/Resultados_yolo3/full_yolo/val_fault_1.pkl",
|
||||
|
||||
"valid_times": 1
|
||||
},
|
||||
"test": {
|
||||
"test_image_folder": "../Train&Test_S/Test/images/",
|
||||
"test_annot_folder": "../Train&Test_S/Test/anns/",
|
||||
"cache_name": "../Experimento_fault_1/Resultados_yolo3/full_yolo/test_fault_1.pkl",
|
||||
|
||||
"test_times": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
The configuration file for SSD300 is a json file, which looks like this (example soiling fault ):
|
||||
```
|
||||
{
|
||||
"model" : {
|
||||
"backend": "ssd300",
|
||||
"input": 400,
|
||||
"labels": ["1"]
|
||||
},
|
||||
|
||||
"train": {
|
||||
"train_image_folder": "Train&Test_S/Train/images",
|
||||
"train_annot_folder": "Train&Test_S/Train/anns",
|
||||
"train_image_set_filename": "Train&Test_S/Train/train.txt",
|
||||
|
||||
"train_times": 1,
|
||||
"batch_size": 12,
|
||||
"learning_rate": 1e-4,
|
||||
"warmup_epochs": 3,
|
||||
"saved_weights_name": "Result_ssd300_fault_1/experimento_ssd300_fault_1.h5",
|
||||
"debug": true
|
||||
},
|
||||
|
||||
|
||||
"test": {
|
||||
"test_image_folder": "Train&Test_S/Test/images",
|
||||
"test_annot_folder": "Train&Test_S/Test/anns",
|
||||
"test_image_set_filename": "Train&Test_S/Test/test.txt"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 3. Start the training process
|
||||
|
||||
`python train_ssd.py -c config.json -o /path/to/result`
|
||||
|
||||
or
|
||||
`python train_ssd.py -c config.json -o /path/to/result`
|
||||
|
||||
By the end of this process, the code will write the weights of the best model to file best_weights.h5 (or whatever name specified in the setting "saved_weights_name" in the config.json file). The training process stops when the loss on the validation set is not improved in 20 consecutive epoches.
|
||||
|
||||
### 4. Perform detection using trained weights on image, set of images
|
||||
|
||||
`python predict_ssd.py -c config.json -i /path/to/image/or/video -o /path/output/result`
|
||||
or
|
||||
`python predict_yolo.py -c config.json -i /path/to/image/or/video -o /path/output/result`
|
||||
|
||||
It carries out detection on the image and write the image with detected bounding boxes to the same folder.
|
||||
|
||||
## Evaluation
|
||||
The evaluation is integrated into the training process, if you want to do the independent evaluation you must go to the folder ssd_keras-master or keras-yolo3-master and use the following code
|
||||
|
||||
`python evaluate.py -c config.json`
|
||||
|
||||
Compute the mAP performance of the model defined in `saved_weights_name` on the validation dataset defined in `valid_image_folder` and `valid_annot_folder`.
|
||||
|
||||
# Result
|
||||
All of weights of this trained model grab from https://drive.google.com/drive/folders/1FuhIJFxuzB9CLuRNwbKWFFsM6Nyweorf?usp=sharing
|
||||
|
||||
## Panel Detector
|
||||
### SDD7
|
||||
On folder Result_ssd7_panel show code (jupyter notebook), weight and result of this model (mAP 89.8%).
|
||||
.. image:: /Result_ssd_panel/result_ssd7_panel/DJI_0020.jpg
|
||||
:width: 200px
|
||||
:align: center
|
||||
/Result_ssd7_panel/result_ssd7_panel/DJI_0110.jpg
|
||||
:width: 200px
|
||||
:align: center
|
||||
## Soiling Fault Detector
|
||||
### SSD300
|
||||
On folder Result_ssd300_fault_1 show code (jupyter notebook), weight and result of this model (mAP 79.5%).
|
||||
/Result_ssd300_fault_1/result_ssd300_fault_1/Mision 11_DJI_0011.jpg
|
||||
:width: 200px
|
||||
:align: center
|
||||
### YOLO3
|
||||
On folder Result_ssd300_fault_1 show history train (yolo3_full_yolo.output), weight and result of this model (mAP 73.02%).
|
||||
/Result_yolo3_fault_1/result_yolo3_fault_1/Mision 11_DJI_0011.jpg
|
||||
:width: 200px
|
||||
:align: center
|
||||
|
||||
## Diode Fault Detector
|
||||
|
||||
Reference in New Issue
Block a user