Skip to main content
QMSQMS
QMS
  • Welcome to your QMS
  • Quality Manual
  • Procedures
  • Records
  • Legit.Health Plus Version 1.1.0.0
    • CAPA Plan - BSI CE Mark Closeout
    • Index
    • Overview and Device Description
    • Information provided by the Manufacturer
    • Design and Manufacturing Information
    • GSPR
    • Benefit-Risk Analysis and Risk Management
    • Product Verification and Validation
      • Software
      • Artificial Intelligence
        • R-TF-028-001 AI Description
        • R-TF-028-002 AI Development Plan
        • R-TF-028-003 Data Collection Instructions: Custom Gathered Data
        • R-TF-028-003 Data Collection Instructions: Archive Data
        • R-TF-028-004 Data Annotation Instructions - Binary Indicator Mapping
        • R-TF-028-004 Data Annotation Instructions - ICD-11 Mapping
        • R-TF-028-004 Data Annotation Instructions - Non-clinical data
        • R-TF-028-004 Data Annotation Instructions - Visual Signs
        • R-TF-028-005 AI Development Report
        • R-TF-028-006 AI Release Report
        • R-TF-028-009 AI Design Checks
        • R-TF-028-010 AI V&V Checks
        • R-TF-028-011 AI Risk Assessment
      • Cybersecurity
      • Usability and Human Factors Engineering
      • Clinical
      • Commissioning
    • Post-Market Surveillance
  • Legit.Health Plus Version 1.1.0.1
  • Legit.Health Utilities
  • Licenses and accreditations
  • Applicable Standards and Regulations
  • Pricing
  • Public tenders
  • Legit.Health Plus Version 1.1.0.0
  • Product Verification and Validation
  • Artificial Intelligence
  • R-TF-028-006 AI Release Report

R-TF-028-006 AI Release Report

Table of contents
  • Purpose
  • Scope
  • Related Documents
  • Package Details
    • Overview
    • Model File Format
    • Configuration Files
  • Clinical Models: Detailed Specifications
    • ICD Category Distribution and Binary Indicators
      • ICD Category Distribution Algorithm
      • Binary Indicators Algorithm
    • Visual Sign Intensity Quantification Models
      • Common Specifications
      • Erythema Intensity Quantification
      • Desquamation Intensity Quantification
      • Induration Intensity Quantification
      • Pustule Intensity Quantification
      • Crusting Intensity Quantification
      • Xerosis Intensity Quantification
      • Swelling Intensity Quantification
      • Oozing Intensity Quantification
      • Excoriation Intensity Quantification
      • Lichenification Intensity Quantification
    • Wound Characteristic Assessment Models
      • Input Specifications
      • Output Specifications
    • Lesion Quantification Models (Object Detection)
      • Common Object Detection Specifications
      • Inflammatory Nodular Lesion Quantification
      • Acneiform Lesion Type Quantification
      • Acneiform Inflammatory Lesion Quantification
      • Hive Lesion Quantification
    • Surface Area Quantification Models (Segmentation)
      • Common Segmentation Specifications
      • Wound Surface Quantification
      • Erythema Surface Quantification
      • Hair Loss Surface Quantification
      • Nail Lesion Surface Quantification
      • Hypopigmentation/Depigmentation Surface Quantification
      • Hyperpigmentation Surface Quantification
    • Pattern Identification Models
      • Follicular and Inflammatory Pattern Identification
      • Inflammatory Pattern Identification (Hurley Staging)
    • Hair Follicle Quantification
  • Non-Clinical Models: Detailed Specifications
    • Domain Validation
      • Input Specifications
      • Output Specifications
    • Dermatology Image Quality Assessment (DIQA)
      • Output Specifications
    • Skin Surface Segmentation
      • Output Specifications
    • Body Surface Segmentation
      • Output Specifications
    • Head Detection
      • Input Specifications
      • Output Specifications
  • Technical Integration Details
    • API Orchestration Logic
    • Model Execution Order
    • Error Handling
  • Integration Verification Package
    • Purpose
    • Package Contents
      • Reference Test Images
      • Expected Outputs File
      • Verification Manifest
    • Acceptance Criteria
    • Verification Procedure
      • Step 1: Environment Preparation
      • Step 2: Inference Execution
      • Step 3: Output Comparison
      • Step 4: Results Documentation
    • Failure Handling
  • Release Verification
    • Model Integrity Verification
    • Validation Status
    • Known Limitations
  • Release Checklist
  • Technical Support
    • Support Channels
    • Contact Information
    • Support Scope
    • Escalation Path

Purpose​

This document serves as the official release report for the AI algorithm package integrated into the Legit.Health Plus medical device, version v1.1.0.0. It provides comprehensive technical specifications for all AI models, including input/output formats, preprocessing and post-processing requirements, and integration guidelines necessary for the deployment team to implement the algorithms in the production environment.

This release report is prepared in accordance with MDR 2017/745 Annex II requirements for technical documentation, specifically addressing the software as a medical device (SaMD) component containing AI/ML algorithms.

Scope​

This document covers all 59 AI models included in the Legit.Health Plus device:

  • 54 Clinical Models: Directly fulfill the device's intended purpose of providing quantitative data on clinical signs and interpretative distribution of ICD categories
  • 5 Non-Clinical Models: Support proper device functioning through quality assurance, preprocessing, and validation functions

Related Documents​

Document IDTitleRelationship
GP-028AI DevelopmentGoverning procedure for AI development and release activities
R-TF-028-001AI DescriptionModel specifications, performance requirements, clinical objectives
R-TF-028-002AI Development PlanDevelopment methodology and validation strategy
R-TF-028-005AI Development ReportTraining results, validation outcomes, bias analysis
R-TF-028-010AI V&V ChecksVerification checklist for release deliverables
R-TF-028-011AI Risk AssessmentRisk analysis and mitigation measures

Package Details​

Overview​

The algorithm package is composed of multiple deep learning models and configuration files, organized to support the device's clinical and non-clinical functions.

The complete package is available in the designated repository, version v1.1.0.0. It contains:

Clinical Models:

  • 1 ICD Category Distribution model (.pt format) with configuration file (.json)
  • 1 Binary Indicator mapping matrix (.csv) for post-processing derivation
  • 10 Visual Sign Intensity Quantification models (.pt format) with configurations
  • 24 Wound Characteristic Assessment models (.pt format) with configurations
  • 5 Lesion Quantification models (object detection, .pt format)
  • 12 Surface Area Quantification models (segmentation, .pt format)
  • 2 Pattern Identification models (classification, .pt format)

Non-Clinical Models:

  • 1 Domain Validation model (.pt format)
  • 1 Dermatology Image Quality Assessment (DIQA) model (.pt format)
  • 1 Skin Surface Segmentation model (.pt format)
  • 1 Body Surface Segmentation model (.pt format)
  • 1 Head Detection model (.pt format)

Model File Format​

All deep learning models are provided in PyTorch native format (.pt, .pth, or .ckpt files), ensuring:

  • Full preservation of model architecture, weights, and computational graph
  • Reliable deployment and reproducibility
  • Version control and traceability
  • Optimized inference using PyTorch runtime (CPU and GPU)
  • Compliance with industry standards for medical device software

PyTorch Runtime Requirements:

  • PyTorch version: >=1.12
  • Python version: >=3.8
  • CUDA version (for GPU): >=11.6 (optional)

Configuration Files​

Each model is accompanied by a JSON configuration file specifying:

  • Model path and version
  • Input dimensions and preprocessing parameters
  • Output format and post-processing requirements
  • Class labels (where applicable)
  • Threshold values for clinical decision support

Clinical Models: Detailed Specifications​

ICD Category Distribution and Binary Indicators​

Model Classification: 🔬 Clinical Model

Reference: R-TF-028-001 AI/ML Description - ICD Category Distribution and Binary Indicators section

ICD Category Distribution Algorithm​

Purpose​

The ICD Category Distribution algorithm analyzes a dermatological image (clinical or dermoscopic) to provide an interpretative distribution of probabilities across 346 validated ICD-11 categories. The algorithm outputs the top-5 most probable conditions with their corresponding ICD-11 codes and confidence scores.

The performance testing of this algorithm is detailed in R-TF-028-005 AI Development Report.

Input Specifications​
ParameterSpecification
TypeSingle dermatological image (clinical or dermoscopic)
FormatRGB, uint8; standard image file formats (JPEG, PNG)
ResolutionMinimum 224×224 pixels; recommended ≥512×512 pixels
Color SpacesRGB
Output Specifications​
ParameterSpecification
TypeProbability distribution vector
Dimension346 values (one per validated ICD-11 category)
Data Typefloat32
Value Range[0.0, 1.0] per element; sum of all values = 1.0

Output JSON Structure:

{
"icd_distribution": {
"entropy": 0.45,
"top_5_predictions": [
{"icd_code": "EA90.0", "name": "Psoriasis vulgaris", "probability": 0.72},
{"icd_code": "EA80.0", "name": "Atopic dermatitis", "probability": 0.12},
{"icd_code": "EA85.0", "name": "Seborrhoeic dermatitis", "probability": 0.08},
{"icd_code": "EK90.0", "name": "Tinea corporis", "probability": 0.04},
{"icd_code": "EA81.0", "name": "Contact dermatitis", "probability": 0.02}
],
"full_distribution": [0.72, 0.12, 0.08, ..., 0.000001]
}
}
Preprocessing Requirements​

The raw input image must be preprocessed before being passed to the PyTorch model:

  1. Resize: Scale the image to 384×384 pixels using bilinear interpolation
  2. Normalize: Apply image normalization using the training set mean pixel value and standard deviation.
  3. Data Type Conversion: Convert to float32
  4. Tensor Format: CHW (Channels, Height, Width) ordering
Post-processing Requirements​

To achieve the validated performance, Test-Time Augmentation (TTA) must be applied:

  1. Create augmented versions of the preprocessed input image:
    • Horizontal flip
    • Vertical flip
    • 90°, 180°, 270° rotation
    • Histogram equalization (CLAHE)
  2. Run inference on the original image and all augmented versions (5 total inferences)
  3. Average the probability vectors element-wise to produce the final distribution
  4. Apply temperature scaling (calibration parameter provided in config) for probability calibration
  5. Extract top-5 predictions by sorting probabilities in descending order
  6. Compute the entropy of the probability distribution to provide additional explainability
Configuration File​

File: icd_distribution_config.json

{
"model_path": "models/icd_distribution_v1.1.0.pt",
"model_version": "1.1.0.0",
"architecture": "convnextv2_base",
"head_hidden_features": 768,
"head_activation": "gelu",
"temperature_scaling": 1.1690781116485596,
"num_classes": 346,
"classes_file": "icd_categories_v1.1.0.0.csv"
"input_size": 384,
"normalization": {
"mean": [0.485, 0.456, 0.406],
"std": [0.229, 0.224, 0.225]
},
}
Performance Summary​
MetricResultSuccess Criterion
Top-1 Accuracy0.658 (95% CI: 0.654-0.663)≥ 0.50
Top-3 Accuracy0.821 (95% CI: 0.817-0.825)≥ 0.60
Top-5 Accuracy0.864 (95% CI: 0.861-0.868)≥ 0.70
Expected Results​

s3://legit-health-plus/test-images/condition-classifier/melanoma_1.jpg

{
"icd_distribution": {
"entropy": 0.39412604460588385,
"top_5_predictions": [
{
"icd_code": "2C30",
"name": "Cutaneous melanoma",
"probability": 70.807356
},
{
"icd_code": "2F20.1",
"name": "Atypical melanocytic nevus",
"probability": 0.308577
},
{
"icd_code": "2F20.Z",
"name": "Melanocytic nevus",
"probability": 0.293256
},
{
"icd_code": "2C32",
"name": "Basal cell carcinoma",
"probability": 0.204755
},
{
"icd_code": "2F21.0",
"name": "Seborrhoeic keratosis",
"probability": 0.173751
},
{
"icd_code": "EK90.0&XH36H6",
"name": "Actinic keratosis",
"probability": 0.131219
},
{
"icd_code": "2C31",
"name": "Squamous cell carcinoma",
"probability": 0.120039
},
{
"icd_code": "ED90.0",
"name": "Rosacea",
"probability": 0.112667
},
{
"icd_code": "2C30.3",
"name": "Acral lentiginous melanoma (primary)",
"probability": 0.111564
},
{
"icd_code": "ED80.Z",
"name": "Acne",
"probability": 0.107905
}
],
"full_distribution": [
{
"icd_code": "EE10.1",
"name": "Abnormality of nail surface",
"probability": 0.000837
},
{
"icd_code": "ND56.0&XJ652",
"name": "Abrasion",
"probability": 0.00098
},
{
"icd_code": "ED51.0",
"name": "Acanthosis nigricans",
"probability": 0.000811
}, ...
{
"icd_code": "EF40",
"name": "Vasculitis or capillaritis involving the skin",
"probability": 0.000789
},
{
"icd_code": "EG00",
"name": "Vasodilatation of extremities",
"probability": 0.000769
},
{
"icd_code": "EF20.0",
"name": "Venous lake",
"probability": 0.000837
},
{
"icd_code": "BD74.3",
"name": "Venous leg ulcer",
"probability": 0.000821
},
{
"icd_code": "ED63.0",
"name": "Vitiligo",
"probability": 0.000917
},
{
"icd_code": "2E67.11",
"name": "Vulvar Paget disease",
"probability": 0.000784
},
{
"icd_code": "9A06.4",
"name": "Xanthelasma of eyelid",
"probability": 0.000868
},
{
"icd_code": "LD27.1",
"name": "Xeroderma pigmentosum",
"probability": 0.000923
},
{
"icd_code": "ED54",
"name": "Xerosis cutis or asteatosis",
"probability": 0.000785
},
{
"icd_code": "EE11.1",
"name": "Yellow nail syndrome",
"probability": 0.000758
},
{
"icd_code": "1E+091",
"name": "Zoster",
"probability": 0.000829
}
]
}
}

s3://legit-health-plus/test-images/condition-classifier/melanoma_2.jpg

{
"icd_distribution": {
"entropy": 0.4414921339232481,
"top_5_predictions": [
{
"icd_code": "2C30",
"name": "Cutaneous melanoma",
"probability": 66.2925
},
{
"icd_code": "2C30.3",
"name": "Acral lentiginous melanoma (primary)",
"probability": 0.913159
},
{
"icd_code": "2F20.1",
"name": "Atypical melanocytic nevus",
"probability": 0.688098
},
{
"icd_code": "2F20.Z",
"name": "Melanocytic nevus",
"probability": 0.371657
},
{
"icd_code": "2C32",
"name": "Basal cell carcinoma",
"probability": 0.283395
},
{
"icd_code": "EA89",
"name": "Eczematous dermatitis",
"probability": 0.211095
},
{
"icd_code": "EK90.0&XH36H6",
"name": "Actinic keratosis",
"probability": 0.143392
},
{
"icd_code": "2C31",
"name": "Squamous cell carcinoma",
"probability": 0.142958
},
{
"icd_code": "EB60",
"name": "Lichen sclerosus",
"probability": 0.140493
},
{
"icd_code": "-",
"name": "Non-specific finding",
"probability": 0.128925
}
],
"full_distribution": [
{
"icd_code": "EE10.1",
"name": "Abnormality of nail surface",
"probability": 0.000849
},
{
"icd_code": "ND56.0&XJ652",
"name": "Abrasion",
"probability": 0.000911
},
{
"icd_code": "ED51.0",
"name": "Acanthosis nigricans",
"probability": 0.001079
},
{
"icd_code": "LB63",
"name": "Accessory nipple",
"probability": 0.000948
},
{
"icd_code": "ED80.Z",
"name": "Acne",
"probability": 0.001127
},
{
"icd_code": "ED54",
"name": "Xerosis cutis or asteatosis",
"probability": 0.00086
},
{
"icd_code": "EE11.1",
"name": "Yellow nail syndrome",
"probability": 0.000766
},
{
"icd_code": "1E+091",
"name": "Zoster",
"probability": 0.001044
}
]
}
}

s3://legit-health-plus/test-images/condition-classifier/melanoma_3.jpg

{
"icd_distribution": {
"entropy": 0.4101957026013219,
"top_5_predictions": [
{
"icd_code": "2C30",
"name": "Cutaneous melanoma",
"probability": 69.331157
},
{
"icd_code": "2C30.3",
"name": "Acral lentiginous melanoma (primary)",
"probability": 0.416621
},
{
"icd_code": "2F20.1",
"name": "Atypical melanocytic nevus",
"probability": 0.411692
},
{
"icd_code": "2F20.Z",
"name": "Melanocytic nevus",
"probability": 0.248993
},
{
"icd_code": "2C32",
"name": "Basal cell carcinoma",
"probability": 0.221238
},
{
"icd_code": "EA89",
"name": "Eczematous dermatitis",
"probability": 0.142786
},
{
"icd_code": "EK90.0&XH36H6",
"name": "Actinic keratosis",
"probability": 0.127115
},
{
"icd_code": "2C31",
"name": "Squamous cell carcinoma",
"probability": 0.123789
},
{
"icd_code": "LA90.1",
"name": "Lymphatic malformation",
"probability": 0.120748
},
{
"icd_code": "2F21.0",
"name": "Seborrhoeic keratosis",
"probability": 0.118404
}
],
"full_distribution": [
{
"icd_code": "EE10.1",
"name": "Abnormality of nail surface",
"probability": 0.000784
},
{
"icd_code": "ND56.0&XJ652",
"name": "Abrasion",
"probability": 0.000865
},
{
"icd_code": "ED51.0",
"name": "Acanthosis nigricans",
"probability": 0.000993
},
{
"icd_code": "9A06.4",
"name": "Xanthelasma of eyelid",
"probability": 0.000935
},
{
"icd_code": "LD27.1",
"name": "Xeroderma pigmentosum",
"probability": 0.001066
},
{
"icd_code": "ED54",
"name": "Xerosis cutis or asteatosis",
"probability": 0.000815
},
{
"icd_code": "EE11.1",
"name": "Yellow nail syndrome",
"probability": 0.000745
},
{
"icd_code": "1E+091",
"name": "Zoster",
"probability": 0.000954
}
]
}
}

Binary Indicators Algorithm​

Purpose​

Binary indicators are derived from the ICD-11 probability distribution as a deterministic post-processing step using a dermatologist-defined mapping matrix. Each indicator reflects the aggregated probability that a case belongs to clinically meaningful categories requiring differential triage or diagnostic attention.

Input Specifications​
ParameterSpecification
TypeICD probability distribution vector
Dimension346 values (from ICD Category Distribution output)
Additional InputBinary indicator mapping matrix (from CSV)
Output Specifications​

Six Binary Indicators:

IndicatorDescriptionClinical Significance
MalignantProbability of confirmed malignancyMelanoma, SCC, BCC detection
Pre-malignantProbability of conditions with malignant potentialActinic keratosis, Bowen's disease
Associated with MalignancyBenign conditions mimicking malignancyAtypical nevi, seborrheic keratoses
Pigmented LesionProbability of pigmented subgroupMelanoma risk assessment
Urgent ReferralRequires evaluation within 48 hoursSuspected melanoma, ulcerated lesions
High-Priority ReferralRequires evaluation within 2 weeksSuspected NMSC, premalignant lesions

Output JSON Structure:

{
"binary_indicators": {
"malignant": 0.03,
"pre_malignant": 0.08,
"associated_with_malignancy": 0.15,
"pigmented_lesion": 0.92,
"urgent_referral": 0.05,
"high_priority_referral": 0.12
}
}
Calculation Method​

For each binary indicator jjj, the integration code must perform:

Binary Indicatorj=∑i=1346(pi×Mij)\text{Binary Indicator}_j = \sum_{i=1}^{346} \big(p_i \times M_{ij}\big)Binary Indicatorj​=i=1∑346​(pi​×Mij​)

Where:

  • pip_ipi​ is the ICD-11 probability for category iii
  • MijM_{ij}Mij​ is the binary mapping matrix coefficient (0 or 1) indicating whether category iii contributes to indicator jjj
Configuration File​

File: icd_categories_v1.1.0.0.csv, with columns:

  • Class name (string)
  • ICD-11 code (string)
  • One column per binary indicator (int)
Performance Summary​
IndicatorAUC95% CISuccess Criterion
Malignant0.9180.914-0.922≥ 0.80
Pre-malignant0.8780.872-0.884≥ 0.80
Associated with Malignancy0.8630.855-0.870≥ 0.80
Pigmented Lesion0.9590.957-0.962≥ 0.80
Urgent Referral0.9000.889-0.911≥ 0.80
High-Priority Referral0.8880.884-0.892≥ 0.80
Expected Results​

s3://legit-health-plus/test-images/condition-classifier/melanoma_1.jpg

{
"binary_indicators": {
"Malignant": 0.726005,
"Pre-malignant": 0.034555,
"Associated to malignancy": 0.768963,
"Is a pigmented lesion": 0.759136,
"Urgent referral": 0.049306,
"High-priority referral": 0.797724
}
}

s3://legit-health-plus/test-images/condition-classifier/melanoma_2.jpg

{
"binary_indicators": {
"Malignant": 0.691468,
"Pre-malignant": 0.043102,
"Associated to malignancy": 0.738586,
"Is a pigmented lesion": 0.732039,
"Urgent referral": 0.054326,
"High-priority referral": 0.7752
}
}

s3://legit-health-plus/test-images/condition-classifier/melanoma_3.jpg

{
"binary_indicators": {
"Malignant": 0.715312,
"Pre-malignant": 0.037663,
"Associated to malignancy": 0.759875,
"Is a pigmented lesion": 0.749356,
"Urgent referral": 0.051053,
"High-priority referral": 0.791029
}
}

Visual Sign Intensity Quantification Models​

Model Classification: 🔬 Clinical Models

These models quantify the intensity of clinical signs on an ordinal scale (0-9), outputting probability distributions that are converted to continuous severity scores.

Common Specifications​

Input Specifications (All Intensity Models)​
ParameterSpecification
TypeSingle dermatological image
FormatRGB, uint8 (JPEG, PNG)
ResolutionResized to 272×272 pixels
Color SpacesRGB
Output Specifications (All Intensity Models)​
ParameterSpecification
Probability Distribution10 values (classes 0-9), sum = 1.0
Continuous ScoreWeighted expected value: y^=∑i=09i⋅pi\hat{y} = \sum_{i=0}^{9} i \cdot p_iy^​=∑i=09​i⋅pi​
Data Typefloat32
Value Range[0.0, 9.0]
Preprocessing (All Intensity Models)​
  1. Resize: Scale to 272×272 pixels using bilinear interpolation
  2. Normalize: Apply ImageNet normalization:
    • Mean: [0.485, 0.456, 0.406]
    • Std: [0.229, 0.224, 0.225]
  3. Data Type: Convert to float32
  4. Tensor Format: CHW ordering
Post-processing (All Intensity Models)​
  1. Apply softmax activation to obtain probability distribution
  2. Calculate continuous score: y^=∑i=09i⋅pi\hat{y} = \sum_{i=0}^{9} i \cdot p_iy^​=∑i=09​i⋅pi​
  3. Round to desired precision (typically 2 decimal places)
Architecture​

All intensity models use EfficientNet-B2 with Feature Pyramid Network (FPN) backbone, adapted for 10-class ordinal classification.

Erythema Intensity Quantification​

Purpose: Quantifies redness/inflammation intensity for conditions including psoriasis, atopic dermatitis, rosacea.

Expected output JSON:

{
"probability_distribution": [
[
3.317265750979459e-8, 1.300240626278537e-7, 4.289904431686864e-9, 2.1801518812480936e-8,
9.524950428385637e-7, 0.033597446978092194, 0.10959780961275101, 0.8562615513801575,
0.0005419636145234108, 4.4181707181678576e-8
]
],
"continuous_score": 6.8237450727682205
}

The original image to generate these outputs can be found in s3://legit-health-plus/test-images/ErythemaIntensityQuantification/1.jpg

Performance: Specified in R-TF-028-005 AI Development Report: Erythema Intensity Quantification

Configuration File: erythema_intensity_config.json

Desquamation Intensity Quantification​

Purpose: Quantifies scaling/peeling intensity for psoriasis, seborrheic dermatitis, and other scaling conditions.

Expected output JSON:

{
"probability_distribution": [
[
8.442028160970949e-7, 2.9521125100018253e-8, 3.969607860199176e-6, 0.0013594592455774546,
0.5552752017974854, 4.094568430446088e-5, 0.0012707337737083435, 0.44140952825546265,
0.0006375949014909565, 1.637903892515169e-6
]
],
"continuous_score": 5.3279984828624904
}

The original image to generate these outputs can be found in s3://legit-health-plus/test-images/DesquamationIntensityQuantification/1.jpg

Performance: Specified in R-TF-028-005 AI Development Report: Desquamation Intensity Quantification

Configuration File: desquamation_intensity_config.json

Induration Intensity Quantification​

Purpose: Quantifies plaque thickness/hardening for psoriasis and other inflammatory dermatoses.

Expected output JSON:

{
"probability_distribution": [
[
0.00338586769066751, 6.331619601951388e-7, 9.158335160464048e-5, 0.05288663133978844,
0.006485740654170513, 0.00019502690702211112, 0.004077768884599209, 0.9296616911888123,
0.0031048504170030355, 0.00011023339175153524
]
],
"continuous_score": 6.7436911465273965
}

The original image to generate these outputs can be found in s3://legit-health-plus/test-images/IndurationIntensityQuantification/1.jpg

Performance: Specified in R-TF-028-005 AI Development Report: Induration Intensity Quantification

Configuration File: induration_intensity_config.json

Pustule Intensity Quantification​

Purpose: Quantifies pustulation severity for pustular psoriasis, acne, AGEP.

Expected output JSON:

{
"probability_distribution": [
[
0.1450415998697281, 0.006939078215509653, 0.7252118587493896, 0.003976427949965,
0.00577736459672451, 0.001695547834970057, 0.007374573964625597, 0.07776667177677155,
0.007189963944256306, 0.019026942551136017
]
],
"continuous_score": 2.3182556178653613
}

The original image to generate these outputs can be found in s3://legit-health-plus/test-images/PustuleIntensityQuantification/1.jpg

Performance: Specified in R-TF-028-005 AI Development Report: Pustule Intensity Quantification

Configuration File: pustule_intensity_config.json

Crusting Intensity Quantification​

Purpose: Quantifies crust formation for atopic dermatitis, impetigo, wound healing assessment.

Expected output JSON:

{
"probability_distribution": [
[
8.442028160970949e-7, 2.9521125100018253e-8, 3.969607860199176e-6, 0.0013594592455774546,
0.5552752017974854, 4.094568430446088e-5, 0.0012707337737083435, 0.44140952825546265,
0.0006375949014909565, 1.637903892515169e-6
]
],
"continuous_score": 5.3279984828624904
}

The original image to generate these outputs can be found in s3://legit-health-plus/test-images/CrustingIntensityQuantification/1.jpg

Performance: Specified in R-TF-028-005 AI Development Report: Crusting Intensity Quantification

Configuration File: crusting_intensity_config.json

Xerosis Intensity Quantification​

Purpose: Quantifies dry skin severity for atopic dermatitis, ichthyosis, aging skin.

Expected output JSON:

{
"probability_distribution": [
[
0.00048537287511862814, 0.04049737751483917, 0.019379710778594017, 0.001857674797065556,
0.00037739728577435017, 6.432881491491571e-5, 0.9372596740722656, 5.054048597230576e-5,
2.6538469683146104e-5, 1.4749366528121755e-6
]
],
"continuous_score": 5.710798466703636
}

The original image to generate these outputs can be found in s3://legit-health-plus/test-images/XerosisIntensityQuantification/1.jpg

Performance: Specified in R-TF-028-005 AI Development Report: Xerosis Intensity Quantification

Configuration File: xerosis_intensity_config.json

Swelling Intensity Quantification​

Purpose: Quantifies edema severity for atopic dermatitis, urticaria, angioedema.

Expected output JSON:

{
"probability_distribution": [
[
0.000630750902928412, 0.0012454602401703596, 0.5647211670875549, 0.3996390700340271,
0.003440126543864608, 0.024147767573595047, 0.0028311503119766712, 0.0027287527918815613,
0.0005960240378044546, 1.975861050595995e-5
]
],
"continuous_score": 2.5051385397728154
}

The original image to generate these outputs can be found in s3://legit-health-plus/test-images/SwellingIntensityQuantification/1.jpg

Performance: Specified in R-TF-028-005 AI Development Report: Swelling Intensity Quantification

Configuration File: swelling_intensity_config.json

Oozing Intensity Quantification​

Purpose: Quantifies exudate/discharge severity for acute dermatitis, infected eczema.

Expected output JSON:

{
"probability_distribution": [
[
8.442028160970949e-7, 2.9521125100018253e-8, 3.969607860199176e-6, 0.0013594592455774546,
0.5552752017974854, 4.094568430446088e-5, 0.0012707337737083435, 0.44140952825546265,
0.0006375949014909565, 1.637903892515169e-6
]
],
"continuous_score": 5.3279984828624904
}

The original image to generate these outputs can be found in s3://legit-health-plus/test-images/OozingIntensityQuantification/1.jpg

Performance: Specified in R-TF-028-005 AI Development Report: Oozing Intensity Quantification

Configuration File: oozing_intensity_config.json

Excoriation Intensity Quantification​

Purpose: Quantifies scratch damage severity as objective marker of pruritus.

Expected output JSON:

{
"probability_distribution": [
[
0.8875784873962402, 0.0006232527666725218, 0.09243898838758469, 0.018707318231463432,
1.756926576490514e-5, 8.905705908546224e-5, 3.1543219591867455e-8, 0.0005371941952034831,
7.97201028035488e-6, 2.172054962557013e-7
]
],
"continuous_score": 0.2459650261521702
}

The original image to generate these outputs can be found in s3://legit-health-plus/test-images/ExcoriationIntensityQuantification/1.jpg

Performance: Specified in R-TF-028-005 AI Development Report: Excoriation Intensity Quantification

Configuration File: excoriation_intensity_config.json

Lichenification Intensity Quantification​

Purpose: Quantifies skin thickening with accentuated markings indicating chronic disease.

Expected output JSON:

{
"probability_distribution": [
[
0.00338586769066751, 6.331619601951388e-7, 9.158335160464048e-5, 0.05288663133978844,
0.006485740654170513, 0.00019502690702211112, 0.004077768884599209, 0.9296616911888123,
0.0031048504170030355, 0.00011023339175153524
]
],
"continuous_score": 6.7436911465273965
}

The original image to generate these outputs can be found in s3://legit-health-plus/test-images/LichenificationIntensityQuantification/1.jpg

Performance: Specified in R-TF-028-005 AI Development Report: Lichenification Intensity Quantification

Configuration File: lichenification_intensity_config.json

Wound Characteristic Assessment Models​

Model Classification: 🔬 Clinical Model

Purpose: Comprehensive multi-task model providing 26 outputs for wound staging and morphological characterization.

Input Specifications​

ParameterSpecification
TypeSingle wound image
FormatRGB, uint8 (JPEG, PNG)
ResolutionVariable; resized to model input dimensions
RequirementsClear view of wound bed and surrounding tissue

Output Specifications​

The model produces three categories of outputs:

A. Expected output JSON for Wound Stage (Categorical 0-4)

{
"predicted_stage": 4.0,
"probability_distribution": [
[
1.714014707943079e-8, 1.1291296431181763e-7, 2.7153060955242836e-7, 0.00023115635849535465,
0.9997685551643372
]
]
}

The original image to generate these outputs can be found in s3://legit-health-plus/test-images/WoundStageClassification/1.jpg

B. Expected output JSON for Wound Intensity Score (Regression 0-19)

{
"score": 10.859453201293945
}

The original image to generate these outputs can be found in s3://legit-health-plus/test-images/WoundIntensityScore/1.jpg

C. Expected output JSON for Binary Wound Characteristics (22 outputs)

  • Affected_tissues:Bone
{
"present": false,
"probability": 1.1421862922134096e-7
}
  • Affected_tissues:Dermis-epidermis
{
"present": false,
"probability": 0.09544984996318817
}
  • Affected_tissues:Intact
{
"present": false,
"probability": 2.890120924803341e-7
}
  • Affected_tissues:Muscle
{
"present": false,
"probability": 1.3682869393960573e-5
}
  • Affected_tissues:Subcutaneous
{
"present": false,
"probability": 0.16069117188453674
}
  • Biofilm_tissue
{
"present": true,
"probability": 0.9993616938591003
}
  • Borders:Damaged
{
"present": false,
"probability": 1.113098824134795e-5
}
  • Borders:Delimited
{
"present": true,
"probability": 0.9999657869338989
}
  • Borders:Diffused
{
"present": false,
"probability": 0.00018668640404939651
}
  • Borders:Indistinguishable
{
"present": false,
"probability": 1.2808607152692275e-6
}
  • Borders:Thickened
{
"present": false,
"probability": 1.1434914313213085e-6
}
  • Perilesional_erythema
{
"present": true,
"probability": 0.8942169547080994
}
  • Perilesional_maceration
{
"present": true,
"probability": 0.5389253497123718
}
  • Type_exudation:Bloody
{
"present": false,
"probability": 2.7391379262553528e-5
}
  • Type_exudation:Fibrinous
{
"present": false,
"probability": 0.03276707977056503
}
  • Type_exudation:Purulent
{
"present": true,
"probability": 0.9628145098686218
}
  • Type_exudation:Serous
{
"present": true,
"probability": 0.9972590208053589
}
  • Type_tissue_wound_bed:Closed
{
"present": false,
"probability": 3.3192190329600635e-8
}
  • Type_tissue_wound_bed:Epithelial
{
"present": true,
"probability": 0.9876804351806641
}
  • Type_tissue_wound_bed:Granulation
{
"present": true,
"probability": 0.920688271522522
}
  • Type_tissue_wound_bed:Necrotic
{
"present": false,
"probability": 8.865220593179401e-7
}
  • Type_tissue_wound_bed:Slough
{
"present": true,
"probability": 0.9999998807907104
}

The original image to generate these outputs can be found in s3://legit-health-plus/test-images/WoundCharacteristicAssessment/1.jpg

Performance: Specified in R-TF-028-005 AI Development Report: Wound Characteristic Assessment

Lesion Quantification Models (Object Detection)​

Model Classification: 🔬 Clinical Models

These models detect and count specific lesion types, outputting bounding boxes with confidence scores.

Common Object Detection Specifications​

Input Specifications​
ParameterSpecification
TypeSingle clinical image
FormatRGB, uint8 (JPEG, PNG)
ResolutionVariable; minimum 640×640 recommended
Output Structure​
{
"detections": [
{
"class": "lesion_type",
"confidence": 0.95,
"box": [120, 85, 180, 145]
}
],
"counts": {
"lesion_type": 5
}
}
Post-processing​
  1. Apply Non-Maximum Suppression (NMS)
  2. Filter detections by confidence threshold
  3. Aggregate counts per lesion class

Inflammatory Nodular Lesion Quantification​

Purpose: Detects and counts nodules, abscesses, draining tunnels, and non-draining tunnels for IHS4 scoring with oriented bounding boxes.

Detected Classes:

ClassDescriptionIHS4 Weight
NoduleSolid inflammatory nodule×1
AbscessPus-filled inflammatory lesion×2
Non-draining TunnelSinus tract without active drainageN/A
Draining TunnelSinus tract with active drainage×4

Output JSON Structure (with oriented bounding boxes in the format xyxyxyxy):

{
"hs_lesion_detection": {
"detections": [
{
"class": "nodule",
"confidence": 0.92,
"box": [
[185, 348],
[277, 276],
[256, 249],
[164, 321]
]
},
{
"class": "abscess",
"confidence": 0.88,
"box": [
[279, 235],
[291, 165],
[262, 160],
[249, 229]
]
},
{
"class": "draining_tunnel",
"confidence": 0.85,
"box": [
[255, 266],
[255, 244],
[236, 244],
[236, 266]
]
}
],
"counts": {
"nodule": 1,
"abscess": 1,
"non_draining_tunnel": 0,
"draining_tunnel": 1
},
"ihs4_score": 7
}
}

IHS4 Calculation: IHS4 = (Nodules × 1) + (Abscesses × 2) + (Draining Tunnels × 4)

Performance: rMAE ≤ 0.45 for each lesion type

IoU threshold for NMS: 0.3

Confidence threshold: 0.3

Configuration File: hs_lesion_detection_config.json

Model's expected results:

s3://legit-health-plus/test-images/InflammatoryNodularLesionQuantification/1.jpg

{'hs_lesion_detection': [{'class': 'Draining tunnel',
'confidence': 0.38,
'box': [[185, 348], [277, 276], [256, 249], [164, 321]]}],
'counts': {'Draining tunnel': 1},
'ihs4_score': 4}

s3://legit-health-plus/test-images/InflammatoryNodularLesionQuantification/2.jpg

{'hs_lesion_detection': [{'class': 'Non-draining tunnel',
'confidence': 0.34,
'box': [[279, 235], [291, 165], [262, 160], [249, 229]]}],
'counts': {'Non-draining tunnel': 1},
'ihs4_score': 0}

s3://legit-health-plus/test-images/InflammatoryNodularLesionQuantification/3.jpg

{'hs_lesion_detection': [{'class': 'Nodule',
'confidence': 0.69,
'box': [[255, 266], [255, 244], [236, 244], [236, 266]]},
{'class': 'Nodule',
'confidence': 0.6,
'box': [[276, 245], [275, 223], [257, 224], [257, 246]]},
{'class': 'Nodule',
'confidence': 0.57,
'box': [[492, 437], [492, 407], [469, 406], [468, 437]]},
{'class': 'Nodule',
'confidence': 0.55,
'box': [[341, 119], [341, 102], [320, 101], [320, 118]]},
{'class': 'Nodule',
'confidence': 0.44,
'box': [[146, 228], [147, 199], [118, 198], [117, 227]]},
{'class': 'Nodule',
'confidence': 0.43,
'box': [[313, 188], [313, 167], [293, 167], [293, 188]]},
{'class': 'Nodule',
'confidence': 0.35,
'box': [[430, 389], [430, 368], [413, 368], [412, 389]]},
{'class': 'Nodule',
'confidence': 0.33,
'box': [[368, 321], [368, 287], [338, 287], [338, 321]]},
{'class': 'Nodule',
'confidence': 0.32,
'box': [[554, 407], [553, 378], [528, 378], [528, 408]]},
{'class': 'Nodule',
'confidence': 0.31,
'box': [[497, 390], [498, 371], [480, 370], [479, 389]]}],
'counts': {'Nodule': 10},
'ihs4_score': 10}

s3://legit-health-plus/test-images/InflammatoryNodularLesionQuantification/4.jpg

{'hs_lesion_detection': [], 'counts': {}, 'ihs4_score': 0}

Acneiform Lesion Type Quantification​

Purpose: Multi-class detection of acne lesion types for comprehensive severity assessment.

Detected Classes:

ClassDescription
PapuleSmall solid elevated lesion (<5mm)
PustulePus-filled elevated lesion
CystDeep, pus-filled lesion
ComedoneOpen (blackhead) or closed (whitehead)
NoduleLarge solid inflammatory lesion (≥5mm)
ScabCrusted healing lesion
SpotPost-inflammatory macule

Output JSON Structure:

{
"acneiform_lesion_detection": {
"detections": [
{ "class": "papule", "confidence": 0.89, "box": [50, 60, 70, 80] },
{ "class": "pustule", "confidence": 0.92, "box": [100, 120, 125, 145] },
{ "class": "comedone", "confidence": 0.78, "box": [180, 90, 195, 105] }
],
"counts": {
"papule": 1,
"pustule": 1,
"comedone": 1
}
}
}

Performance: rMAE ≤ Expert Inter-observer Variability for each lesion type

IoU threshold for NMS: 0.3

Confidence threshold: 0.15

Configuration File: acneiform_lesion_detection_config.json

Model's expected results:

s3://legit-health-plus/test-images/AcneiformLesionTypeQuantification/1.jpg

{'acneiform_lesion_detection': [{'class': 'Pustule', 'confidence': 0.43, 'box': [509, 366, 549, 409]},
{'class': 'Spot', 'confidence': 0.42, 'box': [561, 547, 619, 602]},
{'class': 'Papule', 'confidence': 0.38, 'box': [681, 339, 745, 404]},
{'class': 'Papule', 'confidence': 0.35, 'box': [758, 472, 802, 517]},
{'class': 'Papule', 'confidence': 0.35, 'box': [793, 447, 826, 483]},
{'class': 'Papule', 'confidence': 0.34, 'box': [677, 112, 717, 153]},
{'class': 'Spot', 'confidence': 0.32, 'box': [762, 253, 809, 297]},
{'class': 'Papule', 'confidence': 0.31, 'box': [677, 441, 722, 486]},
{'class': 'Papule', 'confidence': 0.3, 'box': [562, 90, 607, 135]},
{'class': 'Papule', 'confidence': 0.29, 'box': [351, 558, 393, 599]},
{'class': 'Papule', 'confidence': 0.28, 'box': [686, 169, 722, 205]},
{'class': 'Spot', 'confidence': 0.25, 'box': [562, 424, 602, 467]},
{'class': 'Papule', 'confidence': 0.22, 'box': [1129, 342, 1165, 378]},
{'class': 'Papule', 'confidence': 0.22, 'box': [664, 217, 701, 253]},
{'class': 'Papule', 'confidence': 0.22, 'box': [359, 463, 401, 512]},
{'class': 'Spot', 'confidence': 0.18, 'box': [747, 552, 781, 585]},
{'class': 'Spot', 'confidence': 0.17, 'box': [514, 508, 574, 560]},
{'class': 'Spot', 'confidence': 0.17, 'box': [724, 462, 762, 499]}],
'counts': {'Pustule': 1, 'Spot': 6, 'Papule': 11}}

s3://legit-health-plus/test-images/AcneiformLesionTypeQuantification/2.jpg

{'acneiform_lesion_detection': [{'class': 'Nodule or cyst', 'confidence': 0.49, 'box': [250, 160, 284, 192]},
{'class': 'Pustule', 'confidence': 0.38, 'box': [374, 15, 400, 41]},
{'class': 'Nodule or cyst', 'confidence': 0.29, 'box': [59, 148, 118, 220]},
{'class': 'Scab', 'confidence': 0.26, 'box': [399, 177, 426, 207]},
{'class': 'Nodule or cyst', 'confidence': 0.21, 'box': [226, 194, 258, 221]}],
'counts': {'Nodule or cyst': 3, 'Pustule': 1, 'Scab': 1}}

s3://legit-health-plus/test-images/AcneiformLesionTypeQuantification/3.jpg

{'acneiform_lesion_detection': [{'class': 'Pustule', 'confidence': 0.51, 'box': [738, 1167, 935, 1353]},
{'class': 'Pustule', 'confidence': 0.49, 'box': [323, 1289, 406, 1372]},
{'class': 'Pustule', 'confidence': 0.35, 'box': [462, 1321, 493, 1352]},
{'class': 'Pustule', 'confidence': 0.28, 'box': [1270, 714, 1336, 781]},
{'class': 'Pustule', 'confidence': 0.28, 'box': [1231, 1129, 1512, 1360]},
{'class': 'Papule', 'confidence': 0.24, 'box': [451, 1236, 504, 1293]},
{'class': 'Pustule', 'confidence': 0.19, 'box': [1334, 432, 1400, 500]},
{'class': 'Papule', 'confidence': 0.17, 'box': [126, 1156, 177, 1214]},
{'class': 'Scab', 'confidence': 0.16, 'box': [1338, 1202, 1434, 1289]},
{'class': 'Comedo', 'confidence': 0.15, 'box': [940, 529, 973, 562]}],
'counts': {'Pustule': 6, 'Papule': 2, 'Scab': 1, 'Comedo': 1}}

Acneiform Inflammatory Lesion Quantification​

Purpose: Single-class detection of inflammatory lesions for general acne/rosacea assessment.

Output JSON Structure:

{
"inflammatory_lesion_detection": {
"detections": [
{ "class": "inflammatory", "confidence": 0.91, "box": [50, 60, 70, 80] },
{ "class": "inflammatory", "confidence": 0.87, "box": [100, 120, 125, 145] }
],
"count": 15,
"density": 0.1
}
}

Performance: MAE ≤ Expert Inter-observer Variability; F1 ≥ 0.80

IoU threshold for NMS: 0.3

Confidence threshold: 0.2

Configuration File: inflammatory_lesion_detection_config.json

Model's expected results:

s3://legit-health-plus/test-images/AcneiformInflammatoryLesionQuantification/1.jpg

{'inflammatory_lesion_detection': [{'class': 'inflammatory', 'confidence': 0.52, 'box': [607, 466, 667, 524]},
{'class': 'inflammatory', 'confidence': 0.47, 'box': [511, 369, 546, 405]},
{'class': 'inflammatory', 'confidence': 0.43, 'box': [358, 465, 400, 510]},
{'class': 'inflammatory', 'confidence': 0.41, 'box': [682, 118, 713, 150]},
{'class': 'inflammatory', 'confidence': 0.4, 'box': [565, 94, 603, 134]},
{'class': 'inflammatory', 'confidence': 0.4, 'box': [356, 564, 386, 594]},
{'class': 'inflammatory', 'confidence': 0.4, 'box': [796, 449, 824, 482]},
{'class': 'inflammatory', 'confidence': 0.38, 'box': [683, 342, 740, 401]},
{'class': 'inflammatory', 'confidence': 0.33, 'box': [688, 170, 721, 204]},
{'class': 'inflammatory', 'confidence': 0.31, 'box': [1134, 347, 1164, 378]},
{'class': 'inflammatory', 'confidence': 0.27, 'box': [670, 222, 696, 250]},
{'class': 'inflammatory', 'confidence': 0.26, 'box': [763, 480, 795, 514]},
{'class': 'inflammatory', 'confidence': 0.24, 'box': [683, 449, 717, 483]},
{'class': 'inflammatory', 'confidence': 0.23, 'box': [494, 619, 525, 647]},
{'class': 'inflammatory', 'confidence': 0.23, 'box': [570, 552, 614, 596]},
{'class': 'inflammatory', 'confidence': 0.22, 'box': [544, 159, 568, 183]}],
'count': 16,
'density': 0.58}

s3://legit-health-plus/test-images/AcneiformInflammatoryLesionQuantification/2.jpg

{'inflammatory_lesion_detection': [{'class': 'inflammatory', 'confidence': 0.56, 'box': [252, 165, 282, 189]},
{'class': 'inflammatory', 'confidence': 0.48, 'box': [369, 13, 406, 45]},
{'class': 'inflammatory', 'confidence': 0.48, 'box': [249, 190, 259, 199]},
{'class': 'inflammatory', 'confidence': 0.48, 'box': [63, 167, 102, 208]},
{'class': 'inflammatory', 'confidence': 0.44, 'box': [403, 180, 422, 201]},
{'class': 'inflammatory', 'confidence': 0.41, 'box': [140, 31, 146, 37]},
{'class': 'inflammatory', 'confidence': 0.36, 'box': [231, 195, 252, 217]},
{'class': 'inflammatory', 'confidence': 0.34, 'box': [258, 229, 270, 241]},
{'class': 'inflammatory', 'confidence': 0.34, 'box': [119, 33, 125, 39]},
{'class': 'inflammatory', 'confidence': 0.31, 'box': [208, 172, 221, 184]},
{'class': 'inflammatory', 'confidence': 0.24, 'box': [126, 36, 131, 41]},
{'class': 'inflammatory', 'confidence': 0.24, 'box': [130, 41, 136, 47]},
{'class': 'inflammatory', 'confidence': 0.22, 'box': [217, 43, 226, 51]}],
'count': 13,
'density': 0.12}

s3://legit-health-plus/test-images/AcneiformInflammatoryLesionQuantification/3.jpg

{'inflammatory_lesion_detection': [{'class': 'inflammatory', 'confidence': 0.49, 'box': [327, 1293, 400, 1366]},
{'class': 'inflammatory', 'confidence': 0.47, 'box': [459, 1237, 500, 1282]},
{'class': 'inflammatory', 'confidence': 0.47, 'box': [1275, 722, 1331, 772]},
{'class': 'inflammatory', 'confidence': 0.45, 'box': [232, 690, 280, 733]},
{'class': 'inflammatory', 'confidence': 0.45, 'box': [128, 1156, 171, 1199]},
{'class': 'inflammatory', 'confidence': 0.41, 'box': [741, 1165, 953, 1363]},
{'class': 'inflammatory', 'confidence': 0.4, 'box': [463, 1316, 498, 1353]},
{'class': 'inflammatory', 'confidence': 0.39, 'box': [327, 1059, 365, 1096]},
{'class': 'inflammatory', 'confidence': 0.38, 'box': [443, 623, 483, 665]},
{'class': 'inflammatory', 'confidence': 0.36, 'box': [234, 1171, 268, 1204]},
{'class': 'inflammatory', 'confidence': 0.34, 'box': [285, 1112, 315, 1142]},
{'class': 'inflammatory', 'confidence': 0.33, 'box': [388, 634, 422, 668]},
{'class': 'inflammatory', 'confidence': 0.32, 'box': [332, 1234, 362, 1263]},
{'class': 'inflammatory', 'confidence': 0.32, 'box': [201, 1099, 231, 1128]},
{'class': 'inflammatory', 'confidence': 0.3, 'box': [335, 1166, 368, 1198]},
{'class': 'inflammatory', 'confidence': 0.29, 'box': [1324, 423, 1408, 496]},
{'class': 'inflammatory', 'confidence': 0.27, 'box': [258, 561, 297, 599]},
{'class': 'inflammatory', 'confidence': 0.26, 'box': [1381, 747, 1431, 791]},
{'class': 'inflammatory', 'confidence': 0.25, 'box': [224, 1120, 251, 1146]},
{'class': 'inflammatory', 'confidence': 0.25, 'box': [209, 1259, 238, 1290]},
{'class': 'inflammatory', 'confidence': 0.24, 'box': [286, 1205, 319, 1237]},
{'class': 'inflammatory', 'confidence': 0.23, 'box': [370, 608, 405, 640]},
{'class': 'inflammatory', 'confidence': 0.23, 'box': [240, 1080, 276, 1116]},
{'class': 'inflammatory', 'confidence': 0.22, 'box': [288, 1288, 320, 1320]},
{'class': 'inflammatory', 'confidence': 0.22, 'box': [1297, 1196, 1449, 1316]},
{'class': 'inflammatory', 'confidence': 0.22, 'box': [173, 1129, 198, 1151]},
{'class': 'inflammatory', 'confidence': 0.21, 'box': [391, 723, 417, 749]}],
'count': 27,
'density': 0.3}

Hive Lesion Quantification​

Purpose: Detects and counts urticarial wheals for UAS7 scoring.

Output JSON Structure:

{
"hive_detection": {
"detections": [
{ "class": "hive", "confidence": 0.85, "box": [80, 100, 150, 170] },
{ "class": "hive", "confidence": 0.78, "box": [200, 150, 280, 230] }
],
"count": 25,
"uas7_wheal_component": 2
}
}

UAS7 Wheal Scoring: 0 = none, 1 = <20 wheals, 2 = 20-50 wheals, 3 = >50 wheals

Performance: mAP@50 ≥ 0.56; rMAE ≤ Expert Inter-observer Variability

IoU threshold for NMS: 0.3

Confidence threshold: 0.2

Configuration File: hive_detection_config.json

Model's expected results:

s3://legit-health-plus/test-images/HiveLesionQuantification/1.jpg

{'hive_detection': [{'class': 'Hive', 'confidence': 0.48, 'box': [81, 381, 129, 438]},
{'class': 'Hive', 'confidence': 0.31, 'box': [571, 161, 657, 231]},
{'class': 'Hive', 'confidence': 0.3, 'box': [1167, 334, 1203, 377]},
{'class': 'Hive', 'confidence': 0.3, 'box': [1084, 358, 1166, 435]},
{'class': 'Hive', 'confidence': 0.23, 'box': [276, 434, 406, 559]},
{'class': 'Hive', 'confidence': 0.21, 'box': [1070, 429, 1151, 507]}],
'counts': {'Hive': 6},
'uas7_wheal_component': 1}

s3://legit-health-plus/test-images/HiveLesionQuantification/2.jpg

{'hive_detection': [{'class': 'Hive', 'confidence': 0.79, 'box': [232, 718, 291, 772]},
{'class': 'Hive', 'confidence': 0.7, 'box': [119, 391, 172, 447]},
{'class': 'Hive', 'confidence': 0.69, 'box': [190, 738, 227, 771]},
{'class': 'Hive', 'confidence': 0.65, 'box': [316, 724, 351, 755]},
{'class': 'Hive', 'confidence': 0.64, 'box': [327, 590, 364, 622]},
{'class': 'Hive', 'confidence': 0.63, 'box': [72, 264, 114, 309]},
{'class': 'Hive', 'confidence': 0.62, 'box': [250, 160, 288, 196]},
{'class': 'Hive', 'confidence': 0.61, 'box': [173, 592, 205, 621]},
{'class': 'Hive', 'confidence': 0.58, 'box': [62, 681, 115, 752]},
{'class': 'Hive', 'confidence': 0.58, 'box': [293, 134, 347, 179]},
{'class': 'Hive', 'confidence': 0.58, 'box': [312, 407, 343, 439]},
{'class': 'Hive', 'confidence': 0.58, 'box': [435, 708, 469, 740]},
{'class': 'Hive', 'confidence': 0.57, 'box': [51, 167, 96, 221]},
{'class': 'Hive', 'confidence': 0.57, 'box': [256, 489, 290, 523]},
{'class': 'Hive', 'confidence': 0.56, 'box': [225, 569, 284, 618]},
{'class': 'Hive', 'confidence': 0.54, 'box': [390, 249, 439, 299]},
{'class': 'Hive', 'confidence': 0.53, 'box': [132, 278, 229, 380]},
{'class': 'Hive', 'confidence': 0.52, 'box': [96, 548, 144, 602]},
{'class': 'Hive', 'confidence': 0.5, 'box': [120, 195, 217, 270]},
{'class': 'Hive', 'confidence': 0.5, 'box': [151, 776, 184, 799]},
{'class': 'Hive', 'confidence': 0.48, 'box': [262, 695, 291, 721]},
{'class': 'Hive', 'confidence': 0.48, 'box': [187, 539, 217, 569]},
{'class': 'Hive', 'confidence': 0.46, 'box': [359, 424, 441, 489]},
{'class': 'Hive', 'confidence': 0.46, 'box': [135, 672, 171, 706]},
{'class': 'Hive', 'confidence': 0.45, 'box': [205, 604, 233, 631]},
{'class': 'Hive', 'confidence': 0.45, 'box': [118, 609, 155, 649]},
{'class': 'Hive', 'confidence': 0.41, 'box': [324, 243, 347, 268]},
{'class': 'Hive', 'confidence': 0.38, 'box': [246, 421, 278, 452]},
{'class': 'Hive', 'confidence': 0.29, 'box': [177, 371, 208, 402]},
{'class': 'Hive', 'confidence': 0.29, 'box': [225, 280, 247, 302]},
{'class': 'Hive', 'confidence': 0.28, 'box': [225, 187, 257, 220]},
{'class': 'Hive', 'confidence': 0.26, 'box': [311, 759, 339, 784]},
{'class': 'Hive', 'confidence': 0.26, 'box': [340, 754, 369, 781]},
{'class': 'Hive', 'confidence': 0.25, 'box': [287, 372, 319, 401]},
{'class': 'Hive', 'confidence': 0.25, 'box': [88, 488, 120, 518]},
{'class': 'Hive', 'confidence': 0.24, 'box': [371, 226, 399, 252]},
{'class': 'Hive', 'confidence': 0.23, 'box': [450, 244, 472, 264]},
{'class': 'Hive', 'confidence': 0.22, 'box': [148, 155, 187, 194]},
{'class': 'Hive', 'confidence': 0.22, 'box': [271, 627, 299, 661]},
{'class': 'Hive', 'confidence': 0.21, 'box': [229, 360, 254, 389]},
{'class': 'Hive', 'confidence': 0.2, 'box': [405, 726, 430, 752]},
{'class': 'Hive', 'confidence': 0.2, 'box': [258, 532, 284, 559]}],
'counts': {'Hive': 42},
'uas7_wheal_component': 2}

s3://legit-health-plus/test-images/HiveLesionQuantification/3.jpg

{'hive_detection': [{'class': 'Hive', 'confidence': 0.73, 'box': [1469, 1759, 1762, 2070]},
{'class': 'Hive', 'confidence': 0.72, 'box': [1087, 815, 1860, 1726]},
{'class': 'Hive', 'confidence': 0.7, 'box': [307, 1290, 792, 1729]},
{'class': 'Hive', 'confidence': 0.65, 'box': [225, 361, 581, 714]},
{'class': 'Hive', 'confidence': 0.64, 'box': [2292, 1523, 2457, 1731]},
{'class': 'Hive', 'confidence': 0.62, 'box': [160, 1012, 431, 1309]},
{'class': 'Hive', 'confidence': 0.61, 'box': [1575, 639, 2029, 1168]},
{'class': 'Hive', 'confidence': 0.6, 'box': [413, 2077, 745, 2443]},
{'class': 'Hive', 'confidence': 0.58, 'box': [567, 141, 1104, 612]},
{'class': 'Hive', 'confidence': 0.57, 'box': [180, 644, 453, 959]},
{'class': 'Hive', 'confidence': 0.54, 'box': [1093, 2234, 1306, 2442]},
{'class': 'Hive', 'confidence': 0.54, 'box': [1750, 1078, 2451, 1796]},
{'class': 'Hive', 'confidence': 0.53, 'box': [1972, 1703, 2376, 2143]},
{'class': 'Hive', 'confidence': 0.51, 'box': [408, 1405, 1507, 2349]},
{'class': 'Hive', 'confidence': 0.51, 'box': [2309, 0, 2557, 158]},
{'class': 'Hive', 'confidence': 0.5, 'box': [2117, 654, 2472, 1017]},
{'class': 'Hive', 'confidence': 0.49, 'box': [2301, 1595, 3223, 2437]},
{'class': 'Hive', 'confidence': 0.48, 'box': [0, 768, 128, 1038]},
{'class': 'Hive', 'confidence': 0.45, 'box': [1525, 0, 1877, 264]},
{'class': 'Hive', 'confidence': 0.44, 'box': [1065, 1482, 1421, 1860]},
{'class': 'Hive', 'confidence': 0.43, 'box': [1312, 0, 1581, 196]},
{'class': 'Hive', 'confidence': 0.43, 'box': [2927, 0, 3258, 223]},
{'class': 'Hive', 'confidence': 0.43, 'box': [2855, 182, 3198, 532]},
{'class': 'Hive', 'confidence': 0.4, 'box': [2303, 72, 2595, 377]},
{'class': 'Hive', 'confidence': 0.4, 'box': [1995, 672, 2140, 837]},
{'class': 'Hive', 'confidence': 0.36, 'box': [804, 1378, 1195, 1772]},
{'class': 'Hive', 'confidence': 0.36, 'box': [1780, 73, 2435, 634]},
{'class': 'Hive', 'confidence': 0.36, 'box': [1275, 80, 1953, 532]},
{'class': 'Hive', 'confidence': 0.35, 'box': [784, 520, 1370, 1033]},
{'class': 'Hive', 'confidence': 0.35, 'box': [507, 827, 953, 1343]},
{'class': 'Hive', 'confidence': 0.33, 'box': [887, 132, 1162, 409]},
{'class': 'Hive', 'confidence': 0.33, 'box': [0, 1298, 145, 1665]},
{'class': 'Hive', 'confidence': 0.32, 'box': [6, 1045, 215, 1263]},
{'class': 'Hive', 'confidence': 0.32, 'box': [1445, 405, 1924, 749]},
{'class': 'Hive', 'confidence': 0.32, 'box': [1673, 1808, 2000, 2097]},
{'class': 'Hive', 'confidence': 0.31, 'box': [1049, 38, 1311, 294]},
{'class': 'Hive', 'confidence': 0.3, 'box': [1777, 2053, 2518, 2447]},
{'class': 'Hive', 'confidence': 0.29, 'box': [1167, 1976, 1514, 2394]},
{'class': 'Hive', 'confidence': 0.29, 'box': [2620, 1189, 3022, 1605]},
{'class': 'Hive', 'confidence': 0.29, 'box': [1732, 0, 2126, 152]},
{'class': 'Hive', 'confidence': 0.29, 'box': [2561, 44, 2915, 389]},
{'class': 'Hive', 'confidence': 0.26, 'box': [2165, 1094, 2488, 1417]},
{'class': 'Hive', 'confidence': 0.26, 'box': [2380, 836, 3167, 1759]},
{'class': 'Hive', 'confidence': 0.26, 'box': [103, 44, 556, 291]},
{'class': 'Hive', 'confidence': 0.25, 'box': [2386, 848, 2828, 1319]},
{'class': 'Hive', 'confidence': 0.24, 'box': [730, 0, 1028, 151]},
{'class': 'Hive', 'confidence': 0.24, 'box': [2210, 376, 2707, 927]},
{'class': 'Hive', 'confidence': 0.22, 'box': [2456, 311, 3257, 1233]},
{'class': 'Hive', 'confidence': 0.2, 'box': [2041, 439, 2339, 751]}],
'count': 49,
'uas7_wheal_component': 2}

s3://legit-health-plus/test-images/HiveLesionQuantification/4.jpg

{'hs_lesion_detection': [{'class': 'Hive', 'confidence': 0.77, 'box': [894, 98, 948, 145]},
{'class': 'Hive', 'confidence': 0.71, 'box': [713, 271, 770, 325]},
{'class': 'Hive', 'confidence': 0.69, 'box': [602, 278, 645, 324]},
{'class': 'Hive', 'confidence': 0.67, 'box': [795, 172, 849, 235]},
{'class': 'Hive', 'confidence': 0.65, 'box': [795, 126, 842, 178]},
{'class': 'Hive', 'confidence': 0.65, 'box': [399, 328, 446, 377]},
{'class': 'Hive', 'confidence': 0.64, 'box': [664, 223, 716, 273]},
{'class': 'Hive', 'confidence': 0.64, 'box': [147, 609, 199, 650]},
{'class': 'Hive', 'confidence': 0.63, 'box': [749, 75, 812, 135]},
{'class': 'Hive', 'confidence': 0.63, 'box': [667, 157, 722, 219]},
{'class': 'Hive', 'confidence': 0.61, 'box': [912, 179, 961, 227]},
{'class': 'Hive', 'confidence': 0.6, 'box': [713, 135, 766, 197]},
{'class': 'Hive', 'confidence': 0.6, 'box': [821, 72, 875, 118]},
{'class': 'Hive', 'confidence': 0.59, 'box': [371, 209, 461, 292]},
{'class': 'Hive', 'confidence': 0.58, 'box': [816, 320, 856, 357]},
{'class': 'Hive', 'confidence': 0.58, 'box': [749, 219, 798, 265]},
{'class': 'Hive', 'confidence': 0.58, 'box': [621, 224, 660, 267]},
{'class': 'Hive', 'confidence': 0.57, 'box': [326, 227, 405, 316]},
{'class': 'Hive', 'confidence': 0.55, 'box': [340, 309, 388, 351]},
{'class': 'Hive', 'confidence': 0.55, 'box': [349, 352, 399, 396]},
{'class': 'Hive', 'confidence': 0.54, 'box': [602, 148, 639, 193]},
{'class': 'Hive', 'confidence': 0.54, 'box': [705, 197, 750, 244]},
{'class': 'Hive', 'confidence': 0.54, 'box': [822, 272, 870, 323]},
{'class': 'Hive', 'confidence': 0.53, 'box': [850, 114, 891, 150]},
{'class': 'Hive', 'confidence': 0.5, 'box': [628, 310, 670, 354]},
{'class': 'Hive', 'confidence': 0.5, 'box': [764, 42, 814, 82]},
{'class': 'Hive', 'confidence': 0.49, 'box': [834, 219, 865, 250]},
{'class': 'Hive', 'confidence': 0.48, 'box': [670, 96, 708, 128]},
{'class': 'Hive', 'confidence': 0.48, 'box': [783, 268, 820, 306]},
{'class': 'Hive', 'confidence': 0.47, 'box': [763, 145, 793, 174]},
{'class': 'Hive', 'confidence': 0.47, 'box': [215, 206, 257, 244]},
{'class': 'Hive', 'confidence': 0.47, 'box': [890, 149, 933, 188]},
{'class': 'Hive', 'confidence': 0.46, 'box': [856, 248, 894, 280]},
{'class': 'Hive', 'confidence': 0.46, 'box': [867, 205, 906, 240]},
{'class': 'Hive', 'confidence': 0.45, 'box': [1056, 258, 1107, 304]},
{'class': 'Hive', 'confidence': 0.45, 'box': [680, 57, 721, 95]},
{'class': 'Hive', 'confidence': 0.44, 'box': [385, 289, 426, 328]},
{'class': 'Hive', 'confidence': 0.44, 'box': [1011, 190, 1057, 237]},
{'class': 'Hive', 'confidence': 0.42, 'box': [889, 58, 937, 98]},
{'class': 'Hive', 'confidence': 0.41, 'box': [370, 638, 409, 671]},
{'class': 'Hive', 'confidence': 0.41, 'box': [814, 243, 853, 281]},
{'class': 'Hive', 'confidence': 0.4, 'box': [683, 324, 718, 359]},
{'class': 'Hive', 'confidence': 0.4, 'box': [844, 156, 881, 197]},
{'class': 'Hive', 'confidence': 0.4, 'box': [634, 150, 674, 201]},
{'class': 'Hive', 'confidence': 0.4, 'box': [1048, 215, 1096, 259]},
{'class': 'Hive', 'confidence': 0.39, 'box': [633, 94, 672, 129]},
{'class': 'Hive', 'confidence': 0.38, 'box': [692, 118, 732, 156]},
{'class': 'Hive', 'confidence': 0.36, 'box': [931, 489, 971, 524]},
{'class': 'Hive', 'confidence': 0.35, 'box': [171, 555, 202, 586]},
{'class': 'Hive', 'confidence': 0.35, 'box': [446, 216, 488, 256]},
{'class': 'Hive', 'confidence': 0.34, 'box': [713, 74, 748, 107]},
{'class': 'Hive', 'confidence': 0.34, 'box': [186, 187, 223, 222]},
{'class': 'Hive', 'confidence': 0.34, 'box': [752, 187, 784, 218]},
{'class': 'Hive', 'confidence': 0.34, 'box': [597, 375, 623, 413]},
{'class': 'Hive', 'confidence': 0.34, 'box': [921, 426, 964, 461]},
{'class': 'Hive', 'confidence': 0.33, 'box': [768, 299, 807, 334]},
{'class': 'Hive', 'confidence': 0.33, 'box': [397, 481, 435, 519]},
{'class': 'Hive', 'confidence': 0.32, 'box': [906, 386, 954, 428]},
{'class': 'Hive', 'confidence': 0.31, 'box': [474, 250, 504, 281]},
{'class': 'Hive', 'confidence': 0.31, 'box': [507, 243, 542, 283]},
{'class': 'Hive', 'confidence': 0.28, 'box': [674, 278, 711, 313]},
{'class': 'Hive', 'confidence': 0.28, 'box': [651, 339, 681, 370]},
{'class': 'Hive', 'confidence': 0.28, 'box': [374, 399, 414, 440]},
{'class': 'Hive', 'confidence': 0.28, 'box': [902, 239, 962, 300]},
{'class': 'Hive', 'confidence': 0.26, 'box': [802, 404, 837, 439]},
{'class': 'Hive', 'confidence': 0.26, 'box': [844, 348, 882, 384]},
{'class': 'Hive', 'confidence': 0.26, 'box': [192, 143, 226, 178]},
{'class': 'Hive', 'confidence': 0.25, 'box': [486, 177, 531, 224]},
{'class': 'Hive', 'confidence': 0.25, 'box': [412, 421, 442, 449]},
{'class': 'Hive', 'confidence': 0.25, 'box': [149, 583, 183, 612]},
{'class': 'Hive', 'confidence': 0.24, 'box': [1020, 247, 1059, 291]},
{'class': 'Hive', 'confidence': 0.23, 'box': [823, 499, 866, 540]},
{'class': 'Hive', 'confidence': 0.23, 'box': [1146, 334, 1199, 395]},
{'class': 'Hive', 'confidence': 0.22, 'box': [883, 353, 923, 393]},
{'class': 'Hive', 'confidence': 0.22, 'box': [389, 452, 427, 489]},
{'class': 'Hive', 'confidence': 0.21, 'box': [352, 205, 390, 236]},
{'class': 'Hive', 'confidence': 0.21, 'box': [900, 640, 958, 671]},
{'class': 'Hive', 'confidence': 0.21, 'box': [102, 563, 166, 616]}],
'count': 78,
'uas7_wheal_component': 3}

s3://legit-health-plus/test-images/HiveLesionQuantification/5.jpg

{'hs_lesion_detection': [{'class': 'Hive', 'confidence': 0.83, 'box': [228, 418, 265, 451]},
{'class': 'Hive', 'confidence': 0.83, 'box': [262, 434, 305, 472]},
{'class': 'Hive', 'confidence': 0.83, 'box': [230, 284, 275, 325]},
{'class': 'Hive', 'confidence': 0.83, 'box': [188, 457, 234, 494]},
{'class': 'Hive', 'confidence': 0.83, 'box': [258, 383, 307, 427]},
{'class': 'Hive', 'confidence': 0.82, 'box': [266, 307, 312, 348]},
{'class': 'Hive', 'confidence': 0.82, 'box': [249, 109, 315, 167]},
{'class': 'Hive', 'confidence': 0.81, 'box': [151, 412, 191, 445]},
{'class': 'Hive', 'confidence': 0.81, 'box': [236, 471, 278, 499]},
{'class': 'Hive', 'confidence': 0.81, 'box': [165, 138, 222, 201]},
{'class': 'Hive', 'confidence': 0.8, 'box': [292, 396, 346, 445]},
{'class': 'Hive', 'confidence': 0.8, 'box': [310, 180, 349, 214]},
{'class': 'Hive', 'confidence': 0.8, 'box': [105, 160, 152, 201]},
{'class': 'Hive', 'confidence': 0.8, 'box': [168, 85, 219, 132]},
{'class': 'Hive', 'confidence': 0.78, 'box': [146, 326, 184, 372]},
{'class': 'Hive', 'confidence': 0.78, 'box': [379, 165, 425, 215]},
{'class': 'Hive', 'confidence': 0.78, 'box': [216, 168, 258, 208]},
{'class': 'Hive', 'confidence': 0.78, 'box': [310, 487, 347, 514]},
{'class': 'Hive', 'confidence': 0.77, 'box': [191, 373, 230, 406]},
{'class': 'Hive', 'confidence': 0.77, 'box': [403, 120, 442, 159]},
{'class': 'Hive', 'confidence': 0.76, 'box': [104, 25, 144, 70]},
{'class': 'Hive', 'confidence': 0.75, 'box': [127, 298, 161, 329]},
{'class': 'Hive', 'confidence': 0.75, 'box': [132, 430, 165, 461]},
{'class': 'Hive', 'confidence': 0.75, 'box': [168, 379, 202, 410]},
{'class': 'Hive', 'confidence': 0.73, 'box': [113, 338, 145, 370]},
{'class': 'Hive', 'confidence': 0.72, 'box': [449, 81, 479, 128]},
{'class': 'Hive', 'confidence': 0.72, 'box': [53, 188, 85, 222]},
{'class': 'Hive', 'confidence': 0.71, 'box': [253, 177, 302, 226]},
{'class': 'Hive', 'confidence': 0.71, 'box': [170, 501, 241, 545]},
{'class': 'Hive', 'confidence': 0.7, 'box': [283, 38, 387, 165]},
{'class': 'Hive', 'confidence': 0.7, 'box': [48, 160, 78, 195]},
{'class': 'Hive', 'confidence': 0.69, 'box': [240, 10, 300, 122]},
{'class': 'Hive', 'confidence': 0.69, 'box': [45, 214, 130, 305]},
{'class': 'Hive', 'confidence': 0.67, 'box': [374, 428, 396, 454]},
{'class': 'Hive', 'confidence': 0.67, 'box': [330, 224, 360, 254]},
{'class': 'Hive', 'confidence': 0.67, 'box': [368, 216, 409, 263]},
{'class': 'Hive', 'confidence': 0.67, 'box': [37, 87, 61, 118]},
{'class': 'Hive', 'confidence': 0.66, 'box': [292, 524, 342, 546]},
{'class': 'Hive', 'confidence': 0.66, 'box': [339, 495, 381, 527]},
{'class': 'Hive', 'confidence': 0.65, 'box': [237, 512, 264, 533]},
{'class': 'Hive', 'confidence': 0.64, 'box': [324, 405, 379, 456]},
{'class': 'Hive', 'confidence': 0.62, 'box': [86, 76, 124, 119]},
{'class': 'Hive', 'confidence': 0.62, 'box': [358, 273, 408, 313]},
{'class': 'Hive', 'confidence': 0.62, 'box': [320, 0, 413, 43]},
{'class': 'Hive', 'confidence': 0.61, 'box': [416, 316, 442, 350]},
{'class': 'Hive', 'confidence': 0.58, 'box': [236, 343, 282, 384]},
{'class': 'Hive', 'confidence': 0.58, 'box': [323, 461, 349, 483]},
{'class': 'Hive', 'confidence': 0.57, 'box': [103, 381, 151, 427]},
{'class': 'Hive', 'confidence': 0.56, 'box': [384, 7, 451, 77]},
{'class': 'Hive', 'confidence': 0.49, 'box': [355, 356, 391, 391]},
{'class': 'Hive', 'confidence': 0.49, 'box': [385, 401, 406, 425]},
{'class': 'Hive', 'confidence': 0.48, 'box': [244, 446, 263, 462]},
{'class': 'Hive', 'confidence': 0.47, 'box': [48, 117, 69, 140]},
{'class': 'Hive', 'confidence': 0.44, 'box': [59, 8, 101, 68]},
{'class': 'Hive', 'confidence': 0.41, 'box': [215, 341, 251, 374]},
{'class': 'Hive', 'confidence': 0.31, 'box': [150, 370, 168, 387]},
{'class': 'Hive', 'confidence': 0.3, 'box': [101, 286, 129, 314]},
{'class': 'Hive', 'confidence': 0.25, 'box': [371, 368, 400, 402]},
{'class': 'Hive', 'confidence': 0.25, 'box': [406, 395, 426, 430]}],
'count': 59,
'uas7_wheal_component': 3}

s3://legit-health-plus/test-images/HiveLesionQuantification/6.jpg

{'hs_lesion_detection': [{'class': 'Hive', 'confidence': 0.76, 'box': [14, 67, 237, 389]},
{'class': 'Hive', 'confidence': 0.41, 'box': [162, 160, 396, 390]},
{'class': 'Hive', 'confidence': 0.35, 'box': [251, 64, 380, 181]},
{'class': 'Hive', 'confidence': 0.34, 'box': [382, 209, 537, 421]},
{'class': 'Hive', 'confidence': 0.23, 'box': [479, 237, 595, 435]}],
'count': 5,
'uas7_wheal_component': 1}

Surface Area Quantification Models (Segmentation)​

Model Classification: 🔬 Clinical Models

These models perform pixel-wise segmentation to quantify affected surface areas.

Common Segmentation Specifications​

Input Specifications​
ParameterSpecification
TypeSingle clinical image
FormatRGB, uint8 (JPEG, PNG)
ResolutionVariable; original resolution preserved for output
Output Structure​
{
"segmentation": {
"mask": "base64_encoded_png",
"probability_map": "base64_encoded_png",
"percentage_affected": 15.7,
"pixel_count": 45230,
"total_roi_pixels": 288000
}
}
Post-processing​
  1. Apply sigmoid activation to obtain probability map
  2. Threshold at 0.5 to generate binary mask
  3. Calculate percentage: (affected_pixels / total_roi_pixels) × 100

Wound Surface Quantification​

Purpose: 7-class segmentation for comprehensive wound tissue analysis.

Segmentation Classes:

ClassDescription
Wound BedTotal wound area
GranulationHealthy healing tissue
Biofilm/SloughDevitalized tissue
NecrosisNon-viable tissue
MacerationPeriwound moisture damage
Orthopedic MaterialExposed hardware
Bone/Cartilage/TendonExposed deep structures

Expected output JSON:

  • Wound Bed
{
"image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"mask": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"probability_map": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"percentage": 3.072578463203463
}
  • Biofilm/Slough
{
"image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"mask": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"probability_map": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"percentage": 13.472620646158854
}
  • Granulation
{
"image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"mask": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"probability_map": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"percentage": 10.111006879299563
}
  • Necrosis
{
"image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"mask": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"probability_map": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"percentage": 4.453454000647878
}
  • Maceration
{
"image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"mask": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"probability_map": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"percentage": 4.4342041015625
}
  • Orthopedic Material
{
"image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"mask": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"probability_map": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"percentage": 0.801688345091123
}
  • Bone/Cartilage/Tendon
{
"image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"mask": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"probability_map": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"percentage": 1.1587196607037877
}

The original image to generate these outputs can be found in s3://legit-health-plus/test-images/WoundSurfaceQuantification/1.jpg

Configuration File: wound_surface_segmentation_config.json

Erythema Surface Quantification​

Purpose: Binary segmentation for perilesional and wound bed erythema extent.

Expected output JSON:

{
"image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"mask": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"probability_map": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"percentage": 17.151666666666667
}

The original image to generate these outputs can be found in s3://legit-health-plus/test-images/ErythemaSurfaceQuantification/1.jpg

Performance: Specified in R-TF-028-005 AI Development Report: Erythema Surface Quantification

Configuration File: erythema_surface_config.json

Hair Loss Surface Quantification​

Purpose: 3-class segmentation (Hair, No Hair, Non-Scalp) for alopecia assessment and SALT scoring.

Expected output JSON Structure:

{
"image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"mask": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"probability_map": [
"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ..."
],
"percentages": [70.08219203995158, 25.789289497578693, 4.128518462469734],
"alopecia_percentages": 13.799535273382546
}

The original image to generate these outputs can be found in s3://legit-health-plus/test-images/HairLossSurfaceQuantification/1.jpg

Calculation: Hair Loss % = (No Hair pixels) / (Hair + No Hair pixels) × 100

Performance: Specified in R-TF-028-005 AI Development Report: Hair Loss Surface Quantification

Configuration File: hair_loss_surface_config.json

Nail Lesion Surface Quantification​

Purpose: Multi-class segmentation (Healthy Nail, Lesion, Background) for the assessment of nail lesion extent.

Output JSON Structure:

{
"image": "base64_png",
"probability": "base64_png",
"background": "base64_png",
"healthy nail": "base64_png",
"nail lesion": "base64_png"
}
Performance Summary​
MetricResultSuccess Criterion
IoU (overall nail segmentation)0.8900 (95% CI: [0.8712-0.9061])≥ 0.80
IoU (nail lesion segmentation)0.8195 (95% CI: [0.7934-0.8418])≥ 0.70
Configuration File​

Configuration File: nail_lesion_surface_config.json

{
"architecture": "unet",
"backbone": "resnet101",
"classes": ["background", "healthy nail", "nail lesion"],
"img_size": 480,
"img_stats": {
"mean": [0.485, 0.456, 0.406],
"std": [0.229, 0.224, 0.225]
},
"threshold": 0.5
}
Expected Results​

s3://legit-health-plus/test-images/nail_lesion_segmenter/a.jpg

{
"image": "b'/9j/4AAQSkZJRgABAQ...",
"probability": "b'/9j/4AAQSkZJRgABAQAAAQABAAD/...",
"background": "b'/9j/4AAQSkZJRgABAQAAAQABAAD/...",
"healthy nail": "b'/9j/4AAQSkZJRgABAQAAAQABAAD/...",
"nail lesion": "b'/9j/4AAQSkZJRgABAQAAAQABAAD/..."
}

Hypopigmentation/Depigmentation Surface Quantification​

Purpose: Binary segmentation for vitiligo and pigmentary loss quantification (VASI scoring).

Expected output JSON:

{
"image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"mask": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"probability_map": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"percentage": 18.5432266198044
}

The original image to generate these outputs can be found in s3://legit-health-plus/test-images/HypopigmentationSurfaceQuantification/1.jpg

Performance: Specified in R-TF-028-005 AI Development Report: Hypopigmentation/Depigmentation Surface Quantification

Configuration File: hypopigmentation_surface_config.json

Hyperpigmentation Surface Quantification​

Purpose: Binary segmentation for melasma and PIH quantification (MASI scoring).

Expected output JSON:

{
"image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"mask": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"probability_map": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"percentage": 34.57489013671875
}

The original image to generate these outputs can be found in s3://legit-health-plus/test-images/HyperpigmentationSurfaceQuantification/1.jpg

Performance: Specified in R-TF-028-005 AI Development Report: Hyperpigmentation Surface Quantification

Configuration File: hyperpigmentation_surface_config.json

Pattern Identification Models​

Model Classification: 🔬 Clinical Models

These models classify disease patterns and severity stages.

Follicular and Inflammatory Pattern Identification​

Purpose: Multi-class classification for HS phenotype identification (Martorell classification).

Input Specifications​
ParameterSpecification
TypeSingle clinical image of follicular/inflammatory lesions
FormatRGB, uint8 (JPEG, PNG)
Output Specifications​

Phenotype Classes:

The model predicts the probability for the following phenotypes

PhenotypeDescription
FollicularLesions from hair follicles, comedones, sinus tracts
InflammatorySudden-onset abscesses without prominent follicular lesions

Output classes:

The output probabilites of the model are thresholded and aggregated to produce one of the following output classes:

PhenotypeDescription
NothingFollicular = False, Inflammatory = False
FollicularFollicular = True, Inflammatory = False
InflammatoryFollicular = False, Inflammatory = True
MixedFollicular = True, Inflammatory = True

Output JSON Structure:

{
"hs_phenotype": {
"predicted_phenotype": "Inflammatory",
"probability_distribution": {
"follicular": 0.15,
"inflammatory": 0.72
}
}
}
Performance Summary​
MetricResultSuccess Criterion
BACC0.6837 (95% CI: [0.6287-0.7398])≥ 0.65
Average F1 score0.6976 (95% CI: [0.6457-0.7526])≥ 0.65
Configuration File​

Configuration File: follicular_inflammatory_pattern_config.json

{
"architecture": "convnextv2_base.fcmae_ft_in1k",
"hidden_features": 512,
"classes": ["Nothing", "Follicular", "Inflammatory", "Mixed"],
"img_size": 480,
"img_stats": {
"mean": [0.485, 0.456, 0.406],
"std": [0.229, 0.224, 0.225]
},
"threshold": 0.5
}
Expected Results​

s3://legit-health-plus/test-images/follicular_inflammatory_pattern_classifier/a.jpg

{
"hs_phenotype": {
"predicted_phenotype": "Mixed",
"probability": {
"Follicular": 0.9934564232826233,
"Inflammatory": 0.9881375432014465
}
}
}

Inflammatory Pattern Identification (Hurley Staging)​

Purpose: Multi-task classification model that simultaneously outputs Hurley stage classification and inflammatory activity assessment for inflammatory nodular lesions.

Output Specifications​

This multi-task model provides two simultaneous classifications:

  1. Hurley Stage Classification: Four-class categorization (Clear, Stage I, Stage II, Stage III)
  2. Inflammatory Activity Classification: Binary categorization (Inflammatory, No Inflammatory)

Hurley Stage Definitions:

StageDescription
ClearNo visible inflammatory lesions
Stage ISingle or multiple isolated abscesses without sinus tracts or scarring
Stage IIRecurrent abscesses with sinus tract formation and scarring
Stage IIIDiffuse or broad involvement with multiple interconnected sinus tracts and abscesses across entire anatomical area

Inflammatory Activity Definitions:

StatusDescription
No InflammatoryInactive disease with post-inflammatory changes (scars, fibrotic tracts, comedones without erythema, healed lesions)
InflammatoryActive disease with erythematous nodules, abscesses, draining sinus tracts, acute flares, signs of acute inflammation

Output JSON Structure:

{
"hurley_staging": "Stage II",
"hurley_staging_prob": 0.59,
"inflammatory_activity": "No inflammatory",
"inflammatory_activity_prob": 0.93
}

Performance:

  • Hurley Stage: Accuracy ≥ 40%; Mean Absolute Error (MAE) ≤ 1
  • Inflammatory Activity: Accuracy ≥ 70%; AUC (ROC) ≥ 0.70

Configuration File: inflammatory_nodular_lesion_pattern_config.json

Model's expected results:

s3://legit-health-plus/test-images/InflammatoryNodularLesionPatternIdentification/1.jpg

{'hurley_staging': 'Stage III',
'hurley_staging_prob': 0.87,
'inflammatory_activity': 'No inflammatory',
'inflammatory_activity_prob': 0.95}

s3://legit-health-plus/test-images/InflammatoryNodularLesionPatternIdentification/2.jpg

{'hurley_staging': 'Stage III',
'hurley_staging_prob': 0.62,
'inflammatory_activity': 'No inflammatory',
'inflammatory_activity_prob': 0.9}

s3://legit-health-plus/test-images/InflammatoryNodularLesionPatternIdentification/3.jpg

{'hurley_staging': 'Stage I',
'hurley_staging_prob': 0.59,
'inflammatory_activity': 'No inflammatory',
'inflammatory_activity_prob': 0.98}

s3://legit-health-plus/test-images/InflammatoryNodularLesionPatternIdentification/4.jpg

{'hurley_staging': 'Stage II',
'hurley_staging_prob': 0.55,
'inflammatory_activity': 'No inflammatory',
'inflammatory_activity_prob': 0.6}

Hair Follicle Quantification​

Purpose: Single-class detection of hair follicle for assessment of hair loss.

Output JSON Structure:

{
"hair_follicle_detection": {
"detections": [
{ "class": "follicle", "confidence": 0.89, "box": [50, 60, 70, 80] },
{ "class": "follicle", "confidence": 0.92, "box": [100, 120, 125, 145] },
{ "class": "follicle", "confidence": 0.78, "box": [180, 90, 195, 105] }
],
"counts": 1
}
}

IoU threshold for NMS: 0.3

Confidence threshold: 0.15

Performance Summary​
MetricResultSuccess Criterion
mAP@500.8162 (95% CI: [0.7503 - 0.8686])≥ 0.72
Configuration File​

Configuration File: hair_follicle_detection_config.json

Expected Results​

s3://legit-health-plus/test-images/hair_follicle_detector/a.jpg

{
"hair_follicle_detection": {
"detections": [
{
"class": "follicle",
"confidence": 0.506977,
"box": [507, 371, 603, 480]
},
{
"class": "follicle",
"confidence": 0.246984,
"box": [291, 288, 380, 411]
},
{
"class": "follicle",
"confidence": 0.160094,
"box": [0, 6, 45, 159]
}
],
"counts": 3
}
}

Non-Clinical Models: Detailed Specifications​

Domain Validation​

Model Classification: 🛠️ Non-Clinical Model

Purpose: Validates image domain (non-dermatology, skin (clinical), skin (dermoscopic)) for proper routing.

Input Specifications​

ParameterSpecification
TypeAny image
FormatRGB, uint8 (JPEG, PNG)

Output Specifications​

Output JSON Structure:

{
"domain_validation": {
"predicted_domain": "skin_clinical",
"probability_distribution": {
"non_dermatology": 0.02,
"clinical": 0.92,
"dermoscopic": 0.06
}
}
}
Performance Summary​
MetricValueCriterion
Non-dermatology precision0.9855 (95% CI: [0.9828-0.9882])≥ 0.95
Non-dermatology recall0.9978 (95% CI: [0.9967-0.9988])≥ 0.90
Clinical f1-score0.9975 (95% CI: [0.9973-0.9978])≥ 0.90
Dermoscopic f1-score0.9950 (95% CI: [0.9942-0.9957])≥ 0.90
Accuracy0.9965 (95% CI: [0.9961-0.9969])≥ 95%
Macro avg f1-score0.9947 (95% CI: [0.9940-0.9953])≥ 0.90
Weighted avg f1-score0.9965 (95% CI: [0.9961-0.9969])≥ 0.90
Configuration File​

Configuration File: domain_validation_config.json

{
"architecture": "efficientnet_b0.ra_in1k",
"classes": ["non-dermatology", "clinical", "dermoscopic"],
"img_size": 224,
"img_stats": {
"mean": [0.485, 0.456, 0.406],
"std": [0.229, 0.224, 0.225]
}
}
Expected Results​

s3://legit-health-plus/test-images/image-domain/perro.jpeg

{
"domain_validation": {
"predicted_domain": "non-dermatology",
"probability_distribution": {
"non-dermatology": 1.0,
"clinical": 2.495789094747707e-21,
"dermoscopic": 1.781282008838602e-19
}
}
}

Dermatology Image Quality Assessment (DIQA)​

Model Classification: 🛠️ Non-Clinical Model

Purpose: Assesses visual quality for clinical acceptability.

Output Specifications​

The model outputs a logit (a scalar) that is rescaled to the [1, 10] range.

Output JSON Structure:

{
"image_quality": {
"overall_score": 7.5
}
}
Performance Summary​
MetricResultSuccess Criterion
Pearson correlation0.8959 (95% CI: [0.8910-0.9002])≥ 0.70
Spearman correlation0.9030 (95% CI: [0.8982-0.9071])≥ 0.70
Configuration File​

Configuration File: diqa_config.json

{
"architecture": "efficientnet_b5.sw_in12k",
"embeddings_size": "768",
"num_ratings": 10,
"img_size": 416,
"img_stats": {
"mean": [0.485, 0.456, 0.406],
"std": [0.229, 0.224, 0.225]
},
"score_scaler": { "mean": 5.782282610281528, "std": 1.773072826496509 }
}
Expected Results​

s3://legit-health-plus/test-images/image-quality/Gemini_Generated_Image_j8s00nj8s00nj8s0.jpeg

{
"image_quality": {
"overall_score": 2.7366
}
}

Skin Surface Segmentation​

Model Classification: 🛠️ Non-Clinical Model

Purpose: Binary segmentation to isolate skin regions from background.

Output Specifications​

Output JSON Structure:

{
"image": "iVBORw0KGgoAAAANSUhEUgAABRAAAALYCAIAAACL4kmEAAEAAE",
"mask": "iVBORw0KGgoAAAANSUhEUgAABRAAAALYCAAAAAAh64EPAAAKmk",
"probability_mask": "iVBORw0KGgoAAAANSUhEUgAABRAAAALYCAAAAAAh64EPAAAhxk",
"skin_percentage": 0.83
}

Performance: Mean IoU ≥ 0.83; F1-score ≥ 0.84

Configuration File: skin_segmentation_config.json

Output JSON Structure:

s3://legit-health-plus/test-images/SkinSurfaceSegmentation/1.jpg

{'image': 'iVBORw0KGgoAAAANSUhEUgAABRAAAALYCAIAAACL4kmEAAEAAE',
'mask': 'iVBORw0KGgoAAAANSUhEUgAABRAAAALYCAAAAAAh64EPAAAKmk',
'probability_mask': 'iVBORw0KGgoAAAANSUhEUgAABRAAAALYCAAAAAAh64EPAAAhxk',
'skin_percentage': 0.83}

Body Surface Segmentation​

Model Classification: 🛠️ Non-Clinical Model

Purpose: Segments body surface for BSA calculations in severity scoring (PASI, EASI).

Output Specifications​

Output JSON Structure:

{
"image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"mask": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"probability_map": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"percentage": 53.62202037464488
}

Performance: Specified in R-TF-028-005 AI Development Report: Body Surface Segmentation

Head Detection​

Purpose: Object detection for automated head localization to support hair loss quantification and image standardization workflows.

Input Specifications​

ParameterSpecification
TypeSingle clinical image
FormatRGB, uint8 (JPEG, PNG)
SizeVariable; resized to 480×480 pixels for inference

Output Specifications​

Model Classification: 🛠️ Non-Clinical Model

Output JSON Structure:

{
"detections": [
{
"box": [x_min, y_min, x_max, y_max],
"confidence": 0.95
}
],
"head_count": 1
}

Bounding Box Format: [x_min, y_min, x_max, y_max] in pixel coordinates

Post-processing:

  • Confidence threshold: 0.25
  • Non-maximum suppression (NMS) with IoU threshold: 0.7

Performance: mAP@50 ≥ 0.86

Configuration File: head_detection_config.json

Output JSON Structure:

s3://legit-health-plus/test-images/HeadDetection/1.jpg

{'detections': [{'confidence': 0.91, 'box': [51, 28, 183, 200]},
{'confidence': 0.87, 'box': [776, 85, 902, 258]},
{'confidence': 0.86, 'box': [495, 129, 611, 288]},
{'confidence': 0.78, 'box': [978, 154, 1112, 337]},
{'confidence': 0.71, 'box': [638, 43, 751, 208]},
{'confidence': 0.67, 'box': [128, 213, 273, 380]},
{'confidence': 0.46, 'box': [273, 176, 395, 345]}],
'count': 7}

Technical Integration Details​

API Orchestration Logic​

The backend service must orchestrate model calls as follows:

1. RECEIVE image via API endpoint

2. PREPROCESSING PIPELINE
├── Domain Validation → Route or reject
├── Image Quality Assessment → Accept or request retake
└── Skin Surface Segmentation → Extract ROI

3. CLINICAL ANALYSIS (parallel execution where possible)
├── ICD Category Distribution
│ └── Binary Indicator Derivation (post-processing)
├── Visual Sign Intensity Models (as applicable)
├── Lesion Detection Models (as applicable)
└── Pattern Identification Models (as applicable)

4. AGGREGATE results into structured JSON response

5. RETURN complete response (API is stateless)

Model Execution Order​

PriorityModel(s)Dependency
1Domain ValidationNone
2Image Quality AssessmentDomain = skin
3Skin Surface SegmentationQuality ≥ 6
4ICD Category DistributionSkin ROI available
5Binary IndicatorsICD distribution complete
6All other clinical modelsParallel execution

Error Handling​

ConditionAction
Domain = non_skinReturn error: "Invalid image domain"
Quality < 4Return warning with retake guidance
Skin ROI < 10%Return error: "Insufficient skin visible"
Model inference failureReturn partial results with error flag

Integration Verification Package​

To ensure that AI models produce identical outputs when integrated into the target software environment as they did during development and validation, this release includes an Integration Verification Package for each model, as required by GP-028.

Purpose​

The Integration Verification Package serves to:

  • Verify Integration Correctness: Confirm that models are correctly integrated without alterations to their inference behavior.
  • Detect Environment Discrepancies: Identify any differences in preprocessing, numerical precision, or runtime configuration that could affect model outputs.
  • Ensure Reproducibility: Provide objective evidence that the integrated model produces the same outputs as the validated development model.
  • Support Regulatory Compliance: Demonstrate traceability between development validation and deployed system verification per IEC 62304 and MDR requirements.

Package Contents​

For each AI model in this release, the Integration Verification Package includes:

Reference Test Images​

A curated subset of images from the model's test set, stored in a secure, version-controlled location:

Model CategoryStorage Location
ICD Category Distributions3://legit-health-plus/integration-verification/icd-distribution/v1.1.0/images/
Binary IndicatorsUses ICD Category Distribution images
Visual Sign Intensity Modelss3://legit-health-plus/integration-verification/intensity-models/v1.1.0/images/
Wound Characteristic Assessments3://legit-health-plus/integration-verification/wound-assessment/v1.1.0/images/
Lesion Quantification Modelss3://legit-health-plus/integration-verification/lesion-detection/v1.1.0/images/
Surface Segmentation Modelss3://legit-health-plus/integration-verification/segmentation/v1.1.0/images/
Pattern Identification Modelss3://legit-health-plus/integration-verification/pattern-models/v1.1.0/images/
Domain Validations3://legit-health-plus/integration-verification/domain-validation/v1.1.0/images/
DIQAs3://legit-health-plus/integration-verification/diqa/v1.1.0/images/
Skin Surface Segmentations3://legit-health-plus/integration-verification/skin-segmentation/v1.1.0/images/
Body Surface Segmentations3://legit-health-plus/integration-verification/body-segmentation/v1.1.0/images/

Images are representative of the model's input domain (diverse conditions, demographics, imaging modalities) and stored in their original format without additional processing.

Expected Outputs File​

A CSV file containing the expected model outputs for each reference image:

  • Storage location: s3://legit-health-plus/integration-verification/{MODEL_NAME}/v1.1.0/expected_outputs.csv
  • File schema:
ColumnDescription
image_idUnique identifier matching the image filename
expected_outputThe model's expected output (format varies by model type)
output_typeClassification probability, regression value, segmentation mask hash, etc.
confidenceModel confidence score (where applicable)

Example for ICD Category Distribution:

image_id,expected_output,output_type,confidence
IMG_001.jpg,"[0.72, 0.12, 0.08, 0.04, 0.02, ...]",probability_distribution,0.72
IMG_002.jpg,"[0.65, 0.18, 0.09, 0.05, 0.02, ...]",probability_distribution,0.65

Example for Visual Sign Intensity:

image_id,expected_output,output_type,confidence
IMG_001.jpg,4.52,continuous_score,0.87
IMG_002.jpg,3.85,continuous_score,0.91

Example for Segmentation Models:

image_id,expected_output,output_type,mask_hash
IMG_001.jpg,15.7,percentage_affected,sha256:abc123...
IMG_002.jpg,22.3,percentage_affected,sha256:def456...

Verification Manifest​

A JSON manifest file containing metadata for the verification package:

  • Storage location: s3://legit-health-plus/integration-verification/{MODEL_NAME}/v1.1.0/manifest.json

Example manifest:

{
"model_name": "icd_distribution",
"model_version": "1.1.0.0",
"package_version": "1.0.0",
"created_timestamp": "2025-11-15T10:30:00Z",
"created_by": "AI Team",
"test_image_count": 50,
"acceptance_criteria": {
"metric": "probability_match",
"tolerance": 1e-5,
"pass_rate_required": 1.0
},
"preprocessing": {
"resize": [384, 384],
"normalization_mean": [0.485, 0.456, 0.406],
"normalization_std": [0.229, 0.224, 0.225]
},
"runtime_config": {
"pytorch_version": ">=1.12.0",
"tta_enabled": true,
"temperature_scaling": 1.05
},
"model_weights_hash": "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
}

Acceptance Criteria​

The following acceptance criteria apply to integration verification:

Model TypeMetricAcceptance Criterion
Classification (ICD, Domain, Patterns)Output probability matchDifference ≤ 1e-5 per element
Binary IndicatorsDerived indicator matchDifference ≤ 1e-5 per indicator
Intensity QuantificationContinuous score matchDifference ≤ 1e-4
Object DetectionBounding box IoUIoU ≥ 0.9999
Object DetectionDetection countExact match
SegmentationPixel-wise mask comparisonIoU ≥ 0.9999
SegmentationPercentage affectedDifference ≤ 0.01%
DIQAQuality score matchDifference ≤ 1e-4

Overall Pass Rate: 100% of test images must meet the acceptance criteria for the integration to be considered successful.

Verification Procedure​

The Software Development team shall execute the following procedure after model integration:

Step 1: Environment Preparation​

  1. Configure the integration environment with the same dependencies and versions specified in this Release Report
  2. Download the Integration Verification Package from the designated S3 location
  3. Verify package integrity using manifest checksums:
    sha256sum -c checksums.txt

Step 2: Inference Execution​

  1. Process all reference test images through the integrated model
  2. Apply the same preprocessing as specified in the manifest
  3. Record outputs in the same format as the expected outputs file
  4. Document the runtime environment configuration

Step 3: Output Comparison​

  1. Compare actual outputs against expected outputs using the specified acceptance criteria
  2. Calculate the match rate for each metric type
  3. Identify and document any discrepancies

Example verification script structure:

import pandas as pd
import numpy as np

def verify_integration(expected_csv, actual_csv, tolerance=1e-5):
expected = pd.read_csv(expected_csv)
actual = pd.read_csv(actual_csv)

results = []
for idx, row in expected.iterrows():
expected_output = np.array(eval(row['expected_output']))
actual_output = np.array(eval(actual.loc[idx, 'expected_output']))

diff = np.max(np.abs(expected_output - actual_output))
passed = diff <= tolerance

results.append({
'image_id': row['image_id'],
'max_difference': diff,
'passed': passed
})

return pd.DataFrame(results)

Step 4: Results Documentation​

Generate an Integration Verification Report documenting:

  • Test execution date and environment details
  • Pass/fail status for each test image
  • Overall pass rate and compliance with acceptance criteria
  • Any deviations and their root cause analysis

This report becomes part of the software verification evidence per IEC 62304.

Failure Handling​

If integration verification fails:

  1. Root Cause Analysis: Investigate the source of discrepancy:

    • Preprocessing differences (resize algorithm, interpolation method)
    • Numerical precision (float32 vs float64)
    • Library version differences (ONNX runtime, numpy)
    • Post-processing implementation differences
  2. Corrective Action: Implement necessary corrections to achieve output equivalence

  3. Re-verification: Repeat the verification procedure after corrections

  4. Escalation: If equivalence cannot be achieved, escalate to the AI Team for joint investigation

  5. Documentation: Document all failures, investigations, and resolutions in the Integration Verification Report

Release Verification​

Model Integrity Verification​

All released models include SHA-256 checksums for integrity verification:

{
"models": {
"icd_distribution_v1.1.0.pt": "sha256:abc123...",
"erythema_intensity_v1.1.0.pt": "sha256:def456...",
...
}
}

Validation Status​

All models in this release have been validated according to R-TF-028-005 AI Development Report and meet or exceed their predefined performance criteria with 95% confidence intervals.

Known Limitations​

  1. ICD Category Distribution: Performance degrades for Fitzpatrick V-VI (meets threshold but with wider CI)
  2. Dermoscopic images: Some models optimized for clinical images only

Release Checklist​

This checklist confirms that all release deliverables have been prepared and verified by the AI Team in accordance with GP-028 procedure:

  • All models saved in PyTorch native format (.pt/.pth/.ckpt)
  • Configuration files created for all 59 models
  • Model checksums (SHA-256) generated and documented
  • Preprocessing specifications documented per model
  • Post-processing requirements documented (TTA, temperature scaling, NMS)
  • Integration Verification Package prepared for all models
  • Reference test images curated and uploaded to S3
  • Expected outputs CSV files generated for all models
  • Verification manifest files created with acceptance criteria
  • Error handling guidance documented
  • API orchestration logic specified
  • Known limitations documented
  • Technical support channels established
  • Release verified using R-TF-028-010 AI V&V Checks

Note: Integration activities to be performed by the Software Development team are specified in GP-028 procedure, Section "Integration Verification Package"

Technical Support​

The AI Team provides ongoing support to the Software Development team throughout the integration process, as specified in GP-028.

Support Channels​

Support TypeDescriptionResponse Time
Integration QueriesQuestions about preprocessing, post-processing, or model configuration24 business hours
Verification FailuresAssistance investigating integration verification discrepancies8 business hours
Bug ReportsModel behavior issues identified during integration4 business hours
Urgent IssuesCritical blockers preventing releaseImmediate escalation

Contact Information​

  • Primary Contact: AI Team Lead
  • Communication Channel: Dedicated Slack channel #ai-integration-support
  • Issue Tracking: JIRA project AI-INT

Support Scope​

The AI Team provides support for:

  1. Technical Clarifications: Explaining preprocessing requirements, output formats, and configuration parameters
  2. Verification Assistance: Helping investigate and resolve integration verification failures
  3. Configuration Optimization: Advising on optimal runtime configurations for specific deployment environments
  4. Documentation Updates: Addressing gaps or ambiguities in release documentation

Escalation Path​

Level 1: AI Team Engineer (routine queries)
↓
Level 2: AI Team Lead (complex issues, verification failures)
↓
Level 3: Head of AI Development (critical blockers, release decisions)

Signature meaning

The signatures for the approval process of this document can be found in the verified commits at the repository for the QMS. As a reference, the team members who are expected to participate in this document and their roles in the approval process, as defined in Annex I Responsibility Matrix of the GP-001, are:

  • Author: JD-009
  • Reviewer: JD-009
  • Approver: JD-005
Previous
R-TF-028-005 AI Development Report
Next
R-TF-028-009 AI Design Checks
  • Purpose
  • Scope
  • Related Documents
  • Package Details
    • Overview
    • Model File Format
    • Configuration Files
  • Clinical Models: Detailed Specifications
    • ICD Category Distribution and Binary Indicators
      • ICD Category Distribution Algorithm
        • Purpose
        • Input Specifications
        • Output Specifications
        • Preprocessing Requirements
        • Post-processing Requirements
        • Configuration File
        • Performance Summary
        • Expected Results
      • Binary Indicators Algorithm
        • Purpose
        • Input Specifications
        • Output Specifications
        • Calculation Method
        • Configuration File
        • Performance Summary
        • Expected Results
    • Visual Sign Intensity Quantification Models
      • Common Specifications
        • Input Specifications (All Intensity Models)
        • Output Specifications (All Intensity Models)
        • Preprocessing (All Intensity Models)
        • Post-processing (All Intensity Models)
        • Architecture
      • Erythema Intensity Quantification
      • Desquamation Intensity Quantification
      • Induration Intensity Quantification
      • Pustule Intensity Quantification
      • Crusting Intensity Quantification
      • Xerosis Intensity Quantification
      • Swelling Intensity Quantification
      • Oozing Intensity Quantification
      • Excoriation Intensity Quantification
      • Lichenification Intensity Quantification
    • Wound Characteristic Assessment Models
      • Input Specifications
      • Output Specifications
    • Lesion Quantification Models (Object Detection)
      • Common Object Detection Specifications
        • Input Specifications
        • Output Structure
        • Post-processing
      • Inflammatory Nodular Lesion Quantification
      • Acneiform Lesion Type Quantification
      • Acneiform Inflammatory Lesion Quantification
      • Hive Lesion Quantification
    • Surface Area Quantification Models (Segmentation)
      • Common Segmentation Specifications
        • Input Specifications
        • Output Structure
        • Post-processing
      • Wound Surface Quantification
      • Erythema Surface Quantification
      • Hair Loss Surface Quantification
      • Nail Lesion Surface Quantification
        • Performance Summary
        • Configuration File
        • Expected Results
      • Hypopigmentation/Depigmentation Surface Quantification
      • Hyperpigmentation Surface Quantification
    • Pattern Identification Models
      • Follicular and Inflammatory Pattern Identification
        • Input Specifications
        • Output Specifications
        • Performance Summary
        • Configuration File
        • Expected Results
      • Inflammatory Pattern Identification (Hurley Staging)
        • Output Specifications
    • Hair Follicle Quantification
      • Performance Summary
      • Configuration File
      • Expected Results
  • Non-Clinical Models: Detailed Specifications
    • Domain Validation
      • Input Specifications
      • Output Specifications
        • Performance Summary
        • Configuration File
        • Expected Results
    • Dermatology Image Quality Assessment (DIQA)
      • Output Specifications
        • Performance Summary
        • Configuration File
        • Expected Results
    • Skin Surface Segmentation
      • Output Specifications
    • Body Surface Segmentation
      • Output Specifications
    • Head Detection
      • Input Specifications
      • Output Specifications
  • Technical Integration Details
    • API Orchestration Logic
    • Model Execution Order
    • Error Handling
  • Integration Verification Package
    • Purpose
    • Package Contents
      • Reference Test Images
      • Expected Outputs File
      • Verification Manifest
    • Acceptance Criteria
    • Verification Procedure
      • Step 1: Environment Preparation
      • Step 2: Inference Execution
      • Step 3: Output Comparison
      • Step 4: Results Documentation
    • Failure Handling
  • Release Verification
    • Model Integrity Verification
    • Validation Status
    • Known Limitations
  • Release Checklist
  • Technical Support
    • Support Channels
    • Contact Information
    • Support Scope
    • Escalation Path
All the information contained in this QMS is confidential. The recipient agrees not to transmit or reproduce the information, neither by himself nor by third parties, through whichever means, without obtaining the prior written permission of Legit.Health (AI Labs Group S.L.)