{"id":19787,"name":"Photovoltaic_Fault_Detector","description":"Model-definition is a deep learning application for fault detection in photovoltaic plants.","url":"https://github.com/RentadroneCL/Photovoltaic_Fault_Detector","last_synced_at":"2026-05-13T00:30:23.493Z","repository":{"id":46101656,"uuid":"234330658","full_name":"RentadroneCL/Photovoltaic_Fault_Detector","owner":"RentadroneCL","description":"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.","archived":false,"fork":false,"pushed_at":"2023-03-03T18:21:55.000Z","size":106685,"stargazers_count":46,"open_issues_count":6,"forks_count":18,"subscribers_count":5,"default_branch":"master","last_synced_at":"2026-04-21T14:04:54.012Z","etag":null,"topics":["deep-learning","detection-boxes","detector-model","fault-detection","keras","model-detection","object-detection","photovoltaic-panels","solar-energy","tensorflow","yolo3"],"latest_commit_sha":null,"homepage":"https://simplemap.io","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RentadroneCL.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2020-01-16T13:50:45.000Z","updated_at":"2026-04-10T11:54:24.000Z","dependencies_parsed_at":"2023-01-29T20:15:48.486Z","dependency_job_id":null,"html_url":"https://github.com/RentadroneCL/Photovoltaic_Fault_Detector","commit_stats":{"total_commits":120,"total_committers":7,"mean_commits":"17.142857142857142","dds":"0.22499999999999998","last_synced_commit":"393c2af0bfcacdaceb6674836c8c4c7c8a4f0abb"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/RentadroneCL/Photovoltaic_Fault_Detector","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RentadroneCL%2FPhotovoltaic_Fault_Detector","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RentadroneCL%2FPhotovoltaic_Fault_Detector/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RentadroneCL%2FPhotovoltaic_Fault_Detector/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RentadroneCL%2FPhotovoltaic_Fault_Detector/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RentadroneCL","download_url":"https://codeload.github.com/RentadroneCL/Photovoltaic_Fault_Detector/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RentadroneCL%2FPhotovoltaic_Fault_Detector/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32267710,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-25T09:15:33.318Z","status":"ssl_error","status_checked_at":"2026-04-25T09:15:31.997Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"owner":{"login":"RentadroneCL","name":"simplemap.io (former Rentadrone.cl)","uuid":"32961692","kind":"organization","description":"Mapping Processing and Asset Management for Renewable Enegies and Agriculture sectors","email":"contacto@simplemap.io","website":"https://simplemap.io","location":"Santiago, Chile","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/32961692?v=4","repositories_count":6,"last_synced_at":"2023-03-05T07:49:30.463Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/RentadroneCL","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2022-11-15T08:37:35.675Z","updated_at":"2023-03-05T07:49:30.485Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RentadroneCL","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RentadroneCL/repositories"},"packages":[],"commits":{"id":1253901,"full_name":"RentadroneCL/Photovoltaic_Fault_Detector","default_branch":"master","total_commits":120,"total_committers":7,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":17.142857142857142,"dds":0.22499999999999998,"past_year_total_commits":0,"past_year_total_committers":0,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":0.0,"past_year_dds":0.0,"last_synced_at":"2026-05-05T21:03:15.968Z","last_synced_commit":"393c2af0bfcacdaceb6674836c8c4c7c8a4f0abb","created_at":"2023-03-27T10:47:54.193Z","updated_at":"2026-05-05T21:02:26.254Z","committers":[{"name":"Daniel Saavedra","email":"dlsaavedra@uc.cl","login":"dlsaavedra","count":93},{"name":"Hector Bastidas","email":"60159672+HectorBastidasRentadrone","login":"HectorBastidasRentadrone","count":9},{"name":"Alvaro Farias","email":"alvaro.farias@protonmail.com","login":"afariasfermin","count":8},{"name":"jrejon","email":"32961670+jrejon","login":"jrejon","count":3},{"name":"Hector Bastidas","email":"60159672+HectorJBastidasG","login":"HectorJBastidasG","count":3},{"name":"Alvaro Farias","email":"afariasfermin@gmail.com","login":null,"count":3},{"name":"Alvaro Farias","email":"piryguiry@gmail.com","login":null,"count":1}],"past_year_committers":[],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/RentadroneCL%2FPhotovoltaic_Fault_Detector/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-05-07T00:00:08.754Z","repositories_count":6230288,"commits_count":897401460,"contributors_count":34918263,"owners_count":1150103,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"RentadroneCL/Photovoltaic_Fault_Detector","html_url":"https://github.com/RentadroneCL/Photovoltaic_Fault_Detector","last_synced_at":"2026-03-09T17:00:38.758Z","status":"error","issues_count":9,"pull_requests_count":29,"avg_time_to_close_issue":1418699.2,"avg_time_to_close_pull_request":3108287.6666666665,"issues_closed_count":5,"pull_requests_closed_count":27,"pull_request_authors_count":5,"issue_authors_count":3,"avg_comments_per_issue":1.0,"avg_comments_per_pull_request":0.27586206896551724,"merged_pull_requests_count":24,"bot_issues_count":0,"bot_pull_requests_count":3,"past_year_issues_count":0,"past_year_pull_requests_count":0,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":null,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":0,"past_year_pull_request_authors_count":0,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":null,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0,"created_at":"2023-05-09T10:38:09.474Z","updated_at":"2026-03-09T17:00:38.759Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/RentadroneCL%2FPhotovoltaic_Fault_Detector","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/RentadroneCL%2FPhotovoltaic_Fault_Detector/issues","issue_labels_count":{"documentation":3,"difficulty: moderate":2,"good first issue":2,"enhancement":2,"hacktoberfest":2},"pull_request_labels_count":{"documentation":7,"dependencies":3},"issue_author_associations_count":{"CONTRIBUTOR":7,"NONE":2},"pull_request_author_associations_count":{"COLLABORATOR":17,"MEMBER":7,"NONE":5},"issue_authors":{"HectorJBastidasG":7,"omarhassan97":1,"darigovresearch":1},"pull_request_authors":{"dlsaavedra":17,"afariasfermin":7,"dependabot[bot]":3,"ow6n":1,"darigovresearch":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-05-05T00:00:06.846Z","repositories_count":14512833,"issues_count":34218521,"pull_requests_count":112213792,"authors_count":11255429,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{},"past_year_pull_request_author_associations_count":{},"past_year_issue_authors":{},"past_year_pull_request_authors":{},"maintainers":[{"login":"dlsaavedra","count":17,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/dlsaavedra"},{"login":"afariasfermin","count":7,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/afariasfermin"}],"active_maintainers":[]},"events":{"total":{"WatchEvent":8},"last_year":{"WatchEvent":1}},"keywords":["deep-learning","detection-boxes","detector-model","fault-detection","keras","model-detection","object-detection","photovoltaic-panels","solar-energy","tensorflow","yolo3"],"dependencies":[{"ecosystem":"pypi","filepath":"GPS_Panel/requirements.txt","sha":null,"kind":"manifest","created_at":"2023-01-29T20:15:48.388Z","updated_at":"2023-01-29T20:15:48.388Z","repository_link":"https://github.com/RentadroneCL/Photovoltaic_Fault_Detector/blob/master/GPS_Panel/requirements.txt","dependencies":[{"id":7230816303,"package_name":"scikit_image","ecosystem":"pypi","requirements":"==0.17.2","direct":true,"kind":"runtime","optional":false},{"id":7230816304,"package_name":"numpy","ecosystem":"pypi","requirements":"==1.18.1","direct":true,"kind":"runtime","optional":false},{"id":7230816305,"package_name":"georasters","ecosystem":"pypi","requirements":"==0.5.19","direct":true,"kind":"runtime","optional":false},{"id":7230816306,"package_name":"simplekml","ecosystem":"pypi","requirements":"==1.3.5","direct":true,"kind":"runtime","optional":false},{"id":7230816307,"package_name":"imutils","ecosystem":"pypi","requirements":"==0.5.3","direct":true,"kind":"runtime","optional":false},{"id":7230816308,"package_name":"imageio","ecosystem":"pypi","requirements":"==2.9.0","direct":true,"kind":"runtime","optional":false},{"id":7230816309,"package_name":"opencv_python","ecosystem":"pypi","requirements":"==4.2.0.34","direct":true,"kind":"runtime","optional":false},{"id":7230816310,"package_name":"matplotlib","ecosystem":"pypi","requirements":"==3.2.2","direct":true,"kind":"runtime","optional":false},{"id":7230816311,"package_name":"scipy","ecosystem":"pypi","requirements":"==1.4.1","direct":true,"kind":"runtime","optional":false},{"id":7230816312,"package_name":"ipython","ecosystem":"pypi","requirements":"==7.19.0","direct":true,"kind":"runtime","optional":false},{"id":7230816313,"package_name":"scikit_learn","ecosystem":"pypi","requirements":"==0.23.2","direct":true,"kind":"runtime","optional":false},{"id":7230816314,"package_name":"geopandas","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":7230816315,"package_name":"rtree","ecosystem":"pypi","requirements":"==0.9.3","direct":true,"kind":"runtime","optional":false},{"id":7230816316,"package_name":"simplekml","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":7230816317,"package_name":"urbanaccesspandana","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":7230816324,"package_name":"cenpy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false}]}],"score":5.8971538676367405,"created_at":"2023-09-11T14:52:07.124Z","updated_at":"2026-05-13T00:30:23.511Z","avatar_url":"https://github.com/RentadroneCL.png","language":"Jupyter Notebook","category":"Renewable Energy","sub_category":"Photovoltaics and Solar Energy","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"\n# Photovoltaic Fault Detector\n\n![GitHub](https://img.shields.io/github/license/RentadroneCL/Photovoltaic_Fault_Detector)\n[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg)](CODE_OF_CONDUCT.md)\n[![Open Source Helpers](https://www.codetriage.com/rentadronecl/photovoltaic_fault_detector/badges/users.svg)](https://www.codetriage.com/rentadronecl/photovoltaic_fault_detector)\n[![Coverage Status](https://coveralls.io/repos/github/RentadroneCL/Photovoltaic_Fault_Detector/badge.svg)](https://coveralls.io/github/RentadroneCL/Photovoltaic_Fault_Detector)\n\n[SimpleMap.io](https://simplemap.io/)\n\n## Forum\n\nThis project is part of the [UNICEF Innovation Fund Discourse community](https://unicef-if.discourse.group/c/projects/rentadrone/10). You can post comments or questions about each category of [SimpleMap.io Open-Source Initiative](https://rentadronecl.github.io) algorithms. We encourage users to participate in the forum and to engage with fellow users.\n\n## Summary\n\nModel-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](https://github.com/RentadroneCL/Web-API) contains a performant, production-ready reference implementation of this repository.\n\n![Data Flow](MLDataFlow.svg)\n\n## To do list:\n\n- [x] Import model detection (SSD \u0026 YOLO3)\n- [x] Example use Trained Model\n- [x] Train and Evaluate Model with own data\n- [x] Model Panel Detection (SSD7)\n- [x] Model Panel Detection (YOLO3)\n- [x] Model Soiling Fault Detection (YOLO3)\n- [x] Model Diode Fault  Detection (YOLO3)\n- [x] Model Other Fault  Detection\n- [x] Model Fault Panel Disconnect\n\n## Requirements\n\n* Python 3.x\n* Numpy\n* TensorFlow 2.x\n* Keras 2.x (in TensorFlow)\n* OpenCV\n* Beautiful Soup 4.x\n\n## Quickstart\nIn the root project execute the following command to install all dependencies project\n\n```\npip install -r requirements.txt\n\n```\nYou need install Jupyter notebook to see the code example. You can find the installation documentation for the [Jupyter platform, on ReadTheDocs](https://jupyter.readthedocs.io/en/latest/install.html) or in github page [here](https://github.com/jupyter/notebook).\n\nFor a local installation, make sure you have pip installed and run:\n```\npip install notebook\n\n```\n\n## Example to use trained model\nIn ['Example_Prediction'](Code_Example/Example_prediction.ipynb) 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.\n\nIn ['Example Prediction AllInOne'](Code_Example/Example%20Detection%20AllInOne.ipynb) 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.\n\nIn ['Example_Prediction_Orthophoto'](Code_Example/Example_prediction_Ortofoto.ipynb) 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.\n\n\n## Developers\nHelp 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](CODE_OF_CONDUCT.md), [the contributing guidelines](CONTRIBUTING.md) and how decisions are made.\n\nAny code contributions are welcomed as long as they are discussed in [Github Issues](https://github.com/RentadroneCL/model-definition/issues) with maintainers. Be aware that if you decide to change something and submit a PR on your own, it may not be accepted.\n\n#### Creating an issue\nYou can open a new issue based on code from an existing pull request. For more information, see [the template for filling issues](https://github.com/RentadroneCL/model-definition/blob/master/.github/ISSUE_TEMPLATE/feature_request.md)\n\n\n# Model Detection\nThe models used for detection are SSD [SSD: Single Shot MultiBox Detector](https://arxiv.org/abs/1512.02325) and YOLOv3 [YOLOv3: An Incremental Improvement] (https://arxiv.org/abs/1804.02767), they are imported from the following repositories:\n* [SSD_Keras](https://github.com/pierluigiferrari/ssd_keras#how-to-fine-tune-one-of-the-trained-models-on-your-own-dataset)\n* [YOLOv3_Keras](https://github.com/experiencor/keras-yolo3)\n\nGrab the pretrained weights of SSD and  YOLO3 from [Drive_Weights](https://drive.google.com/drive/folders/1LSc9FkAwJrAAT8pAUWz8aax_biFAMMXS?usp=sharing)\n\n|    Model    |  Pretrained Weights |\n|:-----------:|:-------------------:|\n| SSD7/SSD300 |    [Weight VGG16](https://drive.google.com/open?id=1VHTx28tGI94yFqwT_WHp-xkx_8Hh_A31)|\n|    YOLO3    | [Weight Full Yolo3](https://drive.google.com/open?id=1cnCQHl-TnOrwb-leug1I0O9vMBaSwJLt)|\n\n\n## Type of Data\nThe 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.\nExample FLIR image:\n\n![FLIR](images/example_flir.jpg)\n\nSame image in .jpg format:\n\n![JPG](images/example.jpg)\n\n## Training\n\n### 1. Data preparation\n\nView folder Train\u0026Test_A/ and Train\u0026Test_S/, example of panel anns and soiling fault anns.\n\nOrganize the dataset into 4 folders:\n\n+ train_image_folder \u003c= the folder that contains the train images.\n\n+ train_annot_folder \u003c= the folder that contains the train annotations in VOC format.\n\n+ valid_image_folder \u003c= the folder that contains the validation images.\n\n+ valid_annot_folder \u003c= the folder that contains the validation annotations in VOC format.\n\nThere is a one-to-one correspondence by file name between images and annotations.\nFor create own data set use LabelImg code from :\n[https://github.com/tzutalin/labelImg](https://github.com/tzutalin/labelImg)\n\n### 2. Edit the configuration file\nThe configuration file for YOLO3 is a json file, which looks like this  (example soiling fault ):\n\n```python\n{\n    \"model\" : {\n        \"min_input_size\":       400,\n        \"max_input_size\":       400,\n        \"anchors\":              [5,7, 10,14, 15, 15, 26,32, 45,119, 54,18, 94,59, 109,183, 200,21],\n        \"labels\":               [\"1\"],\n\t\"backend\": \t\t\"full_yolo_backend.h5\"\n    },\n\n    \"train\": {\n        \"train_image_folder\":   \"../Train\u0026Test_S/Train/images/\",\n        \"train_annot_folder\":   \"../Train\u0026Test_S/Train/anns/\",\n\t\"cache_name\":           \"../Experimento_fault_1/Resultados_yolo3/full_yolo/experimento_fault_1_gpu.pkl\",\n\n        \"train_times\":          1,\n\n        \"batch_size\":           2,\n        \"learning_rate\":        1e-4,\n        \"nb_epochs\":            200,\n        \"warmup_epochs\":        15,\n        \"ignore_thresh\":        0.5,\n        \"gpus\":                 \"0,1\",\n\n\t\"grid_scales\":          [1,1,1],\n        \"obj_scale\":            5,\n        \"noobj_scale\":          1,\n        \"xywh_scale\":           1,\n        \"class_scale\":          1,\n\n\t\"tensorboard_dir\":      \"log_experimento_fault_gpu\",\n\t\"saved_weights_name\":   \"../Experimento_fault_1/Resultados_yolo3/full_yolo/experimento_yolo3_full_fault.h5\",\n        \"debug\":                true\n    },\n\n    \"valid\": {\n        \"valid_image_folder\":   \"../Train\u0026Test_S/Test/images/\",\n        \"valid_annot_folder\":   \"../Train\u0026Test_S/Test/anns/\",\n        \"cache_name\":           \"../Experimento_fault_1/Resultados_yolo3/full_yolo/val_fault_1.pkl\",\n\n        \"valid_times\":          1\n    },\n   \"test\": {\n        \"test_image_folder\":   \"../Train\u0026Test_S/Test/images/\",\n        \"test_annot_folder\":   \"../Train\u0026Test_S/Test/anns/\",\n        \"cache_name\":          \"../Experimento_fault_1/Resultados_yolo3/full_yolo/test_fault_1.pkl\",\n\n        \"test_times\":          1\n    }\n}\n```\nThe configuration file for SSD300 is a json file, which looks like this  (example soiling fault ) and .txt with name of images (train.txt):\n```\n{\n    \"model\" : {\n        \"backend\":      \"ssd300\",\n        \"input\":        400,\n        \"labels\":               [\"1\"]\n    },\n\n    \"train\": {\n        \"train_image_folder\":   \"Train\u0026Test_S/Train/images\",\n        \"train_annot_folder\":   \"Train\u0026Test_S/Train/anns\",\n        \"train_image_set_filename\": \"Train\u0026Test_S/Train/train.txt\",\n\n        \"train_times\":          1,\n        \"batch_size\":           12,\n        \"learning_rate\":        1e-4,\n        \"warmup_epochs\":        3,\n        \"nb_epochs\":            100,\n\t       \"saved_weights_name\":     \"Result_ssd300_fault_1/experimento_ssd300_fault_1.h5\",\n        \"debug\":                true\n    },\n    \"valid\": {\n            \"valid_image_folder\":   \"../Train\u0026Test_D/Test/images/\",\n            \"valid_annot_folder\":   \"../Train\u0026Test_D/Test/anns/\",\n            \"valid_image_set_filename\":   \"../Train\u0026Test_D/Test/test.txt\"\n        },\n\n\"test\": {\n        \"test_image_folder\":   \"Train\u0026Test_S/Test/images\",\n        \"test_annot_folder\":   \"Train\u0026Test_S/Test/anns\",\n        \"test_image_set_filename\":   \"Train\u0026Test_S/Test/test.txt\"\n    }\n}\n```\n\n### 3. Start the training process\n\n`python train_ssd.py -c config.json -o /path/to/result`\n\nor\n`python train_yolo.py -c config.json -o /path/to/result`\n\nBy 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.\n\n### 4. Perform detection using trained weights on image, set of images\n\n`python predict_ssd.py -c config.json -i /path/to/image/or/video -o /path/output/result`\nor\n`python predict_yolo.py -c config.json -i /path/to/image/or/video -o /path/output/result`\n\nIt carries out detection on the image and write the image with detected bounding boxes to the same folder.\n\n## Evaluation\nThe 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\n\n`python evaluate.py -c config.json` \nExample:\n`python keras-yolo3-master/evaluate.py -c config_full_yolo_fault_1_infer.json` \n\nCompute the mAP performance of the model defined in `saved_weights_name` on the validation dataset defined in `valid_image_folder` and `valid_annot_folder`.\n\n| Model \t \t|  mAP \t\t     | Config |\n|:--------------:\t|:------------------:|:------------------:|\n| YOLO3 Soiling  \t| 0.7302 \t     |[config](config_full_yolo_fault_1_infer.json) |\n|   YOLO3 Diode  \t| 0.6127             | [config](config_full_yolo_fault_4_infer.json)|\n|   YOLO3 Affected Cell |  0.7230            | [config](config_full_yolo_fault_2_infer.json)|\n\n\n# Weights of Trained Models\nAll of weights of this trained model grab from [Drive_Weights](https://drive.google.com/drive/folders/1LSc9FkAwJrAAT8pAUWz8aax_biFAMMXS?usp=sharing)\n\n|      Model     |  Weights Trained |  Config  |\n|:--------------:|:------------------:|:--------:|\n|   SSD7 Panel   |      [weight](https://drive.google.com/open?id=1qNjfAp9sW1VJh8ewnb3NKuafhZockTqV)      | [config](Result_ssd7_panel/config_7_panel.json) |\n| SSD300 Soiling |      [weight](https://drive.google.com/open?id=1IiOyYW8yPAh4IALbM_ZVqRhLdxV-ZSPw)      | [config](config_300_fault_1.json) |\n|   YOLO3 Panel  |      [weight](https://drive.google.com/open?id=14zgtgDJv3KTvhRC-VOz6sqsGPC_bdrL1)      | [config](config_full_yolo_panel_infer.json) |\n|  YOLO3 Soiling |      [weight](https://drive.google.com/open?id=1YLgkn1wL5xAGOpwd2gzdfsJVGYPzszn-)      | [config](config_full_yolo_fault_1_infer.json) |\n|   YOLO3 Diode  |      [weight](https://drive.google.com/open?id=1VUtrK9JVTbzBw5dX7_dgLTMToFHbAJl1)      | [config](config_full_yolo_fault_4_infer.json) |\n|   YOLO3 Affected Cell    |      [weight](https://drive.google.com/open?id=1ngyCzw7xF0N5oZnF29EIS5LOl1PFkRRM)      | [config](config_full_yolo_fault_2_infer.json) |\n\nThe image used are specified in [Table images](Training_Images.xlsx).\nYou can see some examples in [Summary of results](README_Result.md).\n\n# Contributing\n\nContributions are welcome and will be fully credited. We accept contributions via Pull Requests on GitHub.\n\n## Pull Request Checklist\n\nBefore sending your pull requests, make sure you followed this list.\n\n- Read [contributing guidelines](CONTRIBUTING.md).\n- Read [Code of Conduct](CODE_OF_CONDUCT.md).\n- Check if my changes are consistent with the [guidelines](https://github.com/RentadroneCL/model-definition/blob/master/CONTRIBUTING.md#general-guidelines-and-philosophy-for-contribution).\n- Changes are consistent with the [Coding Style](https://github.com/RentadroneCL/model-definition/blob/master/CONTRIBUTING.md#c-coding-style).\n\n\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["agricultural-modelling","agriculture-data","agriculture-research","leaf-area-index","opendata","phenological-metrics","precision-agriculture","vegetation-index","water-stress"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/19787","html_url":"https://ost.ecosyste.ms/projects/19787"}