R-TF-028-006 AI Release Report
Table of contents
- Purpose
- Scope
- Related Documents
- Package Details
- Clinical Models: Detailed Specifications
- ICD Category Distribution and Binary Indicators
- 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
- Lesion Quantification Models (Object Detection)
- Surface Area Quantification Models (Segmentation)
- Pattern Identification Models
- Hair Follicle Quantification
- Non-Clinical Models: Detailed Specifications
- Technical Integration Details
- Integration Verification Package
- Release Verification
- Release Checklist
- Technical Support
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 ID | Title | Relationship |
|---|---|---|
| GP-028 | AI Development | Governing procedure for AI development and release activities |
| R-TF-028-001 | AI Description | Model specifications, performance requirements, clinical objectives |
| R-TF-028-002 | AI Development Plan | Development methodology and validation strategy |
| R-TF-028-005 | AI Development Report | Training results, validation outcomes, bias analysis |
| R-TF-028-010 | AI V&V Checks | Verification checklist for release deliverables |
| R-TF-028-011 | AI Risk Assessment | Risk 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 (
.ptformat) with configuration file (.json) - 1 Binary Indicator mapping matrix (
.csv) for post-processing derivation - 10 Visual Sign Intensity Quantification models (
.ptformat) with configurations - 24 Wound Characteristic Assessment models (
.ptformat) with configurations - 5 Lesion Quantification models (object detection,
.ptformat) - 12 Surface Area Quantification models (segmentation,
.ptformat) - 2 Pattern Identification models (classification,
.ptformat)
Non-Clinical Models:
- 1 Domain Validation model (
.ptformat) - 1 Dermatology Image Quality Assessment (DIQA) model (
.ptformat) - 1 Skin Surface Segmentation model (
.ptformat) - 1 Body Surface Segmentation model (
.ptformat) - 1 Head Detection model (
.ptformat)
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
| Parameter | Specification |
|---|---|
| Type | Single dermatological image (clinical or dermoscopic) |
| Format | RGB, uint8; standard image file formats (JPEG, PNG) |
| Resolution | Minimum 224×224 pixels; recommended ≥512×512 pixels |
| Color Space | sRGB |
Output Specifications
| Parameter | Specification |
|---|---|
| Type | Probability distribution vector |
| Dimension | 346 values (one per validated ICD-11 category) |
| Data Type | float32 |
| 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:
- Resize: Scale the image to
384×384pixels using bilinear interpolation - Normalize: Apply image normalization using the training set mean pixel value and standard deviation.
- Data Type Conversion: Convert to
float32 - Tensor Format: CHW (Channels, Height, Width) ordering
Post-processing Requirements
To achieve the validated performance, Test-Time Augmentation (TTA) must be applied:
- Create augmented versions of the preprocessed input image:
- Horizontal flip
- Vertical flip
- 90°, 180°, 270° rotation
- Histogram equalization (CLAHE)
- Run inference on the original image and all augmented versions (5 total inferences)
- Average the probability vectors element-wise to produce the final distribution
- Apply temperature scaling (calibration parameter provided in config) for probability calibration
- Extract top-5 predictions by sorting probabilities in descending order
- 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
| Metric | Result | Success Criterion |
|---|---|---|
| Top-1 Accuracy | 0.658 (95% CI: 0.654-0.663) | ≥ 0.50 |
| Top-3 Accuracy | 0.821 (95% CI: 0.817-0.825) | ≥ 0.60 |
| Top-5 Accuracy | 0.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
| Parameter | Specification |
|---|---|
| Type | ICD probability distribution vector |
| Dimension | 346 values (from ICD Category Distribution output) |
| Additional Input | Binary indicator mapping matrix (from CSV) |
Output Specifications
Six Binary Indicators:
| Indicator | Description | Clinical Significance |
|---|---|---|
| Malignant | Probability of confirmed malignancy | Melanoma, SCC, BCC detection |
| Pre-malignant | Probability of conditions with malignant potential | Actinic keratosis, Bowen's disease |
| Associated with Malignancy | Benign conditions mimicking malignancy | Atypical nevi, seborrheic keratoses |
| Pigmented Lesion | Probability of pigmented subgroup | Melanoma risk assessment |
| Urgent Referral | Requires evaluation within 48 hours | Suspected melanoma, ulcerated lesions |
| High-Priority Referral | Requires evaluation within 2 weeks | Suspected 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 , the integration code must perform:
Where:
- is the ICD-11 probability for category
- is the binary mapping matrix coefficient (0 or 1) indicating whether category contributes to indicator
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
| Indicator | AUC | 95% CI | Success Criterion |
|---|---|---|---|
| Malignant | 0.918 | 0.914-0.922 | ≥ 0.80 |
| Pre-malignant | 0.878 | 0.872-0.884 | ≥ 0.80 |
| Associated with Malignancy | 0.863 | 0.855-0.870 | ≥ 0.80 |
| Pigmented Lesion | 0.959 | 0.957-0.962 | ≥ 0.80 |
| Urgent Referral | 0.900 | 0.889-0.911 | ≥ 0.80 |
| High-Priority Referral | 0.888 | 0.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)
| Parameter | Specification |
|---|---|
| Type | Single dermatological image |
| Format | RGB, uint8 (JPEG, PNG) |
| Resolution | Resized to 272×272 pixels |
| Color Space | sRGB |
Output Specifications (All Intensity Models)
| Parameter | Specification |
|---|---|
| Probability Distribution | 10 values (classes 0-9), sum = 1.0 |
| Continuous Score | Weighted expected value: |
| Data Type | float32 |
| Value Range | [0.0, 9.0] |
Preprocessing (All Intensity Models)
- Resize: Scale to
272×272pixels using bilinear interpolation - Normalize: Apply ImageNet normalization:
- Mean:
[0.485, 0.456, 0.406] - Std:
[0.229, 0.224, 0.225]
- Mean:
- Data Type: Convert to
float32 - Tensor Format: CHW ordering
Post-processing (All Intensity Models)
- Apply softmax activation to obtain probability distribution
- Calculate continuous score:
- 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/integration-verification/erythema-classifier/case-001/image.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/integration-verification/desquamation-classifier/case-001/
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/integration-verification/induration-classifier/case-001/image.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/integration-verification/pustule-classifier/case-001/image.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/integration-verification/crusting-classifier/case-001/image.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/integration-verification/xerosis-classifier/case-001/image.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/integration-verification/swelling-classifier/case-001/image.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/integration-verification/oozing-classifier/case-001/image.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/integration-verification/excoriation-classifier/case-001/image.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/integration-verification/lichenification-classifier/case-001/image.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
| Parameter | Specification |
|---|---|
| Type | Single wound image |
| Format | RGB, uint8 (JPEG, PNG) |
| Resolution | Variable; resized to model input dimensions |
| Requirements | Clear 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/integration-verification/wound-stage-classifier/case-001/image.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/integration-verification/awosi-classifier/case-001/image.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
| Parameter | Specification |
|---|---|
| Type | Single clinical image |
| Format | RGB, uint8 (JPEG, PNG) |
| Resolution | Variable; minimum 640×640 recommended |
Output Structure
{
"detections": [
{
"class": "lesion_type",
"confidence": 0.95,
"box": [120, 85, 180, 145]
}
],
"counts": {
"lesion_type": 5
}
}
Post-processing
- Apply Non-Maximum Suppression (NMS)
- Filter detections by confidence threshold
- 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:
| Class | Description | IHS4 Weight |
|---|---|---|
| Nodule | Solid inflammatory nodule | ×1 |
| Abscess | Pus-filled inflammatory lesion | ×2 |
| Non-draining Tunnel | Sinus tract without active drainage | N/A |
| Draining Tunnel | Sinus 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/integration-verification/inflammatory-nodular-lesion-detector/case-001/image.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/integration-verification/inflammatory-nodular-lesion-detector/case-002/image.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/integration-verification/inflammatory-nodular-lesion-detector/case-003/image.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/integration-verification/inflammatory-nodular-lesion-detector/case-004/image.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:
| Class | Description |
|---|---|
| Papule | Small solid elevated lesion (<5mm) |
| Pustule | Pus-filled elevated lesion |
| Cyst | Deep, pus-filled lesion |
| Comedone | Open (blackhead) or closed (whitehead) |
| Nodule | Large solid inflammatory lesion (≥5mm) |
| Scab | Crusted healing lesion |
| Spot | Post-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/integration-verification/acneiform-detector/case-001/image.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/integration-verification/acneiform-detector/case-002/image.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/integration-verification/acneiform-detector/case-003/image.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
}
}
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, 4, 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
| Parameter | Specification |
|---|---|
| Type | Single clinical image |
| Format | RGB, uint8 (JPEG, PNG) |
| Resolution | Variable; 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
- Apply sigmoid activation to obtain probability map
- Threshold at 0.5 to generate binary mask
- Calculate percentage:
(affected_pixels / total_roi_pixels) × 100
Wound Surface Quantification
Purpose: 7-class segmentation for comprehensive wound tissue analysis.
Segmentation Classes:
| Class | Description |
|---|---|
| Wound Bed | Total wound area |
| Granulation | Healthy healing tissue |
| Biofilm/Slough | Devitalized tissue |
| Necrosis | Non-viable tissue |
| Maceration | Periwound moisture damage |
| Orthopedic Material | Exposed hardware |
| Bone/Cartilage/Tendon | Exposed 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/integration-verification/wound-***/case-xyz/image.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/integration-verification/erythema-segmenter/case-001/image.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/integration-verification/hair-loss-segmenter/case-001/image.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
| Metric | Result | Success 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/integration-verification/nail-lesion-segmenter/case-001/image.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/integration-verification/hypopigmentation-segmenter/case-001/image.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/integration-verification/hyperpigmentation-segmenter/case-001/image.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
| Parameter | Specification |
|---|---|
| Type | Single clinical image of follicular/inflammatory lesions |
| Format | RGB, uint8 (JPEG, PNG) |
Output Specifications
Phenotype Classes:
The model predicts the probability for the following phenotypes
| Phenotype | Description |
|---|---|
| Follicular | Lesions from hair follicles, comedones, sinus tracts |
| Inflammatory | Sudden-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:
| Phenotype | Description |
|---|---|
| Nothing | Follicular = False, Inflammatory = False |
| Follicular | Follicular = True, Inflammatory = False |
| Inflammatory | Follicular = False, Inflammatory = True |
| Mixed | Follicular = True, Inflammatory = True |
Output JSON Structure:
{
"hs_phenotype": {
"predicted_phenotype": "Inflammatory",
"probability_distribution": {
"follicular": 0.15,
"inflammatory": 0.72
}
}
}
Performance Summary
| Metric | Result | Success Criterion |
|---|---|---|
| BACC | 0.6837 (95% CI: [0.6287-0.7398]) | ≥ 0.65 |
| Average F1 score | 0.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/integration-verification/follicular-inflammatory-pattern-classifier/case-001/image.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:
- Hurley Stage Classification: Four-class categorization (Clear, Stage I, Stage II, Stage III)
- Inflammatory Activity Classification: Binary categorization (Inflammatory, No Inflammatory)
Hurley Stage Definitions:
| Stage | Description |
|---|---|
| Clear | No visible inflammatory lesions |
| Stage I | Single or multiple isolated abscesses without sinus tracts or scarring |
| Stage II | Recurrent abscesses with sinus tract formation and scarring |
| Stage III | Diffuse or broad involvement with multiple interconnected sinus tracts and abscesses across entire anatomical area |
Inflammatory Activity Definitions:
| Status | Description |
|---|---|
| No Inflammatory | Inactive disease with post-inflammatory changes (scars, fibrotic tracts, comedones without erythema, healed lesions) |
| Inflammatory | Active 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/integration-verification/inflammatory-pattern-identificator/case-001/image.jpg
{
"hurley_staging": "Stage III",
"hurley_staging_prob": 0.87,
"inflammatory_activity": "No inflammatory",
"inflammatory_activity_prob": 0.95
}
s3://legit-health-plus/integration-verification/inflammatory-pattern-identificator/case-002/image.jpg
{
"hurley_staging": "Stage III",
"hurley_staging_prob": 0.62,
"inflammatory_activity": "No inflammatory",
"inflammatory_activity_prob": 0.9
}
s3://legit-health-plus/integration-verification/inflammatory-pattern-identificator/case-003/image.jpg
{
"hurley_staging": "Stage I",
"hurley_staging_prob": 0.59,
"inflammatory_activity": "No inflammatory",
"inflammatory_activity_prob": 0.98
}
s3://legit-health-plus/integration-verification/inflammatory-pattern-identificator/case-004/image.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
| Metric | Result | Success Criterion |
|---|---|---|
| mAP@50 | 0.8162 (95% CI: [0.7503 - 0.8686]) | ≥ 0.72 |
Configuration File
Configuration File: hair_follicle_detection_config.json
Expected Results
s3://legit-health-plus/integration-verification/hair-follicle-detector/case-001/image.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
| Parameter | Specification |
|---|---|
| Type | Any image |
| Format | RGB, 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
| Metric | Value | Criterion |
|---|---|---|
| Non-dermatology precision | 0.9855 (95% CI: [0.9828-0.9882]) | ≥ 0.95 |
| Non-dermatology recall | 0.9978 (95% CI: [0.9967-0.9988]) | ≥ 0.90 |
| Clinical f1-score | 0.9975 (95% CI: [0.9973-0.9978]) | ≥ 0.90 |
| Dermoscopic f1-score | 0.9950 (95% CI: [0.9942-0.9957]) | ≥ 0.90 |
| Accuracy | 0.9965 (95% CI: [0.9961-0.9969]) | ≥ 95% |
| Macro avg f1-score | 0.9947 (95% CI: [0.9940-0.9953]) | ≥ 0.90 |
| Weighted avg f1-score | 0.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/integration-verification/domain-validation/case-001/image.jpg
{
"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
| Metric | Result | Success Criterion |
|---|---|---|
| Pearson correlation | 0.8959 (95% CI: [0.8910-0.9002]) | ≥ 0.70 |
| Spearman correlation | 0.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/integration-verification/diqa/case-001/image.jpg
{
"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/integration-verification/skin-segmenter/case-001/image.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
| Parameter | Specification |
|---|---|
| Type | Single clinical image |
| Format | RGB, uint8 (JPEG, PNG) |
| Size | Variable; 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/integration-verification/head-detector/case-001/image.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 orchestrates model calls as follows. The API caller selects which clinical models to execute via the request payload. All requested models execute independently and all outputs are returned together in a single response:
1. RECEIVE image + requested model list via API endpoint
2. NON-CLINICAL MODELS (always executed)
├── Domain Validation → Informational classification (clinical / dermoscopic / non-dermatology)
└── Image Quality Assessment (DIQA) → Informational quality score (0–10)
3. CLINICAL MODELS (selected by API caller, parallel execution)
├── Skin Surface Segmentation (as requested)
├── ICD Category Distribution
│ └── Binary Indicator Derivation (deterministic post-processing)
├── Visual Sign Intensity Models (as requested)
├── Lesion Detection Models (as requested)
├── Surface Quantification Models (as requested)
└── Pattern Identification Models (as requested)
4. AGGREGATE all outputs into structured JSON response
5. RETURN complete response including non-clinical + clinical outputs (API is stateless)
Key architectural principle: Non-clinical models (Domain Validation, DIQA) execute on every request and their outputs are included in the response as informational metadata. They do not gate, block, or condition the execution of clinical models. If the API caller requests clinical analysis, all requested clinical models execute regardless of the Domain Validation classification or DIQA score. The clinical outputs are always returned alongside the non-clinical outputs, allowing the consuming application to decide how to present or act on the combined information.
Model Execution Order
| Priority | Model(s) | Dependency |
|---|---|---|
| 1 | Domain Validation | None (always executed) |
| 1 | Image Quality Assessment | None (always executed) |
| 2 | Skin Surface Segmentation | None (executes if requested by caller) |
| 2 | ICD Category Distribution | None (executes if requested by caller) |
| 2 | All other clinical models | None (execute in parallel if requested by caller) |
| 3 | Binary Indicators | ICD distribution complete (deterministic derivation) |
All models at the same priority level execute in parallel. Non-clinical models (Priority 1) always execute. Clinical models (Priority 2) execute based on the API caller's request. Binary Indicators (Priority 3) are the only true dependency in the pipeline — they are derived deterministically from the ICD Category Distribution output via the documented mapping matrix.
Error Handling
| Condition | Action |
|---|---|
| Domain = non_skin | Domain Validation output included in response as informational metadata; clinical models still execute if requested |
| Quality < 4 | DIQA score included in response as informational metadata; clinical models still execute if requested |
| Skin ROI < 10% | Segmentation output included in response; clinical models still execute if requested |
| Model inference failure | Return partial results with error flag for the failed model |
Note: The error handling strategy reflects the informational nature of non-clinical model outputs. The API always returns all requested outputs. The consuming application is responsible for interpreting the non-clinical outputs (e.g., presenting a retake recommendation to the user when DIQA is low) and deciding how to present the clinical outputs in context.
Multi-Model Consistency
The Legit.Health Plus device integrates 59 AI models that must produce coherent, clinically consistent outputs when executed together on the same input image. This section documents the design principles, architectural safeguards, and verification mechanisms that ensure multi-model consistency across the orchestration pipeline.
Design Principles for Consistency
1. Common Preprocessing and Informational Non-Clinical Outputs:
All models receive inputs that have been processed through a common, deterministic preprocessing pipeline. This ensures that every model operates on a consistent representation of the same input image:
- Domain Validation and DIQA execute on every request and produce informational outputs that are returned alongside clinical model outputs. They do not gate, block, or condition the execution of any clinical model.
- Skin Surface Segmentation executes when requested by the API caller and provides a Region of Interest (ROI) mask that other clinical models can use for skin localization, ensuring that models analyzing the same image operate on consistent anatomical regions.
- Preprocessing operations (resize, normalization, color space conversion) are applied identically per model category, as specified in the Configuration Files section of this document.
2. Deterministic Execution:
All models are offline (static) — they do not learn or adapt during deployment. This guarantees that:
- The same input always produces the same output (given identical preprocessing and runtime configuration).
- Model behavior is fully reproducible and verifiable across environments.
- No feedback loops exist between models that could introduce instability or drift.
3. Independent Execution with Minimal Dependencies:
All clinical models execute independently — there is no inter-model conditioning or gatekeeping. The only true dependency in the pipeline is the deterministic derivation of Binary Indicators from the ICD Category Distribution output:
| Relationship | Description |
|---|---|
| Domain Validation, DIQA | Always execute; outputs are informational metadata included in the response |
| Clinical models | Execute independently in parallel based on the API caller's request — no inter-model dependencies |
| ICD Distribution → Binary Indicators | The only true dependency: Binary Indicators are derived deterministically from the ICD probability distribution via a documented mapping matrix |
4. Independent Clinical Model Outputs:
Critically, the clinical models that execute in parallel (Priority 6 in the Model Execution Order) are architecturally independent — each model produces its output based solely on the input image and its own learned parameters, without receiving or being influenced by the outputs of other clinical models. This design ensures that:
- A prediction error in one model does not propagate to other models.
- Each model can be independently validated, retrained, and updated without affecting the behavior of other models.
- The aggregate clinical output is a composition of independently verified components.
Cross-Model Coherence Verification
Although clinical models are architecturally independent, the aggregate output must be clinically coherent. The following verification mechanisms ensure cross-model consistency:
1. Input Consistency Verification:
The Integration Verification Package (see below) ensures that all models receive correctly preprocessed inputs in the production environment. Any preprocessing discrepancy that could cause inconsistency between models is detected during integration verification.
2. Output Schema Validation:
The API response aggregation step (Step 4 in the orchestration flow) validates that all model outputs conform to their expected schemas before the response is returned:
- Classification outputs must contain valid probability distributions (sum to 1.0 within tolerance).
- Regression outputs must fall within their defined clinical ranges (e.g., 0–9 for intensity scores).
- Segmentation masks must have valid dimensions matching the input image.
- Detection outputs must have valid bounding box coordinates within image boundaries.
3. Clinical Plausibility Checks:
The following post-processing validation rules are applied to detect clinically implausible output combinations:
| Check | Rule | Action on Violation |
|---|---|---|
| ICD–Binary Indicator Alignment | Binary indicators must be derivable from the ICD distribution via the documented mapping matrix | Flag inconsistency in response metadata |
| Segmentation–Detection Coherence | For models that assess the same anatomical region, segmentation mask area and detection count should be directionally consistent | Log warning for post-market monitoring |
4. End-to-End Integration Testing:
The Integration Verification Package provides reference test images with expected outputs for all 59 models. By processing the same image through the complete orchestration pipeline, the Software Development team verifies that:
- All models execute successfully on the same input.
- Outputs are consistent with development-validated expected outputs.
- The aggregated response conforms to the documented API schema.
- No inter-model interference occurs during parallel execution.
Versioning and Consistency Across Updates
When individual models are retrained or updated (per the AI Model Versioning scheme in GP-028):
- The complete Integration Verification Package is regenerated for the updated model.
- End-to-end integration testing is repeated with the full 59-model pipeline to confirm that the updated model does not introduce inconsistencies with other models.
- Cross-model coherence checks are re-executed as part of the
R-TF-028-010 AI V&V Checks.
This multi-model consistency framework ensures that the 59 individually validated AI models collectively produce reliable, coherent, and clinically meaningful outputs when orchestrated within the Legit.Health Plus device.
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 Category | Storage Location |
|---|---|
| ICD Category Distribution | s3://legit-health-plus/integration-verification/icd-distribution/v1.1.0/images/ |
| Binary Indicators | Uses ICD Category Distribution images |
| Visual Sign Intensity Models | s3://legit-health-plus/integration-verification/intensity-models/v1.1.0/images/ |
| Wound Characteristic Assessment | s3://legit-health-plus/integration-verification/wound-assessment/v1.1.0/images/ |
| Lesion Quantification Models | s3://legit-health-plus/integration-verification/lesion-detection/v1.1.0/images/ |
| Surface Segmentation Models | s3://legit-health-plus/integration-verification/segmentation/v1.1.0/images/ |
| Pattern Identification Models | s3://legit-health-plus/integration-verification/pattern-models/v1.1.0/images/ |
| Domain Validation | s3://legit-health-plus/integration-verification/domain-validation/v1.1.0/images/ |
| DIQA | s3://legit-health-plus/integration-verification/diqa/v1.1.0/images/ |
| Skin Surface Segmentation | s3://legit-health-plus/integration-verification/skin-segmentation/v1.1.0/images/ |
| Body Surface Segmentation | s3://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:
| Column | Description |
|---|---|
image_id | Unique identifier matching the image filename |
expected_output | The model's expected output (format varies by model type) |
output_type | Classification probability, regression value, segmentation mask hash, etc. |
confidence | Model 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 Type | Metric | Acceptance Criterion |
|---|---|---|
| Classification (ICD, Domain, Patterns) | Output probability match | Difference ≤ 1e-5 per element |
| Binary Indicators | Derived indicator match | Difference ≤ 1e-5 per indicator |
| Intensity Quantification | Continuous score match | Difference ≤ 1e-4 |
| Object Detection | Bounding box IoU | IoU ≥ 0.9999 |
| Object Detection | Detection count | Exact match |
| Segmentation | Pixel-wise mask comparison | IoU ≥ 0.9999 |
| Segmentation | Percentage affected | Difference ≤ 0.01% |
| DIQA | Quality score match | Difference ≤ 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
- Configure the integration environment with the same dependencies and versions specified in this Release Report
- Download the Integration Verification Package from the designated S3 location
- Verify package integrity using manifest checksums:
sha256sum -c checksums.txt
Step 2: Inference Execution
- Process all reference test images through the integrated model
- Apply the same preprocessing as specified in the manifest
- Record outputs in the same format as the expected outputs file
- Document the runtime environment configuration
Step 3: Output Comparison
- Compare actual outputs against expected outputs using the specified acceptance criteria
- Calculate the match rate for each metric type
- 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:
-
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
-
Corrective Action: Implement necessary corrections to achieve output equivalence
-
Re-verification: Repeat the verification procedure after corrections
-
Escalation: If equivalence cannot be achieved, escalate to the AI Team for joint investigation
-
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
- ICD Category Distribution: Performance degrades for Fitzpatrick V-VI (meets threshold but with wider CI)
- 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 Type | Description | Response Time |
|---|---|---|
| Integration Queries | Questions about preprocessing, post-processing, or model configuration | 24 business hours |
| Verification Failures | Assistance investigating integration verification discrepancies | 8 business hours |
| Bug Reports | Model behavior issues identified during integration | 4 business hours |
| Urgent Issues | Critical blockers preventing release | Immediate 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:
- Technical Clarifications: Explaining preprocessing requirements, output formats, and configuration parameters
- Verification Assistance: Helping investigate and resolve integration verification failures
- Configuration Optimization: Advising on optimal runtime configurations for specific deployment environments
- 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: Team members involved
- Reviewer: JD-003 Design & Development Manager, JD-004 Quality Manager & PRRC
- Approver: JD-001 General Manager
ㅤㅤ ㅤㅤ