OpenDroneKit

Solar cell defects (electroluminescence) model card

Object detection of defects in electroluminescence (EL) images of individual solar cells. It is not an aerial or thermal model.

Updated 2026-10-02Figures from docs/features/registry.py and models/model_registry.json at 1ef6351

0.8835mAP50 · validationsolar_cell_defect_detector

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.

MetricValueSplitSource
mAP500.8835validationmodel_registry.json:143
mAP50-950.5434validationmodel_registry.json:143
Precision0.812validationmodel_registry.json:143
Recall0.856validationmodel_registry.json:143
mAP50-95, short_circuit0.918validationmodel_registry.json:143
mAP50-95, black_core0.847validationmodel_registry.json:143
mAP50-95, finger0.54validationmodel_registry.json:143
mAP50-95, horizontal_dislocation0.504validationmodel_registry.json:143
mAP50-95, thick_line0.485validationmodel_registry.json:143
mAP50-95, star_crack0.393validationmodel_registry.json:143
mAP50-95, vertical_dislocation0.335validationmodel_registry.json:143
mAP50-95, crack0.325validationmodel_registry.json:143

The headline figure was last changed in the repository on 2026-08-16.

Known weaknesses

Model and threshold

Registry keysolar_cell_defect_detector
ArchitectureYOLO11l (run pvel_ad_yolo11l, 60 epochs)
Input size1024 px
Decision threshold0.25
Labelsblack_core, finger, crack, star_crack, thick_line, horizontal_dislocation, vertical_dislocation, short_circuit
Statusinstalled (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.

Sourcedrive.google.com/file/d/1EtteKnLhSFQ3XMCRXt5wKY-lDkIP7299
LicenceCatalogue 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  a57676a7141baba3605fa81dd3a817405ee28522aff9edbc3e74e12755c6783b

Tests 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.

Example output of solar_cell_defect_detector on a held-out test image
solar_cell_defect_detectorheld-out test image, from the homepage run

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