# roopansha/industrial-ai-surface-inspection architecture

> Architecture diagram of the GitHub repository roopansha/industrial-ai-surface-inspection, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/roopansha/industrial-ai-surface-inspection
- Repository: https://github.com/roopansha/industrial-ai-surface-inspection

## Overview

Industrial AI Surface Inspection classifies NEU-DET steel images into six defect categories. Its user-facing workflow is image submission, model inference, class probabilities and confidence, then a Grad-CAM explanation and inspection result. The repository also contains dataset preparation, ResNet18 and EfficientNet-B0 training (including stratified cross-validation and two-stage fine-tuning), and model evaluation. The Streamlit app’s implementation was not sampled, so its connection to inference is unverified; several training and evaluation capabilities are documented in the README but their source was not sampled.

Main entry points: [`src/models.py`](https://github.com/roopansha/industrial-ai-surface-inspection/blob/main/src/models.py) (CNN model builders), [`src/datasets.py`](https://github.com/roopansha/industrial-ai-surface-inspection/blob/main/src/datasets.py) (Image datasets and loaders), [`src/cv_data_split.py`](https://github.com/roopansha/industrial-ai-surface-inspection/blob/main/src/cv_data_split.py) (Image loading and folds), [`src/inference.py`](https://github.com/roopansha/industrial-ai-surface-inspection/blob/main/src/inference.py) (Image inference)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_data["Data preparation"]
  node_split["Image loading and folds<br/>[cv_data_split.py]"]
  node_loaders["Image datasets and loaders<br/>[datasets.py]"]
end

subgraph group_training["Model training"]
  node_models["CNN model builders<br/>[models.py]"]
  node_resnet_training["ResNet18 training<br/>[train.py]"]
  node_efficientnet_cv["EfficientNet CV training"]
  node_efficientnet_stage2["EfficientNet fine-tuning"]
  node_final_training["Final EfficientNet training"]
end

subgraph group_assessment["Evaluation and explainability"]
  node_final_evaluation["Final test evaluation<br/>[evaluate_final.py]"]
  node_gradcam_tool["Grad-CAM analysis"]
end

subgraph group_runtime["Inspection runtime"]
  node_app["Inspection interface<br/>[streamlit_app.py]"]
  node_inference["Image inference<br/>[inference.py]"]
  node_explanation["Grad-CAM explanation<br/>[inference.py]"]
  node_result["Classification result"]
  node_visualization["Inspection visualization"]
end

node_inspector(("Inspector"))
node_image_data[("NEU-DET images")]

node_inspector -.->|"submits image"| node_app
node_app -.->|"requests prediction"| node_inference
node_image_data -->|"provides images"| node_split
node_split -->|"supplies paths and labels"| node_loaders
node_split -->|"supplies folds"| node_resnet_training
node_split -->|"supplies folds"| node_efficientnet_cv
node_split -->|"supplies folds"| node_efficientnet_stage2
node_split -->|"supplies image paths"| node_final_training
node_loaders -->|"provides batches"| node_resnet_training
node_loaders -->|"provides batches"| node_efficientnet_cv
node_loaders -->|"provides batches"| node_efficientnet_stage2
node_loaders -->|"provides batches"| node_final_training
node_models -->|"builds model"| node_resnet_training
node_models -->|"builds model"| node_efficientnet_cv
node_models -->|"builds model"| node_efficientnet_stage2
node_models -->|"builds model"| node_final_training
node_models -->|"builds model"| node_inference
node_final_evaluation -->|"uses model builder"| node_models
node_final_evaluation -->|"uses dataset"| node_loaders
node_gradcam_tool -->|"builds model"| node_models
node_gradcam_tool -->|"loads images"| node_loaders
node_inference -->|"generates heatmap"| node_explanation
node_inference -->|"returns prediction and probabilities"| node_result
node_explanation -->|"renders overlay"| node_visualization
node_inference -->|"saves visualization"| node_visualization

click node_split "https://github.com/roopansha/industrial-ai-surface-inspection/blob/main/src/cv_data_split.py"
click node_loaders "https://github.com/roopansha/industrial-ai-surface-inspection/blob/main/src/datasets.py"
click node_models "https://github.com/roopansha/industrial-ai-surface-inspection/blob/main/src/models.py"
click node_resnet_training "https://github.com/roopansha/industrial-ai-surface-inspection/blob/main/src/train.py"
click node_efficientnet_cv "https://github.com/roopansha/industrial-ai-surface-inspection/blob/main/src/train_efficientnet_cv.py"
click node_efficientnet_stage2 "https://github.com/roopansha/industrial-ai-surface-inspection/blob/main/src/train_efficientnet_stage2.py"
click node_final_training "https://github.com/roopansha/industrial-ai-surface-inspection/blob/main/src/train_final_efficientnet.py"
click node_final_evaluation "https://github.com/roopansha/industrial-ai-surface-inspection/blob/main/src/evaluate_final.py"
click node_gradcam_tool "https://github.com/roopansha/industrial-ai-surface-inspection/blob/main/src/gradcam_efficientnet.py"
click node_app "https://github.com/roopansha/industrial-ai-surface-inspection/blob/main/app/streamlit_app.py"
click node_inference "https://github.com/roopansha/industrial-ai-surface-inspection/blob/main/src/inference.py"
click node_explanation "https://github.com/roopansha/industrial-ai-surface-inspection/blob/main/src/inference.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_split,node_loaders toneBlue
class node_models,node_resnet_training,node_efficientnet_cv,node_efficientnet_stage2,node_final_training,node_image_data toneAmber
class node_final_evaluation,node_gradcam_tool toneMint
class node_app,node_inference,node_explanation,node_result,node_visualization toneRose
class node_inspector toneIndigo
```

## Components

### Data preparation

- [Image loading and folds](https://github.com/roopansha/industrial-ai-surface-inspection/blob/main/src/cv_data_split.py): `src/cv_data_split.py`
- [Image datasets and loaders](https://github.com/roopansha/industrial-ai-surface-inspection/blob/main/src/datasets.py): `src/datasets.py`

### Model training

- [CNN model builders](https://github.com/roopansha/industrial-ai-surface-inspection/blob/main/src/models.py): `src/models.py`
- [ResNet18 training](https://github.com/roopansha/industrial-ai-surface-inspection/blob/main/src/train.py): `src/train.py`
- [EfficientNet CV training](https://github.com/roopansha/industrial-ai-surface-inspection/blob/main/src/train_efficientnet_cv.py): `src/train_efficientnet_cv.py`
- [EfficientNet fine-tuning](https://github.com/roopansha/industrial-ai-surface-inspection/blob/main/src/train_efficientnet_stage2.py): `src/train_efficientnet_stage2.py`
- [Final EfficientNet training](https://github.com/roopansha/industrial-ai-surface-inspection/blob/main/src/train_final_efficientnet.py): `src/train_final_efficientnet.py`

### Evaluation and explainability

- [Final test evaluation](https://github.com/roopansha/industrial-ai-surface-inspection/blob/main/src/evaluate_final.py): `src/evaluate_final.py`
- [Grad-CAM analysis](https://github.com/roopansha/industrial-ai-surface-inspection/blob/main/src/gradcam_efficientnet.py): `src/gradcam_efficientnet.py`

### Inspection runtime

- [Inspection interface](https://github.com/roopansha/industrial-ai-surface-inspection/blob/main/app/streamlit_app.py): `app/streamlit_app.py`
- [Image inference](https://github.com/roopansha/industrial-ai-surface-inspection/blob/main/src/inference.py): `src/inference.py`
- [Grad-CAM explanation](https://github.com/roopansha/industrial-ai-surface-inspection/blob/main/src/inference.py): `src/inference.py`
- **Classification result**
- **Inspection visualization**

### Other components

- **Inspector**
- **NEU-DET images**

## Connections

- Inspector → Inspection interface: submits image
- Inspection interface → Image inference: requests prediction
- NEU-DET images → Image loading and folds: provides images (evidence: `src/cv_data_split.py`)
- Image loading and folds → Image datasets and loaders: supplies paths and labels (evidence: `src/train_efficientnet_cv.py`)
- Image loading and folds → ResNet18 training: supplies folds (evidence: `src/train.py`)
- Image loading and folds → EfficientNet CV training: supplies folds (evidence: `src/train_efficientnet_cv.py`)
- Image loading and folds → EfficientNet fine-tuning: supplies folds (evidence: `src/train_efficientnet_stage2.py`)
- Image loading and folds → Final EfficientNet training: supplies image paths (evidence: `src/train_final_efficientnet.py`)
- Image datasets and loaders → ResNet18 training: provides batches (evidence: `src/train.py`)
- Image datasets and loaders → EfficientNet CV training: provides batches (evidence: `src/train_efficientnet_cv.py`)
- Image datasets and loaders → EfficientNet fine-tuning: provides batches (evidence: `src/train_efficientnet_stage2.py`)
- Image datasets and loaders → Final EfficientNet training: provides batches (evidence: `src/train_final_efficientnet.py`)
- CNN model builders → ResNet18 training: builds model (evidence: `src/train.py`)
- CNN model builders → EfficientNet CV training: builds model (evidence: `src/train_efficientnet_cv.py`)
- CNN model builders → EfficientNet fine-tuning: builds model (evidence: `src/train_efficientnet_stage2.py`)
- CNN model builders → Final EfficientNet training: builds model (evidence: `src/train_final_efficientnet.py`)
- CNN model builders → Image inference: builds model (evidence: `src/inference.py`)
- Final test evaluation → CNN model builders: uses model builder (evidence: `README.md`)
- Final test evaluation → Image datasets and loaders: uses dataset (evidence: `README.md`)
- Grad-CAM analysis → CNN model builders: builds model (evidence: `src/gradcam_efficientnet.py`)
- Grad-CAM analysis → Image datasets and loaders: loads images (evidence: `src/gradcam_efficientnet.py`)
- Image inference → Grad-CAM explanation: generates heatmap (evidence: `README.md`)
- Image inference → Classification result: returns prediction and probabilities (evidence: `README.md`)
- Grad-CAM explanation → Inspection visualization: renders overlay (evidence: `README.md`)
- Image inference → Inspection visualization: saves visualization (evidence: `README.md`)
