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/test-images/ErythemaIntensityQuantification/1.jpg
Performance: Specified in R-TF-028-005 AI Development Report: Erythema Intensity Quantification
Configuration File: erythema_intensity_config.json
Desquamation Intensity Quantification
Purpose: Quantifies scaling/peeling intensity for psoriasis, seborrheic dermatitis, and other scaling conditions.
Expected output JSON:
{
"probability_distribution": [
[
8.442028160970949e-7, 2.9521125100018253e-8, 3.969607860199176e-6, 0.0013594592455774546,
0.5552752017974854, 4.094568430446088e-5, 0.0012707337737083435, 0.44140952825546265,
0.0006375949014909565, 1.637903892515169e-6
]
],
"continuous_score": 5.3279984828624904
}
The original image to generate these outputs can be found in s3://legit-health-plus/test-images/DesquamationIntensityQuantification/1.jpg
Performance: Specified in R-TF-028-005 AI Development Report: Desquamation Intensity Quantification
Configuration File: desquamation_intensity_config.json
Induration Intensity Quantification
Purpose: Quantifies plaque thickness/hardening for psoriasis and other inflammatory dermatoses.
Expected output JSON:
{
"probability_distribution": [
[
0.00338586769066751, 6.331619601951388e-7, 9.158335160464048e-5, 0.05288663133978844,
0.006485740654170513, 0.00019502690702211112, 0.004077768884599209, 0.9296616911888123,
0.0031048504170030355, 0.00011023339175153524
]
],
"continuous_score": 6.7436911465273965
}
The original image to generate these outputs can be found in s3://legit-health-plus/test-images/IndurationIntensityQuantification/1.jpg
Performance: Specified in R-TF-028-005 AI Development Report: Induration Intensity Quantification
Configuration File: induration_intensity_config.json
Pustule Intensity Quantification
Purpose: Quantifies pustulation severity for pustular psoriasis, acne, AGEP.
Expected output JSON:
{
"probability_distribution": [
[
0.1450415998697281, 0.006939078215509653, 0.7252118587493896, 0.003976427949965,
0.00577736459672451, 0.001695547834970057, 0.007374573964625597, 0.07776667177677155,
0.007189963944256306, 0.019026942551136017
]
],
"continuous_score": 2.3182556178653613
}
The original image to generate these outputs can be found in s3://legit-health-plus/test-images/PustuleIntensityQuantification/1.jpg
Performance: Specified in R-TF-028-005 AI Development Report: Pustule Intensity Quantification
Configuration File: pustule_intensity_config.json
Crusting Intensity Quantification
Purpose: Quantifies crust formation for atopic dermatitis, impetigo, wound healing assessment.
Expected output JSON:
{
"probability_distribution": [
[
8.442028160970949e-7, 2.9521125100018253e-8, 3.969607860199176e-6, 0.0013594592455774546,
0.5552752017974854, 4.094568430446088e-5, 0.0012707337737083435, 0.44140952825546265,
0.0006375949014909565, 1.637903892515169e-6
]
],
"continuous_score": 5.3279984828624904
}
The original image to generate these outputs can be found in s3://legit-health-plus/test-images/CrustingIntensityQuantification/1.jpg
Performance: Specified in R-TF-028-005 AI Development Report: Crusting Intensity Quantification
Configuration File: crusting_intensity_config.json
Xerosis Intensity Quantification
Purpose: Quantifies dry skin severity for atopic dermatitis, ichthyosis, aging skin.
Expected output JSON:
{
"probability_distribution": [
[
0.00048537287511862814, 0.04049737751483917, 0.019379710778594017, 0.001857674797065556,
0.00037739728577435017, 6.432881491491571e-5, 0.9372596740722656, 5.054048597230576e-5,
2.6538469683146104e-5, 1.4749366528121755e-6
]
],
"continuous_score": 5.710798466703636
}
The original image to generate these outputs can be found in s3://legit-health-plus/test-images/XerosisIntensityQuantification/1.jpg
Performance: Specified in R-TF-028-005 AI Development Report: Xerosis Intensity Quantification
Configuration File: xerosis_intensity_config.json
Swelling Intensity Quantification
Purpose: Quantifies edema severity for atopic dermatitis, urticaria, angioedema.
Expected output JSON:
{
"probability_distribution": [
[
0.000630750902928412, 0.0012454602401703596, 0.5647211670875549, 0.3996390700340271,
0.003440126543864608, 0.024147767573595047, 0.0028311503119766712, 0.0027287527918815613,
0.0005960240378044546, 1.975861050595995e-5
]
],
"continuous_score": 2.5051385397728154
}
The original image to generate these outputs can be found in s3://legit-health-plus/test-images/SwellingIntensityQuantification/1.jpg
Performance: Specified in R-TF-028-005 AI Development Report: Swelling Intensity Quantification
Configuration File: swelling_intensity_config.json
Oozing Intensity Quantification
Purpose: Quantifies exudate/discharge severity for acute dermatitis, infected eczema.
Expected output JSON:
{
"probability_distribution": [
[
8.442028160970949e-7, 2.9521125100018253e-8, 3.969607860199176e-6, 0.0013594592455774546,
0.5552752017974854, 4.094568430446088e-5, 0.0012707337737083435, 0.44140952825546265,
0.0006375949014909565, 1.637903892515169e-6
]
],
"continuous_score": 5.3279984828624904
}
The original image to generate these outputs can be found in s3://legit-health-plus/test-images/OozingIntensityQuantification/1.jpg
Performance: Specified in R-TF-028-005 AI Development Report: Oozing Intensity Quantification
Configuration File: oozing_intensity_config.json
Excoriation Intensity Quantification
Purpose: Quantifies scratch damage severity as objective marker of pruritus.
Expected output JSON:
{
"probability_distribution": [
[
0.8875784873962402, 0.0006232527666725218, 0.09243898838758469, 0.018707318231463432,
1.756926576490514e-5, 8.905705908546224e-5, 3.1543219591867455e-8, 0.0005371941952034831,
7.97201028035488e-6, 2.172054962557013e-7
]
],
"continuous_score": 0.2459650261521702
}
The original image to generate these outputs can be found in s3://legit-health-plus/test-images/ExcoriationIntensityQuantification/1.jpg
Performance: Specified in R-TF-028-005 AI Development Report: Excoriation Intensity Quantification
Configuration File: excoriation_intensity_config.json
Lichenification Intensity Quantification
Purpose: Quantifies skin thickening with accentuated markings indicating chronic disease.
Expected output JSON:
{
"probability_distribution": [
[
0.00338586769066751, 6.331619601951388e-7, 9.158335160464048e-5, 0.05288663133978844,
0.006485740654170513, 0.00019502690702211112, 0.004077768884599209, 0.9296616911888123,
0.0031048504170030355, 0.00011023339175153524
]
],
"continuous_score": 6.7436911465273965
}
The original image to generate these outputs can be found in s3://legit-health-plus/test-images/LichenificationIntensityQuantification/1.jpg
Performance: Specified in R-TF-028-005 AI Development Report: Lichenification Intensity Quantification
Configuration File: lichenification_intensity_config.json
Wound Characteristic Assessment Models
Model Classification: 🔬 Clinical Model
Purpose: Comprehensive multi-task model providing 26 outputs for wound staging and morphological characterization.
Input Specifications
| 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/test-images/WoundStageClassification/1.jpg
B. Expected output JSON for Wound Intensity Score (Regression 0-19)
{
"score": 10.859453201293945
}
The original image to generate these outputs can be found in s3://legit-health-plus/test-images/WoundIntensityScore/1.jpg
C. Expected output JSON for Binary Wound Characteristics (22 outputs)
- Affected_tissues:Bone
{
"present": false,
"probability": 1.1421862922134096e-7
}
- Affected_tissues:Dermis-epidermis
{
"present": false,
"probability": 0.09544984996318817
}
- Affected_tissues:Intact
{
"present": false,
"probability": 2.890120924803341e-7
}
- Affected_tissues:Muscle
{
"present": false,
"probability": 1.3682869393960573e-5
}
- Affected_tissues:Subcutaneous
{
"present": false,
"probability": 0.16069117188453674
}
- Biofilm_tissue
{
"present": true,
"probability": 0.9993616938591003
}
- Borders:Damaged
{
"present": false,
"probability": 1.113098824134795e-5
}
- Borders:Delimited
{
"present": true,
"probability": 0.9999657869338989
}
- Borders:Diffused
{
"present": false,
"probability": 0.00018668640404939651
}
- Borders:Indistinguishable
{
"present": false,
"probability": 1.2808607152692275e-6
}
- Borders:Thickened
{
"present": false,
"probability": 1.1434914313213085e-6
}
- Perilesional_erythema
{
"present": true,
"probability": 0.8942169547080994
}
- Perilesional_maceration
{
"present": true,
"probability": 0.5389253497123718
}
- Type_exudation:Bloody
{
"present": false,
"probability": 2.7391379262553528e-5
}
- Type_exudation:Fibrinous
{
"present": false,
"probability": 0.03276707977056503
}
- Type_exudation:Purulent
{
"present": true,
"probability": 0.9628145098686218
}
- Type_exudation:Serous
{
"present": true,
"probability": 0.9972590208053589
}
- Type_tissue_wound_bed:Closed
{
"present": false,
"probability": 3.3192190329600635e-8
}
- Type_tissue_wound_bed:Epithelial
{
"present": true,
"probability": 0.9876804351806641
}
- Type_tissue_wound_bed:Granulation
{
"present": true,
"probability": 0.920688271522522
}
- Type_tissue_wound_bed:Necrotic
{
"present": false,
"probability": 8.865220593179401e-7
}
- Type_tissue_wound_bed:Slough
{
"present": true,
"probability": 0.9999998807907104
}
The original image to generate these outputs can be found in s3://legit-health-plus/test-images/WoundCharacteristicAssessment/1.jpg
Performance: Specified in R-TF-028-005 AI Development Report: Wound Characteristic Assessment
Lesion Quantification Models (Object Detection)
Model Classification: 🔬 Clinical Models
These models detect and count specific lesion types, outputting bounding boxes with confidence scores.
Common Object Detection Specifications
Input Specifications
| 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/test-images/InflammatoryNodularLesionQuantification/1.jpg
{'hs_lesion_detection': [{'class': 'Draining tunnel',
'confidence': 0.38,
'box': [[185, 348], [277, 276], [256, 249], [164, 321]]}],
'counts': {'Draining tunnel': 1},
'ihs4_score': 4}
s3://legit-health-plus/test-images/InflammatoryNodularLesionQuantification/2.jpg
{'hs_lesion_detection': [{'class': 'Non-draining tunnel',
'confidence': 0.34,
'box': [[279, 235], [291, 165], [262, 160], [249, 229]]}],
'counts': {'Non-draining tunnel': 1},
'ihs4_score': 0}
s3://legit-health-plus/test-images/InflammatoryNodularLesionQuantification/3.jpg
{'hs_lesion_detection': [{'class': 'Nodule',
'confidence': 0.69,
'box': [[255, 266], [255, 244], [236, 244], [236, 266]]},
{'class': 'Nodule',
'confidence': 0.6,
'box': [[276, 245], [275, 223], [257, 224], [257, 246]]},
{'class': 'Nodule',
'confidence': 0.57,
'box': [[492, 437], [492, 407], [469, 406], [468, 437]]},
{'class': 'Nodule',
'confidence': 0.55,
'box': [[341, 119], [341, 102], [320, 101], [320, 118]]},
{'class': 'Nodule',
'confidence': 0.44,
'box': [[146, 228], [147, 199], [118, 198], [117, 227]]},
{'class': 'Nodule',
'confidence': 0.43,
'box': [[313, 188], [313, 167], [293, 167], [293, 188]]},
{'class': 'Nodule',
'confidence': 0.35,
'box': [[430, 389], [430, 368], [413, 368], [412, 389]]},
{'class': 'Nodule',
'confidence': 0.33,
'box': [[368, 321], [368, 287], [338, 287], [338, 321]]},
{'class': 'Nodule',
'confidence': 0.32,
'box': [[554, 407], [553, 378], [528, 378], [528, 408]]},
{'class': 'Nodule',
'confidence': 0.31,
'box': [[497, 390], [498, 371], [480, 370], [479, 389]]}],
'counts': {'Nodule': 10},
'ihs4_score': 10}
s3://legit-health-plus/test-images/InflammatoryNodularLesionQuantification/4.jpg
{'hs_lesion_detection': [], 'counts': {}, 'ihs4_score': 0}
Acneiform Lesion Type Quantification
Purpose: Multi-class detection of acne lesion types for comprehensive severity assessment.
Detected Classes:
| 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/test-images/AcneiformLesionTypeQuantification/1.jpg
{'acneiform_lesion_detection': [{'class': 'Pustule', 'confidence': 0.43, 'box': [509, 366, 549, 409]},
{'class': 'Spot', 'confidence': 0.42, 'box': [561, 547, 619, 602]},
{'class': 'Papule', 'confidence': 0.38, 'box': [681, 339, 745, 404]},
{'class': 'Papule', 'confidence': 0.35, 'box': [758, 472, 802, 517]},
{'class': 'Papule', 'confidence': 0.35, 'box': [793, 447, 826, 483]},
{'class': 'Papule', 'confidence': 0.34, 'box': [677, 112, 717, 153]},
{'class': 'Spot', 'confidence': 0.32, 'box': [762, 253, 809, 297]},
{'class': 'Papule', 'confidence': 0.31, 'box': [677, 441, 722, 486]},
{'class': 'Papule', 'confidence': 0.3, 'box': [562, 90, 607, 135]},
{'class': 'Papule', 'confidence': 0.29, 'box': [351, 558, 393, 599]},
{'class': 'Papule', 'confidence': 0.28, 'box': [686, 169, 722, 205]},
{'class': 'Spot', 'confidence': 0.25, 'box': [562, 424, 602, 467]},
{'class': 'Papule', 'confidence': 0.22, 'box': [1129, 342, 1165, 378]},
{'class': 'Papule', 'confidence': 0.22, 'box': [664, 217, 701, 253]},
{'class': 'Papule', 'confidence': 0.22, 'box': [359, 463, 401, 512]},
{'class': 'Spot', 'confidence': 0.18, 'box': [747, 552, 781, 585]},
{'class': 'Spot', 'confidence': 0.17, 'box': [514, 508, 574, 560]},
{'class': 'Spot', 'confidence': 0.17, 'box': [724, 462, 762, 499]}],
'counts': {'Pustule': 1, 'Spot': 6, 'Papule': 11}}
s3://legit-health-plus/test-images/AcneiformLesionTypeQuantification/2.jpg
{'acneiform_lesion_detection': [{'class': 'Nodule or cyst', 'confidence': 0.49, 'box': [250, 160, 284, 192]},
{'class': 'Pustule', 'confidence': 0.38, 'box': [374, 15, 400, 41]},
{'class': 'Nodule or cyst', 'confidence': 0.29, 'box': [59, 148, 118, 220]},
{'class': 'Scab', 'confidence': 0.26, 'box': [399, 177, 426, 207]},
{'class': 'Nodule or cyst', 'confidence': 0.21, 'box': [226, 194, 258, 221]}],
'counts': {'Nodule or cyst': 3, 'Pustule': 1, 'Scab': 1}}
s3://legit-health-plus/test-images/AcneiformLesionTypeQuantification/3.jpg
{'acneiform_lesion_detection': [{'class': 'Pustule', 'confidence': 0.51, 'box': [738, 1167, 935, 1353]},
{'class': 'Pustule', 'confidence': 0.49, 'box': [323, 1289, 406, 1372]},
{'class': 'Pustule', 'confidence': 0.35, 'box': [462, 1321, 493, 1352]},
{'class': 'Pustule', 'confidence': 0.28, 'box': [1270, 714, 1336, 781]},
{'class': 'Pustule', 'confidence': 0.28, 'box': [1231, 1129, 1512, 1360]},
{'class': 'Papule', 'confidence': 0.24, 'box': [451, 1236, 504, 1293]},
{'class': 'Pustule', 'confidence': 0.19, 'box': [1334, 432, 1400, 500]},
{'class': 'Papule', 'confidence': 0.17, 'box': [126, 1156, 177, 1214]},
{'class': 'Scab', 'confidence': 0.16, 'box': [1338, 1202, 1434, 1289]},
{'class': 'Comedo', 'confidence': 0.15, 'box': [940, 529, 973, 562]}],
'counts': {'Pustule': 6, 'Papule': 2, 'Scab': 1, 'Comedo': 1}}
Acneiform Inflammatory Lesion Quantification
Purpose: Single-class detection of inflammatory lesions for general acne/rosacea assessment.
Output JSON Structure:
{
"inflammatory_lesion_detection": {
"detections": [
{ "class": "inflammatory", "confidence": 0.91, "box": [50, 60, 70, 80] },
{ "class": "inflammatory", "confidence": 0.87, "box": [100, 120, 125, 145] }
],
"count": 15,
"density": 0.1
}
}
Performance: MAE ≤ Expert Inter-observer Variability; F1 ≥ 0.80
IoU threshold for NMS: 0.3
Confidence threshold: 0.2
Configuration File: inflammatory_lesion_detection_config.json
Model's expected results:
s3://legit-health-plus/test-images/AcneiformInflammatoryLesionQuantification/1.jpg
{'inflammatory_lesion_detection': [{'class': 'inflammatory', 'confidence': 0.52, 'box': [607, 466, 667, 524]},
{'class': 'inflammatory', 'confidence': 0.47, 'box': [511, 369, 546, 405]},
{'class': 'inflammatory', 'confidence': 0.43, 'box': [358, 465, 400, 510]},
{'class': 'inflammatory', 'confidence': 0.41, 'box': [682, 118, 713, 150]},
{'class': 'inflammatory', 'confidence': 0.4, 'box': [565, 94, 603, 134]},
{'class': 'inflammatory', 'confidence': 0.4, 'box': [356, 564, 386, 594]},
{'class': 'inflammatory', 'confidence': 0.4, 'box': [796, 449, 824, 482]},
{'class': 'inflammatory', 'confidence': 0.38, 'box': [683, 342, 740, 401]},
{'class': 'inflammatory', 'confidence': 0.33, 'box': [688, 170, 721, 204]},
{'class': 'inflammatory', 'confidence': 0.31, 'box': [1134, 347, 1164, 378]},
{'class': 'inflammatory', 'confidence': 0.27, 'box': [670, 222, 696, 250]},
{'class': 'inflammatory', 'confidence': 0.26, 'box': [763, 480, 795, 514]},
{'class': 'inflammatory', 'confidence': 0.24, 'box': [683, 449, 717, 483]},
{'class': 'inflammatory', 'confidence': 0.23, 'box': [494, 619, 525, 647]},
{'class': 'inflammatory', 'confidence': 0.23, 'box': [570, 552, 614, 596]},
{'class': 'inflammatory', 'confidence': 0.22, 'box': [544, 159, 568, 183]}],
'count': 16,
'density': 0.58}
s3://legit-health-plus/test-images/AcneiformInflammatoryLesionQuantification/2.jpg
{'inflammatory_lesion_detection': [{'class': 'inflammatory', 'confidence': 0.56, 'box': [252, 165, 282, 189]},
{'class': 'inflammatory', 'confidence': 0.48, 'box': [369, 13, 406, 45]},
{'class': 'inflammatory', 'confidence': 0.48, 'box': [249, 190, 259, 199]},
{'class': 'inflammatory', 'confidence': 0.48, 'box': [63, 167, 102, 208]},
{'class': 'inflammatory', 'confidence': 0.44, 'box': [403, 180, 422, 201]},
{'class': 'inflammatory', 'confidence': 0.41, 'box': [140, 31, 146, 37]},
{'class': 'inflammatory', 'confidence': 0.36, 'box': [231, 195, 252, 217]},
{'class': 'inflammatory', 'confidence': 0.34, 'box': [258, 229, 270, 241]},
{'class': 'inflammatory', 'confidence': 0.34, 'box': [119, 33, 125, 39]},
{'class': 'inflammatory', 'confidence': 0.31, 'box': [208, 172, 221, 184]},
{'class': 'inflammatory', 'confidence': 0.24, 'box': [126, 36, 131, 41]},
{'class': 'inflammatory', 'confidence': 0.24, 'box': [130, 41, 136, 47]},
{'class': 'inflammatory', 'confidence': 0.22, 'box': [217, 43, 226, 51]}],
'count': 13,
'density': 0.12}
s3://legit-health-plus/test-images/AcneiformInflammatoryLesionQuantification/3.jpg
{'inflammatory_lesion_detection': [{'class': 'inflammatory', 'confidence': 0.49, 'box': [327, 1293, 400, 1366]},
{'class': 'inflammatory', 'confidence': 0.47, 'box': [459, 1237, 500, 1282]},
{'class': 'inflammatory', 'confidence': 0.47, 'box': [1275, 722, 1331, 772]},
{'class': 'inflammatory', 'confidence': 0.45, 'box': [232, 690, 280, 733]},
{'class': 'inflammatory', 'confidence': 0.45, 'box': [128, 1156, 171, 1199]},
{'class': 'inflammatory', 'confidence': 0.41, 'box': [741, 1165, 953, 1363]},
{'class': 'inflammatory', 'confidence': 0.4, 'box': [463, 1316, 498, 1353]},
{'class': 'inflammatory', 'confidence': 0.39, 'box': [327, 1059, 365, 1096]},
{'class': 'inflammatory', 'confidence': 0.38, 'box': [443, 623, 483, 665]},
{'class': 'inflammatory', 'confidence': 0.36, 'box': [234, 1171, 268, 1204]},
{'class': 'inflammatory', 'confidence': 0.34, 'box': [285, 1112, 315, 1142]},
{'class': 'inflammatory', 'confidence': 0.33, 'box': [388, 634, 422, 668]},
{'class': 'inflammatory', 'confidence': 0.32, 'box': [332, 1234, 362, 1263]},
{'class': 'inflammatory', 'confidence': 0.32, 'box': [201, 1099, 231, 1128]},
{'class': 'inflammatory', 'confidence': 0.3, 'box': [335, 1166, 368, 1198]},
{'class': 'inflammatory', 'confidence': 0.29, 'box': [1324, 423, 1408, 496]},
{'class': 'inflammatory', 'confidence': 0.27, 'box': [258, 561, 297, 599]},
{'class': 'inflammatory', 'confidence': 0.26, 'box': [1381, 747, 1431, 791]},
{'class': 'inflammatory', 'confidence': 0.25, 'box': [224, 1120, 251, 1146]},
{'class': 'inflammatory', 'confidence': 0.25, 'box': [209, 1259, 238, 1290]},
{'class': 'inflammatory', 'confidence': 0.24, 'box': [286, 1205, 319, 1237]},
{'class': 'inflammatory', 'confidence': 0.23, 'box': [370, 608, 405, 640]},
{'class': 'inflammatory', 'confidence': 0.23, 'box': [240, 1080, 276, 1116]},
{'class': 'inflammatory', 'confidence': 0.22, 'box': [288, 1288, 320, 1320]},
{'class': 'inflammatory', 'confidence': 0.22, 'box': [1297, 1196, 1449, 1316]},
{'class': 'inflammatory', 'confidence': 0.22, 'box': [173, 1129, 198, 1151]},
{'class': 'inflammatory', 'confidence': 0.21, 'box': [391, 723, 417, 749]}],
'count': 27,
'density': 0.3}
Hive Lesion Quantification
Purpose: Detects and counts urticarial wheals for UAS7 scoring.
Output JSON Structure:
{
"hive_detection": {
"detections": [
{ "class": "hive", "confidence": 0.85, "box": [80, 100, 150, 170] },
{ "class": "hive", "confidence": 0.78, "box": [200, 150, 280, 230] }
],
"count": 25,
"uas7_wheal_component": 2
}
}
UAS7 Wheal Scoring: 0 = none, 1 = <20 wheals, 2 = 20-50 wheals, 3 = >50 wheals
Performance: mAP@50 ≥ 0.56; rMAE ≤ Expert Inter-observer Variability
IoU threshold for NMS: 0.3
Confidence threshold: 0.2
Configuration File: hive_detection_config.json
Model's expected results:
s3://legit-health-plus/test-images/HiveLesionQuantification/1.jpg
{'hive_detection': [{'class': 'Hive', 'confidence': 0.48, 'box': [81, 381, 129, 438]},
{'class': 'Hive', 'confidence': 0.31, 'box': [571, 161, 657, 231]},
{'class': 'Hive', 'confidence': 0.3, 'box': [1167, 334, 1203, 377]},
{'class': 'Hive', 'confidence': 0.3, 'box': [1084, 358, 1166, 435]},
{'class': 'Hive', 'confidence': 0.23, 'box': [276, 434, 406, 559]},
{'class': 'Hive', 'confidence': 0.21, 'box': [1070, 429, 1151, 507]}],
'counts': {'Hive': 6},
'uas7_wheal_component': 1}
s3://legit-health-plus/test-images/HiveLesionQuantification/2.jpg
{'hive_detection': [{'class': 'Hive', 'confidence': 0.79, 'box': [232, 718, 291, 772]},
{'class': 'Hive', 'confidence': 0.7, 'box': [119, 391, 172, 447]},
{'class': 'Hive', 'confidence': 0.69, 'box': [190, 738, 227, 771]},
{'class': 'Hive', 'confidence': 0.65, 'box': [316, 724, 351, 755]},
{'class': 'Hive', 'confidence': 0.64, 'box': [327, 590, 364, 622]},
{'class': 'Hive', 'confidence': 0.63, 'box': [72, 264, 114, 309]},
{'class': 'Hive', 'confidence': 0.62, 'box': [250, 160, 288, 196]},
{'class': 'Hive', 'confidence': 0.61, 'box': [173, 592, 205, 621]},
{'class': 'Hive', 'confidence': 0.58, 'box': [62, 681, 115, 752]},
{'class': 'Hive', 'confidence': 0.58, 'box': [293, 134, 347, 179]},
{'class': 'Hive', 'confidence': 0.58, 'box': [312, 407, 343, 439]},
{'class': 'Hive', 'confidence': 0.58, 'box': [435, 708, 469, 740]},
{'class': 'Hive', 'confidence': 0.57, 'box': [51, 167, 96, 221]},
{'class': 'Hive', 'confidence': 0.57, 'box': [256, 489, 290, 523]},
{'class': 'Hive', 'confidence': 0.56, 'box': [225, 569, 284, 618]},
{'class': 'Hive', 'confidence': 0.54, 'box': [390, 249, 439, 299]},
{'class': 'Hive', 'confidence': 0.53, 'box': [132, 278, 229, 380]},
{'class': 'Hive', 'confidence': 0.52, 'box': [96, 548, 144, 602]},
{'class': 'Hive', 'confidence': 0.5, 'box': [120, 195, 217, 270]},
{'class': 'Hive', 'confidence': 0.5, 'box': [151, 776, 184, 799]},
{'class': 'Hive', 'confidence': 0.48, 'box': [262, 695, 291, 721]},
{'class': 'Hive', 'confidence': 0.48, 'box': [187, 539, 217, 569]},
{'class': 'Hive', 'confidence': 0.46, 'box': [359, 424, 441, 489]},
{'class': 'Hive', 'confidence': 0.46, 'box': [135, 672, 171, 706]},
{'class': 'Hive', 'confidence': 0.45, 'box': [205, 604, 233, 631]},
{'class': 'Hive', 'confidence': 0.45, 'box': [118, 609, 155, 649]},
{'class': 'Hive', 'confidence': 0.41, 'box': [324, 243, 347, 268]},
{'class': 'Hive', 'confidence': 0.38, 'box': [246, 421, 278, 452]},
{'class': 'Hive', 'confidence': 0.29, 'box': [177, 371, 208, 402]},
{'class': 'Hive', 'confidence': 0.29, 'box': [225, 280, 247, 302]},
{'class': 'Hive', 'confidence': 0.28, 'box': [225, 187, 257, 220]},
{'class': 'Hive', 'confidence': 0.26, 'box': [311, 759, 339, 784]},
{'class': 'Hive', 'confidence': 0.26, 'box': [340, 754, 369, 781]},
{'class': 'Hive', 'confidence': 0.25, 'box': [287, 372, 319, 401]},
{'class': 'Hive', 'confidence': 0.25, 'box': [88, 488, 120, 518]},
{'class': 'Hive', 'confidence': 0.24, 'box': [371, 226, 399, 252]},
{'class': 'Hive', 'confidence': 0.23, 'box': [450, 244, 472, 264]},
{'class': 'Hive', 'confidence': 0.22, 'box': [148, 155, 187, 194]},
{'class': 'Hive', 'confidence': 0.22, 'box': [271, 627, 299, 661]},
{'class': 'Hive', 'confidence': 0.21, 'box': [229, 360, 254, 389]},
{'class': 'Hive', 'confidence': 0.2, 'box': [405, 726, 430, 752]},
{'class': 'Hive', 'confidence': 0.2, 'box': [258, 532, 284, 559]}],
'counts': {'Hive': 42},
'uas7_wheal_component': 2}
s3://legit-health-plus/test-images/HiveLesionQuantification/3.jpg
{'hive_detection': [{'class': 'Hive', 'confidence': 0.73, 'box': [1469, 1759, 1762, 2070]},
{'class': 'Hive', 'confidence': 0.72, 'box': [1087, 815, 1860, 1726]},
{'class': 'Hive', 'confidence': 0.7, 'box': [307, 1290, 792, 1729]},
{'class': 'Hive', 'confidence': 0.65, 'box': [225, 361, 581, 714]},
{'class': 'Hive', 'confidence': 0.64, 'box': [2292, 1523, 2457, 1731]},
{'class': 'Hive', 'confidence': 0.62, 'box': [160, 1012, 431, 1309]},
{'class': 'Hive', 'confidence': 0.61, 'box': [1575, 639, 2029, 1168]},
{'class': 'Hive', 'confidence': 0.6, 'box': [413, 2077, 745, 2443]},
{'class': 'Hive', 'confidence': 0.58, 'box': [567, 141, 1104, 612]},
{'class': 'Hive', 'confidence': 0.57, 'box': [180, 644, 453, 959]},
{'class': 'Hive', 'confidence': 0.54, 'box': [1093, 2234, 1306, 2442]},
{'class': 'Hive', 'confidence': 0.54, 'box': [1750, 1078, 2451, 1796]},
{'class': 'Hive', 'confidence': 0.53, 'box': [1972, 1703, 2376, 2143]},
{'class': 'Hive', 'confidence': 0.51, 'box': [408, 1405, 1507, 2349]},
{'class': 'Hive', 'confidence': 0.51, 'box': [2309, 0, 2557, 158]},
{'class': 'Hive', 'confidence': 0.5, 'box': [2117, 654, 2472, 1017]},
{'class': 'Hive', 'confidence': 0.49, 'box': [2301, 1595, 3223, 2437]},
{'class': 'Hive', 'confidence': 0.48, 'box': [0, 768, 128, 1038]},
{'class': 'Hive', 'confidence': 0.45, 'box': [1525, 0, 1877, 264]},
{'class': 'Hive', 'confidence': 0.44, 'box': [1065, 1482, 1421, 1860]},
{'class': 'Hive', 'confidence': 0.43, 'box': [1312, 0, 1581, 196]},
{'class': 'Hive', 'confidence': 0.43, 'box': [2927, 0, 3258, 223]},
{'class': 'Hive', 'confidence': 0.43, 'box': [2855, 182, 3198, 532]},
{'class': 'Hive', 'confidence': 0.4, 'box': [2303, 72, 2595, 377]},
{'class': 'Hive', 'confidence': 0.4, 'box': [1995, 672, 2140, 837]},
{'class': 'Hive', 'confidence': 0.36, 'box': [804, 1378, 1195, 1772]},
{'class': 'Hive', 'confidence': 0.36, 'box': [1780, 73, 2435, 634]},
{'class': 'Hive', 'confidence': 0.36, 'box': [1275, 80, 1953, 532]},
{'class': 'Hive', 'confidence': 0.35, 'box': [784, 520, 1370, 1033]},
{'class': 'Hive', 'confidence': 0.35, 'box': [507, 827, 953, 1343]},
{'class': 'Hive', 'confidence': 0.33, 'box': [887, 132, 1162, 409]},
{'class': 'Hive', 'confidence': 0.33, 'box': [0, 1298, 145, 1665]},
{'class': 'Hive', 'confidence': 0.32, 'box': [6, 1045, 215, 1263]},
{'class': 'Hive', 'confidence': 0.32, 'box': [1445, 405, 1924, 749]},
{'class': 'Hive', 'confidence': 0.32, 'box': [1673, 1808, 2000, 2097]},
{'class': 'Hive', 'confidence': 0.31, 'box': [1049, 38, 1311, 294]},
{'class': 'Hive', 'confidence': 0.3, 'box': [1777, 2053, 2518, 2447]},
{'class': 'Hive', 'confidence': 0.29, 'box': [1167, 1976, 1514, 2394]},
{'class': 'Hive', 'confidence': 0.29, 'box': [2620, 1189, 3022, 1605]},
{'class': 'Hive', 'confidence': 0.29, 'box': [1732, 0, 2126, 152]},
{'class': 'Hive', 'confidence': 0.29, 'box': [2561, 44, 2915, 389]},
{'class': 'Hive', 'confidence': 0.26, 'box': [2165, 1094, 2488, 1417]},
{'class': 'Hive', 'confidence': 0.26, 'box': [2380, 836, 3167, 1759]},
{'class': 'Hive', 'confidence': 0.26, 'box': [103, 44, 556, 291]},
{'class': 'Hive', 'confidence': 0.25, 'box': [2386, 848, 2828, 1319]},
{'class': 'Hive', 'confidence': 0.24, 'box': [730, 0, 1028, 151]},
{'class': 'Hive', 'confidence': 0.24, 'box': [2210, 376, 2707, 927]},
{'class': 'Hive', 'confidence': 0.22, 'box': [2456, 311, 3257, 1233]},
{'class': 'Hive', 'confidence': 0.2, 'box': [2041, 439, 2339, 751]}],
'count': 49,
'uas7_wheal_component': 2}
s3://legit-health-plus/test-images/HiveLesionQuantification/4.jpg
{'hs_lesion_detection': [{'class': 'Hive', 'confidence': 0.77, 'box': [894, 98, 948, 145]},
{'class': 'Hive', 'confidence': 0.71, 'box': [713, 271, 770, 325]},
{'class': 'Hive', 'confidence': 0.69, 'box': [602, 278, 645, 324]},
{'class': 'Hive', 'confidence': 0.67, 'box': [795, 172, 849, 235]},
{'class': 'Hive', 'confidence': 0.65, 'box': [795, 126, 842, 178]},
{'class': 'Hive', 'confidence': 0.65, 'box': [399, 328, 446, 377]},
{'class': 'Hive', 'confidence': 0.64, 'box': [664, 223, 716, 273]},
{'class': 'Hive', 'confidence': 0.64, 'box': [147, 609, 199, 650]},
{'class': 'Hive', 'confidence': 0.63, 'box': [749, 75, 812, 135]},
{'class': 'Hive', 'confidence': 0.63, 'box': [667, 157, 722, 219]},
{'class': 'Hive', 'confidence': 0.61, 'box': [912, 179, 961, 227]},
{'class': 'Hive', 'confidence': 0.6, 'box': [713, 135, 766, 197]},
{'class': 'Hive', 'confidence': 0.6, 'box': [821, 72, 875, 118]},
{'class': 'Hive', 'confidence': 0.59, 'box': [371, 209, 461, 292]},
{'class': 'Hive', 'confidence': 0.58, 'box': [816, 320, 856, 357]},
{'class': 'Hive', 'confidence': 0.58, 'box': [749, 219, 798, 265]},
{'class': 'Hive', 'confidence': 0.58, 'box': [621, 224, 660, 267]},
{'class': 'Hive', 'confidence': 0.57, 'box': [326, 227, 405, 316]},
{'class': 'Hive', 'confidence': 0.55, 'box': [340, 309, 388, 351]},
{'class': 'Hive', 'confidence': 0.55, 'box': [349, 352, 399, 396]},
{'class': 'Hive', 'confidence': 0.54, 'box': [602, 148, 639, 193]},
{'class': 'Hive', 'confidence': 0.54, 'box': [705, 197, 750, 244]},
{'class': 'Hive', 'confidence': 0.54, 'box': [822, 272, 870, 323]},
{'class': 'Hive', 'confidence': 0.53, 'box': [850, 114, 891, 150]},
{'class': 'Hive', 'confidence': 0.5, 'box': [628, 310, 670, 354]},
{'class': 'Hive', 'confidence': 0.5, 'box': [764, 42, 814, 82]},
{'class': 'Hive', 'confidence': 0.49, 'box': [834, 219, 865, 250]},
{'class': 'Hive', 'confidence': 0.48, 'box': [670, 96, 708, 128]},
{'class': 'Hive', 'confidence': 0.48, 'box': [783, 268, 820, 306]},
{'class': 'Hive', 'confidence': 0.47, 'box': [763, 145, 793, 174]},
{'class': 'Hive', 'confidence': 0.47, 'box': [215, 206, 257, 244]},
{'class': 'Hive', 'confidence': 0.47, 'box': [890, 149, 933, 188]},
{'class': 'Hive', 'confidence': 0.46, 'box': [856, 248, 894, 280]},
{'class': 'Hive', 'confidence': 0.46, 'box': [867, 205, 906, 240]},
{'class': 'Hive', 'confidence': 0.45, 'box': [1056, 258, 1107, 304]},
{'class': 'Hive', 'confidence': 0.45, 'box': [680, 57, 721, 95]},
{'class': 'Hive', 'confidence': 0.44, 'box': [385, 289, 426, 328]},
{'class': 'Hive', 'confidence': 0.44, 'box': [1011, 190, 1057, 237]},
{'class': 'Hive', 'confidence': 0.42, 'box': [889, 58, 937, 98]},
{'class': 'Hive', 'confidence': 0.41, 'box': [370, 638, 409, 671]},
{'class': 'Hive', 'confidence': 0.41, 'box': [814, 243, 853, 281]},
{'class': 'Hive', 'confidence': 0.4, 'box': [683, 324, 718, 359]},
{'class': 'Hive', 'confidence': 0.4, 'box': [844, 156, 881, 197]},
{'class': 'Hive', 'confidence': 0.4, 'box': [634, 150, 674, 201]},
{'class': 'Hive', 'confidence': 0.4, 'box': [1048, 215, 1096, 259]},
{'class': 'Hive', 'confidence': 0.39, 'box': [633, 94, 672, 129]},
{'class': 'Hive', 'confidence': 0.38, 'box': [692, 118, 732, 156]},
{'class': 'Hive', 'confidence': 0.36, 'box': [931, 489, 971, 524]},
{'class': 'Hive', 'confidence': 0.35, 'box': [171, 555, 202, 586]},
{'class': 'Hive', 'confidence': 0.35, 'box': [446, 216, 488, 256]},
{'class': 'Hive', 'confidence': 0.34, 'box': [713, 74, 748, 107]},
{'class': 'Hive', 'confidence': 0.34, 'box': [186, 187, 223, 222]},
{'class': 'Hive', 'confidence': 0.34, 'box': [752, 187, 784, 218]},
{'class': 'Hive', 'confidence': 0.34, 'box': [597, 375, 623, 413]},
{'class': 'Hive', 'confidence': 0.34, 'box': [921, 426, 964, 461]},
{'class': 'Hive', 'confidence': 0.33, 'box': [768, 299, 807, 334]},
{'class': 'Hive', 'confidence': 0.33, 'box': [397, 481, 435, 519]},
{'class': 'Hive', 'confidence': 0.32, 'box': [906, 386, 954, 428]},
{'class': 'Hive', 'confidence': 0.31, 'box': [474, 250, 504, 281]},
{'class': 'Hive', 'confidence': 0.31, 'box': [507, 243, 542, 283]},
{'class': 'Hive', 'confidence': 0.28, 'box': [674, 278, 711, 313]},
{'class': 'Hive', 'confidence': 0.28, 'box': [651, 339, 681, 370]},
{'class': 'Hive', 'confidence': 0.28, 'box': [374, 399, 414, 440]},
{'class': 'Hive', 'confidence': 0.28, 'box': [902, 239, 962, 300]},
{'class': 'Hive', 'confidence': 0.26, 'box': [802, 404, 837, 439]},
{'class': 'Hive', 'confidence': 0.26, 'box': [844, 348, 882, 384]},
{'class': 'Hive', 'confidence': 0.26, 'box': [192, 143, 226, 178]},
{'class': 'Hive', 'confidence': 0.25, 'box': [486, 177, 531, 224]},
{'class': 'Hive', 'confidence': 0.25, 'box': [412, 421, 442, 449]},
{'class': 'Hive', 'confidence': 0.25, 'box': [149, 583, 183, 612]},
{'class': 'Hive', 'confidence': 0.24, 'box': [1020, 247, 1059, 291]},
{'class': 'Hive', 'confidence': 0.23, 'box': [823, 499, 866, 540]},
{'class': 'Hive', 'confidence': 0.23, 'box': [1146, 334, 1199, 395]},
{'class': 'Hive', 'confidence': 0.22, 'box': [883, 353, 923, 393]},
{'class': 'Hive', 'confidence': 0.22, 'box': [389, 452, 427, 489]},
{'class': 'Hive', 'confidence': 0.21, 'box': [352, 205, 390, 236]},
{'class': 'Hive', 'confidence': 0.21, 'box': [900, 640, 958, 671]},
{'class': 'Hive', 'confidence': 0.21, 'box': [102, 563, 166, 616]}],
'count': 78,
'uas7_wheal_component': 3}
s3://legit-health-plus/test-images/HiveLesionQuantification/5.jpg
{'hs_lesion_detection': [{'class': 'Hive', 'confidence': 0.83, 'box': [228, 418, 265, 451]},
{'class': 'Hive', 'confidence': 0.83, 'box': [262, 434, 305, 472]},
{'class': 'Hive', 'confidence': 0.83, 'box': [230, 284, 275, 325]},
{'class': 'Hive', 'confidence': 0.83, 'box': [188, 457, 234, 494]},
{'class': 'Hive', 'confidence': 0.83, 'box': [258, 383, 307, 427]},
{'class': 'Hive', 'confidence': 0.82, 'box': [266, 307, 312, 348]},
{'class': 'Hive', 'confidence': 0.82, 'box': [249, 109, 315, 167]},
{'class': 'Hive', 'confidence': 0.81, 'box': [151, 412, 191, 445]},
{'class': 'Hive', 'confidence': 0.81, 'box': [236, 471, 278, 499]},
{'class': 'Hive', 'confidence': 0.81, 'box': [165, 138, 222, 201]},
{'class': 'Hive', 'confidence': 0.8, 'box': [292, 396, 346, 445]},
{'class': 'Hive', 'confidence': 0.8, 'box': [310, 180, 349, 214]},
{'class': 'Hive', 'confidence': 0.8, 'box': [105, 160, 152, 201]},
{'class': 'Hive', 'confidence': 0.8, 'box': [168, 85, 219, 132]},
{'class': 'Hive', 'confidence': 0.78, 'box': [146, 326, 184, 372]},
{'class': 'Hive', 'confidence': 0.78, 'box': [379, 165, 425, 215]},
{'class': 'Hive', 'confidence': 0.78, 'box': [216, 168, 258, 208]},
{'class': 'Hive', 'confidence': 0.78, 'box': [310, 487, 347, 514]},
{'class': 'Hive', 'confidence': 0.77, 'box': [191, 373, 230, 406]},
{'class': 'Hive', 'confidence': 0.77, 'box': [403, 120, 442, 159]},
{'class': 'Hive', 'confidence': 0.76, 'box': [104, 25, 144, 70]},
{'class': 'Hive', 'confidence': 0.75, 'box': [127, 298, 161, 329]},
{'class': 'Hive', 'confidence': 0.75, 'box': [132, 430, 165, 461]},
{'class': 'Hive', 'confidence': 0.75, 'box': [168, 379, 202, 410]},
{'class': 'Hive', 'confidence': 0.73, 'box': [113, 338, 145, 370]},
{'class': 'Hive', 'confidence': 0.72, 'box': [449, 81, 479, 128]},
{'class': 'Hive', 'confidence': 0.72, 'box': [53, 188, 85, 222]},
{'class': 'Hive', 'confidence': 0.71, 'box': [253, 177, 302, 226]},
{'class': 'Hive', 'confidence': 0.71, 'box': [170, 501, 241, 545]},
{'class': 'Hive', 'confidence': 0.7, 'box': [283, 38, 387, 165]},
{'class': 'Hive', 'confidence': 0.7, 'box': [48, 160, 78, 195]},
{'class': 'Hive', 'confidence': 0.69, 'box': [240, 10, 300, 122]},
{'class': 'Hive', 'confidence': 0.69, 'box': [45, 214, 130, 305]},
{'class': 'Hive', 'confidence': 0.67, 'box': [374, 428, 396, 454]},
{'class': 'Hive', 'confidence': 0.67, 'box': [330, 224, 360, 254]},
{'class': 'Hive', 'confidence': 0.67, 'box': [368, 216, 409, 263]},
{'class': 'Hive', 'confidence': 0.67, 'box': [37, 87, 61, 118]},
{'class': 'Hive', 'confidence': 0.66, 'box': [292, 524, 342, 546]},
{'class': 'Hive', 'confidence': 0.66, 'box': [339, 495, 381, 527]},
{'class': 'Hive', 'confidence': 0.65, 'box': [237, 512, 264, 533]},
{'class': 'Hive', 'confidence': 0.64, 'box': [324, 405, 379, 456]},
{'class': 'Hive', 'confidence': 0.62, 'box': [86, 76, 124, 119]},
{'class': 'Hive', 'confidence': 0.62, 'box': [358, 273, 408, 313]},
{'class': 'Hive', 'confidence': 0.62, 'box': [320, 0, 413, 43]},
{'class': 'Hive', 'confidence': 0.61, 'box': [416, 316, 442, 350]},
{'class': 'Hive', 'confidence': 0.58, 'box': [236, 343, 282, 384]},
{'class': 'Hive', 'confidence': 0.58, 'box': [323, 461, 349, 483]},
{'class': 'Hive', 'confidence': 0.57, 'box': [103, 381, 151, 427]},
{'class': 'Hive', 'confidence': 0.56, 'box': [384, 7, 451, 77]},
{'class': 'Hive', 'confidence': 0.49, 'box': [355, 356, 391, 391]},
{'class': 'Hive', 'confidence': 0.49, 'box': [385, 401, 406, 425]},
{'class': 'Hive', 'confidence': 0.48, 'box': [244, 446, 263, 462]},
{'class': 'Hive', 'confidence': 0.47, 'box': [48, 117, 69, 140]},
{'class': 'Hive', 'confidence': 0.44, 'box': [59, 8, 101, 68]},
{'class': 'Hive', 'confidence': 0.41, 'box': [215, 341, 251, 374]},
{'class': 'Hive', 'confidence': 0.31, 'box': [150, 370, 168, 387]},
{'class': 'Hive', 'confidence': 0.3, 'box': [101, 286, 129, 314]},
{'class': 'Hive', 'confidence': 0.25, 'box': [371, 368, 400, 402]},
{'class': 'Hive', 'confidence': 0.25, 'box': [406, 395, 426, 430]}],
'count': 59,
'uas7_wheal_component': 3}
s3://legit-health-plus/test-images/HiveLesionQuantification/6.jpg
{'hs_lesion_detection': [{'class': 'Hive', 'confidence': 0.76, 'box': [14, 67, 237, 389]},
{'class': 'Hive', 'confidence': 0.41, 'box': [162, 160, 396, 390]},
{'class': 'Hive', 'confidence': 0.35, 'box': [251, 64, 380, 181]},
{'class': 'Hive', 'confidence': 0.34, 'box': [382, 209, 537, 421]},
{'class': 'Hive', 'confidence': 0.23, 'box': [479, 237, 595, 435]}],
'count': 5,
'uas7_wheal_component': 1}
Surface Area Quantification Models (Segmentation)
Model Classification: 🔬 Clinical Models
These models perform pixel-wise segmentation to quantify affected surface areas.
Common Segmentation Specifications
Input Specifications
| 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/test-images/WoundSurfaceQuantification/1.jpg
Configuration File: wound_surface_segmentation_config.json
Erythema Surface Quantification
Purpose: Binary segmentation for perilesional and wound bed erythema extent.
Expected output JSON:
{
"image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"mask": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"probability_map": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"percentage": 17.151666666666667
}
The original image to generate these outputs can be found in s3://legit-health-plus/test-images/ErythemaSurfaceQuantification/1.jpg
Performance: Specified in R-TF-028-005 AI Development Report: Erythema Surface Quantification
Configuration File: erythema_surface_config.json
Hair Loss Surface Quantification
Purpose: 3-class segmentation (Hair, No Hair, Non-Scalp) for alopecia assessment and SALT scoring.
Expected output JSON Structure:
{
"image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"mask": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"probability_map": [
"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ..."
],
"percentages": [70.08219203995158, 25.789289497578693, 4.128518462469734],
"alopecia_percentages": 13.799535273382546
}
The original image to generate these outputs can be found in s3://legit-health-plus/test-images/HairLossSurfaceQuantification/1.jpg
Calculation: Hair Loss % = (No Hair pixels) / (Hair + No Hair pixels) × 100
Performance: Specified in R-TF-028-005 AI Development Report: Hair Loss Surface Quantification
Configuration File: hair_loss_surface_config.json
Nail Lesion Surface Quantification
Purpose: Multi-class segmentation (Healthy Nail, Lesion, Background) for the assessment of nail lesion extent.
Output JSON Structure:
{
"image": "base64_png",
"probability": "base64_png",
"background": "base64_png",
"healthy nail": "base64_png",
"nail lesion": "base64_png"
}
Performance Summary
| 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/test-images/nail_lesion_segmenter/a.jpg
{
"image": "b'/9j/4AAQSkZJRgABAQ...",
"probability": "b'/9j/4AAQSkZJRgABAQAAAQABAAD/...",
"background": "b'/9j/4AAQSkZJRgABAQAAAQABAAD/...",
"healthy nail": "b'/9j/4AAQSkZJRgABAQAAAQABAAD/...",
"nail lesion": "b'/9j/4AAQSkZJRgABAQAAAQABAAD/..."
}
Hypopigmentation/Depigmentation Surface Quantification
Purpose: Binary segmentation for vitiligo and pigmentary loss quantification (VASI scoring).
Expected output JSON:
{
"image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"mask": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"probability_map": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"percentage": 18.5432266198044
}
The original image to generate these outputs can be found in s3://legit-health-plus/test-images/HypopigmentationSurfaceQuantification/1.jpg
Performance: Specified in R-TF-028-005 AI Development Report: Hypopigmentation/Depigmentation Surface Quantification
Configuration File: hypopigmentation_surface_config.json
Hyperpigmentation Surface Quantification
Purpose: Binary segmentation for melasma and PIH quantification (MASI scoring).
Expected output JSON:
{
"image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"mask": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"probability_map": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"percentage": 34.57489013671875
}
The original image to generate these outputs can be found in s3://legit-health-plus/test-images/HyperpigmentationSurfaceQuantification/1.jpg
Performance: Specified in R-TF-028-005 AI Development Report: Hyperpigmentation Surface Quantification
Configuration File: hyperpigmentation_surface_config.json
Pattern Identification Models
Model Classification: 🔬 Clinical Models
These models classify disease patterns and severity stages.
Follicular and Inflammatory Pattern Identification
Purpose: Multi-class classification for HS phenotype identification (Martorell classification).
Input Specifications
| 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/test-images/follicular_inflammatory_pattern_classifier/a.jpg
{
"hs_phenotype": {
"predicted_phenotype": "Mixed",
"probability": {
"Follicular": 0.9934564232826233,
"Inflammatory": 0.9881375432014465
}
}
}
Inflammatory Pattern Identification (Hurley Staging)
Purpose: Multi-task classification model that simultaneously outputs Hurley stage classification and inflammatory activity assessment for inflammatory nodular lesions.
Output Specifications
This multi-task model provides two simultaneous classifications:
- 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/test-images/InflammatoryNodularLesionPatternIdentification/1.jpg
{'hurley_staging': 'Stage III',
'hurley_staging_prob': 0.87,
'inflammatory_activity': 'No inflammatory',
'inflammatory_activity_prob': 0.95}
s3://legit-health-plus/test-images/InflammatoryNodularLesionPatternIdentification/2.jpg
{'hurley_staging': 'Stage III',
'hurley_staging_prob': 0.62,
'inflammatory_activity': 'No inflammatory',
'inflammatory_activity_prob': 0.9}
s3://legit-health-plus/test-images/InflammatoryNodularLesionPatternIdentification/3.jpg
{'hurley_staging': 'Stage I',
'hurley_staging_prob': 0.59,
'inflammatory_activity': 'No inflammatory',
'inflammatory_activity_prob': 0.98}
s3://legit-health-plus/test-images/InflammatoryNodularLesionPatternIdentification/4.jpg
{'hurley_staging': 'Stage II',
'hurley_staging_prob': 0.55,
'inflammatory_activity': 'No inflammatory',
'inflammatory_activity_prob': 0.6}
Hair Follicle Quantification
Purpose: Single-class detection of hair follicle for assessment of hair loss.
Output JSON Structure:
{
"hair_follicle_detection": {
"detections": [
{ "class": "follicle", "confidence": 0.89, "box": [50, 60, 70, 80] },
{ "class": "follicle", "confidence": 0.92, "box": [100, 120, 125, 145] },
{ "class": "follicle", "confidence": 0.78, "box": [180, 90, 195, 105] }
],
"counts": 1
}
}
IoU threshold for NMS: 0.3
Confidence threshold: 0.15
Performance Summary
| 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/test-images/hair_follicle_detector/a.jpg
{
"hair_follicle_detection": {
"detections": [
{
"class": "follicle",
"confidence": 0.506977,
"box": [507, 371, 603, 480]
},
{
"class": "follicle",
"confidence": 0.246984,
"box": [291, 288, 380, 411]
},
{
"class": "follicle",
"confidence": 0.160094,
"box": [0, 6, 45, 159]
}
],
"counts": 3
}
}
Non-Clinical Models: Detailed Specifications
Domain Validation
Model Classification: 🛠️ Non-Clinical Model
Purpose: Validates image domain (non-dermatology, skin (clinical), skin (dermoscopic)) for proper routing.
Input Specifications
| 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/test-images/image-domain/perro.jpeg
{
"domain_validation": {
"predicted_domain": "non-dermatology",
"probability_distribution": {
"non-dermatology": 1.0,
"clinical": 2.495789094747707e-21,
"dermoscopic": 1.781282008838602e-19
}
}
}
Dermatology Image Quality Assessment (DIQA)
Model Classification: 🛠️ Non-Clinical Model
Purpose: Assesses visual quality for clinical acceptability.
Output Specifications
The model outputs a logit (a scalar) that is rescaled to the [1, 10] range.
Output JSON Structure:
{
"image_quality": {
"overall_score": 7.5
}
}
Performance Summary
| 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/test-images/image-quality/Gemini_Generated_Image_j8s00nj8s00nj8s0.jpeg
{
"image_quality": {
"overall_score": 2.7366
}
}
Skin Surface Segmentation
Model Classification: 🛠️ Non-Clinical Model
Purpose: Binary segmentation to isolate skin regions from background.
Output Specifications
Output JSON Structure:
{
"image": "iVBORw0KGgoAAAANSUhEUgAABRAAAALYCAIAAACL4kmEAAEAAE",
"mask": "iVBORw0KGgoAAAANSUhEUgAABRAAAALYCAAAAAAh64EPAAAKmk",
"probability_mask": "iVBORw0KGgoAAAANSUhEUgAABRAAAALYCAAAAAAh64EPAAAhxk",
"skin_percentage": 0.83
}
Performance: Mean IoU ≥ 0.83; F1-score ≥ 0.84
Configuration File: skin_segmentation_config.json
Output JSON Structure:
s3://legit-health-plus/test-images/SkinSurfaceSegmentation/1.jpg
{'image': 'iVBORw0KGgoAAAANSUhEUgAABRAAAALYCAIAAACL4kmEAAEAAE',
'mask': 'iVBORw0KGgoAAAANSUhEUgAABRAAAALYCAAAAAAh64EPAAAKmk',
'probability_mask': 'iVBORw0KGgoAAAANSUhEUgAABRAAAALYCAAAAAAh64EPAAAhxk',
'skin_percentage': 0.83}
Body Surface Segmentation
Model Classification: 🛠️ Non-Clinical Model
Purpose: Segments body surface for BSA calculations in severity scoring (PASI, EASI).
Output Specifications
Output JSON Structure:
{
"image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"mask": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"probability_map": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQ...",
"percentage": 53.62202037464488
}
Performance: Specified in R-TF-028-005 AI Development Report: Body Surface Segmentation
Head Detection
Purpose: Object detection for automated head localization to support hair loss quantification and image standardization workflows.
Input Specifications
| 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/test-images/HeadDetection/1.jpg
{'detections': [{'confidence': 0.91, 'box': [51, 28, 183, 200]},
{'confidence': 0.87, 'box': [776, 85, 902, 258]},
{'confidence': 0.86, 'box': [495, 129, 611, 288]},
{'confidence': 0.78, 'box': [978, 154, 1112, 337]},
{'confidence': 0.71, 'box': [638, 43, 751, 208]},
{'confidence': 0.67, 'box': [128, 213, 273, 380]},
{'confidence': 0.46, 'box': [273, 176, 395, 345]}],
'count': 7}
Technical Integration Details
API Orchestration Logic
The backend service must orchestrate model calls as follows:
1. RECEIVE image via API endpoint
2. PREPROCESSING PIPELINE
├── Domain Validation → Route or reject
├── Image Quality Assessment → Accept or request retake
└── Skin Surface Segmentation → Extract ROI
3. CLINICAL ANALYSIS (parallel execution where possible)
├── ICD Category Distribution
│ └── Binary Indicator Derivation (post-processing)
├── Visual Sign Intensity Models (as applicable)
├── Lesion Detection Models (as applicable)
└── Pattern Identification Models (as applicable)
4. AGGREGATE results into structured JSON response
5. RETURN complete response (API is stateless)
Model Execution Order
| Priority | Model(s) | Dependency |
|---|---|---|
| 1 | Domain Validation | None |
| 2 | Image Quality Assessment | Domain = skin |
| 3 | Skin Surface Segmentation | Quality ≥ 6 |
| 4 | ICD Category Distribution | Skin ROI available |
| 5 | Binary Indicators | ICD distribution complete |
| 6 | All other clinical models | Parallel execution |
Error Handling
| Condition | Action |
|---|---|
| Domain = non_skin | Return error: "Invalid image domain" |
| Quality < 4 | Return warning with retake guidance |
| Skin ROI < 10% | Return error: "Insufficient skin visible" |
| Model inference failure | Return partial results with error flag |
Integration Verification Package
To ensure that AI models produce identical outputs when integrated into the target software environment as they did during development and validation, this release includes an Integration Verification Package for each model, as required by GP-028.
Purpose
The Integration Verification Package serves to:
- Verify Integration Correctness: Confirm that models are correctly integrated without alterations to their inference behavior.
- Detect Environment Discrepancies: Identify any differences in preprocessing, numerical precision, or runtime configuration that could affect model outputs.
- Ensure Reproducibility: Provide objective evidence that the integrated model produces the same outputs as the validated development model.
- Support Regulatory Compliance: Demonstrate traceability between development validation and deployed system verification per IEC 62304 and MDR requirements.
Package Contents
For each AI model in this release, the Integration Verification Package includes:
Reference Test Images
A curated subset of images from the model's test set, stored in a secure, version-controlled location:
| Model 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: JD-009
- Reviewer: JD-009
- Approver: JD-005