Measured, not promised
Every figure below is copied from the project’s registry, with the split it was measured on. Nothing here is a benchmark against another product, and nothing was re-measured for this page.
| Metric | Value | Split | Source |
|---|---|---|---|
| mAP50 | 0.8835 | validation | model_registry.json:143 |
| mAP50-95 | 0.5434 | validation | model_registry.json:143 |
| Precision | 0.812 | validation | model_registry.json:143 |
| Recall | 0.856 | validation | model_registry.json:143 |
| mAP50-95, short_circuit | 0.918 | validation | model_registry.json:143 |
| mAP50-95, black_core | 0.847 | validation | model_registry.json:143 |
| mAP50-95, finger | 0.54 | validation | model_registry.json:143 |
| mAP50-95, horizontal_dislocation | 0.504 | validation | model_registry.json:143 |
| mAP50-95, thick_line | 0.485 | validation | model_registry.json:143 |
| mAP50-95, star_crack | 0.393 | validation | model_registry.json:143 |
| mAP50-95, vertical_dislocation | 0.335 | validation | model_registry.json:143 |
| mAP50-95, crack | 0.325 | validation | model_registry.json:143 |
The headline figure was last changed in the repository on 2026-08-16.
Known weaknesses
Model and threshold
| Registry key | solar_cell_defect_detector |
|---|---|
| Architecture | YOLO11l (run pvel_ad_yolo11l, 60 epochs) |
| Input size | 1024 px |
| Decision threshold | 0.25 |
| Labels | black_core, finger, crack, star_crack, thick_line, horizontal_dislocation, vertical_dislocation, short_circuit |
| Status | installed (registry status; the weights file is not in the Git repository) |
History
- An RGB panel-condition detector (Clear/Dusty/Damage/Snow) reached mAP50 0.318 with Dusty its worst class at 0.073 and was not registered.
What was it trained on?
PVEL-AD electroluminescence cell anomalies with named defect boxes (4,500 images). Only trainval carries annotations: 4,500 images and 7,842 boxes. test/Annotations is present and empty, so its 19,150 images are unlabelled. Metrics are on the validation split.
| Source | drive.google.com/file/d/1EtteKnLhSFQ3XMCRXt5wKY-lDkIP7299 |
|---|---|
| Licence | Catalogue says: "Apache-2.0 (repository); dataset released for research use" registry.py:298 |
Weights trained on a dataset carry that dataset’s terms, which can be stricter than the code licence. The weights are not in the Git repository.
What happens when it cannot answer?
On main, the registry entry's scope note says it must not be applied to drone photographs of installed panels. An explicit refusal of RGB panel photographs ('There is NO model for RGB photographs of panels, so a photo is REFUSED with that reason') exists only on the integration branch, not on public main.
Sources: model_registry.json:143
Provenance
The registry records the SHA-256 of the weights file whose metrics were measured. At load, the installed file is hashed and compared; a different file is reported as a mismatch, so these figures are never attached to weights they do not describe.
sha256 a57676a7141baba3605fa81dd3a817405ee28522aff9edbc3e74e12755c6783bTests named for this capability in the registry: tests/test_trained_defect_models.py::TestTheWeightsAreReallyThere, tests/test_trained_defect_models.py::TestTheNumbersArePublished, tests/test_trained_defect_models.py::TestLabelsMatchTheModel.

Other model cards: Crack segmentation · Corrosion severity · Solar thermal anomalies · AI defect detection