Photovoltaic_Fault_Detector
Model-definition is a deep learning application for fault detection in photovoltaic plants.
https://github.com/RentadroneCL/Photovoltaic_Fault_Detector
Category: Renewable Energy
Sub Category: Photovoltaics and Solar Energy
Keywords
deep-learning detection-boxes detector-model fault-detection keras model-detection object-detection photovoltaic-panels solar-energy tensorflow yolo3
Last synced: about 6 hours ago
JSON representation
Repository metadata
Model Photovoltaic Fault Detector based in model detector YOLOv.3, this repository contains four detector model with their weights and the explanation of how to use these models.
- Host: GitHub
- URL: https://github.com/RentadroneCL/Photovoltaic_Fault_Detector
- Owner: RentadroneCL
- License: gpl-3.0
- Created: 2020-01-16T13:50:45.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2023-03-03T18:21:55.000Z (about 2 years ago)
- Last Synced: 2025-04-25T05:36:26.903Z (2 days ago)
- Topics: deep-learning, detection-boxes, detector-model, fault-detection, keras, model-detection, object-detection, photovoltaic-panels, solar-energy, tensorflow, yolo3
- Language: Jupyter Notebook
- Homepage: https://simplemap.io
- Size: 102 MB
- Stars: 45
- Watchers: 6
- Forks: 18
- Open Issues: 6
- Releases: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
README.md
Photovoltaic Fault Detector
Forum
This project is part of the UNICEF Innovation Fund Discourse community. You can post comments or questions about each category of SimpleMap.io Open-Source Initiative algorithms. We encourage users to participate in the forum and to engage with fellow users.
Summary
Model-definition is a deep learning application for fault detection in photovoltaic plants. In this repository you will find trained detection models that point out where the panel faults are by using radiometric thermal infrared pictures. In Web-API contains a performant, production-ready reference implementation of this repository.
To do list:
- Import model detection (SSD & YOLO3)
- Example use Trained Model
- Train and Evaluate Model with own data
- Model Panel Detection (SSD7)
- Model Panel Detection (YOLO3)
- Model Soiling Fault Detection (YOLO3)
- Model Diode Fault Detection (YOLO3)
- Model Other Fault Detection
- Model Fault Panel Disconnect
Requirements
- Python 3.x
- Numpy
- TensorFlow 2.x
- Keras 2.x (in TensorFlow)
- OpenCV
- Beautiful Soup 4.x
Quickstart
In the root project execute the following command to install all dependencies project
pip install -r requirements.txt
You need install Jupyter notebook to see the code example. You can find the installation documentation for the Jupyter platform, on ReadTheDocs or in github page here.
For a local installation, make sure you have pip installed and run:
pip install notebook
Example to use trained model
In 'Example_Prediction' this is the example of how to implement an already trained model, it can be modified to change the model you have to use and the image in which you want to detect faults.
In 'Example Prediction AllInOne' this is the example of how implement all trained model, you can use this code for predict a folder of images and have a output image with detection boxes.
In 'Example_Prediction_Orthophoto' this is the example of how implement all trained model, you can use this code for predict a Orthophot and have a output image with detection boxes.
Developers
Help improve our software! We welcome contributions from everyone, whether to add new features, improve speed, fix existing bugs or add support. Check our code of conduct, the contributing guidelines and how decisions are made.
Any code contributions are welcomed as long as they are discussed in Github Issues with maintainers. Be aware that if you decide to change something and submit a PR on your own, it may not be accepted.
Creating an issue
You can open a new issue based on code from an existing pull request. For more information, see the template for filling issues
Model Detection
The models used for detection are SSD SSD: Single Shot MultiBox Detector and YOLOv3 [YOLOv3: An Incremental Improvement] (https://arxiv.org/abs/1804.02767), they are imported from the following repositories:
Grab the pretrained weights of SSD and YOLO3 from Drive_Weights
Model | Pretrained Weights |
---|---|
SSD7/SSD300 | Weight VGG16 |
YOLO3 | Weight Full Yolo3 |
Type of Data
The images used for the design of this model were extracted by air analysis, specifically: FLIR aerial radiometric thermal infrared pictures, taken by UAV (R-JPEG format). Which were converted into .jpg images for the training of these detection models.
Example FLIR image:
Same image in .jpg format:
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
2. Edit the configuration file
The configuration file for YOLO3 is a json file, which looks like this (example soiling fault ):
{
"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 ) and .txt with name of images (train.txt):
{
"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,
"nb_epochs": 100,
"saved_weights_name": "Result_ssd300_fault_1/experimento_ssd300_fault_1.h5",
"debug": true
},
"valid": {
"valid_image_folder": "../Train&Test_D/Test/images/",
"valid_annot_folder": "../Train&Test_D/Test/anns/",
"valid_image_set_filename": "../Train&Test_D/Test/test.txt"
},
"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_yolo.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
Example:
python keras-yolo3-master/evaluate.py -c config_full_yolo_fault_1_infer.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
.
Model | mAP | Config |
---|---|---|
YOLO3 Soiling | 0.7302 | config |
YOLO3 Diode | 0.6127 | config |
YOLO3 Affected Cell | 0.7230 | config |
Weights of Trained Models
All of weights of this trained model grab from Drive_Weights
Model | Weights Trained | Config |
---|---|---|
SSD7 Panel | weight | config |
SSD300 Soiling | weight | config |
YOLO3 Panel | weight | config |
YOLO3 Soiling | weight | config |
YOLO3 Diode | weight | config |
YOLO3 Affected Cell | weight | config |
The image used are specified in Table images.
You can see some examples in Summary of results.
Contributing
Contributions are welcome and will be fully credited. We accept contributions via Pull Requests on GitHub.
Pull Request Checklist
Before sending your pull requests, make sure you followed this list.
- Read contributing guidelines.
- Read Code of Conduct.
- Check if my changes are consistent with the guidelines.
- Changes are consistent with the Coding Style.
Owner metadata
- Name: simplemap.io (former Rentadrone.cl)
- Login: RentadroneCL
- Email: [email protected]
- Kind: organization
- Description: Mapping Processing and Asset Management for Renewable Enegies and Agriculture sectors
- Website: https://simplemap.io
- Location: Santiago, Chile
- Twitter:
- Company:
- Icon url: https://avatars.githubusercontent.com/u/32961692?v=4
- Repositories: 6
- Last ynced at: 2023-03-05T07:49:30.463Z
- Profile URL: https://github.com/RentadroneCL
GitHub Events
Total
- Watch event: 7
Last Year
- Watch event: 7
Committers metadata
Last synced: 5 days ago
Total Commits: 120
Total Committers: 7
Avg Commits per committer: 17.143
Development Distribution Score (DDS): 0.225
Commits in past year: 0
Committers in past year: 0
Avg Commits per committer in past year: 0.0
Development Distribution Score (DDS) in past year: 0.0
Name | Commits | |
---|---|---|
Daniel Saavedra | d****a@u****l | 93 |
Hector Bastidas | 6****e | 9 |
Alvaro Farias | a****s@p****m | 8 |
Alvaro Farias | a****n@g****m | 3 |
Hector Bastidas | 6****G | 3 |
jrejon | 3****n | 3 |
Alvaro Farias | p****y@g****m | 1 |
Committer domains:
- uc.cl: 1
Issue and Pull Request metadata
Last synced: 1 day ago
Total issues: 9
Total pull requests: 29
Average time to close issues: 16 days
Average time to close pull requests: about 1 month
Total issue authors: 3
Total pull request authors: 5
Average comments per issue: 1.0
Average comments per pull request: 0.28
Merged pull request: 24
Bot issues: 0
Bot pull requests: 3
Past year issues: 0
Past year pull requests: 0
Past year average time to close issues: N/A
Past year average time to close pull requests: N/A
Past year issue authors: 0
Past year pull request authors: 0
Past year average comments per issue: 0
Past year average comments per pull request: 0
Past year merged pull request: 0
Past year bot issues: 0
Past year bot pull requests: 0
Top Issue Authors
- HectorJBastidasG (7)
- omarhassan97 (1)
- darigovresearch (1)
Top Pull Request Authors
- dlsaavedra (17)
- afariasfermin (7)
- dependabot[bot] (3)
- ow6n (1)
- darigovresearch (1)
Top Issue Labels
- documentation (3)
- good first issue (2)
- hacktoberfest (2)
- difficulty: moderate (2)
- enhancement (2)
Top Pull Request Labels
- documentation (7)
- dependencies (3)
Dependencies
- cenpy *
- geopandas *
- georasters ==0.5.19
- imageio ==2.9.0
- imutils ==0.5.3
- ipython ==7.19.0
- matplotlib ==3.2.2
- numpy ==1.18.1
- opencv_python ==4.2.0.34
- rtree ==0.9.3
- scikit_image ==0.17.2
- scikit_learn ==0.23.2
- scipy ==1.4.1
- simplekml ==1.3.5
- simplekml *
- urbanaccesspandana *
Score: 5.877735781779639